ETH Price: $2,868.85 (-9.78%)
Gas: 13 Gwei

Token

Bear Bucks (BEAR)
 

Overview

Max Total Supply

1,000,000,000 BEAR

Holders

222 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
593,780.528949797 BEAR

Value
$0.00
0xeca56a30a74f88dea76a3bef178bd33eeea86ef1
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Bearbucks is a farming as a service (FAAS) erc20 with high stablecoin yield strategies. Reflections are paid to holders as stablecoin claims, to the treasury to seed yield generation, and to liquidity and operations.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BEAR

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-06
*/

/**
 * BEAR BUCKS                   BEARBUCKS.FINANCE                     T.ME/BEARBUCKS
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.0;

/**
 * SAFEMATH LIBRARY
 */
library SafeMath {
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

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

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

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

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

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

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

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

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

    event OwnershipTransferred(address owner);
}

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

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
}

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

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

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

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

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

interface IDividendDistributor {
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
}

contract DividendDistributor is IDividendDistributor, Auth {
    using SafeMath for uint256;

    address _token;

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

    IERC20 BASE = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IDEXRouter router;

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

    mapping (address => uint256) public totalRewardsDistributed;
    mapping (address => mapping (address => uint256)) public totalRewardsToUser;

    mapping (address => mapping (address => bool)) public canClaimDividendOfUser;

    mapping (address => bool) public availableRewards;
    mapping (address => address) public pathRewards;

    mapping (address => bool) public allowed;
    mapping (address => address) public choice;

    mapping (address => Share) public shares;

    //bool public blacklistMode = true;

    address public USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
    address public constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    address public constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed; // to be shown in UI
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

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

    constructor (
        address _router,
        address _owner
    ) Auth(_owner) {
        router = _router != address(0) ? IDEXRouter(_router) : IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _token = msg.sender;

        allowed[USDT] = true;
        allowed[USDC] = true;
        allowed[DAI] = true;

        IERC20(BASE).approve(_router, 2**256 - 1);
    }

    receive() external payable {}

    function getTotalRewards(address token) public view returns (uint256) {
        return totalRewardsDistributed[token];
    }

    function getTotalRewardsToUser(address token, address user) public view returns (uint256) {
        return totalRewardsToUser[token][user];
    }

    function checkCanClaimDividendOfUser(address user, address claimer) public view returns (bool) {
        return canClaimDividendOfUser[user][claimer];
    }

    function setReward(
        address _reward,
        bool status
    ) public onlyOwner {
        availableRewards[_reward] = status;
    }

    function setPathReward(
        address _reward,
        address _path
    ) public onlyOwner {
        pathRewards[_reward] = _path;
    }

    function getPathReward(
        address _reward
    ) public view returns (address) {
        return pathRewards[_reward];
    }

    function changeRouterVersion(
        address _router
    ) external onlyOwner {
        IDEXRouter _uniswapV2Router = IDEXRouter(_router);
        router = _uniswapV2Router;
    }

    function setShare(
        address shareholder,
        uint256 amount
    ) external override onlyToken {

        if (shares[shareholder].amount > 0) {
            if (allowed[choice[shareholder]]) {
                distributeDividend(shareholder, choice[shareholder]);
            } else {
                distributeDividend(shareholder, USDT);
            }
        }

        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 amount = msg.value;

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

    function distributeDividend(
        address shareholder,
        address rewardAddress
    ) internal {
        require(allowed[rewardAddress], "Invalid reward address!");

        if (shares[shareholder].amount == 0) {
            return;
        }

        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);

            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);

            if (rewardAddress == address(BASE)) {

                payable(shareholder).transfer(amount);
                totalRewardsDistributed[rewardAddress] = totalRewardsDistributed[rewardAddress].add(amount);  
                totalRewardsToUser[rewardAddress][shareholder] = totalRewardsToUser[rewardAddress][shareholder].add(amount);

            } else {

                IERC20 rewardToken = IERC20(rewardAddress);

                uint256 beforeBalance = rewardToken.balanceOf(shareholder);

                if (pathRewards[rewardAddress] == address(0)) {
                    address[] memory path = new address[](2);
                    path[0] = address(BASE);
                    path[1] = rewardAddress;

                    router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
                        0,
                        path,
                        shareholder,
                        block.timestamp
                    );                 
                } else {
                    address[] memory path = new address[](3);
                    path[0] = address(BASE);
                    path[1] = pathRewards[rewardAddress];
                    path[2] = rewardAddress;

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

                }

                uint256 afterBalance = rewardToken.balanceOf(shareholder);
                totalRewardsDistributed[rewardAddress] = totalRewardsDistributed[rewardAddress].add(afterBalance.sub(beforeBalance));
                totalRewardsToUser[rewardAddress][shareholder] = totalRewardsToUser[rewardAddress][shareholder].add(afterBalance.sub(beforeBalance));

            }

        }
    }

    function makeApprove(
        address token,
        address spender,
        uint256 amount
    ) public onlyOwner {
        IERC20(token).approve(spender, amount);
    }

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

    function setChoice(
        address _choice
    ) external {
        require(allowed[_choice]);
        choice[msg.sender] = _choice;
    }

    function toggleChoice(
        address _choice
    ) public onlyOwner {
        allowed[_choice] = !allowed[_choice];
    }

    function getChoice(
        address _choice
    ) public view returns (bool) {
        return allowed[_choice];
    }

    function claimDividendOfUser(
        address user,
        address rewardAddress
    ) external {
        require(canClaimDividendOfUser[user][msg.sender], "You can't do that");

        distributeDividend(user, rewardAddress);
    }

    function setClaimDividendOfUser(
        address claimer,
        bool status
    ) external {
        canClaimDividendOfUser[msg.sender][claimer] = status;
    }

    function getUnpaidEarnings(
        address shareholder
    ) public view returns (uint256) {
        if (shares[shareholder].amount == 0) {
            return 0;
        }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if (shareholderTotalDividends <= shareholderTotalExcluded) {
            return 0;
        }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(
        uint256 share
    ) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(
        address shareholder
    ) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(
        address shareholder
    ) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1];
        shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }

    function Sweep() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function changeBASE(
        address _BASE
    ) external onlyOwner {
        BASE = IERC20(_BASE);
    }

    function changeWETH(
        address _WETH
    ) external onlyOwner {
        WETH = _WETH;
    }

    function changeUSDT(
        address _USDT
    ) external onlyOwner {
        USDT = _USDT;
    }

    function newApproval(
        address token,
        address _contract
    ) external onlyOwner {
        IERC20(token).approve(_contract, 2**256 - 1);
    }

    function transferForeignToken(
        address token,
        address _to
    ) external onlyOwner returns (bool _sent) {
        require(token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(token).balanceOf(address(this));
        _sent = IERC20(token).transfer(_to, _contractBalance);
    }

}

