Token Cromarket Token

Overview CRC20

Price
$0.00 @ 0.000000 CRO
Fully Diluted Market Cap
Total Supply:
28,537,539.91512 CM

Holders:
561 addresses

Transfers:
-

Contract:
0xf02b03202e9200245fa179c13adc11423e76f2400xF02b03202e9200245fA179C13aDC11423e76F240

Decimals:
5

Social Profiles:
Not Available, Update ?

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CromarketToken

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-09
*/

// SPDX-License-Identifier: Unlicensed

/**
 *     _____                                _        _
 *    / ____|                              | |      | |
 *   | |     _ __ ___  _ __ ___   __ _ _ __| | _____| |_   __ _ _ __  _ __
 *   | |    | '__/ _ \| '_ ` _ \ / _` | '__| |/ / _ \ __| / _` | '_ \| '_ \
 *   | |____| | | (_) | | | | | | (_| | |  |   <  __/ |_ | (_| | |_) | |_) |
 *    \_____|_|  \___/|_| |_| |_|\__,_|_|  |_|\_\___|\__(_)__,_| .__/| .__/
 *                                                             | |   | |
 *                                                             |_|   |_|
 * Name: Cromarket Token
 * Website : cromarket.app
 * Whitepaper : cromarket.app/cm
 * Twitter : twitter.com/cromarketapp
 * Telegram : t.me/cromarket
 * 
 * Dual rewards system: auto-stacking + USDC rewards
 * Auto-liquidity, auto-burn
 *
 * Based on Eversafu fork
 */


pragma solidity ^0.7.4;

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);

        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
}

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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

interface IPancakeSwapPair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IPancakeSwapRouter{
    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 removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    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 IPancakeSwapFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender)
    external
    view
    returns (uint256);

    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
    function setToken(address _addr) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address public _token;
    address _reward_token = 0xc21223249CA28397B4B6541dfFaEcC539BfF0c59;
    address _router = 0x145677FC4d9b8F19B5D56d1820c48e0443049a30;

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

    IERC20 BUSD = IERC20(_reward_token);
    IPancakeSwapRouter 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 currentIndex;

    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;
    uint256 public minPeriod = 1 hours;
    uint256 public minDistribution = 1 * (10 ** 18);

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

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

    constructor () {
        router = IPancakeSwapRouter(_router);
        _token = address(0x0);
    }

    function setToken(address _addr) external override initialization {
        _token = _addr;
    }

    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 = BUSD.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(BUSD);

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

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

    function claimDividend() external {
        distributeDividend(msg.sender);
    }

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

contract Ownable {
    address private _owner;

    event OwnershipRenounced(address indexed previousOwner);

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        _owner = msg.sender;
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(isOwner());
        _;
    }

    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(_owner);
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

abstract contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_
    ) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

