Contract 0x2E5fe21ecbB7d3E732aAC44eb73aab7A0e5EeddB 11

 

Contract Overview

Warren: WARREN Token
Balance:
0 ETH

ETH Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x27e8144f1d5c0c2e3c3c959cb2b90f7bfab21d693b412861ae1985bab6153806Approve1954790132024-03-29 15:35:3617 days 5 hrs ago0x212235e8d2bde9a6d3c057f6a9c3b95c039a52ad IN  Warren: WARREN Token0 ETH0.00000240.01
0xbdc8c5b786af26d341823313643e50acbc5207aaf42d954a2d827c2a26ee82f4Manual Send1316591722023-09-16 14:55:26212 days 6 hrs agoWarren: Deployer IN  Warren: WARREN Token0 ETH0.00001174 0.1
0x1838d0f7ae5d8106ed6e19cca91412a4f3228696d482e52e134a3d0b2c784368Approve1216208602023-08-15 11:44:45244 days 9 hrs ago0x86756c13411b4b2ff85d8d7494c0b135c7ad7fb9 IN  Warren: WARREN Token0 ETH0.00003856 0.1
0x3a53dc036950050279d6403fc6cd400e9772303aec52d61de86973ed954ad48dApprove1216202052023-08-15 11:41:59244 days 9 hrs ago0xdb9dea39d9fa8bdb0fb764066399ceac1da5aba8 IN  Warren: WARREN Token0 ETH0.00003856 0.1
0xd731c22bdb6e055077edf317b6a3126977eb26166fab22977eb4c25f6ede0912Approve1216191122023-08-15 11:37:23244 days 9 hrs ago0x3fe58ccb6aa27fb1b5d74e732bf51e9902cf0b14 IN  Warren: WARREN Token0 ETH0.00003864 0.1
0x00dbd673c77926ad59164fb27af770ae24fc4c3885791771c6f963e8b67e66adApprove1216185952023-08-15 11:35:13244 days 9 hrs ago0xf4a3fe91f10ac52d5391ddf719ae4c65442a057e IN  Warren: WARREN Token0 ETH0.00003864 0.1
0x15334b828c4b44be3d3c3fd674a0e4ea98ebb6bd36a1e38ceeab572222c2f6acApprove1216182212023-08-15 11:33:39244 days 9 hrs ago0xa03410300a703bf10b75b9b44b7925ff4f445e06 IN  Warren: WARREN Token0 ETH0.00003864 0.1
0xca6934ab87a0a477e6b2034398cb93f0e4e1ece3e5ecca52c8fcd6996fe350bcApprove1216176132023-08-15 11:31:04244 days 9 hrs ago0x0144af0a3d84bdf1e5c9a5d80cafd3377a2efdef IN  Warren: WARREN Token0 ETH0.00004071 0.1
0x80aa66b5811cb7a69b4ff7ce414b1b93d0409bb1e90238d6c8d3f4cf7bacaa91Approve1216172422023-08-15 11:29:29244 days 9 hrs ago0x6a79b032ca995208f7228b20bf7296baee40adf2 IN  Warren: WARREN Token0 ETH0.00004071 0.1
0xa200e186aeab52792dee6f21fffc49784572f1d15598bd86bd1bf13b6e2018beApprove1216160172023-08-15 11:24:19244 days 9 hrs ago0xb7141a1690acdadf917008a37427d6c92ec3fad2 IN  Warren: WARREN Token0 ETH0.00004076 0.1
0x427c984e7236acc2e2f6389ac9a3b8a20083c352422fe98a77d2fe089e734c76Approve1216158352023-08-15 11:23:33244 days 10 hrs ago0x52909f75f54277774356b66c0fe1c393d29ab21d IN  Warren: WARREN Token0 ETH0.00004076 0.1
0x0b5b6f1a6889bf100231fe072be36ab0c18faf9fda880d36e82be78ff1ffd253Approve1216155912023-08-15 11:22:30244 days 10 hrs ago0xbd74622db80fcdb553a856925c0f27a06bccd613 IN  Warren: WARREN Token0 ETH0.00004076 0.1
0xffce80f4c32b667b349a4e09132a8605ff4c08910d0986fb9d1024b0f752e9cfApprove1216147742023-08-15 11:19:06244 days 10 hrs ago0x3aa74896bc59bbbba48b5133fd40968f18eb9514 IN  Warren: WARREN Token0 ETH0.00003853 0.1
0x1854e1360cdb18ccf89a2e9986c98a80652c9e61ca3c62a04866724a98fdf867Approve1216144452023-08-15 11:17:42244 days 10 hrs ago0x72728aa32334aa2c52ca43719f41f9b4daf3c5e2 IN  Warren: WARREN Token0 ETH0.00003853 0.1
0xd4d952e163d0f7a2bf7aa198af8e35de35d0e7ac444911ecc1a2fd284a0af926Approve1216140912023-08-15 11:16:12244 days 10 hrs ago0x6cbebba114f19d3ac04a96a6f0cde23b6173ce72 IN  Warren: WARREN Token0 ETH0.00003853 0.1
0xbb964786eca13c4f32512000c161ff204bb8cabae552a7ff2d88d2523e2281ddApprove1216137892023-08-15 11:14:55244 days 10 hrs ago0xf21e83ce0420b40b64b74bd54e676cadcd00dd9f IN  Warren: WARREN Token0 ETH0.00003853 0.1
0xb8ca08790f179f5611aab9f2fb7b8ddf54d5a61f6e0664b74389732abf367a7dApprove1216128992023-08-15 11:11:14244 days 10 hrs ago0x8ec1cc0474f7e552acf006ed56a2d1063778a0da IN  Warren: WARREN Token0 ETH0.00003725 0.1
0xebde9cab15c3797ef9f55155fc4a2db62d2ca113da9a64b2d6e2a318e14721daApprove1216123592023-08-15 11:08:59244 days 10 hrs ago0x2b14d087982409f5aa99abf9921ea976662c1534 IN  Warren: WARREN Token0 ETH0.00003725 0.1
0x69a2dbccf5f6873c12839f39a859191ebb1f09e720c4cdfa1448b4f5a739a2bfApprove1216121032023-08-15 11:07:54244 days 10 hrs ago0x4b8e025ca518120f566f6177ffce3c26167c1880 IN  Warren: WARREN Token0 ETH0.00003725 0.1
0x8618f75ae0a5527e151ee758301b1bc1f17936f7e0e5b070b093f227360d04b8Approve1216117342023-08-15 11:06:22244 days 10 hrs ago0x7a4dde6810b1e030e76b6d72abc7d47ea62524a2 IN  Warren: WARREN Token0 ETH0.00003387 0.1
0xd132bb3294eae5c118f7487cd66f98048f2a19d2a0971c7a862d647d25020b5dApprove1216114692023-08-15 11:05:14244 days 10 hrs ago0xe5e3739802d1eda15fa2cae0c16d717a9f98ba60 IN  Warren: WARREN Token0 ETH0.00003387 0.1
0x93bbb610023e94dc91bc41c29b32de91526b27b6c577f326372e3bdcdc93e1f2Approve1216112622023-08-15 11:04:22244 days 10 hrs ago0xe1934c0e464e6e5d32f3e800035e7a1862339399 IN  Warren: WARREN Token0 ETH0.00003387 0.1
0xe3ed16a8956313428b0a7c20013c9f875435e99076c9f44a4b1bfcf99adcd036Approve1216110082023-08-15 11:03:18244 days 10 hrs ago0xcf9f9692c9489c9762f84554fae2c1ef0983bac2 IN  Warren: WARREN Token0 ETH0.00003387 0.1
0xfdab34f122ae178d7044c3923b44d1dce4097670dd5b6a69319ebe682647dd28Approve1214072732023-08-14 19:33:48245 days 1 hr ago0xd007c94644fc47af085c3e2eda906270ec123071 IN  Warren: WARREN Token0 ETH0.00005130.1
0xea19a7a5211adb632c87677f271ae2685fc259414e7ae3639f3fd6676ea1e55fApprove1212728682023-08-14 9:50:39245 days 11 hrs ago0x7a4cfcfe68e7a9117692f5bab0346bed37e05a82 IN  Warren: WARREN Token0 ETH0.00003807 0.1
[ Download CSV Export 

OVERVIEW

Warren is a dog-themed crypto investment fund inspired by investor Warren Buffet. The token rewards holders with a 2% USDC reward on every buy and sale. Hold 100,000 or more tokens and you can join the vault which will reward holders with a percentage of profits from our investment fund.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xbdc8c5b786af26d341823313643e50acbc5207aaf42d954a2d827c2a26ee82f41316591722023-09-16 14:55:26212 days 6 hrs ago Warren: WARREN TokenWarren: Deployer0.067049834567246577 ETH
0x7d15915080ee14e31cea517d2e3883b77338ead5099f40e9f76f2e393570e12e1216202712023-08-15 11:42:16244 days 9 hrs ago Warren: WARREN Token0xc815f2593e242544dbcd74e0afed4eaec64e4a020.000403005425583766 ETH
0x7d15915080ee14e31cea517d2e3883b77338ead5099f40e9f76f2e393570e12e1216202712023-08-15 11:42:16244 days 9 hrs ago Warren: WARREN Token0x6bc7d8cc20b68d1c9aa75522ed8ab82a56095a410.000201502712791883 ETH
0x7d15915080ee14e31cea517d2e3883b77338ead5099f40e9f76f2e393570e12e1216202712023-08-15 11:42:16244 days 9 hrs ago Warren: WARREN Token 0x7409779a109bf5373fc2744efcc13c31b189cc360.000403005425583766 ETH
0x7d15915080ee14e31cea517d2e3883b77338ead5099f40e9f76f2e393570e12e1216202712023-08-15 11:42:16244 days 9 hrs ago SushiSwap: Router Warren: WARREN Token0.001209016276751298 ETH
0xa30c1ef63a51b4f5655ee31d86d611115d14e1f9178c51c8e4bf7bcefe72ed4d1216186822023-08-15 11:35:35244 days 9 hrs ago Warren: WARREN Token0xc815f2593e242544dbcd74e0afed4eaec64e4a020.00044382687807982 ETH
0xa30c1ef63a51b4f5655ee31d86d611115d14e1f9178c51c8e4bf7bcefe72ed4d1216186822023-08-15 11:35:35244 days 9 hrs ago Warren: WARREN Token0x6bc7d8cc20b68d1c9aa75522ed8ab82a56095a410.00022191343903991 ETH
0xa30c1ef63a51b4f5655ee31d86d611115d14e1f9178c51c8e4bf7bcefe72ed4d1216186822023-08-15 11:35:35244 days 9 hrs ago Warren: WARREN Token 0x7409779a109bf5373fc2744efcc13c31b189cc360.00044382687807982 ETH
0xa30c1ef63a51b4f5655ee31d86d611115d14e1f9178c51c8e4bf7bcefe72ed4d1216186822023-08-15 11:35:35244 days 9 hrs ago SushiSwap: Router Warren: WARREN Token0.001331480634239462 ETH
0x6d369cfb4c7bc282aa0c1e807ce19790c1d4b6ba3738632c4ad96b186a8cc8941216173312023-08-15 11:29:52244 days 9 hrs ago Warren: WARREN Token0xc815f2593e242544dbcd74e0afed4eaec64e4a020.000485632890105375 ETH
0x6d369cfb4c7bc282aa0c1e807ce19790c1d4b6ba3738632c4ad96b186a8cc8941216173312023-08-15 11:29:52244 days 9 hrs ago Warren: WARREN Token0x6bc7d8cc20b68d1c9aa75522ed8ab82a56095a410.000242816445052687 ETH
0x6d369cfb4c7bc282aa0c1e807ce19790c1d4b6ba3738632c4ad96b186a8cc8941216173312023-08-15 11:29:52244 days 9 hrs ago Warren: WARREN Token 0x7409779a109bf5373fc2744efcc13c31b189cc360.000485632890105375 ETH
0x6d369cfb4c7bc282aa0c1e807ce19790c1d4b6ba3738632c4ad96b186a8cc8941216173312023-08-15 11:29:52244 days 9 hrs ago SushiSwap: Router Warren: WARREN Token0.001456898670316126 ETH
0x7de4d45f6cf6b2e7545faa237e6174e7e6597b8cc86c8a4d29ca5681c040759e1216161362023-08-15 11:24:49244 days 9 hrs ago Warren: WARREN Token0xc815f2593e242544dbcd74e0afed4eaec64e4a020.000502107448016515 ETH
0x7de4d45f6cf6b2e7545faa237e6174e7e6597b8cc86c8a4d29ca5681c040759e1216161362023-08-15 11:24:49244 days 9 hrs ago Warren: WARREN Token0x6bc7d8cc20b68d1c9aa75522ed8ab82a56095a410.000251053724008257 ETH
0x7de4d45f6cf6b2e7545faa237e6174e7e6597b8cc86c8a4d29ca5681c040759e1216161362023-08-15 11:24:49244 days 9 hrs ago Warren: WARREN Token 0x7409779a109bf5373fc2744efcc13c31b189cc360.000502107448016515 ETH
0x7de4d45f6cf6b2e7545faa237e6174e7e6597b8cc86c8a4d29ca5681c040759e1216161362023-08-15 11:24:49244 days 9 hrs ago SushiSwap: Router Warren: WARREN Token0.001506322344049545 ETH
0xee01c0af5c6fe32ae33b7fd96c02ec06cd04e237bd905da92bc1b73add1efea61216148682023-08-15 11:19:30244 days 10 hrs ago Warren: WARREN Token0xc815f2593e242544dbcd74e0afed4eaec64e4a020.000563452543199298 ETH
0xee01c0af5c6fe32ae33b7fd96c02ec06cd04e237bd905da92bc1b73add1efea61216148682023-08-15 11:19:30244 days 10 hrs ago Warren: WARREN Token0x6bc7d8cc20b68d1c9aa75522ed8ab82a56095a410.000281726271599649 ETH
0xee01c0af5c6fe32ae33b7fd96c02ec06cd04e237bd905da92bc1b73add1efea61216148682023-08-15 11:19:30244 days 10 hrs ago Warren: WARREN Token 0x7409779a109bf5373fc2744efcc13c31b189cc360.000563452543199298 ETH
0xee01c0af5c6fe32ae33b7fd96c02ec06cd04e237bd905da92bc1b73add1efea61216148682023-08-15 11:19:30244 days 10 hrs ago SushiSwap: Router Warren: WARREN Token0.001690357629597894 ETH
0x47d2889b463d01c6125447c1f5e679422d6c7b5eaa2d1c885702baf774df075b1216129572023-08-15 11:11:28244 days 10 hrs ago Warren: WARREN Token0xc815f2593e242544dbcd74e0afed4eaec64e4a020.000633491462284338 ETH
0x47d2889b463d01c6125447c1f5e679422d6c7b5eaa2d1c885702baf774df075b1216129572023-08-15 11:11:28244 days 10 hrs ago Warren: WARREN Token0x6bc7d8cc20b68d1c9aa75522ed8ab82a56095a410.000316745731142169 ETH
0x47d2889b463d01c6125447c1f5e679422d6c7b5eaa2d1c885702baf774df075b1216129572023-08-15 11:11:28244 days 10 hrs ago Warren: WARREN Token 0x7409779a109bf5373fc2744efcc13c31b189cc360.000633491462284338 ETH
0x47d2889b463d01c6125447c1f5e679422d6c7b5eaa2d1c885702baf774df075b1216129572023-08-15 11:11:28244 days 10 hrs ago SushiSwap: Router Warren: WARREN Token0.001900474386853015 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WARREN

Compiler Version
v0.8.5+commit.a4f2e591

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2023-02-21
*/

// Warren is here

//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;
    function setRewardToken (IBEP20 _USDC) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

/* Our DividendDistributor contract responsible for distributing the earn token */
contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

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

    // EARN
    IBEP20 public USDC = IBEP20(0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8);
    address WETH = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1;
    IDEXRouter router;

    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;
    uint256 public minDistribution = 1 * (10 ** 12);

    uint256 currentIndex;

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

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

    constructor (address _router) {
        router = _router != address(0)
            ? IDEXRouter(_router)
            : IDEXRouter(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506);
        _token = msg.sender;
    }

    //New function to set the Reward
    function setRewardToken (IBEP20 _USDC) external override onlyToken {
        USDC = IBEP20(_USDC);
    }

    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 deposit() external payable override onlyToken {
        uint256 balanceBefore = USDC.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(USDC);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = USDC.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    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);
            USDC.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    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();
    }
}

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

    // Addresses
    address USDC = 0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8; 
    address WETH = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1;
    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 = "Warren";
    string constant _symbol = "WARREN";
    uint8 constant _decimals = 18;

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

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

    // 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 = 100;
    uint256 devFeeBuy = 200;
    uint256 reflectionFeeBuy = 200;
    uint256 marketingFeeBuy = 100;
    uint256 totalFeeBuy = 600;      

    // Sell fees
    uint256 liquidityFeeSell = 150;
    uint256 devFeeSell = 300;
    uint256 reflectionFeeSell = 300;
    uint256 marketingFeeSell = 150;
    uint256 totalFeeSell = 900;

    // 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 = 20;
    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; }

    /* Token constructor */
    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        distributor = new DividendDistributor(address(router));
        
        // Should be the owner wallet/token distributor
        TOKENDISTRIBUTOR = msg.sender;
        address _presaler = msg.sender;
        isFeeExempt[_presaler] = true;
        isTxLimitExempt[_presaler] = 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;

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

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

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

        //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;
            devFee = devFeeSell;
            reflectionFee = reflectionFeeSell;
            marketingFee = marketingFeeSell;
            totalFee = totalFeeSell;
        } else {
            liquidityFee = liquidityFeeBuy;
            devFee = devFeeBuy;
            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;

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );
        uint256 amountWETH = address(this).balance.sub(balanceBefore);
        uint256 totalWETHFee = totalFee.sub(dynamicLiquidityFee.div(2));
        uint256 amountWETHLiquidity = amountWETH.mul(dynamicLiquidityFee).div(totalWETHFee).div(2);
        uint256 amountWETHReflection = amountWETH.mul(reflectionFee).div(totalWETHFee);
        uint256 amountWETHMarketing = amountWETH.mul(marketingFee).div(totalWETHFee);
        uint256 amountWETHDev = amountWETH.mul(devFee).div(totalWETHFee); 


        try distributor.deposit{value: amountWETHReflection}() {} catch {}
        (bool successMarketing, /* bytes memory data */) = payable(marketingFeeReceiver).call{value: amountWETHMarketing, gas: 30000}("");
        (bool successDev, /* bytes memory data */) = payable(devFeeReceiver).call{value: amountWETHDev, gas: 30000}(""); 
        require(successMarketing, "marketing receiver rejected ETH transfer");
        require(successDev, "Dev receiver rejected ETH transfer");

        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 authorized {
        _maxBuyTxAmount = _totalSupply.mul(maxBuyTxPercent).div(10000);
    }

    // Set max sell TX 
    function setSellTxLimitInPercent(uint256 maxSellTxPercent) external authorized {
        _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 _devFeeBuy, uint256 _reflectionFeeBuy, uint256 _marketingFeeBuy, uint256 _feeDenominator) external authorized {
        liquidityFeeBuy = _liquidityFeeBuy;
        devFeeBuy = _devFeeBuy;
        reflectionFeeBuy = _reflectionFeeBuy;
        marketingFeeBuy = _marketingFeeBuy;
        totalFeeBuy = _liquidityFeeBuy.add(_devFeeBuy).add(_reflectionFeeBuy).add(_marketingFeeBuy);
        feeDenominator = _feeDenominator;
    }

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

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

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

    

    // 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 {
        uint256 contractETHBalance = address(this).balance;
        payable(autoLiquidityReceiver).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 {
        distributor.claimDividend(msg.sender);
    }

    //New function to set the Reward
    function setRewardToken(IBEP20 _USDC) external authorized {
        distributor.setRewardToken(_USDC);
    }
    
    // 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);
    
}

