MON Price: $0.018846 (+2.88%)

Contract

0xE1d9F9b2EefE46d734Bbb5803ADf4E6e28D079c2

Overview

MON Balance

Monad Chain LogoMonad Chain LogoMonad Chain Logo38 wei

MON Value

Less Than $0.01 (@ $0.02/MON)

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve500307102026-01-20 22:21:173 days ago1768947677IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve500307102026-01-20 22:21:173 days ago1768947677IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve500307102026-01-20 22:21:173 days ago1768947677IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve500307102026-01-20 22:21:173 days ago1768947677IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve500307102026-01-20 22:21:173 days ago1768947677IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve499481462026-01-20 13:06:234 days ago1768914383IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve499481462026-01-20 13:06:234 days ago1768914383IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve499461772026-01-20 12:53:044 days ago1768913584IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve499461772026-01-20 12:53:044 days ago1768913584IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve499461772026-01-20 12:53:044 days ago1768913584IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve499461772026-01-20 12:53:044 days ago1768913584IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve499457642026-01-20 12:50:184 days ago1768913418IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve499457632026-01-20 12:50:184 days ago1768913418IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve499457632026-01-20 12:50:184 days ago1768913418IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve499457632026-01-20 12:50:184 days ago1768913418IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve499451152026-01-20 12:45:524 days ago1768913152IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve499451152026-01-20 12:45:524 days ago1768913152IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve499451152026-01-20 12:45:524 days ago1768913152IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve495834472026-01-18 20:11:415 days ago1768767101IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve495834472026-01-18 20:11:415 days ago1768767101IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve495834472026-01-18 20:11:415 days ago1768767101IN
0xE1d9F9b2...e28D079c2
0 MON0.0239934300
Approve477695512026-01-10 9:51:4714 days ago1768038707IN
0xE1d9F9b2...e28D079c2
0 MON0.009189102.10004247
Approve424504222025-12-16 16:55:2939 days ago1765904129IN
0xE1d9F9b2...e28D079c2
0 MON0.00665412104
Approve411447122025-12-10 15:06:2245 days ago1765379182IN
0xE1d9F9b2...e28D079c2
0 MON0.00653102.06
Transfer410676502025-12-10 6:29:4745 days ago1765348187IN
0xE1d9F9b2...e28D079c2
0 MON0.051102
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
499481622026-01-20 13:06:304 days ago1768914390
0xE1d9F9b2...e28D079c2
17.35737566 MON
499481622026-01-20 13:06:304 days ago1768914390
0xE1d9F9b2...e28D079c2
52.072127 MON
499481622026-01-20 13:06:304 days ago1768914390
0xE1d9F9b2...e28D079c2
69.42950267 MON
499481622026-01-20 13:06:304 days ago1768914390
0xE1d9F9b2...e28D079c2
18.91766501 MON
499481622026-01-20 13:06:304 days ago1768914390
0xE1d9F9b2...e28D079c2
56.75299505 MON
499481622026-01-20 13:06:304 days ago1768914390
0xE1d9F9b2...e28D079c2
75.67066007 MON
499464372026-01-20 12:54:494 days ago1768913689
0xE1d9F9b2...e28D079c2
21.35006062 MON
499464372026-01-20 12:54:494 days ago1768913689
0xE1d9F9b2...e28D079c2
64.05018187 MON
499464372026-01-20 12:54:494 days ago1768913689
0xE1d9F9b2...e28D079c2
85.4002425 MON
499464372026-01-20 12:54:494 days ago1768913689
0xE1d9F9b2...e28D079c2
22.85412957 MON
499464372026-01-20 12:54:494 days ago1768913689
0xE1d9F9b2...e28D079c2
68.56238872 MON
499464372026-01-20 12:54:494 days ago1768913689
0xE1d9F9b2...e28D079c2
91.41651829 MON
499463412026-01-20 12:54:104 days ago1768913650
0xE1d9F9b2...e28D079c2
24.33125238 MON
499463412026-01-20 12:54:104 days ago1768913650
0xE1d9F9b2...e28D079c2
72.99375715 MON
499463412026-01-20 12:54:104 days ago1768913650
0xE1d9F9b2...e28D079c2
97.32500953 MON
499463292026-01-20 12:54:054 days ago1768913645
0xE1d9F9b2...e28D079c2
26.03758792 MON
499463292026-01-20 12:54:054 days ago1768913645
0xE1d9F9b2...e28D079c2
78.11276378 MON
499463292026-01-20 12:54:054 days ago1768913645
0xE1d9F9b2...e28D079c2
104.15035171 MON
499462072026-01-20 12:53:164 days ago1768913596
0xE1d9F9b2...e28D079c2
30.67220895 MON
499462072026-01-20 12:53:164 days ago1768913596
0xE1d9F9b2...e28D079c2
92.01662685 MON
499462072026-01-20 12:53:164 days ago1768913596
0xE1d9F9b2...e28D079c2
122.68883581 MON
499459392026-01-20 12:51:284 days ago1768913488
0xE1d9F9b2...e28D079c2
32.98316703 MON
499459392026-01-20 12:51:284 days ago1768913488
0xE1d9F9b2...e28D079c2
98.94950111 MON
499459392026-01-20 12:51:284 days ago1768913488
0xE1d9F9b2...e28D079c2
131.93266815 MON
499458662026-01-20 12:50:594 days ago1768913459
0xE1d9F9b2...e28D079c2
36.90296877 MON
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MIT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at monadscan.com on 2025-11-28
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.5;

/**
 * Standard SafeMath, stripped down to just add/sub/mul/div
 */
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

/**
 * BEP20 standard interface.
 */
interface IBEP20 {
    function totalSupply() 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);
}

/**
 * Allows for contract ownership for multiple adressess
 */
abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address account) public onlyOwner {
        authorizations[account] = true;
    }

    /**
     * Remove address authorization. Owner only
     */
    function unauthorize(address account) public onlyOwner {
        authorizations[account] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address authorization status
     */
    function isAuthorized(address account) public view returns (bool) {
        return authorizations[account];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable account) public onlyOwner {
        owner = account;
        authorizations[account] = true;
        emit OwnershipTransferred(account);
    }

    event OwnershipTransferred(address owner);
}

/* Standard IDEXFactory */
interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

/* Standard IDEXRouter */
interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    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;
}

/* Interface for the DividendDistributor */
interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    // setRewardToken is removed as we now distribute native ETH
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
    // Function to let the distributor accept native currency
    function receiveETH() external payable;
    function rescueETH() external;
}

/* Minimal interface to read token deployer from token contract (used by distributor) */
interface Idistrohelper {
    function tokenDeployer() external view returns (address);
}

/**
 * Our DividendDistributor contract responsible for distributing the Native ETH (e.g., BNB)
 */
contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 60 * 60; // 1 hour
    uint256 public minDistribution = 1 * (10 ** 12); // Minimum amount of ETH to distribute (0.000001 ETH)

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    // The router is no longer needed since we are not swapping ETH to an ERC20 token.
    constructor (address) { 
        _token = msg.sender;
    }

    // New function to receive native currency (ETH/BNB) sent from swapBack
    function receiveETH() external payable override onlyToken {
        deposit();
    }

    // Deposit function simplified for native ETH distribution
    function deposit() public payable override onlyToken {
        uint256 amount = msg.value; // The ETH sent from swapBack()

        // Guard against division by zero if there are no shares
        if (totalShares == 0) {
            totalDividends = totalDividends.add(amount);
            return;
        }

        // No conversion to an ERC20 token needed. Update dividend variables based on received ETH value.
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        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);
    }

    function process(uint256 gas) external override onlyToken {
        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++;
        }
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            
            // Transfer native ETH (BNB) directly
            // Effects before interaction to reduce reentrancy risks
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);

            (bool success, ) = payable(shareholder).call{value: amount}("");
            require(success, "ETH transfer failed");
        }
    }
    
    function claimDividend(address shareholder) external onlyToken{
        distributeDividend(shareholder);
    }

    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();
    }

    // -------------------------------------------------------------
    // Rescue leftover ETH to the token deployer wallet (SAFE: Option A)
    // Only callable by token contract (onlyToken). The distributor reads
    // the deployer from the token contract and forwards the entire balance.
    // -------------------------------------------------------------
    function rescueETH() external override onlyToken {
        uint256 amount = address(this).balance;
        require(amount > 0, "No ETH to rescue");

        // Read deployer address from token contract (safe lookup)
        address deployer = Idistrohelper(_token).tokenDeployer();
        require(deployer != address(0), "Invalid deployer");

        (bool success, ) = payable(deployer).call{value: amount}("");
        require(success, "Rescue failed");
    }
}