contract CromarketToken is ERC20Detailed, Ownable {

    using SafeMath for uint256;
    using SafeMathInt for int256;

    event LogRebase(uint256 indexed epoch, uint256 totalSupply);

    IPancakeSwapPair public pairContract;
    mapping(address => bool) _isFeeExempt;

    modifier validRecipient(address to) {
        require(to != address(0x0));
        _;
    }

    uint256 public constant DECIMALS = 5;
    uint256 public constant MAX_UINT256 = ~uint256(0);
    uint8 public constant RATE_DECIMALS = 7;

    uint256 private constant INITIAL_FRAGMENTS_SUPPLY =
    325 * 10**3 * 10**DECIMALS;

    uint256 public liquidityFee = 20;
    uint256 public treasuryFee = 25;
    uint256 public safuDividendFee = 70;
    uint256 public sellFee = 20;
    uint256 public autofirePitFee = 25;
    uint256 public totalFee =
    liquidityFee.add(treasuryFee).add(safuDividendFee).add(
        autofirePitFee
    );
    uint256 public feeDenominator = 1000;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    address public autoLiquidityReceiver;
    address public treasuryReceiver;

    IDividendDistributor distributor;
    address public safuDividendReceiver;
    uint256 distributorGas = 500000;

    address public autofirePit;
    bool public swapEnabled = true;
    IPancakeSwapRouter public router;

    address public pair;
    bool inSwap = false;
    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    uint256 private constant TOTAL_GONS =
    MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY);

    uint256 private constant MAX_SUPPLY = 325 * 10**7 * 10**DECIMALS;

    bool public _autoRebase;
    bool public _autoAddLiquidity;
    uint256 public _initRebaseStartTime;
    uint256 public _lastRebasedTime;
    uint256 public _lastAddLiquidityTime;
    uint256 public _totalSupply;
    uint256 private _gonsPerFragment;

    mapping(address => uint256) private _gonBalances;
    mapping(address => mapping(address => uint256)) private _allowedFragments;
    mapping(address => bool) public blacklist;
    mapping(address => bool) public isDividendExempt;

    constructor() ERC20Detailed("Cromarket Token", "CM", uint8(DECIMALS)) Ownable() {

        router = IPancakeSwapRouter(0x145677FC4d9b8F19B5D56d1820c48e0443049a30);

        pair = IPancakeSwapFactory(router.factory()).createPair(
            router.WETH(),
            address(this)
        );

        autoLiquidityReceiver = 0x3D44cC778f3BE74c9EFC816D4f4079Bce6DA5834;
        treasuryReceiver = 0x8b812820B123e77e25682DABfaf386876C3a5656;
        autofirePit = 0x000000000000000000000000000000000000dEaD;
        safuDividendReceiver = 0x7137c3B6c0E131a538D6Ce4e317BEe8964eB7903;

        _allowedFragments[address(this)][address(router)] = uint256(-1);
        pairContract = IPancakeSwapPair(pair);

        distributor = IDividendDistributor(safuDividendReceiver);
        distributor.setToken(address(this));

        isDividendExempt[msg.sender] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        _totalSupply = INITIAL_FRAGMENTS_SUPPLY;
        _gonBalances[treasuryReceiver] = TOTAL_GONS;
        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);
        _initRebaseStartTime = block.timestamp;
        _lastRebasedTime = block.timestamp;
        _autoRebase = false;
        _autoAddLiquidity = true;
        _isFeeExempt[treasuryReceiver] = true;
        _isFeeExempt[address(this)] = true;

        _transferOwnership(treasuryReceiver);
        emit Transfer(address(0x0), treasuryReceiver, _totalSupply);
    }

    function rebase() internal {

        if ( inSwap ) return;
        uint256 rebaseRate;
        uint256 deltaTimeFromInit = block.timestamp - _initRebaseStartTime;
        uint256 deltaTime = block.timestamp - _lastRebasedTime;
        uint256 times = deltaTime.div(15 minutes);
        uint256 epoch = times.mul(15);

        if (deltaTimeFromInit < (365 days)) {
            rebaseRate = 2355;
        } else if (deltaTimeFromInit >= (365 days)) {
            rebaseRate = 211;
        } else if (deltaTimeFromInit >= ((15 * 365 days) / 10)) {
            rebaseRate = 14;
        } else if (deltaTimeFromInit >= (7 * 365 days)) {
            rebaseRate = 2;
        }

        for (uint256 i = 0; i < times; i++) {
            _totalSupply = _totalSupply
            .mul((10**RATE_DECIMALS).add(rebaseRate))
            .div(10**RATE_DECIMALS);
        }

        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);
        _lastRebasedTime = _lastRebasedTime.add(times.mul(15 minutes));

        pairContract.sync();

        emit LogRebase(epoch, _totalSupply);
    }

    function transfer(address to, uint256 value)
    external
    override
    validRecipient(to)
    returns (bool)
    {
        _transferFrom(msg.sender, to, value);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external override validRecipient(to) returns (bool) {

        if (_allowedFragments[from][msg.sender] != uint256(-1)) {
            _allowedFragments[from][msg.sender] = _allowedFragments[from][
            msg.sender
            ].sub(value, "Insufficient Allowance");
        }
        _transferFrom(from, to, value);
        return true;
    }

    function _basicTransfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        uint256 gonAmount = amount.mul(_gonsPerFragment);
        _gonBalances[from] = _gonBalances[from].sub(gonAmount);
        _gonBalances[to] = _gonBalances[to].add(gonAmount);
        return true;
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {

        require(!blacklist[sender] && !blacklist[recipient], "in_blacklist");

        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }
        if (shouldRebase()) {
            rebase();
        }

        if (shouldAddLiquidity()) {
            addLiquidity();
        }

        if (shouldSwapBack()) {
            swapBack();
        }

        uint256 gonAmount = amount.mul(_gonsPerFragment);
        _gonBalances[sender] = _gonBalances[sender].sub(gonAmount);
        uint256 gonAmountReceived = shouldTakeFee(sender, recipient)
        ? takeFee(sender, recipient, gonAmount)
        : gonAmount;
        _gonBalances[recipient] = _gonBalances[recipient].add(
            gonAmountReceived
        );

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

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

        emit Transfer(
            sender,
            recipient,
            gonAmountReceived.div(_gonsPerFragment)
        );
        return true;
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 gonAmount
    ) internal  returns (uint256) {
        uint256 _totalFee = totalFee;
        uint256 _treasuryFee = treasuryFee;

        if (recipient == pair) {
            _totalFee = totalFee.add(sellFee);
            _treasuryFee = treasuryFee.add(sellFee);
        }

        uint256 feeAmount = gonAmount.div(feeDenominator).mul(_totalFee);

        _gonBalances[autofirePit] = _gonBalances[autofirePit].add(
            gonAmount.div(feeDenominator).mul(autofirePitFee)
        );
        _gonBalances[address(this)] = _gonBalances[address(this)].add(
            gonAmount.div(feeDenominator).mul(_treasuryFee.add(safuDividendFee))
        );
        _gonBalances[autoLiquidityReceiver] = _gonBalances[autoLiquidityReceiver].add(
            gonAmount.div(feeDenominator).mul(liquidityFee)
        );

        emit Transfer(sender, address(this), feeAmount.div(_gonsPerFragment));
        return gonAmount.sub(feeAmount);
    }

    function addLiquidity() internal swapping {
        uint256 autoLiquidityAmount = _gonBalances[autoLiquidityReceiver].div(
            _gonsPerFragment
        );
        _gonBalances[address(this)] = _gonBalances[address(this)].add(
            _gonBalances[autoLiquidityReceiver]
        );
        _gonBalances[autoLiquidityReceiver] = 0;
        uint256 amountToLiquify = autoLiquidityAmount.div(2);
        uint256 amountToSwap = autoLiquidityAmount.sub(amountToLiquify);

        if( amountToSwap == 0 ) {
            return;
        }
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        uint256 balanceBefore = address(this).balance;


        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETHLiquidity = address(this).balance.sub(balanceBefore);

        if (amountToLiquify > 0&&amountETHLiquidity > 0) {
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
        }
        _lastAddLiquidityTime = block.timestamp;
    }

    function swapBack() internal swapping {

        uint256 amountToSwap = _gonBalances[address(this)].div(_gonsPerFragment);

        if( amountToSwap == 0) {
            return;
        }

        uint256 balanceBefore = address(this).balance;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();


        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETHToTreasuryAndSIF = address(this).balance.sub(
            balanceBefore
        );

        (bool success, ) = payable(treasuryReceiver).call{
        value: amountETHToTreasuryAndSIF.mul(treasuryFee).div(
            treasuryFee.add(safuDividendFee)
        ),
        gas: 30000
        }("");

        try distributor.deposit {
        value: amountETHToTreasuryAndSIF.mul(safuDividendFee).div(treasuryFee.add(safuDividendFee))
        } () {} catch {}
    }

    function withdrawAllToTreasury() external swapping onlyOwner {

        uint256 amountToSwap = _gonBalances[address(this)].div(_gonsPerFragment);
        require( amountToSwap > 0,"There is no Cromarket Token deposited in token contract");
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            treasuryReceiver,
            block.timestamp
        );
    }

    function shouldTakeFee(address from, address to)
    internal
    view
    returns (bool)
    {
        return
        (pair == from || pair == to) &&
        !_isFeeExempt[from];
    }

    function shouldRebase() internal view returns (bool) {
        return
        _autoRebase &&
        (_totalSupply < MAX_SUPPLY) &&
        msg.sender != pair  &&
        !inSwap &&
        block.timestamp >= (_lastRebasedTime + 15 minutes);
    }

    function shouldAddLiquidity() internal view returns (bool) {
        return
        _autoAddLiquidity &&
        !inSwap &&
        msg.sender != pair &&
        block.timestamp >= (_lastAddLiquidityTime + 2 days);
    }

    function shouldSwapBack() internal view returns (bool) {
        return
        !inSwap &&
        msg.sender != pair  ;
    }

    function setAutoRebase(bool _flag) external onlyOwner {
        if (_flag) {
            _autoRebase = _flag;
            _lastRebasedTime = block.timestamp;
        } else {
            _autoRebase = _flag;
        }
    }

    function setAutoAddLiquidity(bool _flag) external onlyOwner {
        if(_flag) {
            _autoAddLiquidity = _flag;
            _lastAddLiquidityTime = block.timestamp;
        } else {
            _autoAddLiquidity = _flag;
        }
    }

    function allowance(address owner_, address spender)
    external
    view
    override
    returns (uint256)
    {
        return _allowedFragments[owner_][spender];
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
    external
    returns (bool)
    {
        uint256 oldValue = _allowedFragments[msg.sender][spender];
        if (subtractedValue >= oldValue) {
            _allowedFragments[msg.sender][spender] = 0;
        } else {
            _allowedFragments[msg.sender][spender] = oldValue.sub(
                subtractedValue
            );
        }
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
    external
    returns (bool)
    {
        _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][
        spender
        ].add(addedValue);
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

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

    function checkFeeExempt(address _addr) external view returns (bool) {
        return _isFeeExempt[_addr];
    }

    function setIsDividendExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;

        if (exempt) {
            distributor.setShare(holder, 0);
        } else {
            distributor.setShare(holder, balanceOf(holder));
        }
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external onlyOwner {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000, "Gas must be lower than 750000");
        distributorGas = gas;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return
        (TOTAL_GONS.sub(_gonBalances[DEAD]).sub(_gonBalances[ZERO])).div(
            _gonsPerFragment
        );
    }

    function isNotInSwap() external view returns (bool) {
        return !inSwap;
    }

    function manualSync() external {
        IPancakeSwapPair(pair).sync();
    }

    function setFeeReceivers(
        address _autoLiquidityReceiver,
        address _treasuryReceiver,
        address _autofirePit
    ) external onlyOwner {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        treasuryReceiver = _treasuryReceiver;
        autofirePit = _autofirePit;
    }

    function getLiquidityBacking(uint256 accuracy)
    public
    view
    returns (uint256)
    {
        uint256 liquidityBalance = _gonBalances[pair].div(_gonsPerFragment);
        return
        accuracy.mul(liquidityBalance.mul(2)).div(getCirculatingSupply());
    }

    function setWhitelist(address _addr) external onlyOwner {
        _isFeeExempt[_addr] = true;
    }

    function setBotBlacklist(address _botAddress, bool _flag) external onlyOwner {
        require(isContract(_botAddress), "only contract address, not allowed externally owned account");
        blacklist[_botAddress] = _flag;
    }

    function setLP(address _address) external onlyOwner {
        pairContract = IPancakeSwapPair(_address);
    }

    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _gonBalances[account].div(_gonsPerFragment);
    }

    function isContract(address addr) internal view returns (bool) {
        uint size;
        assembly { size := extcodesize(addr) }
        return size > 0;
    }

    receive() external payable {}
}