Contract ABI

[{"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":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_devFeeBuy","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"},{"internalType":"address","name":"_devFeeReceiver","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":"contract IBEP20","name":"_USDC","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_devFeeSell","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":"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"}]

6080604052600280546001600160a01b031990811673ff970a61a04b1ca14834a43f5de4533ebddb5cc8179091556003805482167382af49447d8a07e3bd95bd0d56f35241523fbab117905560048054821661dead1790556005805490911690556200006e6012600a6200054c565b6200007e90633b9aca006200060d565b600a55612710600a5460c86200009591906200060d565b620000a19190620004e0565b600b55612710600a5460c8620000b891906200060d565b620000c49190620004e0565b600c55612710600a5460c8620000db91906200060d565b620000e79190620004e0565b600d55606460145560c860155560c86016556064601755610258601855609660195561012c601a5561012c601b556096601c55610384601d55612710602355612710600a5460146200013a91906200060d565b620001469190620004e0565b602455601460255560646026556207a1206028556029805461050161ffff1991821617909155602e80549091166101001790553480156200018657600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff1916909217909155602b8054731b02da8cb0d097eb8d57a175b88c7d8b47997506931683179055825163c45a015560e01b81529251919263c45a01559260048083019392829003018186803b1580156200020857600080fd5b505afa1580156200021d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002439190620004ae565b6003546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b1580156200029057600080fd5b505af1158015620002a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cb9190620004ae565b602c80546001600160a01b0319166001600160a01b03928316179055306000908152600f60209081526040808320602b80548616855292529182902060001990555490519116906200031d90620004a0565b6001600160a01b039091168152602001604051809103906000f0801580156200034a573d6000803e3d6000fd5b50602780546001600160a01b039283166001600160a01b031991821617909155600680548216339081179091556000818152601060209081526040808320805460ff19908116600190811790925560118452828520805482168317905560128452828520805482168317905560048054891686528386208054831684179055308087528487208054841685179055602c548a1687526013865284872080548416851790558652838620805483168417905554909716845281842080549097161790955560078054851684179055600880548516736bc7d8cc20b68d1c9aa75522ed8ab82a56095a411790556009805490941673c815f2593e242544dbcd74e0afed4eaec64e4a0217909355600a54828252600e84528482208190559351938452909283927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000645565b61110c806200315583390190565b600060208284031215620004c157600080fd5b81516001600160a01b0381168114620004d957600080fd5b9392505050565b600082620004fe57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620005445781600019048211156200052857620005286200062f565b808516156200053657918102915b93841c939080029062000508565b509250929050565b6000620004d960ff841683600082620005685750600162000607565b81620005775750600062000607565b81600181146200059057600281146200059b57620005bb565b600191505062000607565b60ff841115620005af57620005af6200062f565b50506001821b62000607565b5060208310610133831016604e8410600b8410161715620005e0575081810a62000607565b620005ec838362000503565b80600019048211156200060357620006036200062f565b0290505b92915050565b60008160001904831182151516156200062a576200062a6200062f565b500290565b634e487b7160e01b600052601160045260246000fd5b612b0080620006556000396000f3fe6080604052600436106103545760003560e01c8063893d20e8116101c6578063dab84ee7116100f7578063f2fde38b11610095578063f84ba65d1161006f578063f84ba65d14610a05578063f887ea4014610a25578063fe9fbb8014610a45578063ffb54a9914610a6557600080fd5b8063f2fde38b146109b0578063f4293890146109d0578063f708a64f146109e557600080fd5b8063df4a76c5116100d1578063df4a76c51461093b578063e96fada21461095b578063f0b37c041461097b578063f0fc6bca1461099b57600080fd5b8063dab84ee7146108b5578063dd62ed3e146108d5578063df20fd491461091b57600080fd5b8063b6a5d7de11610164578063ca33e64c1161013e578063ca33e64c1461083f578063cf4be3941461085f578063d51ed1c814610875578063d7c010321461089557600080fd5b8063b6a5d7de146107e9578063bf56b37114610809578063c1cf53c41461081f57600080fd5b80639d1944f5116101a05780639d1944f514610769578063a6b06a2714610789578063a8aa1b31146107a9578063a9059cbb146107c957600080fd5b8063893d20e8146106e85780638aee81271461071a57806395d89b411461073a57600080fd5b8063313ce567116102a0578063658d4b7f1161023e578063722b62ad11610218578063722b62ad1461067357806378109e54146106925780637affa29b146106a857806382bf293c146106c857600080fd5b8063658d4b7f146105fe5780636ddd17131461061e57806370a082311461063d57600080fd5b806347a28b791161027a57806347a28b791461058457806350db71fb146105a4578063571ac8b0146105c4578063617fe0ed146105e457600080fd5b8063313ce5671461052c578063334773271461054e57806338280e6b1461056457600080fd5b8063201e79911161030d5780632b112e49116102e75780632b112e49146104a85780632d48e896146104bd5780632d594567146104dd5780632f54bf6e146104fd57600080fd5b8063201e79911461044857806323b872dd1461046857806328fd31981461048857600080fd5b80630445b6671461036057806306fdde0314610389578063095ea7b3146103c15780630d295980146103f15780631161ae391461041357806318160ddd1461043357600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660245481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b506040805180820190915260068152652bb0b93932b760d11b60208201525b604051610380919061290e565b3480156103cd57600080fd5b506103e16103dc3660046127bc565b610a7f565b6040519015158152602001610380565b3480156103fd57600080fd5b5061041161040c3660046127e8565b610aec565b005b34801561041f57600080fd5b506103e161042e366004612883565b610b32565b34801561043f57600080fd5b50600a54610376565b34801561045457600080fd5b50610411610463366004612883565b610b46565b34801561047457600080fd5b506103e1610483366004612746565b610b76565b34801561049457600080fd5b506103766104a33660046126a5565b610c38565b3480156104b457600080fd5b50610376610cb6565b3480156104c957600080fd5b506104116104d8366004612883565b610d08565b3480156104e957600080fd5b506104116104f836600461281f565b610d97565b34801561050957600080fd5b506103e16105183660046126a5565b6000546001600160a01b0391821691161490565b34801561053857600080fd5b5060125b60405160ff9091168152602001610380565b34801561055a57600080fd5b50610376600b5481565b34801561057057600080fd5b5061041161057f3660046126a5565b610de8565b34801561059057600080fd5b5061041161059f3660046128d3565b610e6f565b3480156105b057600080fd5b506104116105bf366004612787565b610eca565b3480156105d057600080fd5b506103e16105df3660046126a5565b610f1a565b3480156105f057600080fd5b506029546103e19060ff1681565b34801561060a57600080fd5b50610411610619366004612787565b610f28565b34801561062a57600080fd5b50602e546103e190610100900460ff1681565b34801561064957600080fd5b506103766106583660046126a5565b6001600160a01b03166000908152600e602052604090205490565b34801561067f57600080fd5b5060295461053c90610100900460ff1681565b34801561069e57600080fd5b50610376600d5481565b3480156106b457600080fd5b506104116106c3366004612851565b610f78565b3480156106d457600080fd5b506104116106e3366004612851565b610fc4565b3480156106f457600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610380565b34801561072657600080fd5b506104116107353660046126a5565b61100f565b34801561074657600080fd5b506040805180820190915260068152652ba0a92922a760d11b60208201526103b4565b34801561077557600080fd5b50610411610784366004612851565b611096565b34801561079557600080fd5b506104116107a4366004612787565b6110cf565b3480156107b557600080fd5b50602c54610702906001600160a01b031681565b3480156107d557600080fd5b506103e16107e43660046127bc565b611141565b3480156107f557600080fd5b506104116108043660046126a5565b61114e565b34801561081557600080fd5b50610376602d5481565b34801561082b57600080fd5b5061041161083a3660046128d3565b61119f565b34801561084b57600080fd5b50600754610702906001600160a01b031681565b34801561086b57600080fd5b50610376600c5481565b34801561088157600080fd5b50610376610890366004612851565b6111f4565b3480156108a157600080fd5b506104116108b03660046126fb565b611232565b3480156108c157600080fd5b50600954610702906001600160a01b031681565b3480156108e157600080fd5b506103766108f03660046126c2565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b34801561092757600080fd5b50610411610936366004612803565b611296565b34801561094757600080fd5b50610411610956366004612851565b6112f1565b34801561096757600080fd5b50600854610702906001600160a01b031681565b34801561098757600080fd5b506104116109963660046126a5565b611337565b3480156109a757600080fd5b50610411611382565b3480156109bc57600080fd5b506104116109cb3660046126a5565b6113e1565b3480156109dc57600080fd5b50610411611477565b3480156109f157600080fd5b50610411610a00366004612787565b6114b5565b348015610a1157600080fd5b50610411610a20366004612787565b6115b9565b348015610a3157600080fd5b50602b54610702906001600160a01b031681565b348015610a5157600080fd5b506103e1610a603660046126a5565b611609565b348015610a7157600080fd5b50602e546103e19060ff1681565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ada9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610b1f5760405162461bcd60e51b8152600401610b1690612963565b60405180910390fd5b602e805460ff1916911515919091179055565b600082610b3e836111f4565b119392505050565b610b4f33611609565b610b6b5760405162461bcd60e51b8152600401610b1690612983565b602591909155602655565b6001600160a01b0383166000908152600f6020908152604080832033845290915281205460001914610c23576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600f82528381203382529091529190912054610bfe918490611627565b6001600160a01b0385166000908152600f602090815260408083203384529091529020555b610c2e848484611661565b90505b9392505050565b60275460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd31989060240160206040518083038186803b158015610c7e57600080fd5b505afa158015610c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae6919061286a565b6005546001600160a01b03166000908152600e6020526040812054610d03906004546001600160a01b03166000908152600e6020526040902054610cfd90600a5490611a33565b90611a33565b905090565b610d1133611609565b610d2d5760405162461bcd60e51b8152600401610b1690612983565b6027546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610d7b57600080fd5b505af1158015610d8f573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610dc15760405162461bcd60e51b8152600401610b1690612963565b6029805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b610df133611609565b610e0d5760405162461bcd60e51b8152600401610b1690612983565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152601060209081526040808320805460ff1990811660019081179092556011845282852080548216831790556012909352922080549091169091179055565b610e7833611609565b610e945760405162461bcd60e51b8152600401610b1690612983565b6014859055601584905560168390556017829055610ebe82610eb885818989611a75565b90611a75565b60185560235550505050565b610ed333611609565b610eef5760405162461bcd60e51b8152600401610b1690612983565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000610ae682600019610a7f565b610f3133611609565b610f4d5760405162461bcd60e51b8152600401610b1690612983565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b610f8133611609565b610f9d5760405162461bcd60e51b8152600401610b1690612983565b610fbe612710610fb883600a54611ad490919063ffffffff16565b90611b53565b600b5550565b6000546001600160a01b03163314610fee5760405162461bcd60e51b8152600401610b1690612963565b611009612710610fb883600a54611ad490919063ffffffff16565b600d5550565b61101833611609565b6110345760405162461bcd60e51b8152600401610b1690612983565b602754604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee812790602401600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050565b61109f33611609565b6110bb5760405162461bcd60e51b8152600401610b1690612983565b620b71b081106110ca57600080fd5b602855565b6110d833611609565b6110f45760405162461bcd60e51b8152600401610b1690612983565b6001600160a01b039091166000908152601160209081526040808320805494151560ff19958616811790915560108352818420805486168217905560129092529091208054909216179055565b6000610c31338484611661565b6000546001600160a01b031633146111785760405162461bcd60e51b8152600401610b1690612963565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6111a833611609565b6111c45760405162461bcd60e51b8152600401610b1690612983565b6019859055601a849055601b839055601c8290556111e882610eb885818989611a75565b601d5560235550505050565b6000610ae6611201610cb6565b602c546001600160a01b03166000908152600e6020526040902054610fb89061122b906002611ad4565b8590611ad4565b61123b33611609565b6112575760405162461bcd60e51b8152600401610b1690612983565b600780546001600160a01b039485166001600160a01b031991821617909155600880549385169382169390931790925560098054919093169116179055565b61129f33611609565b6112bb5760405162461bcd60e51b8152600401610b1690612983565b602e805461ff00191661010084151502179055600a54612710906112e0908390612a53565b6112ea9190612a31565b6024555050565b6112fa33611609565b6113165760405162461bcd60e51b8152600401610b1690612983565b611331612710610fb883600a54611ad490919063ffffffff16565b600c5550565b6000546001600160a01b031633146113615760405162461bcd60e51b8152600401610b1690612963565b6001600160a01b03166000908152600160205260409020805460ff19169055565b602754604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b1580156113c757600080fd5b505af11580156113db573d6000803e3d6000fd5b50505050565b6000546001600160a01b0316331461140b5760405162461bcd60e51b8152600401610b1690612963565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b60075460405147916001600160a01b03169082156108fc029083906000818181858888f193505050501580156114b1573d6000803e3d6000fd5b5050565b6114be33611609565b6114da5760405162461bcd60e51b8152600401610b1690612983565b6001600160a01b03821630148015906115015750602c546001600160a01b03838116911614155b61150a57600080fd5b6001600160a01b0382166000908152601360205260409020805460ff1916821580159190911790915561157057602754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610d61565b6027546001600160a01b038381166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610d61565b6115c233611609565b6115de5760405162461bcd60e51b8152600401610b1690612983565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b6000818484111561164b5760405162461bcd60e51b8152600401610b16919061290e565b5060006116588486612a72565b95945050505050565b602e5460009062010000900460ff161561168757611680848484611b95565b9050610c31565b6001600160a01b03841660009081526001602052604090205460ff161580156116c957506001600160a01b03831660009081526001602052604090205460ff16155b80156116e357506006546001600160a01b03858116911614155b1561173a57602e5460ff1661173a5760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610b16565b602c546001600160a01b0384811691161461175481611c7b565b61175f858585611cc4565b6117698585611e80565b61177585848684611f62565b61177d61209a565b1561178a5761178a6120f4565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0388166000908152600e90915291909120546117dc918590611627565b6001600160a01b0386166000908152600e6020908152604080832093909355601090529081205460ff1615611811578361181b565b61181b86856125bc565b6001600160a01b0386166000908152600e60205260409020549091506118419082611a75565b6001600160a01b038087166000908152600e602090815260408083209490945591891681526013909152205460ff166118e5576027546001600160a01b038781166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156118d257600080fd5b505af19250505080156118e3575060015b505b6001600160a01b03851660009081526013602052604090205460ff16611976576027546001600160a01b038681166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561196357600080fd5b505af1925050508015611974575060015b505b6027546028546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916119ae9160040190815260200190565b600060405180830381600087803b1580156119c857600080fd5b505af19250505080156119d9575060015b50846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a1f91815260200190565b60405180910390a350600195945050505050565b6000610c3183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611627565b600080611a828385612a19565b905083811015610c315760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b16565b600082611ae357506000610ae6565b6000611aef8385612a53565b905082611afc8583612a31565b14610c315760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b16565b6000610c3183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612662565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600e90915291822054611be6918490611627565b6001600160a01b038086166000908152600e60205260408082209390935590851681522054611c159083611a75565b6001600160a01b038085166000818152600e602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c699086815260200190565b60405180910390a35060019392505050565b8015611ca257601954601e55601a54601f55601b54602055601c54602155601d5460225550565b601454601e55601554601f556016546020556017546021556018546022555b50565b6001600160a01b03831660009081526001602052604090205460ff16158015611d0657506001600160a01b03831660009081526011602052604090205460ff16155b8015611d2b57506001600160a01b03821660009081526011602052604090205460ff16155b8015611d4557506000546001600160a01b03838116911614155b8015611d5a57506001600160a01b0382163014155b8015611d7457506004546001600160a01b03838116911614155b8015611d8e5750602c546001600160a01b03838116911614155b8015611da857506008546001600160a01b03838116911614155b8015611dc257506007546001600160a01b03838116911614155b8015611ddc57506009546001600160a01b03838116911614155b15611e7b576001600160a01b0382166000908152600e6020526040902054600d54611e078383612a19565b11156113db5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b16565b505050565b602c546001600160a01b038381169116148015611e9f575060295460ff165b8015611ec457506001600160a01b03811660009081526012602052604090205460ff16155b156114b1576001600160a01b0381166000908152602a60205260409020544211611f305760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610b16565b602954611f4590610100900460ff1642612a19565b6001600160a01b0382166000908152602a60205260409020555050565b6000546001600160a01b038381169116146113db57801561200e57600c5483111580611fa657506001600160a01b03841660009081526011602052604090205460ff165b80611fc957506001600160a01b03821660009081526011602052604090205460ff165b6120095760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b16565b6113db565b600b548311158061203757506001600160a01b03841660009081526011602052604090205460ff165b8061205a57506001600160a01b03821660009081526011602052604090205460ff165b6113db5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b16565b602c546000906001600160a01b031633148015906120c15750602e5462010000900460ff16155b80156120d45750602e54610100900460ff165b8015610d03575050602454306000908152600e6020526040902054101590565b602e805462ff000019166201000017905560255460265460009161211791610b32565b61212357601e54612126565b60005b9050600061214a6002610fb8602254610fb886602454611ad490919063ffffffff16565b9050600061216382602454611a3390919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061219d5761219d612a9f565b6001600160a01b0392831660209182029290920101526003548251911690829060019081106121ce576121ce612a9f565b6001600160a01b039283166020918202929092010152602b5460405163791ac94760e01b81524792919091169063791ac947906122189086906000908790309042906004016129a8565b600060405180830381600087803b15801561223257600080fd5b505af1158015612246573d6000803e3d6000fd5b50505050600061225f8247611a3390919063ffffffff16565b9050600061227a612271886002611b53565b60225490611a33565b9050600061228f6002610fb88481878d611ad4565b905060006122ac83610fb860205487611ad490919063ffffffff16565b905060006122c984610fb860215488611ad490919063ffffffff16565b905060006122e685610fb8601f5489611ad490919063ffffffff16565b9050602760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561233857600080fd5b505af19350505050801561234a575060015b506008546040516000916001600160a01b03169061753090859084818181858888f193505050503d806000811461239d576040519150601f19603f3d011682016040523d82523d6000602084013e6123a2565b606091505b50506009546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d80600081146123fb576040519150601f19603f3d011682016040523d82523d6000602084013e612400565b606091505b50509050816124625760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610b16565b806124ba5760405162461bcd60e51b815260206004820152602260248201527f4465762072656365697665722072656a656374656420455448207472616e736660448201526132b960f11b6064820152608401610b16565b8b156125a157602b5460075460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c4016060604051808303818588803b15801561252b57600080fd5b505af115801561253f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061256491906128a5565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050602e805462ff0000191690555050505050505050505050565b6000806125da602354610fb860225486611ad490919063ffffffff16565b306000908152600e60205260409020549091506125f79082611a75565b306000818152600e6020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126489085815260200190565b60405180910390a361265a8382611a33565b949350505050565b600081836126835760405162461bcd60e51b8152600401610b16919061290e565b5060006116588486612a31565b803580151581146126a057600080fd5b919050565b6000602082840312156126b757600080fd5b8135610c3181612ab5565b600080604083850312156126d557600080fd5b82356126e081612ab5565b915060208301356126f081612ab5565b809150509250929050565b60008060006060848603121561271057600080fd5b833561271b81612ab5565b9250602084013561272b81612ab5565b9150604084013561273b81612ab5565b809150509250925092565b60008060006060848603121561275b57600080fd5b833561276681612ab5565b9250602084013561277681612ab5565b929592945050506040919091013590565b6000806040838503121561279a57600080fd5b82356127a581612ab5565b91506127b360208401612690565b90509250929050565b600080604083850312156127cf57600080fd5b82356127da81612ab5565b946020939093013593505050565b6000602082840312156127fa57600080fd5b610c3182612690565b6000806040838503121561281657600080fd5b6127da83612690565b6000806040838503121561283257600080fd5b61283b83612690565b9150602083013560ff811681146126f057600080fd5b60006020828403121561286357600080fd5b5035919050565b60006020828403121561287c57600080fd5b5051919050565b6000806040838503121561289657600080fd5b50508035926020909101359150565b6000806000606084860312156128ba57600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a086880312156128eb57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561293b5785810183015185820160400152820161291f565b8181111561294d576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129f85784516001600160a01b0316835293830193918301916001016129d3565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612a2c57612a2c612a89565b500190565b600082612a4e57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a6d57612a6d612a89565b500290565b600082821015612a8457612a84612a89565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611cc157600080fdfea2646970667358221220fe72eeb13d6d106a5a7ba533e81ba4debfc2b7ca22e409fd5ba0b3fcb35c1bee64736f6c634300080500336080604052600180546001600160a01b031990811673ff970a61a04b1ca14834a43f5de4533ebddb5cc817909155600280549091167382af49447d8a07e3bd95bd0d56f35241523fbab11790556ec097ce7bc90715b34b9f1000000000600c55610e10600d5564e8d4a51000600e5534801561007a57600080fd5b5060405161110c38038061110c833981016040819052610099916100f3565b6001600160a01b0381166100c157731b02da8cb0d097eb8d57a175b88c7d8b479975066100c3565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610123565b60006020828403121561010557600080fd5b81516001600160a01b038116811461011c57600080fd5b9392505050565b610fda806101326000396000f3fe6080604052600436106100f35760003560e01c80638aee81271161008a578063e2d2e21911610059578063e2d2e2191461029c578063efca2eed146102b2578063ffb2c479146102c8578063ffd49c84146102e857600080fd5b80638aee812714610207578063997664d714610227578063ce7c2ac21461023d578063d0e30db01461029457600080fd5b80632d48e896116100c65780632d48e896146101835780633a98ef39146101a35780634fab0ae8146101b957806389a30271146101cf57600080fd5b806311ce023d146100f857806314b6ca961461012157806315f7e05e1461014357806328fd319814610163575b600080fd5b34801561010457600080fd5b5061010e600c5481565b6040519081526020015b60405180910390f35b34801561012d57600080fd5b5061014161013c366004610d61565b6102fe565b005b34801561014f57600080fd5b5061014161015e366004610d44565b610476565b34801561016f57600080fd5b5061010e61017e366004610d44565b610499565b34801561018f57600080fd5b5061014161019e366004610de1565b610522565b3480156101af57600080fd5b5061010e60085481565b3480156101c557600080fd5b5061010e600e5481565b3480156101db57600080fd5b506001546101ef906001600160a01b031681565b6040516001600160a01b039091168152602001610118565b34801561021357600080fd5b50610141610222366004610d44565b610544565b34801561023357600080fd5b5061010e60095481565b34801561024957600080fd5b50610279610258366004610d44565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610118565b61014161057d565b3480156102a857600080fd5b5061010e600b5481565b3480156102be57600080fd5b5061010e600a5481565b3480156102d457600080fd5b506101416102e3366004610daf565b6107ca565b3480156102f457600080fd5b5061010e600d5481565b6000546001600160a01b0316331461031557600080fd5b6001600160a01b0382166000908152600760205260409020541561033c5761033c826108ca565b60008111801561036257506001600160a01b038216600090815260076020526040902054155b156103c857600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b03191690911790556103fb565b801580156103ed57506001600160a01b03821660009081526007602052604090205415155b156103fb576103fb826109f5565b6001600160a01b03821660009081526007602052604090205460085461042c91839161042691610b0a565b90610b55565b6008556001600160a01b038216600090815260076020526040902081905561045381610bb9565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6000546001600160a01b0316331461048d57600080fd5b610496816108ca565b50565b6001600160a01b0381166000908152600760205260408120546104be57506000919050565b6001600160a01b0382166000908152600760205260408120546104e090610bb9565b6001600160a01b038416600090815260076020526040902060010154909150808211610510575060009392505050565b61051a8282610b0a565b949350505050565b6000546001600160a01b0316331461053957600080fd5b600d91909155600e55565b6000546001600160a01b0316331461055b57600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461059457600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156105d857600080fd5b505afa1580156105ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106109190610dc8565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061065657610656610f79565b6001600160a01b039283166020918202929092010152600180548351921691839190811061068657610686610f79565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de959034906106cc90600090869030904290600401610e03565b6000604051808303818588803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b50506001546040516370a0823160e01b81523060048201526000945061078893508692506001600160a01b03909116906370a082319060240160206040518083038186803b15801561074a57600080fd5b505afa15801561075e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107829190610dc8565b90610b0a565b6009549091506107989082610b55565b600955600854600c546107c2916107b9916107b39085610bd6565b90610c55565b600b5490610b55565b600b55505050565b6000546001600160a01b031633146107e157600080fd5b600454806107ed575050565b6000805a905060005b848310801561080457508381105b156108c35783600f5410610818576000600f555b61084a6004600f548154811061083057610830610f79565b6000918252602090912001546001600160a01b0316610c97565b15610881576108816004600f548154811061086757610867610f79565b6000918252602090912001546001600160a01b03166108ca565b61089661088f5a8490610b0a565b8490610b55565b92505a600f805491935060006108ab83610f32565b919050555080806108bb90610f32565b9150506107f6565b5050505050565b6001600160a01b0381166000908152600760205260409020546108ea5750565b60006108f582610499565b905080156109f157600a5461090a9082610b55565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b15801561095b57600080fd5b505af115801561096f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109939190610d8d565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546109c79082610b55565b6001600160a01b038316600090815260076020526040902060028101919091555461045390610bb9565b5050565b60048054610a0590600190610f1b565b81548110610a1557610a15610f79565b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610a5357610a53610f79565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260059182905260408120546004805491939291610a9f90600190610f1b565b81548110610aaf57610aaf610f79565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610ae557610ae5610f63565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610b4c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610cdc565b90505b92915050565b600080610b628385610ec2565b905083811015610b4c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610b4f600c546107b3600b5485610bd690919063ffffffff16565b600082610be557506000610b4f565b6000610bf18385610efc565b905082610bfe8583610eda565b14610b4c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bb0565b6000610b4c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610d16565b600d546001600160a01b03821660009081526006602052604081205490914291610cc19190610ec2565b108015610b4f5750600e54610cd583610499565b1192915050565b60008184841115610d005760405162461bcd60e51b8152600401610bb09190610e6d565b506000610d0d8486610f1b565b95945050505050565b60008183610d375760405162461bcd60e51b8152600401610bb09190610e6d565b506000610d0d8486610eda565b600060208284031215610d5657600080fd5b8135610b4c81610f8f565b60008060408385031215610d7457600080fd5b8235610d7f81610f8f565b946020939093013593505050565b600060208284031215610d9f57600080fd5b81518015158114610b4c57600080fd5b600060208284031215610dc157600080fd5b5035919050565b600060208284031215610dda57600080fd5b5051919050565b60008060408385031215610df457600080fd5b50508035926020909101359150565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610e4d5784516001600160a01b031683529383019391830191600101610e28565b50506001600160a01b039690961660408501525050506060015292915050565b600060208083528351808285015260005b81811015610e9a57858101830151858201604001528201610e7e565b81811115610eac576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610ed557610ed5610f4d565b500190565b600082610ef757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610f1657610f16610f4d565b500290565b600082821015610f2d57610f2d610f4d565b500390565b6000600019821415610f4657610f46610f4d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461049657600080fdfea2646970667358221220e5577e39a4ec6d1df6ed867a97a37f4afb92dab687d3e6283e5863b973e8de4d64736f6c63430008050033

Deployed Bytecode

0x6080604052600436106103545760003560e01c8063893d20e8116101c6578063dab84ee7116100f7578063f2fde38b11610095578063f84ba65d1161006f578063f84ba65d14610a05578063f887ea4014610a25578063fe9fbb8014610a45578063ffb54a9914610a6557600080fd5b8063f2fde38b146109b0578063f4293890146109d0578063f708a64f146109e557600080fd5b8063df4a76c5116100d1578063df4a76c51461093b578063e96fada21461095b578063f0b37c041461097b578063f0fc6bca1461099b57600080fd5b8063dab84ee7146108b5578063dd62ed3e146108d5578063df20fd491461091b57600080fd5b8063b6a5d7de11610164578063ca33e64c1161013e578063ca33e64c1461083f578063cf4be3941461085f578063d51ed1c814610875578063d7c010321461089557600080fd5b8063b6a5d7de146107e9578063bf56b37114610809578063c1cf53c41461081f57600080fd5b80639d1944f5116101a05780639d1944f514610769578063a6b06a2714610789578063a8aa1b31146107a9578063a9059cbb146107c957600080fd5b8063893d20e8146106e85780638aee81271461071a57806395d89b411461073a57600080fd5b8063313ce567116102a0578063658d4b7f1161023e578063722b62ad11610218578063722b62ad1461067357806378109e54146106925780637affa29b146106a857806382bf293c146106c857600080fd5b8063658d4b7f146105fe5780636ddd17131461061e57806370a082311461063d57600080fd5b806347a28b791161027a57806347a28b791461058457806350db71fb146105a4578063571ac8b0146105c4578063617fe0ed146105e457600080fd5b8063313ce5671461052c578063334773271461054e57806338280e6b1461056457600080fd5b8063201e79911161030d5780632b112e49116102e75780632b112e49146104a85780632d48e896146104bd5780632d594567146104dd5780632f54bf6e146104fd57600080fd5b8063201e79911461044857806323b872dd1461046857806328fd31981461048857600080fd5b80630445b6671461036057806306fdde0314610389578063095ea7b3146103c15780630d295980146103f15780631161ae391461041357806318160ddd1461043357600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660245481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b506040805180820190915260068152652bb0b93932b760d11b60208201525b604051610380919061290e565b3480156103cd57600080fd5b506103e16103dc3660046127bc565b610a7f565b6040519015158152602001610380565b3480156103fd57600080fd5b5061041161040c3660046127e8565b610aec565b005b34801561041f57600080fd5b506103e161042e366004612883565b610b32565b34801561043f57600080fd5b50600a54610376565b34801561045457600080fd5b50610411610463366004612883565b610b46565b34801561047457600080fd5b506103e1610483366004612746565b610b76565b34801561049457600080fd5b506103766104a33660046126a5565b610c38565b3480156104b457600080fd5b50610376610cb6565b3480156104c957600080fd5b506104116104d8366004612883565b610d08565b3480156104e957600080fd5b506104116104f836600461281f565b610d97565b34801561050957600080fd5b506103e16105183660046126a5565b6000546001600160a01b0391821691161490565b34801561053857600080fd5b5060125b60405160ff9091168152602001610380565b34801561055a57600080fd5b50610376600b5481565b34801561057057600080fd5b5061041161057f3660046126a5565b610de8565b34801561059057600080fd5b5061041161059f3660046128d3565b610e6f565b3480156105b057600080fd5b506104116105bf366004612787565b610eca565b3480156105d057600080fd5b506103e16105df3660046126a5565b610f1a565b3480156105f057600080fd5b506029546103e19060ff1681565b34801561060a57600080fd5b50610411610619366004612787565b610f28565b34801561062a57600080fd5b50602e546103e190610100900460ff1681565b34801561064957600080fd5b506103766106583660046126a5565b6001600160a01b03166000908152600e602052604090205490565b34801561067f57600080fd5b5060295461053c90610100900460ff1681565b34801561069e57600080fd5b50610376600d5481565b3480156106b457600080fd5b506104116106c3366004612851565b610f78565b3480156106d457600080fd5b506104116106e3366004612851565b610fc4565b3480156106f457600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610380565b34801561072657600080fd5b506104116107353660046126a5565b61100f565b34801561074657600080fd5b506040805180820190915260068152652ba0a92922a760d11b60208201526103b4565b34801561077557600080fd5b50610411610784366004612851565b611096565b34801561079557600080fd5b506104116107a4366004612787565b6110cf565b3480156107b557600080fd5b50602c54610702906001600160a01b031681565b3480156107d557600080fd5b506103e16107e43660046127bc565b611141565b3480156107f557600080fd5b506104116108043660046126a5565b61114e565b34801561081557600080fd5b50610376602d5481565b34801561082b57600080fd5b5061041161083a3660046128d3565b61119f565b34801561084b57600080fd5b50600754610702906001600160a01b031681565b34801561086b57600080fd5b50610376600c5481565b34801561088157600080fd5b50610376610890366004612851565b6111f4565b3480156108a157600080fd5b506104116108b03660046126fb565b611232565b3480156108c157600080fd5b50600954610702906001600160a01b031681565b3480156108e157600080fd5b506103766108f03660046126c2565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b34801561092757600080fd5b50610411610936366004612803565b611296565b34801561094757600080fd5b50610411610956366004612851565b6112f1565b34801561096757600080fd5b50600854610702906001600160a01b031681565b34801561098757600080fd5b506104116109963660046126a5565b611337565b3480156109a757600080fd5b50610411611382565b3480156109bc57600080fd5b506104116109cb3660046126a5565b6113e1565b3480156109dc57600080fd5b50610411611477565b3480156109f157600080fd5b50610411610a00366004612787565b6114b5565b348015610a1157600080fd5b50610411610a20366004612787565b6115b9565b348015610a3157600080fd5b50602b54610702906001600160a01b031681565b348015610a5157600080fd5b506103e1610a603660046126a5565b611609565b348015610a7157600080fd5b50602e546103e19060ff1681565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ada9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610b1f5760405162461bcd60e51b8152600401610b1690612963565b60405180910390fd5b602e805460ff1916911515919091179055565b600082610b3e836111f4565b119392505050565b610b4f33611609565b610b6b5760405162461bcd60e51b8152600401610b1690612983565b602591909155602655565b6001600160a01b0383166000908152600f6020908152604080832033845290915281205460001914610c23576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600f82528381203382529091529190912054610bfe918490611627565b6001600160a01b0385166000908152600f602090815260408083203384529091529020555b610c2e848484611661565b90505b9392505050565b60275460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd31989060240160206040518083038186803b158015610c7e57600080fd5b505afa158015610c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae6919061286a565b6005546001600160a01b03166000908152600e6020526040812054610d03906004546001600160a01b03166000908152600e6020526040902054610cfd90600a5490611a33565b90611a33565b905090565b610d1133611609565b610d2d5760405162461bcd60e51b8152600401610b1690612983565b6027546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610d7b57600080fd5b505af1158015610d8f573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610dc15760405162461bcd60e51b8152600401610b1690612963565b6029805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b610df133611609565b610e0d5760405162461bcd60e51b8152600401610b1690612983565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152601060209081526040808320805460ff1990811660019081179092556011845282852080548216831790556012909352922080549091169091179055565b610e7833611609565b610e945760405162461bcd60e51b8152600401610b1690612983565b6014859055601584905560168390556017829055610ebe82610eb885818989611a75565b90611a75565b60185560235550505050565b610ed333611609565b610eef5760405162461bcd60e51b8152600401610b1690612983565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000610ae682600019610a7f565b610f3133611609565b610f4d5760405162461bcd60e51b8152600401610b1690612983565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b610f8133611609565b610f9d5760405162461bcd60e51b8152600401610b1690612983565b610fbe612710610fb883600a54611ad490919063ffffffff16565b90611b53565b600b5550565b6000546001600160a01b03163314610fee5760405162461bcd60e51b8152600401610b1690612963565b611009612710610fb883600a54611ad490919063ffffffff16565b600d5550565b61101833611609565b6110345760405162461bcd60e51b8152600401610b1690612983565b602754604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee812790602401600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050565b61109f33611609565b6110bb5760405162461bcd60e51b8152600401610b1690612983565b620b71b081106110ca57600080fd5b602855565b6110d833611609565b6110f45760405162461bcd60e51b8152600401610b1690612983565b6001600160a01b039091166000908152601160209081526040808320805494151560ff19958616811790915560108352818420805486168217905560129092529091208054909216179055565b6000610c31338484611661565b6000546001600160a01b031633146111785760405162461bcd60e51b8152600401610b1690612963565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6111a833611609565b6111c45760405162461bcd60e51b8152600401610b1690612983565b6019859055601a849055601b839055601c8290556111e882610eb885818989611a75565b601d5560235550505050565b6000610ae6611201610cb6565b602c546001600160a01b03166000908152600e6020526040902054610fb89061122b906002611ad4565b8590611ad4565b61123b33611609565b6112575760405162461bcd60e51b8152600401610b1690612983565b600780546001600160a01b039485166001600160a01b031991821617909155600880549385169382169390931790925560098054919093169116179055565b61129f33611609565b6112bb5760405162461bcd60e51b8152600401610b1690612983565b602e805461ff00191661010084151502179055600a54612710906112e0908390612a53565b6112ea9190612a31565b6024555050565b6112fa33611609565b6113165760405162461bcd60e51b8152600401610b1690612983565b611331612710610fb883600a54611ad490919063ffffffff16565b600c5550565b6000546001600160a01b031633146113615760405162461bcd60e51b8152600401610b1690612963565b6001600160a01b03166000908152600160205260409020805460ff19169055565b602754604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b1580156113c757600080fd5b505af11580156113db573d6000803e3d6000fd5b50505050565b6000546001600160a01b0316331461140b5760405162461bcd60e51b8152600401610b1690612963565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b60075460405147916001600160a01b03169082156108fc029083906000818181858888f193505050501580156114b1573d6000803e3d6000fd5b5050565b6114be33611609565b6114da5760405162461bcd60e51b8152600401610b1690612983565b6001600160a01b03821630148015906115015750602c546001600160a01b03838116911614155b61150a57600080fd5b6001600160a01b0382166000908152601360205260409020805460ff1916821580159190911790915561157057602754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610d61565b6027546001600160a01b038381166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610d61565b6115c233611609565b6115de5760405162461bcd60e51b8152600401610b1690612983565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b6000818484111561164b5760405162461bcd60e51b8152600401610b16919061290e565b5060006116588486612a72565b95945050505050565b602e5460009062010000900460ff161561168757611680848484611b95565b9050610c31565b6001600160a01b03841660009081526001602052604090205460ff161580156116c957506001600160a01b03831660009081526001602052604090205460ff16155b80156116e357506006546001600160a01b03858116911614155b1561173a57602e5460ff1661173a5760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610b16565b602c546001600160a01b0384811691161461175481611c7b565b61175f858585611cc4565b6117698585611e80565b61177585848684611f62565b61177d61209a565b1561178a5761178a6120f4565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0388166000908152600e90915291909120546117dc918590611627565b6001600160a01b0386166000908152600e6020908152604080832093909355601090529081205460ff1615611811578361181b565b61181b86856125bc565b6001600160a01b0386166000908152600e60205260409020549091506118419082611a75565b6001600160a01b038087166000908152600e602090815260408083209490945591891681526013909152205460ff166118e5576027546001600160a01b038781166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156118d257600080fd5b505af19250505080156118e3575060015b505b6001600160a01b03851660009081526013602052604090205460ff16611976576027546001600160a01b038681166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561196357600080fd5b505af1925050508015611974575060015b505b6027546028546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916119ae9160040190815260200190565b600060405180830381600087803b1580156119c857600080fd5b505af19250505080156119d9575060015b50846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a1f91815260200190565b60405180910390a350600195945050505050565b6000610c3183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611627565b600080611a828385612a19565b905083811015610c315760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b16565b600082611ae357506000610ae6565b6000611aef8385612a53565b905082611afc8583612a31565b14610c315760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b16565b6000610c3183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612662565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600e90915291822054611be6918490611627565b6001600160a01b038086166000908152600e60205260408082209390935590851681522054611c159083611a75565b6001600160a01b038085166000818152600e602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c699086815260200190565b60405180910390a35060019392505050565b8015611ca257601954601e55601a54601f55601b54602055601c54602155601d5460225550565b601454601e55601554601f556016546020556017546021556018546022555b50565b6001600160a01b03831660009081526001602052604090205460ff16158015611d0657506001600160a01b03831660009081526011602052604090205460ff16155b8015611d2b57506001600160a01b03821660009081526011602052604090205460ff16155b8015611d4557506000546001600160a01b03838116911614155b8015611d5a57506001600160a01b0382163014155b8015611d7457506004546001600160a01b03838116911614155b8015611d8e5750602c546001600160a01b03838116911614155b8015611da857506008546001600160a01b03838116911614155b8015611dc257506007546001600160a01b03838116911614155b8015611ddc57506009546001600160a01b03838116911614155b15611e7b576001600160a01b0382166000908152600e6020526040902054600d54611e078383612a19565b11156113db5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b16565b505050565b602c546001600160a01b038381169116148015611e9f575060295460ff165b8015611ec457506001600160a01b03811660009081526012602052604090205460ff16155b156114b1576001600160a01b0381166000908152602a60205260409020544211611f305760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610b16565b602954611f4590610100900460ff1642612a19565b6001600160a01b0382166000908152602a60205260409020555050565b6000546001600160a01b038381169116146113db57801561200e57600c5483111580611fa657506001600160a01b03841660009081526011602052604090205460ff165b80611fc957506001600160a01b03821660009081526011602052604090205460ff165b6120095760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b16565b6113db565b600b548311158061203757506001600160a01b03841660009081526011602052604090205460ff165b8061205a57506001600160a01b03821660009081526011602052604090205460ff165b6113db5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b16565b602c546000906001600160a01b031633148015906120c15750602e5462010000900460ff16155b80156120d45750602e54610100900460ff165b8015610d03575050602454306000908152600e6020526040902054101590565b602e805462ff000019166201000017905560255460265460009161211791610b32565b61212357601e54612126565b60005b9050600061214a6002610fb8602254610fb886602454611ad490919063ffffffff16565b9050600061216382602454611a3390919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061219d5761219d612a9f565b6001600160a01b0392831660209182029290920101526003548251911690829060019081106121ce576121ce612a9f565b6001600160a01b039283166020918202929092010152602b5460405163791ac94760e01b81524792919091169063791ac947906122189086906000908790309042906004016129a8565b600060405180830381600087803b15801561223257600080fd5b505af1158015612246573d6000803e3d6000fd5b50505050600061225f8247611a3390919063ffffffff16565b9050600061227a612271886002611b53565b60225490611a33565b9050600061228f6002610fb88481878d611ad4565b905060006122ac83610fb860205487611ad490919063ffffffff16565b905060006122c984610fb860215488611ad490919063ffffffff16565b905060006122e685610fb8601f5489611ad490919063ffffffff16565b9050602760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561233857600080fd5b505af19350505050801561234a575060015b506008546040516000916001600160a01b03169061753090859084818181858888f193505050503d806000811461239d576040519150601f19603f3d011682016040523d82523d6000602084013e6123a2565b606091505b50506009546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d80600081146123fb576040519150601f19603f3d011682016040523d82523d6000602084013e612400565b606091505b50509050816124625760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610b16565b806124ba5760405162461bcd60e51b815260206004820152602260248201527f4465762072656365697665722072656a656374656420455448207472616e736660448201526132b960f11b6064820152608401610b16565b8b156125a157602b5460075460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c4016060604051808303818588803b15801561252b57600080fd5b505af115801561253f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061256491906128a5565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050602e805462ff0000191690555050505050505050505050565b6000806125da602354610fb860225486611ad490919063ffffffff16565b306000908152600e60205260409020549091506125f79082611a75565b306000818152600e6020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126489085815260200190565b60405180910390a361265a8382611a33565b949350505050565b600081836126835760405162461bcd60e51b8152600401610b16919061290e565b5060006116588486612a31565b803580151581146126a057600080fd5b919050565b6000602082840312156126b757600080fd5b8135610c3181612ab5565b600080604083850312156126d557600080fd5b82356126e081612ab5565b915060208301356126f081612ab5565b809150509250929050565b60008060006060848603121561271057600080fd5b833561271b81612ab5565b9250602084013561272b81612ab5565b9150604084013561273b81612ab5565b809150509250925092565b60008060006060848603121561275b57600080fd5b833561276681612ab5565b9250602084013561277681612ab5565b929592945050506040919091013590565b6000806040838503121561279a57600080fd5b82356127a581612ab5565b91506127b360208401612690565b90509250929050565b600080604083850312156127cf57600080fd5b82356127da81612ab5565b946020939093013593505050565b6000602082840312156127fa57600080fd5b610c3182612690565b6000806040838503121561281657600080fd5b6127da83612690565b6000806040838503121561283257600080fd5b61283b83612690565b9150602083013560ff811681146126f057600080fd5b60006020828403121561286357600080fd5b5035919050565b60006020828403121561287c57600080fd5b5051919050565b6000806040838503121561289657600080fd5b50508035926020909101359150565b6000806000606084860312156128ba57600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a086880312156128eb57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561293b5785810183015185820160400152820161291f565b8181111561294d576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129f85784516001600160a01b0316835293830193918301916001016129d3565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612a2c57612a2c612a89565b500190565b600082612a4e57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a6d57612a6d612a89565b500290565b600082821015612a8457612a84612a89565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611cc157600080fdfea2646970667358221220fe72eeb13d6d106a5a7ba533e81ba4debfc2b7ca22e409fd5ba0b3fcb35c1bee64736f6c63430008050033

Deployed ByteCode Sourcemap

12058:19538:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14033:56;;;;;;;;;;;;;;;;;;;12092:25:1;;;12080:2;12065:18;14033:56:0;;;;;;;;16463:80;;;;;;;;;;-1:-1:-1;16535:5:0;;;;;;;;;;;;-1:-1:-1;;;16535:5:0;;;;16463:80;;;;;;;:::i;16885:216::-;;;;;;;;;;-1:-1:-1;16885:216:0;;;;;:::i;:::-;;:::i;:::-;;;7139:14:1;;7132:22;7114:41;;7102:2;7087:18;16885:216:0;7069:92:1;23352:94:0;;;;;;;;;;-1:-1:-1;23352:94:0;;;;;:::i;:::-;;:::i;:::-;;31368:150;;;;;;;;;;-1:-1:-1;31368:150:0;;;;;:::i;:::-;;:::i;16193:88::-;;;;;;;;;;-1:-1:-1;16266:12:0;;16193:88;;29613:183;;;;;;;;;;-1:-1:-1;29613:183:0;;;;;:::i;:::-;;:::i;17403:370::-;;;;;;;;;;-1:-1:-1;17403:370:0;;;;;:::i;:::-;;:::i;30596:146::-;;;;;;;;;;-1:-1:-1;30596:146:0;;;;;:::i;:::-;;:::i;30965:142::-;;;;;;;;;;;;;:::i;30060:183::-;;;;;;;;;;-1:-1:-1;30060:183:0;;;;;:::i;:::-;;:::i;23493:164::-;;;;;;;;;;-1:-1:-1;23493:164:0;;;;;:::i;:::-;;:::i;3446:103::-;;;;;;;;;;-1:-1:-1;3446:103:0;;;;;:::i;:::-;3501:4;3536:5;-1:-1:-1;;;;;3525:16:0;;;3536:5;;3525:16;;3446:103;16287:80;;;;;;;;;;-1:-1:-1;12735:2:0;16287:80;;;13538:4:1;13526:17;;;13508:36;;13496:2;13481:18;16287:80:0;13463:87:1;12855:59:0;;;;;;;;;;;;;;;;18103:283;;;;;;;;;;-1:-1:-1;18103:283:0;;;;;:::i;:::-;;:::i;27968:487::-;;;;;;;;;;-1:-1:-1;27968:487:0;;;;;:::i;:::-;;:::i;27586:130::-;;;;;;;;;;-1:-1:-1;27586:130:0;;;;;:::i;:::-;;:::i;17109:122::-;;;;;;;;;;-1:-1:-1;17109:122:0;;;;;:::i;:::-;;:::i;14396:37::-;;;;;;;;;;-1:-1:-1;14396:37:0;;;;;;;;27268:120;;;;;;;;;;-1:-1:-1;27268:120:0;;;;;:::i;:::-;;:::i;14692:30::-;;;;;;;;;;-1:-1:-1;14692:30:0;;;;;;;;;;;16633:105;;;;;;;;;;-1:-1:-1;16633:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;16717:18:0;16699:7;16717:18;;;:9;:18;;;;;;;16633:105;14440:38;;;;;;;;;;-1:-1:-1;14440:38:0;;;;;;;;;;;13000:63;;;;;;;;;;;;;;;;26499:158;;;;;;;;;;-1:-1:-1;26499:158:0;;;;;:::i;:::-;;:::i;17851:156::-;;;;;;;;;;-1:-1:-1;17851:156:0;;;;;:::i;:::-;;:::i;16549:78::-;;;;;;;;;;-1:-1:-1;16601:7:0;16619:5;-1:-1:-1;;;;;16619:5:0;16549:78;;;-1:-1:-1;;;;;5536:32:1;;;5518:51;;5506:2;5491:18;16549:78:0;5473:102:1;30431:110:0;;;;;;;;;;-1:-1:-1;30431:110:0;;;;;:::i;:::-;;:::i;16373:84::-;;;;;;;;;;-1:-1:-1;16447:7:0;;;;;;;;;;;;-1:-1:-1;;;16447:7:0;;;;16373:84;;30783:136;;;;;;;;;;-1:-1:-1;30783:136:0;;;;;:::i;:::-;;:::i;27724:209::-;;;;;;;;;;-1:-1:-1;27724:209:0;;;;;:::i;:::-;;:::i;14596:19::-;;;;;;;;;;-1:-1:-1;14596:19:0;;;;-1:-1:-1;;;;;14596:19:0;;;17239:156;;;;;;;;;;-1:-1:-1;17239:156:0;;;;;:::i;:::-;;:::i;3104:102::-;;;;;;;;;;-1:-1:-1;3104:102:0;;;;;:::i;:::-;;:::i;14622:25::-;;;;;;;;;;;;;;;;28489:507;;;;;;;;;;-1:-1:-1;28489:507:0;;;;;:::i;:::-;;:::i;12483:36::-;;;;;;;;;;-1:-1:-1;12483:36:0;;;;-1:-1:-1;;;;;12483:36:0;;;12927:60;;;;;;;;;;;;;;;;31149:167;;;;;;;;;;-1:-1:-1;31149:167:0;;;;;:::i;:::-;;:::i;29054:296::-;;;;;;;;;;-1:-1:-1;29054:296:0;;;;;:::i;:::-;;:::i;12568:29::-;;;;;;;;;;-1:-1:-1;12568:29:0;;;;-1:-1:-1;;;;;12568:29:0;;;16744:133;;;;;;;;;;-1:-1:-1;16744:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;16846:19:0;;;16828:7;16846:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;16744:133;29396:180;;;;;;;;;;-1:-1:-1;29396:180:0;;;;;:::i;:::-;;:::i;26690:162::-;;;;;;;;;;-1:-1:-1;26690:162:0;;;;;:::i;:::-;;:::i;12526:35::-;;;;;;;;;;-1:-1:-1;12526:35:0;;;;-1:-1:-1;;;;;12526:35:0;;;3281:105;;;;;;;;;;-1:-1:-1;3281:105:0;;;;;:::i;:::-;;:::i;30295:90::-;;;;;;;;;;;;;:::i;3853:189::-;;;;;;;;;;-1:-1:-1;3853:189:0;;;;;:::i;:::-;;:::i;29835:170::-;;;;;;;;;;;;;:::i;26889:347::-;;;;;;;;;;-1:-1:-1;26889:347:0;;;;;:::i;:::-;;:::i;27423:128::-;;;;;;;;;;-1:-1:-1;27423:128:0;;;;;:::i;:::-;;:::i;14565:24::-;;;;;;;;;;-1:-1:-1;14565:24:0;;;;-1:-1:-1;;;;;14565:24:0;;;3619:115;;;;;;;;;;-1:-1:-1;3619:115:0;;;;;:::i;:::-;;:::i;14654:31::-;;;;;;;;;;-1:-1:-1;14654:31:0;;;;;;;;16885:216;16989:10;16960:4;16977:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;16977:32:0;;;;;;;;;;:41;;;17034:37;16960:4;;16977:32;;17034:37;;;;17012:6;12092:25:1;;12080:2;12065:18;;12047:76;17034:37:0;;;;;;;;-1:-1:-1;17089:4:0;16885:216;;;;;:::o;23352:94::-;3501:4;3536:5;-1:-1:-1;;;;;3536:5:0;2828:10;3525:16;2812:38;;;;-1:-1:-1;;;2812:38:0;;;;;;;:::i;:::-;;;;;;;;;23417:11:::1;:21:::0;;-1:-1:-1;;23417:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23352:94::o;31368:150::-;31448:4;31504:6;31472:29;31492:8;31472:19;:29::i;:::-;:38;;31368:150;-1:-1:-1;;;31368:150:0:o;29613:183::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;29711:15:::1;:25:::0;;;;29747:26:::1;:41:::0;29613:183::o;17403:370::-;-1:-1:-1;;;;;17523:19:0;;17503:4;17523:19;;;:11;:19;;;;;;;;17543:10;17523:31;;;;;;;;-1:-1:-1;;17523:52:0;17520:186;;17625:69;;;;;;;;;;;-1:-1:-1;;;17625:69:0;;;;;;;;-1:-1:-1;;;;;17625:19:0;;-1:-1:-1;17625:19:0;;;:11;:19;;;;;17645:10;17625:31;;;;;;;;;;:69;;17661:6;;17625:35;:69::i;:::-;-1:-1:-1;;;;;17591:19:0;;;;;;:11;:19;;;;;;;;17611:10;17591:31;;;;;;;:103;17520:186;17725:40;17739:6;17747:9;17758:6;17725:13;:40::i;:::-;17718:47;;17403:370;;;;;;:::o;30596:146::-;30692:11;;:42;;-1:-1:-1;;;30692:42:0;;-1:-1:-1;;;;;5536:32:1;;;30692:42:0;;;5518:51:1;30665:7:0;;30692:11;;:29;;5491:18:1;;30692:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30965:142::-;31093:4;;-1:-1:-1;;;;;31093:4:0;31018:7;16717:18;;;:9;:18;;;;;;31045:54;;31072:4;;-1:-1:-1;;;;;31072:4:0;16699:7;16717:18;;;:9;:18;;;;;;31045:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;31038:61;;30965:142;:::o;30060:183::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;30170:11:::1;::::0;:65:::1;::::0;-1:-1:-1;;;30170:65:0;;::::1;::::0;::::1;13287:25:1::0;;;13328:18;;;13321:34;;;-1:-1:-1;;;;;30170:11:0;;::::1;::::0;:35:::1;::::0;13260:18:1;;30170:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30060:183:::0;;:::o;23493:164::-;3501:4;3536:5;-1:-1:-1;;;;;3536:5:0;2828:10;3525:16;2812:38;;;;-1:-1:-1;;;2812:38:0;;;;;;;:::i;:::-;23577:18:::1;:28:::0;;-1:-1:-1;;23616:33:0;23577:28;::::1;;-1:-1:-1::0;;23616:33:0;;;;;23577:28:::1;;23616:33:::0;;;::::1;::::0;;;::::1;;::::0;;23493:164::o;18103:283::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;18189:16:::1;:36:::0;;-1:-1:-1;;;;;18189:36:0;;::::1;-1:-1:-1::0;;;;;;18189:36:0;;::::1;::::0;::::1;::::0;;:16:::1;18236:30:::0;;;:11:::1;:30;::::0;;;;;;;:37;;-1:-1:-1;;18236:37:0;;::::1;18189:36:::0;18236:37;;::::1;::::0;;;18284:15:::1;:34:::0;;;;;:41;;;::::1;::::0;::::1;::::0;;18336:16:::1;:35:::0;;;;;:42;;;;::::1;::::0;;::::1;::::0;;18103:283::o;27968:487::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;28143:15:::1;:34:::0;;;28188:9:::1;:22:::0;;;28221:16:::1;:36:::0;;;28268:15:::1;:34:::0;;;28327:77:::1;28286:16:::0;28327:55:::1;28240:17:::0;28327:55;28161:16;28200:10;28327:20:::1;:32::i;:::-;:36:::0;::::1;:55::i;:77::-;28313:11;:91:::0;28415:14:::1;:32:::0;-1:-1:-1;;;;27968:487:0:o;27586:130::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27675:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;27675:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27586:130::o;17109:122::-;17164:4;17188:35;17196:7;-1:-1:-1;;17188:7:0;:35::i;27268:120::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27352:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;27352:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27268:120::o;26499:158::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;26605:44:::1;26643:5;26605:33;26622:15;26605:12;;:16;;:33;;;;:::i;:::-;:37:::0;::::1;:44::i;:::-;26587:15;:62:::0;-1:-1:-1;26499:158:0:o;17851:156::-;3501:4;3536:5;-1:-1:-1;;;;;3536:5:0;2828:10;3525:16;2812:38;;;;-1:-1:-1;;;2812:38:0;;;;;;;:::i;:::-;17954:43:::1;17991:5;17954:32;17971:14;17954:12;;:16;;:32;;;;:::i;:43::-;17936:15;:61:::0;-1:-1:-1;17851:156:0:o;30431:110::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;30500:11:::1;::::0;:33:::1;::::0;-1:-1:-1;;;30500:33:0;;-1:-1:-1;;;;;5536:32:1;;;30500:33:0::1;::::0;::::1;5518:51:1::0;30500:11:0;;::::1;::::0;:26:::1;::::0;5491:18:1;;30500:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30431:110:::0;:::o;30783:136::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;30873:6:::1;30867:3;:12;30859:21;;;::::0;::::1;;30891:14;:20:::0;30783:136::o;27724:209::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27810:23:0;;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;:32;;;::::1;;-1:-1:-1::0;;27810:32:0;;::::1;::::0;::::1;::::0;;;27853:11:::1;:19:::0;;;;;:28;;;::::1;::::0;::::1;::::0;;27892:16:::1;:24:::0;;;;;;:33;;;;::::1;;::::0;;27724:209::o;17239:156::-;17319:4;17343:44;17357:10;17369:9;17380:6;17343:13;:44::i;3104:102::-;3501:4;3536:5;-1:-1:-1;;;;;3536:5:0;2828:10;3525:16;2812:38;;;;-1:-1:-1;;;2812:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3168:23:0::1;;::::0;;;3194:4:::1;3168:23;::::0;;;;;;;:30;;-1:-1:-1;;3168:30:0::1;::::0;;::::1;::::0;;3104:102::o;28489:507::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;28669:16:::1;:36:::0;;;28716:10:::1;:24:::0;;;28751:17:::1;:38:::0;;;28800:16:::1;:36:::0;;;28864:81:::1;28819:17:::0;28864:58:::1;28771:18:::0;28864:58;28688:17;28729:11;28864:21:::1;:34::i;:81::-;28849:12;:96:::0;28956:14:::1;:32:::0;-1:-1:-1;;;;28489:507:0:o;31149:167::-;31217:7;31244:64;31285:22;:20;:22::i;:::-;31267:4;;-1:-1:-1;;;;;31267:4:0;16699:7;16717:18;;;:9;:18;;;;;;31244:36;;31257:22;;31277:1;31257:19;:22::i;:::-;31244:8;;:12;:36::i;29054:296::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;29198:21:::1;:46:::0;;-1:-1:-1;;;;;29198:46:0;;::::1;-1:-1:-1::0;;;;;;29198:46:0;;::::1;;::::0;;;29255:20:::1;:44:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;29310:14:::1;:32:::0;;;;;::::1;::::0;::::1;;::::0;;29054:296::o;29396:180::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;29488:11:::1;:22:::0;;-1:-1:-1;;29488:22:0::1;;::::0;::::1;;;;::::0;;29537:12:::1;::::0;29562:5:::1;::::0;29537:22:::1;::::0;29552:7;;29537:22:::1;:::i;:::-;:30;;;;:::i;:::-;29521:13;:46:::0;-1:-1:-1;;29396:180:0:o;26690:162::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;26799:45:::1;26838:5;26799:34;26816:16;26799:12;;:16;;:34;;;;:::i;:45::-;26780:16;:64:::0;-1:-1:-1;26690:162:0:o;3281:105::-;3501:4;3536:5;-1:-1:-1;;;;;3536:5:0;2828:10;3525:16;2812:38;;;;-1:-1:-1;;;2812:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3347:23:0::1;3373:5;3347:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;3347:31:0::1;::::0;;3281:105::o;30295:90::-;30340:11;;:37;;-1:-1:-1;;;30340:37:0;;30366:10;30340:37;;;5518:51:1;-1:-1:-1;;;;;30340:11:0;;;;:25;;5491:18:1;;30340:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30295:90::o;3853:189::-;3501:4;3536:5;-1:-1:-1;;;;;3536:5:0;2828:10;3525:16;2812:38;;;;-1:-1:-1;;;2812:38:0;;;;;;;:::i;:::-;3933:5:::1;:15:::0;;-1:-1:-1;;;;;;3933:15:0::1;-1:-1:-1::0;;;;;3933:15:0;::::1;::::0;;::::1;::::0;;3959:23;;;-1:-1:-1;3959:23:0::1;::::0;;;;;;;;:30;;-1:-1:-1;;3959:30:0::1;::::0;;::::1;::::0;;;4005:29;;5518:51:1;;;4005:29:0::1;::::0;5491:18:1;4005:29:0::1;;;;;;;3853:189:::0;:::o;29835:170::-;29946:21;;29938:59;;29906:21;;-1:-1:-1;;;;;29946:21:0;;29938:59;;;;;29906:21;;29877:26;29938:59;29877:26;29938:59;29906:21;29946;29938:59;;;;;;;;;;;;;;;;;;;;;29866:139;29835:170::o;26889:347::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26986:23:0;::::1;27004:4;26986:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;27023:4:0::1;::::0;-1:-1:-1;;;;;27013:14:0;;::::1;27023:4:::0;::::1;27013:14;;26986:41;26978:50;;;::::0;::::1;;-1:-1:-1::0;;;;;27039:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;27039:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;27083:146:::1;;27108:11;::::0;:31:::1;::::0;-1:-1:-1;;;27108:31:0;;-1:-1:-1;;;;;5996:32:1;;;27108:31:0::1;::::0;::::1;5978:51:1::0;27108:11:0::1;6045:18:1::0;;;6038:34;27108:11:0;;::::1;::::0;:20:::1;::::0;5951:18:1;;27108:31:0::1;5933:145:1::0;27083:146:0::1;27170:11;::::0;-1:-1:-1;;;;;27199:17:0;;::::1;27170:11;27199:17:::0;;;:9:::1;:17;::::0;;;;;;;27170:47;;-1:-1:-1;;;27170:47:0;;::::1;::::0;::::1;5978:51:1::0;;;;6045:18;;;6038:34;27170:11:0;::::1;::::0;:20:::1;::::0;5951:18:1;;27170:47:0::1;5933:145:1::0;27423:128:0;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27511:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;27511:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27423:128::o;3619:115::-;-1:-1:-1;;;;;3703:23:0;3679:4;3703:23;;;:14;:23;;;;;;;;;3619:115::o;506:192::-;592:7;628:12;620:6;;;;612:29;;;;-1:-1:-1;;;612:29:0;;;;;;;;:::i;:::-;-1:-1:-1;652:9:0;664:5;668:1;664;:5;:::i;:::-;652:17;506:192;-1:-1:-1;;;;;506:192:0:o;18425:1609::-;18537:6;;18517:4;;18537:6;;;;;18534:63;;;18553:41;18568:6;18576:9;18587:6;18553:14;:41::i;:::-;18546:48;;;;18534:63;-1:-1:-1;;;;;18653:22:0;;;;;;:14;:22;;;;;;;;18652:23;:53;;;;-1:-1:-1;;;;;;18680:25:0;;;;;;:14;:25;;;;;;;;18679:26;18652:53;:83;;;;-1:-1:-1;18709:16:0;;-1:-1:-1;;;;;18709:26:0;;;:16;;:26;;18652:83;18649:160;;;18759:11;;;;18751:46;;;;-1:-1:-1;;;18751:46:0;;11456:2:1;18751:46:0;;;11438:21:1;11495:2;11475:18;;;11468:30;11534:25;11514:18;;;11507:53;11577:18;;18751:46:0;11428:173:1;18751:46:0;18887:4;;-1:-1:-1;;;;;18874:17:0;;;18887:4;;18874:17;18938:22;18874:17;18938:14;:22::i;:::-;19002:41;19017:6;19025:9;19036:6;19002:14;:41::i;:::-;19084:35;19101:6;19109:9;19084:16;:35::i;:::-;19157:47;19170:6;19178;19186:9;19197:6;19157:12;:47::i;:::-;19267:16;:14;:16::i;:::-;19264:35;;;19286:10;:8;:10::i;:::-;19358:53;;;;;;;;;;;-1:-1:-1;;;19358:53:0;;;;;;;;-1:-1:-1;;;;;19358:17:0;;-1:-1:-1;19358:17:0;;;:9;:17;;;;;;;;:53;;19380:6;;19358:21;:53::i;:::-;-1:-1:-1;;;;;19338:17:0;;;;;;:9;:17;;;;;;;;:73;;;;22675:11;:19;;;;;;;;22674:20;19449:56;;19499:6;19449:56;;;19473:23;19481:6;19489;19473:7;:23::i;:::-;-1:-1:-1;;;;;19539:20:0;;;;;;:9;:20;;;;;;19424:81;;-1:-1:-1;19539:40:0;;19424:81;19539:24;:40::i;:::-;-1:-1:-1;;;;;19516:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;19625:24;;;;;:16;:24;;;;;;;19621:119;;19670:11;;-1:-1:-1;;;;;19699:17:0;;;19670:11;19699:17;;;:9;:17;;;;;;;;19670:47;;-1:-1:-1;;;19670:47:0;;;;;5978:51:1;;;;6045:18;;;6038:34;19670:11:0;;;:20;;5951:18:1;;19670:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19666:63;;-1:-1:-1;;;;;19756:27:0;;;;;;:16;:27;;;;;;;;19752:129;;19804:11;;-1:-1:-1;;;;;19836:20:0;;;19804:11;19836:20;;;:9;:20;;;;;;;;19804:53;;-1:-1:-1;;;19804:53:0;;;;;5978:51:1;;;;6045:18;;;6038:34;19804:11:0;;;:20;;5951:18:1;;19804:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19800:69;;19897:11;;19917:14;;19897:35;;-1:-1:-1;;;;;;19897:35:0;;-1:-1:-1;;;;;19897:11:0;;;;:19;;:35;;;;12092:25:1;;;12080:2;12065:18;;12047:76;19897:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19893:51;19978:9;-1:-1:-1;;;;;19961:43:0;19970:6;-1:-1:-1;;;;;19961:43:0;;19989:14;19961:43;;;;12092:25:1;;12080:2;12065:18;;12047:76;19961:43:0;;;;;;;;-1:-1:-1;20022:4:0;;18425:1609;-1:-1:-1;;;;;18425:1609:0:o;364:136::-;422:7;449:43;453:1;456;449:43;;;;;;;;;;;;;;;;;:3;:43::i;177:181::-;235:7;;267:5;271:1;267;:5;:::i;:::-;255:17;;296:1;291;:6;;283:46;;;;-1:-1:-1;;;283:46:0;;8764:2:1;283:46:0;;;8746:21:1;8803:2;8783:18;;;8776:30;8842:29;8822:18;;;8815:57;8889:18;;283:46:0;8736:177:1;704:250:0;762:7;786:6;782:47;;-1:-1:-1;816:1:0;809:8;;782:47;841:9;853:5;857:1;853;:5;:::i;:::-;841:17;-1:-1:-1;886:1:0;877:5;881:1;841:17;877:5;:::i;:::-;:10;869:56;;;;-1:-1:-1;;;869:56:0;;10289:2:1;869:56:0;;;10271:21:1;10328:2;10308:18;;;10301:30;10367:34;10347:18;;;10340:62;-1:-1:-1;;;10418:18:1;;;10411:31;10459:19;;869:56:0;10261:223:1;960:132:0;1018:7;1045:39;1049:1;1052;1045:39;;;;;;;;;;;;;;;;;:3;:39::i;20071:330::-;20201:53;;;;;;;;;;;-1:-1:-1;;;20201:53:0;;;;;;;;-1:-1:-1;;;;;20201:17:0;;20164:4;20201:17;;;:9;:17;;;;;;;:53;;20223:6;;20201:21;:53::i;:::-;-1:-1:-1;;;;;20181:17:0;;;;;;;:9;:17;;;;;;:73;;;;20288:20;;;;;;;:32;;20313:6;20288:24;:32::i;:::-;-1:-1:-1;;;;;20265:20:0;;;;;;;:9;:20;;;;;;;:55;;;;20336:35;;;;;;;;;;20364:6;12092:25:1;;12080:2;12065:18;;12047:76;20336:35:0;;;;;;;;-1:-1:-1;20389:4:0;20071:330;;;;;:::o;20460:523::-;20520:6;20517:459;;;20557:16;;20542:12;:31;20597:10;;20588:6;:19;20638:17;;20622:13;:33;20685:16;;20670:12;:31;20727:12;;20716:8;:23;20460:523;:::o;20517:459::-;20787:15;;20772:12;:30;20826:9;;20817:6;:18;20866:16;;20850:13;:32;20912:15;;20897:12;:30;20953:11;;20942:8;:22;20517:459;20460:523;:::o;21938:601::-;-1:-1:-1;;;;;22043:22:0;;;;;;:14;:22;;;;;;;;22042:23;:51;;;;-1:-1:-1;;;;;;22070:23:0;;;;;;:15;:23;;;;;;;;22069:24;22042:51;:82;;;;-1:-1:-1;;;;;;22098:26:0;;;;;;:15;:26;;;;;;;;22097:27;22042:82;:104;;;;-1:-1:-1;22141:5:0;;-1:-1:-1;;;;;22128:18:0;;;22141:5;;22128:18;;22042:104;:134;;;;-1:-1:-1;;;;;;22150:26:0;;22171:4;22150:26;;22042:134;:165;;;;-1:-1:-1;22202:4:0;;-1:-1:-1;;;;;22181:26:0;;;22202:4;;22181:26;;22042:165;:186;;;;-1:-1:-1;22224:4:0;;-1:-1:-1;;;;;22211:17:0;;;22224:4;;22211:17;;22042:186;:223;;;;-1:-1:-1;22245:20:0;;-1:-1:-1;;;;;22232:33:0;;;22245:20;;22232:33;;22042:223;:261;;;;-1:-1:-1;22282:21:0;;-1:-1:-1;;;;;22269:34:0;;;22282:21;;22269:34;;22042:261;:292;;;;-1:-1:-1;22320:14:0;;-1:-1:-1;;;;;22307:27:0;;;22320:14;;22307:27;;22042:292;22038:494;;;-1:-1:-1;;;;;16717:18:0;;22350;16717;;;:9;:18;;;;;;22439:15;;22415:19;22428:6;16717:18;22415:19;:::i;:::-;22414:40;;22406:114;;;;-1:-1:-1;;;22406:114:0;;10691:2:1;22406:114:0;;;10673:21:1;10730:2;10710:18;;;10703:30;10769:34;10749:18;;;10742:62;10840:32;10820:18;;;10813:60;10890:19;;22406:114:0;10663:252:1;22038:494:0;21938:601;;;:::o;21528:378::-;21623:4;;-1:-1:-1;;;;;21613:14:0;;;21623:4;;21613:14;:49;;;;-1:-1:-1;21644:18:0;;;;21613:49;:94;;;;-1:-1:-1;;;;;;21680:27:0;;;;;;:16;:27;;;;;;;;21679:28;21613:94;21609:290;;;-1:-1:-1;;;;;21732:24:0;;;;;;:13;:24;;;;;;21759:15;-1:-1:-1;21724:82:0;;;;-1:-1:-1;;;21724:82:0;;9932:2:1;21724:82:0;;;9914:21:1;9971:2;9951:18;;;9944:30;10010;9990:18;;;9983:58;10058:18;;21724:82:0;9904:178:1;21724:82:0;21866:21;;21848:39;;21866:21;;;;;21848:15;:39;:::i;:::-;-1:-1:-1;;;;;21821:24:0;;;;;;:13;:24;;;;;:66;21528:378;;:::o;21015:478::-;21143:5;;-1:-1:-1;;;;;21130:18:0;;;21143:5;;21130:18;21126:360;;21167:6;21164:311;;;21211:16;;21201:6;:26;;:53;;;-1:-1:-1;;;;;;21231:23:0;;;;;;:15;:23;;;;;;;;21201:53;:83;;;-1:-1:-1;;;;;;21258:26:0;;;;;;:15;:26;;;;;;;;21201:83;21193:113;;;;-1:-1:-1;;;21193:113:0;;8418:2:1;21193:113:0;;;8400:21:1;8457:2;8437:18;;;8430:30;-1:-1:-1;;;8476:18:1;;;8469:47;8533:18;;21193:113:0;8390:167:1;21193:113:0;21164:311;;;21365:15;;21355:6;:25;;:52;;;-1:-1:-1;;;;;;21384:23:0;;;;;;:15;:23;;;;;;;;21355:52;:82;;;-1:-1:-1;;;;;;21411:26:0;;;;;;:15;:26;;;;;;;;21355:82;21347:112;;;;-1:-1:-1;;;21347:112:0;;8418:2:1;21347:112:0;;;8400:21:1;8457:2;8437:18;;;8430:30;-1:-1:-1;;;8476:18:1;;;8469:47;8533:18;;21347:112:0;8390:167:1;23124:197:0;23211:4;;23173;;-1:-1:-1;;;;;23211:4:0;23197:10;:18;;;;:38;;-1:-1:-1;23229:6:0;;;;;;;23228:7;23197:38;:62;;;;-1:-1:-1;23248:11:0;;;;;;;23197:62;:116;;;;-1:-1:-1;;23300:13:0;;23290:4;23272:24;;;;:9;:24;;;;;;:41;;;23124:197::o;23711:2067::-;14769:6;:13;;-1:-1:-1;;14769:13:0;;;;;23806:15:::1;::::0;23823:26:::1;::::0;14769:13;;23790:60:::1;::::0;:15:::1;:60::i;:::-;:79;;23857:12;;23790:79;;;23853:1;23790:79;23760:109;;23880:23;23906:59;23963:1;23906:52;23949:8;;23906:38;23924:19;23906:13;;:17;;:38;;;;:::i;:59::-;23880:85;;23976:20;23999:34;24017:15;23999:13;;:17;;:34;;;;:::i;:::-;24070:16;::::0;;24084:1:::1;24070:16:::0;;;;;::::1;::::0;;23976:57;;-1:-1:-1;24046:21:0::1;::::0;24070:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24070:16:0::1;24046:40;;24115:4;24097;24102:1;24097:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24097:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;24141:4:::1;::::0;24131:7;;24141:4;::::1;::::0;24131;;24141;;24131:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;24131:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;24216:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;24216:188:0;;24182:21:::1;::::0;24216:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;24288:12;;24158:21:::1;::::0;24331:4;;24358::::1;::::0;24378:15:::1;::::0;24216:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24415:18;24436:40;24462:13;24436:21;:25;;:40;;;;:::i;:::-;24415:61:::0;-1:-1:-1;24487:20:0::1;24510:40;24523:26;:19:::0;24547:1:::1;24523:23;:26::i;:::-;24510:8;::::0;;:12:::1;:40::i;:::-;24487:63:::0;-1:-1:-1;24561:27:0::1;24591:60;24649:1;24591:53;24487:63:::0;24591:53;:10;24606:19;24591:14:::1;:35::i;:60::-;24561:90;;24662:28;24693:47;24727:12;24693:29;24708:13;;24693:10;:14;;:29;;;;:::i;:47::-;24662:78;;24751:27;24781:46;24814:12;24781:28;24796:12;;24781:10;:14;;:28;;;;:::i;:46::-;24751:76;;24838:21;24862:40;24889:12;24862:22;24877:6;;24862:10;:14;;:22;;;;:::i;:40::-;24838:64;;24922:11;;;;;;;;;-1:-1:-1::0;;;;;24922:11:0::1;-1:-1:-1::0;;;;;24922:19:0::1;;24949:20;24922:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;25053:20:0::1;::::0;25045:78:::1;::::0;24995:21:::1;::::0;-1:-1:-1;;;;;25053:20:0::1;::::0;25113:5:::1;::::0;25087:19;;24995:21;25045:78;24995:21;25045:78;25087:19;25053:20;25113:5;25045:78:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;25187:14:0::1;::::0;25179:66:::1;::::0;24994:129;;-1:-1:-1;25135:15:0::1;::::0;-1:-1:-1;;;;;25187:14:0;;::::1;::::0;25235:5:::1;::::0;25215:13;;25135:15;25179:66;25135:15;25179:66;25215:13;25187:14;25235:5;25179:66:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25134:111;;;25265:16;25257:69;;;::::0;-1:-1:-1;;;25257:69:0;;9120:2:1;25257:69:0::1;::::0;::::1;9102:21:1::0;9159:2;9139:18;;;9132:30;9198:34;9178:18;;;9171:62;-1:-1:-1;;;9249:18:1;;;9242:38;9297:19;;25257:69:0::1;9092:230:1::0;25257:69:0::1;25345:10;25337:57;;;::::0;-1:-1:-1;;;25337:57:0;;9529:2:1;25337:57:0::1;::::0;::::1;9511:21:1::0;9568:2;9548:18;;;9541:30;9607:34;9587:18;;;9580:62;-1:-1:-1;;;9658:18:1;;;9651:32;9700:19;;25337:57:0::1;9501:224:1::0;25337:57:0::1;25410:19:::0;;25407:364:::1;;25445:6;::::0;25620:21:::1;::::0;25445:245:::1;::::0;-1:-1:-1;;;25445:245:0;;25522:4:::1;25445:245;::::0;::::1;6703:34:1::0;6753:18;;;6746:34;;;25445:6:0::1;6796:18:1::0;;;6789:34;;;6839:18;;;6832:34;-1:-1:-1;;;;;25620:21:0;;::::1;6882:19:1::0;;;6875:44;25660:15:0::1;6935:19:1::0;;;6928:35;25445:6:0;::::1;::::0;:22:::1;::::0;25475:19;;6637::1;;25445:245:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;25710:49:0::1;::::0;;13287:25:1;;;13343:2;13328:18;;13321:34;;;25710:49:0::1;::::0;-1:-1:-1;13260:18:1;25710:49:0::1;;;;;;;25407:364;-1:-1:-1::0;;14787:6:0;:14;;-1:-1:-1;;14787:14:0;;;-1:-1:-1;;;;;;;;;;;23711:2067:0:o;22744:333::-;22811:7;22831:17;22851:40;22876:14;;22851:20;22862:8;;22851:6;:10;;:20;;;;:::i;:40::-;22949:4;22931:24;;;;:9;:24;;;;;;22831:60;;-1:-1:-1;22931:39:0;;22831:60;22931:28;:39::i;:::-;22922:4;22904:24;;;;:9;:24;;;;;;;:66;;;;22986:42;;-1:-1:-1;;;;;22986:42:0;;;;;;;23018:9;12092:25:1;;12080:2;12065:18;;12047:76;22986:42:0;;;;;;;;23048:21;:6;23059:9;23048:10;:21::i;:::-;23041:28;22744:333;-1:-1:-1;;;;22744:333:0:o;1098:345::-;1184:7;1286:12;1279:5;1271:28;;;;-1:-1:-1;;;1271:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1310:9:0;1322:5;1326:1;1322;:5;:::i;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;307:1;304;297:12;259:2;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:2;;;836:1;833;826:12;788:2;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;;;778:301;;;;;:::o;1084:529::-;1161:6;1169;1177;1230:2;1218:9;1209:7;1205:23;1201:32;1198:2;;;1246:1;1243;1236:12;1198:2;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;:::-;1476:7;-1:-1:-1;1535:2:1;1520:18;;1507:32;1548:33;1507:32;1548:33;:::i;:::-;1600:7;1590:17;;;1188:425;;;;;:::o;1618:456::-;1695:6;1703;1711;1764:2;1752:9;1743:7;1739:23;1735:32;1732:2;;;1780:1;1777;1770:12;1732:2;1819:9;1806:23;1838:31;1863:5;1838:31;:::i;:::-;1888:5;-1:-1:-1;1945:2:1;1930:18;;1917:32;1958:33;1917:32;1958:33;:::i;:::-;1722:352;;2010:7;;-1:-1:-1;;;2064:2:1;2049:18;;;;2036:32;;1722:352::o;2079:315::-;2144:6;2152;2205:2;2193:9;2184:7;2180:23;2176:32;2173:2;;;2221:1;2218;2211:12;2173:2;2260:9;2247:23;2279:31;2304:5;2279:31;:::i;:::-;2329:5;-1:-1:-1;2353:35:1;2384:2;2369:18;;2353:35;:::i;:::-;2343:45;;2163:231;;;;;:::o;2399:315::-;2467:6;2475;2528:2;2516:9;2507:7;2503:23;2499:32;2496:2;;;2544:1;2541;2534:12;2496:2;2583:9;2570:23;2602:31;2627:5;2602:31;:::i;:::-;2652:5;2704:2;2689:18;;;;2676:32;;-1:-1:-1;;;2486:228:1:o;2719:180::-;2775:6;2828:2;2816:9;2807:7;2803:23;2799:32;2796:2;;;2844:1;2841;2834:12;2796:2;2867:26;2883:9;2867:26;:::i;2904:248::-;2969:6;2977;3030:2;3018:9;3009:7;3005:23;3001:32;2998:2;;;3046:1;3043;3036:12;2998:2;3069:26;3085:9;3069:26;:::i;3157:337::-;3220:6;3228;3281:2;3269:9;3260:7;3256:23;3252:32;3249:2;;;3297:1;3294;3287:12;3249:2;3320:26;3336:9;3320:26;:::i;:::-;3310:36;;3396:2;3385:9;3381:18;3368:32;3440:4;3433:5;3429:16;3422:5;3419:27;3409:2;;3460:1;3457;3450:12;3765:180;3824:6;3877:2;3865:9;3856:7;3852:23;3848:32;3845:2;;;3893:1;3890;3883:12;3845:2;-1:-1:-1;3916:23:1;;3835:110;-1:-1:-1;3835:110:1:o;3950:184::-;4020:6;4073:2;4061:9;4052:7;4048:23;4044:32;4041:2;;;4089:1;4086;4079:12;4041:2;-1:-1:-1;4112:16:1;;4031:103;-1:-1:-1;4031:103:1:o;4139:248::-;4207:6;4215;4268:2;4256:9;4247:7;4243:23;4239:32;4236:2;;;4284:1;4281;4274:12;4236:2;-1:-1:-1;;4307:23:1;;;4377:2;4362:18;;;4349:32;;-1:-1:-1;4226:161:1:o;4392:306::-;4480:6;4488;4496;4549:2;4537:9;4528:7;4524:23;4520:32;4517:2;;;4565:1;4562;4555:12;4517:2;4594:9;4588:16;4578:26;;4644:2;4633:9;4629:18;4623:25;4613:35;;4688:2;4677:9;4673:18;4667:25;4657:35;;4507:191;;;;;:::o;4703:454::-;4798:6;4806;4814;4822;4830;4883:3;4871:9;4862:7;4858:23;4854:33;4851:2;;;4900:1;4897;4890:12;4851:2;-1:-1:-1;;4923:23:1;;;4993:2;4978:18;;4965:32;;-1:-1:-1;5044:2:1;5029:18;;5016:32;;5095:2;5080:18;;5067:32;;-1:-1:-1;5146:3:1;5131:19;5118:33;;-1:-1:-1;4841:316:1;-1:-1:-1;4841:316:1:o;7614:597::-;7726:4;7755:2;7784;7773:9;7766:21;7816:6;7810:13;7859:6;7854:2;7843:9;7839:18;7832:34;7884:1;7894:140;7908:6;7905:1;7902:13;7894:140;;;8003:14;;;7999:23;;7993:30;7969:17;;;7988:2;7965:26;7958:66;7923:10;;7894:140;;;8052:6;8049:1;8046:13;8043:2;;;8122:1;8117:2;8108:6;8097:9;8093:22;8089:31;8082:42;8043:2;-1:-1:-1;8195:2:1;8174:15;-1:-1:-1;;8170:29:1;8155:45;;;;8202:2;8151:54;;7735:476;-1:-1:-1;;;7735:476:1:o;10920:329::-;11122:2;11104:21;;;11161:1;11141:18;;;11134:29;-1:-1:-1;;;11194:2:1;11179:18;;11172:36;11240:2;11225:18;;11094:155::o;11606:335::-;11808:2;11790:21;;;11847:2;11827:18;;;11820:30;-1:-1:-1;;;11881:2:1;11866:18;;11859:41;11932:2;11917:18;;11780:161::o;12128:980::-;12390:4;12438:3;12427:9;12423:19;12469:6;12458:9;12451:25;12495:2;12533:6;12528:2;12517:9;12513:18;12506:34;12576:3;12571:2;12560:9;12556:18;12549:31;12600:6;12635;12629:13;12666:6;12658;12651:22;12704:3;12693:9;12689:19;12682:26;;12743:2;12735:6;12731:15;12717:29;;12764:1;12774:195;12788:6;12785:1;12782:13;12774:195;;;12853:13;;-1:-1:-1;;;;;12849:39:1;12837:52;;12944:15;;;;12909:12;;;;12885:1;12803:9;12774:195;;;-1:-1:-1;;;;;;;13025:32:1;;;;13020:2;13005:18;;12998:60;-1:-1:-1;;;13089:3:1;13074:19;13067:35;12986:3;12399:709;-1:-1:-1;;;12399:709:1:o;13555:128::-;13595:3;13626:1;13622:6;13619:1;13616:13;13613:2;;;13632:18;;:::i;:::-;-1:-1:-1;13668:9:1;;13603:80::o;13688:217::-;13728:1;13754;13744:2;;13798:10;13793:3;13789:20;13786:1;13779:31;13833:4;13830:1;13823:15;13861:4;13858:1;13851:15;13744:2;-1:-1:-1;13890:9:1;;13734:171::o;13910:168::-;13950:7;14016:1;14012;14008:6;14004:14;14001:1;13998:21;13993:1;13986:9;13979:17;13975:45;13972:2;;;14023:18;;:::i;:::-;-1:-1:-1;14063:9:1;;13962:116::o;14083:125::-;14123:4;14151:1;14148;14145:8;14142:2;;;14156:18;;:::i;:::-;-1:-1:-1;14193:9:1;;14132:76::o;14213:127::-;14274:10;14269:3;14265:20;14262:1;14255:31;14305:4;14302:1;14295:15;14329:4;14326:1;14319:15;14345:127;14406:10;14401:3;14397:20;14394:1;14387:31;14437:4;14434:1;14427:15;14461:4;14458:1;14451:15;14609:131;-1:-1:-1;;;;;14684:31:1;;14674:42;;14664:2;;14730:1;14727;14720:12

Metadata Hash

e5577e39a4ec6d1df6ed867a97a37f4afb92dab687d3e6283e5863b973e8de4d
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.