/* Token contract */
contract MIT is IBEP20, Auth {
    using SafeMath for uint256;

    // Addresses
    // The USDC address is removed as rewards are now native ETH
    address WETH = 0x3bd359C1119dA7Da1D913D1C4D2B7c461115433A;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    
    address TOKENDISTRIBUTOR;

    // These are owner by default
    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;
    address public devFeeReceiver;
    // Name and symbol
    string constant _name = "Monad Island Treasury";
    string constant _symbol = "$MIT";
    uint8 constant _decimals = 18;

    // Total supply
    uint256 _totalSupply = 1000000000 * (10 ** _decimals);

    // Max wallet and TX
    uint256 public _maxBuyTxAmount = _totalSupply * 300 / 10000; // 3%
    uint256 public _maxSellTxAmount = _totalSupply * 300 / 10000; // 3%
    uint256 public _maxWalletToken = ( _totalSupply * 300 ) / 10000; // 3%

    // Mappings
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isTimelockExempt;
    mapping (address => bool) isDividendExempt;

    // Buy Fees
    uint256 liquidityFeeBuy = 0;
    uint256 reflectionFeeBuy = 600;
    uint256 marketingFeeBuy = 200;
    uint256 totalFeeBuy = 800; 
    
    // Sell fees
    uint256 liquidityFeeSell = 0;
    uint256 reflectionFeeSell = 600;
    uint256 marketingFeeSell = 200;
    uint256 totalFeeSell = 800;

    // Fee variables
    uint256 liquidityFee;
    uint256 devFee;
    uint256 reflectionFee;
    uint256 marketingFee;
    uint256 totalFee;
    uint256 feeDenominator = 10000;

    // Sell amount of tokens when a sell takes place
    uint256 public swapThreshold = _totalSupply * 20 / 10000; // 0.2% of supply

    // Liquidity
    uint256 targetLiquidity = 40;
    uint256 targetLiquidityDenominator = 100;

    DividendDistributor distributor;
    uint256 distributorGas = 500000;

    // Cooldown & timer functionality
    // NOTE: Solidity uses Unix timestamp so 1 is 1 second.
    bool public buyCooldownEnabled = true;
    uint8 public cooldownTimerInterval = 5;
    mapping (address => uint) private cooldownTimer;

    // Other variables
    IDEXRouter public router;
    address public pair;
    uint256 public launchedAt;
    bool public tradingOpen = false;
    bool public swapEnabled = true;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    // ADDED: deployer address saved at deployment (the wallet that deployed the token)
    address public tokenDeployer;

    /* Token constructor */
    constructor () Auth(msg.sender) {
        // Assuming this router address and WETH address are correct for the target chain
        router = IDEXRouter(0x4B2ab38DBF28D31D467aA8993f6c2585981D6804);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        // Pass 0x0 to the distributor as it no longer needs the router address
        distributor = new DividendDistributor(address(0)); 
        
        // The token needs to approve the distributor to spend the reflection portion of WETH/ETH
        // This is no longer required because we send native ETH via {value: ...}

        // Should be the owner wallet/token distributor
        TOKENDISTRIBUTOR = msg.sender;
        address _presaler = msg.sender;
        isFeeExempt[_presaler] = true;
        isTxLimitExempt[_presaler] = true;
        isTxLimitExempt[DEAD] = true;
        isFeeExempt[DEAD] = true;
        isFeeExempt[0x2580253c3Be524651265A777DB675D5Ce88a41C7] = true;
        
        // No timelock for these people
        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;
        
        
        // Exempt from dividend
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[address(distributor)] = true; // Exclude distributor itself

        // Set the marketing and liq receiver to the owner as default
        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = 0x2580253c3Be524651265A777DB675D5Ce88a41C7;
    

        _balances[_presaler] = _totalSupply;
        emit Transfer(address(0), _presaler, _totalSupply);

        // ADDED: store deployer wallet
        tokenDeployer = msg.sender;
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    // setting the max wallet in percentages
    // NOTE: 1% = 100
    function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() {
        _maxWalletToken = _totalSupply.mul(maxWallPercent).div(10000);
    }

    // Set the tokendistributor, exempt for everything and able to SEND before launch.
    function setTokenDistributor(address _tokenDistributor) external authorized{
        TOKENDISTRIBUTOR = _tokenDistributor;
        isFeeExempt[_tokenDistributor] = true;
        isTxLimitExempt[_tokenDistributor] = true;
        isTimelockExempt[_tokenDistributor] = true;
    }

    // Main transfer function
    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        // Check if trading is enabled
        if(!authorizations[sender] && !authorizations[recipient] && TOKENDISTRIBUTOR != sender){
            require(tradingOpen,"Trading not enabled yet");
        }

        // Check if buying or selling
       
        bool isBuy = sender == pair;
        bool isSell = recipient == pair;
       
        // Set buy or sell fees
        setCorrectFees(isSell);


        // Check max wallet
        checkMaxWallet(sender, recipient, amount);
    
        // Buycooldown 
        checkBuyCooldown(sender, recipient);

        // Checks maxTx
        checkTxLimit(sender, amount, recipient, isSell);

        // Check if we should do the swapback
        if(shouldSwapBack()){ swapBack(); }

         // NEW: wallet-to-wallet → no fees
        if (!isSell && !isBuy) {
         
         liquidityFee = 0;
         reflectionFee = 0;
         marketingFee = 0;
         totalFee = 0;
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try distributor.setShare(recipient, _balances[recipient]) {} catch {} 
        }

        try distributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    // Do a normal transfer
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    // Set the correct fees for buying or selling
    function setCorrectFees(bool isSell) internal {
        if(isSell){
            liquidityFee = liquidityFeeSell;
            reflectionFee = reflectionFeeSell;
            marketingFee = marketingFeeSell;
            totalFee = totalFeeSell;
        } else {
            liquidityFee = liquidityFeeBuy;
            reflectionFee = reflectionFeeBuy;
            marketingFee = marketingFeeBuy;
            totalFee = totalFeeBuy;
        }
    }

    // Check for maxTX
    function checkTxLimit(address sender, uint256 amount, address recipient, bool isSell) internal view {
        if (recipient != owner){
            if(isSell){
                require(amount <= _maxSellTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");
            } else {
                require(amount <= _maxBuyTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");
            }
        }
    }

    // Check buy cooldown
    function checkBuyCooldown(address sender, address recipient) internal {
        if (sender == pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]) {
            require(cooldownTimer[recipient] < block.timestamp,"Please wait between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }
    }

    // Check maxWallet
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if (!authorizations[sender] && !isTxLimitExempt[sender] && !isTxLimitExempt[recipient] && recipient != owner && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != autoLiquidityReceiver && recipient != devFeeReceiver){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
        }
    }

    // Check if sender is not feeExempt
    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    // Take the normal total Fee
    function takeFee(address sender, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = amount.mul(totalFee).div(feeDenominator);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    // Check if we should sell tokens
    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    // Enable cooldown between trades
    function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }

    // Main swapback to sell tokens for WETH
    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH; // WETH is the native wrapped token

        uint256 balanceBefore = address(this).balance;

        // 1. Swap the tokens for native ETH
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );
        uint256 amountWETH = address(this).balance.sub(balanceBefore);
        uint256 totalWETHFee = totalFee.sub(dynamicLiquidityFee.div(2)); // Total fee going into WETH/ETH
        uint256 amountWETHLiquidity = amountWETH.mul(dynamicLiquidityFee).div(totalWETHFee).div(2);
        uint256 amountWETHReflection = amountWETH.mul(reflectionFee).div(totalWETHFee);
        uint256 amountWETHMarketing = amountWETH.mul(marketingFee).div(totalWETHFee);
       


        // 2. Distribute ETH
        // Send the reflection ETH to the distributor
        try distributor.receiveETH{value: amountWETHReflection}() {} catch {}
        
        // Send the marketing and dev fees
        (bool successMarketing, /* bytes memory data */) = payable(marketingFeeReceiver).call{value: amountWETHMarketing, gas: 30000}("");
        require(successMarketing, "marketing receiver rejected ETH transfer");
       

        // 3. Add Liquidity
        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountWETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountWETHLiquidity, amountToLiquify);
        }
    }

    // Buy amount of tokens with WETH from the contract
    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }


    // Check when the token is launched
    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    // Set the launchedAt to token launch
    function launch() internal {
        launchedAt = block.number;
    }

    // Set max buy TX 
    function setBuyTxLimitInPercent(uint256 maxBuyTxPercent) external onlyOwner {
        _maxBuyTxAmount = _totalSupply.mul(maxBuyTxPercent).div(10000);
    }

    // Set max sell TX 
    function setSellTxLimitInPercent(uint256 maxSellTxPercent) external onlyOwner {
        _maxSellTxAmount = _totalSupply.mul(maxSellTxPercent).div(10000);
    }

    // Exempt from dividend
    function setIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

    // Exempt from fee
    function setIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

    // Exempt from max TX
    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }

    // Exempt from buy CD
    function setIsTimelockExempt(address holder, bool exempt) external authorized {
        isTimelockExempt[holder] = exempt;
    }

    function setFullWhitelist(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
        isFeeExempt[holder] = exempt;
        isTimelockExempt[holder] = exempt;
    }


    // Set our buy fees
    function setBuyFees(uint256 _liquidityFeeBuy, uint256 _reflectionFeeBuy, uint256 _marketingFeeBuy, uint256 _feeDenominator) external onlyOwner {
        liquidityFeeBuy = _liquidityFeeBuy;
        reflectionFeeBuy = _reflectionFeeBuy;
        marketingFeeBuy = _marketingFeeBuy;
        totalFeeBuy = _liquidityFeeBuy.add(_reflectionFeeBuy).add(_marketingFeeBuy);
        feeDenominator = _feeDenominator;
    }

    // Set our sell fees
    function setSellFees(uint256 _liquidityFeeSell, uint256 _reflectionFeeSell, uint256 _marketingFeeSell, uint256 _feeDenominator) external onlyOwner {
        liquidityFeeSell = _liquidityFeeSell;
        reflectionFeeSell = _reflectionFeeSell;
        marketingFeeSell = _marketingFeeSell;

        totalFeeSell = _liquidityFeeSell.add(_reflectionFeeSell).add(_marketingFeeSell);
        feeDenominator = _feeDenominator;
    }

    // Set the marketing and liquidity receivers
    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
       
    }

    

    // Set swapBack settings
    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _totalSupply * _amount / 10000; 
    }

    // Set target liquidity
    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    // Save spare ETH from CA
    function manualSend() external {
    require(msg.sender == tokenDeployer, "Not token deployer");

    uint256 contractETHBalance = address(this).balance;
    payable(tokenDeployer).transfer(contractETHBalance);
    }
    
    // Set criteria for auto distribution
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }
    
    // Let people claim there dividend
    function claimDividend() external {
        // The token calls the distributor's function, acting as a middleman for the user
        // Note: The original code intended for the user to call the distributor directly, 
        // but since we keep the original function signature, we'll route it via the token.
        // However, since the distributor's distributeDividend is internal, we must call 
        // the claimDividend function in the distributor, which must be made public/external 
        // and authorized to be called by the token.
        // Since the original claimDividend in the distributor was onlyToken, we must fix this in the distributor.
        // For simplicity and to use the current `claimDividend` function of the distributor, 
        // which the token *is* authorized to call:
        distributor.claimDividend(msg.sender);
    }

    // The setRewardToken function is removed as rewards are now native ETH
    
    // Check how much earnings are unpaid
    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        return distributor.getUnpaidEarnings(shareholder);
    } 

    // Set gas for distributor
    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
    
    // Get the circulatingSupply
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    // Get the liquidity backing
    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    // Get if we are over liquified or not
    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }
    
    event AutoLiquify(uint256 amountWETH, uint256 amountBOG);
    
    // -------------------------------------------------------------
    // ADDED: Rescue unused distributor ETH to the token deployer
    // Only callable by the original deployer wallet (tokenDeployer).
    // -------------------------------------------------------------
    function rescueDistributorETH() external {
        require(msg.sender == tokenDeployer, "Only deployer");
        distributor.rescueETH();
    }

    
}