Contract Security Audit

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":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_UINT256","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RATE_DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_autoAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_autoRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_initRebaseStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastAddLiquidityTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastRebasedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autofirePit","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autofirePitFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isNotInSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairContract","outputs":[{"internalType":"contract IPancakeSwapPair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IPancakeSwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safuDividendFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safuDividendReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setAutoAddLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setAutoRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_botAddress","type":"address"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setBotBlacklist","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":"_treasuryReceiver","type":"address"},{"internalType":"address","name":"_autofirePit","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAllToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052601460055560196006556046600755601460085560196009556200005d60095462000049600754620000496006546005546200055460201b620019031790919060201c565b6200055460201b620019031790919060201c565b600a556103e8600b55600c80546001600160a01b031990811661dead17909155600d805490911690556207a1206012556013805460ff60a01b19908116600160a01b17909155601580549091169055348015620000b957600080fd5b50604080518082018252600f81526e21b937b6b0b935b2ba102a37b5b2b760891b602080830191825283518085019094526002845261434d60f01b9084015281519192916005916200010f916000919062000722565b5081516200012590600190602085019062000722565b506002805460ff191660ff9290921691909117610100600160a81b031916610100330217905550506014805473145677fc4d9b8f19b5d56d1820c48e0443049a306001600160a01b031990911617908190556040805163c45a015560e01b815290516001600160a01b039092169163c45a015591600480820192602092909190829003018186803b158015620001ba57600080fd5b505afa158015620001cf573d6000803e3d6000fd5b505050506040513d6020811015620001e657600080fd5b5051601454604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693169163ad5c4648916004808301926020929190829003018186803b1580156200023557600080fd5b505afa1580156200024a573d6000803e3d6000fd5b505050506040513d60208110156200026157600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b158015620002b157600080fd5b505af1158015620002c6573d6000803e3d6000fd5b505050506040513d6020811015620002dd57600080fd5b5051601580546001600160a01b039283166001600160a01b0319918216178255600e80548216733d44cc778f3be74c9efc816d4f4079bce6da5834179055600f80548216738b812820b123e77e25682dabfaf386876c3a565617905560138054821661dead179055601180548216737137c3b6c0e131a538d6ce4e317bee8964eb7903178155306000818152601c6020908152604080832060145489168452909152808220600019905594546003805486169188169190911790559154601080549094169086161792839055835163144fa6d760e01b815260048101919091529251919093169263144fa6d7926024808201939182900301818387803b158015620003e757600080fd5b505af1158015620003fc573d6000803e3d6000fd5b5050336000908152601e602090815260408083208054600160ff1991821681179092556015546001600160a01b03908116865283862080548316841790553086528386208054831684179055600c54811686528386208054909216909217905564079126a5006019908155600f549091168452601b835292206325878aff19908190559154620004999450919250620005b6811b6200195d17901c565b601a554260168190556017556015805461ffff60a81b1916600160b01b179055600f80546001600160a01b03908116600090815260046020526040808220805460ff1990811660019081179092553084529190922080549091169091179055905462000506911662000600565b600f5460195460408051918252516001600160a01b03909216916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a3620007ce565b600082820183811015620005af576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000620005af83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200067b60201b60201c565b6001600160a01b0381166200061457600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081836200070b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620006cf578181015183820152602001620006b5565b50505050905090810190601f168015620006fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200071857fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200075a5760008555620007a5565b82601f106200077557805160ff1916838001178555620007a5565b82800160010185558215620007a5579182015b82811115620007a557825182559160200191906001019062000788565b50620007b3929150620007b7565b5090565b5b80821115620007b35760008155600101620007b8565b612b8d80620007de6000396000f3fe60806040526004361061036f5760003560e01c806383b4ac68116101c6578063bd595581116100f7578063dcb1aad211610095578063f2fde38b1161006f578063f2fde38b14610ad1578063f708a64f14610b04578063f887ea4014610b3f578063f9f92be414610b5457610376565b8063dcb1aad214610a55578063dd62ed3e14610a6a578063e15beb8014610aa557610376565b8063cfbac92f116100d1578063cfbac92f14610987578063d4399790146109b3578063d51ed1c8146109e6578063d7c0103214610a1057610376565b8063bd59558114610948578063ca33e64c1461095d578063cc32d1761461097257610376565b80639b87676c11610164578063a457c2d71161013e578063a457c2d7146108ac578063a8aa1b31146108e5578063a9059cbb146108fa578063afb9cf6d1461093357610376565b80639b87676c146108585780639d1944f51461086d578063a44f2b0e1461089757610376565b80638f32d59b116101a05780638f32d59b1461080457806395d89b411461081957806398118cb41461082e5780639b2912cc1461084357610376565b806383b4ac68146107a7578063854cff2f146107bc5780638da5cb5b146107ef57610376565b806333a581d2116102a05780635a604c521161023e57806370a082311161021857806370a0823114610735578063715018a614610768578063753d02a11461077d5780637d17757e1461079257610376565b80635a604c52146106f65780636912652c1461070b5780636ddd17131461072057610376565b80633eaaf86b1161027a5780633eaaf86b146106845780634355855a146106995780634d709adf146106cc578063514c3f4d146106e157610376565b806333a581d2146105fb57806337c9be8714610610578063395093511461064b57610376565b80632b112e491161030d5780632e0f2625116102e75780632e0f2625146105735780632f34d28214610588578063313ce567146105bb57806332b75683146105e657610376565b80632b112e49146105175780632b14ca561461052c5780632d48e8961461054157610376565b8063180b0d7e11610349578063180b0d7e1461048357806318160ddd146104aa5780631df4ccfc146104bf57806323b872dd146104d457610376565b806306fdde031461037b57806308b1fd8f14610405578063095ea7b31461043657610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610b87565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103ca5781810151838201526020016103b2565b50505050905090810190601f1680156103f75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041157600080fd5b5061041a610c1d565b604080516001600160a01b039092168252519081900360200190f35b34801561044257600080fd5b5061046f6004803603604081101561045957600080fd5b506001600160a01b038135169060200135610c2c565b604080519115158252519081900360200190f35b34801561048f57600080fd5b50610498610c93565b60408051918252519081900360200190f35b3480156104b657600080fd5b50610498610c99565b3480156104cb57600080fd5b50610498610c9f565b3480156104e057600080fd5b5061046f600480360360608110156104f757600080fd5b506001600160a01b03813581169160208101359091169060400135610ca5565b34801561052357600080fd5b50610498610d7f565b34801561053857600080fd5b50610498610dd9565b34801561054d57600080fd5b506105716004803603604081101561056457600080fd5b5080359060200135610ddf565b005b34801561057f57600080fd5b50610498610e60565b34801561059457600080fd5b50610571600480360360208110156105ab57600080fd5b50356001600160a01b0316610e65565b3480156105c757600080fd5b506105d0610e98565b6040805160ff9092168252519081900360200190f35b3480156105f257600080fd5b50610498610ea1565b34801561060757600080fd5b50610498610ea7565b34801561061c57600080fd5b506105716004803603604081101561063357600080fd5b506001600160a01b0381351690602001351515610ead565b34801561065757600080fd5b5061046f6004803603604081101561066e57600080fd5b506001600160a01b038135169060200135610f2d565b34801561069057600080fd5b50610498610fc0565b3480156106a557600080fd5b5061046f600480360360208110156106bc57600080fd5b50356001600160a01b0316610fc6565b3480156106d857600080fd5b5061041a610fdb565b3480156106ed57600080fd5b50610498610fea565b34801561070257600080fd5b506105d0610ff0565b34801561071757600080fd5b5061046f610ff5565b34801561072c57600080fd5b5061046f611005565b34801561074157600080fd5b506104986004803603602081101561075857600080fd5b50356001600160a01b0316611015565b34801561077457600080fd5b5061057161103d565b34801561078957600080fd5b5061057161109d565b34801561079e57600080fd5b5061041a611107565b3480156107b357600080fd5b5061046f611116565b3480156107c857600080fd5b50610571600480360360208110156107df57600080fd5b50356001600160a01b0316611127565b3480156107fb57600080fd5b5061041a61115c565b34801561081057600080fd5b5061046f611170565b34801561082557600080fd5b50610390611186565b34801561083a57600080fd5b506104986111e6565b34801561084f57600080fd5b506104986111ec565b34801561086457600080fd5b506104986111f2565b34801561087957600080fd5b506105716004803603602081101561089057600080fd5b50356111f8565b3480156108a357600080fd5b5061041a611265565b3480156108b857600080fd5b5061046f600480360360408110156108cf57600080fd5b506001600160a01b038135169060200135611274565b3480156108f157600080fd5b5061041a61135d565b34801561090657600080fd5b5061046f6004803603604081101561091d57600080fd5b506001600160a01b03813516906020013561136c565b34801561093f57600080fd5b5061046f611398565b34801561095457600080fd5b506105716113a8565b34801561096957600080fd5b5061041a6115d5565b34801561097e57600080fd5b506104986115e4565b34801561099357600080fd5b50610571600480360360208110156109aa57600080fd5b503515156115ea565b3480156109bf57600080fd5b5061046f600480360360208110156109d657600080fd5b50356001600160a01b031661163c565b3480156109f257600080fd5b5061049860048036036020811015610a0957600080fd5b503561165a565b348015610a1c57600080fd5b5061057160048036036060811015610a3357600080fd5b506001600160a01b0381358116916020810135821691604090910135166116ae565b348015610a6157600080fd5b506104986116fe565b348015610a7657600080fd5b5061049860048036036040811015610a8d57600080fd5b506001600160a01b0381358116916020013516611704565b348015610ab157600080fd5b5061057160048036036020811015610ac857600080fd5b5035151561172f565b348015610add57600080fd5b5061057160048036036020811015610af457600080fd5b50356001600160a01b0316611782565b348015610b1057600080fd5b5061057160048036036040811015610b2757600080fd5b506001600160a01b038135169060200135151561179c565b348015610b4b57600080fd5b5061041a6118df565b348015610b6057600080fd5b5061046f60048036036020811015610b7757600080fd5b50356001600160a01b03166118ee565b60008054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c135780601f10610be857610100808354040283529160200191610c13565b820191906000526020600020905b815481529060010190602001808311610bf657829003601f168201915b5050505050905090565b600f546001600160a01b031681565b336000818152601c602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b600b5481565b60195490565b600a5481565b6000826001600160a01b038116610cbb57600080fd5b6001600160a01b0385166000908152601c6020908152604080832033845290915290205460001914610d68576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0388166000908152601c82528381203382529091529190912054610d4391859061199f565b6001600160a01b0386166000908152601c602090815260408083203384529091529020555b610d73858585611a36565b50600195945050505050565b601a54600d546001600160a01b039081166000908152601b602052604080822054600c5490931682528120549092610dd4929091610dce9190610dc8906325878aff1990611dc0565b90611dc0565b9061195d565b905090565b60085481565b610de7611170565b610df057600080fd5b601054604080516316a4744b60e11b8152600481018590526024810184905290516001600160a01b0390921691632d48e8969160448082019260009290919082900301818387803b158015610e4457600080fd5b505af1158015610e58573d6000803e3d6000fd5b505050505050565b600581565b610e6d611170565b610e7657600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60025460ff1690565b60175481565b60001981565b610eb5611170565b610ebe57600080fd5b610ec782611e02565b610f025760405162461bcd60e51b815260040180806020018281038252603b815260200180612ac5603b913960400191505060405180910390fd5b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b336000908152601c602090815260408083206001600160a01b0386168452909152812054610f5b9083611903565b336000818152601c602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60195481565b601e6020526000908152604090205460ff1681565b6003546001600160a01b031681565b60075481565b600781565b601554600160b01b900460ff1681565b601354600160a01b900460ff1681565b601a546001600160a01b0382166000908152601b60205260408120549091610c8d919061195d565b611045611170565b61104e57600080fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b601560009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110ed57600080fd5b505af1158015611101573d6000803e3d6000fd5b50505050565b6011546001600160a01b031681565b601554600160a01b900460ff161590565b61112f611170565b61113857600080fd5b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b0316331490565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c135780601f10610be857610100808354040283529160200191610c13565b60055481565b60185481565b60165481565b611200611170565b61120957600080fd5b620b71b08110611260576040805162461bcd60e51b815260206004820152601d60248201527f476173206d757374206265206c6f776572207468616e20373530303030000000604482015290519081900360640190fd5b601255565b6013546001600160a01b031681565b336000908152601c602090815260408083206001600160a01b03861684529091528120548083106112c857336000908152601c602090815260408083206001600160a01b03881684529091528120556112f7565b6112d28184611dc0565b336000908152601c602090815260408083206001600160a01b03891684529091529020555b336000818152601c602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6015546001600160a01b031681565b6000826001600160a01b03811661138257600080fd5b61138d338585611a36565b506001949350505050565b601554600160a81b900460ff1681565b6015805460ff60a01b1916600160a01b1790556113c3611170565b6113cc57600080fd5b601a54306000908152601b602052604081205490916113eb919061195d565b90506000811161142c5760405162461bcd60e51b8152600401808060200182810382526037815260200180612b216037913960400191505060405180910390fd5b6040805160028082526060808301845292602083019080368337019050509050308160008151811061145a57fe5b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156114ae57600080fd5b505afa1580156114c2573d6000803e3d6000fd5b505050506040513d60208110156114d857600080fd5b50518151829060019081106114e957fe5b6001600160a01b03928316602091820292909201810191909152601454600f5460405163791ac94760e01b81526004810187815260006024830181905292861660648301819052426084840181905260a060448501908152895160a48601528951969098169763791ac947978b978b969495939460c4019187810191028083838b5b8381101561158357818101518382015260200161156b565b505050509050019650505050505050600060405180830381600087803b1580156115ac57600080fd5b505af11580156115c0573d6000803e3d6000fd5b50506015805460ff60a01b1916905550505050565b600e546001600160a01b031681565b60065481565b6115f2611170565b6115fb57600080fd5b8015611621576015805460ff60b01b1916600160b01b8315150217905542601855611639565b6015805460ff60b01b1916600160b01b831515021790555b50565b6001600160a01b031660009081526004602052604090205460ff1690565b601a546015546001600160a01b03166000908152601b6020526040812054909182916116859161195d565b90506116a7611692610d7f565b610dce6116a0846002611e08565b8690611e08565b9392505050565b6116b6611170565b6116bf57600080fd5b600e80546001600160a01b039485166001600160a01b031991821617909155600f80549385169382169390931790925560138054919093169116179055565b60095481565b6001600160a01b039182166000908152601c6020908152604080832093909416825291909152205490565b611737611170565b61174057600080fd5b8015611766576015805460ff60a81b1916600160a81b8315150217905542601755611639565b60158054821515600160a81b0260ff60a81b1990911617905550565b61178a611170565b61179357600080fd5b61163981611e61565b6117a4611170565b6117ad57600080fd5b6001600160a01b03821630148015906117d457506015546001600160a01b03838116911614155b6117dd57600080fd5b6001600160a01b0382166000908152601e60205260409020805460ff1916821580159190911790915561187a5760105460408051630a5b654b60e11b81526001600160a01b03858116600483015260006024830181905292519316926314b6ca969260448084019391929182900301818387803b15801561185d57600080fd5b505af1158015611871573d6000803e3d6000fd5b505050506118db565b6010546001600160a01b03166314b6ca968361189581611015565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610e4457600080fd5b5050565b6014546001600160a01b031681565b601d6020526000908152604090205460ff1681565b6000828201838110156116a7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006116a783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611edb565b60008184841115611a2e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119f35781810151838201526020016119db565b50505050905090810190601f168015611a205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0383166000908152601d602052604081205460ff16158015611a7857506001600160a01b0383166000908152601d602052604090205460ff16155b611ab8576040805162461bcd60e51b815260206004820152600c60248201526b1a5b97d89b1858dadb1a5cdd60a21b604482015290519081900360640190fd5b601554600160a01b900460ff1615611adc57611ad5848484611f40565b90506116a7565b611ae4611fd2565b15611af157611af1612038565b611af96121d1565b15611b0657611b06612224565b611b0e612561565b15611b1b57611b1b61258c565b6000611b32601a5484611e0890919063ffffffff16565b6001600160a01b0386166000908152601b6020526040902054909150611b589082611dc0565b6001600160a01b0386166000908152601b6020526040812091909155611b7e86866128a8565b611b885781611b93565b611b938686846128fc565b6001600160a01b0386166000908152601b6020526040902054909150611bb99082611903565b6001600160a01b038087166000908152601b60209081526040808320949094559189168152601e909152205460ff16611c60576010546001600160a01b03166314b6ca9687611c0781611015565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611c4d57600080fd5b505af1925050508015611c5e575060015b505b6001600160a01b0385166000908152601e602052604090205460ff16611cf4576010546001600160a01b03166314b6ca9686611c9b81611015565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611ce157600080fd5b505af1925050508015611cf2575060015b505b601054601254604080516001624d3b8760e01b031981526004810192909252516001600160a01b039092169163ffb2c4799160248082019260009290919082900301818387803b158015611d4757600080fd5b505af1925050508015611d58575060015b50846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611da3601a548561195d90919063ffffffff16565b60408051918252519081900360200190a350600195945050505050565b60006116a783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061199f565b3b151590565b600082611e1757506000610c8d565b82820282848281611e2457fe5b04146116a75760405162461bcd60e51b8152600401808060200182810382526021815260200180612b006021913960400191505060405180910390fd5b6001600160a01b038116611e7457600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60008183611f2a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156119f35781810151838201526020016119db565b506000838581611f3657fe5b0495945050505050565b600080611f58601a5484611e0890919063ffffffff16565b6001600160a01b0386166000908152601b6020526040902054909150611f7e9082611dc0565b6001600160a01b038087166000908152601b60205260408082209390935590861681522054611fad9082611903565b6001600160a01b0385166000908152601b602052604090205550600190509392505050565b601554600090600160a81b900460ff168015611ff6575060195466012795f58d5000115b801561200d57506015546001600160a01b03163314155b80156120235750601554600160a01b900460ff16155b8015610dd45750506017546103840142101590565b601554600160a01b900460ff161561204f576121cf565b601654601754600091429081039190038261206c8261038461195d565b9050600061207b82600f611e08565b90506301e133808410156120935761093394506120cb565b6301e1338084106120a75760d394506120cb565b6302d1cd4084106120bb57600e94506120cb565b630d28688084106120cb57600294505b60005b828110156120fe576120f362989680610dce6120ea828a611903565b60195490611e08565b6019556001016120ce565b50601954612112906325878aff199061195d565b601a5561212d61212483610384611e08565b60175490611903565b6017556003546040805160016209351760e01b0319815290516001600160a01b039092169163fff6cae99160048082019260009290919082900301818387803b15801561217957600080fd5b505af115801561218d573d6000803e3d6000fd5b505060195460408051918252518493507f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f292509081900360200190a250505050505b565b601554600090600160b01b900460ff1680156121f75750601554600160a01b900460ff16155b801561220e57506015546001600160a01b03163314155b8015610dd45750506018546202a3000142101590565b6015805460ff60a01b1916600160a01b179055601a54600e546001600160a01b03166000908152601b60205260408120549091612261919061195d565b600e546001600160a01b03166000908152601b6020526040808220543083529120549192506122909190611903565b306000908152601b602052604080822092909255600e546001600160a01b031681529081208190556122c382600261195d565b905060006122d18383611dc0565b9050806122e057505050612552565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061230e57fe5b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561236257600080fd5b505afa158015612376573d6000803e3d6000fd5b505050506040513d602081101561238c57600080fd5b505181518290600190811061239d57fe5b6001600160a01b0392831660209182029290920181019190915260145460405163791ac94760e01b8152600481018681526000602483018190523060648401819052426084850181905260a060448601908152895160a487015289514799979097169763791ac947978c9795968c9690939260c49091019187820191028083838b5b8381101561243757818101518382015260200161241f565b505050509050019650505050505050600060405180830381600087803b15801561246057600080fd5b505af1158015612474573d6000803e3d6000fd5b50505050600061248d8247611dc090919063ffffffff16565b905060008511801561249f5750600081115b1561254757601454600e546040805163f305d71960e01b81523060048201526024810189905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b15801561251957600080fd5b505af115801561252d573d6000803e3d6000fd5b50505050506040513d606081101561254457600080fd5b50505b505042601855505050505b6015805460ff60a01b19169055565b601554600090600160a01b900460ff16158015610dd45750506015546001600160a01b031633141590565b6015805460ff60a01b1916600160a01b179055601a54306000908152601b602052604081205490916125be919061195d565b9050806125cb5750612552565b6040805160028082526060808301845247939092919060208301908036833701905050905030816000815181106125fe57fe5b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561265257600080fd5b505afa158015612666573d6000803e3d6000fd5b505050506040513d602081101561267c57600080fd5b505181518290600190811061268d57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050601460009054906101000a90046001600160a01b03166001600160a01b031663791ac9478460008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561274757818101518382015260200161272f565b505050509050019650505050505050600060405180830381600087803b15801561277057600080fd5b505af1158015612784573d6000803e3d6000fd5b50505050600061279d8347611dc090919063ffffffff16565b600f546007546006549293506000926001600160a01b03909216916127d4916127c69190611903565b600654610dce908690611e08565b60405161753091906000818181858888f193505050503d8060008114612816576040519150601f19603f3d011682016040523d82523d6000602084013e61281b565b606091505b50506010546007546006549293506001600160a01b039091169163d0e30db0916128569161284891611903565b600754610dce908790611e08565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561288157600080fd5b505af193505050508015612893575060015b5050505050506015805460ff60a01b19169055565b6015546000906001600160a01b03848116911614806128d457506015546001600160a01b038381169116145b80156116a7575050506001600160a01b031660009081526004602052604090205460ff161590565b600a5460065460155460009291906001600160a01b038681169116141561294857600854600a5461292c91611903565b915061294560085460065461190390919063ffffffff16565b90505b600061296983612963600b548861195d90919063ffffffff16565b90611e08565b90506129aa612989600954612963600b548961195d90919063ffffffff16565b6013546001600160a01b03166000908152601b602052604090205490611903565b6013546001600160a01b03166000908152601b60205260409020556007546129ff906129e9906129db908590611903565b600b5461296390899061195d565b306000908152601b602052604090205490611903565b306000908152601b6020526040902055600554600b54612a4991612a289161296390899061195d565b600e546001600160a01b03166000908152601b602052604090205490611903565b600e546001600160a01b039081166000908152601b6020526040902091909155601a5430918916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a9e90859061195d565b60408051918252519081900360200190a3612ab98582611dc0565b97965050505050505056fe6f6e6c7920636f6e747261637420616464726573732c206e6f7420616c6c6f7765642065787465726e616c6c79206f776e6564206163636f756e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775468657265206973206e6f2043726f6d61726b657420546f6b656e206465706f736974656420696e20746f6b656e20636f6e7472616374a2646970667358221220e9eac1905e34d948a92f80e43c8372f86dab39e298b571d9056f5a3d04d7204d64736f6c63430007040033

Deployed ByteCode Sourcemap

19695:16985:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19419:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20858:31;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;20858:31:0;;;;;;;;;;;;;;33658:241;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33658:241:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20640:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;36213:102;;;;;;;;;;;;;:::i;20516:117::-;;;;;;;;;;;;;:::i;24838:453::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24838:453:0;;;;;;;;;;;;;;;;;:::i;34754:203::-;;;;;;;;;;;;;:::i;20441:27::-;;;;;;;;;;;;;:::i;34388:182::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34388:182:0;;;;;;;:::i;:::-;;20083:36;;;;;;;;;;;;;:::i;36093:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36093:112:0;-1:-1:-1;;;;;36093:112:0;;:::i;19605:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21566:31;;;;;;;;;;;;;:::i;20126:49::-;;;;;;;;;;;;;:::i;35853:232::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35853:232:0;;;;;;;;;;:::i;33256:394::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33256:394:0;;;;;;;;:::i;21647:27::-;;;;;;;;;;;;;:::i;21905:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21905:48:0;-1:-1:-1;;;;;21905:48:0;;:::i;19892:36::-;;;;;;;;;;;;;:::i;20399:35::-;;;;;;;;;;;;;:::i;20182:39::-;;;;;;;;;;;;;:::i;21488:29::-;;;;;;;;;;;;;:::i;21052:30::-;;;;;;;;;;;;;:::i;36323:144::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36323:144:0;-1:-1:-1;;;;;36323:144:0;;:::i;18630:126::-;;;;;;;;;;;;;:::i;35058:79::-;;;;;;;;;;;;;:::i;20937:35::-;;;;;;;;;;;;;:::i;34965:85::-;;;;;;;;;;;;;:::i;35744:101::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35744:101:0;-1:-1:-1;;;;;35744:101:0;;:::i;18365:79::-;;;;;;;;;;;;;:::i;18530:92::-;;;;;;;;;;;;;:::i;19510:87::-;;;;;;;;;;;;;:::i;20322:32::-;;;;;;;;;;;;;:::i;21604:36::-;;;;;;;;;;;;;:::i;21524:35::-;;;;;;;;;;;;;:::i;34578:168::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34578:168:0;;:::i;21019:26::-;;;;;;;;;;;;;:::i;32660:588::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32660:588:0;;;;;;;;:::i;21130:19::-;;;;;;;;;;;;;:::i;24631:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24631:199:0;;;;;;;;:::i;21458:23::-;;;;;;;;;;;;;:::i;30563:570::-;;;;;;;;;;;;;:::i;20815:36::-;;;;;;;;;;;;;:::i;20361:31::-;;;;;;;;;;;;;:::i;32214:252::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32214:252:0;;;;:::i;33907:113::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33907:113:0;-1:-1:-1;;;;;33907:113:0;;:::i;35461:275::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35461:275:0;;:::i;35145:308::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35145:308:0;;;;;;;;;;;;;;;;;;;:::i;20475:34::-;;;;;;;;;;;;;:::i;32474:178::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32474:178:0;;;;;;;;;;:::i;31976:230::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31976:230:0;;;;:::i;18764:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18764:109:0;-1:-1:-1;;;;;18764:109:0;;:::i;34028:352::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34028:352:0;;;;;;;;;;:::i;21089:32::-;;;;;;;;;;;;;:::i;21857:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21857:41:0;-1:-1:-1;;;;;21857:41:0;;:::i;19419:83::-;19489:5;19482:12;;;;;;;;-1:-1:-1;;19482:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19456:13;;19482:12;;19489:5;;19482:12;;19489:5;19482:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19419:83;:::o;20858:31::-;;;-1:-1:-1;;;;;20858:31:0;;:::o;33658:241::-;33789:10;33749:4;33771:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;33771:38:0;;;;;;;;;;;:46;;;33833:36;;;;;;;33749:4;;33771:38;;33789:10;;33833:36;;;;;;;;-1:-1:-1;33887:4:0;33658:241;;;;;:::o;20640:36::-;;;;:::o;36213:102::-;36295:12;;36213:102;:::o;20516:117::-;;;;:::o;24838:453::-;24981:4;24968:2;-1:-1:-1;;;;;20036:18:0;;20028:27;;;;;;-1:-1:-1;;;;;25004:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;25028:10:::1;25004:35:::0;;;;;;;;-1:-1:-1;;25004:50:0::1;25000:221;;25109:100;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;25109:100:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;25109:23:0;::::1;-1:-1:-1::0;25109:23:0;;;:17:::1;:23:::0;;;;;25147:10:::1;25109:63:::0;;;;;;;;;;:100:::1;::::0;25177:5;;25109:67:::1;:100::i;:::-;-1:-1:-1::0;;;;;25071:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;25095:10:::1;25071:35:::0;;;;;;;:138;25000:221:::1;25231:30;25245:4;25251:2;25255:5;25231:13;:30::i;:::-;-1:-1:-1::0;25279:4:0::1;::::0;24838:453;-1:-1:-1;;;;;24838:453:0:o;34754:203::-;34922:16;;34896:4;;-1:-1:-1;;;;;34896:4:0;;;34807:7;34883:18;;;:12;:18;;;;;;;34872:4;;;;;34859:18;;;;;34807:7;;34843:106;;34922:16;;34844:58;;34883:18;34844:34;;-1:-1:-1;;21322:54:0;34844:14;:34::i;:::-;:38;;:58::i;:::-;34843:64;;:106::i;:::-;34827:122;;34754:203;:::o;20441:27::-;;;;:::o;34388:182::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;34497:11:::1;::::0;:65:::1;::::0;;-1:-1:-1;;;34497:65:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;-1:-1:-1;;;;;34497:11:0;;::::1;::::0;:35:::1;::::0;:65;;;;;:11:::1;::::0;:65;;;;;;;;:11;;:65;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34388:182:::0;;:::o;20083:36::-;20118:1;20083:36;:::o;36093:112::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;36156:12:::1;:41:::0;;-1:-1:-1;;;;;;36156:41:0::1;-1:-1:-1::0;;;;;36156:41:0;;;::::1;::::0;;;::::1;::::0;;36093:112::o;19605:83::-;19671:9;;;;19605:83;:::o;21566:31::-;;;;:::o;20126:49::-;-1:-1:-1;;20126:49:0;:::o;35853:232::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;35949:23:::1;35960:11;35949:10;:23::i;:::-;35941:95;;;;-1:-1:-1::0;;;35941:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;36047:22:0;;;::::1;;::::0;;;:9:::1;:22;::::0;;;;:30;;-1:-1:-1;;36047:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35853:232::o;33256:394::-;33429:10;33348:4;33411:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;33411:58:0;;;;;;;;;;:74;;33474:10;33411:62;:74::i;:::-;33388:10;33370:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;33370:38:0;;;;;;;;;;;;:115;;;33501:119;;;;;;33370:38;;33501:119;;;;;;;;;;;-1:-1:-1;33638:4:0;33256:394;;;;:::o;21647:27::-;;;;:::o;21905:48::-;;;;;;;;;;;;;;;:::o;19892:36::-;;;-1:-1:-1;;;;;19892:36:0;;:::o;20399:35::-;;;;:::o;20182:39::-;20220:1;20182:39;:::o;21488:29::-;;;-1:-1:-1;;;21488:29:0;;;;;:::o;21052:30::-;;;-1:-1:-1;;;21052:30:0;;;;;:::o;36323:144::-;36442:16;;-1:-1:-1;;;;;36416:21:0;;36389:7;36416:21;;;:12;:21;;;;;;36389:7;;36416:43;;:21;:25;:43::i;18630:126::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;18711:6:::1;::::0;18692:26:::1;::::0;18711:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;18711:6:0::1;::::0;18692:26:::1;::::0;;;::::1;18729:6;:19:::0;;-1:-1:-1;;;;;;18729:19:0::1;::::0;;18630:126::o;35058:79::-;35117:4;;;;;;;;;-1:-1:-1;;;;;35117:4:0;-1:-1:-1;;;;;35100:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35058:79::o;20937:35::-;;;-1:-1:-1;;;;;20937:35:0;;:::o;34965:85::-;35036:6;;-1:-1:-1;;;35036:6:0;;;;35035:7;;34965:85::o;35744:101::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;-1:-1:-1;;;;;35811:19:0::1;;::::0;;;:12:::1;:19;::::0;;;;:26;;-1:-1:-1;;35811:26:0::1;35833:4;35811:26;::::0;;35744:101::o;18365:79::-;18430:6;;;;;-1:-1:-1;;;;;18430:6:0;;18365:79::o;18530:92::-;18608:6;;;;;-1:-1:-1;;;;;18608:6:0;18594:10;:20;;18530:92::o;19510:87::-;19582:7;19575:14;;;;;;;;-1:-1:-1;;19575:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19549:13;;19575:14;;19582:7;;19575:14;;19582:7;19575:14;;;;;;;;;;;;;;;;;;;;;;;;20322:32;;;;:::o;21604:36::-;;;;:::o;21524:35::-;;;;:::o;34578:168::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;34667:6:::1;34661:3;:12;34653:54;;;::::0;;-1:-1:-1;;;34653:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;34718:14;:20:::0;34578:168::o;21019:26::-;;;-1:-1:-1;;;;;21019:26:0;;:::o;32660:588::-;32816:10;32757:4;32798:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;32798:38:0;;;;;;;;;;32851:27;;;32847:237;;32913:10;32936:1;32895:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;32895:38:0;;;;;;;;;:42;32847:237;;;33011:61;:8;33042:15;33011:12;:61::i;:::-;32988:10;32970:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;32970:38:0;;;;;;;;;:102;32847:237;33122:10;33169:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;33099:119:0;;33169:38;;;;;;;;;;;33099:119;;;;;;;;;33122:10;33099:119;;;;;;;;;;;-1:-1:-1;33236:4:0;;32660:588;-1:-1:-1;;;32660:588:0:o;21130:19::-;;;-1:-1:-1;;;;;21130:19:0;;:::o;24631:199::-;24742:4;24724:2;-1:-1:-1;;;;;20036:18:0;;20028:27;;;;;;24764:36:::1;24778:10;24790:2;24794:5;24764:13;:36::i;:::-;-1:-1:-1::0;24818:4:0::1;::::0;24631:199;-1:-1:-1;;;;24631:199:0:o;21458:23::-;;;-1:-1:-1;;;21458:23:0;;;;;:::o;30563:570::-;21213:6;:13;;-1:-1:-1;;;;21213:13:0;-1:-1:-1;;;21213:13:0;;;18492:9:::1;:7;:9::i;:::-;18484:18;;;::::0;::::1;;30692:16:::2;::::0;30681:4:::2;30637:20;30660:27:::0;;;:12:::2;:27;::::0;;;;;30637:20;;30660:49:::2;::::0;:27;:31:::2;:49::i;:::-;30637:72;;30744:1;30729:12;:16;30720:84;;;;-1:-1:-1::0;;;30720:84:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30839:16;::::0;;30853:1:::2;30839:16:::0;;;30815:21:::2;30839:16:::0;;::::2;::::0;;30815:21;30839:16:::2;::::0;::::2;::::0;;::::2;::::0;::::2;;::::0;-1:-1:-1;30839:16:0::2;30815:40;;30884:4;30866;30871:1;30866:7;;;;;;;;-1:-1:-1::0;;;;;30866:23:0;;::::2;:7;::::0;;::::2;::::0;;;;;;:23;;;;30910:6:::2;::::0;:13:::2;::::0;;-1:-1:-1;;;30910:13:0;;;;:6;;;::::2;::::0;:11:::2;::::0;:13:::2;::::0;;::::2;::::0;30866:7;;30910:13;;;;;:6;:13;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;30910:13:0;30900:7;;:4;;30905:1:::2;::::0;30900:7;::::2;;;;;-1:-1:-1::0;;;;;30900:23:0;;::::2;:7;::::0;;::::2;::::0;;;;;;:23;;;;30934:6:::2;::::0;31068:16:::2;::::0;30934:191:::2;::::0;-1:-1:-1;;;30934:191:0;;::::2;::::0;::::2;::::0;;;:6:::2;:191:::0;;;;;;31068:16;;::::2;30934:191:::0;;;;;;31099:15:::2;30934:191:::0;;;;;;;;;;;;;;;;;;;;;:6;;;::::2;::::0;:57:::2;::::0;31006:12;;31049:4;;31068:16;;31099:15;;30934:191;;;;;::::2;::::0;::::2;::::0;;;:6;:191:::2;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;21249:6:0;:14;;-1:-1:-1;;;;21249:14:0;;;-1:-1:-1;;;;30563:570:0:o;20815:36::-;;;-1:-1:-1;;;;;20815:36:0;;:::o;20361:31::-;;;;:::o;32214:252::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;32288:5:::1;32285:174;;;32310:17;:25:::0;;-1:-1:-1;;;;32310:25:0::1;-1:-1:-1::0;;;32310:25:0;::::1;;;;::::0;;32374:15:::1;32350:21;:39:::0;32285:174:::1;;;32422:17;:25:::0;;-1:-1:-1;;;;32422:25:0::1;-1:-1:-1::0;;;32422:25:0;::::1;;;;::::0;;32285:174:::1;32214:252:::0;:::o;33907:113::-;-1:-1:-1;;;;;33993:19:0;33969:4;33993:19;;;:12;:19;;;;;;;;;33907:113::o;35461:275::-;35619:16;;35609:4;;-1:-1:-1;;;;;35609:4:0;35544:7;35596:18;;;:12;:18;;;;;;35544:7;;;;35596:40;;:22;:40::i;:::-;35569:67;;35663:65;35705:22;:20;:22::i;:::-;35663:37;35676:23;:16;35697:1;35676:20;:23::i;:::-;35663:8;;:12;:37::i;:65::-;35647:81;35461:275;-1:-1:-1;;;35461:275:0:o;35145:308::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;35315:21:::1;:46:::0;;-1:-1:-1;;;;;35315:46:0;;::::1;-1:-1:-1::0;;;;;;35315:46:0;;::::1;;::::0;;;35372:16:::1;:36:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;35419:11:::1;:26:::0;;;;;::::1;::::0;::::1;;::::0;;35145:308::o;20475:34::-;;;;:::o;32474:178::-;-1:-1:-1;;;;;32610:25:0;;;32578:7;32610:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;32474:178::o;31976:230::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;32045:5:::1;32041:158;;;32067:11;:19:::0;;-1:-1:-1;;;;32067:19:0::1;-1:-1:-1::0;;;32067:19:0;::::1;;;;::::0;;32120:15:::1;32101:16;:34:::0;32041:158:::1;;;32168:11;:19:::0;;;::::1;;-1:-1:-1::0;;;32168:19:0::1;-1:-1:-1::0;;;;32168:19:0;;::::1;;::::0;;31976:230;:::o;18764:109::-;18492:9;:7;:9::i;:::-;18484:18;;;;;;18837:28:::1;18856:8;18837:18;:28::i;34028:352::-:0;18492:9;:7;:9::i;:::-;18484:18;;;;;;-1:-1:-1;;;;;34124:23:0;::::1;34142:4;34124:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;34161:4:0::1;::::0;-1:-1:-1;;;;;34151:14:0;;::::1;34161:4:::0;::::1;34151:14;;34124:41;34116:50;;;::::0;::::1;;-1:-1:-1::0;;;;;34177:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;34177:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;34223:150:::1;;34250:11;::::0;:31:::1;::::0;;-1:-1:-1;;;34250:31:0;;-1:-1:-1;;;;;34250:31:0;;::::1;;::::0;::::1;::::0;:11:::1;:31:::0;;;;;;;;:11;::::1;::::0;:20:::1;::::0;:31;;;;;:11;;:31;;;;;;:11;;:31;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34223:150;;;34314:11;::::0;-1:-1:-1;;;;;34314:11:0::1;:20;34335:6:::0;34343:17:::1;34335:6:::0;34343:9:::1;:17::i;:::-;34314:47;;;;;;;;;;;;;-1:-1:-1::0;;;;;34314:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;34223:150;34028:352:::0;;:::o;21089:32::-;;;-1:-1:-1;;;;;21089:32:0;;:::o;21857:41::-;;;;;;;;;;;;;;;:::o;2007:181::-;2065:7;2097:5;;;2121:6;;;;2113:46;;;;;-1:-1:-1;;;2113:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2832:132;2890:7;2917:39;2921:1;2924;2917:39;;;;;;;;;;;;;;;;;:3;:39::i;2340:226::-;2460:7;2496:12;2488:6;;;;2480:29;;;;-1:-1:-1;;;2480:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2532:5:0;;;2340:226::o;25646:1357::-;-1:-1:-1;;;;;25800:17:0;;25772:4;25800:17;;;:9;:17;;;;;;;;25799:18;:43;;;;-1:-1:-1;;;;;;25822:20:0;;;;;;:9;:20;;;;;;;;25821:21;25799:43;25791:68;;;;;-1:-1:-1;;;25791:68:0;;;;;;;;;;;;-1:-1:-1;;;25791:68:0;;;;;;;;;;;;;;;25876:6;;-1:-1:-1;;;25876:6:0;;;;25872:87;;;25906:41;25921:6;25929:9;25940:6;25906:14;:41::i;:::-;25899:48;;;;25872:87;25973:14;:12;:14::i;:::-;25969:55;;;26004:8;:6;:8::i;:::-;26040:20;:18;:20::i;:::-;26036:67;;;26077:14;:12;:14::i;:::-;26119:16;:14;:16::i;:::-;26115:59;;;26152:10;:8;:10::i;:::-;26186:17;26206:28;26217:16;;26206:6;:10;;:28;;;;:::i;:::-;-1:-1:-1;;;;;26268:20:0;;;;;;:12;:20;;;;;;26186:48;;-1:-1:-1;26268:35:0;;26186:48;26268:24;:35::i;:::-;-1:-1:-1;;;;;26245:20:0;;;;;;:12;:20;;;;;:58;;;;26342:32;26258:6;26364:9;26342:13;:32::i;:::-;:102;;26435:9;26342:102;;;26386:37;26394:6;26402:9;26413;26386:7;:37::i;:::-;-1:-1:-1;;;;;26481:23:0;;;;;;:12;:23;;;;;;26314:130;;-1:-1:-1;26481:70:0;;26314:130;26481:27;:70::i;:::-;-1:-1:-1;;;;;26455:23:0;;;;;;;:12;:23;;;;;;;;:96;;;;26568:24;;;;;:16;:24;;;;;;;26564:96;;26599:11;;-1:-1:-1;;;;;26599:11:0;:20;26620:6;26628:17;26620:6;26628:9;:17::i;:::-;26599:47;;;;;;;;;;;;;-1:-1:-1;;;;;26599:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26595:63;;-1:-1:-1;;;;;26674:27:0;;;;;;:16;:27;;;;;;;;26670:105;;26708:11;;-1:-1:-1;;;;;26708:11:0;:20;26729:9;26740:20;26729:9;26740;:20::i;:::-;26708:53;;;;;;;;;;;;;-1:-1:-1;;;;;26708:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26704:69;;26791:11;;26811:14;;26791:35;;;-1:-1:-1;;;;;;26791:35:0;;;;;;;;;;-1:-1:-1;;;;;26791:11:0;;;;:19;;:35;;;;;:11;;:35;;;;;;;;:11;;:35;;;;;;;;;;;;;;;;;;;;;;;;;26787:51;26899:9;-1:-1:-1;;;;;26855:118:0;26878:6;-1:-1:-1;;;;;26855:118:0;;26923:39;26945:16;;26923:17;:21;;:39;;;;:::i;:::-;26855:118;;;;;;;;;;;;;;;-1:-1:-1;26991:4:0;;25646:1357;-1:-1:-1;;;;;25646:1357:0:o;2196:136::-;2254:7;2281:43;2285:1;2288;2281:43;;;;;;;;;;;;;;;;;:3;:43::i;36475:165::-;36588:17;36624:8;;;36475:165::o;2574:250::-;2632:7;2656:6;2652:47;;-1:-1:-1;2686:1:0;2679:8;;2652:47;2723:5;;;2727:1;2723;:5;:1;2747:5;;;;;:10;2739:56;;;;-1:-1:-1;;;2739:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18881:187;-1:-1:-1;;;;;18955:22:0;;18947:31;;;;;;19015:6;;18994:38;;-1:-1:-1;;;;;18994:38:0;;;;19015:6;;;;;18994:38;;;;;19043:6;:17;;-1:-1:-1;;;;;19043:17:0;;;;;-1:-1:-1;;;;;;19043:17:0;;;;;;;;;18881:187::o;2972:225::-;3092:7;3127:12;3120:5;3112:28;;;;-1:-1:-1;;;3112:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3151:9;3167:1;3163;:5;;;;;;;2972:225;-1:-1:-1;;;;;2972:225:0:o;25299:339::-;25417:4;25434:17;25454:28;25465:16;;25454:6;:10;;:28;;;;:::i;:::-;-1:-1:-1;;;;;25514:18:0;;;;;;:12;:18;;;;;;25434:48;;-1:-1:-1;25514:33:0;;25434:48;25514:22;:33::i;:::-;-1:-1:-1;;;;;25493:18:0;;;;;;;:12;:18;;;;;;:54;;;;25577:16;;;;;;;:31;;25598:9;25577:20;:31::i;:::-;-1:-1:-1;;;;;25558:16:0;;;;;;:12;:16;;;;;:50;-1:-1:-1;25626:4:0;;-1:-1:-1;25299:339:0;;;;;:::o;31342:254::-;31422:11;;31389:4;;-1:-1:-1;;;31422:11:0;;;;:51;;;;-1:-1:-1;31447:12:0;;21423:26;-1:-1:-1;31422:51:0;:82;;;;-1:-1:-1;31500:4:0;;-1:-1:-1;;;;;31500:4:0;31486:10;:18;;31422:82;:103;;;;-1:-1:-1;31519:6:0;;-1:-1:-1;;;31519:6:0;;;;31518:7;31422:103;:166;;;;-1:-1:-1;;31558:16:0;;31577:10;31558:29;31538:15;:50;;;31342:254::o;23522:1101::-;23567:6;;-1:-1:-1;;;23567:6:0;;;;23562:21;;;23576:7;;23562:21;23668:20;;23737:16;;23593:18;;23650:15;:38;;;;23719:34;;23593:18;23780:25;23719:34;23794:10;23780:13;:25::i;:::-;23764:41;-1:-1:-1;23816:13:0;23832;23764:41;23842:2;23832:9;:13::i;:::-;23816:29;;23883:8;23862:17;:30;23858:351;;;23922:4;23909:17;;23858:351;;;23970:8;23948:17;:31;23944:265;;24009:3;23996:16;;23944:265;;;24056:20;24034:17;:43;24030:179;;24107:2;24094:15;;24030:179;;;24153:12;24131:17;:35;24127:82;;24196:1;24183:14;;24127:82;24226:9;24221:182;24245:5;24241:1;:9;24221:182;;;24287:104;24373:17;24287:67;24318:35;24373:17;24342:10;24318:23;:35::i;:::-;24287:12;;;:30;:67::i;:104::-;24272:12;:119;24252:3;;24221:182;;;-1:-1:-1;24449:12:0;;24434:28;;-1:-1:-1;;21322:54:0;24434:14;:28::i;:::-;24415:16;:47;24492:43;24513:21;:5;24523:10;24513:9;:21::i;:::-;24492:16;;;:20;:43::i;:::-;24473:16;:62;24548:12;;:19;;;-1:-1:-1;;;;;;24548:19:0;;;;-1:-1:-1;;;;;24548:12:0;;;;:17;;:19;;;;;:12;;:19;;;;;;;;:12;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24602:12:0;;24585:30;;;;;;;24595:5;;-1:-1:-1;24585:30:0;;-1:-1:-1;24585:30:0;;;;;;;;23522:1101;;;;;;:::o;31604:226::-;31690:17;;31657:4;;-1:-1:-1;;;31690:17:0;;;;:37;;;;-1:-1:-1;31721:6:0;;-1:-1:-1;;;31721:6:0;;;;31720:7;31690:37;:68;;;;-1:-1:-1;31754:4:0;;-1:-1:-1;;;;;31754:4:0;31740:10;:18;;31690:68;:132;;;;-1:-1:-1;;31791:21:0;;31815:6;31791:30;31771:15;:51;;;31604:226::o;28066:1405::-;21213:6;:13;;-1:-1:-1;;;;21213:13:0;-1:-1:-1;;;21213:13:0;;;28203:16:::1;::::0;28162:21:::1;::::0;-1:-1:-1;;;;;28162:21:0::1;21213:13:::0;28149:35;;;:12:::1;:35;::::0;;;;;21213:13;;28149:81:::1;::::0;:35;:39:::1;:81::i;:::-;28330:21;::::0;-1:-1:-1;;;;;28330:21:0::1;28317:35;::::0;;;:12:::1;:35;::::0;;;;;;28292:4:::1;28271:27:::0;;;;;28119:111;;-1:-1:-1;28271:92:0::1;::::0;:27;:31:::1;:92::i;:::-;28262:4;28241:27;::::0;;;:12:::1;:27;::::0;;;;;:122;;;;28387:21:::1;::::0;-1:-1:-1;;;;;28387:21:0::1;28374:35:::0;;;;;:39;;;28450:26:::1;:19:::0;28474:1:::1;28450:23;:26::i;:::-;28424:52:::0;-1:-1:-1;28487:20:0::1;28510:40;:19:::0;28424:52;28510:23:::1;:40::i;:::-;28487:63:::0;-1:-1:-1;28567:17:0;28563:57:::1;;28602:7;;;;;28563:57;28654:16;::::0;;28668:1:::1;28654:16:::0;;;28630:21:::1;28654:16:::0;;::::1;::::0;;28630:21;28654:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28654:16:0::1;28630:40;;28699:4;28681;28686:1;28681:7;;;;;;;;-1:-1:-1::0;;;;;28681:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;28725:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;28725:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;28681:7;;28725:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;28725:13:0;28715:7;;:4;;28720:1:::1;::::0;28715:7;::::1;;;;;-1:-1:-1::0;;;;;28715:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;28811:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;28811:188:0;;::::1;::::0;::::1;::::0;;;28751:21:::1;28811:188:::0;;;;;;28953:4:::1;28811:188:::0;;;;;;28973:15:::1;28811:188:::0;;;;;;;;;;;;;;;;;;;;;28775:21:::1;::::0;28811:6;;;::::1;::::0;:57:::1;::::0;28883:12;;28751:21;;28926:4;;28811:188;;;;;;;;;;::::1;::::0;::::1;::::0;;;28751:21;28811:188:::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29012:26;29041:40;29067:13;29041:21;:25;;:40;;;;:::i;:::-;29012:69;;29116:1;29098:15;:19;:43;;;;;29140:1;29119:18;:22;29098:43;29094:320;;;29158:6;::::0;29332:21:::1;::::0;29158:244:::1;::::0;;-1:-1:-1;;;29158:244:0;;29234:4:::1;29158:244;::::0;::::1;::::0;;;;;;;:6:::1;:244:::0;;;;;;;;;;-1:-1:-1;;;;;29332:21:0;;::::1;29158:244:::0;;;;29372:15:::1;29158:244:::0;;;;;;:6;;;::::1;::::0;:22:::1;::::0;29188:18;;29158:244;;;;;::::1;::::0;;;;;;;;;29188:18;29158:6;:244;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;29094:320:0::1;-1:-1:-1::0;;29448:15:0::1;29424:21;:39:::0;-1:-1:-1;;;;21237:1:0::1;21249:6:::0;:14;;-1:-1:-1;;;;21249:14:0;;;28066:1405::o;31838:130::-;31921:6;;31887:4;;-1:-1:-1;;;31921:6:0;;;;31920:7;:38;;;;-1:-1:-1;;31954:4:0;;-1:-1:-1;;;;;31954:4:0;31940:10;:18;;;31838:130::o;29479:1076::-;21213:6;:13;;-1:-1:-1;;;;21213:13:0;-1:-1:-1;;;21213:13:0;;;29585:16:::1;::::0;29574:4:::1;21213:13:::0;29553:27;;;:12:::1;:27;::::0;;;;;21213:13;;29553:49:::1;::::0;:27;:31:::1;:49::i;:::-;29530:72:::0;-1:-1:-1;29619:17:0;29615:56:::1;;29653:7;;;29615:56;29763:16;::::0;;29777:1:::1;29763:16:::0;;;29739:21:::1;29763:16:::0;;::::1;::::0;;29707:21:::1;::::0;29739;;29763:16;29777:1;29763:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;29763:16:0::1;29739:40;;29808:4;29790;29795:1;29790:7;;;;;;;;-1:-1:-1::0;;;;;29790:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;29834:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;29834:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;29790:7;;29834:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29834:13:0;29824:7;;:4;;29829:1:::1;::::0;29824:7;::::1;;;;;;;;;;:23;-1:-1:-1::0;;;;;29824:23:0::1;;;-1:-1:-1::0;;;;;29824:23:0::1;;;::::0;::::1;29862:6;;;;;;;;;-1:-1:-1::0;;;;;29862:6:0::1;-1:-1:-1::0;;;;;29862:57:0::1;;29934:12;29961:1;29977:4;30004;30024:15;29862:188;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;29862:188:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30063:33;30099:64;30139:13;30099:21;:25;;:64;;;;:::i;:::-;30203:16;::::0;30320:15:::1;::::0;30304:11:::1;::::0;30063:100;;-1:-1:-1;30177:12:0::1;::::0;-1:-1:-1;;;;;30203:16:0;;::::1;::::0;30243:104:::1;::::0;30304:32:::1;::::0;:11;:15:::1;:32::i;:::-;30273:11;::::0;30243:42:::1;::::0;:25;;:29:::1;:42::i;:104::-;30195:188;::::0;30363:5:::1;::::0;30195:188;::::1;::::0;;;;;30363:5;30195:188:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;30400:11:0::1;::::0;30505:15:::1;::::0;30489:11:::1;::::0;30176:207;;-1:-1:-1;;;;;;30400:11:0;;::::1;::::0;:19:::1;::::0;30438:84:::1;::::0;30489:32:::1;::::0;:15:::1;:32::i;:::-;30468:15;::::0;30438:46:::1;::::0;:25;;:29:::1;:46::i;:84::-;30400:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;30396:152:::0;21237:1:::1;;;;;21249:6:::0;:14;;-1:-1:-1;;;;21249:14:0;;;29479:1076::o;31141:193::-;31267:4;;31228;;-1:-1:-1;;;;;31267:12:0;;;:4;;:12;;:26;;-1:-1:-1;31283:4:0;;-1:-1:-1;;;;;31283:10:0;;;:4;;:10;31267:26;31266:60;;;;-1:-1:-1;;;;;;;;31308:18:0;;;;;:12;:18;;;;;;;;31307:19;;31141:193::o;27011:1047::-;27175:8;;27217:11;;27258:4;;27135:7;;27175:8;27217:11;-1:-1:-1;;;;;27245:17:0;;;27258:4;;27245:17;27241:137;;;27304:7;;27291:8;;:21;;:12;:21::i;:::-;27279:33;;27342:24;27358:7;;27342:11;;:15;;:24;;;;:::i;:::-;27327:39;;27241:137;27390:17;27410:44;27444:9;27410:29;27424:14;;27410:9;:13;;:29;;;;:::i;:::-;:33;;:44::i;:::-;27390:64;;27495:104;27539:49;27573:14;;27539:29;27553:14;;27539:9;:13;;:29;;;;:::i;:49::-;27508:11;;-1:-1:-1;;;;;27508:11:0;27495:25;;;;:12;:25;;;;;;;:29;:104::i;:::-;27480:11;;-1:-1:-1;;;;;27480:11:0;27467:25;;;;:12;:25;;;;;:132;27737:15;;27640:125;;27686:68;;27720:33;;:12;;:16;:33::i;:::-;27700:14;;27686:29;;:9;;:13;:29::i;:68::-;27661:4;27640:27;;;;:12;:27;;;;;;;:31;:125::i;:::-;27631:4;27610:27;;;;:12;:27;;;;;:155;27902:12;;27882:14;;27814:112;;27868:47;;:29;;:9;;:13;:29::i;:47::-;27827:21;;-1:-1:-1;;;;;27827:21:0;27814:35;;;;:12;:35;;;;;;;:39;:112::i;:::-;27789:21;;-1:-1:-1;;;;;27789:21:0;;;27776:35;;;;:12;:35;;;;;:150;;;;27990:16;;27969:4;;27944:64;;;;;27976:31;;:9;;:13;:31::i;:::-;27944:64;;;;;;;;;;;;;;;28026:24;:9;28040;28026:13;:24::i;:::-;28019:31;27011:1047;-1:-1:-1;;;;;;;27011:1047:0:o

Swarm Source

ipfs://e9eac1905e34d948a92f80e43c8372f86dab39e298b571d9056f5a3d04d7204d
Loading