contract BEAR is IERC20, Auth {
    using SafeMath for uint256;

    uint256 public constant MASK = type(uint128).max;
    address BASE = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address DEAD_NON_CHECKSUM = 0x000000000000000000000000000000000000dEaD;

    string constant _name = "Bear Bucks";
    string constant _symbol = "BEAR";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1000000000 * (10 ** _decimals);
    uint256 public _maxWallet = _totalSupply.div(50);

    uint256 public minAmountToTriggerSwap = 0;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;

    mapping (address => bool) public isDisabledExempt;
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isDividendExempt;
    mapping (address => bool) public _isFree;

    bool public isFeeOnTransferEnabled = false;

    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 buyLiquidityFee = 0;
    uint256 buyReflectionFee = 300;
    uint256 buyOperationsFee = 700;
    uint256 buyTreasuryFee = 0;
    uint256 buyTotalFee = 1000;

    uint256 sellLiquidityFee = 250;
    uint256 sellReflectionFee = 1750;
    uint256 sellOperationsFee = 0;
    uint256 sellTreasuryFee = 0;
    uint256 sellTotalFee = 2000;

    uint256 feeDenominator = 10000;

    uint256 _liquidityTokensToSwap;
    uint256 _reflectionTokensToSwap;
    uint256 _operationsTokensToSwap;
    uint256 _treasuryTokensToSwap;

    address public autoLiquidityReceiver = 0x2FFBfc2715037A9Af201aFeF7e998912cC2b048c;
    address public operationsFeeReceiver = 0x6F33931D8F66e52f44acd3De3F870191699E98a2;
    address public treasuryFeeReceiver = msg.sender;

    IDEXRouter public router;
    address public pair;

    DividendDistributor distributor;
    address public distributorAddress;

    bool public swapEnabled = true;
    uint256 private swapMinimumTokens = _totalSupply / 5000; // 0.0025%

    bool public tradingEnabled = false;

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

    constructor () Auth(msg.sender) {
        address _router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        router = IDEXRouter(_router);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = _totalSupply;
        WETH = router.WETH();
        distributor = new DividendDistributor(_router, msg.sender);
        distributorAddress = address(distributor);

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

        autoLiquidityReceiver = msg.sender;

        _setAutomatedMarketMakerPair(pair, true);

        approve(_router, _totalSupply);
        approve(address(pair), _totalSupply);
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }
    

    receive() external payable {}

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

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

    function approveMax(
        address spender
    ) external returns (bool) {
        return approve(spender, _totalSupply);
    }

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

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

        return _transferFrom(sender, recipient, amount);
    }

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

        require(tradingEnabled || isDisabledExempt[sender], "Trading is currently disabled");

        address routerAddress = address(router);
        bool isSell = automatedMarketMakerPairs[recipient] || recipient == routerAddress;

        if (!isSell && !_isFree[recipient]) {
            require((_balances[recipient] + amount) < _maxWallet, "Max wallet has been triggered");
        }

        if (isSell && amount >= minAmountToTriggerSwap) {
            if (shouldSwapBack()) {
                swapBack();
            }
        }

        _balances[sender] = _balances[sender].sub(amount, "Insufficient balance");

        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;

        _balances[recipient] = _balances[recipient].add(amountReceived);

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

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

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

    function shouldTakeFee(
        address sender,
        address recipient
    ) internal view returns (bool) {

        if (isFeeOnTransferEnabled) {
            return !isFeeExempt[sender] && !isFeeExempt[recipient];
        } else {
            address routerAddress = address(router);
            bool isBuy = automatedMarketMakerPairs[sender] || sender == routerAddress;
            bool isSell =  automatedMarketMakerPairs[recipient]|| recipient == routerAddress;

            if (isBuy || isSell) {
                return !isFeeExempt[sender] && !isFeeExempt[recipient];
            } else {
                return false;
            }
        }

    }

    function getTotalFee(
        bool selling
    ) public view returns (uint256) {
        if (selling) {
            return sellTotalFee;
        }
        return buyTotalFee;
    }

    function takeFee(
        address sender,
        address receiver,
        uint256 amount
    ) internal returns (uint256) {
        address routerAddress = address(router);
        bool isSell = automatedMarketMakerPairs[receiver] || receiver == routerAddress;

        uint256 totalFee = getTotalFee(isSell);
        uint256 feeAmount = amount.mul(totalFee).div(feeDenominator);

        if (totalFee > 0) {
            if (isSell) {
                if (sellLiquidityFee > 0) {
                    _liquidityTokensToSwap += feeAmount * sellLiquidityFee / totalFee;
                }
                if (sellOperationsFee > 0) {
                    _operationsTokensToSwap += feeAmount * sellOperationsFee / totalFee;
                }
                if (sellReflectionFee > 0) {
                    _reflectionTokensToSwap += feeAmount * sellReflectionFee / totalFee;
                }
                if (sellTreasuryFee > 0) {
                    _treasuryTokensToSwap += feeAmount * sellTreasuryFee / totalFee;
                }
            } else {
                if (buyLiquidityFee > 0) {
                    _liquidityTokensToSwap += feeAmount * buyLiquidityFee / totalFee;
                }
                if (buyOperationsFee > 0) {
                    _operationsTokensToSwap += feeAmount * buyOperationsFee / totalFee;
                }
                if (buyReflectionFee > 0) {
                    _reflectionTokensToSwap += feeAmount * buyReflectionFee / totalFee;
                }
                if (buyTreasuryFee > 0) {
                    _treasuryTokensToSwap += feeAmount * buyTreasuryFee / totalFee;
                }
            }
        }

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

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return !automatedMarketMakerPairs[msg.sender] && !inSwap && swapEnabled && _balances[address(this)] >= swapMinimumTokens;
    }

    function setAutomatedMarketMakerPair(
        address _pair,
        bool value
    ) public onlyOwner {
        _setAutomatedMarketMakerPair(_pair, value);
    }

    function _setAutomatedMarketMakerPair(
        address _pair,
        bool value
    ) private {
        automatedMarketMakerPairs[_pair] = value;
        if (value) {
            isDividendExempt[_pair] = true;
        }
        if (!value) {
            isDividendExempt[_pair] = false;
        }
    }

    function swapBack() internal swapping {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap.add(_operationsTokensToSwap).add(_reflectionTokensToSwap).add(_treasuryTokensToSwap);
        
        uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2);
        uint256 amountToSwap = contractBalance.sub(tokensForLiquidity);

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

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

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

        uint256 amountETHLiquidity = amountETH.mul(_liquidityTokensToSwap).div(totalTokensToSwap).div(2);
        uint256 amountETHReflection = amountETH.mul(_reflectionTokensToSwap).div(totalTokensToSwap);
        uint256 amountETHOperations = amountETH.mul(_operationsTokensToSwap).div(totalTokensToSwap);
        uint256 amountETHTreasury = amountETH.mul(_treasuryTokensToSwap).div(totalTokensToSwap);
        
        _liquidityTokensToSwap = 0;
        _operationsTokensToSwap = 0;
        _reflectionTokensToSwap = 0;
        _treasuryTokensToSwap = 0;

        if (amountETHReflection > 0) {
            try distributor.deposit{value: amountETHReflection}() {} catch {}
        }
        if (amountETHOperations > 0) {
            payable(operationsFeeReceiver).transfer(amountETHOperations);
        }
        if (amountETHTreasury > 0) {
            payable(treasuryFeeReceiver).transfer(amountETHTreasury);
        }

        if (tokensForLiquidity > 0) {
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                tokensForLiquidity,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, tokensForLiquidity);
        }
    }

    function buyTokens(
        uint256 amount,
        address to
    ) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }
    
    function Sweep() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function changeBASE(
        address _BASE
    ) external onlyOwner {
        BASE = _BASE;
    }

    function changeWETH(
        address _WETH
    ) external onlyOwner {
        WETH = _WETH;
    }

    function changeRouterPairDistributor(
        address _router,
        bool _setWETH
    ) external onlyOwner {
        router = IDEXRouter(_router);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = _totalSupply;
        if (_setWETH) {
            WETH = router.WETH();
        }
        distributor = new DividendDistributor(_router, msg.sender);
        distributorAddress = address(distributor);
    }

    function transferForeignToken(
        address _token,
        address _to
    ) external onlyOwner returns (bool _sent) {
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
    }

    function setMaxWallet(
        uint256 amount
    ) external authorized {
        _maxWallet = amount;
    }

    function setMinAmountToTriggerSwap(
        uint256 amount
    ) external authorized {
        minAmountToTriggerSwap = amount;
    }

    function setIsFeeOnTransferEnabled(
        bool status
    ) external authorized {
        isFeeOnTransferEnabled = status;
    }

    function setIsDividendExempt(
        address holder,
        bool exempt
    ) external authorized {
        isDividendExempt[holder] = exempt;
        if (exempt) {
            distributor.setShare(holder, 0);
        } else {
            distributor.setShare(holder, _balances[holder]);
        }
    }

    function checkIsDividendExempt(
        address holder
    ) public view returns (bool) {
        return isDividendExempt[holder];
    }

    function setIsDisabledExempt(
        address holder,
        bool exempt
    ) external authorized {
        isDisabledExempt[holder] = exempt;
    }

    function checkIsDisabledExempt(
        address holder
    ) public view returns (bool) {
        return isDisabledExempt[holder];
    }

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

    function checkIsFeeExempt(
        address holder
    ) public view returns (bool) {
        return isFeeExempt[holder];
    }

    function setFree(
        address holder
    ) public onlyOwner {
        _isFree[holder] = true;
    }
    
    function unSetFree(
        address holder
    ) public onlyOwner {
        _isFree[holder] = false;
    }

    function checkFree(
        address holder
    ) public view onlyOwner returns (bool) {
        return _isFree[holder];
    }

    function setFees(
        uint256 _buyLiquidityFee,
        uint256 _buyReflectionFee,
        uint256 _buyOperationsFee,
        uint256 _buyTreasuryFee,
        uint256 _sellLiquidityFee,
        uint256 _sellReflectionFee,
        uint256 _sellOperationsFee,
        uint256 _sellTreasuryFee,
        uint256 _feeDenominator
    ) external authorized {
        buyLiquidityFee = _buyLiquidityFee;
        buyReflectionFee = _buyReflectionFee;
        buyOperationsFee = _buyOperationsFee;
        buyTreasuryFee = _buyTreasuryFee;
        buyTotalFee = _buyLiquidityFee.add(_buyReflectionFee).add(_buyOperationsFee).add(_buyTreasuryFee);

        sellLiquidityFee = _sellLiquidityFee;
        sellReflectionFee = _sellReflectionFee;
        sellOperationsFee = _sellOperationsFee;
        sellTreasuryFee = _sellTreasuryFee;
        sellTotalFee = _sellLiquidityFee.add(_sellReflectionFee).add(_sellOperationsFee).add(_sellTreasuryFee);

        feeDenominator = _feeDenominator;
    }

    function setFeeReceivers(
        address _autoLiquidityReceiver,
        address _operationsFeeReceiver,
        address _treasuryFeeReceiver
    ) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        operationsFeeReceiver = _operationsFeeReceiver;
        treasuryFeeReceiver = _treasuryFeeReceiver;
    }

    function enableTrading() external authorized {
        if (!tradingEnabled) {
            tradingEnabled = true;
        }
    }

    function toggleTrading(
        bool _enabled
    ) external authorized {
        tradingEnabled = _enabled;
    }

    function setSwapBackSettings(
        bool _enabled,
        uint256 _amount
    ) external authorized {
        swapEnabled = _enabled;
        swapMinimumTokens = _amount;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }
    
    function changeRouterVersion(
        address _router
    ) external onlyOwner returns (address _pair) {
        IDEXRouter _uniswapV2Router = IDEXRouter(_router);

        _pair = IDEXFactory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());
        if (_pair == address(0)) {
            _pair = IDEXFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        }
        pair = _pair;

        router = _uniswapV2Router;
        _allowances[address(this)][address(router)] = _totalSupply;
    }

    event AutoLiquify(uint256 amountETH, uint256 amountBOG);
}

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":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MASK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_BASE","type":"address"}],"name":"changeBASE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"bool","name":"_setWETH","type":"bool"}],"name":"changeRouterPairDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"_pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_WETH","type":"address"}],"name":"changeWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkIsDisabledExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkIsDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkIsFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDisabledExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeOnTransferEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAmountToTriggerSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"operationsFeeReceiver","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":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_operationsFeeReceiver","type":"address"},{"internalType":"address","name":"_treasuryFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_buyOperationsFee","type":"uint256"},{"internalType":"uint256","name":"_buyTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_sellOperationsFee","type":"uint256"},{"internalType":"uint256","name":"_sellTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"setFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDisabledExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setIsFeeOnTransferEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinAmountToTriggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"toggleTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"unSetFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526002805473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031991821681179092556003805482169092179091556004805461dead9083168117909155600580548316905560068054909216179055620000696009600a620006eb565b6200007990633b9aca00620007d6565b6007556200009960326007546200052560201b62001f061790919060201c565b600855600060098190556010805460ff19169055601281905561012c6013556102bc60145560158190556103e860165560fa6017556106d66018556019819055601a556107d0601b55612710601c55602180546001600160a01b0319908116732ffbfc2715037a9af201afef7e998912cc2b048c17909155602280548216736f33931d8f66e52f44acd3de3f870191699e98a217905560238054909116331790556027805460ff60a01b1916600160a01b1790556007546200015f90611388906200067d565b6028556029805460ff191690553480156200017957600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff191690921790915560248054737a250d5630b4cf539739df2c5dacb4c659f2488d9316831790819055835163c45a015560e01b8152935192936001600160a01b039091169263c45a015592600480840193919291829003018186803b1580156200020b57600080fd5b505afa15801562000220573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000246919062000631565b6003546040516364e329cb60e11b81526001600160a01b039283169263c9c65396926200027b9291169030906004016200065a565b602060405180830381600087803b1580156200029657600080fd5b505af1158015620002ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d1919062000631565b602580546001600160a01b0319166001600160a01b03928316179055600754306000908152600b6020908152604080832060248054871685529083529281902093909355905482516315ab88c960e31b8152925193169263ad5c4648926004808201939291829003018186803b1580156200034b57600080fd5b505afa15801562000360573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000386919062000631565b600360006101000a8154816001600160a01b0302191690836001600160a01b031602179055508033604051620003bc9062000623565b620003c99291906200065a565b604051809103906000f080158015620003e6573d6000803e3d6000fd5b50602680546001600160a01b039283166001600160a01b0319918216179182905560278054821692841692909217909155336000818152600c60209081526040808320805460ff199081166001908117909255600d845282852080548216831790556025805489168652600e90945282852080548216831790553085528285208054821683179055600454881685529190932080549091168317905560218054909416909217909255546200049d9216906200053a565b620004b181600754620005b760201b60201c565b50602554600754620004cd916001600160a01b031690620005b7565b50600754336000818152600a602052604080822084905551919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620005169162000674565b60405180910390a3506200080e565b60006200053382846200067d565b9392505050565b6001600160a01b0382166000908152601160205260409020805460ff191682158015919091179091556200058c576001600160a01b0382166000908152600e60205260409020805460ff191660011790555b80620005b3576001600160a01b0382166000908152600e60205260409020805460ff191690555b5050565b336000818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906200061290869062000674565b60405180910390a350600192915050565b6121d18062005ce083390190565b60006020828403121562000643578081fd5b81516001600160a01b038116811462000533578182fd5b6001600160a01b0392831681529116602082015260400190565b90815260200190565b6000826200069957634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611620006b25750620006e2565b818704821115620006c757620006c7620007f8565b80861615620006d557918102915b9490941c938002620006a1565b94509492505050565b60006200053360001960ff8516846000826200070a5750600162000533565b81620007195750600062000533565b81600181146200073257600281146200073d5762000771565b600191505062000533565b60ff841115620007515762000751620007f8565b6001841b9150848211156200076a576200076a620007f8565b5062000533565b5060208310610133831016604e8410600b8410161715620007a9575081810a83811115620007a357620007a3620007f8565b62000533565b620007b884848460016200069e565b808604821115620007cd57620007cd620007f8565b02949350505050565b6000816000190483118215151615620007f357620007f3620007f8565b500290565b634e487b7160e01b600052601160045260246000fd5b6154c2806200081e6000396000f3fe608060405260043610620003f75760003560e01c8063845610ee116200020b578063b62496f5116200011b578063e0f8e24311620000af578063f2fde38b1162000079578063f2fde38b1462000b6e578063f708a64f1462000b93578063f887ea401462000bb8578063fe9fbb801462000bd057620003ff565b8063e0f8e2431462000ae7578063e91f214e1462000b0c578063f0b37c041462000b24578063f1f3bca31462000b4957620003ff565b8063cd806f4311620000f1578063cd806f431462000a53578063d7c010321462000a78578063dd62ed3e1462000a9d578063df20fd491462000ac257620003ff565b8063b62496f514620009f1578063b6a5d7de1462000a16578063ca33e64c1462000a3b57620003ff565b80639a7a23d6116200019f578063a9059cbb1162000169578063a9059cbb146200096a578063ad5c4648146200098f578063add5df6614620009a7578063af06795a14620009cc57620003ff565b80639a7a23d614620008fd5780639d64bf931462000922578063a51af4c5146200093a578063a8aa1b31146200095257620003ff565b80638a8c523c11620001e15780638a8c523c146200089057806391950f3014620008a85780639571a07d14620008c057806395d89b4114620008e557620003ff565b8063845610ee146200082e578063893d20e8146200085357806389ef69f6146200086b57620003ff565b806338e99144116200030757806360733e8f116200029b5780637088fb7f11620002655780637088fb7f14620007b457806370a0823114620007cc57806382247ec014620007f15780638366e79a146200080957620003ff565b806360733e8f146200072d578063658d4b7f14620007525780636d92e1a514620007775780636ddd1713146200079c57620003ff565b80634ada218b11620002dd5780634ada218b14620006a6578063571ac8b014620006be5780635881f3ef14620006e35780635d0044ca146200070857620003ff565b806338e9914414620006375780633f4218e0146200065c5780634355855a146200068157620003ff565b806326560be7116200038b5780632f54bf6e11620003555780632f54bf6e14620005a1578063313ce56714620005c65780633425c00114620005ed578063379fad9a146200061257620003ff565b806326560be71462000527578063296020e7146200054c5780632af10fac14620005715780632b112e49146200058957620003ff565b8063095ea7b311620003cd578063095ea7b3146200048f57806315d61a8214620004b457806318160ddd14620004db57806323b872dd146200050257620003ff565b806303382cbb146200040457806306fdde03146200043457806307c89fe8146200045b57620003ff565b36620003ff57005b600080fd5b3480156200041157600080fd5b506200041c62000bf5565b6040516200042b919062002fd8565b60405180910390f35b3480156200044157600080fd5b506200044c62000c04565b6040516200042b919062003065565b3480156200046857600080fd5b50620004806200047a36600462002d4a565b62000c28565b6040516200042b91906200305a565b3480156200049c57600080fd5b5062000480620004ae36600462002e8d565b62000c80565b348015620004c157600080fd5b50620004d9620004d336600462002f19565b62000ced565b005b348015620004e857600080fd5b50620004f362000d1c565b6040516200042b91906200316e565b3480156200050f57600080fd5b50620004806200052136600462002e16565b62000d22565b3480156200053457600080fd5b50620004d96200054636600462002ebb565b62000deb565b3480156200055957600080fd5b50620004806200056b36600462002d4a565b62000e28565b3480156200057e57600080fd5b506200041c62000e3d565b3480156200059657600080fd5b50620004f362000e4c565b348015620005ae57600080fd5b5062000480620005c036600462002d4a565b62000e9d565b348015620005d357600080fd5b50620005de62000eb1565b6040516200042b9190620031f7565b348015620005fa57600080fd5b50620004d96200060c36600462002d4a565b62000eb6565b3480156200061f57600080fd5b50620004d96200063136600462002ebb565b62000f01565b3480156200064457600080fd5b50620004806200065636600462002d4a565b62000f3e565b3480156200066957600080fd5b50620004806200067b36600462002d4a565b62000f5c565b3480156200068e57600080fd5b5062000480620006a036600462002d4a565b62000f71565b348015620006b357600080fd5b506200048062000f86565b348015620006cb57600080fd5b5062000480620006dd36600462002d4a565b62000f8f565b348015620006f057600080fd5b506200041c6200070236600462002d4a565b62000f9f565b3480156200071557600080fd5b50620004d96200072736600462002f19565b62001317565b3480156200073a57600080fd5b50620004806200074c36600462002d4a565b62001346565b3480156200075f57600080fd5b50620004d96200077136600462002e5b565b62001364565b3480156200078457600080fd5b50620004806200079636600462002d4a565b620013b9565b348015620007a957600080fd5b5062000480620013d7565b348015620007c157600080fd5b50620004d9620013e7565b348015620007d957600080fd5b50620004f3620007eb36600462002d4a565b62001445565b348015620007fe57600080fd5b50620004f362001460565b3480156200081657600080fd5b50620004806200082836600462002d88565b62001466565b3480156200083b57600080fd5b50620004d96200084d36600462002d4a565b620015a8565b3480156200086057600080fd5b506200041c620015f4565b3480156200087857600080fd5b50620004d96200088a36600462002d4a565b62001603565b3480156200089d57600080fd5b50620004d962001651565b348015620008b557600080fd5b506200048062001696565b348015620008cd57600080fd5b5062000480620008df36600462002d4a565b6200169f565b348015620008f257600080fd5b506200044c620016b4565b3480156200090a57600080fd5b50620004d96200091c36600462002e5b565b620016d2565b3480156200092f57600080fd5b50620004f362001708565b3480156200094757600080fd5b506200041c6200170e565b3480156200095f57600080fd5b506200041c6200171d565b3480156200097757600080fd5b50620004806200098936600462002e8d565b6200172c565b3480156200099c57600080fd5b506200041c6200173b565b348015620009b457600080fd5b50620004d9620009c636600462002f79565b6200174a565b348015620009d957600080fd5b50620004d9620009eb36600462002e5b565b620017dc565b348015620009fe57600080fd5b506200048062000a1036600462002d4a565b62001831565b34801562000a2357600080fd5b50620004d962000a3536600462002d4a565b62001846565b34801562000a4857600080fd5b506200041c62001897565b34801562000a6057600080fd5b50620004d962000a7236600462002e5b565b620018a6565b34801562000a8557600080fd5b50620004d962000a9736600462002dc5565b62001b52565b34801562000aaa57600080fd5b50620004f362000abc36600462002d88565b62001bbb565b34801562000acf57600080fd5b50620004d962000ae136600462002ef9565b62001be6565b34801562000af457600080fd5b50620004d962000b0636600462002d4a565b62001c32565b34801562000b1957600080fd5b50620004f362001c7e565b34801562000b3157600080fd5b50620004d962000b4336600462002d4a565b62001c92565b34801562000b5657600080fd5b50620004f362000b6836600462002ebb565b62001cdd565b34801562000b7b57600080fd5b50620004d962000b8d36600462002d4a565b62001cf8565b34801562000ba057600080fd5b50620004d962000bb236600462002e5b565b62001d94565b34801562000bc557600080fd5b506200041c62001ed9565b34801562000bdd57600080fd5b506200048062000bef36600462002d4a565b62001ee8565b6022546001600160a01b031681565b60408051808201909152600a81526942656172204275636b7360b01b602082015290565b600062000c353362000e9d565b62000c5d5760405162461bcd60e51b815260040162000c5490620030f2565b60405180910390fd5b506001600160a01b0381166000908152600f602052604090205460ff165b919050565b336000818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259062000cdb9086906200316e565b60405180910390a35060015b92915050565b62000cf83362001ee8565b62000d175760405162461bcd60e51b815260040162000c549062003149565b600955565b60075490565b6007546001600160a01b0384166000908152600b6020908152604080832033845290915281205490911462000dd4576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600b8252838120338252909152919091205462000daf91849062001f14565b6001600160a01b0385166000908152600b602090815260408083203384529091529020555b62000de184848462001f43565b90505b9392505050565b62000df63362001ee8565b62000e155760405162461bcd60e51b815260040162000c549062003149565b6029805460ff1916911515919091179055565b600f6020526000908152604090205460ff1681565b6023546001600160a01b031681565b60055460009062000e989062000e6b906001600160a01b031662001445565b60045462000e919062000e87906001600160a01b031662001445565b60075490620022f7565b90620022f7565b905090565b6000546001600160a01b0390811691161490565b600990565b62000ec13362000e9d565b62000ee05760405162461bcd60e51b815260040162000c5490620030f2565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b62000f0c3362001ee8565b62000f2b5760405162461bcd60e51b815260040162000c549062003149565b6010805460ff1916911515919091179055565b6001600160a01b03166000908152600c602052604090205460ff1690565b600d6020526000908152604090205460ff1681565b600e6020526000908152604090205460ff1681565b60295460ff1681565b600062000ce78260075462000c80565b600062000fac3362000e9d565b62000fcb5760405162461bcd60e51b815260040162000c5490620030f2565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200100a57600080fd5b505afa1580156200101f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001045919062002d69565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200108e57600080fd5b505afa158015620010a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010c9919062002d69565b6040518363ffffffff1660e01b8152600401620010e892919062002fec565b60206040518083038186803b1580156200110157600080fd5b505afa15801562001116573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200113c919062002d69565b91506001600160a01b038216620012be57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200118757600080fd5b505afa1580156200119c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011c2919062002d69565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200120b57600080fd5b505afa15801562001220573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001246919062002d69565b6040518363ffffffff1660e01b81526004016200126592919062002fec565b602060405180830381600087803b1580156200128057600080fd5b505af115801562001295573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012bb919062002d69565b91505b602580546001600160a01b038085166001600160a01b03199283161790925560248054938316939091169290921791829055600754306000908152600b6020908152604080832095909416825293909352912055919050565b620013223362001ee8565b620013415760405162461bcd60e51b815260040162000c549062003149565b600855565b6001600160a01b03166000908152600d602052604090205460ff1690565b6200136f3362001ee8565b6200138e5760405162461bcd60e51b815260040162000c549062003149565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6001600160a01b03166000908152600e602052604090205460ff1690565b602754600160a01b900460ff1681565b620013f23362000e9d565b620014115760405162461bcd60e51b815260040162000c5490620030f2565b6040514790339082156108fc029083906000818181858888f1935050505015801562001441573d6000803e3d6000fd5b5050565b6001600160a01b03166000908152600a602052604090205490565b60085481565b6000620014733362000e9d565b620014925760405162461bcd60e51b815260040162000c5490620030f2565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190620014c390309060040162002fd8565b60206040518083038186803b158015620014dc57600080fd5b505afa158015620014f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001517919062002f32565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb906200154a908690859060040162003006565b602060405180830381600087803b1580156200156557600080fd5b505af11580156200157a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015a0919062002eda565b949350505050565b620015b33362000e9d565b620015d25760405162461bcd60e51b815260040162000c5490620030f2565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b6200160e3362000e9d565b6200162d5760405162461bcd60e51b815260040162000c5490620030f2565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6200165c3362001ee8565b6200167b5760405162461bcd60e51b815260040162000c549062003149565b60295460ff1662001694576029805460ff191660011790555b565b60105460ff1681565b600c6020526000908152604090205460ff1681565b6040805180820190915260048152632122a0a960e11b602082015290565b620016dd3362000e9d565b620016fc5760405162461bcd60e51b815260040162000c5490620030f2565b62001441828262002305565b60095481565b6027546001600160a01b031681565b6025546001600160a01b031681565b600062000de433848462001f43565b6003546001600160a01b031681565b620017553362001ee8565b620017745760405162461bcd60e51b815260040162000c549062003149565b6012899055601388905560148790556015869055620017a2866200179b89818d8d6200237f565b906200237f565b601655601785905560188490556019839055601a829055620017cc826200179b858189896200237f565b601b55601c555050505050505050565b620017e73362001ee8565b620018065760405162461bcd60e51b815260040162000c549062003149565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60116020526000908152604090205460ff1681565b620018513362000e9d565b620018705760405162461bcd60e51b815260040162000c5490620030f2565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6021546001600160a01b031681565b620018b13362000e9d565b620018d05760405162461bcd60e51b815260040162000c5490620030f2565b602480546001600160a01b0319166001600160a01b0384811691909117918290556040805163c45a015560e01b81529051929091169163c45a015591600480820192602092909190829003018186803b1580156200192d57600080fd5b505afa15801562001942573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001968919062002d69565b6003546040516364e329cb60e11b81526001600160a01b039283169263c9c65396926200199d92911690309060040162002fec565b602060405180830381600087803b158015620019b857600080fd5b505af1158015620019cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019f3919062002d69565b602580546001600160a01b0319166001600160a01b03928316179055600754306000908152600b6020908152604080832060245490951683529390529190912055801562001ae657602460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801562001a8a57600080fd5b505afa15801562001a9f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ac5919062002d69565b600380546001600160a01b0319166001600160a01b03929092169190911790555b813360405162001af69062002d3c565b62001b0392919062002fec565b604051809103906000f08015801562001b20573d6000803e3d6000fd5b50602680546001600160a01b03199081166001600160a01b039384161791829055602780549290931691161790555050565b62001b5d3362001ee8565b62001b7c5760405162461bcd60e51b815260040162000c549062003149565b602180546001600160a01b039485166001600160a01b031991821617909155602280549385169382169390931790925560238054919093169116179055565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b62001bf13362001ee8565b62001c105760405162461bcd60e51b815260040162000c549062003149565b60278054921515600160a01b0260ff60a01b1990931692909217909155602855565b62001c3d3362000e9d565b62001c5c5760405162461bcd60e51b815260040162000c5490620030f2565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6fffffffffffffffffffffffffffffffff81565b62001c9d3362000e9d565b62001cbc5760405162461bcd60e51b815260040162000c5490620030f2565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000811562001cf05750601b5462000c7b565b505060165490565b62001d033362000e9d565b62001d225760405162461bcd60e51b815260040162000c5490620030f2565b600080546001600160a01b0319166001600160a01b0383169081178255815260016020819052604091829020805460ff19169091179055517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639062001d8990839062002fd8565b60405180910390a150565b62001d9f3362001ee8565b62001dbe5760405162461bcd60e51b815260040162000c549062003149565b6001600160a01b0382166000908152600e60205260409020805460ff1916821580159190911790915562001e5b57602654604051630a5b654b60e11b81526001600160a01b03909116906314b6ca969062001e2190859060009060040162003006565b600060405180830381600087803b15801562001e3c57600080fd5b505af115801562001e51573d6000803e3d6000fd5b5050505062001441565b6026546001600160a01b038381166000908152600a602052604090819020549051630a5b654b60e11b815291909216916314b6ca969162001ea191869160040162003006565b600060405180830381600087803b15801562001ebc57600080fd5b505af115801562001ed1573d6000803e3d6000fd5b505050505050565b6024546001600160a01b031681565b6001600160a01b031660009081526001602052604090205460ff1690565b600062000de4828462003220565b6000818484111562001f3b5760405162461bcd60e51b815260040162000c54919062003065565b505050900390565b602954600090610100900460ff161562001f6c5762001f648484846200238d565b905062000de4565b60295460ff168062001f9657506001600160a01b0384166000908152600c602052604090205460ff165b62001fb55760405162461bcd60e51b815260040162000c549062003112565b6024546001600160a01b0384811660009081526011602052604081205491909216919060ff168062001ff85750816001600160a01b0316856001600160a01b0316145b9050801580156200202257506001600160a01b0385166000908152600f602052604090205460ff16155b1562002071576008546001600160a01b0386166000908152600a60205260409020546200205190869062003205565b10620020715760405162461bcd60e51b815260040162000c5490620030bb565b8080156200208157506009548410155b15620020a1576200209162002434565b15620020a157620020a162002494565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b6020808301919091526001600160a01b0389166000908152600a9091529190912054620020f591869062001f14565b6001600160a01b0387166000908152600a60205260408120919091556200211d8787620028d7565b62002129578462002136565b6200213687878762002a1e565b6001600160a01b0387166000908152600a60205260409020549091506200215e90826200237f565b6001600160a01b038088166000908152600a6020908152604080832094909455918a168152600e909152205460ff1662002207576026546001600160a01b038881166000908152600a602052604090819020549051630a5b654b60e11b815291909216916314b6ca9691620021d8918b9160040162003006565b600060405180830381600087803b158015620021f357600080fd5b505af192505050801562002205575060015b505b6001600160a01b0386166000908152600e602052604090205460ff166200229d576026546001600160a01b038781166000908152600a602052604090819020549051630a5b654b60e11b815291909216916314b6ca96916200226e918a9160040162003006565b600060405180830381600087803b1580156200228957600080fd5b505af19250505080156200229b575060015b505b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620022e291906200316e565b60405180910390a35060019695505050505050565b600062000de4828462003263565b6001600160a01b0382166000908152601160205260409020805460ff1916821580159190911790915562002357576001600160a01b0382166000908152600e60205260409020805460ff191660011790555b806200144157506001600160a01b03166000908152600e60205260409020805460ff19169055565b600062000de4828462003205565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600a90915291822054620023e091849062001f14565b6001600160a01b038086166000908152600a602052604080822093909355908516815220546200241190836200237f565b6001600160a01b0384166000908152600a60205260409020555060019392505050565b3360009081526011602052604081205460ff161580156200245d5750602954610100900460ff16155b8015620024735750602754600160a01b900460ff165b801562000e98575050602854306000908152600a6020526040902054101590565b6029805461ff0019166101001790556000620024b03062001445565b90506000620024db6020546200179b601e546200179b601f54601d546200237f90919063ffffffff16565b90506000620024f76002601d5462001f0690919063ffffffff16565b90506000620025078483620022f7565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106200255057634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526003548251911690829060019081106200259057634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260245460405163791ac94760e01b81524792919091169063791ac94790620025dc90869060009087903090429060040162003177565b600060405180830381600087803b158015620025f757600080fd5b505af11580156200260c573d6000803e3d6000fd5b505050506000620026278247620022f790919063ffffffff16565b905060006200265460026200264d896200264d601d548762002d2e90919063ffffffff16565b9062001f06565b9050600062002674886200264d601e548662002d2e90919063ffffffff16565b9050600062002694896200264d601f548762002d2e90919063ffffffff16565b90506000620026b48a6200264d6020548862002d2e90919063ffffffff16565b6000601d819055601f819055601e819055602055905082156200273757602660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200272257600080fd5b505af19350505050801562002735575060015b505b81156200277b576022546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801562002779573d6000803e3d6000fd5b505b8015620027bf576023546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015620027bd573d6000803e3d6000fd5b505b8815620028bf57602460009054906101000a90046001600160a01b03166001600160a01b031663f305d71985308c600080602160009054906101000a90046001600160a01b0316426040518863ffffffff1660e01b81526004016200282a969594939291906200301f565b6060604051808303818588803b1580156200284457600080fd5b505af115801562002859573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062002880919062002f4b565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848a604051620028b6929190620031e9565b60405180910390a15b50506029805461ff0019169055505050505050505050565b60105460009060ff161562002931576001600160a01b0383166000908152600d602052604090205460ff161580156200292957506001600160a01b0382166000908152600d602052604090205460ff16155b905062000ce7565b6024546001600160a01b0384811660009081526011602052604081205491909216919060ff1680620029745750816001600160a01b0316856001600160a01b0316145b6001600160a01b0385166000908152601160205260408120549192509060ff1680620029b15750826001600160a01b0316856001600160a01b0316145b90508180620029bd5750805b1562002a11576001600160a01b0386166000908152600d602052604090205460ff1615801562002a0657506001600160a01b0385166000908152600d602052604090205460ff16155b935050505062000ce7565b6000935050505062000ce7565b6024546001600160a01b0383811660009081526011602052604081205490929190911690829060ff168062002a645750816001600160a01b0316856001600160a01b0316145b9050600062002a738262001cdd565b9050600062002a93601c546200264d848962002d2e90919063ffffffff16565b9050811562002ca157821562002ba5576017541562002ae257816017548262002abd919062003241565b62002ac9919062003220565b601d600082825462002adc919062003205565b90915550505b6019541562002b2157816019548262002afc919062003241565b62002b08919062003220565b601f600082825462002b1b919062003205565b90915550505b6018541562002b6057816018548262002b3b919062003241565b62002b47919062003220565b601e600082825462002b5a919062003205565b90915550505b601a541562002b9f5781601a548262002b7a919062003241565b62002b86919062003220565b6020600082825462002b99919062003205565b90915550505b62002ca1565b6012541562002be457816012548262002bbf919062003241565b62002bcb919062003220565b601d600082825462002bde919062003205565b90915550505b6014541562002c2357816014548262002bfe919062003241565b62002c0a919062003220565b601f600082825462002c1d919062003205565b90915550505b6013541562002c6257816013548262002c3d919062003241565b62002c49919062003220565b601e600082825462002c5c919062003205565b90915550505b6015541562002ca157816015548262002c7c919062003241565b62002c88919062003220565b6020600082825462002c9b919062003205565b90915550505b306000908152600a602052604090205462002cbd90826200237f565b306000818152600a6020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062002d0e9085906200316e565b60405180910390a362002d228682620022f7565b98975050505050505050565b600062000de4828462003241565b6121d180620032bc83390190565b60006020828403121562002d5c578081fd5b813562000de48162003293565b60006020828403121562002d7b578081fd5b815162000de48162003293565b6000806040838503121562002d9b578081fd5b823562002da88162003293565b9150602083013562002dba8162003293565b809150509250929050565b60008060006060848603121562002dda578081fd5b833562002de78162003293565b9250602084013562002df98162003293565b9150604084013562002e0b8162003293565b809150509250925092565b60008060006060848603121562002e2b578283fd5b833562002e388162003293565b9250602084013562002e4a8162003293565b929592945050506040919091013590565b6000806040838503121562002e6e578182fd5b823562002e7b8162003293565b9150602083013562002dba81620032ac565b6000806040838503121562002ea0578182fd5b823562002ead8162003293565b946020939093013593505050565b60006020828403121562002ecd578081fd5b813562000de481620032ac565b60006020828403121562002eec578081fd5b815162000de481620032ac565b6000806040838503121562002f0c578182fd5b823562002ead81620032ac565b60006020828403121562002f2b578081fd5b5035919050565b60006020828403121562002f44578081fd5b5051919050565b60008060006060848603121562002f60578283fd5b8351925060208401519150604084015190509250925092565b60008060008060008060008060006101208a8c03121562002f98578485fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015620030935785810183015185820160400152820162003075565b81811115620030a55783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601d908201527f4d61782077616c6c657420686173206265656e20747269676765726564000000604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252601d908201527f54726164696e672069732063757272656e746c792064697361626c6564000000604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015620031c85784516001600160a01b031683529383019391830191600101620031a1565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b60ff91909116815260200190565b600082198211156200321b576200321b6200327d565b500190565b6000826200323c57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156200325e576200325e6200327d565b500290565b6000828210156200327857620032786200327d565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114620032a957600080fd5b50565b8015158114620032a957600080fdfe6080604052600380546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29081179092556004805482169092179091556011805490911673dac17f958d2ee523a2206206994597c13d831ec71790556ec097ce7bc90715b34b9f10000000006016553480156200007a57600080fd5b50604051620021d1380380620021d18339810160408190526200009d916200025b565b600080546001600160a01b0319166001600160a01b038381169182178355908252600160208190526040909220805460ff19169092179091558216620000f857737a250d5630b4cf539739df2c5dacb4c659f2488d620000fa565b815b600580546001600160a01b039283166001600160a01b031991821617909155600280549091163317905560115481166000908152600e6020526040808220805460ff1990811660019081179092557f6981a11ef3754d9b00d8868549ebf71e3d63f3e9dad47123e19ab5cdda32d36d8054821683179055736b175474e89094c44da98b954eedeac495271d0f9093527f5fe9af5f91cfc98605d0aeb168d7606a1f0945d723f233861d57da8bb2b06d1e805490931617909155600354905163095ea7b360e01b815291169063095ea7b390620001df90859060001990600401620002bb565b602060405180830381600087803b158015620001fa57600080fd5b505af11580156200020f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000235919062000292565b505050620002d4565b80516001600160a01b03811681146200025657600080fd5b919050565b600080604083850312156200026e578182fd5b62000279836200023e565b915062000289602084016200023e565b90509250929050565b600060208284031215620002a4578081fd5b81518015158114620002b4578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b611eed80620002e46000396000f3fe60806040526004361061026b5760003560e01c806389a3027111610144578063ce7c2ac2116100b6578063e2d2e2191161007a578063e2d2e21914610713578063efca2eed14610728578063f0b37c041461073d578063f2fde38b1461075d578063f854a27f1461077d578063fe9fbb801461079d57610272565b8063ce7c2ac214610687578063d0e30db0146106b6578063d63a8e11146106be578063e0bab4c4146106de578063e0f8e243146106f357610272565b8063b6a5d7de11610108578063b6a5d7de146105d2578063bcd259a8146105f2578063c161357a14610612578063c238efd514610632578063c54e44eb14610652578063ca89b8991461066757610272565b806389a30271146105485780638e4241751461055d578063929925db1461057d578063997664d71461059d578063a995bb14146105b257610272565b80633333cfc3116101dd57806363eabae9116101a157806363eabae9146104935780637088fb7f146104b35780638366e79a146104c857806383e84500146104e8578063845610ee1461050857806387f681d81461052857610272565b80633333cfc3146103fe5780633a98ef391461041e5780634782e407146104335780635881f3ef14610453578063610035a41461047357610272565b806315f7e05e1161022f57806315f7e05e146103315780631b386a42146103515780632870e95d1461037157806328fd3198146103915780632bcf161c146103b15780632f54bf6e146103d157610272565b806302c4aede146102775780630300f925146102ad578063061ad62a146102da57806311ce023d146102fa57806314b6ca961461030f57610272565b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004611b77565b6107bd565b6040516102a49190611c97565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004611b93565b6107d8565b6040516102a49190611df1565b3480156102e657600080fd5b506102976102f5366004611b77565b6107f5565b34801561030657600080fd5b506102cd610810565b34801561031b57600080fd5b5061032f61032a366004611c38565b610816565b005b34801561033d57600080fd5b5061032f61034c366004611b77565b6109a4565b34801561035d57600080fd5b506102cd61036c366004611b93565b6109b1565b34801561037d57600080fd5b5061032f61038c366004611b77565b6109dc565b34801561039d57600080fd5b506102cd6103ac366004611b77565b610a30565b3480156103bd57600080fd5b506102cd6103cc366004611b77565b610abc565b3480156103dd57600080fd5b506103f16103ec366004611b77565b610ad7565b6040516102a49190611cc4565b34801561040a57600080fd5b5061032f610419366004611c0b565b610aeb565b34801561042a57600080fd5b506102cd610b44565b34801561043f57600080fd5b5061032f61044e366004611b77565b610b4a565b34801561045f57600080fd5b5061032f61046e366004611b77565b610b91565b34801561047f57600080fd5b506103f161048e366004611b77565b610bd8565b34801561049f57600080fd5b5061032f6104ae366004611c0b565b610bf6565b3480156104bf57600080fd5b5061032f610c2e565b3480156104d457600080fd5b506103f16104e3366004611b93565b610c86565b3480156104f457600080fd5b5061032f610503366004611b93565b610de0565b34801561051457600080fd5b5061032f610523366004611b77565b610e33565b34801561053457600080fd5b5061032f610543366004611b77565b610e7a565b34801561055457600080fd5b50610297610ec8565b34801561056957600080fd5b506103f1610578366004611b93565b610ee0565b34801561058957600080fd5b506103f1610598366004611b93565b610f0e565b3480156105a957600080fd5b506102cd610f2e565b3480156105be57600080fd5b5061032f6105cd366004611b93565b610f34565b3480156105de57600080fd5b5061032f6105ed366004611b77565b610fe0565b3480156105fe57600080fd5b5061032f61060d366004611b93565b61102c565b34801561061e57600080fd5b5061032f61062d366004611bcb565b611079565b34801561063e57600080fd5b5061029761064d366004611b77565b611124565b34801561065e57600080fd5b50610297611142565b34801561067357600080fd5b506102cd610682366004611b77565b611151565b34801561069357600080fd5b506106a76106a2366004611b77565b611163565b6040516102a493929190611dfa565b61032f611184565b3480156106ca57600080fd5b506103f16106d9366004611b77565b6111da565b3480156106ea57600080fd5b506102976111ef565b3480156106ff57600080fd5b5061032f61070e366004611b77565b611207565b34801561071f57600080fd5b506102cd61124e565b34801561073457600080fd5b506102cd611254565b34801561074957600080fd5b5061032f610758366004611b77565b61125a565b34801561076957600080fd5b5061032f610778366004611b77565b6112a0565b34801561078957600080fd5b506103f1610798366004611b77565b611335565b3480156107a957600080fd5b506103f16107b8366004611b77565b61134a565b600d602052600090815260409020546001600160a01b031681565b600a60209081526000928352604080842090915290825290205481565b600f602052600090815260409020546001600160a01b031681565b60165481565b6002546001600160a01b0316331461082d57600080fd5b6001600160a01b038216600090815260106020526040902054156108bd576001600160a01b038083166000908152600f60209081526040808320549093168252600e9052205460ff16156108a6576001600160a01b038083166000908152600f60205260409020546108a191849116611368565b6108bd565b6011546108bd9083906001600160a01b0316611368565b6000811180156108e357506001600160a01b038216600090815260106020526040902054155b156108f6576108f18261196f565b610929565b8015801561091b57506001600160a01b03821660009081526010602052604090205415155b1561092957610929826119d0565b6001600160a01b03821660009081526010602052604090205460125461095a91839161095491611b1d565b90611b30565b6012556001600160a01b038216600090815260106020526040902081905561098181611b3c565b6001600160a01b0390921660009081526010602052604090206001019190915550565b6109ae3382611368565b50565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b6001600160a01b0381166000908152600e602052604090205460ff16610a0157600080fd5b336000908152600f6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260106020526040812054610a5557506000610ab7565b6001600160a01b038216600090815260106020526040812054610a7790611b3c565b6001600160a01b038416600090815260106020526040902060010154909150808211610aa857600092505050610ab7565b610ab28282611b1d565b925050505b919050565b6001600160a01b031660009081526009602052604090205490565b6000546001600160a01b0390811691161490565b610af433610ad7565b610b195760405162461bcd60e51b8152600401610b1090611dd1565b60405180910390fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60125481565b610b5333610ad7565b610b6f5760405162461bcd60e51b8152600401610b1090611dd1565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b610b9a33610ad7565b610bb65760405162461bcd60e51b8152600401610b1090611dd1565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03166000908152600e602052604090205460ff1690565b336000908152600b602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b610c3733610ad7565b610c535760405162461bcd60e51b8152600401610b1090611dd1565b6040514790339082156108fc029083906000818181858888f19350505050158015610c82573d6000803e3d6000fd5b5050565b6000610c9133610ad7565b610cad5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b038316301415610cd65760405162461bcd60e51b8152600401610b1090611d38565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190610d05903090600401611c97565b60206040518083038186803b158015610d1d57600080fd5b505afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190611c7f565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb90610d869086908590600401611cab565b602060405180830381600087803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd89190611c63565b949350505050565b610de933610ad7565b610e055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b039182166000908152600d6020526040902080546001600160a01b03191691909216179055565b610e3c33610ad7565b610e585760405162461bcd60e51b8152600401610b1090611dd1565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610e8333610ad7565b610e9f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600e60205260409020805460ff19811660ff90911615179055565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b600b60209081526000928352604080842090915290825290205460ff1681565b60135481565b610f3d33610ad7565b610f595760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610f8990849060001990600401611cab565b602060405180830381600087803b158015610fa357600080fd5b505af1158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190611c63565b505050565b610fe933610ad7565b6110055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6001600160a01b0382166000908152600b6020908152604080832033845290915290205460ff1661106f5760405162461bcd60e51b8152600401610b1090611da6565b610c828282611368565b61108233610ad7565b61109e5760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0384169063095ea7b3906110cc9085908590600401611cab565b602060405180830381600087803b1580156110e657600080fd5b505af11580156110fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e9190611c63565b50505050565b6001600160a01b039081166000908152600d60205260409020541690565b6011546001600160a01b031681565b60096020526000908152604090205481565b60106020526000908152604090208054600182015460029092015490919083565b6002546001600160a01b0316331461119b57600080fd5b60135434906111aa9082611b30565b6013556012546016546111d4916111cb916111c59085611b5f565b90611b6b565b60155490611b30565b60155550565b600e6020526000908152604090205460ff1681565b736b175474e89094c44da98b954eedeac495271d0f81565b61121033610ad7565b61122c5760405162461bcd60e51b8152600401610b1090611dd1565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60155481565b60145481565b61126333610ad7565b61127f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6112a933610ad7565b6112c55760405162461bcd60e51b8152600401610b1090611dd1565b600080546001600160a01b0319166001600160a01b0383169081178255815260016020819052604091829020805460ff19169091179055517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639061132a908390611c97565b60405180910390a150565b600c6020526000908152604090205460ff1681565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b0381166000908152600e602052604090205460ff166113a05760405162461bcd60e51b8152600401610b1090611d6f565b6001600160a01b0382166000908152601060205260409020546113c257610c82565b60006113cd83610a30565b90508015610fdb576014546113e29082611b30565b6014556001600160a01b038316600090815260086020908152604080832042905560109091529020600201546114189082611b30565b6001600160a01b038416600090815260106020526040902060028101919091555461144290611b3c565b6001600160a01b0380851660009081526010602052604090206001019190915560035483821691161415611531576040516001600160a01b0384169082156108fc029083906000818181858888f193505050501580156114a6573d6000803e3d6000fd5b506001600160a01b0382166000908152600960205260409020546114ca9082611b30565b6001600160a01b03808416600090815260096020908152604080832094909455600a815283822092871682529190915220546115069082611b30565b6001600160a01b038084166000908152600a6020908152604080832093881683529290522055610fdb565b6040516370a0823160e01b815282906000906001600160a01b038316906370a0823190611562908890600401611c97565b60206040518083038186803b15801561157a57600080fd5b505afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190611c7f565b6001600160a01b038581166000908152600d6020526040902054919250166116e357604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b03169183915060009061162357634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061166557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de959086906116ab9060009086908c904290600401611ccf565b6000604051808303818588803b1580156116c457600080fd5b505af11580156116d8573d6000803e3d6000fd5b505050505050611842565b6040805160038082526080820190925260009160208201606080368337505060035482519293506001600160a01b03169183915060009061173457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091528682166000908152600d909152604090205482519116908290600190811061178657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505084816002815181106117c857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de9590869061180e9060009086908c904290600401611ccf565b6000604051808303818588803b15801561182757600080fd5b505af115801561183b573d6000803e3d6000fd5b5050505050505b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611871908990600401611c97565b60206040518083038186803b15801561188957600080fd5b505afa15801561189d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c19190611c7f565b90506118ef6118d08284611b1d565b6001600160a01b03871660009081526009602052604090205490611b30565b6001600160a01b0386166000908152600960205260409020556119416119158284611b1d565b6001600160a01b038088166000908152600a60209081526040808320938c168352929052205490611b30565b6001600160a01b038087166000908152600a60209081526040808320938b1683529290522055505050505050565b600680546001600160a01b039092166000818152600760205260408120849055600184018355919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b0319169091179055565b600680546119e090600190611e67565b815481106119fe57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0384811684526007909252604090922054600680549290931692918110611a4a57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260079182905260408120546006805491939291611a9690600190611e67565b81548110611ab457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020556006805480611af857634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000611b298284611e67565b9392505050565b6000611b298284611e10565b6000611b596016546111c560155485611b5f90919063ffffffff16565b92915050565b6000611b298284611e48565b6000611b298284611e28565b600060208284031215611b88578081fd5b8135611b2981611e94565b60008060408385031215611ba5578081fd5b8235611bb081611e94565b91506020830135611bc081611e94565b809150509250929050565b600080600060608486031215611bdf578081fd5b8335611bea81611e94565b92506020840135611bfa81611e94565b929592945050506040919091013590565b60008060408385031215611c1d578182fd5b8235611c2881611e94565b91506020830135611bc081611ea9565b60008060408385031215611c4a578182fd5b8235611c5581611e94565b946020939093013593505050565b600060208284031215611c74578081fd5b8151611b2981611ea9565b600060208284031215611c90578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611d185784516001600160a01b031683529383019391830191600101611cf3565b50506001600160a01b039690961660408501525050506060015292915050565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b60208082526017908201527f496e76616c696420726577617264206164647265737321000000000000000000604082015260600190565b602080825260119082015270165bdd4818d85b89dd08191bc81d1a185d607a1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b60008219821115611e2357611e23611e7e565b500190565b600082611e4357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611e6257611e62611e7e565b500290565b600082821015611e7957611e79611e7e565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146109ae57600080fd5b80151581146109ae57600080fdfea2646970667358221220835c9b56ef4e7c9376412755942667be3327b9823b81b8a823d7531305648bba64736f6c63430008000033a26469706673582212207733c8f89dbea84fd9573b60a2f73e30d52715aa6b9b264fcbbd80c51c25060e64736f6c634300080000336080604052600380546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29081179092556004805482169092179091556011805490911673dac17f958d2ee523a2206206994597c13d831ec71790556ec097ce7bc90715b34b9f10000000006016553480156200007a57600080fd5b50604051620021d1380380620021d18339810160408190526200009d916200025b565b600080546001600160a01b0319166001600160a01b038381169182178355908252600160208190526040909220805460ff19169092179091558216620000f857737a250d5630b4cf539739df2c5dacb4c659f2488d620000fa565b815b600580546001600160a01b039283166001600160a01b031991821617909155600280549091163317905560115481166000908152600e6020526040808220805460ff1990811660019081179092557f6981a11ef3754d9b00d8868549ebf71e3d63f3e9dad47123e19ab5cdda32d36d8054821683179055736b175474e89094c44da98b954eedeac495271d0f9093527f5fe9af5f91cfc98605d0aeb168d7606a1f0945d723f233861d57da8bb2b06d1e805490931617909155600354905163095ea7b360e01b815291169063095ea7b390620001df90859060001990600401620002bb565b602060405180830381600087803b158015620001fa57600080fd5b505af11580156200020f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000235919062000292565b505050620002d4565b80516001600160a01b03811681146200025657600080fd5b919050565b600080604083850312156200026e578182fd5b62000279836200023e565b915062000289602084016200023e565b90509250929050565b600060208284031215620002a4578081fd5b81518015158114620002b4578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b611eed80620002e46000396000f3fe60806040526004361061026b5760003560e01c806389a3027111610144578063ce7c2ac2116100b6578063e2d2e2191161007a578063e2d2e21914610713578063efca2eed14610728578063f0b37c041461073d578063f2fde38b1461075d578063f854a27f1461077d578063fe9fbb801461079d57610272565b8063ce7c2ac214610687578063d0e30db0146106b6578063d63a8e11146106be578063e0bab4c4146106de578063e0f8e243146106f357610272565b8063b6a5d7de11610108578063b6a5d7de146105d2578063bcd259a8146105f2578063c161357a14610612578063c238efd514610632578063c54e44eb14610652578063ca89b8991461066757610272565b806389a30271146105485780638e4241751461055d578063929925db1461057d578063997664d71461059d578063a995bb14146105b257610272565b80633333cfc3116101dd57806363eabae9116101a157806363eabae9146104935780637088fb7f146104b35780638366e79a146104c857806383e84500146104e8578063845610ee1461050857806387f681d81461052857610272565b80633333cfc3146103fe5780633a98ef391461041e5780634782e407146104335780635881f3ef14610453578063610035a41461047357610272565b806315f7e05e1161022f57806315f7e05e146103315780631b386a42146103515780632870e95d1461037157806328fd3198146103915780632bcf161c146103b15780632f54bf6e146103d157610272565b806302c4aede146102775780630300f925146102ad578063061ad62a146102da57806311ce023d146102fa57806314b6ca961461030f57610272565b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004611b77565b6107bd565b6040516102a49190611c97565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004611b93565b6107d8565b6040516102a49190611df1565b3480156102e657600080fd5b506102976102f5366004611b77565b6107f5565b34801561030657600080fd5b506102cd610810565b34801561031b57600080fd5b5061032f61032a366004611c38565b610816565b005b34801561033d57600080fd5b5061032f61034c366004611b77565b6109a4565b34801561035d57600080fd5b506102cd61036c366004611b93565b6109b1565b34801561037d57600080fd5b5061032f61038c366004611b77565b6109dc565b34801561039d57600080fd5b506102cd6103ac366004611b77565b610a30565b3480156103bd57600080fd5b506102cd6103cc366004611b77565b610abc565b3480156103dd57600080fd5b506103f16103ec366004611b77565b610ad7565b6040516102a49190611cc4565b34801561040a57600080fd5b5061032f610419366004611c0b565b610aeb565b34801561042a57600080fd5b506102cd610b44565b34801561043f57600080fd5b5061032f61044e366004611b77565b610b4a565b34801561045f57600080fd5b5061032f61046e366004611b77565b610b91565b34801561047f57600080fd5b506103f161048e366004611b77565b610bd8565b34801561049f57600080fd5b5061032f6104ae366004611c0b565b610bf6565b3480156104bf57600080fd5b5061032f610c2e565b3480156104d457600080fd5b506103f16104e3366004611b93565b610c86565b3480156104f457600080fd5b5061032f610503366004611b93565b610de0565b34801561051457600080fd5b5061032f610523366004611b77565b610e33565b34801561053457600080fd5b5061032f610543366004611b77565b610e7a565b34801561055457600080fd5b50610297610ec8565b34801561056957600080fd5b506103f1610578366004611b93565b610ee0565b34801561058957600080fd5b506103f1610598366004611b93565b610f0e565b3480156105a957600080fd5b506102cd610f2e565b3480156105be57600080fd5b5061032f6105cd366004611b93565b610f34565b3480156105de57600080fd5b5061032f6105ed366004611b77565b610fe0565b3480156105fe57600080fd5b5061032f61060d366004611b93565b61102c565b34801561061e57600080fd5b5061032f61062d366004611bcb565b611079565b34801561063e57600080fd5b5061029761064d366004611b77565b611124565b34801561065e57600080fd5b50610297611142565b34801561067357600080fd5b506102cd610682366004611b77565b611151565b34801561069357600080fd5b506106a76106a2366004611b77565b611163565b6040516102a493929190611dfa565b61032f611184565b3480156106ca57600080fd5b506103f16106d9366004611b77565b6111da565b3480156106ea57600080fd5b506102976111ef565b3480156106ff57600080fd5b5061032f61070e366004611b77565b611207565b34801561071f57600080fd5b506102cd61124e565b34801561073457600080fd5b506102cd611254565b34801561074957600080fd5b5061032f610758366004611b77565b61125a565b34801561076957600080fd5b5061032f610778366004611b77565b6112a0565b34801561078957600080fd5b506103f1610798366004611b77565b611335565b3480156107a957600080fd5b506103f16107b8366004611b77565b61134a565b600d602052600090815260409020546001600160a01b031681565b600a60209081526000928352604080842090915290825290205481565b600f602052600090815260409020546001600160a01b031681565b60165481565b6002546001600160a01b0316331461082d57600080fd5b6001600160a01b038216600090815260106020526040902054156108bd576001600160a01b038083166000908152600f60209081526040808320549093168252600e9052205460ff16156108a6576001600160a01b038083166000908152600f60205260409020546108a191849116611368565b6108bd565b6011546108bd9083906001600160a01b0316611368565b6000811180156108e357506001600160a01b038216600090815260106020526040902054155b156108f6576108f18261196f565b610929565b8015801561091b57506001600160a01b03821660009081526010602052604090205415155b1561092957610929826119d0565b6001600160a01b03821660009081526010602052604090205460125461095a91839161095491611b1d565b90611b30565b6012556001600160a01b038216600090815260106020526040902081905561098181611b3c565b6001600160a01b0390921660009081526010602052604090206001019190915550565b6109ae3382611368565b50565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b6001600160a01b0381166000908152600e602052604090205460ff16610a0157600080fd5b336000908152600f6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260106020526040812054610a5557506000610ab7565b6001600160a01b038216600090815260106020526040812054610a7790611b3c565b6001600160a01b038416600090815260106020526040902060010154909150808211610aa857600092505050610ab7565b610ab28282611b1d565b925050505b919050565b6001600160a01b031660009081526009602052604090205490565b6000546001600160a01b0390811691161490565b610af433610ad7565b610b195760405162461bcd60e51b8152600401610b1090611dd1565b60405180910390fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60125481565b610b5333610ad7565b610b6f5760405162461bcd60e51b8152600401610b1090611dd1565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b610b9a33610ad7565b610bb65760405162461bcd60e51b8152600401610b1090611dd1565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03166000908152600e602052604090205460ff1690565b336000908152600b602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b610c3733610ad7565b610c535760405162461bcd60e51b8152600401610b1090611dd1565b6040514790339082156108fc029083906000818181858888f19350505050158015610c82573d6000803e3d6000fd5b5050565b6000610c9133610ad7565b610cad5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b038316301415610cd65760405162461bcd60e51b8152600401610b1090611d38565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190610d05903090600401611c97565b60206040518083038186803b158015610d1d57600080fd5b505afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190611c7f565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb90610d869086908590600401611cab565b602060405180830381600087803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd89190611c63565b949350505050565b610de933610ad7565b610e055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b039182166000908152600d6020526040902080546001600160a01b03191691909216179055565b610e3c33610ad7565b610e585760405162461bcd60e51b8152600401610b1090611dd1565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610e8333610ad7565b610e9f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600e60205260409020805460ff19811660ff90911615179055565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b600b60209081526000928352604080842090915290825290205460ff1681565b60135481565b610f3d33610ad7565b610f595760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610f8990849060001990600401611cab565b602060405180830381600087803b158015610fa357600080fd5b505af1158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190611c63565b505050565b610fe933610ad7565b6110055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6001600160a01b0382166000908152600b6020908152604080832033845290915290205460ff1661106f5760405162461bcd60e51b8152600401610b1090611da6565b610c828282611368565b61108233610ad7565b61109e5760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0384169063095ea7b3906110cc9085908590600401611cab565b602060405180830381600087803b1580156110e657600080fd5b505af11580156110fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e9190611c63565b50505050565b6001600160a01b039081166000908152600d60205260409020541690565b6011546001600160a01b031681565b60096020526000908152604090205481565b60106020526000908152604090208054600182015460029092015490919083565b6002546001600160a01b0316331461119b57600080fd5b60135434906111aa9082611b30565b6013556012546016546111d4916111cb916111c59085611b5f565b90611b6b565b60155490611b30565b60155550565b600e6020526000908152604090205460ff1681565b736b175474e89094c44da98b954eedeac495271d0f81565b61121033610ad7565b61122c5760405162461bcd60e51b8152600401610b1090611dd1565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60155481565b60145481565b61126333610ad7565b61127f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6112a933610ad7565b6112c55760405162461bcd60e51b8152600401610b1090611dd1565b600080546001600160a01b0319166001600160a01b0383169081178255815260016020819052604091829020805460ff19169091179055517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639061132a908390611c97565b60405180910390a150565b600c6020526000908152604090205460ff1681565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b0381166000908152600e602052604090205460ff166113a05760405162461bcd60e51b8152600401610b1090611d6f565b6001600160a01b0382166000908152601060205260409020546113c257610c82565b60006113cd83610a30565b90508015610fdb576014546113e29082611b30565b6014556001600160a01b038316600090815260086020908152604080832042905560109091529020600201546114189082611b30565b6001600160a01b038416600090815260106020526040902060028101919091555461144290611b3c565b6001600160a01b0380851660009081526010602052604090206001019190915560035483821691161415611531576040516001600160a01b0384169082156108fc029083906000818181858888f193505050501580156114a6573d6000803e3d6000fd5b506001600160a01b0382166000908152600960205260409020546114ca9082611b30565b6001600160a01b03808416600090815260096020908152604080832094909455600a815283822092871682529190915220546115069082611b30565b6001600160a01b038084166000908152600a6020908152604080832093881683529290522055610fdb565b6040516370a0823160e01b815282906000906001600160a01b038316906370a0823190611562908890600401611c97565b60206040518083038186803b15801561157a57600080fd5b505afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190611c7f565b6001600160a01b038581166000908152600d6020526040902054919250166116e357604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b03169183915060009061162357634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061166557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de959086906116ab9060009086908c904290600401611ccf565b6000604051808303818588803b1580156116c457600080fd5b505af11580156116d8573d6000803e3d6000fd5b505050505050611842565b6040805160038082526080820190925260009160208201606080368337505060035482519293506001600160a01b03169183915060009061173457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091528682166000908152600d909152604090205482519116908290600190811061178657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505084816002815181106117c857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de9590869061180e9060009086908c904290600401611ccf565b6000604051808303818588803b15801561182757600080fd5b505af115801561183b573d6000803e3d6000fd5b5050505050505b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611871908990600401611c97565b60206040518083038186803b15801561188957600080fd5b505afa15801561189d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c19190611c7f565b90506118ef6118d08284611b1d565b6001600160a01b03871660009081526009602052604090205490611b30565b6001600160a01b0386166000908152600960205260409020556119416119158284611b1d565b6001600160a01b038088166000908152600a60209081526040808320938c168352929052205490611b30565b6001600160a01b038087166000908152600a60209081526040808320938b1683529290522055505050505050565b600680546001600160a01b039092166000818152600760205260408120849055600184018355919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b0319169091179055565b600680546119e090600190611e67565b815481106119fe57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0384811684526007909252604090922054600680549290931692918110611a4a57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260079182905260408120546006805491939291611a9690600190611e67565b81548110611ab457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020556006805480611af857634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000611b298284611e67565b9392505050565b6000611b298284611e10565b6000611b596016546111c560155485611b5f90919063ffffffff16565b92915050565b6000611b298284611e48565b6000611b298284611e28565b600060208284031215611b88578081fd5b8135611b2981611e94565b60008060408385031215611ba5578081fd5b8235611bb081611e94565b91506020830135611bc081611e94565b809150509250929050565b600080600060608486031215611bdf578081fd5b8335611bea81611e94565b92506020840135611bfa81611e94565b929592945050506040919091013590565b60008060408385031215611c1d578182fd5b8235611c2881611e94565b91506020830135611bc081611ea9565b60008060408385031215611c4a578182fd5b8235611c5581611e94565b946020939093013593505050565b600060208284031215611c74578081fd5b8151611b2981611ea9565b600060208284031215611c90578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611d185784516001600160a01b031683529383019391830191600101611cf3565b50506001600160a01b039690961660408501525050506060015292915050565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b60208082526017908201527f496e76616c696420726577617264206164647265737321000000000000000000604082015260600190565b602080825260119082015270165bdd4818d85b89dd08191bc81d1a185d607a1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b60008219821115611e2357611e23611e7e565b500190565b600082611e4357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611e6257611e62611e7e565b500290565b600082821015611e7957611e79611e7e565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146109ae57600080fd5b80151581146109ae57600080fdfea2646970667358221220835c9b56ef4e7c9376412755942667be3327b9823b81b8a823d7531305648bba64736f6c63430008000033

Deployed Bytecode

0x608060405260043610620003f75760003560e01c8063845610ee116200020b578063b62496f5116200011b578063e0f8e24311620000af578063f2fde38b1162000079578063f2fde38b1462000b6e578063f708a64f1462000b93578063f887ea401462000bb8578063fe9fbb801462000bd057620003ff565b8063e0f8e2431462000ae7578063e91f214e1462000b0c578063f0b37c041462000b24578063f1f3bca31462000b4957620003ff565b8063cd806f4311620000f1578063cd806f431462000a53578063d7c010321462000a78578063dd62ed3e1462000a9d578063df20fd491462000ac257620003ff565b8063b62496f514620009f1578063b6a5d7de1462000a16578063ca33e64c1462000a3b57620003ff565b80639a7a23d6116200019f578063a9059cbb1162000169578063a9059cbb146200096a578063ad5c4648146200098f578063add5df6614620009a7578063af06795a14620009cc57620003ff565b80639a7a23d614620008fd5780639d64bf931462000922578063a51af4c5146200093a578063a8aa1b31146200095257620003ff565b80638a8c523c11620001e15780638a8c523c146200089057806391950f3014620008a85780639571a07d14620008c057806395d89b4114620008e557620003ff565b8063845610ee146200082e578063893d20e8146200085357806389ef69f6146200086b57620003ff565b806338e99144116200030757806360733e8f116200029b5780637088fb7f11620002655780637088fb7f14620007b457806370a0823114620007cc57806382247ec014620007f15780638366e79a146200080957620003ff565b806360733e8f146200072d578063658d4b7f14620007525780636d92e1a514620007775780636ddd1713146200079c57620003ff565b80634ada218b11620002dd5780634ada218b14620006a6578063571ac8b014620006be5780635881f3ef14620006e35780635d0044ca146200070857620003ff565b806338e9914414620006375780633f4218e0146200065c5780634355855a146200068157620003ff565b806326560be7116200038b5780632f54bf6e11620003555780632f54bf6e14620005a1578063313ce56714620005c65780633425c00114620005ed578063379fad9a146200061257620003ff565b806326560be71462000527578063296020e7146200054c5780632af10fac14620005715780632b112e49146200058957620003ff565b8063095ea7b311620003cd578063095ea7b3146200048f57806315d61a8214620004b457806318160ddd14620004db57806323b872dd146200050257620003ff565b806303382cbb146200040457806306fdde03146200043457806307c89fe8146200045b57620003ff565b36620003ff57005b600080fd5b3480156200041157600080fd5b506200041c62000bf5565b6040516200042b919062002fd8565b60405180910390f35b3480156200044157600080fd5b506200044c62000c04565b6040516200042b919062003065565b3480156200046857600080fd5b50620004806200047a36600462002d4a565b62000c28565b6040516200042b91906200305a565b3480156200049c57600080fd5b5062000480620004ae36600462002e8d565b62000c80565b348015620004c157600080fd5b50620004d9620004d336600462002f19565b62000ced565b005b348015620004e857600080fd5b50620004f362000d1c565b6040516200042b91906200316e565b3480156200050f57600080fd5b50620004806200052136600462002e16565b62000d22565b3480156200053457600080fd5b50620004d96200054636600462002ebb565b62000deb565b3480156200055957600080fd5b50620004806200056b36600462002d4a565b62000e28565b3480156200057e57600080fd5b506200041c62000e3d565b3480156200059657600080fd5b50620004f362000e4c565b348015620005ae57600080fd5b5062000480620005c036600462002d4a565b62000e9d565b348015620005d357600080fd5b50620005de62000eb1565b6040516200042b9190620031f7565b348015620005fa57600080fd5b50620004d96200060c36600462002d4a565b62000eb6565b3480156200061f57600080fd5b50620004d96200063136600462002ebb565b62000f01565b3480156200064457600080fd5b50620004806200065636600462002d4a565b62000f3e565b3480156200066957600080fd5b50620004806200067b36600462002d4a565b62000f5c565b3480156200068e57600080fd5b5062000480620006a036600462002d4a565b62000f71565b348015620006b357600080fd5b506200048062000f86565b348015620006cb57600080fd5b5062000480620006dd36600462002d4a565b62000f8f565b348015620006f057600080fd5b506200041c6200070236600462002d4a565b62000f9f565b3480156200071557600080fd5b50620004d96200072736600462002f19565b62001317565b3480156200073a57600080fd5b50620004806200074c36600462002d4a565b62001346565b3480156200075f57600080fd5b50620004d96200077136600462002e5b565b62001364565b3480156200078457600080fd5b50620004806200079636600462002d4a565b620013b9565b348015620007a957600080fd5b5062000480620013d7565b348015620007c157600080fd5b50620004d9620013e7565b348015620007d957600080fd5b50620004f3620007eb36600462002d4a565b62001445565b348015620007fe57600080fd5b50620004f362001460565b3480156200081657600080fd5b50620004806200082836600462002d88565b62001466565b3480156200083b57600080fd5b50620004d96200084d36600462002d4a565b620015a8565b3480156200086057600080fd5b506200041c620015f4565b3480156200087857600080fd5b50620004d96200088a36600462002d4a565b62001603565b3480156200089d57600080fd5b50620004d962001651565b348015620008b557600080fd5b506200048062001696565b348015620008cd57600080fd5b5062000480620008df36600462002d4a565b6200169f565b348015620008f257600080fd5b506200044c620016b4565b3480156200090a57600080fd5b50620004d96200091c36600462002e5b565b620016d2565b3480156200092f57600080fd5b50620004f362001708565b3480156200094757600080fd5b506200041c6200170e565b3480156200095f57600080fd5b506200041c6200171d565b3480156200097757600080fd5b50620004806200098936600462002e8d565b6200172c565b3480156200099c57600080fd5b506200041c6200173b565b348015620009b457600080fd5b50620004d9620009c636600462002f79565b6200174a565b348015620009d957600080fd5b50620004d9620009eb36600462002e5b565b620017dc565b348015620009fe57600080fd5b506200048062000a1036600462002d4a565b62001831565b34801562000a2357600080fd5b50620004d962000a3536600462002d4a565b62001846565b34801562000a4857600080fd5b506200041c62001897565b34801562000a6057600080fd5b50620004d962000a7236600462002e5b565b620018a6565b34801562000a8557600080fd5b50620004d962000a9736600462002dc5565b62001b52565b34801562000aaa57600080fd5b50620004f362000abc36600462002d88565b62001bbb565b34801562000acf57600080fd5b50620004d962000ae136600462002ef9565b62001be6565b34801562000af457600080fd5b50620004d962000b0636600462002d4a565b62001c32565b34801562000b1957600080fd5b50620004f362001c7e565b34801562000b3157600080fd5b50620004d962000b4336600462002d4a565b62001c92565b34801562000b5657600080fd5b50620004f362000b6836600462002ebb565b62001cdd565b34801562000b7b57600080fd5b50620004d962000b8d36600462002d4a565b62001cf8565b34801562000ba057600080fd5b50620004d962000bb236600462002e5b565b62001d94565b34801562000bc557600080fd5b506200041c62001ed9565b34801562000bdd57600080fd5b506200048062000bef36600462002d4a565b62001ee8565b6022546001600160a01b031681565b60408051808201909152600a81526942656172204275636b7360b01b602082015290565b600062000c353362000e9d565b62000c5d5760405162461bcd60e51b815260040162000c5490620030f2565b60405180910390fd5b506001600160a01b0381166000908152600f602052604090205460ff165b919050565b336000818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259062000cdb9086906200316e565b60405180910390a35060015b92915050565b62000cf83362001ee8565b62000d175760405162461bcd60e51b815260040162000c549062003149565b600955565b60075490565b6007546001600160a01b0384166000908152600b6020908152604080832033845290915281205490911462000dd4576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600b8252838120338252909152919091205462000daf91849062001f14565b6001600160a01b0385166000908152600b602090815260408083203384529091529020555b62000de184848462001f43565b90505b9392505050565b62000df63362001ee8565b62000e155760405162461bcd60e51b815260040162000c549062003149565b6029805460ff1916911515919091179055565b600f6020526000908152604090205460ff1681565b6023546001600160a01b031681565b60055460009062000e989062000e6b906001600160a01b031662001445565b60045462000e919062000e87906001600160a01b031662001445565b60075490620022f7565b90620022f7565b905090565b6000546001600160a01b0390811691161490565b600990565b62000ec13362000e9d565b62000ee05760405162461bcd60e51b815260040162000c5490620030f2565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b62000f0c3362001ee8565b62000f2b5760405162461bcd60e51b815260040162000c549062003149565b6010805460ff1916911515919091179055565b6001600160a01b03166000908152600c602052604090205460ff1690565b600d6020526000908152604090205460ff1681565b600e6020526000908152604090205460ff1681565b60295460ff1681565b600062000ce78260075462000c80565b600062000fac3362000e9d565b62000fcb5760405162461bcd60e51b815260040162000c5490620030f2565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200100a57600080fd5b505afa1580156200101f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001045919062002d69565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200108e57600080fd5b505afa158015620010a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010c9919062002d69565b6040518363ffffffff1660e01b8152600401620010e892919062002fec565b60206040518083038186803b1580156200110157600080fd5b505afa15801562001116573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200113c919062002d69565b91506001600160a01b038216620012be57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200118757600080fd5b505afa1580156200119c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011c2919062002d69565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200120b57600080fd5b505afa15801562001220573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001246919062002d69565b6040518363ffffffff1660e01b81526004016200126592919062002fec565b602060405180830381600087803b1580156200128057600080fd5b505af115801562001295573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012bb919062002d69565b91505b602580546001600160a01b038085166001600160a01b03199283161790925560248054938316939091169290921791829055600754306000908152600b6020908152604080832095909416825293909352912055919050565b620013223362001ee8565b620013415760405162461bcd60e51b815260040162000c549062003149565b600855565b6001600160a01b03166000908152600d602052604090205460ff1690565b6200136f3362001ee8565b6200138e5760405162461bcd60e51b815260040162000c549062003149565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6001600160a01b03166000908152600e602052604090205460ff1690565b602754600160a01b900460ff1681565b620013f23362000e9d565b620014115760405162461bcd60e51b815260040162000c5490620030f2565b6040514790339082156108fc029083906000818181858888f1935050505015801562001441573d6000803e3d6000fd5b5050565b6001600160a01b03166000908152600a602052604090205490565b60085481565b6000620014733362000e9d565b620014925760405162461bcd60e51b815260040162000c5490620030f2565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190620014c390309060040162002fd8565b60206040518083038186803b158015620014dc57600080fd5b505afa158015620014f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001517919062002f32565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb906200154a908690859060040162003006565b602060405180830381600087803b1580156200156557600080fd5b505af11580156200157a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015a0919062002eda565b949350505050565b620015b33362000e9d565b620015d25760405162461bcd60e51b815260040162000c5490620030f2565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b6200160e3362000e9d565b6200162d5760405162461bcd60e51b815260040162000c5490620030f2565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6200165c3362001ee8565b6200167b5760405162461bcd60e51b815260040162000c549062003149565b60295460ff1662001694576029805460ff191660011790555b565b60105460ff1681565b600c6020526000908152604090205460ff1681565b6040805180820190915260048152632122a0a960e11b602082015290565b620016dd3362000e9d565b620016fc5760405162461bcd60e51b815260040162000c5490620030f2565b62001441828262002305565b60095481565b6027546001600160a01b031681565b6025546001600160a01b031681565b600062000de433848462001f43565b6003546001600160a01b031681565b620017553362001ee8565b620017745760405162461bcd60e51b815260040162000c549062003149565b6012899055601388905560148790556015869055620017a2866200179b89818d8d6200237f565b906200237f565b601655601785905560188490556019839055601a829055620017cc826200179b858189896200237f565b601b55601c555050505050505050565b620017e73362001ee8565b620018065760405162461bcd60e51b815260040162000c549062003149565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60116020526000908152604090205460ff1681565b620018513362000e9d565b620018705760405162461bcd60e51b815260040162000c5490620030f2565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6021546001600160a01b031681565b620018b13362000e9d565b620018d05760405162461bcd60e51b815260040162000c5490620030f2565b602480546001600160a01b0319166001600160a01b0384811691909117918290556040805163c45a015560e01b81529051929091169163c45a015591600480820192602092909190829003018186803b1580156200192d57600080fd5b505afa15801562001942573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001968919062002d69565b6003546040516364e329cb60e11b81526001600160a01b039283169263c9c65396926200199d92911690309060040162002fec565b602060405180830381600087803b158015620019b857600080fd5b505af1158015620019cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019f3919062002d69565b602580546001600160a01b0319166001600160a01b03928316179055600754306000908152600b6020908152604080832060245490951683529390529190912055801562001ae657602460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801562001a8a57600080fd5b505afa15801562001a9f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ac5919062002d69565b600380546001600160a01b0319166001600160a01b03929092169190911790555b813360405162001af69062002d3c565b62001b0392919062002fec565b604051809103906000f08015801562001b20573d6000803e3d6000fd5b50602680546001600160a01b03199081166001600160a01b039384161791829055602780549290931691161790555050565b62001b5d3362001ee8565b62001b7c5760405162461bcd60e51b815260040162000c549062003149565b602180546001600160a01b039485166001600160a01b031991821617909155602280549385169382169390931790925560238054919093169116179055565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b62001bf13362001ee8565b62001c105760405162461bcd60e51b815260040162000c549062003149565b60278054921515600160a01b0260ff60a01b1990931692909217909155602855565b62001c3d3362000e9d565b62001c5c5760405162461bcd60e51b815260040162000c5490620030f2565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6fffffffffffffffffffffffffffffffff81565b62001c9d3362000e9d565b62001cbc5760405162461bcd60e51b815260040162000c5490620030f2565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000811562001cf05750601b5462000c7b565b505060165490565b62001d033362000e9d565b62001d225760405162461bcd60e51b815260040162000c5490620030f2565b600080546001600160a01b0319166001600160a01b0383169081178255815260016020819052604091829020805460ff19169091179055517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639062001d8990839062002fd8565b60405180910390a150565b62001d9f3362001ee8565b62001dbe5760405162461bcd60e51b815260040162000c549062003149565b6001600160a01b0382166000908152600e60205260409020805460ff1916821580159190911790915562001e5b57602654604051630a5b654b60e11b81526001600160a01b03909116906314b6ca969062001e2190859060009060040162003006565b600060405180830381600087803b15801562001e3c57600080fd5b505af115801562001e51573d6000803e3d6000fd5b5050505062001441565b6026546001600160a01b038381166000908152600a602052604090819020549051630a5b654b60e11b815291909216916314b6ca969162001ea191869160040162003006565b600060405180830381600087803b15801562001ebc57600080fd5b505af115801562001ed1573d6000803e3d6000fd5b505050505050565b6024546001600160a01b031681565b6001600160a01b031660009081526001602052604090205460ff1690565b600062000de4828462003220565b6000818484111562001f3b5760405162461bcd60e51b815260040162000c54919062003065565b505050900390565b602954600090610100900460ff161562001f6c5762001f648484846200238d565b905062000de4565b60295460ff168062001f9657506001600160a01b0384166000908152600c602052604090205460ff165b62001fb55760405162461bcd60e51b815260040162000c549062003112565b6024546001600160a01b0384811660009081526011602052604081205491909216919060ff168062001ff85750816001600160a01b0316856001600160a01b0316145b9050801580156200202257506001600160a01b0385166000908152600f602052604090205460ff16155b1562002071576008546001600160a01b0386166000908152600a60205260409020546200205190869062003205565b10620020715760405162461bcd60e51b815260040162000c5490620030bb565b8080156200208157506009548410155b15620020a1576200209162002434565b15620020a157620020a162002494565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b6020808301919091526001600160a01b0389166000908152600a9091529190912054620020f591869062001f14565b6001600160a01b0387166000908152600a60205260408120919091556200211d8787620028d7565b62002129578462002136565b6200213687878762002a1e565b6001600160a01b0387166000908152600a60205260409020549091506200215e90826200237f565b6001600160a01b038088166000908152600a6020908152604080832094909455918a168152600e909152205460ff1662002207576026546001600160a01b038881166000908152600a602052604090819020549051630a5b654b60e11b815291909216916314b6ca9691620021d8918b9160040162003006565b600060405180830381600087803b158015620021f357600080fd5b505af192505050801562002205575060015b505b6001600160a01b0386166000908152600e602052604090205460ff166200229d576026546001600160a01b038781166000908152600a602052604090819020549051630a5b654b60e11b815291909216916314b6ca96916200226e918a9160040162003006565b600060405180830381600087803b1580156200228957600080fd5b505af19250505080156200229b575060015b505b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620022e291906200316e565b60405180910390a35060019695505050505050565b600062000de4828462003263565b6001600160a01b0382166000908152601160205260409020805460ff1916821580159190911790915562002357576001600160a01b0382166000908152600e60205260409020805460ff191660011790555b806200144157506001600160a01b03166000908152600e60205260409020805460ff19169055565b600062000de4828462003205565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600a90915291822054620023e091849062001f14565b6001600160a01b038086166000908152600a602052604080822093909355908516815220546200241190836200237f565b6001600160a01b0384166000908152600a60205260409020555060019392505050565b3360009081526011602052604081205460ff161580156200245d5750602954610100900460ff16155b8015620024735750602754600160a01b900460ff165b801562000e98575050602854306000908152600a6020526040902054101590565b6029805461ff0019166101001790556000620024b03062001445565b90506000620024db6020546200179b601e546200179b601f54601d546200237f90919063ffffffff16565b90506000620024f76002601d5462001f0690919063ffffffff16565b90506000620025078483620022f7565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106200255057634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526003548251911690829060019081106200259057634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260245460405163791ac94760e01b81524792919091169063791ac94790620025dc90869060009087903090429060040162003177565b600060405180830381600087803b158015620025f757600080fd5b505af11580156200260c573d6000803e3d6000fd5b505050506000620026278247620022f790919063ffffffff16565b905060006200265460026200264d896200264d601d548762002d2e90919063ffffffff16565b9062001f06565b9050600062002674886200264d601e548662002d2e90919063ffffffff16565b9050600062002694896200264d601f548762002d2e90919063ffffffff16565b90506000620026b48a6200264d6020548862002d2e90919063ffffffff16565b6000601d819055601f819055601e819055602055905082156200273757602660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200272257600080fd5b505af19350505050801562002735575060015b505b81156200277b576022546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801562002779573d6000803e3d6000fd5b505b8015620027bf576023546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015620027bd573d6000803e3d6000fd5b505b8815620028bf57602460009054906101000a90046001600160a01b03166001600160a01b031663f305d71985308c600080602160009054906101000a90046001600160a01b0316426040518863ffffffff1660e01b81526004016200282a969594939291906200301f565b6060604051808303818588803b1580156200284457600080fd5b505af115801562002859573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062002880919062002f4b565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848a604051620028b6929190620031e9565b60405180910390a15b50506029805461ff0019169055505050505050505050565b60105460009060ff161562002931576001600160a01b0383166000908152600d602052604090205460ff161580156200292957506001600160a01b0382166000908152600d602052604090205460ff16155b905062000ce7565b6024546001600160a01b0384811660009081526011602052604081205491909216919060ff1680620029745750816001600160a01b0316856001600160a01b0316145b6001600160a01b0385166000908152601160205260408120549192509060ff1680620029b15750826001600160a01b0316856001600160a01b0316145b90508180620029bd5750805b1562002a11576001600160a01b0386166000908152600d602052604090205460ff1615801562002a0657506001600160a01b0385166000908152600d602052604090205460ff16155b935050505062000ce7565b6000935050505062000ce7565b6024546001600160a01b0383811660009081526011602052604081205490929190911690829060ff168062002a645750816001600160a01b0316856001600160a01b0316145b9050600062002a738262001cdd565b9050600062002a93601c546200264d848962002d2e90919063ffffffff16565b9050811562002ca157821562002ba5576017541562002ae257816017548262002abd919062003241565b62002ac9919062003220565b601d600082825462002adc919062003205565b90915550505b6019541562002b2157816019548262002afc919062003241565b62002b08919062003220565b601f600082825462002b1b919062003205565b90915550505b6018541562002b6057816018548262002b3b919062003241565b62002b47919062003220565b601e600082825462002b5a919062003205565b90915550505b601a541562002b9f5781601a548262002b7a919062003241565b62002b86919062003220565b6020600082825462002b99919062003205565b90915550505b62002ca1565b6012541562002be457816012548262002bbf919062003241565b62002bcb919062003220565b601d600082825462002bde919062003205565b90915550505b6014541562002c2357816014548262002bfe919062003241565b62002c0a919062003220565b601f600082825462002c1d919062003205565b90915550505b6013541562002c6257816013548262002c3d919062003241565b62002c49919062003220565b601e600082825462002c5c919062003205565b90915550505b6015541562002ca157816015548262002c7c919062003241565b62002c88919062003220565b6020600082825462002c9b919062003205565b90915550505b306000908152600a602052604090205462002cbd90826200237f565b306000818152600a6020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062002d0e9085906200316e565b60405180910390a362002d228682620022f7565b98975050505050505050565b600062000de4828462003241565b6121d180620032bc83390190565b60006020828403121562002d5c578081fd5b813562000de48162003293565b60006020828403121562002d7b578081fd5b815162000de48162003293565b6000806040838503121562002d9b578081fd5b823562002da88162003293565b9150602083013562002dba8162003293565b809150509250929050565b60008060006060848603121562002dda578081fd5b833562002de78162003293565b9250602084013562002df98162003293565b9150604084013562002e0b8162003293565b809150509250925092565b60008060006060848603121562002e2b578283fd5b833562002e388162003293565b9250602084013562002e4a8162003293565b929592945050506040919091013590565b6000806040838503121562002e6e578182fd5b823562002e7b8162003293565b9150602083013562002dba81620032ac565b6000806040838503121562002ea0578182fd5b823562002ead8162003293565b946020939093013593505050565b60006020828403121562002ecd578081fd5b813562000de481620032ac565b60006020828403121562002eec578081fd5b815162000de481620032ac565b6000806040838503121562002f0c578182fd5b823562002ead81620032ac565b60006020828403121562002f2b578081fd5b5035919050565b60006020828403121562002f44578081fd5b5051919050565b60008060006060848603121562002f60578283fd5b8351925060208401519150604084015190509250925092565b60008060008060008060008060006101208a8c03121562002f98578485fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015620030935785810183015185820160400152820162003075565b81811115620030a55783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601d908201527f4d61782077616c6c657420686173206265656e20747269676765726564000000604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252601d908201527f54726164696e672069732063757272656e746c792064697361626c6564000000604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015620031c85784516001600160a01b031683529383019391830191600101620031a1565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b60ff91909116815260200190565b600082198211156200321b576200321b6200327d565b500190565b6000826200323c57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156200325e576200325e6200327d565b500290565b6000828210156200327857620032786200327d565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114620032a957600080fd5b50565b8015158114620032a957600080fdfe6080604052600380546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29081179092556004805482169092179091556011805490911673dac17f958d2ee523a2206206994597c13d831ec71790556ec097ce7bc90715b34b9f10000000006016553480156200007a57600080fd5b50604051620021d1380380620021d18339810160408190526200009d916200025b565b600080546001600160a01b0319166001600160a01b038381169182178355908252600160208190526040909220805460ff19169092179091558216620000f857737a250d5630b4cf539739df2c5dacb4c659f2488d620000fa565b815b600580546001600160a01b039283166001600160a01b031991821617909155600280549091163317905560115481166000908152600e6020526040808220805460ff1990811660019081179092557f6981a11ef3754d9b00d8868549ebf71e3d63f3e9dad47123e19ab5cdda32d36d8054821683179055736b175474e89094c44da98b954eedeac495271d0f9093527f5fe9af5f91cfc98605d0aeb168d7606a1f0945d723f233861d57da8bb2b06d1e805490931617909155600354905163095ea7b360e01b815291169063095ea7b390620001df90859060001990600401620002bb565b602060405180830381600087803b158015620001fa57600080fd5b505af11580156200020f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000235919062000292565b505050620002d4565b80516001600160a01b03811681146200025657600080fd5b919050565b600080604083850312156200026e578182fd5b62000279836200023e565b915062000289602084016200023e565b90509250929050565b600060208284031215620002a4578081fd5b81518015158114620002b4578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b611eed80620002e46000396000f3fe60806040526004361061026b5760003560e01c806389a3027111610144578063ce7c2ac2116100b6578063e2d2e2191161007a578063e2d2e21914610713578063efca2eed14610728578063f0b37c041461073d578063f2fde38b1461075d578063f854a27f1461077d578063fe9fbb801461079d57610272565b8063ce7c2ac214610687578063d0e30db0146106b6578063d63a8e11146106be578063e0bab4c4146106de578063e0f8e243146106f357610272565b8063b6a5d7de11610108578063b6a5d7de146105d2578063bcd259a8146105f2578063c161357a14610612578063c238efd514610632578063c54e44eb14610652578063ca89b8991461066757610272565b806389a30271146105485780638e4241751461055d578063929925db1461057d578063997664d71461059d578063a995bb14146105b257610272565b80633333cfc3116101dd57806363eabae9116101a157806363eabae9146104935780637088fb7f146104b35780638366e79a146104c857806383e84500146104e8578063845610ee1461050857806387f681d81461052857610272565b80633333cfc3146103fe5780633a98ef391461041e5780634782e407146104335780635881f3ef14610453578063610035a41461047357610272565b806315f7e05e1161022f57806315f7e05e146103315780631b386a42146103515780632870e95d1461037157806328fd3198146103915780632bcf161c146103b15780632f54bf6e146103d157610272565b806302c4aede146102775780630300f925146102ad578063061ad62a146102da57806311ce023d146102fa57806314b6ca961461030f57610272565b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004611b77565b6107bd565b6040516102a49190611c97565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004611b93565b6107d8565b6040516102a49190611df1565b3480156102e657600080fd5b506102976102f5366004611b77565b6107f5565b34801561030657600080fd5b506102cd610810565b34801561031b57600080fd5b5061032f61032a366004611c38565b610816565b005b34801561033d57600080fd5b5061032f61034c366004611b77565b6109a4565b34801561035d57600080fd5b506102cd61036c366004611b93565b6109b1565b34801561037d57600080fd5b5061032f61038c366004611b77565b6109dc565b34801561039d57600080fd5b506102cd6103ac366004611b77565b610a30565b3480156103bd57600080fd5b506102cd6103cc366004611b77565b610abc565b3480156103dd57600080fd5b506103f16103ec366004611b77565b610ad7565b6040516102a49190611cc4565b34801561040a57600080fd5b5061032f610419366004611c0b565b610aeb565b34801561042a57600080fd5b506102cd610b44565b34801561043f57600080fd5b5061032f61044e366004611b77565b610b4a565b34801561045f57600080fd5b5061032f61046e366004611b77565b610b91565b34801561047f57600080fd5b506103f161048e366004611b77565b610bd8565b34801561049f57600080fd5b5061032f6104ae366004611c0b565b610bf6565b3480156104bf57600080fd5b5061032f610c2e565b3480156104d457600080fd5b506103f16104e3366004611b93565b610c86565b3480156104f457600080fd5b5061032f610503366004611b93565b610de0565b34801561051457600080fd5b5061032f610523366004611b77565b610e33565b34801561053457600080fd5b5061032f610543366004611b77565b610e7a565b34801561055457600080fd5b50610297610ec8565b34801561056957600080fd5b506103f1610578366004611b93565b610ee0565b34801561058957600080fd5b506103f1610598366004611b93565b610f0e565b3480156105a957600080fd5b506102cd610f2e565b3480156105be57600080fd5b5061032f6105cd366004611b93565b610f34565b3480156105de57600080fd5b5061032f6105ed366004611b77565b610fe0565b3480156105fe57600080fd5b5061032f61060d366004611b93565b61102c565b34801561061e57600080fd5b5061032f61062d366004611bcb565b611079565b34801561063e57600080fd5b5061029761064d366004611b77565b611124565b34801561065e57600080fd5b50610297611142565b34801561067357600080fd5b506102cd610682366004611b77565b611151565b34801561069357600080fd5b506106a76106a2366004611b77565b611163565b6040516102a493929190611dfa565b61032f611184565b3480156106ca57600080fd5b506103f16106d9366004611b77565b6111da565b3480156106ea57600080fd5b506102976111ef565b3480156106ff57600080fd5b5061032f61070e366004611b77565b611207565b34801561071f57600080fd5b506102cd61124e565b34801561073457600080fd5b506102cd611254565b34801561074957600080fd5b5061032f610758366004611b77565b61125a565b34801561076957600080fd5b5061032f610778366004611b77565b6112a0565b34801561078957600080fd5b506103f1610798366004611b77565b611335565b3480156107a957600080fd5b506103f16107b8366004611b77565b61134a565b600d602052600090815260409020546001600160a01b031681565b600a60209081526000928352604080842090915290825290205481565b600f602052600090815260409020546001600160a01b031681565b60165481565b6002546001600160a01b0316331461082d57600080fd5b6001600160a01b038216600090815260106020526040902054156108bd576001600160a01b038083166000908152600f60209081526040808320549093168252600e9052205460ff16156108a6576001600160a01b038083166000908152600f60205260409020546108a191849116611368565b6108bd565b6011546108bd9083906001600160a01b0316611368565b6000811180156108e357506001600160a01b038216600090815260106020526040902054155b156108f6576108f18261196f565b610929565b8015801561091b57506001600160a01b03821660009081526010602052604090205415155b1561092957610929826119d0565b6001600160a01b03821660009081526010602052604090205460125461095a91839161095491611b1d565b90611b30565b6012556001600160a01b038216600090815260106020526040902081905561098181611b3c565b6001600160a01b0390921660009081526010602052604090206001019190915550565b6109ae3382611368565b50565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b6001600160a01b0381166000908152600e602052604090205460ff16610a0157600080fd5b336000908152600f6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260106020526040812054610a5557506000610ab7565b6001600160a01b038216600090815260106020526040812054610a7790611b3c565b6001600160a01b038416600090815260106020526040902060010154909150808211610aa857600092505050610ab7565b610ab28282611b1d565b925050505b919050565b6001600160a01b031660009081526009602052604090205490565b6000546001600160a01b0390811691161490565b610af433610ad7565b610b195760405162461bcd60e51b8152600401610b1090611dd1565b60405180910390fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60125481565b610b5333610ad7565b610b6f5760405162461bcd60e51b8152600401610b1090611dd1565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b610b9a33610ad7565b610bb65760405162461bcd60e51b8152600401610b1090611dd1565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03166000908152600e602052604090205460ff1690565b336000908152600b602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b610c3733610ad7565b610c535760405162461bcd60e51b8152600401610b1090611dd1565b6040514790339082156108fc029083906000818181858888f19350505050158015610c82573d6000803e3d6000fd5b5050565b6000610c9133610ad7565b610cad5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b038316301415610cd65760405162461bcd60e51b8152600401610b1090611d38565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190610d05903090600401611c97565b60206040518083038186803b158015610d1d57600080fd5b505afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190611c7f565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb90610d869086908590600401611cab565b602060405180830381600087803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd89190611c63565b949350505050565b610de933610ad7565b610e055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b039182166000908152600d6020526040902080546001600160a01b03191691909216179055565b610e3c33610ad7565b610e585760405162461bcd60e51b8152600401610b1090611dd1565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610e8333610ad7565b610e9f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600e60205260409020805460ff19811660ff90911615179055565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b600b60209081526000928352604080842090915290825290205460ff1681565b60135481565b610f3d33610ad7565b610f595760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610f8990849060001990600401611cab565b602060405180830381600087803b158015610fa357600080fd5b505af1158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190611c63565b505050565b610fe933610ad7565b6110055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6001600160a01b0382166000908152600b6020908152604080832033845290915290205460ff1661106f5760405162461bcd60e51b8152600401610b1090611da6565b610c828282611368565b61108233610ad7565b61109e5760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0384169063095ea7b3906110cc9085908590600401611cab565b602060405180830381600087803b1580156110e657600080fd5b505af11580156110fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e9190611c63565b50505050565b6001600160a01b039081166000908152600d60205260409020541690565b6011546001600160a01b031681565b60096020526000908152604090205481565b60106020526000908152604090208054600182015460029092015490919083565b6002546001600160a01b0316331461119b57600080fd5b60135434906111aa9082611b30565b6013556012546016546111d4916111cb916111c59085611b5f565b90611b6b565b60155490611b30565b60155550565b600e6020526000908152604090205460ff1681565b736b175474e89094c44da98b954eedeac495271d0f81565b61121033610ad7565b61122c5760405162461bcd60e51b8152600401610b1090611dd1565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60155481565b60145481565b61126333610ad7565b61127f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6112a933610ad7565b6112c55760405162461bcd60e51b8152600401610b1090611dd1565b600080546001600160a01b0319166001600160a01b0383169081178255815260016020819052604091829020805460ff19169091179055517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639061132a908390611c97565b60405180910390a150565b600c6020526000908152604090205460ff1681565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b0381166000908152600e602052604090205460ff166113a05760405162461bcd60e51b8152600401610b1090611d6f565b6001600160a01b0382166000908152601060205260409020546113c257610c82565b60006113cd83610a30565b90508015610fdb576014546113e29082611b30565b6014556001600160a01b038316600090815260086020908152604080832042905560109091529020600201546114189082611b30565b6001600160a01b038416600090815260106020526040902060028101919091555461144290611b3c565b6001600160a01b0380851660009081526010602052604090206001019190915560035483821691161415611531576040516001600160a01b0384169082156108fc029083906000818181858888f193505050501580156114a6573d6000803e3d6000fd5b506001600160a01b0382166000908152600960205260409020546114ca9082611b30565b6001600160a01b03808416600090815260096020908152604080832094909455600a815283822092871682529190915220546115069082611b30565b6001600160a01b038084166000908152600a6020908152604080832093881683529290522055610fdb565b6040516370a0823160e01b815282906000906001600160a01b038316906370a0823190611562908890600401611c97565b60206040518083038186803b15801561157a57600080fd5b505afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190611c7f565b6001600160a01b038581166000908152600d6020526040902054919250166116e357604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b03169183915060009061162357634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061166557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de959086906116ab9060009086908c904290600401611ccf565b6000604051808303818588803b1580156116c457600080fd5b505af11580156116d8573d6000803e3d6000fd5b505050505050611842565b6040805160038082526080820190925260009160208201606080368337505060035482519293506001600160a01b03169183915060009061173457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091528682166000908152600d909152604090205482519116908290600190811061178657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505084816002815181106117c857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de9590869061180e9060009086908c904290600401611ccf565b6000604051808303818588803b15801561182757600080fd5b505af115801561183b573d6000803e3d6000fd5b5050505050505b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611871908990600401611c97565b60206040518083038186803b15801561188957600080fd5b505afa15801561189d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c19190611c7f565b90506118ef6118d08284611b1d565b6001600160a01b03871660009081526009602052604090205490611b30565b6001600160a01b0386166000908152600960205260409020556119416119158284611b1d565b6001600160a01b038088166000908152600a60209081526040808320938c168352929052205490611b30565b6001600160a01b038087166000908152600a60209081526040808320938b1683529290522055505050505050565b600680546001600160a01b039092166000818152600760205260408120849055600184018355919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b0319169091179055565b600680546119e090600190611e67565b815481106119fe57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0384811684526007909252604090922054600680549290931692918110611a4a57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260079182905260408120546006805491939291611a9690600190611e67565b81548110611ab457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020556006805480611af857634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000611b298284611e67565b9392505050565b6000611b298284611e10565b6000611b596016546111c560155485611b5f90919063ffffffff16565b92915050565b6000611b298284611e48565b6000611b298284611e28565b600060208284031215611b88578081fd5b8135611b2981611e94565b60008060408385031215611ba5578081fd5b8235611bb081611e94565b91506020830135611bc081611e94565b809150509250929050565b600080600060608486031215611bdf578081fd5b8335611bea81611e94565b92506020840135611bfa81611e94565b929592945050506040919091013590565b60008060408385031215611c1d578182fd5b8235611c2881611e94565b91506020830135611bc081611ea9565b60008060408385031215611c4a578182fd5b8235611c5581611e94565b946020939093013593505050565b600060208284031215611c74578081fd5b8151611b2981611ea9565b600060208284031215611c90578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611d185784516001600160a01b031683529383019391830191600101611cf3565b50506001600160a01b039690961660408501525050506060015292915050565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b60208082526017908201527f496e76616c696420726577617264206164647265737321000000000000000000604082015260600190565b602080825260119082015270165bdd4818d85b89dd08191bc81d1a185d607a1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b60008219821115611e2357611e23611e7e565b500190565b600082611e4357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611e6257611e62611e7e565b500290565b600082821015611e7957611e79611e7e565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146109ae57600080fd5b80151581146109ae57600080fdfea2646970667358221220835c9b56ef4e7c9376412755942667be3327b9823b81b8a823d7531305648bba64736f6c63430008000033a26469706673582212207733c8f89dbea84fd9573b60a2f73e30d52715aa6b9b264fcbbd80c51c25060e64736f6c63430008000033

Deployed Bytecode Sourcemap

17338:18538:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19174:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21006:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;33112:129::-;;;;;;;;;;-1:-1:-1;33112:129:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21428:241::-;;;;;;;;;;-1:-1:-1;21428:241:0;;;;;:::i;:::-;;:::i;31515:137::-;;;;;;;;;;-1:-1:-1;31515:137:0;;;;;:::i;:::-;;:::i;:::-;;20736:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22007:401::-;;;;;;;;;;-1:-1:-1;22007:401:0;;;;;:::i;:::-;;:::i;34765:118::-;;;;;;;;;;-1:-1:-1;34765:118:0;;;;;:::i;:::-;;:::i;18371:40::-;;;;;;;;;;-1:-1:-1;18371:40:0;;;;;:::i;:::-;;:::i;19262:47::-;;;;;;;;;;;;;:::i;35084:142::-;;;;;;;;;;;;;:::i;4617:103::-;;;;;;;;;;-1:-1:-1;4617:103:0;;;;;:::i;:::-;;:::i;20830:80::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;32994:110::-;;;;;;;;;;-1:-1:-1;32994:110:0;;;;;:::i;:::-;;:::i;31660:134::-;;;;;;;;;;-1:-1:-1;31660:134:0;;;;;:::i;:::-;;:::i;32436:140::-;;;;;;;;;;-1:-1:-1;32436:140:0;;;;;:::i;:::-;;:::i;18264:44::-;;;;;;;;;;-1:-1:-1;18264:44:0;;;;;:::i;:::-;;:::i;18315:49::-;;;;;;;;;;-1:-1:-1;18315:49:0;;;;;:::i;:::-;;:::i;19569:34::-;;;;;;;;;;;;;:::i;21677:133::-;;;;;;;;;;-1:-1:-1;21677:133:0;;;;;:::i;:::-;;:::i;35238:571::-;;;;;;;;;;-1:-1:-1;35238:571:0;;;;;:::i;:::-;;:::i;31395:112::-;;;;;;;;;;-1:-1:-1;31395:112:0;;;;;:::i;:::-;;:::i;32737:130::-;;;;;;;;;;-1:-1:-1;32737:130:0;;;;;:::i;:::-;;:::i;32584:145::-;;;;;;;;;;-1:-1:-1;32584:145:0;;;;;:::i;:::-;;:::i;32125:140::-;;;;;;;;;;-1:-1:-1;32125:140:0;;;;;:::i;:::-;;:::i;19457:30::-;;;;;;;;;;;;;:::i;30237:142::-;;;;;;;;;;;;;:::i;21176:105::-;;;;;;;;;;-1:-1:-1;21176:105:0;;;;;:::i;:::-;;:::i;17986:48::-;;;;;;;;;;;;;:::i;31113:274::-;;;;;;;;;;-1:-1:-1;31113:274:0;;;;;:::i;:::-;;:::i;30387:101::-;;;;;;;;;;-1:-1:-1;30387:101:0;;;;;:::i;:::-;;:::i;21092:78::-;;;;;;;;;;;;;:::i;32875:107::-;;;;;;;;;;-1:-1:-1;32875:107:0;;;;;:::i;:::-;;:::i;34625:132::-;;;;;;;;;;;;;:::i;18420:42::-;;;;;;;;;;;;;:::i;18208:49::-;;;;;;;;;;-1:-1:-1;18208:49:0;;;;;:::i;:::-;;:::i;20916:84::-;;;;;;;;;;;;;:::i;27153:167::-;;;;;;;;;;-1:-1:-1;27153:167:0;;;;;:::i;:::-;;:::i;18043:41::-;;;;;;;;;;;;;:::i;19415:33::-;;;;;;;;;;;;;:::i;19349:19::-;;;;;;;;;;;;;:::i;21818:181::-;;;;;;;;;;-1:-1:-1;21818:181:0;;;;;:::i;:::-;;:::i;17529:64::-;;;;;;;;;;;;;:::i;33249:1012::-;;;;;;;;;;-1:-1:-1;33249:1012:0;;;;;:::i;:::-;;:::i;32273:155::-;;;;;;;;;;-1:-1:-1;32273:155:0;;;;;:::i;:::-;;:::i;18471:58::-;;;;;;;;;;-1:-1:-1;18471:58:0;;;;;:::i;:::-;;:::i;4290:94::-;;;;;;;;;;-1:-1:-1;4290:94:0;;;;;:::i;:::-;;:::i;19086:81::-;;;;;;;;;;;;;:::i;30605:500::-;;;;;;;;;;-1:-1:-1;30605:500:0;;;;;:::i;:::-;;:::i;34269:348::-;;;;;;;;;;-1:-1:-1;34269:348:0;;;;;:::i;:::-;;:::i;21287:133::-;;;;;;;;;;-1:-1:-1;21287:133:0;;;;;:::i;:::-;;:::i;34891:185::-;;;;;;;;;;-1:-1:-1;34891:185:0;;;;;:::i;:::-;;:::i;30496:101::-;;;;;;;;;;-1:-1:-1;30496:101:0;;;;;:::i;:::-;;:::i;17410:48::-;;;;;;;;;;;;;:::i;4460:97::-;;;;;;;;;;-1:-1:-1;4460:97:0;;;;;:::i;:::-;;:::i;24853:187::-;;;;;;;;;;-1:-1:-1;24853:187:0;;;;;:::i;:::-;;:::i;5017:173::-;;;;;;;;;;-1:-1:-1;5017:173:0;;;;;:::i;:::-;;:::i;31802:315::-;;;;;;;;;;-1:-1:-1;31802:315:0;;;;;:::i;:::-;;:::i;19318:24::-;;;;;;;;;;;;;:::i;4791:107::-;;;;;;;;;;-1:-1:-1;4791:107:0;;;;;:::i;:::-;;:::i;19174:81::-;;;-1:-1:-1;;;;;19174:81:0;;:::o;21006:80::-;21078:5;;;;;;;;;;;;-1:-1:-1;;;21078:5:0;;;;21006:80;:::o;33112:129::-;33194:4;4006:19;4014:10;4006:7;:19::i;:::-;3998:38;;;;-1:-1:-1;;;3998:38:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;;33218:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;::::1;;4038:1;33112:129:::0;;;:::o;21428:241::-;21557:10;21528:4;21545:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;21545:32:0;;;;;;;;;;:41;;;21602:37;21528:4;;21545:32;;21602:37;;;;21580:6;;21602:37;:::i;:::-;;;;;;;;-1:-1:-1;21657:4:0;21428:241;;;;;:::o;31515:137::-;4175:24;4188:10;4175:12;:24::i;:::-;4167:48;;;;-1:-1:-1;;;4167:48:0;;;;;;;:::i;:::-;31613:22:::1;:31:::0;31515:137::o;20736:88::-;20809:12;;20736:88;:::o;22007:401::-;22197:12;;-1:-1:-1;;;;;22162:19:0;;22141:4;22162:19;;;:11;:19;;;;;;;;22182:10;22162:31;;;;;;;;22141:4;;22162:47;22158:183;;22260:69;;;;;;;;;;;-1:-1:-1;;;22260:69:0;;;;;;;;-1:-1:-1;;;;;22260:19:0;;-1:-1:-1;22260:19:0;;;:11;:19;;;;;22280:10;22260:31;;;;;;;;;;:69;;22296:6;;22260:35;:69::i;:::-;-1:-1:-1;;;;;22226:19:0;;;;;;:11;:19;;;;;;;;22246:10;22226:31;;;;;;;:103;22158:183;22360:40;22374:6;22382:9;22393:6;22360:13;:40::i;:::-;22353:47;;22007:401;;;;;;:::o;34765:118::-;4175:24;4188:10;4175:12;:24::i;:::-;4167:48;;;;-1:-1:-1;;;4167:48:0;;;;;;;:::i;:::-;34850:14:::1;:25:::0;;-1:-1:-1;;34850:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34765:118::o;18371:40::-;;;;;;;;;;;;;;;:::o;19262:47::-;;;-1:-1:-1;;;;;19262:47:0;;:::o;35084:142::-;35212:4;;35137:7;;35164:54;;35202:15;;-1:-1:-1;;;;;35212:4:0;35202:9;:15::i;:::-;35191:4;;35164:33;;35181:15;;-1:-1:-1;;;;;35191:4:0;35181:9;:15::i;:::-;35164:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;35157:61;;35084:142;:::o;4617:103::-;4672:4;4707:5;-1:-1:-1;;;;;4707:5:0;;;4696:16;;;;4617:103::o;20830:80::-;17916:1;20830:80;:::o;32994:110::-;4006:19;4014:10;4006:7;:19::i;:::-;3998:38;;;;-1:-1:-1;;;3998:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33073:15:0::1;33091:5;33073:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;33073:23:0::1;::::0;;32994:110::o;31660:134::-;4175:24;4188:10;4175:12;:24::i;:::-;4167:48;;;;-1:-1:-1;;;4167:48:0;;;;;;;:::i;:::-;31755:22:::1;:31:::0;;-1:-1:-1;;31755:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31660:134::o;32436:140::-;-1:-1:-1;;;;;32544:24:0;32520:4;32544:24;;;:16;:24;;;;;;;;;32436:140::o;18264:44::-;;;;;;;;;;;;;;;:::o;18315:49::-;;;;;;;;;;;;;;;:::o;19569:34::-;;;;;;:::o;21677:133::-;21748:4;21772:30;21780:7;21789:12;;21772:7;:30::i;35238:571::-;35328:13;4006:19;4014:10;4006:7;:19::i;:::-;3998:38;;;;-1:-1:-1;;;3998:38:0;;;;;;;:::i;:::-;35354:27:::1;35395:7;35354:49;;35436:16;-1:-1:-1::0;;;;;35436:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35424:47:0::1;;35480:4;35487:16;-1:-1:-1::0;;;;;35487:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35424:87;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35416:95:::0;-1:-1:-1;;;;;;35526:19:0;::::1;35522:150;;35582:16;-1:-1:-1::0;;;;;35582:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35570:50:0::1;;35629:4;35636:16;-1:-1:-1::0;;;;;35636:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35570:90;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35562:98;;35522:150;35682:4;:12:::0;;-1:-1:-1;;;;;35682:12:0;;::::1;-1:-1:-1::0;;;;;;35682:12:0;;::::1;;::::0;;;35707:6:::1;:25:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;35789:12:::1;::::0;35763:4:::1;35682;35743:26:::0;;;:11:::1;:26;::::0;;;;;;;35778:6;;;::::1;35743:43:::0;;;;;;;;:58;35689:5;35238:571;-1:-1:-1;35238:571:0:o;31395:112::-;4175:24;4188:10;4175:12;:24::i;:::-;4167:48;;;;-1:-1:-1;;;4167:48:0;;;;;;;:::i;:::-;31480:10:::1;:19:::0;31395:112::o;32737:130::-;-1:-1:-1;;;;;32840:19:0;32816:4;32840:19;;;:11;:19;;;;;;;;;32737:130::o;32584:145::-;4175:24;4188:10;4175:12;:24::i;:::-;4167:48;;;;-1:-1:-1;;;4167:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32693:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;32693:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32584:145::o;32125:140::-;-1:-1:-1;;;;;32233:24:0;32209:4;32233:24;;;:16;:24;;;;;;;;;32125:140::o;19457:30::-;;;-1:-1:-1;;;19457:30:0;;;;;:::o;30237:142::-;4006:19;4014:10;4006:7;:19::i;:::-;3998:38;;;;-1:-1:-1;;;3998:38:0;;;;;;;:::i;:::-;30334:37:::1;::::0;30302:21:::1;::::0;30342:10:::1;::::0;30334:37;::::1;;;::::0;30302:21;;30284:15:::1;30334:37:::0;30284:15;30334:37;30302:21;30342:10;30334:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;4038:1;30237:142::o:0;21176:105::-;-1:-1:-1;;;;;21260:18:0;21242:7;21260:18;;;:9;:18;;;;;;;21176:105::o;17986:48::-;;;;:::o;31113:274::-;31225:10;4006:19;4014:10;4006:7;:19::i;:::-;3998:38;;;;-1:-1:-1;;;3998:38:0;;;;;;;:::i;:::-;31275:39:::1;::::0;-1:-1:-1;;;31275:39:0;;31248:24:::1;::::0;-1:-1:-1;;;;;31275:24:0;::::1;::::0;::::1;::::0;:39:::1;::::0;31308:4:::1;::::0;31275:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31333:46;::::0;-1:-1:-1;;;31333:46:0;;31248:66;;-1:-1:-1;;;;;;31333:23:0;::::1;::::0;::::1;::::0;:46:::1;::::0;31357:3;;31248:66;;31333:46:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31325:54:::0;31113:274;-1:-1:-1;;;;31113:274:0:o;30387:101::-;4006:19;4014:10;4006:7;:19::i;:::-;3998:38;;;;-1:-1:-1;;;3998:38:0;;;;;;;:::i;:::-;30468:4:::1;:12:::0;;-1:-1:-1;;;;;;30468:12:0::1;-1:-1:-1::0;;;;;30468:12:0;;;::::1;::::0;;;::::1;::::0;;30387:101::o;21092:78::-;21144:7;21162:5;-1:-1:-1;;;;;21162:5:0;21092:78;:::o;32875:107::-;4006:19;4014:10;4006:7;:19::i;:::-;3998:38;;;;-1:-1:-1;;;3998:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32952:15:0::1;;::::0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;32952:22:0::1;32970:4;32952:22;::::0;;32875:107::o;34625:132::-;4175:24;4188:10;4175:12;:24::i;:::-;4167:48;;;;-1:-1:-1;;;4167:48:0;;;;;;;:::i;:::-;34686:14:::1;::::0;::::1;;34681:69;;34717:14;:21:::0;;-1:-1:-1;;34717:21:0::1;34734:4;34717:21;::::0;;34681:69:::1;34625:132::o:0;18420:42::-;;;;;;:::o;18208:49::-;;;;;;;;;;;;;;;:::o;20916:84::-;20990:7;;;;;;;;;;;;-1:-1:-1;;;20990:7:0;;;;20916:84;:::o;27153:167::-;4006:19;4014:10;4006:7;:19::i;:::-;3998:38;;;;-1:-1:-1;;;3998:38:0;;;;;;;:::i;:::-;27270:42:::1;27299:5;27306;27270:28;:42::i;18043:41::-:0;;;;:::o;19415:33::-;;;-1:-1:-1;;;;;19415:33:0;;:::o;19349:19::-;;;-1:-1:-1;;;;;19349:19:0;;:::o;21818:181::-;21923:4;21947:44;21961:10;21973:9;21984:6;21947:13;:44::i;17529:64::-;;;-1:-1:-1;;;;;17529:64:0;;:::o;33249:1012::-;4175:24;4188:10;4175:12;:24::i;:::-;4167:48;;;;-1:-1:-1;;;4167:48:0;;;;;;;:::i;:::-;33624:15:::1;:34:::0;;;33669:16:::1;:36:::0;;;33716:16:::1;:36:::0;;;33763:14:::1;:32:::0;;;33820:83:::1;33780:15:::0;33820:62:::1;33735:17:::0;33820:62;33642:16;33688:17;33820:20:::1;:39::i;:::-;:43:::0;::::1;:62::i;:83::-;33806:11;:97:::0;33916:16:::1;:36:::0;;;33963:17:::1;:38:::0;;;34012:17:::1;:38:::0;;;34061:15:::1;:34:::0;;;34121:87:::1;34079:16:::0;34121:65:::1;34032:18:::0;34121:65;33935:17;33983:18;34121:21:::1;:41::i;:87::-;34106:12;:102:::0;34221:14:::1;:32:::0;-1:-1:-1;;;;;;;;33249:1012:0:o;32273:155::-;4175:24;4188:10;4175:12;:24::i;:::-;4167:48;;;;-1:-1:-1;;;4167:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32387:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;32387:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32273:155::o;18471:58::-;;;;;;;;;;;;;;;:::o;4290:94::-;4006:19;4014:10;4006:7;:19::i;:::-;3998:38;;;;-1:-1:-1;;;3998:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4350:19:0::1;;::::0;;;4372:4:::1;4350:19;::::0;;;;;;;:26;;-1:-1:-1;;4350:26:0::1;::::0;;::::1;::::0;;4290:94::o;19086:81::-;;;-1:-1:-1;;;;;19086:81:0;;:::o;30605:500::-;4006:19;4014:10;4006:7;:19::i;:::-;3998:38;;;;-1:-1:-1;;;3998:38:0;;;;;;;:::i;:::-;30729:6:::1;:28:::0;;-1:-1:-1;;;;;;30729:28:0::1;-1:-1:-1::0;;;;;30729:28:0;;::::1;::::0;;;::::1;::::0;;;;30787:16:::1;::::0;;-1:-1:-1;;;30787:16:0;;;;:6;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:6;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30816:4;::::0;30775:61:::1;::::0;-1:-1:-1;;;30775:61:0;;-1:-1:-1;;;;;30775:40:0;;::::1;::::0;::::1;::::0;:61:::1;::::0;30816:4;::::1;::::0;30830::::1;::::0;30775:61:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30768:4;:68:::0;;-1:-1:-1;;;;;;30768:68:0::1;-1:-1:-1::0;;;;;30768:68:0;;::::1;;::::0;;30893:12:::1;::::0;30867:4:::1;-1:-1:-1::0;30847:26:0;;;:11:::1;:26;::::0;;;;;;;30882:6:::1;::::0;;;::::1;30847:43:::0;;;;;;;;;:58;30916:61;::::1;;;30952:6;;;;;;;;;-1:-1:-1::0;;;;;30952:6:0::1;-1:-1:-1::0;;;;;30952:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30945:4;:20:::0;;-1:-1:-1;;;;;;30945:20:0::1;-1:-1:-1::0;;;;;30945:20:0;;;::::1;::::0;;;::::1;::::0;;30916:61:::1;31025:7;31034:10;31001:44;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;30987:11:0::1;:58:::0;;-1:-1:-1;;;;;;30987:58:0;;::::1;-1:-1:-1::0;;;;;30987:58:0;;::::1;;::::0;;;;31056:18:::1;:41:::0;;31085:11;;;::::1;31056:41:::0;::::1;;::::0;;-1:-1:-1;;30605:500:0:o;34269:348::-;4175:24;4188:10;4175:12;:24::i;:::-;4167:48;;;;-1:-1:-1;;;4167:48:0;;;;;;;:::i;:::-;34453:21:::1;:46:::0;;-1:-1:-1;;;;;34453:46:0;;::::1;-1:-1:-1::0;;;;;;34453:46:0;;::::1;;::::0;;;34510:21:::1;:46:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;34567:19:::1;:42:::0;;;;;::::1;::::0;::::1;;::::0;;34269:348::o;21287:133::-;-1:-1:-1;;;;;21389:19:0;;;21371:7;21389:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;21287:133::o;34891:185::-;4175:24;4188:10;4175:12;:24::i;:::-;4167:48;;;;-1:-1:-1;;;4167:48:0;;;;;;;:::i;:::-;35008:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;35008:22:0::1;-1:-1:-1::0;;;;35008:22:0;;::::1;::::0;;;::::1;::::0;;;35041:17:::1;:27:::0;34891:185::o;30496:101::-;4006:19;4014:10;4006:7;:19::i;:::-;3998:38;;;;-1:-1:-1;;;3998:38:0;;;;;;;:::i;:::-;30577:4:::1;:12:::0;;-1:-1:-1;;;;;;30577:12:0::1;-1:-1:-1::0;;;;;30577:12:0;;;::::1;::::0;;;::::1;::::0;;30496:101::o;17410:48::-;17441:17;17410:48;:::o;4460:97::-;4006:19;4014:10;4006:7;:19::i;:::-;3998:38;;;;-1:-1:-1;;;3998:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4522:19:0::1;4544:5;4522:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;4522:27:0::1;::::0;;4460:97::o;24853:187::-;24925:7;24949;24945:59;;;-1:-1:-1;24980:12:0;;24973:19;;24945:59;-1:-1:-1;;25021:11:0;;;24853:187::o;5017:173::-;4006:19;4014:10;4006:7;:19::i;:::-;3998:38;;;;-1:-1:-1;;;3998:38:0;;;;;;;:::i;:::-;5093:5:::1;:11:::0;;-1:-1:-1;;;;;;5093:11:0::1;-1:-1:-1::0;;;;;5093:11:0;::::1;::::0;;::::1;::::0;;5115:19;;-1:-1:-1;5115:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;5115:26:0::1;::::0;;::::1;::::0;;5157:25;::::1;::::0;::::1;::::0;5093:11;;5157:25:::1;:::i;:::-;;;;;;;;5017:173:::0;:::o;31802:315::-;4175:24;4188:10;4175:12;:24::i;:::-;4167:48;;;;-1:-1:-1;;;4167:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31916:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;31916:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;31960:150:::1;;31987:11;::::0;:31:::1;::::0;-1:-1:-1;;;31987:31:0;;-1:-1:-1;;;;;31987:11:0;;::::1;::::0;:20:::1;::::0;:31:::1;::::0;32008:6;;31987:11:::1;::::0;:31:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31960:150;;;32051:11;::::0;-1:-1:-1;;;;;32080:17:0;;::::1;32051:11;32080:17:::0;;;:9:::1;:17;::::0;;;;;;;32051:47;;-1:-1:-1;;;32051:47:0;;:11;;;::::1;::::0;:20:::1;::::0;:47:::1;::::0;32072:6;;32051:47:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31802:315:::0;;:::o;19318:24::-;;;-1:-1:-1;;;;;19318:24:0;;:::o;4791:107::-;-1:-1:-1;;;;;4871:19:0;4847:4;4871:19;;;:14;:19;;;;;;;;;4791:107::o;1892:98::-;1950:7;1977:5;1981:1;1977;:5;:::i;2104:206::-;2190:7;2251:12;2243:6;;;;2235:29;;;;-1:-1:-1;;;2235:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2286:5:0;;;2104:206::o;22416:1423::-;22563:6;;22542:4;;22563:6;;;;;22559:87;;;22593:41;22608:6;22616:9;22627:6;22593:14;:41::i;:::-;22586:48;;;;22559:87;22666:14;;;;;:42;;-1:-1:-1;;;;;;22684:24:0;;;;;;:16;:24;;;;;;;;22666:42;22658:84;;;;-1:-1:-1;;;22658:84:0;;;;;;;:::i;:::-;22787:6;;-1:-1:-1;;;;;22819:36:0;;;22755:21;22819:36;;;:25;:36;;;;;;22787:6;;;;;22755:21;22819:36;;;:66;;;22872:13;-1:-1:-1;;;;;22859:26:0;:9;-1:-1:-1;;;;;22859:26:0;;22819:66;22805:80;;22903:6;22902:7;:30;;;;-1:-1:-1;;;;;;22914:18:0;;;;;;:7;:18;;;;;;;;22913:19;22902:30;22898:149;;;22991:10;;-1:-1:-1;;;;;22958:20:0;;;;;;:9;:20;;;;;;:29;;22981:6;;22958:29;:::i;:::-;22957:44;22949:86;;;;-1:-1:-1;;;22949:86:0;;;;;;;:::i;:::-;23063:6;:42;;;;;23083:22;;23073:6;:32;;23063:42;23059:141;;;23126:16;:14;:16::i;:::-;23122:67;;;23163:10;:8;:10::i;:::-;23232:53;;;;;;;;;;;-1:-1:-1;;;23232:53:0;;;;;;;;-1:-1:-1;;;;;23232:17:0;;-1:-1:-1;23232:17:0;;;:9;:17;;;;;;;;:53;;23254:6;;23232:21;:53::i;:::-;-1:-1:-1;;;;;23212:17:0;;;;;;:9;:17;;;;;:73;;;;23323:32;23222:6;23345:9;23323:13;:32::i;:::-;:78;;23395:6;23323:78;;;23358:34;23366:6;23374:9;23385:6;23358:7;:34::i;:::-;-1:-1:-1;;;;;23437:20:0;;;;;;:9;:20;;;;;;23298:103;;-1:-1:-1;23437:40:0;;23298:103;23437:24;:40::i;:::-;-1:-1:-1;;;;;23414:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;23495:24;;;;;:16;:24;;;;;;;23490:120;;23540:11;;-1:-1:-1;;;;;23569:17:0;;;23540:11;23569:17;;;:9;:17;;;;;;;;23540:47;;-1:-1:-1;;;23540:47:0;;:11;;;;;:20;;:47;;23561:6;;23540:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23536:63;;-1:-1:-1;;;;;23625:27:0;;;;;;:16;:27;;;;;;;;23620:129;;23673:11;;-1:-1:-1;;;;;23705:20:0;;;23673:11;23705:20;;;:9;:20;;;;;;;;23673:53;;-1:-1:-1;;;23673:53:0;;:11;;;;;:20;;:53;;23694:9;;23673:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23669:69;;23783:9;-1:-1:-1;;;;;23766:43:0;23775:6;-1:-1:-1;;;;;23766:43:0;;23794:14;23766:43;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;23827:4:0;;22416:1423;-1:-1:-1;;;;;;22416:1423:0:o;1680:98::-;1738:7;1765:5;1769:1;1765;:5;:::i;27328:315::-;-1:-1:-1;;;;;27437:32:0;;;;;;:25;:32;;;;;:40;;-1:-1:-1;;27437:40:0;;;;;;;;;;;;27488:68;;-1:-1:-1;;;;;27514:23:0;;;;;;:16;:23;;;;;:30;;-1:-1:-1;;27514:30:0;27540:4;27514:30;;;27488:68;27571:5;27566:70;;-1:-1:-1;;;;;;27593:23:0;27619:5;27593:23;;;:16;:23;;;;;:31;;-1:-1:-1;;27593:31:0;;;27328:315::o;1574:98::-;1632:7;1659:5;1663:1;1659;:5;:::i;23847:313::-;24011:53;;;;;;;;;;;-1:-1:-1;;;24011:53:0;;;;;;;;-1:-1:-1;;;;;24011:17:0;;23974:4;24011:17;;;:9;:17;;;;;;;:53;;24033:6;;24011:21;:53::i;:::-;-1:-1:-1;;;;;23991:17:0;;;;;;;:9;:17;;;;;;:73;;;;24098:20;;;;;;;:32;;24123:6;24098:24;:32::i;:::-;-1:-1:-1;;;;;24075:20:0;;;;;;:9;:20;;;;;:55;-1:-1:-1;24148:4:0;23847:313;;;;;:::o;26951:194::-;27051:10;27000:4;27025:37;;;:25;:37;;;;;;;;27024:38;:49;;;;-1:-1:-1;27067:6:0;;;;;;;27066:7;27024:49;:64;;;;-1:-1:-1;27077:11:0;;-1:-1:-1;;;27077:11:0;;;;27024:64;:113;;;;-1:-1:-1;;27120:17:0;;27110:4;27092:24;;;;:9;:24;;;;;;:45;;;26951:194::o;27651:2180::-;19661:6;:13;;-1:-1:-1;;19661:13:0;;;;;;27726:24:::1;27744:4;27726:9;:24::i;:::-;27700:50;;27761:25;27789:107;27874:21;;27789:80;27845:23;;27789:51;27816:23;;27789:22;;:26;;:51;;;;:::i;:107::-;27761:135;;27917:26;27946:29;27973:1;27946:22;;:26;;:29;;;;:::i;:::-;27917:58:::0;-1:-1:-1;27986:20:0::1;28009:39;:15:::0;27917:58;28009:19:::1;:39::i;:::-;28085:16;::::0;;28099:1:::1;28085:16:::0;;;;;::::1;::::0;;27986:62;;-1:-1:-1;28061:21:0::1;::::0;28085:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28085:16:0::1;28061:40;;28130:4;28112;28117:1;28112:7;;;;;;-1:-1:-1::0;;;28112:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;28112:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;28156:4:::1;::::0;28146:7;;28156:4;::::1;::::0;28146;;28156;;28146:7;::::1;;;-1:-1:-1::0;;;28146:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;28146:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;28229:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;28229:188:0;;28195:21:::1;::::0;28229:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;28301:12;;28171:21:::1;::::0;28344:4;;28371::::1;::::0;28391:15:::1;::::0;28229:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28430:17;28450:40;28476:13;28450:21;:25;;:40;;;;:::i;:::-;28430:60;;28503:26;28532:67;28597:1;28532:60;28574:17;28532:37;28546:22;;28532:9;:13;;:37;;;;:::i;:::-;:41:::0;::::1;:60::i;:67::-;28503:96;;28610:27;28640:61;28683:17;28640:38;28654:23;;28640:9;:13;;:38;;;;:::i;:61::-;28610:91;;28712:27;28742:61;28785:17;28742:38;28756:23;;28742:9;:13;;:38;;;;:::i;:61::-;28712:91;;28814:25;28842:59;28883:17;28842:36;28856:21;;28842:9;:13;;:36;;;;:::i;:59::-;28947:1;28922:22;:26:::0;;;28959:23:::1;:27:::0;;;28997:23:::1;:27:::0;;;29035:21:::1;:25:::0;28814:87;-1:-1:-1;29077:23:0;;29073:120:::1;;29121:11;;;;;;;;;-1:-1:-1::0;;;;;29121:11:0::1;-1:-1:-1::0;;;;;29121:19:0::1;;29148;29121:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;29117:65:::0;::::1;29207:23:::0;;29203:116:::1;;29255:21;::::0;29247:60:::1;::::0;-1:-1:-1;;;;;29255:21:0;;::::1;::::0;29247:60;::::1;;;::::0;29287:19;;29255:21:::1;29247:60:::0;29255:21;29247:60;29287:19;29255:21;29247:60;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29203:116;29333:21:::0;;29329:110:::1;;29379:19;::::0;29371:56:::1;::::0;-1:-1:-1;;;;;29379:19:0;;::::1;::::0;29371:56;::::1;;;::::0;29409:17;;29379:19:::1;29371:56:::0;29379:19;29371:56;29409:17;29379:19;29371:56;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29329:110;29455:22:::0;;29451:373:::1;;29494:6;;;;;;;;;-1:-1:-1::0;;;;;29494:6:0::1;-1:-1:-1::0;;;;;29494:22:0::1;;29524:18;29570:4;29594:18;29631:1;29651::::0;29671:21:::1;;;;;;;;;-1:-1:-1::0;;;;;29671:21:0::1;29711:15;29494:247;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29761:51;29773:18;29793;29761:51;;;;;;;:::i;:::-;;;;;;;;29451:373;-1:-1:-1::0;;19688:6:0;:14;;-1:-1:-1;;19688:14:0;;;-1:-1:-1;;;;;;;;;27651:2180:0:o;24168:677::-;24297:22;;24274:4;;24297:22;;24293:543;;;-1:-1:-1;;;;;24344:19:0;;;;;;:11;:19;;;;;;;;24343:20;:47;;;;-1:-1:-1;;;;;;24368:22:0;;;;;;:11;:22;;;;;;;;24367:23;24343:47;24336:54;;;;24293:543;24455:6;;-1:-1:-1;;;;;24490:33:0;;;24423:21;24490:33;;;:25;:33;;;;;;24455:6;;;;;24423:21;24490:33;;;:60;;;24537:13;-1:-1:-1;;;;;24527:23:0;:6;-1:-1:-1;;;;;24527:23:0;;24490:60;-1:-1:-1;;;;;24580:36:0;;24565:11;24580:36;;;:25;:36;;;;;;24477:73;;-1:-1:-1;24565:11:0;24580:36;;;:65;;;24632:13;-1:-1:-1;;;;;24619:26:0;:9;-1:-1:-1;;;;;24619:26:0;;24580:65;24565:80;;24666:5;:15;;;;24675:6;24666:15;24662:163;;;-1:-1:-1;;;;;24710:19:0;;;;;;:11;:19;;;;;;;;24709:20;:47;;;;-1:-1:-1;;;;;;24734:22:0;;;;;;:11;:22;;;;;;;;24733:23;24709:47;24702:54;;;;;;;24662:163;24804:5;24797:12;;;;;;;25048:1895;25219:6;;-1:-1:-1;;;;;25251:35:0;;;25167:7;25251:35;;;:25;:35;;;;;;25167:7;;25219:6;;;;;25167:7;;25251:35;;;:64;;;25302:13;-1:-1:-1;;;;;25290:25:0;:8;-1:-1:-1;;;;;25290:25:0;;25251:64;25237:78;;25328:16;25347:19;25359:6;25347:11;:19::i;:::-;25328:38;;25377:17;25397:40;25422:14;;25397:20;25408:8;25397:6;:10;;:20;;;;:::i;:40::-;25377:60;-1:-1:-1;25454:12:0;;25450:1308;;25487:6;25483:1264;;;25518:16;;:20;25514:134;;25620:8;25601:16;;25589:9;:28;;;;:::i;:::-;:39;;;;:::i;:::-;25563:22;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;25514:134:0;25670:17;;:21;25666:137;;25775:8;25755:17;;25743:9;:29;;;;:::i;:::-;:40;;;;:::i;:::-;25716:23;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;25666:137:0;25825:17;;:21;25821:137;;25930:8;25910:17;;25898:9;:29;;;;:::i;:::-;:40;;;;:::i;:::-;25871:23;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;25821:137:0;25980:15;;:19;25976:131;;26079:8;26061:15;;26049:9;:27;;;;:::i;:::-;:38;;;;:::i;:::-;26024:21;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25976:131:0;25483:1264;;;26151:15;;:19;26147:132;;26251:8;26233:15;;26221:9;:27;;;;:::i;:::-;:38;;;;:::i;:::-;26195:22;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;26147:132:0;26301:16;;:20;26297:135;;26404:8;26385:16;;26373:9;:28;;;;:::i;:::-;:39;;;;:::i;:::-;26346:23;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;26297:135:0;26454:16;;:20;26450:135;;26557:8;26538:16;;26526:9;:28;;;;:::i;:::-;:39;;;;:::i;:::-;26499:23;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;26450:135:0;26607:14;;:18;26603:129;;26704:8;26687:14;;26675:9;:26;;;;:::i;:::-;:37;;;;:::i;:::-;26650:21;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;26603:129:0;26815:4;26797:24;;;;:9;:24;;;;;;:39;;26826:9;26797:28;:39::i;:::-;26788:4;26770:24;;;;:9;:24;;;;;;;:66;;;;26852:42;;-1:-1:-1;;;;;26852:42:0;;;;;;;26884:9;;26852:42;:::i;:::-;;;;;;;;26914:21;:6;26925:9;26914:10;:21::i;:::-;26907:28;25048:1895;-1:-1:-1;;;;;;;;25048:1895:0:o;1786:98::-;1844:7;1871:5;1875:1;1871;:5;:::i;-1:-1:-1:-;;;;;;;;:::o;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;818:402::-;;;947:2;935:9;926:7;922:23;918:32;915:2;;;968:6;960;953:22;915:2;1012:9;999:23;1031:33;1058:5;1031:33;:::i;:::-;1083:5;-1:-1:-1;1140:2:1;1125:18;;1112:32;1153:35;1112:32;1153:35;:::i;:::-;1207:7;1197:17;;;905:315;;;;;:::o;1225:545::-;;;;1371:2;1359:9;1350:7;1346:23;1342:32;1339:2;;;1392:6;1384;1377:22;1339:2;1436:9;1423:23;1455:33;1482:5;1455:33;:::i;:::-;1507:5;-1:-1:-1;1564:2:1;1549:18;;1536:32;1577:35;1536:32;1577:35;:::i;:::-;1631:7;-1:-1:-1;1690:2:1;1675:18;;1662:32;1703:35;1662:32;1703:35;:::i;:::-;1757:7;1747:17;;;1329:441;;;;;:::o;1775:470::-;;;;1921:2;1909:9;1900:7;1896:23;1892:32;1889:2;;;1942:6;1934;1927:22;1889:2;1986:9;1973:23;2005:33;2032:5;2005:33;:::i;:::-;2057:5;-1:-1:-1;2114:2:1;2099:18;;2086:32;2127:35;2086:32;2127:35;:::i;:::-;1879:366;;2181:7;;-1:-1:-1;;;2235:2:1;2220:18;;;;2207:32;;1879:366::o;2250:396::-;;;2376:2;2364:9;2355:7;2351:23;2347:32;2344:2;;;2397:6;2389;2382:22;2344:2;2441:9;2428:23;2460:33;2487:5;2460:33;:::i;:::-;2512:5;-1:-1:-1;2569:2:1;2554:18;;2541:32;2582;2541;2582;:::i;2651:327::-;;;2780:2;2768:9;2759:7;2755:23;2751:32;2748:2;;;2801:6;2793;2786:22;2748:2;2845:9;2832:23;2864:33;2891:5;2864:33;:::i;:::-;2916:5;2968:2;2953:18;;;;2940:32;;-1:-1:-1;;;2738:240:1:o;2983:253::-;;3092:2;3080:9;3071:7;3067:23;3063:32;3060:2;;;3113:6;3105;3098:22;3060:2;3157:9;3144:23;3176:30;3200:5;3176:30;:::i;3241:257::-;;3361:2;3349:9;3340:7;3336:23;3332:32;3329:2;;;3382:6;3374;3367:22;3329:2;3419:9;3413:16;3438:30;3462:5;3438:30;:::i;3503:321::-;;;3629:2;3617:9;3608:7;3604:23;3600:32;3597:2;;;3650:6;3642;3635:22;3597:2;3694:9;3681:23;3713:30;3737:5;3713:30;:::i;3829:190::-;;3941:2;3929:9;3920:7;3916:23;3912:32;3909:2;;;3962:6;3954;3947:22;3909:2;-1:-1:-1;3990:23:1;;3899:120;-1:-1:-1;3899:120:1:o;4024:194::-;;4147:2;4135:9;4126:7;4122:23;4118:32;4115:2;;;4168:6;4160;4153:22;4115:2;-1:-1:-1;4196:16:1;;4105:113;-1:-1:-1;4105:113:1:o;4223:316::-;;;;4380:2;4368:9;4359:7;4355:23;4351:32;4348:2;;;4401:6;4393;4386:22;4348:2;4435:9;4429:16;4419:26;;4485:2;4474:9;4470:18;4464:25;4454:35;;4529:2;4518:9;4514:18;4508:25;4498:35;;4338:201;;;;;:::o;4544:740::-;;;;;;;;;;4792:3;4780:9;4771:7;4767:23;4763:33;4760:2;;;4814:6;4806;4799:22;4760:2;-1:-1:-1;;4842:23:1;;;4912:2;4897:18;;4884:32;;-1:-1:-1;4963:2:1;4948:18;;4935:32;;5014:2;4999:18;;4986:32;;-1:-1:-1;5065:3:1;5050:19;;5037:33;;-1:-1:-1;5117:3:1;5102:19;;5089:33;;-1:-1:-1;5169:3:1;5154:19;;5141:33;;-1:-1:-1;5221:3:1;5206:19;;5193:33;;-1:-1:-1;5273:3:1;5258:19;5245:33;;-1:-1:-1;4750:534:1;-1:-1:-1;4750:534:1:o;5289:203::-;-1:-1:-1;;;;;5453:32:1;;;;5435:51;;5423:2;5408:18;;5390:102::o;5713:304::-;-1:-1:-1;;;;;5943:15:1;;;5925:34;;5995:15;;5990:2;5975:18;;5968:43;5875:2;5860:18;;5842:175::o;6022:282::-;-1:-1:-1;;;;;6222:32:1;;;;6204:51;;6286:2;6271:18;;6264:34;6192:2;6177:18;;6159:145::o;6588:607::-;-1:-1:-1;;;;;6947:15:1;;;6929:34;;6994:2;6979:18;;6972:34;;;;7037:2;7022:18;;7015:34;;;;7080:2;7065:18;;7058:34;;;;7129:15;;;7123:3;7108:19;;7101:44;6909:3;7161:19;;7154:35;;;;6878:3;6863:19;;6845:350::o;7200:187::-;7365:14;;7358:22;7340:41;;7328:2;7313:18;;7295:92::o;7618:603::-;;7759:2;7788;7777:9;7770:21;7820:6;7814:13;7863:6;7858:2;7847:9;7843:18;7836:34;7888:4;7901:140;7915:6;7912:1;7909:13;7901:140;;;8010:14;;;8006:23;;8000:30;7976:17;;;7995:2;7972:26;7965:66;7930:10;;7901:140;;;8059:6;8056:1;8053:13;8050:2;;;8129:4;8124:2;8115:6;8104:9;8100:22;8096:31;8089:45;8050:2;-1:-1:-1;8205:2:1;8184:15;-1:-1:-1;;8180:29:1;8165:45;;;;8212:2;8161:54;;7739:482;-1:-1:-1;;;7739:482:1:o;8226:353::-;8428:2;8410:21;;;8467:2;8447:18;;;8440:30;8506:31;8501:2;8486:18;;8479:59;8570:2;8555:18;;8400:179::o;8584:329::-;8786:2;8768:21;;;8825:1;8805:18;;;8798:29;-1:-1:-1;;;8858:2:1;8843:18;;8836:36;8904:2;8889:18;;8758:155::o;8918:353::-;9120:2;9102:21;;;9159:2;9139:18;;;9132:30;9198:31;9193:2;9178:18;;9171:59;9262:2;9247:18;;9092:179::o;9276:335::-;9478:2;9460:21;;;9517:2;9497:18;;;9490:30;-1:-1:-1;;;9551:2:1;9536:18;;9529:41;9602:2;9587:18;;9450:161::o;9616:177::-;9762:25;;;9750:2;9735:18;;9717:76::o;9798:983::-;;10108:3;10097:9;10093:19;10139:6;10128:9;10121:25;10165:2;10203:6;10198:2;10187:9;10183:18;10176:34;10246:3;10241:2;10230:9;10226:18;10219:31;10270:6;10305;10299:13;10336:6;10328;10321:22;10374:3;10363:9;10359:19;10352:26;;10413:2;10405:6;10401:15;10387:29;;10434:4;10447:195;10461:6;10458:1;10455:13;10447:195;;;10526:13;;-1:-1:-1;;;;;10522:39:1;10510:52;;10617:15;;;;10582:12;;;;10558:1;10476:9;10447:195;;;-1:-1:-1;;;;;;;10698:32:1;;;;10693:2;10678:18;;10671:60;-1:-1:-1;;;10762:3:1;10747:19;10740:35;10659:3;10069:712;-1:-1:-1;;;10069:712:1:o;10786:248::-;10960:25;;;11016:2;11001:18;;10994:34;10948:2;10933:18;;10915:119::o;11039:184::-;11211:4;11199:17;;;;11181:36;;11169:2;11154:18;;11136:87::o;11228:128::-;;11299:1;11295:6;11292:1;11289:13;11286:2;;;11305:18;;:::i;:::-;-1:-1:-1;11341:9:1;;11276:80::o;11361:217::-;;11427:1;11417:2;;-1:-1:-1;;;11452:31:1;;11506:4;11503:1;11496:15;11534:4;11459:1;11524:15;11417:2;-1:-1:-1;11563:9:1;;11407:171::o;11583:168::-;;11689:1;11685;11681:6;11677:14;11674:1;11671:21;11666:1;11659:9;11652:17;11648:45;11645:2;;;11696:18;;:::i;:::-;-1:-1:-1;11736:9:1;;11635:116::o;11756:125::-;;11824:1;11821;11818:8;11815:2;;;11829:18;;:::i;:::-;-1:-1:-1;11866:9:1;;11805:76::o;11886:127::-;11947:10;11942:3;11938:20;11935:1;11928:31;11978:4;11975:1;11968:15;12002:4;11999:1;11992:15;12018:133;-1:-1:-1;;;;;12095:31:1;;12085:42;;12075:2;;12141:1;12138;12131:12;12075:2;12065:86;:::o;12156:120::-;12244:5;12237:13;12230:21;12223:5;12220:32;12210:2;;12266:1;12263;12256:12

Swarm Source

ipfs://835c9b56ef4e7c9376412755942667be3327b9823b81b8a823d7531305648bba
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.