Contract Security Audit

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":"uint256","name":"amountWETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","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":"_maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","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":"account","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","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":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"rescueDistributorETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyTxPercent","type":"uint256"}],"name":"setBuyTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFullWhitelist","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":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSellTxPercent","type":"uint256"}],"name":"setSellTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenDistributor","type":"address"}],"name":"setTokenDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tokenDeployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b0319908116733bd359c1119da7da1d913d1c4d2b7c461115433a1790915560038054821661dead179055600480549091169055620000506012600a6200058b565b6200006090633b9aca006200064c565b60095561271060095461012c6200007891906200064c565b6200008491906200051f565b600a5561271060095461012c6200009c91906200064c565b620000a891906200051f565b600b5561271060095461012c620000c091906200064c565b620000cc91906200051f565b600c55600060135561025860145560c8601555610320601655600060175561025860185560c8601955610320601a5561271060205561271060095460146200011591906200064c565b6200012191906200051f565b602155602860225560646023556207a1206025556026805461050161ffff1991821617909155602b80549091166101001790553480156200016157600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff191690921790915560288054734b2ab38dbf28d31d467aa8993f6c2585981d6804931683179055825163c45a015560e01b81529251919263c45a01559260048083019392829003018186803b158015620001e357600080fd5b505afa158015620001f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021e9190620004ed565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b1580156200026b57600080fd5b505af115801562000280573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a69190620004ed565b602980546001600160a01b0319166001600160a01b03928316179055306000908152600e60209081526040808320602854909416835292905281812060001990559051620002f490620004df565b6001600160a01b039091168152602001604051809103906000f08015801562000321573d6000803e3d6000fd5b50602480546001600160a01b039283166001600160a01b0319918216178255600580548216339081179091556000818152600f60208181526040808420805460ff199081166001908117909255601084528286208054821683179055600380548b168752838720805483168417905580548b16875294845282862080548216831790557f46d85a7d5a48f4a465e2857a614cfe82e753b2b7ebb58ea2aff767d29b47c270805482168317905586865260118452828620805482168317905584548a16865282862080548216831790553080875283872080548316841790556029548b16875260128552838720805483168417905586528286208054821683179055935489168552818520805485168217905596549097168352868320805490921690951790556006805484168317905560078054909316732580253c3be524651265a777db675d5ce88a41c717909255600954818352600d909352838220839055925183927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620004b591815260200190565b60405180910390a350602b80546301000000600160b81b0319163363010000000217905562000684565b610faa806200314383390190565b6000602082840312156200050057600080fd5b81516001600160a01b03811681146200051857600080fd5b9392505050565b6000826200053d57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620005835781600019048211156200056757620005676200066e565b808516156200057557918102915b93841c939080029062000547565b509250929050565b60006200051860ff841683600082620005a75750600162000646565b81620005b65750600062000646565b8160018114620005cf5760028114620005da57620005fa565b600191505062000646565b60ff841115620005ee57620005ee6200066e565b50506001821b62000646565b5060208310610133831016604e8410600b84101617156200061f575081810a62000646565b6200062b838362000542565b80600019048211156200064257620006426200066e565b0290505b92915050565b60008160001904831182151516156200066957620006696200066e565b500290565b634e487b7160e01b600052601160045260246000fd5b612aaf80620006946000396000f3fe60806040526004361061036f5760003560e01c806382bf293c116101c6578063dd62ed3e116100f7578063f2fde38b11610095578063f84ba65d1161006f578063f84ba65d14610a4d578063f887ea4014610a6d578063fe9fbb8014610a8d578063ffb54a9914610aad57600080fd5b8063f2fde38b146109f8578063f429389014610a18578063f708a64f14610a2d57600080fd5b8063e086299a116100d1578063e086299a1461098e578063e96fada2146109a3578063f0b37c04146109c3578063f0fc6bca146109e357600080fd5b8063dd62ed3e14610908578063df20fd491461094e578063df4a76c51461096e57600080fd5b8063a9059cbb11610164578063ca33e64c1161013e578063ca33e64c14610892578063cf4be394146108b2578063d51ed1c8146108c8578063dab84ee7146108e857600080fd5b8063a9059cbb1461083c578063b6a5d7de1461085c578063bf56b3711461087c57600080fd5b80639d1944f5116101a05780639d1944f5146107bc578063a4b45c00146107dc578063a6b06a27146107fc578063a8aa1b311461081c57600080fd5b806382bf293c14610751578063893d20e81461077157806395d89b411461078f57600080fd5b80632f54bf6e116102a0578063658d4b7f1161023e57806370a082311161021857806370a08231146106c6578063722b62ad146106fc57806378109e541461071b5780637affa29b1461073157600080fd5b8063658d4b7f146106675780636c5b2855146106875780636ddd1713146106a757600080fd5b806338280e6b1161027a57806338280e6b146105ed57806350db71fb1461060d578063571ac8b01461062d578063617fe0ed1461064d57600080fd5b80632f54bf6e14610586578063313ce567146105b557806333477327146105d757600080fd5b8063201e79911161030d5780632a2dae0a116102e75780632a2dae0a146104f25780632b112e49146105315780632d48e896146105465780632d5945671461056657600080fd5b8063201e79911461049257806323b872dd146104b257806328fd3198146104d257600080fd5b80630d295980116103495780630d2959801461041b5780631161ae391461043d578063178d9b8e1461045d57806318160ddd1461047d57600080fd5b80630445b6671461037b57806306fdde03146103a4578063095ea7b3146103eb57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039160215481565b6040519081526020015b60405180910390f35b3480156103b057600080fd5b506040805180820190915260158152744d6f6e61642049736c616e6420547265617375727960581b60208201525b60405161039b91906128bd565b3480156103f757600080fd5b5061040b610406366004612774565b610ac7565b604051901515815260200161039b565b34801561042757600080fd5b5061043b6104363660046127a0565b610b34565b005b34801561044957600080fd5b5061040b61045836600461283b565b610b7a565b34801561046957600080fd5b5061043b61047836600461288b565b610b8e565b34801561048957600080fd5b50600954610391565b34801561049e57600080fd5b5061043b6104ad36600461283b565b610be6565b3480156104be57600080fd5b5061040b6104cd3660046126fe565b610c16565b3480156104de57600080fd5b506103916104ed3660046126a8565b610cd8565b3480156104fe57600080fd5b50602b5461051990630100000090046001600160a01b031681565b6040516001600160a01b03909116815260200161039b565b34801561053d57600080fd5b50610391610d56565b34801561055257600080fd5b5061043b61056136600461283b565b610da8565b34801561057257600080fd5b5061043b6105813660046127d7565b610e35565b34801561059257600080fd5b5061040b6105a13660046126a8565b6000546001600160a01b0391821691161490565b3480156105c157600080fd5b5060125b60405160ff909116815260200161039b565b3480156105e357600080fd5b50610391600a5481565b3480156105f957600080fd5b5061043b6106083660046126a8565b610e86565b34801561061957600080fd5b5061043b61062836600461273f565b610f0d565b34801561063957600080fd5b5061040b6106483660046126a8565b610f5d565b34801561065957600080fd5b5060265461040b9060ff1681565b34801561067357600080fd5b5061043b61068236600461273f565b610f6b565b34801561069357600080fd5b5061043b6106a236600461288b565b610fbb565b3480156106b357600080fd5b50602b5461040b90610100900460ff1681565b3480156106d257600080fd5b506103916106e13660046126a8565b6001600160a01b03166000908152600d602052604090205490565b34801561070857600080fd5b506026546105c590610100900460ff1681565b34801561072757600080fd5b50610391600c5481565b34801561073d57600080fd5b5061043b61074c366004612809565b61100d565b34801561075d57600080fd5b5061043b61076c366004612809565b61105e565b34801561077d57600080fd5b506000546001600160a01b0316610519565b34801561079b57600080fd5b506040805180820190915260048152630913525560e21b60208201526103de565b3480156107c857600080fd5b5061043b6107d7366004612809565b6110a9565b3480156107e857600080fd5b5061043b6107f73660046126c5565b6110e2565b34801561080857600080fd5b5061043b61081736600461273f565b611135565b34801561082857600080fd5b50602954610519906001600160a01b031681565b34801561084857600080fd5b5061040b610857366004612774565b6111a7565b34801561086857600080fd5b5061043b6108773660046126a8565b6111b4565b34801561088857600080fd5b50610391602a5481565b34801561089e57600080fd5b50600654610519906001600160a01b031681565b3480156108be57600080fd5b50610391600b5481565b3480156108d457600080fd5b506103916108e3366004612809565b611205565b3480156108f457600080fd5b50600854610519906001600160a01b031681565b34801561091457600080fd5b506103916109233660046126c5565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b34801561095a57600080fd5b5061043b6109693660046127bb565b611243565b34801561097a57600080fd5b5061043b610989366004612809565b61129e565b34801561099a57600080fd5b5061043b6112e9565b3480156109af57600080fd5b50600754610519906001600160a01b031681565b3480156109cf57600080fd5b5061043b6109de3660046126a8565b6113a4565b3480156109ef57600080fd5b5061043b6113ef565b348015610a0457600080fd5b5061043b610a133660046126a8565b611433565b348015610a2457600080fd5b5061043b6114c9565b348015610a3957600080fd5b5061043b610a4836600461273f565b611564565b348015610a5957600080fd5b5061043b610a6836600461273f565b61166c565b348015610a7957600080fd5b50602854610519906001600160a01b031681565b348015610a9957600080fd5b5061040b610aa83660046126a8565b6116bc565b348015610ab957600080fd5b50602b5461040b9060ff1681565b336000818152600e602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b229086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610b675760405162461bcd60e51b8152600401610b5e90612912565b60405180910390fd5b602b805460ff1916911515919091179055565b600082610b8683611205565b119392505050565b6000546001600160a01b03163314610bb85760405162461bcd60e51b8152600401610b5e90612912565b601384905560148390556015829055610bdb82610bd586866116da565b906116da565b601655602055505050565b610bef336116bc565b610c0b5760405162461bcd60e51b8152600401610b5e90612932565b602291909155602355565b6001600160a01b0383166000908152600e6020908152604080832033845290915281205460001914610cc3576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600e82528381203382529091529190912054610c9e918490611739565b6001600160a01b0385166000908152600e602090815260408083203384529091529020555b610cce848484611773565b90505b9392505050565b6024805460405163051fa63360e31b81526001600160a01b0384811660048301526000939216916328fd3198910160206040518083038186803b158015610d1e57600080fd5b505afa158015610d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2e9190612822565b6004546001600160a01b03166000908152600d6020526040812054610da3906003546001600160a01b03166000908152600d6020526040902054610d9d9060095490611b76565b90611b76565b905090565b610db1336116bc565b610dcd5760405162461bcd60e51b8152600401610b5e90612932565b602480546040516316a4744b60e11b8152600481018590529182018390526001600160a01b031690632d48e896906044015b600060405180830381600087803b158015610e1957600080fd5b505af1158015610e2d573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e5f5760405162461bcd60e51b8152600401610b5e90612912565b6026805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b610e8f336116bc565b610eab5760405162461bcd60e51b8152600401610b5e90612932565b600580546001600160a01b039092166001600160a01b0319909216821790556000908152600f60209081526040808320805460ff1990811660019081179092556010845282852080548216831790556011909352922080549091169091179055565b610f16336116bc565b610f325760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000610b2e82600019610ac7565b610f74336116bc565b610f905760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fe55760405162461bcd60e51b8152600401610b5e90612912565b60178490556018839055601982905561100282610bd586866116da565b601a55602055505050565b6000546001600160a01b031633146110375760405162461bcd60e51b8152600401610b5e90612912565b61105861271061105283600954611bb890919063ffffffff16565b90611c37565b600a5550565b6000546001600160a01b031633146110885760405162461bcd60e51b8152600401610b5e90612912565b6110a361271061105283600954611bb890919063ffffffff16565b600c5550565b6110b2336116bc565b6110ce5760405162461bcd60e51b8152600401610b5e90612932565b620b71b081106110dd57600080fd5b602555565b6110eb336116bc565b6111075760405162461bcd60e51b8152600401610b5e90612932565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b61113e336116bc565b61115a5760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b039091166000908152601060209081526040808320805494151560ff199586168117909155600f8352818420805486168217905560119092529091208054909216179055565b6000610cd1338484611773565b6000546001600160a01b031633146111de5760405162461bcd60e51b8152600401610b5e90612912565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000610b2e611212610d56565b6029546001600160a01b03166000908152600d60205260409020546110529061123c906002611bb8565b8590611bb8565b61124c336116bc565b6112685760405162461bcd60e51b8152600401610b5e90612932565b602b805461ff001916610100841515021790556009546127109061128d908390612a02565b61129791906129e0565b6021555050565b6000546001600160a01b031633146112c85760405162461bcd60e51b8152600401610b5e90612912565b6112e361271061105283600954611bb890919063ffffffff16565b600b5550565b602b54630100000090046001600160a01b0316331461133a5760405162461bcd60e51b815260206004820152600d60248201526c27b7363c903232b83637bcb2b960991b6044820152606401610b5e565b602460009054906101000a90046001600160a01b03166001600160a01b03166320800a006040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561138a57600080fd5b505af115801561139e573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146113ce5760405162461bcd60e51b8152600401610b5e90612912565b6001600160a01b03166000908152600160205260409020805460ff19169055565b60248054604051630afbf02f60e11b81523360048201526001600160a01b03909116916315f7e05e9101600060405180830381600087803b15801561138a57600080fd5b6000546001600160a01b0316331461145d5760405162461bcd60e51b8152600401610b5e90612912565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b602b54630100000090046001600160a01b0316331461151f5760405162461bcd60e51b81526020600482015260126024820152712737ba103a37b5b2b7103232b83637bcb2b960711b6044820152606401610b5e565b602b546040514791630100000090046001600160a01b0316906108fc8315029083906000818181858888f19350505050158015611560573d6000803e3d6000fd5b5050565b61156d336116bc565b6115895760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b03821630148015906115b057506029546001600160a01b03838116911614155b6115b957600080fd5b6001600160a01b0382166000908152601260205260409020805460ff191682158015919091179091556116215760248054604051630a5b654b60e11b81526001600160a01b0385811660048301526000938201939093529116906314b6ca9690604401610dff565b602480546001600160a01b038481166000818152600d602052604090819020549051630a5b654b60e11b815260048101929092529381019390935216906314b6ca9690604401610dff565b611675336116bc565b6116915760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b6000806116e783856129c8565b905083811015610cd15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b5e565b6000818484111561175d5760405162461bcd60e51b8152600401610b5e91906128bd565b50600061176a8486612a21565b95945050505050565b602b5460009062010000900460ff161561179957611792848484611c79565b9050610cd1565b6001600160a01b03841660009081526001602052604090205460ff161580156117db57506001600160a01b03831660009081526001602052604090205460ff16155b80156117f557506005546001600160a01b03858116911614155b1561184c57602b5460ff1661184c5760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610b5e565b6029546001600160a01b0390811685821681149185161461186c81611d5f565b611877868686611d9c565b6118818686611f58565b61188d8685878461203a565b611895612172565b156118a2576118a26121cc565b801580156118ae575081155b156118c8576000601b819055601d819055601e819055601f555b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600d909152919091205461191a918690611739565b6001600160a01b0387166000908152600d6020908152604080832093909355600f90529081205460ff161561194f5784611959565b61195987866125bf565b6001600160a01b0387166000908152600d602052604090205490915061197f90826116da565b6001600160a01b038088166000908152600d6020908152604080832094909455918a1681526012909152205460ff16611a2557602480546001600160a01b038981166000818152600d602052604090819020549051630a5b654b60e11b815260048101929092529381019390935216906314b6ca9690604401600060405180830381600087803b158015611a1257600080fd5b505af1925050508015611a23575060015b505b6001600160a01b03861660009081526012602052604090205460ff16611ab857602480546001600160a01b038881166000818152600d602052604090819020549051630a5b654b60e11b815260048101929092529381019390935216906314b6ca9690604401600060405180830381600087803b158015611aa557600080fd5b505af1925050508015611ab6575060015b505b6024546025546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611af09160040190815260200190565b600060405180830381600087803b158015611b0a57600080fd5b505af1925050508015611b1b575060015b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b6191815260200190565b60405180910390a35060019695505050505050565b6000610cd183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611739565b600082611bc757506000610b2e565b6000611bd38385612a02565b905082611be085836129e0565b14610cd15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b5e565b6000610cd183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612665565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600d90915291822054611cca918490611739565b6001600160a01b038086166000908152600d60205260408082209390935590851681522054611cf990836116da565b6001600160a01b038085166000818152600d602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d4d9086815260200190565b60405180910390a35060019392505050565b8015611d8057601754601b55601854601d55601954601e55601a54601f5550565b601354601b55601454601d55601554601e55601654601f555b50565b6001600160a01b03831660009081526001602052604090205460ff16158015611dde57506001600160a01b03831660009081526010602052604090205460ff16155b8015611e0357506001600160a01b03821660009081526010602052604090205460ff16155b8015611e1d57506000546001600160a01b03838116911614155b8015611e3257506001600160a01b0382163014155b8015611e4c57506003546001600160a01b03838116911614155b8015611e6657506029546001600160a01b03838116911614155b8015611e8057506007546001600160a01b03838116911614155b8015611e9a57506006546001600160a01b03838116911614155b8015611eb457506008546001600160a01b03838116911614155b15611f53576001600160a01b0382166000908152600d6020526040902054600c54611edf83836129c8565b111561139e5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b5e565b505050565b6029546001600160a01b038381169116148015611f77575060265460ff165b8015611f9c57506001600160a01b03811660009081526011602052604090205460ff16155b15611560576001600160a01b03811660009081526027602052604090205442116120085760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610b5e565b60265461201d90610100900460ff16426129c8565b6001600160a01b0382166000908152602760205260409020555050565b6000546001600160a01b0383811691161461139e5780156120e657600b548311158061207e57506001600160a01b03841660009081526010602052604090205460ff165b806120a157506001600160a01b03821660009081526010602052604090205460ff165b6120e15760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b5e565b61139e565b600a548311158061210f57506001600160a01b03841660009081526010602052604090205460ff165b8061213257506001600160a01b03821660009081526010602052604090205460ff165b61139e5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b5e565b6029546000906001600160a01b031633148015906121995750602b5462010000900460ff16155b80156121ac5750602b54610100900460ff165b8015610da3575050602154306000908152600d6020526040902054101590565b602b805462ff00001916620100001790556022546023546000916121ef91610b7a565b6121fb57601b546121fe565b60005b905060006122226002611052601f5461105286602154611bb890919063ffffffff16565b9050600061223b82602154611b7690919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061227557612275612a4e565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106122a6576122a6612a4e565b6001600160a01b03928316602091820292909201015260285460405163791ac94760e01b81524792919091169063791ac947906122f0908690600090879030904290600401612957565b600060405180830381600087803b15801561230a57600080fd5b505af115801561231e573d6000803e3d6000fd5b5050505060006123378247611b7690919063ffffffff16565b90506000612352612349886002611c37565b601f5490611b76565b9050600061236760026110528481878d611bb8565b9050600061238483611052601d5487611bb890919063ffffffff16565b905060006123a184611052601e5488611bb890919063ffffffff16565b9050602460009054906101000a90046001600160a01b03166001600160a01b0316633ecfd51e836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123f357600080fd5b505af193505050508015612405575060015b506007546040516000916001600160a01b03169061753090849084818181858888f193505050503d8060008114612458576040519150601f19603f3d011682016040523d82523d6000602084013e61245d565b606091505b50509050806124bf5760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610b5e565b89156125a65760285460065460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c4016060604051808303818588803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612569919061285d565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050602b805462ff000019169055505050505050505050565b6000806125dd602054611052601f5486611bb890919063ffffffff16565b306000908152600d60205260409020549091506125fa90826116da565b306000818152600d6020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061264b9085815260200190565b60405180910390a361265d8382611b76565b949350505050565b600081836126865760405162461bcd60e51b8152600401610b5e91906128bd565b50600061176a84866129e0565b803580151581146126a357600080fd5b919050565b6000602082840312156126ba57600080fd5b8135610cd181612a64565b600080604083850312156126d857600080fd5b82356126e381612a64565b915060208301356126f381612a64565b809150509250929050565b60008060006060848603121561271357600080fd5b833561271e81612a64565b9250602084013561272e81612a64565b929592945050506040919091013590565b6000806040838503121561275257600080fd5b823561275d81612a64565b915061276b60208401612693565b90509250929050565b6000806040838503121561278757600080fd5b823561279281612a64565b946020939093013593505050565b6000602082840312156127b257600080fd5b610cd182612693565b600080604083850312156127ce57600080fd5b61279283612693565b600080604083850312156127ea57600080fd5b6127f383612693565b9150602083013560ff811681146126f357600080fd5b60006020828403121561281b57600080fd5b5035919050565b60006020828403121561283457600080fd5b5051919050565b6000806040838503121561284e57600080fd5b50508035926020909101359150565b60008060006060848603121561287257600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156128a157600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b818110156128ea578581018301518582016040015282016128ce565b818111156128fc576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129a75784516001600160a01b031683529383019391830191600101612982565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156129db576129db612a38565b500190565b6000826129fd57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a1c57612a1c612a38565b500290565b600082821015612a3357612a33612a38565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611d9957600080fdfea2646970667358221220a5c94b7b48ab792817d04b00ee84778192452738a94975e52b15144817788dec64736f6c6343000807003360806040526ec097ce7bc90715b34b9f1000000000600955610e10600a5564e8d4a51000600b5534801561003257600080fd5b50604051610faa380380610faa83398101604081905261005191610069565b50600080546001600160a01b03191633179055610099565b60006020828403121561007b57600080fd5b81516001600160a01b038116811461009257600080fd5b9392505050565b610f02806100a86000396000f3fe6080604052600436106100f35760003560e01c80634fab0ae81161008a578063e2d2e21911610059578063e2d2e21914610261578063efca2eed14610277578063ffb2c4791461028d578063ffd49c84146102ad57600080fd5b80634fab0ae8146101d6578063997664d7146101ec578063ce7c2ac214610202578063d0e30db01461025957600080fd5b806328fd3198116100c657806328fd3198146101785780632d48e896146101985780633a98ef39146101b85780633ecfd51e146101ce57600080fd5b806311ce023d146100f857806314b6ca961461012157806315f7e05e1461014357806320800a0014610163575b600080fd5b34801561010457600080fd5b5061010e60095481565b6040519081526020015b60405180910390f35b34801561012d57600080fd5b5061014161013c366004610d2e565b6102c3565b005b34801561014f57600080fd5b5061014161015e366004610cf4565b61043a565b34801561016f57600080fd5b5061014161045d565b34801561018457600080fd5b5061010e610193366004610cf4565b610624565b3480156101a457600080fd5b506101416101b3366004610d73565b6106ad565b3480156101c457600080fd5b5061010e60055481565b6101416106cf565b3480156101e257600080fd5b5061010e600b5481565b3480156101f857600080fd5b5061010e60065481565b34801561020e57600080fd5b5061023e61021d366004610cf4565b60046020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610118565b6101416106f0565b34801561026d57600080fd5b5061010e60085481565b34801561028357600080fd5b5061010e60075481565b34801561029957600080fd5b506101416102a8366004610d5a565b610760565b3480156102b957600080fd5b5061010e600a5481565b6000546001600160a01b031633146102da57600080fd5b6001600160a01b038216600090815260046020526040902054156103015761030182610860565b60008111801561032757506001600160a01b038216600090815260046020526040902054155b1561038c57600180546001600160a01b03841660008181526002602052604081208390558284018455929092527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b03191690911790556103bf565b801580156103b157506001600160a01b03821660009081526004602052604090205415155b156103bf576103bf826109ac565b6001600160a01b0382166000908152600460205260409020546005546103f09183916103ea91610abf565b90610b0a565b6005556001600160a01b038216600090815260046020526040902081905561041781610b69565b6001600160a01b0390921660009081526004602052604090206001019190915550565b6000546001600160a01b0316331461045157600080fd5b61045a81610860565b50565b6000546001600160a01b0316331461047457600080fd5b47806104ba5760405162461bcd60e51b815260206004820152601060248201526f4e6f2045544820746f2072657363756560801b60448201526064015b60405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b0316632a2dae0a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561050957600080fd5b505afa15801561051d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105419190610d11565b90506001600160a01b03811661058c5760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103232b83637bcb2b960811b60448201526064016104b1565b6000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146105d9576040519150601f19603f3d011682016040523d82523d6000602084013e6105de565b606091505b505090508061061f5760405162461bcd60e51b815260206004820152600d60248201526c14995cd8dd594819985a5b1959609a1b60448201526064016104b1565b505050565b6001600160a01b03811660009081526004602052604081205461064957506000919050565b6001600160a01b03821660009081526004602052604081205461066b90610b69565b6001600160a01b03841660009081526004602052604090206001015490915080821161069b575060009392505050565b6106a58282610abf565b949350505050565b6000546001600160a01b031633146106c457600080fd5b600a91909155600b55565b6000546001600160a01b031633146106e657600080fd5b6106ee6106f0565b565b6000546001600160a01b0316331461070757600080fd5b60055434906107235760065461071d9082610b0a565b60065550565b6006546107309082610b0a565b60065560055460095461075a916107519161074b9085610b86565b90610c05565b60085490610b0a565b60085550565b6000546001600160a01b0316331461077757600080fd5b60015480610783575050565b6000805a905060005b848310801561079a57508381105b156108595783600c54106107ae576000600c555b6107e06001600c54815481106107c6576107c6610ea1565b6000918252602090912001546001600160a01b0316610c47565b15610817576108176001600c54815481106107fd576107fd610ea1565b6000918252602090912001546001600160a01b0316610860565b61082c6108255a8490610abf565b8490610b0a565b92505a600c8054919350600061084183610e5a565b9190505550808061085190610e5a565b91505061078c565b5050505050565b6001600160a01b0381166000908152600460205260409020546108805750565b600061088b82610624565b905080156109a8576007546108a09082610b0a565b6007556001600160a01b038216600090815260036020908152604080832042905560049091529020600201546108d69082610b0a565b6001600160a01b038316600090815260046020526040902060028101919091555461090090610b69565b6001600160a01b03831660008181526004602052604080822060010193909355915183908381818185875af1925050503d806000811461095c576040519150601f19603f3d011682016040523d82523d6000602084013e610961565b606091505b505090508061061f5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016104b1565b5050565b600180546109bb908290610e43565b815481106109cb576109cb610ea1565b60009182526020808320909101546001600160a01b0384811684526002909252604090922054600180549290931692918110610a0957610a09610ea1565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260029182905260408120546001805491939291610a54908290610e43565b81548110610a6457610a64610ea1565b60009182526020808320909101546001600160a01b031683528201929092526040019020556001805480610a9a57610a9a610e8b565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610b0183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c8c565b90505b92915050565b600080610b178385610dea565b905083811015610b015760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016104b1565b6000610b0460095461074b60085485610b8690919063ffffffff16565b600082610b9557506000610b04565b6000610ba18385610e24565b905082610bae8583610e02565b14610b015760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016104b1565b6000610b0183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610cc6565b600a546001600160a01b03821660009081526003602052604081205490914291610c719190610dea565b108015610b045750600b54610c8583610624565b1192915050565b60008184841115610cb05760405162461bcd60e51b81526004016104b19190610d95565b506000610cbd8486610e43565b95945050505050565b60008183610ce75760405162461bcd60e51b81526004016104b19190610d95565b506000610cbd8486610e02565b600060208284031215610d0657600080fd5b8135610b0181610eb7565b600060208284031215610d2357600080fd5b8151610b0181610eb7565b60008060408385031215610d4157600080fd5b8235610d4c81610eb7565b946020939093013593505050565b600060208284031215610d6c57600080fd5b5035919050565b60008060408385031215610d8657600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015610dc257858101830151858201604001528201610da6565b81811115610dd4576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610dfd57610dfd610e75565b500190565b600082610e1f57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610e3e57610e3e610e75565b500290565b600082821015610e5557610e55610e75565b500390565b6000600019821415610e6e57610e6e610e75565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461045a57600080fdfea2646970667358221220ef38b87426ab8eb0223b01dd20385b76899d3193d1586649a4fa1943a272937964736f6c63430008070033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c806382bf293c116101c6578063dd62ed3e116100f7578063f2fde38b11610095578063f84ba65d1161006f578063f84ba65d14610a4d578063f887ea4014610a6d578063fe9fbb8014610a8d578063ffb54a9914610aad57600080fd5b8063f2fde38b146109f8578063f429389014610a18578063f708a64f14610a2d57600080fd5b8063e086299a116100d1578063e086299a1461098e578063e96fada2146109a3578063f0b37c04146109c3578063f0fc6bca146109e357600080fd5b8063dd62ed3e14610908578063df20fd491461094e578063df4a76c51461096e57600080fd5b8063a9059cbb11610164578063ca33e64c1161013e578063ca33e64c14610892578063cf4be394146108b2578063d51ed1c8146108c8578063dab84ee7146108e857600080fd5b8063a9059cbb1461083c578063b6a5d7de1461085c578063bf56b3711461087c57600080fd5b80639d1944f5116101a05780639d1944f5146107bc578063a4b45c00146107dc578063a6b06a27146107fc578063a8aa1b311461081c57600080fd5b806382bf293c14610751578063893d20e81461077157806395d89b411461078f57600080fd5b80632f54bf6e116102a0578063658d4b7f1161023e57806370a082311161021857806370a08231146106c6578063722b62ad146106fc57806378109e541461071b5780637affa29b1461073157600080fd5b8063658d4b7f146106675780636c5b2855146106875780636ddd1713146106a757600080fd5b806338280e6b1161027a57806338280e6b146105ed57806350db71fb1461060d578063571ac8b01461062d578063617fe0ed1461064d57600080fd5b80632f54bf6e14610586578063313ce567146105b557806333477327146105d757600080fd5b8063201e79911161030d5780632a2dae0a116102e75780632a2dae0a146104f25780632b112e49146105315780632d48e896146105465780632d5945671461056657600080fd5b8063201e79911461049257806323b872dd146104b257806328fd3198146104d257600080fd5b80630d295980116103495780630d2959801461041b5780631161ae391461043d578063178d9b8e1461045d57806318160ddd1461047d57600080fd5b80630445b6671461037b57806306fdde03146103a4578063095ea7b3146103eb57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039160215481565b6040519081526020015b60405180910390f35b3480156103b057600080fd5b506040805180820190915260158152744d6f6e61642049736c616e6420547265617375727960581b60208201525b60405161039b91906128bd565b3480156103f757600080fd5b5061040b610406366004612774565b610ac7565b604051901515815260200161039b565b34801561042757600080fd5b5061043b6104363660046127a0565b610b34565b005b34801561044957600080fd5b5061040b61045836600461283b565b610b7a565b34801561046957600080fd5b5061043b61047836600461288b565b610b8e565b34801561048957600080fd5b50600954610391565b34801561049e57600080fd5b5061043b6104ad36600461283b565b610be6565b3480156104be57600080fd5b5061040b6104cd3660046126fe565b610c16565b3480156104de57600080fd5b506103916104ed3660046126a8565b610cd8565b3480156104fe57600080fd5b50602b5461051990630100000090046001600160a01b031681565b6040516001600160a01b03909116815260200161039b565b34801561053d57600080fd5b50610391610d56565b34801561055257600080fd5b5061043b61056136600461283b565b610da8565b34801561057257600080fd5b5061043b6105813660046127d7565b610e35565b34801561059257600080fd5b5061040b6105a13660046126a8565b6000546001600160a01b0391821691161490565b3480156105c157600080fd5b5060125b60405160ff909116815260200161039b565b3480156105e357600080fd5b50610391600a5481565b3480156105f957600080fd5b5061043b6106083660046126a8565b610e86565b34801561061957600080fd5b5061043b61062836600461273f565b610f0d565b34801561063957600080fd5b5061040b6106483660046126a8565b610f5d565b34801561065957600080fd5b5060265461040b9060ff1681565b34801561067357600080fd5b5061043b61068236600461273f565b610f6b565b34801561069357600080fd5b5061043b6106a236600461288b565b610fbb565b3480156106b357600080fd5b50602b5461040b90610100900460ff1681565b3480156106d257600080fd5b506103916106e13660046126a8565b6001600160a01b03166000908152600d602052604090205490565b34801561070857600080fd5b506026546105c590610100900460ff1681565b34801561072757600080fd5b50610391600c5481565b34801561073d57600080fd5b5061043b61074c366004612809565b61100d565b34801561075d57600080fd5b5061043b61076c366004612809565b61105e565b34801561077d57600080fd5b506000546001600160a01b0316610519565b34801561079b57600080fd5b506040805180820190915260048152630913525560e21b60208201526103de565b3480156107c857600080fd5b5061043b6107d7366004612809565b6110a9565b3480156107e857600080fd5b5061043b6107f73660046126c5565b6110e2565b34801561080857600080fd5b5061043b61081736600461273f565b611135565b34801561082857600080fd5b50602954610519906001600160a01b031681565b34801561084857600080fd5b5061040b610857366004612774565b6111a7565b34801561086857600080fd5b5061043b6108773660046126a8565b6111b4565b34801561088857600080fd5b50610391602a5481565b34801561089e57600080fd5b50600654610519906001600160a01b031681565b3480156108be57600080fd5b50610391600b5481565b3480156108d457600080fd5b506103916108e3366004612809565b611205565b3480156108f457600080fd5b50600854610519906001600160a01b031681565b34801561091457600080fd5b506103916109233660046126c5565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b34801561095a57600080fd5b5061043b6109693660046127bb565b611243565b34801561097a57600080fd5b5061043b610989366004612809565b61129e565b34801561099a57600080fd5b5061043b6112e9565b3480156109af57600080fd5b50600754610519906001600160a01b031681565b3480156109cf57600080fd5b5061043b6109de3660046126a8565b6113a4565b3480156109ef57600080fd5b5061043b6113ef565b348015610a0457600080fd5b5061043b610a133660046126a8565b611433565b348015610a2457600080fd5b5061043b6114c9565b348015610a3957600080fd5b5061043b610a4836600461273f565b611564565b348015610a5957600080fd5b5061043b610a6836600461273f565b61166c565b348015610a7957600080fd5b50602854610519906001600160a01b031681565b348015610a9957600080fd5b5061040b610aa83660046126a8565b6116bc565b348015610ab957600080fd5b50602b5461040b9060ff1681565b336000818152600e602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b229086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610b675760405162461bcd60e51b8152600401610b5e90612912565b60405180910390fd5b602b805460ff1916911515919091179055565b600082610b8683611205565b119392505050565b6000546001600160a01b03163314610bb85760405162461bcd60e51b8152600401610b5e90612912565b601384905560148390556015829055610bdb82610bd586866116da565b906116da565b601655602055505050565b610bef336116bc565b610c0b5760405162461bcd60e51b8152600401610b5e90612932565b602291909155602355565b6001600160a01b0383166000908152600e6020908152604080832033845290915281205460001914610cc3576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600e82528381203382529091529190912054610c9e918490611739565b6001600160a01b0385166000908152600e602090815260408083203384529091529020555b610cce848484611773565b90505b9392505050565b6024805460405163051fa63360e31b81526001600160a01b0384811660048301526000939216916328fd3198910160206040518083038186803b158015610d1e57600080fd5b505afa158015610d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2e9190612822565b6004546001600160a01b03166000908152600d6020526040812054610da3906003546001600160a01b03166000908152600d6020526040902054610d9d9060095490611b76565b90611b76565b905090565b610db1336116bc565b610dcd5760405162461bcd60e51b8152600401610b5e90612932565b602480546040516316a4744b60e11b8152600481018590529182018390526001600160a01b031690632d48e896906044015b600060405180830381600087803b158015610e1957600080fd5b505af1158015610e2d573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e5f5760405162461bcd60e51b8152600401610b5e90612912565b6026805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b610e8f336116bc565b610eab5760405162461bcd60e51b8152600401610b5e90612932565b600580546001600160a01b039092166001600160a01b0319909216821790556000908152600f60209081526040808320805460ff1990811660019081179092556010845282852080548216831790556011909352922080549091169091179055565b610f16336116bc565b610f325760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000610b2e82600019610ac7565b610f74336116bc565b610f905760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fe55760405162461bcd60e51b8152600401610b5e90612912565b60178490556018839055601982905561100282610bd586866116da565b601a55602055505050565b6000546001600160a01b031633146110375760405162461bcd60e51b8152600401610b5e90612912565b61105861271061105283600954611bb890919063ffffffff16565b90611c37565b600a5550565b6000546001600160a01b031633146110885760405162461bcd60e51b8152600401610b5e90612912565b6110a361271061105283600954611bb890919063ffffffff16565b600c5550565b6110b2336116bc565b6110ce5760405162461bcd60e51b8152600401610b5e90612932565b620b71b081106110dd57600080fd5b602555565b6110eb336116bc565b6111075760405162461bcd60e51b8152600401610b5e90612932565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b61113e336116bc565b61115a5760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b039091166000908152601060209081526040808320805494151560ff199586168117909155600f8352818420805486168217905560119092529091208054909216179055565b6000610cd1338484611773565b6000546001600160a01b031633146111de5760405162461bcd60e51b8152600401610b5e90612912565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000610b2e611212610d56565b6029546001600160a01b03166000908152600d60205260409020546110529061123c906002611bb8565b8590611bb8565b61124c336116bc565b6112685760405162461bcd60e51b8152600401610b5e90612932565b602b805461ff001916610100841515021790556009546127109061128d908390612a02565b61129791906129e0565b6021555050565b6000546001600160a01b031633146112c85760405162461bcd60e51b8152600401610b5e90612912565b6112e361271061105283600954611bb890919063ffffffff16565b600b5550565b602b54630100000090046001600160a01b0316331461133a5760405162461bcd60e51b815260206004820152600d60248201526c27b7363c903232b83637bcb2b960991b6044820152606401610b5e565b602460009054906101000a90046001600160a01b03166001600160a01b03166320800a006040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561138a57600080fd5b505af115801561139e573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146113ce5760405162461bcd60e51b8152600401610b5e90612912565b6001600160a01b03166000908152600160205260409020805460ff19169055565b60248054604051630afbf02f60e11b81523360048201526001600160a01b03909116916315f7e05e9101600060405180830381600087803b15801561138a57600080fd5b6000546001600160a01b0316331461145d5760405162461bcd60e51b8152600401610b5e90612912565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b602b54630100000090046001600160a01b0316331461151f5760405162461bcd60e51b81526020600482015260126024820152712737ba103a37b5b2b7103232b83637bcb2b960711b6044820152606401610b5e565b602b546040514791630100000090046001600160a01b0316906108fc8315029083906000818181858888f19350505050158015611560573d6000803e3d6000fd5b5050565b61156d336116bc565b6115895760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b03821630148015906115b057506029546001600160a01b03838116911614155b6115b957600080fd5b6001600160a01b0382166000908152601260205260409020805460ff191682158015919091179091556116215760248054604051630a5b654b60e11b81526001600160a01b0385811660048301526000938201939093529116906314b6ca9690604401610dff565b602480546001600160a01b038481166000818152600d602052604090819020549051630a5b654b60e11b815260048101929092529381019390935216906314b6ca9690604401610dff565b611675336116bc565b6116915760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b6000806116e783856129c8565b905083811015610cd15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b5e565b6000818484111561175d5760405162461bcd60e51b8152600401610b5e91906128bd565b50600061176a8486612a21565b95945050505050565b602b5460009062010000900460ff161561179957611792848484611c79565b9050610cd1565b6001600160a01b03841660009081526001602052604090205460ff161580156117db57506001600160a01b03831660009081526001602052604090205460ff16155b80156117f557506005546001600160a01b03858116911614155b1561184c57602b5460ff1661184c5760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610b5e565b6029546001600160a01b0390811685821681149185161461186c81611d5f565b611877868686611d9c565b6118818686611f58565b61188d8685878461203a565b611895612172565b156118a2576118a26121cc565b801580156118ae575081155b156118c8576000601b819055601d819055601e819055601f555b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600d909152919091205461191a918690611739565b6001600160a01b0387166000908152600d6020908152604080832093909355600f90529081205460ff161561194f5784611959565b61195987866125bf565b6001600160a01b0387166000908152600d602052604090205490915061197f90826116da565b6001600160a01b038088166000908152600d6020908152604080832094909455918a1681526012909152205460ff16611a2557602480546001600160a01b038981166000818152600d602052604090819020549051630a5b654b60e11b815260048101929092529381019390935216906314b6ca9690604401600060405180830381600087803b158015611a1257600080fd5b505af1925050508015611a23575060015b505b6001600160a01b03861660009081526012602052604090205460ff16611ab857602480546001600160a01b038881166000818152600d602052604090819020549051630a5b654b60e11b815260048101929092529381019390935216906314b6ca9690604401600060405180830381600087803b158015611aa557600080fd5b505af1925050508015611ab6575060015b505b6024546025546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611af09160040190815260200190565b600060405180830381600087803b158015611b0a57600080fd5b505af1925050508015611b1b575060015b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b6191815260200190565b60405180910390a35060019695505050505050565b6000610cd183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611739565b600082611bc757506000610b2e565b6000611bd38385612a02565b905082611be085836129e0565b14610cd15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b5e565b6000610cd183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612665565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600d90915291822054611cca918490611739565b6001600160a01b038086166000908152600d60205260408082209390935590851681522054611cf990836116da565b6001600160a01b038085166000818152600d602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d4d9086815260200190565b60405180910390a35060019392505050565b8015611d8057601754601b55601854601d55601954601e55601a54601f5550565b601354601b55601454601d55601554601e55601654601f555b50565b6001600160a01b03831660009081526001602052604090205460ff16158015611dde57506001600160a01b03831660009081526010602052604090205460ff16155b8015611e0357506001600160a01b03821660009081526010602052604090205460ff16155b8015611e1d57506000546001600160a01b03838116911614155b8015611e3257506001600160a01b0382163014155b8015611e4c57506003546001600160a01b03838116911614155b8015611e6657506029546001600160a01b03838116911614155b8015611e8057506007546001600160a01b03838116911614155b8015611e9a57506006546001600160a01b03838116911614155b8015611eb457506008546001600160a01b03838116911614155b15611f53576001600160a01b0382166000908152600d6020526040902054600c54611edf83836129c8565b111561139e5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b5e565b505050565b6029546001600160a01b038381169116148015611f77575060265460ff165b8015611f9c57506001600160a01b03811660009081526011602052604090205460ff16155b15611560576001600160a01b03811660009081526027602052604090205442116120085760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610b5e565b60265461201d90610100900460ff16426129c8565b6001600160a01b0382166000908152602760205260409020555050565b6000546001600160a01b0383811691161461139e5780156120e657600b548311158061207e57506001600160a01b03841660009081526010602052604090205460ff165b806120a157506001600160a01b03821660009081526010602052604090205460ff165b6120e15760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b5e565b61139e565b600a548311158061210f57506001600160a01b03841660009081526010602052604090205460ff165b8061213257506001600160a01b03821660009081526010602052604090205460ff165b61139e5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b5e565b6029546000906001600160a01b031633148015906121995750602b5462010000900460ff16155b80156121ac5750602b54610100900460ff165b8015610da3575050602154306000908152600d6020526040902054101590565b602b805462ff00001916620100001790556022546023546000916121ef91610b7a565b6121fb57601b546121fe565b60005b905060006122226002611052601f5461105286602154611bb890919063ffffffff16565b9050600061223b82602154611b7690919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061227557612275612a4e565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106122a6576122a6612a4e565b6001600160a01b03928316602091820292909201015260285460405163791ac94760e01b81524792919091169063791ac947906122f0908690600090879030904290600401612957565b600060405180830381600087803b15801561230a57600080fd5b505af115801561231e573d6000803e3d6000fd5b5050505060006123378247611b7690919063ffffffff16565b90506000612352612349886002611c37565b601f5490611b76565b9050600061236760026110528481878d611bb8565b9050600061238483611052601d5487611bb890919063ffffffff16565b905060006123a184611052601e5488611bb890919063ffffffff16565b9050602460009054906101000a90046001600160a01b03166001600160a01b0316633ecfd51e836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123f357600080fd5b505af193505050508015612405575060015b506007546040516000916001600160a01b03169061753090849084818181858888f193505050503d8060008114612458576040519150601f19603f3d011682016040523d82523d6000602084013e61245d565b606091505b50509050806124bf5760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610b5e565b89156125a65760285460065460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c4016060604051808303818588803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612569919061285d565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050602b805462ff000019169055505050505050505050565b6000806125dd602054611052601f5486611bb890919063ffffffff16565b306000908152600d60205260409020549091506125fa90826116da565b306000818152600d6020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061264b9085815260200190565b60405180910390a361265d8382611b76565b949350505050565b600081836126865760405162461bcd60e51b8152600401610b5e91906128bd565b50600061176a84866129e0565b803580151581146126a357600080fd5b919050565b6000602082840312156126ba57600080fd5b8135610cd181612a64565b600080604083850312156126d857600080fd5b82356126e381612a64565b915060208301356126f381612a64565b809150509250929050565b60008060006060848603121561271357600080fd5b833561271e81612a64565b9250602084013561272e81612a64565b929592945050506040919091013590565b6000806040838503121561275257600080fd5b823561275d81612a64565b915061276b60208401612693565b90509250929050565b6000806040838503121561278757600080fd5b823561279281612a64565b946020939093013593505050565b6000602082840312156127b257600080fd5b610cd182612693565b600080604083850312156127ce57600080fd5b61279283612693565b600080604083850312156127ea57600080fd5b6127f383612693565b9150602083013560ff811681146126f357600080fd5b60006020828403121561281b57600080fd5b5035919050565b60006020828403121561283457600080fd5b5051919050565b6000806040838503121561284e57600080fd5b50508035926020909101359150565b60008060006060848603121561287257600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156128a157600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b818110156128ea578581018301518582016040015282016128ce565b818111156128fc576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129a75784516001600160a01b031683529383019391830191600101612982565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156129db576129db612a38565b500190565b6000826129fd57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a1c57612a1c612a38565b500290565b600082821015612a3357612a33612a38565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611d9957600080fdfea2646970667358221220a5c94b7b48ab792817d04b00ee84778192452738a94975e52b15144817788dec64736f6c63430008070033

Deployed Bytecode Sourcemap

13285:21436:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15203:56;;;;;;;;;;;;;;;;;;;11287:25:1;;;11275:2;11260:18;15203:56:0;;;;;;;;18361:80;;;;;;;;;;-1:-1:-1;18433:5:0;;;;;;;;;;;;-1:-1:-1;;;18433:5:0;;;;18361:80;;;;;;;:::i;18783:216::-;;;;;;;;;;-1:-1:-1;18783:216:0;;;;;:::i;:::-;;:::i;:::-;;;6270:14:1;;6263:22;6245:41;;6233:2;6218:18;18783:216:0;6105:187:1;25450:94:0;;;;;;;;;;-1:-1:-1;25450:94:0;;;;;:::i;:::-;;:::i;:::-;;34054:150;;;;;;;;;;-1:-1:-1;34054:150:0;;;;;:::i;:::-;;:::i;30101:417::-;;;;;;;;;;-1:-1:-1;30101:417:0;;;;;:::i;:::-;;:::i;18091:88::-;;;;;;;;;;-1:-1:-1;18164:12:0;;18091:88;;31543:183;;;;;;;;;;-1:-1:-1;31543:183:0;;;;;:::i;:::-;;:::i;19301:370::-;;;;;;;;;;-1:-1:-1;19301:370:0;;;;;:::i;:::-;;:::i;33282:146::-;;;;;;;;;;-1:-1:-1;33282:146:0;;;;;:::i;:::-;;:::i;16071:28::-;;;;;;;;;;-1:-1:-1;16071:28:0;;;;;;;-1:-1:-1;;;;;16071:28:0;;;;;;-1:-1:-1;;;;;4667:32:1;;;4649:51;;4637:2;4622:18;16071:28:0;4503:203:1;33651:142:0;;;;;;;;;;;;;:::i;32041:183::-;;;;;;;;;;-1:-1:-1;32041:183:0;;;;;:::i;:::-;;:::i;25591:164::-;;;;;;;;;;-1:-1:-1;25591:164:0;;;;;:::i;:::-;;:::i;3426:103::-;;;;;;;;;;-1:-1:-1;3426:103:0;;;;;:::i;:::-;3481:4;3516:5;-1:-1:-1;;;;;3505:16:0;;;3516:5;;3505:16;;3426:103;18185:80;;;;;;;;;;-1:-1:-1;13971:2:0;18185:80;;;12733:4:1;12721:17;;;12703:36;;12691:2;12676:18;18185:80:0;12561:184:1;14091:59:0;;;;;;;;;;;;;;;;19998:283;;;;;;;;;;-1:-1:-1;19998:283:0;;;;;:::i;:::-;;:::i;29719:130::-;;;;;;;;;;-1:-1:-1;29719:130:0;;;;;:::i;:::-;;:::i;19007:122::-;;;;;;;;;;-1:-1:-1;19007:122:0;;;;;:::i;:::-;;:::i;15566:37::-;;;;;;;;;;-1:-1:-1;15566:37:0;;;;;;;;29401:120;;;;;;;;;;-1:-1:-1;29401:120:0;;;;;:::i;:::-;;:::i;30552:433::-;;;;;;;;;;-1:-1:-1;30552:433:0;;;;;:::i;:::-;;:::i;15862:30::-;;;;;;;;;;-1:-1:-1;15862:30:0;;;;;;;;;;;18531:105;;;;;;;;;;-1:-1:-1;18531:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;18615:18:0;18597:7;18615:18;;;:9;:18;;;;;;;18531:105;15610:38;;;;;;;;;;-1:-1:-1;15610:38:0;;;;;;;;;;;14236:63;;;;;;;;;;;;;;;;28634:157;;;;;;;;;;-1:-1:-1;28634:157:0;;;;;:::i;:::-;;:::i;19748:154::-;;;;;;;;;;-1:-1:-1;19748:154:0;;;;;:::i;:::-;;:::i;18447:78::-;;;;;;;;;;-1:-1:-1;18499:7:0;18517:5;-1:-1:-1;;;;;18517:5:0;18447:78;;18271:84;;;;;;;;;;-1:-1:-1;18345:7:0;;;;;;;;;;;;-1:-1:-1;;;18345:7:0;;;;18271:84;;33469:136;;;;;;;;;;-1:-1:-1;33469:136:0;;;;;:::i;:::-;;:::i;31043:237::-;;;;;;;;;;-1:-1:-1;31043:237:0;;;;;:::i;:::-;;:::i;29857:209::-;;;;;;;;;;-1:-1:-1;29857:209:0;;;;;:::i;:::-;;:::i;15766:19::-;;;;;;;;;;-1:-1:-1;15766:19:0;;;;-1:-1:-1;;;;;15766:19:0;;;19137:156;;;;;;;;;;-1:-1:-1;19137:156:0;;;;;:::i;:::-;;:::i;3084:102::-;;;;;;;;;;-1:-1:-1;3084:102:0;;;;;:::i;:::-;;:::i;15792:25::-;;;;;;;;;;;;;;;;13706:36;;;;;;;;;;-1:-1:-1;13706:36:0;;;;-1:-1:-1;;;;;13706:36:0;;;14163:60;;;;;;;;;;;;;;;;33835:167;;;;;;;;;;-1:-1:-1;33835:167:0;;;;;:::i;:::-;;:::i;13791:29::-;;;;;;;;;;-1:-1:-1;13791:29:0;;;;-1:-1:-1;;;;;13791:29:0;;;18642:133;;;;;;;;;;-1:-1:-1;18642:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;18744:19:0;;;18726:7;18744:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;18642:133;31326:180;;;;;;;;;;-1:-1:-1;31326:180:0;;;;;:::i;:::-;;:::i;28824:161::-;;;;;;;;;;-1:-1:-1;28824:161:0;;;;;:::i;:::-;;:::i;34563:147::-;;;;;;;;;;;;;:::i;13749:35::-;;;;;;;;;;-1:-1:-1;13749:35:0;;;;-1:-1:-1;;;;;13749:35:0;;;3261:105;;;;;;;;;;-1:-1:-1;3261:105:0;;;;;:::i;:::-;;:::i;32276:872::-;;;;;;;;;;;;;:::i;3833:189::-;;;;;;;;;;-1:-1:-1;3833:189:0;;;;;:::i;:::-;;:::i;31765:221::-;;;;;;;;;;;;;:::i;29022:347::-;;;;;;;;;;-1:-1:-1;29022:347:0;;;;;:::i;:::-;;:::i;29556:128::-;;;;;;;;;;-1:-1:-1;29556:128:0;;;;;:::i;:::-;;:::i;15735:24::-;;;;;;;;;;-1:-1:-1;15735:24:0;;;;-1:-1:-1;;;;;15735:24:0;;;3599:115;;;;;;;;;;-1:-1:-1;3599:115:0;;;;;:::i;:::-;;:::i;15824:31::-;;;;;;;;;;-1:-1:-1;15824:31:0;;;;;;;;18783:216;18887:10;18858:4;18875:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18875:32:0;;;;;;;;;;:41;;;18932:37;18858:4;;18875:32;;18932:37;;;;18910:6;11287:25:1;;11275:2;11260:18;;11141:177;18932:37:0;;;;;;;;-1:-1:-1;18987:4:0;18783:216;;;;;:::o;25450:94::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;;;;;;;;;25515:11:::1;:21:::0;;-1:-1:-1;;25515:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25450:94::o;34054:150::-;34134:4;34190:6;34158:29;34178:8;34158:19;:29::i;:::-;:38;;34054:150;-1:-1:-1;;;34054:150:0:o;30101:417::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;30255:15:::1;:34:::0;;;30300:16:::1;:36:::0;;;30347:15:::1;:34:::0;;;30406:61:::1;30365:16:::0;30406:39:::1;30273:16:::0;30319:17;30406:20:::1;:39::i;:::-;:43:::0;::::1;:61::i;:::-;30392:11;:75:::0;30478:14:::1;:32:::0;-1:-1:-1;;;30101:417:0:o;31543:183::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;31641:15:::1;:25:::0;;;;31677:26:::1;:41:::0;31543:183::o;19301:370::-;-1:-1:-1;;;;;19421:19:0;;19401:4;19421:19;;;:11;:19;;;;;;;;19441:10;19421:31;;;;;;;;-1:-1:-1;;19421:52:0;19418:186;;19523:69;;;;;;;;;;;-1:-1:-1;;;19523:69:0;;;;;;;;-1:-1:-1;;;;;19523:19:0;;-1:-1:-1;19523:19:0;;;:11;:19;;;;;19543:10;19523:31;;;;;;;;;;:69;;19559:6;;19523:35;:69::i;:::-;-1:-1:-1;;;;;19489:19:0;;;;;;:11;:19;;;;;;;;19509:10;19489:31;;;;;;;:103;19418:186;19623:40;19637:6;19645:9;19656:6;19623:13;:40::i;:::-;19616:47;;19301:370;;;;;;:::o;33282:146::-;33378:11;;;:42;;-1:-1:-1;;;33378:42:0;;-1:-1:-1;;;;;4667:32:1;;;33378:42:0;;;4649:51:1;33351:7:0;;33378:11;;;:29;;4622:18:1;33378:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33651:142::-;33779:4;;-1:-1:-1;;;;;33779:4:0;33704:7;18615:18;;;:9;:18;;;;;;33731:54;;33758:4;;-1:-1:-1;;;;;33758:4:0;18597:7;18615:18;;;:9;:18;;;;;;33731:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;33724:61;;33651:142;:::o;32041:183::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;32151:11:::1;::::0;;:65:::1;::::0;-1:-1:-1;;;32151:65:0;;::::1;::::0;::::1;12482:25:1::0;;;12523:18;;;12516:34;;;-1:-1:-1;;;;;32151:11:0::1;::::0;:35:::1;::::0;12455:18:1;;32151:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32041:183:::0;;:::o;25591:164::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;25675:18:::1;:28:::0;;-1:-1:-1;;25714:33:0;25675:28;::::1;;-1:-1:-1::0;;25714:33:0;;;;;25675:28:::1;;25714:33:::0;;;::::1;::::0;;;::::1;;::::0;;25591:164::o;19998:283::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;20084:16:::1;:36:::0;;-1:-1:-1;;;;;20084:36:0;;::::1;-1:-1:-1::0;;;;;;20084:36:0;;::::1;::::0;::::1;::::0;;:16:::1;20131:30:::0;;;:11:::1;:30;::::0;;;;;;;:37;;-1:-1:-1;;20131:37:0;;::::1;20084:36:::0;20131:37;;::::1;::::0;;;20179:15:::1;:34:::0;;;;;:41;;;::::1;::::0;::::1;::::0;;20231:16:::1;:35:::0;;;;;:42;;;;::::1;::::0;;::::1;::::0;;19998:283::o;29719:130::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29808:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;29808:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29719:130::o;19007:122::-;19062:4;19086:35;19094:7;-1:-1:-1;;19086:7:0;:35::i;29401:120::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29485:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;29485:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29401:120::o;30552:433::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;30710:16:::1;:36:::0;;;30757:17:::1;:38:::0;;;30806:16:::1;:36:::0;;;30870:64:::1;30825:17:::0;30870:41:::1;30729:17:::0;30777:18;30870:21:::1;:41::i;:64::-;30855:12;:79:::0;30945:14:::1;:32:::0;-1:-1:-1;;;30552:433:0:o;28634:157::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;28739:44:::1;28777:5;28739:33;28756:15;28739:12;;:16;;:33;;;;:::i;:::-;:37:::0;::::1;:44::i;:::-;28721:15;:62:::0;-1:-1:-1;28634:157:0:o;19748:154::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;19851:43:::1;19888:5;19851:32;19868:14;19851:12;;:16;;:32;;;;:::i;:43::-;19833:15;:61:::0;-1:-1:-1;19748:154:0:o;33469:136::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;33559:6:::1;33553:3;:12;33545:21;;;::::0;::::1;;33577:14;:20:::0;33469:136::o;31043:237::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;31162:21:::1;:46:::0;;-1:-1:-1;;;;;31162:46:0;;::::1;-1:-1:-1::0;;;;;;31162:46:0;;::::1;;::::0;;;31219:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;31043:237::o;29857:209::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29943:23:0;;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;:32;;;::::1;;-1:-1:-1::0;;29943:32:0;;::::1;::::0;::::1;::::0;;;29986:11:::1;:19:::0;;;;;:28;;;::::1;::::0;::::1;::::0;;30025:16:::1;:24:::0;;;;;;:33;;;;::::1;;::::0;;29857:209::o;19137:156::-;19217:4;19241:44;19255:10;19267:9;19278:6;19241:13;:44::i;3084:102::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3148:23:0::1;;::::0;;;3174:4:::1;3148:23;::::0;;;;;;;:30;;-1:-1:-1;;3148:30:0::1;::::0;;::::1;::::0;;3084:102::o;33835:167::-;33903:7;33930:64;33971:22;:20;:22::i;:::-;33953:4;;-1:-1:-1;;;;;33953:4:0;18597:7;18615:18;;;:9;:18;;;;;;33930:36;;33943:22;;33963:1;33943:19;:22::i;:::-;33930:8;;:12;:36::i;31326:180::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;31418:11:::1;:22:::0;;-1:-1:-1;;31418:22:0::1;;::::0;::::1;;;;::::0;;31467:12:::1;::::0;31492:5:::1;::::0;31467:22:::1;::::0;31482:7;;31467:22:::1;:::i;:::-;:30;;;;:::i;:::-;31451:13;:46:::0;-1:-1:-1;;31326:180:0:o;28824:161::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;28932:45:::1;28971:5;28932:34;28949:16;28932:12;;:16;;:34;;;;:::i;:45::-;28913:16;:64:::0;-1:-1:-1;28824:161:0:o;34563:147::-;34637:13;;;;;-1:-1:-1;;;;;34637:13:0;34623:10;:27;34615:53;;;;-1:-1:-1;;;34615:53:0;;7673:2:1;34615:53:0;;;7655:21:1;7712:2;7692:18;;;7685:30;-1:-1:-1;;;7731:18:1;;;7724:43;7784:18;;34615:53:0;7471:337:1;34615:53:0;34679:11;;;;;;;;;-1:-1:-1;;;;;34679:11:0;-1:-1:-1;;;;;34679:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34563:147::o;3261:105::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3327:23:0::1;3353:5;3327:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;3327:31:0::1;::::0;;3261:105::o;32276:872::-;33103:11;;;:37;;-1:-1:-1;;;33103:37:0;;33129:10;33103:37;;;4649:51:1;-1:-1:-1;;;;;33103:11:0;;;;:25;;4622:18:1;33103:37:0;;;;;;;;;;;;;;;;;;;3833:189;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;3913:5:::1;:15:::0;;-1:-1:-1;;;;;;3913:15:0::1;-1:-1:-1::0;;;;;3913:15:0;::::1;::::0;;::::1;::::0;;3939:23;;;-1:-1:-1;3939:23:0::1;::::0;;;;;;;;:30;;-1:-1:-1;;3939:30:0::1;::::0;;::::1;::::0;;;3985:29;;4649:51:1;;;3985:29:0::1;::::0;4622:18:1;3985:29:0::1;;;;;;;3833:189:::0;:::o;31765:221::-;31825:13;;;;;-1:-1:-1;;;;;31825:13:0;31811:10;:27;31803:58;;;;-1:-1:-1;;;31803:58:0;;10656:2:1;31803:58:0;;;10638:21:1;10695:2;10675:18;;;10668:30;-1:-1:-1;;;10714:18:1;;;10707:48;10772:18;;31803:58:0;10454:342:1;31803:58:0;31935:13;;31927:51;;31899:21;;31935:13;;;-1:-1:-1;;;;;31935:13:0;;31927:51;;;;;31899:21;;31870:26;31927:51;31870:26;31927:51;31899:21;31935:13;31927:51;;;;;;;;;;;;;;;;;;;;;31796:190;31765:221::o;29022:347::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29119:23:0;::::1;29137:4;29119:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;29156:4:0::1;::::0;-1:-1:-1;;;;;29146:14:0;;::::1;29156:4:::0;::::1;29146:14;;29119:41;29111:50;;;::::0;::::1;;-1:-1:-1::0;;;;;29172:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;29172:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;29216:146:::1;;29241:11;::::0;;:31:::1;::::0;-1:-1:-1;;;29241:31:0;;-1:-1:-1;;;;;5127:32:1;;;29241:31:0::1;::::0;::::1;5109:51:1::0;29241:11:0::1;5176:18:1::0;;;5169:34;;;;29241:11:0;::::1;::::0;:20:::1;::::0;5082:18:1;;29241:31:0::1;4927:282:1::0;29216:146:0::1;29303:11;::::0;;-1:-1:-1;;;;;29332:17:0;;::::1;29303:11;29332:17:::0;;;:9:::1;:17;::::0;;;;;;;29303:47;;-1:-1:-1;;;29303:47:0;;::::1;::::0;::::1;5109:51:1::0;;;;5176:18;;;5169:34;;;;29303:11:0::1;::::0;:20:::1;::::0;5082:18:1;;29303:47:0::1;4927:282:1::0;29556:128:0;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29644:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;29644:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29556:128::o;3599:115::-;-1:-1:-1;;;;;3683:23:0;3659:4;3683:23;;;:14;:23;;;;;;;;;3599:115::o;157:181::-;215:7;;247:5;251:1;247;:5;:::i;:::-;235:17;;276:1;271;:6;;263:46;;;;-1:-1:-1;;;263:46:0;;8015:2:1;263:46:0;;;7997:21:1;8054:2;8034:18;;;8027:30;8093:29;8073:18;;;8066:57;8140:18;;263:46:0;7813:351:1;486:192:0;572:7;608:12;600:6;;;;592:29;;;;-1:-1:-1;;;592:29:0;;;;;;;;:::i;:::-;-1:-1:-1;632:9:0;644:5;648:1;644;:5;:::i;:::-;632:17;486:192;-1:-1:-1;;;;;486:192:0:o;20320:1879::-;20432:6;;20412:4;;20432:6;;;;;20429:63;;;20448:41;20463:6;20471:9;20482:6;20448:14;:41::i;:::-;20441:48;;;;20429:63;-1:-1:-1;;;;;20548:22:0;;;;;;:14;:22;;;;;;;;20547:23;:53;;;;-1:-1:-1;;;;;;20575:25:0;;;;;;:14;:25;;;;;;;;20574:26;20547:53;:83;;;;-1:-1:-1;20604:16:0;;-1:-1:-1;;;;;20604:26:0;;;:16;;:26;;20547:83;20544:160;;;20654:11;;;;20646:46;;;;-1:-1:-1;;;20646:46:0;;10304:2:1;20646:46:0;;;10286:21:1;10343:2;10323:18;;;10316:30;10382:25;10362:18;;;10355:53;10425:18;;20646:46:0;10102:347:1;20646:46:0;20787:4;;-1:-1:-1;;;;;20787:4:0;;;20777:14;;;;;;20816:17;;;20886:22;20816:17;20886:14;:22::i;:::-;20952:41;20967:6;20975:9;20986:6;20952:14;:41::i;:::-;21035:35;21052:6;21060:9;21035:16;:35::i;:::-;21108:47;21121:6;21129;21137:9;21148:6;21108:12;:47::i;:::-;21218:16;:14;:16::i;:::-;21215:35;;;21237:10;:8;:10::i;:::-;21314:6;21313:7;:17;;;;;21325:5;21324:6;21313:17;21309:155;;;21370:1;21355:12;:16;;;21383:13;:17;;;21412:12;:16;;;21440:8;:12;21309:155;21523:53;;;;;;;;;;;-1:-1:-1;;;21523:53:0;;;;;;;;-1:-1:-1;;;;;21523:17:0;;-1:-1:-1;21523:17:0;;;:9;:17;;;;;;;;:53;;21545:6;;21523:21;:53::i;:::-;-1:-1:-1;;;;;21503:17:0;;;;;;:9;:17;;;;;;;;:73;;;;24773:11;:19;;;;;;;;24772:20;21614:56;;21664:6;21614:56;;;21638:23;21646:6;21654;21638:7;:23::i;:::-;-1:-1:-1;;;;;21704:20:0;;;;;;:9;:20;;;;;;21589:81;;-1:-1:-1;21704:40:0;;21589:81;21704:24;:40::i;:::-;-1:-1:-1;;;;;21681:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;21790:24;;;;;:16;:24;;;;;;;21786:119;;21835:11;;;-1:-1:-1;;;;;21864:17:0;;;21835:11;21864:17;;;:9;:17;;;;;;;;21835:47;;-1:-1:-1;;;21835:47:0;;;;;5109:51:1;;;;5176:18;;;5169:34;;;;21835:11:0;;:20;;5082:18:1;;21835:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21831:63;;-1:-1:-1;;;;;21921:27:0;;;;;;:16;:27;;;;;;;;21917:129;;21969:11;;;-1:-1:-1;;;;;22001:20:0;;;21969:11;22001:20;;;:9;:20;;;;;;;;21969:53;;-1:-1:-1;;;21969:53:0;;;;;5109:51:1;;;;5176:18;;;5169:34;;;;21969:11:0;;:20;;5082:18:1;;21969:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21965:69;;22062:11;;22082:14;;22062:35;;-1:-1:-1;;;;;;22062:35:0;;-1:-1:-1;;;;;22062:11:0;;;;:19;;:35;;;;11287:25:1;;;11275:2;11260:18;;11141:177;22062:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22058:51;22143:9;-1:-1:-1;;;;;22126:43:0;22135:6;-1:-1:-1;;;;;22126:43:0;;22154:14;22126:43;;;;11287:25:1;;11275:2;11260:18;;11141:177;22126:43:0;;;;;;;;-1:-1:-1;22187:4:0;;20320:1879;-1:-1:-1;;;;;;20320:1879:0:o;344:136::-;402:7;429:43;433:1;436;429:43;;;;;;;;;;;;;;;;;:3;:43::i;684:250::-;742:7;766:6;762:47;;-1:-1:-1;796:1:0;789:8;;762:47;821:9;833:5;837:1;833;:5;:::i;:::-;821:17;-1:-1:-1;866:1:0;857:5;861:1;821:17;857:5;:::i;:::-;:10;849:56;;;;-1:-1:-1;;;849:56:0;;9137:2:1;849:56:0;;;9119:21:1;9176:2;9156:18;;;9149:30;9215:34;9195:18;;;9188:62;-1:-1:-1;;;9266:18:1;;;9259:31;9307:19;;849:56:0;8935:397:1;940:132:0;998:7;1025:39;1029:1;1032;1025:39;;;;;;;;;;;;;;;;;:3;:39::i;22236:330::-;22366:53;;;;;;;;;;;-1:-1:-1;;;22366:53:0;;;;;;;;-1:-1:-1;;;;;22366:17:0;;22329:4;22366:17;;;:9;:17;;;;;;;:53;;22388:6;;22366:21;:53::i;:::-;-1:-1:-1;;;;;22346:17:0;;;;;;;:9;:17;;;;;;:73;;;;22453:20;;;;;;;:32;;22478:6;22453:24;:32::i;:::-;-1:-1:-1;;;;;22430:20:0;;;;;;;:9;:20;;;;;;;:55;;;;22501:35;;;;;;;;;;22529:6;11287:25:1;;11275:2;11260:18;;11141:177;22501:35:0;;;;;;;;-1:-1:-1;22554:4:0;22236:330;;;;;:::o;22625:456::-;22685:6;22682:392;;;22722:16;;22707:12;:31;22769:17;;22753:13;:33;22816:16;;22801:12;:31;22858:12;;22847:8;:23;22625:456;:::o;22682:392::-;22918:15;;22903:12;:30;22964:16;;22948:13;:32;23010:15;;22995:12;:30;23051:11;;23040:8;:22;22682:392;22625:456;:::o;24036:601::-;-1:-1:-1;;;;;24141:22:0;;;;;;:14;:22;;;;;;;;24140:23;:51;;;;-1:-1:-1;;;;;;24168:23:0;;;;;;:15;:23;;;;;;;;24167:24;24140:51;:82;;;;-1:-1:-1;;;;;;24196:26:0;;;;;;:15;:26;;;;;;;;24195:27;24140:82;:104;;;;-1:-1:-1;24239:5:0;;-1:-1:-1;;;;;24226:18:0;;;24239:5;;24226:18;;24140:104;:134;;;;-1:-1:-1;;;;;;24248:26:0;;24269:4;24248:26;;24140:134;:165;;;;-1:-1:-1;24300:4:0;;-1:-1:-1;;;;;24279:26:0;;;24300:4;;24279:26;;24140:165;:186;;;;-1:-1:-1;24322:4:0;;-1:-1:-1;;;;;24309:17:0;;;24322:4;;24309:17;;24140:186;:223;;;;-1:-1:-1;24343:20:0;;-1:-1:-1;;;;;24330:33:0;;;24343:20;;24330:33;;24140:223;:261;;;;-1:-1:-1;24380:21:0;;-1:-1:-1;;;;;24367:34:0;;;24380:21;;24367:34;;24140:261;:292;;;;-1:-1:-1;24418:14:0;;-1:-1:-1;;;;;24405:27:0;;;24418:14;;24405:27;;24140:292;24136:494;;;-1:-1:-1;;;;;18615:18:0;;24448;18615;;;:9;:18;;;;;;24537:15;;24513:19;24526:6;18615:18;24513:19;:::i;:::-;24512:40;;24504:114;;;;-1:-1:-1;;;24504:114:0;;9539:2:1;24504:114:0;;;9521:21:1;9578:2;9558:18;;;9551:30;9617:34;9597:18;;;9590:62;9688:32;9668:18;;;9661:60;9738:19;;24504:114:0;9337:426:1;24136:494:0;24036:601;;;:::o;23626:378::-;23721:4;;-1:-1:-1;;;;;23711:14:0;;;23721:4;;23711:14;:49;;;;-1:-1:-1;23742:18:0;;;;23711:49;:94;;;;-1:-1:-1;;;;;;23778:27:0;;;;;;:16;:27;;;;;;;;23777:28;23711:94;23707:290;;;-1:-1:-1;;;;;23830:24:0;;;;;;:13;:24;;;;;;23857:15;-1:-1:-1;23822:82:0;;;;-1:-1:-1;;;23822:82:0;;8780:2:1;23822:82:0;;;8762:21:1;8819:2;8799:18;;;8792:30;8858;8838:18;;;8831:58;8906:18;;23822:82:0;8578:352:1;23822:82:0;23964:21;;23946:39;;23964:21;;;;;23946:15;:39;:::i;:::-;-1:-1:-1;;;;;23919:24:0;;;;;;:13;:24;;;;;:66;23626:378;;:::o;23113:478::-;23241:5;;-1:-1:-1;;;;;23228:18:0;;;23241:5;;23228:18;23224:360;;23265:6;23262:311;;;23309:16;;23299:6;:26;;:53;;;-1:-1:-1;;;;;;23329:23:0;;;;;;:15;:23;;;;;;;;23299:53;:83;;;-1:-1:-1;;;;;;23356:26:0;;;;;;:15;:26;;;;;;;;23299:83;23291:113;;;;-1:-1:-1;;;23291:113:0;;7327:2:1;23291:113:0;;;7309:21:1;7366:2;7346:18;;;7339:30;-1:-1:-1;;;7385:18:1;;;7378:47;7442:18;;23291:113:0;7125:341:1;23291:113:0;23262:311;;;23463:15;;23453:6;:25;;:52;;;-1:-1:-1;;;;;;23482:23:0;;;;;;:15;:23;;;;;;;;23453:52;:82;;;-1:-1:-1;;;;;;23509:26:0;;;;;;:15;:26;;;;;;;;23453:82;23445:112;;;;-1:-1:-1;;;23445:112:0;;7327:2:1;23445:112:0;;;7309:21:1;7366:2;7346:18;;;7339:30;-1:-1:-1;;;7385:18:1;;;7378:47;7442:18;;23445:112:0;7125:341:1;25222:197:0;25309:4;;25271;;-1:-1:-1;;;;;25309:4:0;25295:10;:18;;;;:38;;-1:-1:-1;25327:6:0;;;;;;;25326:7;25295:38;:62;;;;-1:-1:-1;25346:11:0;;;;;;;25295:62;:116;;;;-1:-1:-1;;25398:13:0;;25388:4;25370:24;;;;:9;:24;;;;;;:41;;;25222:197::o;25809:2104::-;15939:6;:13;;-1:-1:-1;;15939:13:0;;;;;25904:15:::1;::::0;25921:26:::1;::::0;15939:13;;25888:60:::1;::::0;:15:::1;:60::i;:::-;:79;;25955:12;;25888:79;;;25951:1;25888:79;25858:109;;25978:23;26004:59;26061:1;26004:52;26047:8;;26004:38;26022:19;26004:13;;:17;;:38;;;;:::i;:59::-;25978:85;;26074:20;26097:34;26115:15;26097:13;;:17;;:34;;;;:::i;:::-;26168:16;::::0;;26182:1:::1;26168:16:::0;;;;;::::1;::::0;;26074:57;;-1:-1:-1;26144:21:0::1;::::0;26168:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26168:16:0::1;26144:40;;26213:4;26195;26200:1;26195:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26195:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;26239:4:::1;::::0;26229:7;;26239:4;::::1;::::0;26229;;26239;;26229:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;26229:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;26396:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;26396:188:0;;26316:21:::1;::::0;26396:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;26468:12;;26292:21:::1;::::0;26511:4;;26538::::1;::::0;26558:15:::1;::::0;26396:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26595:18;26616:40;26642:13;26616:21;:25;;:40;;;;:::i;:::-;26595:61:::0;-1:-1:-1;26667:20:0::1;26690:40;26703:26;:19:::0;26727:1:::1;26703:23;:26::i;:::-;26690:8;::::0;;:12:::1;:40::i;:::-;26667:63:::0;-1:-1:-1;26774:27:0::1;26804:60;26862:1;26804:53;26667:63:::0;26804:53;:10;26819:19;26804:14:::1;:35::i;:60::-;26774:90;;26875:28;26906:47;26940:12;26906:29;26921:13;;26906:10;:14;;:29;;;;:::i;:47::-;26875:78;;26964:27;26994:46;27027:12;26994:28;27009:12;;26994:10;:14;;:28;;;;:::i;:46::-;26964:76;;27153:11;;;;;;;;;-1:-1:-1::0;;;;;27153:11:0::1;-1:-1:-1::0;;;;;27153:22:0::1;;27183:20;27153:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;27341:20:0::1;::::0;27333:78:::1;::::0;27283:21:::1;::::0;-1:-1:-1;;;;;27341:20:0::1;::::0;27401:5:::1;::::0;27375:19;;27283:21;27333:78;27283:21;27333:78;27375:19;27341:20;27401:5;27333:78:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27282:129;;;27430:16;27422:69;;;::::0;-1:-1:-1;;;27422:69:0;;8371:2:1;27422:69:0::1;::::0;::::1;8353:21:1::0;8410:2;8390:18;;;8383:30;8449:34;8429:18;;;8422:62;-1:-1:-1;;;8500:18:1;;;8493:38;8548:19;;27422:69:0::1;8169:404:1::0;27422:69:0::1;27545:19:::0;;27542:364:::1;;27580:6;::::0;27755:21:::1;::::0;27580:245:::1;::::0;-1:-1:-1;;;27580:245:0;;27657:4:::1;27580:245;::::0;::::1;5834:34:1::0;5884:18;;;5877:34;;;27580:6:0::1;5927:18:1::0;;;5920:34;;;5970:18;;;5963:34;-1:-1:-1;;;;;27755:21:0;;::::1;6013:19:1::0;;;6006:44;27795:15:0::1;6066:19:1::0;;;6059:35;27580:6:0;::::1;::::0;:22:::1;::::0;27610:19;;5768::1;;27580:245:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27845:49:0::1;::::0;;12482:25:1;;;12538:2;12523:18;;12516:34;;;27845:49:0::1;::::0;-1:-1:-1;12455:18:1;27845:49:0::1;;;;;;;27542:364;-1:-1:-1::0;;15957:6:0;:14;;-1:-1:-1;;15957:14:0;;;-1:-1:-1;;;;;;;;;25809:2104:0:o;24842:333::-;24909:7;24929:17;24949:40;24974:14;;24949:20;24960:8;;24949:6;:10;;:20;;;;:::i;:40::-;25047:4;25029:24;;;;:9;:24;;;;;;24929:60;;-1:-1:-1;25029:39:0;;24929:60;25029:28;:39::i;:::-;25020:4;25002:24;;;;:9;:24;;;;;;;:66;;;;25084:42;;-1:-1:-1;;;;;25084:42:0;;;;;;;25116:9;11287:25:1;;11275:2;11260:18;;11141:177;25084:42:0;;;;;;;;25146:21;:6;25157:9;25146:10;:21::i;:::-;25139:28;24842:333;-1:-1:-1;;;;24842:333:0:o;1078:345::-;1164:7;1266:12;1259:5;1251:28;;;;-1:-1:-1;;;1251:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1290:9:0;1302:5;1306:1;1302;:5;:::i;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;691:388::-;759:6;767;820:2;808:9;799:7;795:23;791:32;788:52;;;836:1;833;826:12;788:52;875:9;862:23;894:31;919:5;894:31;:::i;:::-;944:5;-1:-1:-1;1001:2:1;986:18;;973:32;1014:33;973:32;1014:33;:::i;:::-;1066:7;1056:17;;;691:388;;;;;:::o;1084:456::-;1161:6;1169;1177;1230:2;1218:9;1209:7;1205:23;1201:32;1198:52;;;1246:1;1243;1236:12;1198:52;1285:9;1272:23;1304:31;1329:5;1304:31;:::i;:::-;1354:5;-1:-1:-1;1411:2:1;1396:18;;1383:32;1424:33;1383:32;1424:33;:::i;:::-;1084:456;;1476:7;;-1:-1:-1;;;1530:2:1;1515:18;;;;1502:32;;1084:456::o;1545:315::-;1610:6;1618;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1726:9;1713:23;1745:31;1770:5;1745:31;:::i;:::-;1795:5;-1:-1:-1;1819:35:1;1850:2;1835:18;;1819:35;:::i;:::-;1809:45;;1545:315;;;;;:::o;1865:::-;1933:6;1941;1994:2;1982:9;1973:7;1969:23;1965:32;1962:52;;;2010:1;2007;2000:12;1962:52;2049:9;2036:23;2068:31;2093:5;2068:31;:::i;:::-;2118:5;2170:2;2155:18;;;;2142:32;;-1:-1:-1;;;1865:315:1:o;2185:180::-;2241:6;2294:2;2282:9;2273:7;2269:23;2265:32;2262:52;;;2310:1;2307;2300:12;2262:52;2333:26;2349:9;2333:26;:::i;2370:248::-;2435:6;2443;2496:2;2484:9;2475:7;2471:23;2467:32;2464:52;;;2512:1;2509;2502:12;2464:52;2535:26;2551:9;2535:26;:::i;2623:337::-;2686:6;2694;2747:2;2735:9;2726:7;2722:23;2718:32;2715:52;;;2763:1;2760;2753:12;2715:52;2786:26;2802:9;2786:26;:::i;:::-;2776:36;;2862:2;2851:9;2847:18;2834:32;2906:4;2899:5;2895:16;2888:5;2885:27;2875:55;;2926:1;2923;2916:12;2965:180;3024:6;3077:2;3065:9;3056:7;3052:23;3048:32;3045:52;;;3093:1;3090;3083:12;3045:52;-1:-1:-1;3116:23:1;;2965:180;-1:-1:-1;2965:180:1:o;3150:184::-;3220:6;3273:2;3261:9;3252:7;3248:23;3244:32;3241:52;;;3289:1;3286;3279:12;3241:52;-1:-1:-1;3312:16:1;;3150:184;-1:-1:-1;3150:184:1:o;3339:248::-;3407:6;3415;3468:2;3456:9;3447:7;3443:23;3439:32;3436:52;;;3484:1;3481;3474:12;3436:52;-1:-1:-1;;3507:23:1;;;3577:2;3562:18;;;3549:32;;-1:-1:-1;3339:248:1:o;3592:306::-;3680:6;3688;3696;3749:2;3737:9;3728:7;3724:23;3720:32;3717:52;;;3765:1;3762;3755:12;3717:52;3794:9;3788:16;3778:26;;3844:2;3833:9;3829:18;3823:25;3813:35;;3888:2;3877:9;3873:18;3867:25;3857:35;;3592:306;;;;;:::o;3903:385::-;3989:6;3997;4005;4013;4066:3;4054:9;4045:7;4041:23;4037:33;4034:53;;;4083:1;4080;4073:12;4034:53;-1:-1:-1;;4106:23:1;;;4176:2;4161:18;;4148:32;;-1:-1:-1;4227:2:1;4212:18;;4199:32;;4278:2;4263:18;4250:32;;-1:-1:-1;3903:385:1;-1:-1:-1;3903:385:1:o;6523:597::-;6635:4;6664:2;6693;6682:9;6675:21;6725:6;6719:13;6768:6;6763:2;6752:9;6748:18;6741:34;6793:1;6803:140;6817:6;6814:1;6811:13;6803:140;;;6912:14;;;6908:23;;6902:30;6878:17;;;6897:2;6874:26;6867:66;6832:10;;6803:140;;;6961:6;6958:1;6955:13;6952:91;;;7031:1;7026:2;7017:6;7006:9;7002:22;6998:31;6991:42;6952:91;-1:-1:-1;7104:2:1;7083:15;-1:-1:-1;;7079:29:1;7064:45;;;;7111:2;7060:54;;6523:597;-1:-1:-1;;;6523:597:1:o;9768:329::-;9970:2;9952:21;;;10009:1;9989:18;;;9982:29;-1:-1:-1;;;10042:2:1;10027:18;;10020:36;10088:2;10073:18;;9768:329::o;10801:335::-;11003:2;10985:21;;;11042:2;11022:18;;;11015:30;-1:-1:-1;;;11076:2:1;11061:18;;11054:41;11127:2;11112:18;;10801:335::o;11323:980::-;11585:4;11633:3;11622:9;11618:19;11664:6;11653:9;11646:25;11690:2;11728:6;11723:2;11712:9;11708:18;11701:34;11771:3;11766:2;11755:9;11751:18;11744:31;11795:6;11830;11824:13;11861:6;11853;11846:22;11899:3;11888:9;11884:19;11877:26;;11938:2;11930:6;11926:15;11912:29;;11959:1;11969:195;11983:6;11980:1;11977:13;11969:195;;;12048:13;;-1:-1:-1;;;;;12044:39:1;12032:52;;12139:15;;;;12104:12;;;;12080:1;11998:9;11969:195;;;-1:-1:-1;;;;;;;12220:32:1;;;;12215:2;12200:18;;12193:60;-1:-1:-1;;;12284:3:1;12269:19;12262:35;12181:3;11323:980;-1:-1:-1;;;11323:980:1:o;12750:128::-;12790:3;12821:1;12817:6;12814:1;12811:13;12808:39;;;12827:18;;:::i;:::-;-1:-1:-1;12863:9:1;;12750:128::o;12883:217::-;12923:1;12949;12939:132;;12993:10;12988:3;12984:20;12981:1;12974:31;13028:4;13025:1;13018:15;13056:4;13053:1;13046:15;12939:132;-1:-1:-1;13085:9:1;;12883:217::o;13105:168::-;13145:7;13211:1;13207;13203:6;13199:14;13196:1;13193:21;13188:1;13181:9;13174:17;13170:45;13167:71;;;13218:18;;:::i;:::-;-1:-1:-1;13258:9:1;;13105:168::o;13278:125::-;13318:4;13346:1;13343;13340:8;13337:34;;;13351:18;;:::i;:::-;-1:-1:-1;13388:9:1;;13278:125::o;13408:127::-;13469:10;13464:3;13460:20;13457:1;13450:31;13500:4;13497:1;13490:15;13524:4;13521:1;13514:15;13540:127;13601:10;13596:3;13592:20;13589:1;13582:31;13632:4;13629:1;13622:15;13656:4;13653:1;13646:15;13804:131;-1:-1:-1;;;;;13879:31:1;;13869:42;;13859:70;;13925:1;13922;13915:12

Swarm Source

ipfs://ef38b87426ab8eb0223b01dd20385b76899d3193d1586649a4fa1943a2729379

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.