ETH Price: $2,644.94 (-0.89%)

Token

DogeMan (DGMAN)
 

Overview

Max Total Supply

100,000,000,000 DGMAN

Holders

288

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
250,000,000 DGMAN

Value
$0.00
0xaa747f556d2b3445e33b24b6339278cbbf2dc683
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
DogeMan

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-31
*/

/*
DogeMan

Telegram: https://t.me/DogeManofficial
Website: https://dogeman.io/
Twitter: https://twitter.com/DogeManErc20

                                        '└└¬
     
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.7;


library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * C U ON THE MOON
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

abstract contract Context {
    function _msgSender() internal view returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external 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;
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract DogeMan is IERC20, Ownable {
    using Address for address;
    
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "DogeMan";
    string constant _symbol = "DGMAN";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 100_000_000_000 * (10 ** _decimals);
    uint256 _maxBuyTxAmount = (_totalSupply * 1) / 2000;
    uint256 _maxSellTxAmount = (_totalSupply * 1) / 500;
    uint256 _maxWalletSize = (_totalSupply * 2) / 100;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => uint256) public lastSell;
    mapping (address => uint256) public lastBuy;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) liquidityCreator;

    uint256 developerFee = 0;
    uint256 marketingFee = 700;
    uint256 liquidityFee = 200;
    uint256 buybackFee = 0;
    uint256 totalFee = marketingFee + buybackFee + liquidityFee + developerFee;
    uint256 sellBias = 0;
    uint256 feeDenominator = 10000;

    address payable public liquidityFeeReceiver = payable(0x499b3DE9Bb31da83c9170C8C4ec5FE359B8D10eA);
    address payable public marketingFeeReceiver = payable(0x32968429E3595f0d4811CeC5ce73DD6fDd409582);
    address payable public developer;

    IDEXRouter public router;
    //address routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
    //address routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    mapping (address => bool) liquidityPools;
    mapping (address => uint256) public protected;
    bool protectionEnabled = true;
    bool protectionDisabled = false;
    uint256 protectionLimit;
    uint256 public protectionCount;
    uint256 protectionTimer;

    address public pair;

    uint256 public launchedAt;
    uint256 public launchedTime;
    uint256 public deadBlocks;
    bool startBullRun = false;
    bool pauseDisabled = false;
    uint256 public rateLimit = 2;
    bool protectionEnded = false;

    bool public swapEnabled = true;
    bool processEnabled = true;
    uint256 public swapThreshold = _totalSupply / 1000;
    uint256 public swapMinimum = _totalSupply / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }
    
    mapping (address => bool) teamMember;
    
    modifier onlyTeam() {
        require(teamMember[_msgSender()] || msg.sender == owner(), "Caller is not a team member");
        _;
    }
    
    event ProtectedWallet(address, address, uint256, uint8);

    constructor () {
        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        liquidityPools[pair] = true;
        _allowances[owner()][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;

        isFeeExempt[owner()] = true;
        liquidityCreator[owner()] = true;

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[routerAddress] = true;
        isTxLimitExempt[DEAD] = true;

        _balances[owner()] = _totalSupply;
        developer = payable(msg.sender);
        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable { }

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

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }
    
    function setTeamMember(address _team, bool _enabled) external onlyOwner {
        teamMember[_team] = _enabled;
    }
    
    function airdrop(address[] calldata addresses, uint256[] calldata amounts) external onlyOwner {
        require(addresses.length > 0 && amounts.length == addresses.length);
        address from = msg.sender;

        for (uint i = 0; i < addresses.length; i++) {
            if(!liquidityPools[addresses[i]] && !liquidityCreator[addresses[i]]) {
                _basicTransfer(from, addresses[i], amounts[i] * (10 ** _decimals));
            }
        }
    }
    
    function buyBack(address token, uint256 amountPercentage) external onlyTeam {
        uint256 amountETH = (address(this).balance * amountPercentage) / 100;
        
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = token;

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountETH}(
            0,
            path,
            msg.sender,
            block.timestamp
        );
    }
    
    function rescueToken(address tokenAddress, uint256 tokens) external onlyTeam
        returns (bool success)
    {
        return IERC20(tokenAddress).transfer(msg.sender, tokens);
    }
    
    function clearStuckBalance(uint256 amountPercentage, address adr) external onlyTeam {
        uint256 amountETH = address(this).balance;
        payable(adr).transfer((amountETH * amountPercentage) / 100);
    }
    
    function openTrading(uint256 _deadBlocks, uint256 _protection, uint256 _limit) external onlyTeam {
        require(!startBullRun && _deadBlocks < 10);
        deadBlocks = _deadBlocks;
        startBullRun = true;
        launchedAt = block.number;
        protectionTimer = block.timestamp + _protection;
        protectionLimit = _limit * (10 ** _decimals);
    }
    
    function pauseTrading() external onlyTeam {
        require(!pauseDisabled);
        startBullRun = false;
    }
    
    function disablePause() external onlyTeam {
        pauseDisabled = true;
        startBullRun = true;
    }
    
    function setProtection(bool _protect, uint256 _addTime) external onlyTeam {
        require(!protectionDisabled);
        protectionEnabled = _protect;
        require(_addTime < 1 days);
        protectionTimer += _addTime;
    }
    
    function disableProtection() external onlyTeam {
        protectionDisabled = true;
        protectionEnabled = false;
    }
    
    function protectWallet(address[] calldata _wallets, bool _protect) external onlyTeam {
        if (_protect) {
            require(protectionEnabled);
        }
        
        for (uint i = 0; i < _wallets.length; i++) {
            
            if (_protect) {
                protectionCount++;
                emit ProtectedWallet(tx.origin, _wallets[i], block.number, 2);
            }
            else {
                if (protected[_wallets[i]] != 0)
                    protectionCount--;      
            }
            protected[_wallets[i]] = _protect ? block.number : 0;
        }
    }

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

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

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(sender != address(0), "BEP20: transfer from 0x0");
        require(recipient != address(0), "BEP20: transfer to 0x0");
        require(amount > 0, "Amount must be > zero");
        require(_balances[sender] >= amount, "Insufficient balance");
        if(!launched() && liquidityPools[recipient]){ require(liquidityCreator[sender], "Liquidity not added yet."); launch(); }
        if(!startBullRun){ require(liquidityCreator[sender] || liquidityCreator[recipient], "Trading not open yet."); }

        if (!protectionEnded && protectionTimer <= block.timestamp) {
            protectionEnded = true;
            rateLimit = 0;
            _maxWalletSize = _totalSupply;
            _maxBuyTxAmount = _totalSupply;
            _maxSellTxAmount = _totalSupply;
        }

        checkTxLimit(sender, recipient, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if (!isTxLimitExempt[recipient]) {
                checkWalletLimit(recipient, amount);
            }
        }
        
        if(protectionEnabled && protectionTimer > block.timestamp) {
            if(liquidityPools[sender] && tx.origin != recipient && protected[recipient] == 0) {
                protected[recipient] = block.number;
                protectionCount++;
                emit ProtectedWallet(tx.origin, recipient, block.number, 0);
            }
        }
        
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        _balances[sender] = _balances[sender] - amount;

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(recipient, amount) : amount;
        
        if(shouldSwapBack(recipient)){ if (amount > 0) swapBack(amount); }
        
        _balances[recipient] = _balances[recipient] + amountReceived;

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
        launchedTime = block.timestamp;
        swapEnabled = true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    function checkWalletLimit(address recipient, uint256 amount) internal view {
        uint256 walletLimit = _maxWalletSize;
        require(_balances[recipient] + amount <= walletLimit, "Transfer amount exceeds the bag size.");
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal {
        require(isTxLimitExempt[sender] || amount <= (liquidityPools[sender] ? _maxBuyTxAmount : _maxSellTxAmount), "TX Limit Exceeded");
        require(isTxLimitExempt[sender] || lastBuy[recipient] + rateLimit <= block.number, "Transfer rate limit exceeded.");
        
        if (protected[sender] != 0){
            require(amount <= protectionLimit * (10 ** _decimals) && lastSell[sender] == 0 && protectionTimer > block.timestamp, "Wallet protected, please contact support.");
            lastSell[sender] = block.number;
        }
        
        if (liquidityPools[recipient]) {
            lastSell[sender] = block.number;
        } else if (shouldTakeFee(sender)) {
            if (protectionEnabled && protectionTimer > block.timestamp && lastBuy[tx.origin] == block.number && protected[recipient] == 0) {
                protected[recipient] = block.number;
                emit ProtectedWallet(tx.origin, recipient, block.number, 1);
            }
            lastBuy[recipient] = block.number;
            if (tx.origin != recipient)
                lastBuy[tx.origin] = block.number;
        }
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + deadBlocks >= block.number){ return feeDenominator - 1; }
        if (selling) return totalFee + sellBias;
        return totalFee - sellBias;
    }

    function takeFee(address recipient, uint256 amount) internal returns (uint256) {
        bool selling = liquidityPools[recipient];
        uint256 feeAmount = (amount * getTotalFee(selling)) / feeDenominator;
        
        _balances[address(this)] += feeAmount;
    
        return amount - feeAmount;
    }

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

    function swapBack(uint256 amount) internal swapping {
        uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];
        
        uint256 amountToLiquify = (amountToSwap * liquidityFee / 2) / totalFee;
        amountToSwap -= amountToLiquify;

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

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

        uint256 amountBNB = address(this).balance - balanceBefore;
        uint256 totalBNBFee = totalFee - (liquidityFee / 2);

        uint256 amountBNBLiquidity = (amountBNB * liquidityFee / 2) / totalBNBFee;
        uint256 amountBNBMarketing = (amountBNB * marketingFee) / totalBNBFee;
        uint256 amountBNBDeveloper = (amountBNB * developerFee) / totalBNBFee;
        
        if (amountBNBMarketing > 0)
            marketingFeeReceiver.transfer(amountBNBMarketing);
        if (amountBNBDeveloper > 0)
            developer.transfer(amountBNBDeveloper);
        
        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountBNBLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                liquidityFeeReceiver,
                block.timestamp
            );
        }

        emit FundsDistributed(amountBNBLiquidity, amountBNBMarketing, amountBNBDeveloper);
    }
    
    function addLiquidityPool(address lp, bool isPool) external onlyOwner {
        require(lp != pair, "Can't alter current liquidity pair");
        liquidityPools[lp] = isPool;
        emit UpdatedSettings(isPool ? 'Liquidity Pool Enabled' : 'Liquidity Pool Disabled', [Log(toString(abi.encodePacked(lp)), 1), Log('', 0), Log('', 0)]);
    }
    
    function switchRouter(address newRouter) external onlyOwner {
        router = IDEXRouter(newRouter);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        liquidityPools[pair] = true;
        isTxLimitExempt[newRouter] = true;
        emit UpdatedSettings('Exchange Router Updated', [Log(concatenate('New Router: ',toString(abi.encodePacked(newRouter))), 1),Log(concatenate('New Liquidity Pair: ',toString(abi.encodePacked(pair))), 1), Log('', 0)]);
    }
    
    function excludePresaleAddresses(address preSaleRouter, address presaleAddress) external onlyOwner {
        liquidityCreator[preSaleRouter] = true;
        liquidityCreator[presaleAddress] = true;
        isTxLimitExempt[preSaleRouter] = true;
        isTxLimitExempt[presaleAddress] = true;
        isFeeExempt[preSaleRouter] = true;
        isFeeExempt[presaleAddress] = true;
        emit UpdatedSettings('Presale Setup', [Log(concatenate('Presale Router: ',toString(abi.encodePacked(preSaleRouter))), 1),Log(concatenate('Presale Address: ',toString(abi.encodePacked(presaleAddress))), 1), Log('', 0)]);
    }

    function setRateLimit(uint256 rate) external onlyOwner {
        require(rate <= 30);
        rateLimit = rate;
        emit UpdatedSettings('Purchase Rate Limit', [Log('Blocks', rate), Log('', 0), Log('', 0)]);
    }

    function setTxLimit(uint256 buyNumerator, uint256 sellNumerator, uint256 divisor) external onlyOwner {
        require(buyNumerator > 0 && sellNumerator > 0 && divisor > 0 && divisor <= 10000);
        _maxBuyTxAmount = (_totalSupply * buyNumerator) / divisor;
        _maxSellTxAmount = (_totalSupply * sellNumerator) / divisor;
        emit UpdatedSettings('Maximum Transaction Size', [Log('Max Buy Tokens', _maxBuyTxAmount / (10 ** _decimals)), Log('Max Sell Tokens', _maxSellTxAmount / (10 ** _decimals)), Log('', 0)]);
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(numerator > 0 && divisor > 0 && divisor <= 10000);
        _maxWalletSize = (_totalSupply * numerator) / divisor;
        emit UpdatedSettings('Maximum Wallet Size', [Log('Tokens', _maxWalletSize / (10 ** _decimals)), Log('', 0), Log('', 0)]);
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
        emit UpdatedSettings(exempt ? 'Fees Removed' : 'Fees Enforced', [Log(toString(abi.encodePacked(holder)), 1), Log('', 0), Log('', 0)]);
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
        emit UpdatedSettings(exempt ? 'Transaction Limit Removed' : 'Transaction Limit Enforced', [Log(toString(abi.encodePacked(holder)), 1), Log('', 0), Log('', 0)]);
    }

    function setFees(uint256 _buybackFee, uint256 _liquidityFee, uint256 _marketingFee, uint256 _developerFee, uint256 _sellBias, uint256 _feeDenominator) external onlyOwner {
        buybackFee = _buybackFee;
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        developerFee = _developerFee;
        totalFee = _buybackFee + _marketingFee + _liquidityFee + _developerFee;
        sellBias = _sellBias;
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator / 2);
        emit UpdatedSettings('Fees', [Log('Total Fee Percent', totalFee * 100 / feeDenominator), Log('Marketing Percent', _marketingFee * 100 / feeDenominator), Log('Liquidity Percent', _liquidityFee * 100 / feeDenominator)]);
    }

    function setFeeReceivers(address _liquidityFeeReceiver, address _marketingFeeReceiver, address _developer) external onlyOwner {
        liquidityFeeReceiver = payable(_liquidityFeeReceiver);
        marketingFeeReceiver = payable(_marketingFeeReceiver);
        developer = payable(_developer);
        emit UpdatedSettings('Fee Receivers', [Log(concatenate('Liquidity Receiver: ',toString(abi.encodePacked(_liquidityFeeReceiver))), 1),Log(concatenate('Marketing Receiver: ',toString(abi.encodePacked(_marketingFeeReceiver))), 1), Log(concatenate('Dev Receiver: ',toString(abi.encodePacked(_developer))), 1)]);
    }

    function setSwapBackSettings(bool _enabled, bool _processEnabled, uint256 _denominator, uint256 _swapMinimum) external onlyOwner {
        require(_denominator > 0);
        swapEnabled = _enabled;
        processEnabled = _processEnabled;
        swapThreshold = _totalSupply / _denominator;
        swapMinimum = _swapMinimum * (10 ** _decimals);
        emit UpdatedSettings('Swap Settings', [Log('Enabled', _enabled ? 1 : 0),Log('Swap Maximum', swapThreshold), Log('Auto-processing', _processEnabled ? 1 : 0)]);
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - (balanceOf(DEAD) + balanceOf(ZERO));
    }
	
	function toString(bytes memory data) internal pure returns(string memory) {
        bytes memory alphabet = "0123456789abcdef";
    
        bytes memory str = new bytes(2 + data.length * 2);
        str[0] = "0";
        str[1] = "x";
        for (uint i = 0; i < data.length; i++) {
            str[2+i*2] = alphabet[uint(uint8(data[i] >> 4))];
            str[3+i*2] = alphabet[uint(uint8(data[i] & 0x0f))];
        }
        return string(str);
    }
    
    function concatenate(string memory a, string memory b) internal pure returns (string memory) {
        return string(abi.encodePacked(a, b));
    }

	struct Log {
	    string name;
	    uint256 value;
	}

    event FundsDistributed(uint256 charityBNB, uint256 marketingBNB, uint256 devBNB);
    event UpdatedSettings(string name, Log[3] values);
    //C U ON THE MOON
}

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":"charityBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"devBNB","type":"uint256"}],"name":"FundsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"","type":"uint8"}],"name":"ProtectedWallet","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"indexed":false,"internalType":"struct DogeMan.Log[3]","name":"values","type":"tuple[3]"}],"name":"UpdatedSettings","type":"event"},{"inputs":[{"internalType":"address","name":"lp","type":"address"},{"internalType":"bool","name":"isPool","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"buyBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"},{"internalType":"address","name":"adr","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"developer","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disablePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"preSaleRouter","type":"address"},{"internalType":"address","name":"presaleAddress","type":"address"}],"name":"excludePresaleAddresses","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":"","type":"address"}],"name":"lastBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadBlocks","type":"uint256"},{"internalType":"uint256","name":"_protection","type":"uint256"},{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"bool","name":"_protect","type":"bool"}],"name":"protectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"protected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityFeeReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_developer","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_developerFee","type":"uint256"},{"internalType":"uint256","name":"_sellBias","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protect","type":"bool"},{"internalType":"uint256","name":"_addTime","type":"uint256"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setRateLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"bool","name":"_processEnabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_swapMinimum","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_team","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTeamMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyNumerator","type":"uint256"},{"internalType":"uint256","name":"sellNumerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMinimum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"switchRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600180546001600160a01b031990811661dead17909155600280549091169055620000326009600a620005f1565b620000439064174876e800620006b2565b6003556107d060035460016200005a9190620006b2565b62000066919062000585565b6004556101f460035460016200007d9190620006b2565b62000089919062000585565b600555606460035460026200009f9190620006b2565b620000ab919062000585565b6006556000600e556102bc600f5560c86010556000601155600e54601054601154600f54620000db91906200056a565b620000e791906200056a565b620000f391906200056a565b6012556000601355612710601455601580546001600160a01b031990811673499b3de9bb31da83c9170c8c4ec5fe359b8d10ea179091556016805482167332968429e3595f0d4811cec5ce73dd6fdd40958217905560198054909116737a250d5630b4cf539739df2c5dacb4c659f2488d179055601c805461ffff199081166001179091556024805490911690556002602555602680546201010062ffffff19909116179055600354620001ab906103e89062000585565b602755612710600354620001c0919062000585565b602855348015620001d057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601954601880546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200026a57600080fd5b505afa1580156200027f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a5919062000538565b6001600160a01b031663c9c65396601860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200030257600080fd5b505afa15801562000317573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033d919062000538565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b1580156200038557600080fd5b505af11580156200039a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c0919062000538565b602080546001600160a01b0319166001600160a01b039290921691821781556000918252601a905260408120805460ff1916600117905560001990600890620004116000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120601980548416835290855283822095909555308082526008855283822086548416835285528382206000199055815483168252600b85528382208054600160ff199182168117909255835485168452600d87528584208054821683179055918352600c8652848320805483168217905582548416835284832080548316821790559554831682528382208054821687179055855483168252838220805490911690951790945560035484548216855260078452828520819055601780546001600160a01b0319163317905584549251908152911692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620006ea565b6000602082840312156200054b57600080fd5b81516001600160a01b03811681146200056357600080fd5b9392505050565b60008219821115620005805762000580620006d4565b500190565b600082620005a357634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620005e9578160001904821115620005cd57620005cd620006d4565b80851615620005db57918102915b93841c9390800290620005ad565b509250929050565b60006200056360ff8416836000826200060d57506001620006ac565b816200061c57506000620006ac565b8160018114620006355760028114620006405762000660565b6001915050620006ac565b60ff841115620006545762000654620006d4565b50506001821b620006ac565b5060208310610133831016604e8410600b841016171562000685575081810a620006ac565b620006918383620005a8565b8060001904821115620006a857620006a8620006d4565b0290505b92915050565b6000816000190483118215151615620006cf57620006cf620006d4565b500290565b634e487b7160e01b600052601160045260246000fd5b61430f80620006fa6000396000f3fe60806040526004361061037a5760003560e01c80636ddd1713116101d1578063bfa21d6a11610102578063dd62ed3e116100a0578063f84ba65d1161006f578063f84ba65d14610a4b578063f8821a6214610a6b578063f887ea4014610a81578063fabb0b4f14610aa157600080fd5b8063dd62ed3e146109a5578063e96fada2146109eb578063f1f3bca314610a0b578063f2fde38b14610a2b57600080fd5b8063ca4b208b116100dc578063ca4b208b14610925578063d1b8df2214610945578063d686014214610965578063d7c010321461098557600080fd5b8063bfa21d6a146108b8578063c1adf7bc146108d8578063c287184e1461090557600080fd5b806395d89b411161016f578063a9059cbb11610149578063a9059cbb1461084d578063abe57e701461086d578063bafe446b1461088d578063bf56b371146108a257600080fd5b806395d89b41146107e95780639b02c40214610817578063a8aa1b311461082d57600080fd5b8063715018a6116101ab578063715018a61461076457806386f6c3c114610779578063893d20e8146107995780638da5cb5b146107cb57600080fd5b80636ddd1713146106e25780636f4ce4281461070157806370a082311461072e57600080fd5b8063421dd7c7116102ab5780635804f1e41161024957806361e08e721161022357806361e08e721461067757806363a803e11461068d578063658d4b7f146106a257806367243482146106c257600080fd5b80635804f1e41461062c578063584f969a1461064257806360bba03d1461065757600080fd5b8063507139351161028557806350713935146105ac57806354a1dfc9146105cc57806356a227f2146105ec578063571ac8b01461060c57600080fd5b8063421dd7c71461054a57806346d7edaa1461055f578063492a937b1461058c57600080fd5b8063234e949411610318578063313ce567116102f2578063313ce567146104ce57806331a0a3b3146104ea57806333f3d6281461050a57806334848b9a1461052a57600080fd5b8063234e94941461048457806323b872dd146104995780632b112e49146104b957600080fd5b8063095ea7b311610354578063095ea7b31461040a5780631031e36e1461043a57806313b4a7f41461044f57806318160ddd1461046f57600080fd5b80630445b6671461038657806306fdde03146103af578063095db78f146103e857600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60275481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506040805180820190915260078152662237b3b2a6b0b760c91b60208201525b6040516103a69190613dda565b3480156103f457600080fd5b50610408610403366004613a7e565b610ab7565b005b34801561041657600080fd5b5061042a6104253660046139e6565b610c73565b60405190151581526020016103a6565b34801561044657600080fd5b50610408610ce0565b34801561045b57600080fd5b5061040861046a3660046138f3565b610d45565b34801561047b57600080fd5b5060035461039c565b34801561049057600080fd5b5061039c610f03565b3480156104a557600080fd5b5061042a6104b4366004613977565b610f23565b3480156104c557600080fd5b5061039c610fb8565b3480156104da57600080fd5b50604051600981526020016103a6565b3480156104f657600080fd5b506104086105053660046138b9565b610ff9565b34801561051657600080fd5b5061042a6105253660046139e6565b611311565b34801561053657600080fd5b50610408610545366004613bc8565b6113d5565b34801561055657600080fd5b50610408611476565b34801561056b57600080fd5b5061039c61057a3660046138b9565b601b6020526000908152604090205481565b34801561059857600080fd5b506104086105a73660046139b8565b6114cb565b3480156105b857600080fd5b506104086105c7366004613bc8565b611674565b3480156105d857600080fd5b506104086105e7366004613b04565b6117fe565b3480156105f857600080fd5b50610408610607366004613b81565b611987565b34801561061857600080fd5b5061042a6106273660046138b9565b611a17565b34801561063857600080fd5b5061039c60225481565b34801561064e57600080fd5b50610408611a25565b34801561066357600080fd5b506104086106723660046139b8565b611a7a565b34801561068357600080fd5b5061039c60255481565b34801561069957600080fd5b5061039c611acf565b3480156106ae57600080fd5b506104086106bd3660046139b8565b611aea565b3480156106ce57600080fd5b506104086106dd366004613a12565b611bb9565b3480156106ee57600080fd5b5060265461042a90610100900460ff1681565b34801561070d57600080fd5b5061039c61071c3660046138b9565b60096020526000908152604090205481565b34801561073a57600080fd5b5061039c6107493660046138b9565b6001600160a01b031660009081526007602052604090205490565b34801561077057600080fd5b50610408611d20565b34801561078557600080fd5b50610408610794366004613c22565b611d94565b3480156107a557600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103a6565b3480156107d757600080fd5b506000546001600160a01b03166107b3565b3480156107f557600080fd5b506040805180820190915260058152642223a6a0a760d91b60208201526103db565b34801561082357600080fd5b5061039c601e5481565b34801561083957600080fd5b506020546107b3906001600160a01b031681565b34801561085957600080fd5b5061042a6108683660046139e6565b611f50565b34801561087957600080fd5b50610408610888366004613ba6565b611f5d565b34801561089957600080fd5b5061039c612073565b3480156108ae57600080fd5b5061039c60215481565b3480156108c457600080fd5b506015546107b3906001600160a01b031681565b3480156108e457600080fd5b5061039c6108f33660046138b9565b600a6020526000908152604090205481565b34801561091157600080fd5b50610408610920366004613b68565b61208e565b34801561093157600080fd5b506017546107b3906001600160a01b031681565b34801561095157600080fd5b506104086109603660046139e6565b612151565b34801561097157600080fd5b50610408610980366004613b4a565b612314565b34801561099157600080fd5b506104086109a036600461392c565b6123a5565b3480156109b157600080fd5b5061039c6109c03660046138f3565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109f757600080fd5b506016546107b3906001600160a01b031681565b348015610a1757600080fd5b5061039c610a26366004613aca565b61253d565b348015610a3757600080fd5b50610408610a463660046138b9565b61258a565b348015610a5757600080fd5b50610408610a663660046139b8565b612674565b348015610a7757600080fd5b5061039c60285481565b348015610a8d57600080fd5b506018546107b3906001600160a01b031681565b348015610aad57600080fd5b5061039c60235481565b336000908152602a602052604090205460ff1680610adf57506000546001600160a01b031633145b610b045760405162461bcd60e51b8152600401610afb90613ec4565b60405180910390fd5b8015610b1957601c5460ff16610b1957600080fd5b60005b82811015610c6d578115610ba857601e8054906000610b3a83614236565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea32858584818110610b7357610b73614267565b9050602002016020810190610b8891906138b9565b436002604051610b9b9493929190613d7a565b60405180910390a1610c08565b601b6000858584818110610bbe57610bbe614267565b9050602002016020810190610bd391906138b9565b6001600160a01b0316815260208101919091526040016000205415610c0857601e8054906000610c028361421f565b91905055505b81610c14576000610c16565b435b601b6000868685818110610c2c57610c2c614267565b9050602002016020810190610c4191906138b9565b6001600160a01b0316815260208101919091526040016000205580610c6581614236565b915050610b1c565b50505050565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610cce9086815260200190565b60405180910390a35060015b92915050565b336000908152602a602052604090205460ff1680610d0857506000546001600160a01b031633145b610d245760405162461bcd60e51b8152600401610afb90613ec4565b602454610100900460ff1615610d3957600080fd5b6024805460ff19169055565b6000546001600160a01b03163314610d6f5760405162461bcd60e51b8152600401610afb90613f32565b6001600160a01b038281166000818152600d602090815260408083208054600160ff1991821681179092559587168085528285208054881683179055858552600c845282852080548816831790558085528285208054881683179055948452600b83528184208054871682179055938352918290208054909416909217909255815160e081018352601060a082019081526f0283932b9b0b632902937baba32b91d160851b60c083015292516000805160206142ba833981519152939192839260608401928392610e649291610e5f91610e4b918c9101613d2e565b604051602081830303815290604052612764565b61297d565b8152602001600181525081526020016040518060400160405280610ebf604051806040016040528060118152602001700283932b9b0b6329020b2323932b9b99d1607d1b815250610e5f88604051602001610e4b9190613d2e565b81526001602091820152908252604080516060810182526000818301818152825281840152929091019190915251610ef79190613fe5565b60405180910390a15050565b6000610f116009600a614112565b600554610f1e91906140ad565b905090565b6001600160a01b038316600090815260086020908152604080832033845290915281205460001914610fa3576001600160a01b0384166000908152600860209081526040808320338452909152902054610f7e9083906141dc565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610fae8484846129a9565b90505b9392505050565b6002546001600160a01b039081166000908152600760205260408082205460015490931682528120549091610fec91614095565b600354610f1e91906141dc565b6000546001600160a01b031633146110235760405162461bcd60e51b8152600401610afb90613f32565b601880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b15801561107757600080fd5b505afa15801561108b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110af91906138d6565b6001600160a01b031663c9c65396601860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561110b57600080fd5b505afa15801561111f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114391906138d6565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b15801561118a57600080fd5b505af115801561119e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c291906138d6565b602080546001600160a01b0319166001600160a01b0392831690811782556000908152601a82526040808220805460ff1990811660019081179092559486168352600c80855292829020805490951617909355825160e08101845260a081019182526b02732bb902937baba32b91d160a51b60c082015292516000805160206142ba833981519152939283926060840192839261126a9291610e5f91610e4b918b9101613d2e565b815260016020918201529082526040805160808101825260148183019081527302732bb902634b8bab4b234ba3c902830b4b91d160651b60608301528354925194840194919384936112ce93610e5f92610e4b926001600160a01b03169101613d2e565b815260016020918201529082526040805160608101825260008183018181528252818401529290910191909152516113069190613e4f565b60405180910390a150565b336000908152602a602052604081205460ff168061133957506000546001600160a01b031633145b6113555760405162461bcd60e51b8152600401610afb90613ec4565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b15801561139d57600080fd5b505af11580156113b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb19190613ae7565b336000908152602a602052604090205460ff16806113fd57506000546001600160a01b031633145b6114195760405162461bcd60e51b8152600401610afb90613ec4565b60245460ff1615801561142c5750600a83105b61143557600080fd5b60238390556024805460ff19166001179055436021556114558242614095565b601f556114646009600a614112565b61146e90826141bd565b601d55505050565b336000908152602a602052604090205460ff168061149e57506000546001600160a01b031633145b6114ba5760405162461bcd60e51b8152600401610afb90613ec4565b601c805461ffff1916610100179055565b6000546001600160a01b031633146114f55760405162461bcd60e51b8152600401610afb90613f32565b6020546001600160a01b038381169116141561155e5760405162461bcd60e51b815260206004820152602260248201527f43616e277420616c7465722063757272656e74206c697175696469747920706160448201526134b960f11b6064820152608401610afb565b6001600160a01b0382166000908152601a60205260409020805460ff19168215151790556000805160206142ba833981519152816115d1576040518060400160405280601781526020017f4c697175696469747920506f6f6c2044697361626c6564000000000000000000815250611601565b60405180604001604052806016815260200175131a5c5d5a591a5d1e48141bdbdb08115b98589b195960521b8152505b6040805160a08101909152806060810180611622610e4b8960c08601613d2e565b8152600160209182015290825260408051606080820183526000828401818152835282850181905285850192909252825190810183528083018281528152928301529182015251610ef7929190613ded565b6000546001600160a01b0316331461169e5760405162461bcd60e51b8152600401610afb90613f32565b6000831180156116ae5750600082115b80156116ba5750600081115b80156116c857506127108111155b6116d157600080fd5b80836003546116e091906141bd565b6116ea91906140ad565b60045560035481906116fd9084906141bd565b61170791906140ad565b6005556040805160e08101909152600e60a082019081526d4d61782042757920546f6b656e7360901b60c0830152606082019081526000805160206142ba833981519152919081906080820161175f6009600a614112565b60045461176c91906140ad565b9052815260408051608081018252600f9181019182526e4d61782053656c6c20546f6b656e7360881b606082015290815260209182019181016117b16009600a614112565b6005546117be91906140ad565b90528152604080516060810182526000818301818152825260208281019190915290920191909152516117f19190613f9e565b60405180910390a1505050565b6000546001600160a01b031633146118285760405162461bcd60e51b8152600401610afb90613f32565b6000821161183557600080fd5b6026805462ffff0019166101008615150262ff000019161762010000851515021790556003546118669083906140ad565b6027556118756009600a614112565b61187f90826141bd565b6028556040805160e08101909152600760a0820190815266115b98589b195960ca1b60c0830152606082019081526000805160206142ba8339815191529190819060808201886118d05760006118d3565b60015b60ff16815250815260200160405180604001604052806040518060400160405280600c81526020016b53776170204d6178696d756d60a01b8152508152602001602754815250815260200160405180604001604052806040518060400160405280600f81526020016e4175746f2d70726f63657373696e6760881b815250815260200187611962576000611965565b60015b60ff16905290526040516119799190613f67565b60405180910390a150505050565b336000908152602a602052604090205460ff16806119af57506000546001600160a01b031633145b6119cb5760405162461bcd60e51b8152600401610afb90613ec4565b476001600160a01b0382166108fc60646119e586856141bd565b6119ef91906140ad565b6040518115909202916000818181858888f19350505050158015610c6d573d6000803e3d6000fd5b6000610cda82600019610c73565b336000908152602a602052604090205460ff1680611a4d57506000546001600160a01b031633145b611a695760405162461bcd60e51b8152600401610afb90613ec4565b6024805461ffff1916610101179055565b6000546001600160a01b03163314611aa45760405162461bcd60e51b8152600401610afb90613f32565b6001600160a01b03919091166000908152602a60205260409020805460ff1916911515919091179055565b6000611add6009600a614112565b600654610f1e91906140ad565b6000546001600160a01b03163314611b145760405162461bcd60e51b8152600401610afb90613f32565b6001600160a01b0382166000908152600b60205260409020805460ff19168215151790556000805160206142ba83398151915281611b77576040518060400160405280600d81526020016c1199595cc8115b999bdc98d959609a1b815250611601565b604080518082018252600c81526b1199595cc814995b5bdd995960a21b6020820152815160a0810190925290806060810180611622610e4b8960c08601613d2e565b6000546001600160a01b03163314611be35760405162461bcd60e51b8152600401610afb90613f32565b8215801590611bf157508083145b611bfa57600080fd5b3360005b84811015611d1857601a6000878784818110611c1c57611c1c614267565b9050602002016020810190611c3191906138b9565b6001600160a01b0316815260208101919091526040016000205460ff16158015611ca05750600d6000878784818110611c6c57611c6c614267565b9050602002016020810190611c8191906138b9565b6001600160a01b0316815260208101919091526040016000205460ff16155b15611d0657611d0482878784818110611cbb57611cbb614267565b9050602002016020810190611cd091906138b9565b611cdc6009600a614112565b878786818110611cee57611cee614267565b90506020020135611cff91906141bd565b612eea565b505b80611d1081614236565b915050611bfe565b505050505050565b6000546001600160a01b03163314611d4a5760405162461bcd60e51b8152600401610afb90613f32565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611dbe5760405162461bcd60e51b8152600401610afb90613f32565b60118690556010859055600f849055600e8390558285611dde8689614095565b611de89190614095565b611df29190614095565b60125560138290556014819055611e0a6002826140ad565b60125410611e1757600080fd5b6000805160206142ba8339815191526040518060600160405280604051806040016040528060405180604001604052806011815260200170151bdd185b081199594814195c98d95b9d607a1b81525081526020016014546012546064611e7d91906141bd565b611e8791906140ad565b905281526040805160808101825260119181019182527013585c9ad95d1a5b99c814195c98d95b9d607a1b6060820152908152601454602092830192820190611ed18a60646141bd565b611edb91906140ad565b9052815260408051608081018252601191810191825270131a5c5d5a591a5d1e4814195c98d95b9d607a1b6060820152908152601454602092830192820190611f258b60646141bd565b611f2f91906140ad565b90529052604051611f409190613e96565b60405180910390a1505050505050565b6000610fb13384846129a9565b6000546001600160a01b03163314611f875760405162461bcd60e51b8152600401610afb90613f32565b600082118015611f975750600081115b8015611fa557506127108111155b611fae57600080fd5b8082600354611fbd91906141bd565b611fc791906140ad565b60069081556040805160e0810190915260a0810191825265546f6b656e7360d01b60c0820152606081019182526000805160206142ba833981519152918190608082016120166009600a614112565b60065461202391906140ad565b90528152604080516060808201835260008284018181528352602083810182905280860193909352835191820184528184018181528252918101919091529181019190915251610ef79190613e12565b60006120816009600a614112565b600454610f1e91906140ad565b6000546001600160a01b031633146120b85760405162461bcd60e51b8152600401610afb90613f32565b601e8111156120c657600080fd5b60258190556040805160e081018252600660a0820190815265426c6f636b7360d01b60c08301526060808301918252608083018590529082528251808201845260008185018181528252602082810182905280850192909252845192830185528285018181528352908201528183015290516000805160206142ba833981519152916113069161401c565b336000908152602a602052604090205460ff168061217957506000546001600160a01b031633145b6121955760405162461bcd60e51b8152600401610afb90613ec4565b600060646121a383476141bd565b6121ad91906140ad565b60408051600280825260608201835292935060009290916020830190803683375050601854604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561221757600080fd5b505afa15801561222b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224f91906138d6565b8160008151811061226257612262614267565b60200260200101906001600160a01b031690816001600160a01b031681525050838160018151811061229657612296614267565b6001600160a01b03928316602091820292909201015260185460405163b6f9de9560e01b815291169063b6f9de959084906122dc90600090869033904290600401613da5565b6000604051808303818588803b1580156122f557600080fd5b505af1158015612309573d6000803e3d6000fd5b505050505050505050565b336000908152602a602052604090205460ff168061233c57506000546001600160a01b031633145b6123585760405162461bcd60e51b8152600401610afb90613ec4565b601c54610100900460ff161561236d57600080fd5b601c805460ff191683151517905562015180811061238a57600080fd5b80601f600082825461239c9190614095565b90915550505050565b6000546001600160a01b031633146123cf5760405162461bcd60e51b8152600401610afb90613f32565b601580546001600160a01b038086166001600160a01b0319928316179092556016805485841690831617905560178054928416929091169190911790556040805160e081018252601460a082019081527302634b8bab4b234ba3c902932b1b2b4bb32b91d160651b60c083015291516000805160206142ba8339815191529282916060830191829161246e9190610e5f90610e4b908c90602001613d2e565b81526020016001815250815260200160405180604001604052806124cc60405180604001604052806014815260200173026b0b935b2ba34b733902932b1b2b4bb32b91d160651b815250610e5f89604051602001610e4b9190613d2e565b81526020016001815250815260200160405180604001604052806125246040518060400160405280600e81526020016d02232bb102932b1b2b4bb32b91d160951b815250610e5f88604051602001610e4b9190613d2e565b8152600160209091015290526040516117f19190613efb565b6000436023546021546125509190614095565b10612564576001601454610cda91906141dc565b811561257a57601354601254610cda9190614095565b601354601254610cda91906141dc565b6000546001600160a01b031633146125b45760405162461bcd60e51b8152600401610afb90613f32565b6001600160a01b0381166126195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610afb565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461269e5760405162461bcd60e51b8152600401610afb90613f32565b6001600160a01b0382166000908152600c60205260409020805460ff19168215151790556000805160206142ba83398151915281612711576040518060400160405280601a81526020017f5472616e73616374696f6e204c696d697420456e666f72636564000000000000815250611601565b604080518082018252601981527f5472616e73616374696f6e204c696d69742052656d6f766564000000000000006020820152815160a0810190925290806060810180611622610e4b8960c08601613d2e565b60408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516060919060009061279f9060026141bd565b6127aa906002614095565b67ffffffffffffffff8111156127c2576127c261427d565b6040519080825280601f01601f1916602001820160405280156127ec576020820181803683370190505b509050600360fc1b8160008151811061280757612807614267565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061283657612836614267565b60200101906001600160f81b031916908160001a90535060005b84518110156129755782600486838151811061286e5761286e614267565b016020015182516001600160f81b031990911690911c60f81c90811061289657612896614267565b01602001516001600160f81b031916826128b18360026141bd565b6128bc906002614095565b815181106128cc576128cc614267565b60200101906001600160f81b031916908160001a905350828582815181106128f6576128f6614267565b602091010151815160f89190911c600f1690811061291657612916614267565b01602001516001600160f81b031916826129318360026141bd565b61293c906003614095565b8151811061294c5761294c614267565b60200101906001600160f81b031916908160001a9053508061296d81614236565b915050612850565b509392505050565b60608282604051602001612992929190613d4b565b604051602081830303815290604052905092915050565b60006001600160a01b038416612a015760405162461bcd60e51b815260206004820152601860248201527f42455032303a207472616e736665722066726f6d2030783000000000000000006044820152606401610afb565b6001600160a01b038316612a505760405162461bcd60e51b8152602060048201526016602482015275042455032303a207472616e7366657220746f203078360541b6044820152606401610afb565b60008211612a985760405162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206265203e207a65726f60581b6044820152606401610afb565b6001600160a01b038416600090815260076020526040902054821115612af75760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610afb565b602154158015612b1f57506001600160a01b0383166000908152601a602052604090205460ff165b15612ba8576001600160a01b0384166000908152600d602052604090205460ff16612b8c5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206e6f74206164646564207965742e00000000000000006044820152606401610afb565b612ba843602155426022556026805461ff001916610100179055565b60245460ff16612c35576001600160a01b0384166000908152600d602052604090205460ff1680612bf157506001600160a01b0383166000908152600d602052604090205460ff165b612c355760405162461bcd60e51b81526020600482015260156024820152742a3930b234b733903737ba1037b832b7103cb2ba1760591b6044820152606401610afb565b60265460ff16158015612c4a575042601f5411155b15612c72576026805460ff191660011790556000602555600354600681905560048190556005555b612c7d848484612fa4565b6001600160a01b0383166000908152601a602052604090205460ff16158015612cb457506001546001600160a01b03848116911614155b15612ce3576001600160a01b0383166000908152600c602052604090205460ff16612ce357612ce383836132f9565b601c5460ff168015612cf6575042601f54115b15612dc0576001600160a01b0384166000908152601a602052604090205460ff168015612d2c5750326001600160a01b03841614155b8015612d4e57506001600160a01b0383166000908152601b6020526040902054155b15612dc0576001600160a01b0383166000908152601b60205260408120439055601e805491612d7c83614236565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea3284436000604051612db79493929190613d7a565b60405180910390a15b60295460ff1615612ddd57612dd6848484612eea565b9050610fb1565b6001600160a01b038416600090815260076020526040902054612e019083906141dc565b6001600160a01b038516600090815260076020908152604080832093909355600b90529081205460ff1615612e365782612e40565b612e40848461337e565b9050612e4b846133fc565b15612e5f578215612e5f57612e5f83613478565b6001600160a01b038416600090815260076020526040902054612e83908290614095565b6001600160a01b0380861660008181526007602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612ed79085815260200190565b60405180910390a3506001949350505050565b6001600160a01b038316600090815260076020526040812054612f0e9083906141dc565b6001600160a01b038086166000908152600760205260408082209390935590851681522054612f3e908390614095565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612f929086815260200190565b60405180910390a35060019392505050565b6001600160a01b0383166000908152600c602052604090205460ff1680612ff657506001600160a01b0383166000908152601a602052604090205460ff16612fee57600554612ff2565b6004545b8111155b6130365760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610afb565b6001600160a01b0383166000908152600c602052604090205460ff168061308257506025546001600160a01b0383166000908152600a6020526040902054439161307f91614095565b11155b6130ce5760405162461bcd60e51b815260206004820152601d60248201527f5472616e736665722072617465206c696d69742065786365656465642e0000006044820152606401610afb565b6001600160a01b0383166000908152601b6020526040902054156131b1576130f86009600a614112565b601d5461310591906141bd565b811115801561312a57506001600160a01b038316600090815260096020526040902054155b8015613137575042601f54115b6131955760405162461bcd60e51b815260206004820152602960248201527f57616c6c65742070726f7465637465642c20706c6561736520636f6e746163746044820152681039bab83837b93a1760b91b6064820152608401610afb565b6001600160a01b03831660009081526009602052604090204390555b6001600160a01b0382166000908152601a602052604090205460ff16156131f05750506001600160a01b03166000908152600960205260409020439055565b6001600160a01b0383166000908152600b602052604090205460ff166132f457601c5460ff168015613223575042601f54115b801561323d5750326000908152600a602052604090205443145b801561325f57506001600160a01b0382166000908152601b6020526040902054155b156132c0576001600160a01b0382166000908152601b602052604090819020439081905590517f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea916132b79132918691600190613d7a565b60405180910390a15b6001600160a01b0382166000818152600a6020526040902043905532146132f457326000908152600a602052604090204390555b505050565b6006546001600160a01b0383166000908152600760205260409020548190613322908490614095565b11156132f45760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610afb565b6001600160a01b0382166000908152601a602052604081205460145460ff9091169082906133ab8361253d565b6133b590866141bd565b6133bf91906140ad565b306000908152600760205260408120805492935083929091906133e3908490614095565b909155506133f3905081856141dc565b95945050505050565b336000908152601a602052604081205460ff1615801561341f575060295460ff16155b80156134325750602654610100900460ff165b801561345657506001600160a01b0382166000908152601a602052604090205460ff165b8015610cda575060285430600090815260076020526040902054101592915050565b6029805460ff1916600117905560275460009082106134995760275461349b565b815b306000908152600760205260409020549091508111156134c75750306000908152600760205260409020545b60006012546002601054846134dc91906141bd565b6134e691906140ad565b6134f091906140ad565b90506134fc81836141dc565b6040805160028082526060820183529294506000929091602083019080368337019050509050308160008151811061353657613536614267565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561358a57600080fd5b505afa15801561359e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c291906138d6565b816001815181106135d5576135d5614267565b6001600160a01b03928316602091820292909201015260185460405163791ac94760e01b81524792919091169063791ac9479061361f908790600090879030904290600401614059565b600060405180830381600087803b15801561363957600080fd5b505af115801561364d573d6000803e3d6000fd5b505050506000814761365f91906141dc565b90506000600260105461367291906140ad565b60125461367f91906141dc565b905060008160026010548561369491906141bd565b61369e91906140ad565b6136a891906140ad565b9050600082600f54856136bb91906141bd565b6136c591906140ad565b9050600083600e54866136d891906141bd565b6136e291906140ad565b90508115613726576016546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613724573d6000803e3d6000fd5b505b8015613768576017546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613766573d6000803e3d6000fd5b505b87156138165760185460155460405163f305d71960e01b8152306004820152602481018b905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990859060c4016060604051808303818588803b1580156137d957600080fd5b505af11580156137ed573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138129190613bf4565b5050505b60408051848152602081018490529081018290527fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df99060600160405180910390a150506029805460ff191690555050505050505050565b60008083601f84011261387f57600080fd5b50813567ffffffffffffffff81111561389757600080fd5b6020830191508360208260051b85010111156138b257600080fd5b9250929050565b6000602082840312156138cb57600080fd5b8135610fb181614293565b6000602082840312156138e857600080fd5b8151610fb181614293565b6000806040838503121561390657600080fd5b823561391181614293565b9150602083013561392181614293565b809150509250929050565b60008060006060848603121561394157600080fd5b833561394c81614293565b9250602084013561395c81614293565b9150604084013561396c81614293565b809150509250925092565b60008060006060848603121561398c57600080fd5b833561399781614293565b925060208401356139a781614293565b929592945050506040919091013590565b600080604083850312156139cb57600080fd5b82356139d681614293565b91506020830135613921816142ab565b600080604083850312156139f957600080fd5b8235613a0481614293565b946020939093013593505050565b60008060008060408587031215613a2857600080fd5b843567ffffffffffffffff80821115613a4057600080fd5b613a4c8883890161386d565b90965094506020870135915080821115613a6557600080fd5b50613a728782880161386d565b95989497509550505050565b600080600060408486031215613a9357600080fd5b833567ffffffffffffffff811115613aaa57600080fd5b613ab68682870161386d565b909450925050602084013561396c816142ab565b600060208284031215613adc57600080fd5b8135610fb1816142ab565b600060208284031215613af957600080fd5b8151610fb1816142ab565b60008060008060808587031215613b1a57600080fd5b8435613b25816142ab565b93506020850135613b35816142ab565b93969395505050506040820135916060013590565b60008060408385031215613b5d57600080fd5b8235613a04816142ab565b600060208284031215613b7a57600080fd5b5035919050565b60008060408385031215613b9457600080fd5b82359150602083013561392181614293565b60008060408385031215613bb957600080fd5b50508035926020909101359150565b600080600060608486031215613bdd57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613c0957600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215613c3b57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600081518084526020808501945080840160005b83811015613c9e5781516001600160a01b031687529582019590820190600101613c79565b509495945050505050565b600082606081018360005b6003811015613cf7578383038752815160408151818652613cd782870182613d02565b602093840151968401969096525050968701969190910190600101613cb4565b509095945050505050565b60008151808452613d1a8160208601602086016141f3565b601f01601f19169290920160200192915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b60008351613d5d8184602088016141f3565b835190830190613d718183602088016141f3565b01949350505050565b6001600160a01b039485168152929093166020830152604082015260ff909116606082015260800190565b848152608060208201526000613dbe6080830186613c65565b6001600160a01b03949094166040830152506060015292915050565b602081526000610fb16020830184613d02565b604081526000613e006040830185613d02565b82810360208401526133f38185613ca9565b6040815260136040820152724d6178696d756d2057616c6c65742053697a6560681b6060820152608060208201526000610fb16080830184613ca9565b60408152601760408201527f45786368616e676520526f7574657220557064617465640000000000000000006060820152608060208201526000610fb16080830184613ca9565b6040815260046040820152634665657360e01b6060820152608060208201526000610fb16080830184613ca9565b6020808252601b908201527f43616c6c6572206973206e6f742061207465616d206d656d6265720000000000604082015260600190565b60408152600d60408201526c4665652052656365697665727360981b6060820152608060208201526000610fb16080830184613ca9565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60408152600d60408201526c537761702053657474696e677360981b6060820152608060208201526000610fb16080830184613ca9565b60408152601860408201527f4d6178696d756d205472616e73616374696f6e2053697a6500000000000000006060820152608060208201526000610fb16080830184613ca9565b60408152600d60408201526c050726573616c6520536574757609c1b6060820152608060208201526000610fb16080830184613ca9565b604081526013604082015272141d5c98da185cd94814985d1948131a5b5a5d606a1b6060820152608060208201526000610fb16080830184613ca9565b85815284602082015260a06040820152600061407860a0830186613c65565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156140a8576140a8614251565b500190565b6000826140ca57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561410a5781600019048211156140f0576140f0614251565b808516156140fd57918102915b93841c93908002906140d4565b509250929050565b6000610fb160ff84168360008261412b57506001610cda565b8161413857506000610cda565b816001811461414e576002811461415857614174565b6001915050610cda565b60ff84111561416957614169614251565b50506001821b610cda565b5060208310610133831016604e8410600b8410161715614197575081810a610cda565b6141a183836140cf565b80600019048211156141b5576141b5614251565b029392505050565b60008160001904831182151516156141d7576141d7614251565b500290565b6000828210156141ee576141ee614251565b500390565b60005b8381101561420e5781810151838201526020016141f6565b83811115610c6d5750506000910152565b60008161422e5761422e614251565b506000190190565b600060001982141561424a5761424a614251565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146142a857600080fd5b50565b80151581146142a857600080fdfe6e502a17c2522c4dc061bacfc992cb08b19348f65d5ffc44766e54a42cf15b96a2646970667358221220d00efcfcc1f55961ed9c19b08f1e20a50b83c99f0dc210de277a173f1c66b45b64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c80636ddd1713116101d1578063bfa21d6a11610102578063dd62ed3e116100a0578063f84ba65d1161006f578063f84ba65d14610a4b578063f8821a6214610a6b578063f887ea4014610a81578063fabb0b4f14610aa157600080fd5b8063dd62ed3e146109a5578063e96fada2146109eb578063f1f3bca314610a0b578063f2fde38b14610a2b57600080fd5b8063ca4b208b116100dc578063ca4b208b14610925578063d1b8df2214610945578063d686014214610965578063d7c010321461098557600080fd5b8063bfa21d6a146108b8578063c1adf7bc146108d8578063c287184e1461090557600080fd5b806395d89b411161016f578063a9059cbb11610149578063a9059cbb1461084d578063abe57e701461086d578063bafe446b1461088d578063bf56b371146108a257600080fd5b806395d89b41146107e95780639b02c40214610817578063a8aa1b311461082d57600080fd5b8063715018a6116101ab578063715018a61461076457806386f6c3c114610779578063893d20e8146107995780638da5cb5b146107cb57600080fd5b80636ddd1713146106e25780636f4ce4281461070157806370a082311461072e57600080fd5b8063421dd7c7116102ab5780635804f1e41161024957806361e08e721161022357806361e08e721461067757806363a803e11461068d578063658d4b7f146106a257806367243482146106c257600080fd5b80635804f1e41461062c578063584f969a1461064257806360bba03d1461065757600080fd5b8063507139351161028557806350713935146105ac57806354a1dfc9146105cc57806356a227f2146105ec578063571ac8b01461060c57600080fd5b8063421dd7c71461054a57806346d7edaa1461055f578063492a937b1461058c57600080fd5b8063234e949411610318578063313ce567116102f2578063313ce567146104ce57806331a0a3b3146104ea57806333f3d6281461050a57806334848b9a1461052a57600080fd5b8063234e94941461048457806323b872dd146104995780632b112e49146104b957600080fd5b8063095ea7b311610354578063095ea7b31461040a5780631031e36e1461043a57806313b4a7f41461044f57806318160ddd1461046f57600080fd5b80630445b6671461038657806306fdde03146103af578063095db78f146103e857600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60275481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506040805180820190915260078152662237b3b2a6b0b760c91b60208201525b6040516103a69190613dda565b3480156103f457600080fd5b50610408610403366004613a7e565b610ab7565b005b34801561041657600080fd5b5061042a6104253660046139e6565b610c73565b60405190151581526020016103a6565b34801561044657600080fd5b50610408610ce0565b34801561045b57600080fd5b5061040861046a3660046138f3565b610d45565b34801561047b57600080fd5b5060035461039c565b34801561049057600080fd5b5061039c610f03565b3480156104a557600080fd5b5061042a6104b4366004613977565b610f23565b3480156104c557600080fd5b5061039c610fb8565b3480156104da57600080fd5b50604051600981526020016103a6565b3480156104f657600080fd5b506104086105053660046138b9565b610ff9565b34801561051657600080fd5b5061042a6105253660046139e6565b611311565b34801561053657600080fd5b50610408610545366004613bc8565b6113d5565b34801561055657600080fd5b50610408611476565b34801561056b57600080fd5b5061039c61057a3660046138b9565b601b6020526000908152604090205481565b34801561059857600080fd5b506104086105a73660046139b8565b6114cb565b3480156105b857600080fd5b506104086105c7366004613bc8565b611674565b3480156105d857600080fd5b506104086105e7366004613b04565b6117fe565b3480156105f857600080fd5b50610408610607366004613b81565b611987565b34801561061857600080fd5b5061042a6106273660046138b9565b611a17565b34801561063857600080fd5b5061039c60225481565b34801561064e57600080fd5b50610408611a25565b34801561066357600080fd5b506104086106723660046139b8565b611a7a565b34801561068357600080fd5b5061039c60255481565b34801561069957600080fd5b5061039c611acf565b3480156106ae57600080fd5b506104086106bd3660046139b8565b611aea565b3480156106ce57600080fd5b506104086106dd366004613a12565b611bb9565b3480156106ee57600080fd5b5060265461042a90610100900460ff1681565b34801561070d57600080fd5b5061039c61071c3660046138b9565b60096020526000908152604090205481565b34801561073a57600080fd5b5061039c6107493660046138b9565b6001600160a01b031660009081526007602052604090205490565b34801561077057600080fd5b50610408611d20565b34801561078557600080fd5b50610408610794366004613c22565b611d94565b3480156107a557600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103a6565b3480156107d757600080fd5b506000546001600160a01b03166107b3565b3480156107f557600080fd5b506040805180820190915260058152642223a6a0a760d91b60208201526103db565b34801561082357600080fd5b5061039c601e5481565b34801561083957600080fd5b506020546107b3906001600160a01b031681565b34801561085957600080fd5b5061042a6108683660046139e6565b611f50565b34801561087957600080fd5b50610408610888366004613ba6565b611f5d565b34801561089957600080fd5b5061039c612073565b3480156108ae57600080fd5b5061039c60215481565b3480156108c457600080fd5b506015546107b3906001600160a01b031681565b3480156108e457600080fd5b5061039c6108f33660046138b9565b600a6020526000908152604090205481565b34801561091157600080fd5b50610408610920366004613b68565b61208e565b34801561093157600080fd5b506017546107b3906001600160a01b031681565b34801561095157600080fd5b506104086109603660046139e6565b612151565b34801561097157600080fd5b50610408610980366004613b4a565b612314565b34801561099157600080fd5b506104086109a036600461392c565b6123a5565b3480156109b157600080fd5b5061039c6109c03660046138f3565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109f757600080fd5b506016546107b3906001600160a01b031681565b348015610a1757600080fd5b5061039c610a26366004613aca565b61253d565b348015610a3757600080fd5b50610408610a463660046138b9565b61258a565b348015610a5757600080fd5b50610408610a663660046139b8565b612674565b348015610a7757600080fd5b5061039c60285481565b348015610a8d57600080fd5b506018546107b3906001600160a01b031681565b348015610aad57600080fd5b5061039c60235481565b336000908152602a602052604090205460ff1680610adf57506000546001600160a01b031633145b610b045760405162461bcd60e51b8152600401610afb90613ec4565b60405180910390fd5b8015610b1957601c5460ff16610b1957600080fd5b60005b82811015610c6d578115610ba857601e8054906000610b3a83614236565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea32858584818110610b7357610b73614267565b9050602002016020810190610b8891906138b9565b436002604051610b9b9493929190613d7a565b60405180910390a1610c08565b601b6000858584818110610bbe57610bbe614267565b9050602002016020810190610bd391906138b9565b6001600160a01b0316815260208101919091526040016000205415610c0857601e8054906000610c028361421f565b91905055505b81610c14576000610c16565b435b601b6000868685818110610c2c57610c2c614267565b9050602002016020810190610c4191906138b9565b6001600160a01b0316815260208101919091526040016000205580610c6581614236565b915050610b1c565b50505050565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610cce9086815260200190565b60405180910390a35060015b92915050565b336000908152602a602052604090205460ff1680610d0857506000546001600160a01b031633145b610d245760405162461bcd60e51b8152600401610afb90613ec4565b602454610100900460ff1615610d3957600080fd5b6024805460ff19169055565b6000546001600160a01b03163314610d6f5760405162461bcd60e51b8152600401610afb90613f32565b6001600160a01b038281166000818152600d602090815260408083208054600160ff1991821681179092559587168085528285208054881683179055858552600c845282852080548816831790558085528285208054881683179055948452600b83528184208054871682179055938352918290208054909416909217909255815160e081018352601060a082019081526f0283932b9b0b632902937baba32b91d160851b60c083015292516000805160206142ba833981519152939192839260608401928392610e649291610e5f91610e4b918c9101613d2e565b604051602081830303815290604052612764565b61297d565b8152602001600181525081526020016040518060400160405280610ebf604051806040016040528060118152602001700283932b9b0b6329020b2323932b9b99d1607d1b815250610e5f88604051602001610e4b9190613d2e565b81526001602091820152908252604080516060810182526000818301818152825281840152929091019190915251610ef79190613fe5565b60405180910390a15050565b6000610f116009600a614112565b600554610f1e91906140ad565b905090565b6001600160a01b038316600090815260086020908152604080832033845290915281205460001914610fa3576001600160a01b0384166000908152600860209081526040808320338452909152902054610f7e9083906141dc565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610fae8484846129a9565b90505b9392505050565b6002546001600160a01b039081166000908152600760205260408082205460015490931682528120549091610fec91614095565b600354610f1e91906141dc565b6000546001600160a01b031633146110235760405162461bcd60e51b8152600401610afb90613f32565b601880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b15801561107757600080fd5b505afa15801561108b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110af91906138d6565b6001600160a01b031663c9c65396601860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561110b57600080fd5b505afa15801561111f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114391906138d6565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b15801561118a57600080fd5b505af115801561119e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c291906138d6565b602080546001600160a01b0319166001600160a01b0392831690811782556000908152601a82526040808220805460ff1990811660019081179092559486168352600c80855292829020805490951617909355825160e08101845260a081019182526b02732bb902937baba32b91d160a51b60c082015292516000805160206142ba833981519152939283926060840192839261126a9291610e5f91610e4b918b9101613d2e565b815260016020918201529082526040805160808101825260148183019081527302732bb902634b8bab4b234ba3c902830b4b91d160651b60608301528354925194840194919384936112ce93610e5f92610e4b926001600160a01b03169101613d2e565b815260016020918201529082526040805160608101825260008183018181528252818401529290910191909152516113069190613e4f565b60405180910390a150565b336000908152602a602052604081205460ff168061133957506000546001600160a01b031633145b6113555760405162461bcd60e51b8152600401610afb90613ec4565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b15801561139d57600080fd5b505af11580156113b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb19190613ae7565b336000908152602a602052604090205460ff16806113fd57506000546001600160a01b031633145b6114195760405162461bcd60e51b8152600401610afb90613ec4565b60245460ff1615801561142c5750600a83105b61143557600080fd5b60238390556024805460ff19166001179055436021556114558242614095565b601f556114646009600a614112565b61146e90826141bd565b601d55505050565b336000908152602a602052604090205460ff168061149e57506000546001600160a01b031633145b6114ba5760405162461bcd60e51b8152600401610afb90613ec4565b601c805461ffff1916610100179055565b6000546001600160a01b031633146114f55760405162461bcd60e51b8152600401610afb90613f32565b6020546001600160a01b038381169116141561155e5760405162461bcd60e51b815260206004820152602260248201527f43616e277420616c7465722063757272656e74206c697175696469747920706160448201526134b960f11b6064820152608401610afb565b6001600160a01b0382166000908152601a60205260409020805460ff19168215151790556000805160206142ba833981519152816115d1576040518060400160405280601781526020017f4c697175696469747920506f6f6c2044697361626c6564000000000000000000815250611601565b60405180604001604052806016815260200175131a5c5d5a591a5d1e48141bdbdb08115b98589b195960521b8152505b6040805160a08101909152806060810180611622610e4b8960c08601613d2e565b8152600160209182015290825260408051606080820183526000828401818152835282850181905285850192909252825190810183528083018281528152928301529182015251610ef7929190613ded565b6000546001600160a01b0316331461169e5760405162461bcd60e51b8152600401610afb90613f32565b6000831180156116ae5750600082115b80156116ba5750600081115b80156116c857506127108111155b6116d157600080fd5b80836003546116e091906141bd565b6116ea91906140ad565b60045560035481906116fd9084906141bd565b61170791906140ad565b6005556040805160e08101909152600e60a082019081526d4d61782042757920546f6b656e7360901b60c0830152606082019081526000805160206142ba833981519152919081906080820161175f6009600a614112565b60045461176c91906140ad565b9052815260408051608081018252600f9181019182526e4d61782053656c6c20546f6b656e7360881b606082015290815260209182019181016117b16009600a614112565b6005546117be91906140ad565b90528152604080516060810182526000818301818152825260208281019190915290920191909152516117f19190613f9e565b60405180910390a1505050565b6000546001600160a01b031633146118285760405162461bcd60e51b8152600401610afb90613f32565b6000821161183557600080fd5b6026805462ffff0019166101008615150262ff000019161762010000851515021790556003546118669083906140ad565b6027556118756009600a614112565b61187f90826141bd565b6028556040805160e08101909152600760a0820190815266115b98589b195960ca1b60c0830152606082019081526000805160206142ba8339815191529190819060808201886118d05760006118d3565b60015b60ff16815250815260200160405180604001604052806040518060400160405280600c81526020016b53776170204d6178696d756d60a01b8152508152602001602754815250815260200160405180604001604052806040518060400160405280600f81526020016e4175746f2d70726f63657373696e6760881b815250815260200187611962576000611965565b60015b60ff16905290526040516119799190613f67565b60405180910390a150505050565b336000908152602a602052604090205460ff16806119af57506000546001600160a01b031633145b6119cb5760405162461bcd60e51b8152600401610afb90613ec4565b476001600160a01b0382166108fc60646119e586856141bd565b6119ef91906140ad565b6040518115909202916000818181858888f19350505050158015610c6d573d6000803e3d6000fd5b6000610cda82600019610c73565b336000908152602a602052604090205460ff1680611a4d57506000546001600160a01b031633145b611a695760405162461bcd60e51b8152600401610afb90613ec4565b6024805461ffff1916610101179055565b6000546001600160a01b03163314611aa45760405162461bcd60e51b8152600401610afb90613f32565b6001600160a01b03919091166000908152602a60205260409020805460ff1916911515919091179055565b6000611add6009600a614112565b600654610f1e91906140ad565b6000546001600160a01b03163314611b145760405162461bcd60e51b8152600401610afb90613f32565b6001600160a01b0382166000908152600b60205260409020805460ff19168215151790556000805160206142ba83398151915281611b77576040518060400160405280600d81526020016c1199595cc8115b999bdc98d959609a1b815250611601565b604080518082018252600c81526b1199595cc814995b5bdd995960a21b6020820152815160a0810190925290806060810180611622610e4b8960c08601613d2e565b6000546001600160a01b03163314611be35760405162461bcd60e51b8152600401610afb90613f32565b8215801590611bf157508083145b611bfa57600080fd5b3360005b84811015611d1857601a6000878784818110611c1c57611c1c614267565b9050602002016020810190611c3191906138b9565b6001600160a01b0316815260208101919091526040016000205460ff16158015611ca05750600d6000878784818110611c6c57611c6c614267565b9050602002016020810190611c8191906138b9565b6001600160a01b0316815260208101919091526040016000205460ff16155b15611d0657611d0482878784818110611cbb57611cbb614267565b9050602002016020810190611cd091906138b9565b611cdc6009600a614112565b878786818110611cee57611cee614267565b90506020020135611cff91906141bd565b612eea565b505b80611d1081614236565b915050611bfe565b505050505050565b6000546001600160a01b03163314611d4a5760405162461bcd60e51b8152600401610afb90613f32565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611dbe5760405162461bcd60e51b8152600401610afb90613f32565b60118690556010859055600f849055600e8390558285611dde8689614095565b611de89190614095565b611df29190614095565b60125560138290556014819055611e0a6002826140ad565b60125410611e1757600080fd5b6000805160206142ba8339815191526040518060600160405280604051806040016040528060405180604001604052806011815260200170151bdd185b081199594814195c98d95b9d607a1b81525081526020016014546012546064611e7d91906141bd565b611e8791906140ad565b905281526040805160808101825260119181019182527013585c9ad95d1a5b99c814195c98d95b9d607a1b6060820152908152601454602092830192820190611ed18a60646141bd565b611edb91906140ad565b9052815260408051608081018252601191810191825270131a5c5d5a591a5d1e4814195c98d95b9d607a1b6060820152908152601454602092830192820190611f258b60646141bd565b611f2f91906140ad565b90529052604051611f409190613e96565b60405180910390a1505050505050565b6000610fb13384846129a9565b6000546001600160a01b03163314611f875760405162461bcd60e51b8152600401610afb90613f32565b600082118015611f975750600081115b8015611fa557506127108111155b611fae57600080fd5b8082600354611fbd91906141bd565b611fc791906140ad565b60069081556040805160e0810190915260a0810191825265546f6b656e7360d01b60c0820152606081019182526000805160206142ba833981519152918190608082016120166009600a614112565b60065461202391906140ad565b90528152604080516060808201835260008284018181528352602083810182905280860193909352835191820184528184018181528252918101919091529181019190915251610ef79190613e12565b60006120816009600a614112565b600454610f1e91906140ad565b6000546001600160a01b031633146120b85760405162461bcd60e51b8152600401610afb90613f32565b601e8111156120c657600080fd5b60258190556040805160e081018252600660a0820190815265426c6f636b7360d01b60c08301526060808301918252608083018590529082528251808201845260008185018181528252602082810182905280850192909252845192830185528285018181528352908201528183015290516000805160206142ba833981519152916113069161401c565b336000908152602a602052604090205460ff168061217957506000546001600160a01b031633145b6121955760405162461bcd60e51b8152600401610afb90613ec4565b600060646121a383476141bd565b6121ad91906140ad565b60408051600280825260608201835292935060009290916020830190803683375050601854604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561221757600080fd5b505afa15801561222b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224f91906138d6565b8160008151811061226257612262614267565b60200260200101906001600160a01b031690816001600160a01b031681525050838160018151811061229657612296614267565b6001600160a01b03928316602091820292909201015260185460405163b6f9de9560e01b815291169063b6f9de959084906122dc90600090869033904290600401613da5565b6000604051808303818588803b1580156122f557600080fd5b505af1158015612309573d6000803e3d6000fd5b505050505050505050565b336000908152602a602052604090205460ff168061233c57506000546001600160a01b031633145b6123585760405162461bcd60e51b8152600401610afb90613ec4565b601c54610100900460ff161561236d57600080fd5b601c805460ff191683151517905562015180811061238a57600080fd5b80601f600082825461239c9190614095565b90915550505050565b6000546001600160a01b031633146123cf5760405162461bcd60e51b8152600401610afb90613f32565b601580546001600160a01b038086166001600160a01b0319928316179092556016805485841690831617905560178054928416929091169190911790556040805160e081018252601460a082019081527302634b8bab4b234ba3c902932b1b2b4bb32b91d160651b60c083015291516000805160206142ba8339815191529282916060830191829161246e9190610e5f90610e4b908c90602001613d2e565b81526020016001815250815260200160405180604001604052806124cc60405180604001604052806014815260200173026b0b935b2ba34b733902932b1b2b4bb32b91d160651b815250610e5f89604051602001610e4b9190613d2e565b81526020016001815250815260200160405180604001604052806125246040518060400160405280600e81526020016d02232bb102932b1b2b4bb32b91d160951b815250610e5f88604051602001610e4b9190613d2e565b8152600160209091015290526040516117f19190613efb565b6000436023546021546125509190614095565b10612564576001601454610cda91906141dc565b811561257a57601354601254610cda9190614095565b601354601254610cda91906141dc565b6000546001600160a01b031633146125b45760405162461bcd60e51b8152600401610afb90613f32565b6001600160a01b0381166126195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610afb565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461269e5760405162461bcd60e51b8152600401610afb90613f32565b6001600160a01b0382166000908152600c60205260409020805460ff19168215151790556000805160206142ba83398151915281612711576040518060400160405280601a81526020017f5472616e73616374696f6e204c696d697420456e666f72636564000000000000815250611601565b604080518082018252601981527f5472616e73616374696f6e204c696d69742052656d6f766564000000000000006020820152815160a0810190925290806060810180611622610e4b8960c08601613d2e565b60408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516060919060009061279f9060026141bd565b6127aa906002614095565b67ffffffffffffffff8111156127c2576127c261427d565b6040519080825280601f01601f1916602001820160405280156127ec576020820181803683370190505b509050600360fc1b8160008151811061280757612807614267565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061283657612836614267565b60200101906001600160f81b031916908160001a90535060005b84518110156129755782600486838151811061286e5761286e614267565b016020015182516001600160f81b031990911690911c60f81c90811061289657612896614267565b01602001516001600160f81b031916826128b18360026141bd565b6128bc906002614095565b815181106128cc576128cc614267565b60200101906001600160f81b031916908160001a905350828582815181106128f6576128f6614267565b602091010151815160f89190911c600f1690811061291657612916614267565b01602001516001600160f81b031916826129318360026141bd565b61293c906003614095565b8151811061294c5761294c614267565b60200101906001600160f81b031916908160001a9053508061296d81614236565b915050612850565b509392505050565b60608282604051602001612992929190613d4b565b604051602081830303815290604052905092915050565b60006001600160a01b038416612a015760405162461bcd60e51b815260206004820152601860248201527f42455032303a207472616e736665722066726f6d2030783000000000000000006044820152606401610afb565b6001600160a01b038316612a505760405162461bcd60e51b8152602060048201526016602482015275042455032303a207472616e7366657220746f203078360541b6044820152606401610afb565b60008211612a985760405162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206265203e207a65726f60581b6044820152606401610afb565b6001600160a01b038416600090815260076020526040902054821115612af75760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610afb565b602154158015612b1f57506001600160a01b0383166000908152601a602052604090205460ff165b15612ba8576001600160a01b0384166000908152600d602052604090205460ff16612b8c5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206e6f74206164646564207965742e00000000000000006044820152606401610afb565b612ba843602155426022556026805461ff001916610100179055565b60245460ff16612c35576001600160a01b0384166000908152600d602052604090205460ff1680612bf157506001600160a01b0383166000908152600d602052604090205460ff165b612c355760405162461bcd60e51b81526020600482015260156024820152742a3930b234b733903737ba1037b832b7103cb2ba1760591b6044820152606401610afb565b60265460ff16158015612c4a575042601f5411155b15612c72576026805460ff191660011790556000602555600354600681905560048190556005555b612c7d848484612fa4565b6001600160a01b0383166000908152601a602052604090205460ff16158015612cb457506001546001600160a01b03848116911614155b15612ce3576001600160a01b0383166000908152600c602052604090205460ff16612ce357612ce383836132f9565b601c5460ff168015612cf6575042601f54115b15612dc0576001600160a01b0384166000908152601a602052604090205460ff168015612d2c5750326001600160a01b03841614155b8015612d4e57506001600160a01b0383166000908152601b6020526040902054155b15612dc0576001600160a01b0383166000908152601b60205260408120439055601e805491612d7c83614236565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea3284436000604051612db79493929190613d7a565b60405180910390a15b60295460ff1615612ddd57612dd6848484612eea565b9050610fb1565b6001600160a01b038416600090815260076020526040902054612e019083906141dc565b6001600160a01b038516600090815260076020908152604080832093909355600b90529081205460ff1615612e365782612e40565b612e40848461337e565b9050612e4b846133fc565b15612e5f578215612e5f57612e5f83613478565b6001600160a01b038416600090815260076020526040902054612e83908290614095565b6001600160a01b0380861660008181526007602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612ed79085815260200190565b60405180910390a3506001949350505050565b6001600160a01b038316600090815260076020526040812054612f0e9083906141dc565b6001600160a01b038086166000908152600760205260408082209390935590851681522054612f3e908390614095565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612f929086815260200190565b60405180910390a35060019392505050565b6001600160a01b0383166000908152600c602052604090205460ff1680612ff657506001600160a01b0383166000908152601a602052604090205460ff16612fee57600554612ff2565b6004545b8111155b6130365760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610afb565b6001600160a01b0383166000908152600c602052604090205460ff168061308257506025546001600160a01b0383166000908152600a6020526040902054439161307f91614095565b11155b6130ce5760405162461bcd60e51b815260206004820152601d60248201527f5472616e736665722072617465206c696d69742065786365656465642e0000006044820152606401610afb565b6001600160a01b0383166000908152601b6020526040902054156131b1576130f86009600a614112565b601d5461310591906141bd565b811115801561312a57506001600160a01b038316600090815260096020526040902054155b8015613137575042601f54115b6131955760405162461bcd60e51b815260206004820152602960248201527f57616c6c65742070726f7465637465642c20706c6561736520636f6e746163746044820152681039bab83837b93a1760b91b6064820152608401610afb565b6001600160a01b03831660009081526009602052604090204390555b6001600160a01b0382166000908152601a602052604090205460ff16156131f05750506001600160a01b03166000908152600960205260409020439055565b6001600160a01b0383166000908152600b602052604090205460ff166132f457601c5460ff168015613223575042601f54115b801561323d5750326000908152600a602052604090205443145b801561325f57506001600160a01b0382166000908152601b6020526040902054155b156132c0576001600160a01b0382166000908152601b602052604090819020439081905590517f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea916132b79132918691600190613d7a565b60405180910390a15b6001600160a01b0382166000818152600a6020526040902043905532146132f457326000908152600a602052604090204390555b505050565b6006546001600160a01b0383166000908152600760205260409020548190613322908490614095565b11156132f45760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610afb565b6001600160a01b0382166000908152601a602052604081205460145460ff9091169082906133ab8361253d565b6133b590866141bd565b6133bf91906140ad565b306000908152600760205260408120805492935083929091906133e3908490614095565b909155506133f3905081856141dc565b95945050505050565b336000908152601a602052604081205460ff1615801561341f575060295460ff16155b80156134325750602654610100900460ff165b801561345657506001600160a01b0382166000908152601a602052604090205460ff165b8015610cda575060285430600090815260076020526040902054101592915050565b6029805460ff1916600117905560275460009082106134995760275461349b565b815b306000908152600760205260409020549091508111156134c75750306000908152600760205260409020545b60006012546002601054846134dc91906141bd565b6134e691906140ad565b6134f091906140ad565b90506134fc81836141dc565b6040805160028082526060820183529294506000929091602083019080368337019050509050308160008151811061353657613536614267565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561358a57600080fd5b505afa15801561359e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c291906138d6565b816001815181106135d5576135d5614267565b6001600160a01b03928316602091820292909201015260185460405163791ac94760e01b81524792919091169063791ac9479061361f908790600090879030904290600401614059565b600060405180830381600087803b15801561363957600080fd5b505af115801561364d573d6000803e3d6000fd5b505050506000814761365f91906141dc565b90506000600260105461367291906140ad565b60125461367f91906141dc565b905060008160026010548561369491906141bd565b61369e91906140ad565b6136a891906140ad565b9050600082600f54856136bb91906141bd565b6136c591906140ad565b9050600083600e54866136d891906141bd565b6136e291906140ad565b90508115613726576016546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613724573d6000803e3d6000fd5b505b8015613768576017546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613766573d6000803e3d6000fd5b505b87156138165760185460155460405163f305d71960e01b8152306004820152602481018b905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990859060c4016060604051808303818588803b1580156137d957600080fd5b505af11580156137ed573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138129190613bf4565b5050505b60408051848152602081018490529081018290527fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df99060600160405180910390a150506029805460ff191690555050505050505050565b60008083601f84011261387f57600080fd5b50813567ffffffffffffffff81111561389757600080fd5b6020830191508360208260051b85010111156138b257600080fd5b9250929050565b6000602082840312156138cb57600080fd5b8135610fb181614293565b6000602082840312156138e857600080fd5b8151610fb181614293565b6000806040838503121561390657600080fd5b823561391181614293565b9150602083013561392181614293565b809150509250929050565b60008060006060848603121561394157600080fd5b833561394c81614293565b9250602084013561395c81614293565b9150604084013561396c81614293565b809150509250925092565b60008060006060848603121561398c57600080fd5b833561399781614293565b925060208401356139a781614293565b929592945050506040919091013590565b600080604083850312156139cb57600080fd5b82356139d681614293565b91506020830135613921816142ab565b600080604083850312156139f957600080fd5b8235613a0481614293565b946020939093013593505050565b60008060008060408587031215613a2857600080fd5b843567ffffffffffffffff80821115613a4057600080fd5b613a4c8883890161386d565b90965094506020870135915080821115613a6557600080fd5b50613a728782880161386d565b95989497509550505050565b600080600060408486031215613a9357600080fd5b833567ffffffffffffffff811115613aaa57600080fd5b613ab68682870161386d565b909450925050602084013561396c816142ab565b600060208284031215613adc57600080fd5b8135610fb1816142ab565b600060208284031215613af957600080fd5b8151610fb1816142ab565b60008060008060808587031215613b1a57600080fd5b8435613b25816142ab565b93506020850135613b35816142ab565b93969395505050506040820135916060013590565b60008060408385031215613b5d57600080fd5b8235613a04816142ab565b600060208284031215613b7a57600080fd5b5035919050565b60008060408385031215613b9457600080fd5b82359150602083013561392181614293565b60008060408385031215613bb957600080fd5b50508035926020909101359150565b600080600060608486031215613bdd57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613c0957600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215613c3b57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600081518084526020808501945080840160005b83811015613c9e5781516001600160a01b031687529582019590820190600101613c79565b509495945050505050565b600082606081018360005b6003811015613cf7578383038752815160408151818652613cd782870182613d02565b602093840151968401969096525050968701969190910190600101613cb4565b509095945050505050565b60008151808452613d1a8160208601602086016141f3565b601f01601f19169290920160200192915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b60008351613d5d8184602088016141f3565b835190830190613d718183602088016141f3565b01949350505050565b6001600160a01b039485168152929093166020830152604082015260ff909116606082015260800190565b848152608060208201526000613dbe6080830186613c65565b6001600160a01b03949094166040830152506060015292915050565b602081526000610fb16020830184613d02565b604081526000613e006040830185613d02565b82810360208401526133f38185613ca9565b6040815260136040820152724d6178696d756d2057616c6c65742053697a6560681b6060820152608060208201526000610fb16080830184613ca9565b60408152601760408201527f45786368616e676520526f7574657220557064617465640000000000000000006060820152608060208201526000610fb16080830184613ca9565b6040815260046040820152634665657360e01b6060820152608060208201526000610fb16080830184613ca9565b6020808252601b908201527f43616c6c6572206973206e6f742061207465616d206d656d6265720000000000604082015260600190565b60408152600d60408201526c4665652052656365697665727360981b6060820152608060208201526000610fb16080830184613ca9565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60408152600d60408201526c537761702053657474696e677360981b6060820152608060208201526000610fb16080830184613ca9565b60408152601860408201527f4d6178696d756d205472616e73616374696f6e2053697a6500000000000000006060820152608060208201526000610fb16080830184613ca9565b60408152600d60408201526c050726573616c6520536574757609c1b6060820152608060208201526000610fb16080830184613ca9565b604081526013604082015272141d5c98da185cd94814985d1948131a5b5a5d606a1b6060820152608060208201526000610fb16080830184613ca9565b85815284602082015260a06040820152600061407860a0830186613c65565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156140a8576140a8614251565b500190565b6000826140ca57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561410a5781600019048211156140f0576140f0614251565b808516156140fd57918102915b93841c93908002906140d4565b509250929050565b6000610fb160ff84168360008261412b57506001610cda565b8161413857506000610cda565b816001811461414e576002811461415857614174565b6001915050610cda565b60ff84111561416957614169614251565b50506001821b610cda565b5060208310610133831016604e8410600b8410161715614197575081810a610cda565b6141a183836140cf565b80600019048211156141b5576141b5614251565b029392505050565b60008160001904831182151516156141d7576141d7614251565b500290565b6000828210156141ee576141ee614251565b500390565b60005b8381101561420e5781810151838201526020016141f6565b83811115610c6d5750506000910152565b60008161422e5761422e614251565b506000190190565b600060001982141561424a5761424a614251565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146142a857600080fd5b50565b80151581146142a857600080fdfe6e502a17c2522c4dc061bacfc992cb08b19348f65d5ffc44766e54a42cf15b96a2646970667358221220d00efcfcc1f55961ed9c19b08f1e20a50b83c99f0dc210de277a173f1c66b45b64736f6c63430008070033

Deployed Bytecode Sourcemap

12991:21517:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15298:50;;;;;;;;;;;;;;;;;;;24031:25:1;;;24019:2;24004:18;15298:50:0;;;;;;;;16802:71;;;;;;;;;;-1:-1:-1;16865:5:0;;;;;;;;;;;;-1:-1:-1;;;16865:5:0;;;;16802:71;;;;;;;:::i;20444:617::-;;;;;;;;;;-1:-1:-1;20444:617:0;;;;;:::i;:::-;;:::i;:::-;;17543:216;;;;;;;;;;-1:-1:-1;17543:216:0;;;;;:::i;:::-;;:::i;:::-;;;12946:14:1;;12939:22;12921:41;;12909:2;12894:18;17543:216:0;12781:187:1;19808:115:0;;;;;;;;;;;;;:::i;29233:621::-;;;;;;;;;;-1:-1:-1;29233:621:0;;;;;:::i;:::-;;:::i;16550:88::-;;;;;;;;;;-1:-1:-1;16623:12:0;;16550:88;;17067:107;;;;;;;;;;;;;:::i;21233:341::-;;;;;;;;;;-1:-1:-1;21233:341:0;;;;;:::i;:::-;;:::i;33506:138::-;;;;;;;;;;;;;:::i;16644:71::-;;;;;;;;;;-1:-1:-1;16644:71:0;;13309:1;25120:36:1;;25108:2;25093:18;16644:71:0;24978:184:1;28718:503:0;;;;;;;;;;-1:-1:-1;28718:503:0;;;;;:::i;:::-;;:::i;18997:189::-;;;;;;;;;;-1:-1:-1;18997:189:0;;;;;:::i;:::-;;:::i;19424:372::-;;;;;;;;;;-1:-1:-1;19424:372:0;;;;;:::i;:::-;;:::i;20305:127::-;;;;;;;;;;;;;:::i;14740:45::-;;;;;;;;;;-1:-1:-1;14740:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;28362:344;;;;;;;;;;-1:-1:-1;28362:344:0;;;;;:::i;:::-;;:::i;30091:534::-;;;;;;;;;;-1:-1:-1;30091:534:0;;;;;:::i;:::-;;:::i;32970:528::-;;;;;;;;;;-1:-1:-1;32970:528:0;;;;;:::i;:::-;;:::i;19198:214::-;;;;;;;;;;-1:-1:-1;19198:214:0;;;;;:::i;:::-;;:::i;17767:122::-;;;;;;;;;;-1:-1:-1;17767:122:0;;;;;:::i;:::-;;:::i;15025:27::-;;;;;;;;;;;;;;;;19935:111;;;;;;;;;;;;;:::i;17901:119::-;;;;;;;;;;-1:-1:-1;17901:119:0;;;;;:::i;:::-;;:::i;15156:28::-;;;;;;;;;;;;;;;;17180:105;;;;;;;;;;;;;:::i;30995:263::-;;;;;;;;;;-1:-1:-1;30995:263:0;;;;;:::i;:::-;;:::i;18032:468::-;;;;;;;;;;-1:-1:-1;18032:468:0;;;;;:::i;:::-;;:::i;15228:30::-;;;;;;;;;;-1:-1:-1;15228:30:0;;;;;;;;;;;13671:44;;;;;;;;;;-1:-1:-1;13671:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;17291:105;;;;;;;;;;-1:-1:-1;17291:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;17375:18:0;17357:7;17375:18;;;:9;:18;;;;;;;17291:105;12437:148;;;;;;;;;;;;;:::i;31571:762::-;;;;;;;;;;-1:-1:-1;31571:762:0;;;;;:::i;:::-;;:::i;16879:71::-;;;;;;;;;;-1:-1:-1;16922:7:0;11861:6;-1:-1:-1;;;;;11861:6:0;16879:71;;;-1:-1:-1;;;;;9898:32:1;;;9880:51;;9868:2;9853:18;16879:71:0;9734:203:1;11796:79:0;;;;;;;;;;-1:-1:-1;11834:7:0;11861:6;-1:-1:-1;;;;;11861:6:0;11796:79;;16721:75;;;;;;;;;;-1:-1:-1;16786:7:0;;;;;;;;;;;;-1:-1:-1;;;16786:7:0;;;;16721:75;;14896:30;;;;;;;;;;;;;;;;14965:19;;;;;;;;;;-1:-1:-1;14965:19:0;;;;-1:-1:-1;;;;;14965:19:0;;;21069:156;;;;;;;;;;-1:-1:-1;21069:156:0;;;;;:::i;:::-;;:::i;30637:350::-;;;;;;;;;;-1:-1:-1;30637:350:0;;;;;:::i;:::-;;:::i;16956:105::-;;;;;;;;;;;;;:::i;14993:25::-;;;;;;;;;;;;;;;;14190:97;;;;;;;;;;-1:-1:-1;14190:97:0;;;;-1:-1:-1;;;;;14190:97:0;;;13722:43;;;;;;;;;;-1:-1:-1;13722:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;29862:221;;;;;;;;;;-1:-1:-1;29862:221:0;;;;;:::i;:::-;;:::i;14398:32::-;;;;;;;;;;-1:-1:-1;14398:32:0;;;;-1:-1:-1;;;;;14398:32:0;;;18512:473;;;;;;;;;;-1:-1:-1;18512:473:0;;;;;:::i;:::-;;:::i;20058:235::-;;;;;;;;;;-1:-1:-1;20058:235:0;;;;;:::i;:::-;;:::i;32341:621::-;;;;;;;;;;-1:-1:-1;32341:621:0;;;;;:::i;:::-;;:::i;17402:133::-;;;;;;;;;;-1:-1:-1;17402:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17504:19:0;;;17486:7;17504:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17402:133;14294:97;;;;;;;;;;-1:-1:-1;14294:97:0;;;;-1:-1:-1;;;;;14294:97:0;;;25764:243;;;;;;;;;;-1:-1:-1;25764:243:0;;;;;:::i;:::-;;:::i;12740:244::-;;;;;;;;;;-1:-1:-1;12740:244:0;;;;;:::i;:::-;;:::i;31266:297::-;;;;;;;;;;-1:-1:-1;31266:297:0;;;;;:::i;:::-;;:::i;15355:49::-;;;;;;;;;;;;;;;;14439:24;;;;;;;;;;-1:-1:-1;14439:24:0;;;;-1:-1:-1;;;;;14439:24:0;;;15059:25;;;;;;;;;;;;;;;;20444:617;6498:10;15586:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;11834:7:0;11861:6;-1:-1:-1;;;;;11861:6:0;15614:10;:21;15586:49;15578:89;;;;-1:-1:-1;;;15578:89:0;;;;;;;:::i;:::-;;;;;;;;;20544:8:::1;20540:67;;;20577:17;::::0;::::1;;20569:26;;;::::0;::::1;;20632:6;20627:427;20644:19:::0;;::::1;20627:427;;;20703:8;20699:277;;;20732:15;:17:::0;;;:15:::1;:17;::::0;::::1;:::i;:::-;;;;;;20773:56;20789:9;20800:8;;20809:1;20800:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20813:12;20827:1;20773:56;;;;;;;;;:::i;:::-;;;;;;;;20699:277;;;20887:9;:22;20897:8;;20906:1;20897:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20887:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20887:22:0;;:27;20883:71:::1;;20937:15;:17:::0;;;:15:::1;:17;::::0;::::1;:::i;:::-;;;;;;20883:71;21015:8;:27;;21041:1;21015:27;;;21026:12;21015:27;20990:9;:22;21000:8;;21009:1;21000:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20990:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20990:22:0;:52;20665:3;::::1;::::0;::::1;:::i;:::-;;;;20627:427;;;;20444:617:::0;;;:::o;17543:216::-;17647:10;17618:4;17635:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17635:32:0;;;;;;;;;;:41;;;17692:37;17618:4;;17635:32;;17692:37;;;;17670:6;24031:25:1;;24019:2;24004:18;;23885:177;17692:37:0;;;;;;;;-1:-1:-1;17747:4:0;17543:216;;;;;:::o;19808:115::-;6498:10;15586:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;11834:7:0;11861:6;-1:-1:-1;;;;;11861:6:0;15614:10;:21;15586:49;15578:89;;;;-1:-1:-1;;;15578:89:0;;;;;;;:::i;:::-;19870:13:::1;::::0;::::1;::::0;::::1;;;19869:14;19861:23;;;::::0;::::1;;19895:12;:20:::0;;-1:-1:-1;;19895:20:0::1;::::0;;19808:115::o;29233:621::-;12008:6;;-1:-1:-1;;;;;12008:6:0;6498:10;12008:22;12000:67;;;;-1:-1:-1;;;12000:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29343:31:0;;::::1;;::::0;;;:16:::1;:31;::::0;;;;;;;:38;;29377:4:::1;-1:-1:-1::0;;29343:38:0;;::::1;::::0;::::1;::::0;;;29392:32;;::::1;::::0;;;;;;:39;;;::::1;::::0;::::1;::::0;;29442:30;;;:15:::1;:30:::0;;;;;:37;;;::::1;::::0;::::1;::::0;;29490:31;;;;;;:38;;;::::1;::::0;::::1;::::0;;29539:26;;;:11:::1;:26:::0;;;;;:33;;;::::1;::::0;::::1;::::0;;29583:27;;;;;;;:34;;;;::::1;::::0;;::::1;::::0;;;29633:213;;29671:73;;;;;::::1;29667:81:::0;;;29671:73;;;-1:-1:-1;;;29671:73:0;;;;29711:31;;-1:-1:-1;;;;;;;;;;;29633:213:0;;;;;::::1;::::0;::::1;::::0;;;29671:73:::1;::::0;29667:81;29702:41:::1;::::0;29711:31:::1;::::0;29343;;29711::::1;;:::i;:::-;;;;;;;;;;;;;29702:8;:41::i;:::-;29671:11;:73::i;:::-;29667:81;;;;29746:1;29667:81;;::::0;29633:213:::1;;;;29749:83;;;;;;;;29753:75;;;;;;;;;;;;;;-1:-1:-1::0;;;29753:75:0::1;;::::0;29785:42:::1;29811:14;29794:32;;;;;;;;:::i;29753:75::-;29749:83:::0;;29830:1:::1;29749:83;::::0;;::::1;::::0;29633:213;;;29834:10:::1;::::0;;;;;;;-1:-1:-1;29834:10:0;;::::1;::::0;;;;;;;::::1;::::0;29633:213;;;::::1;::::0;;;;;::::1;::::0;;::::1;:::i;:::-;;;;;;;;29233:621:::0;;:::o;17067:107::-;17117:7;17155:15;13309:1;17155:2;:15;:::i;:::-;17135:16;;:36;;;;:::i;:::-;17128:43;;17067:107;:::o;21233:341::-;-1:-1:-1;;;;;21353:19:0;;21333:4;21353:19;;;:11;:19;;;;;;;;21373:10;21353:31;;;;;;;;-1:-1:-1;;21353:52:0;21350:157;;-1:-1:-1;;;;;21455:19:0;;;;;;:11;:19;;;;;;;;21475:10;21455:31;;;;;;;;:40;;21489:6;;21455:40;:::i;:::-;-1:-1:-1;;;;;21421:19:0;;;;;;:11;:19;;;;;;;;21441:10;21421:31;;;;;;;:74;21350:157;21526:40;21540:6;21548:9;21559:6;21526:13;:40::i;:::-;21519:47;;21233:341;;;;;;:::o;33506:138::-;33630:4;;-1:-1:-1;;;;;33630:4:0;;;33559:7;17375:18;;;:9;:18;;;;;;;33612:4;;;;;17375:18;;;;;33559:7;;33602:33;;;:::i;:::-;33586:12;;:50;;;;:::i;28718:503::-;12008:6;;-1:-1:-1;;;;;12008:6:0;6498:10;12008:22;12000:67;;;;-1:-1:-1;;;12000:67:0;;;;;;;:::i;:::-;28789:6:::1;:30:::0;;-1:-1:-1;;;;;;28789:30:0::1;-1:-1:-1::0;;;;;28789:30:0;::::1;::::0;;::::1;::::0;;;28849:16:::1;::::0;;-1:-1:-1;;;28849:16:0;;;;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;28789:30;28849:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28837:40:0::1;;28878:6;;;;;;;;;-1:-1:-1::0;;;;;28878:6:0::1;-1:-1:-1::0;;;;;28878:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28837:70;::::0;-1:-1:-1;;;;;;28837:70:0::1;::::0;;;;;;-1:-1:-1;;;;;10396:15:1;;;28837:70:0::1;::::0;::::1;10378:34:1::0;28901:4:0::1;10428:18:1::0;;;10421:43;10313:18;;28837:70:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28830:4;:77:::0;;-1:-1:-1;;;;;;28830:77:0::1;-1:-1:-1::0;;;;;28830:77:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;28918:20:0;;;:14:::1;:20:::0;;;;;;:27;;-1:-1:-1;;28918:27:0;;::::1;-1:-1:-1::0;28918:27:0;;::::1;::::0;;;28956:26;;::::1;::::0;;:15:::1;:26:::0;;;;;;;:33;;;;::::1;;::::0;;;29005:208;;29053:65;;;;;29049:73;;;29053:65;;;-1:-1:-1;;;29053:65:0;;;;29089:27;;-1:-1:-1;;;;;;;;;;;29005:208:0;;;;::::1;::::0;::::1;::::0;;;29053:65:::1;::::0;29049:73;29080:37:::1;::::0;29089:27:::1;::::0;28956:26;;29089:27:::1;;:::i;29053:65::-;29049:73:::0;;29120:1:::1;29049:73;::::0;;::::1;::::0;29005:208;;;29123:76:::1;::::0;;29127:68;;;;;::::1;29123:76:::0;;::::1;29127:68:::0;;;-1:-1:-1;;;29127:68:0;;;;29188:4;;29171:22;;29005:208;;::::1;::::0;29123:76;;;;29127:68:::1;::::0;29162:32:::1;::::0;29171:22:::1;::::0;-1:-1:-1;;;;;29188:4:0::1;::::0;29171:22:::1;;:::i;29127:68::-;29123:76:::0;;29197:1:::1;29123:76;::::0;;::::1;::::0;29005:208;;;29201:10:::1;::::0;;;;;;;-1:-1:-1;29201:10:0;;::::1;::::0;;;;;;;::::1;::::0;29005:208;;;::::1;::::0;;;;;::::1;::::0;;::::1;:::i;:::-;;;;;;;;28718:503:::0;:::o;18997:189::-;6498:10;19092:12;15586:24;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;11834:7:0;11861:6;-1:-1:-1;;;;;11861:6:0;15614:10;:21;15586:49;15578:89;;;;-1:-1:-1;;;15578:89:0;;;;;;;:::i;:::-;19129:49:::1;::::0;-1:-1:-1;;;19129:49:0;;19159:10:::1;19129:49;::::0;::::1;12056:51:1::0;12123:18;;;12116:34;;;-1:-1:-1;;;;;19129:29:0;::::1;::::0;::::1;::::0;12029:18:1;;19129:49:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19424:372::-:0;6498:10;15586:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;11834:7:0;11861:6;-1:-1:-1;;;;;11861:6:0;15614:10;:21;15586:49;15578:89;;;;-1:-1:-1;;;15578:89:0;;;;;;;:::i;:::-;19541:12:::1;::::0;::::1;;19540:13;:33:::0;::::1;;;;19571:2;19557:11;:16;19540:33;19532:42;;;::::0;::::1;;19585:10;:24:::0;;;19620:12:::1;:19:::0;;-1:-1:-1;;19620:19:0::1;19635:4;19620:19;::::0;;19663:12:::1;19650:10;:25:::0;19704:29:::1;19722:11:::0;19704:15:::1;:29;:::i;:::-;19686:15;:47:::0;19772:15:::1;13309:1;19772:2;:15;:::i;:::-;19762:26;::::0;:6;:26:::1;:::i;:::-;19744:15;:44:::0;-1:-1:-1;;;19424:372:0:o;20305:127::-;6498:10;15586:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;11834:7:0;11861:6;-1:-1:-1;;;;;11861:6:0;15614:10;:21;15586:49;15578:89;;;;-1:-1:-1;;;15578:89:0;;;;;;;:::i;:::-;20363:18:::1;:25:::0;;-1:-1:-1;;20399:25:0;20363::::1;20399::::0;;;20305:127::o;28362:344::-;12008:6;;-1:-1:-1;;;;;12008:6:0;6498:10;12008:22;12000:67;;;;-1:-1:-1;;;12000:67:0;;;;;;;:::i;:::-;28457:4:::1;::::0;-1:-1:-1;;;;;28451:10:0;;::::1;28457:4:::0;::::1;28451:10;;28443:57;;;::::0;-1:-1:-1;;;28443:57:0;;23140:2:1;28443:57:0::1;::::0;::::1;23122:21:1::0;23179:2;23159:18;;;23152:30;23218:34;23198:18;;;23191:62;-1:-1:-1;;;23269:18:1;;;23262:32;23311:19;;28443:57:0::1;22938:398:1::0;28443:57:0::1;-1:-1:-1::0;;;;;28511:18:0;::::1;;::::0;;;:14:::1;:18;::::0;;;;:27;;-1:-1:-1;;28511:27:0::1;::::0;::::1;;;::::0;;-1:-1:-1;;;;;;;;;;;28511:27:0;28570:61:::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;;;28570:61:0::1;;::::0;::::1;28554:144;::::0;;28634:38;;;;;;28554:144;::::1;::::0;::::1;::::0;28638:30:::1;28647:20;28664:2:::0;28647:20;;;::::1;:::i;28638:30::-;28634:38:::0;;28670:1:::1;28634:38;::::0;;::::1;::::0;28554:144;;;28674:10:::1;::::0;;;;;;;;-1:-1:-1;28674:10:0;;::::1;::::0;;;;;;;::::1;::::0;;;28554:144;;::::1;::::0;;;;28686:10;;;;;;;;;::::1;::::0;;;;;;;::::1;::::0;28554:144;;;;;::::1;::::0;;;::::1;:::i;30091:534::-:0;12008:6;;-1:-1:-1;;;;;12008:6:0;6498:10;12008:22;12000:67;;;;-1:-1:-1;;;12000:67:0;;;;;;;:::i;:::-;30226:1:::1;30211:12;:16;:37;;;;;30247:1;30231:13;:17;30211:37;:52;;;;;30262:1;30252:7;:11;30211:52;:72;;;;;30278:5;30267:7;:16;;30211:72;30203:81;;;::::0;::::1;;30345:7;30329:12;30314;;:27;;;;:::i;:::-;30313:39;;;;:::i;:::-;30295:15;:57:::0;30383:12:::1;::::0;30415:7;;30383:28:::1;::::0;30398:13;;30383:28:::1;:::i;:::-;30382:40;;;;:::i;:::-;30363:16;:59:::0;30438:179:::1;::::0;;30483:58;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;30483:58:0;;;;30438:179:::1;::::0;::::1;30483:58:::0;;;-1:-1:-1;;;;;;;;;;;30438:179:0;;;;30483:58;;;30524:15:::1;13309:1;30524:2;:15;:::i;:::-;30505;;:35;;;;:::i;:::-;30483:58:::0;;30438:179;;30543:60:::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;30543:60:0;;;;;;;30438:179:::1;::::0;;::::1;::::0;30543:60;::::1;30586:15;13309:1;30586:2;:15;:::i;:::-;30566:16;;:36;;;;:::i;:::-;30543:60:::0;;30438:179;;30605:10:::1;::::0;;;;;;;-1:-1:-1;30605:10:0;;::::1;::::0;;;;;30438:179:::1;30605:10:::0;;::::1;::::0;;;;30438:179;;::::1;::::0;;;;;::::1;::::0;;::::1;:::i;:::-;;;;;;;;30091:534:::0;;;:::o;32970:528::-;12008:6;;-1:-1:-1;;;;;12008:6:0;6498:10;12008:22;12000:67;;;;-1:-1:-1;;;12000:67:0;;;;;;;:::i;:::-;33133:1:::1;33118:12;:16;33110:25;;;::::0;::::1;;33146:11;:22:::0;;-1:-1:-1;;33179:32:0;33146:22:::1;::::0;::::1;;;-1:-1:-1::0;;33179:32:0;;;;::::1;;;;::::0;;33238:12:::1;::::0;:27:::1;::::0;33253:12;;33238:27:::1;:::i;:::-;33222:13;:43:::0;33306:15:::1;13309:1;33306:2;:15;:::i;:::-;33290:32;::::0;:12;:32:::1;:::i;:::-;33276:11;:46:::0;33338:152:::1;::::0;;33372:32;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;33372:32:0;;;;33338:152:::1;::::0;::::1;33372:32:::0;;;-1:-1:-1;;;;;;;;;;;33338:152:0;;;;33372:32;;;33387:8;:16:::1;;33402:1;33387:16;;;33398:1;33387:16;33372:32;;;;::::0;33338:152:::1;;;;33405:34;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;33405:34:0::1;;::::0;::::1;;;;33425:13;;33405:34;;::::0;33338:152:::1;;;;33441:47;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;33441:47:0::1;;::::0;::::1;;;;33464:15;:23;;33486:1;33464:23;;;33482:1;33464:23;33441:47;;::::0;;33338:152;;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;;;;;;;;32970:528:::0;;;;:::o;19198:214::-;6498:10;15586:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;11834:7:0;11861:6;-1:-1:-1;;;;;11861:6:0;15614:10;:21;15586:49;15578:89;;;;-1:-1:-1;;;15578:89:0;;;;;;;:::i;:::-;19313:21:::1;-1:-1:-1::0;;;;;19345:21:0;::::1;:59;19400:3;19368:28;19380:16:::0;19313:21;19368:28:::1;:::i;:::-;19367:36;;;;:::i;:::-;19345:59;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;17767:122:::0;17822:4;17846:35;17854:7;-1:-1:-1;;17846:7:0;:35::i;19935:111::-;6498:10;15586:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;11834:7:0;11861:6;-1:-1:-1;;;;;11861:6:0;15614:10;:21;15586:49;15578:89;;;;-1:-1:-1;;;15578:89:0;;;;;;;:::i;:::-;19988:13:::1;:20:::0;;-1:-1:-1;;20019:19:0;;;;;19935:111::o;17901:119::-;12008:6;;-1:-1:-1;;;;;12008:6:0;6498:10;12008:22;12000:67;;;;-1:-1:-1;;;12000:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17984:17:0;;;::::1;;::::0;;;:10:::1;:17;::::0;;;;:28;;-1:-1:-1;;17984:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17901:119::o;17180:105::-;17230:7;17266:15;13309:1;17266:2;:15;:::i;:::-;17248:14;;:34;;;;:::i;30995:263::-;12008:6;;-1:-1:-1;;;;;12008:6:0;6498:10;12008:22;12000:67;;;;-1:-1:-1;;;12000:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31078:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;31078:28:0::1;::::0;::::1;;;::::0;;-1:-1:-1;;;;;;;;;;;31078:28:0;31138:41:::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;31138:41:0::1;;::::0;::::1;;;;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;31138:41:0::1;::::0;::::1;::::0;31122:128;;31182:42;;;;;;31138:41;31122:128;::::1;::::0;::::1;::::0;31186:34:::1;31195:24;31212:6:::0;31195:24;;;::::1;:::i;18032:468::-:0;12008:6;;-1:-1:-1;;;;;12008:6:0;6498:10;12008:22;12000:67;;;;-1:-1:-1;;;12000:67:0;;;;;;;:::i;:::-;18145:20;;;;;:58:::1;;-1:-1:-1::0;18169:34:0;;::::1;18145:58;18137:67;;;::::0;::::1;;18230:10;18215:12;18253:240;18270:20:::0;;::::1;18253:240;;;18316:14;:28;18331:9;;18341:1;18331:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18316:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18316:28:0;;::::1;;18315:29;:64:::0;::::1;;;;18349:16;:30;18366:9;;18376:1;18366:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18349:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18349:30:0;;::::1;;18348:31;18315:64;18312:170;;;18400:66;18415:4;18421:9;;18431:1;18421:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18449:15;13309:1;18449:2;:15;:::i;:::-;18435:7;;18443:1;18435:10;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;18400:14;:66::i;:::-;;18312:170;18292:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18253:240;;;;18126:374;18032:468:::0;;;;:::o;12437:148::-;12008:6;;-1:-1:-1;;;;;12008:6:0;6498:10;12008:22;12000:67;;;;-1:-1:-1;;;12000:67:0;;;;;;;:::i;:::-;12544:1:::1;12528:6:::0;;12507:40:::1;::::0;-1:-1:-1;;;;;12528:6:0;;::::1;::::0;12507:40:::1;::::0;12544:1;;12507:40:::1;12575:1;12558:19:::0;;-1:-1:-1;;;;;;12558:19:0::1;::::0;;12437:148::o;31571:762::-;12008:6;;-1:-1:-1;;;;;12008:6:0;6498:10;12008:22;12000:67;;;;-1:-1:-1;;;12000:67:0;;;;;;;:::i;:::-;31752:10:::1;:24:::0;;;31787:12:::1;:28:::0;;;31826:12:::1;:28:::0;;;31865:12:::1;:28:::0;;;31880:13;31802;31915:27:::1;31841:13:::0;31765:11;31915:27:::1;:::i;:::-;:43;;;;:::i;:::-;:59;;;;:::i;:::-;31904:8;:70:::0;31985:8:::1;:20:::0;;;32016:14:::1;:32:::0;;;32078:18:::1;32095:1;32033:15:::0;32078:18:::1;:::i;:::-;32067:8;;:29;32059:38;;;::::0;::::1;;-1:-1:-1::0;;;;;;;;;;;32113:212:0::1;;;;;;;;32138:57;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;32138:57:0::1;;::::0;::::1;;;;32180:14;;32163:8;;32174:3;32163:14;;;;:::i;:::-;:31;;;;:::i;:::-;32138:57:::0;;32113:212;;32197:62:::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;32197:62:0;;;;;;;32244:14:::1;::::0;32113:212:::1;::::0;;::::1;::::0;32197:62;::::1;::::0;32222:19:::1;:13:::0;32238:3:::1;32222:19;:::i;:::-;:36;;;;:::i;:::-;32197:62:::0;;32113:212;;32261:62:::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;32261:62:0;;;;;;;32308:14:::1;::::0;32113:212:::1;::::0;;::::1;::::0;32261:62;::::1;::::0;32286:19:::1;:13:::0;32302:3:::1;32286:19;:::i;:::-;:36;;;;:::i;:::-;32261:62:::0;;32113:212;;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;;;;;;;;31571:762:::0;;;;;;:::o;21069:156::-;21149:4;21173:44;21187:10;21199:9;21210:6;21173:13;:44::i;30637:350::-;12008:6;;-1:-1:-1;;;;;12008:6:0;6498:10;12008:22;12000:67;;;;-1:-1:-1;;;12000:67:0;;;;;;;:::i;:::-;30747:1:::1;30735:9;:13;:28;;;;;30762:1;30752:7;:11;30735:28;:48;;;;;30778:5;30767:7;:16;;30735:48;30727:57;;;::::0;::::1;;30841:7;30828:9;30813:12;;:24;;;;:::i;:::-;30812:36;;;;:::i;:::-;30795:14;:53:::0;;;30864:115:::1;::::0;;30904:49;;;;;;;;;;;;-1:-1:-1;;;30904:49:0;;;;30864:115:::1;::::0;::::1;30904:49:::0;;;-1:-1:-1;;;;;;;;;;;30864:115:0;;;30904:49;;;30936:15:::1;13309:1;30936:2;:15;:::i;:::-;30918:14;;:34;;;;:::i;:::-;30904:49:::0;;30864:115;;30955:10:::1;::::0;;;;;;;;-1:-1:-1;30955:10:0;;::::1;::::0;;;;;30864:115:::1;30955:10:::0;;::::1;::::0;;;30864:115;;::::1;::::0;;;;30967:10;;;;;;;;;::::1;::::0;;;;;;;::::1;::::0;;;;30864:115;;;;;;;;::::1;::::0;;::::1;:::i;16956:105::-:0;17005:7;17042:15;13309:1;17042:2;:15;:::i;:::-;17023;;:35;;;;:::i;29862:221::-;12008:6;;-1:-1:-1;;;;;12008:6:0;6498:10;12008:22;12000:67;;;;-1:-1:-1;;;12000:67:0;;;;;;;:::i;:::-;29944:2:::1;29936:4;:10;;29928:19;;;::::0;::::1;;29958:9;:16:::0;;;29990:85:::1;::::0;;30030:19;;;;;::::1;::::0;;;;;;-1:-1:-1;;;30030:19:0;;;;29990:85:::1;::::0;;::::1;30030:19:::0;;;;;;;;;29990:85;;;30051:10;;;;;;;-1:-1:-1;30051:10:0;;::::1;::::0;;;;;30030:19:::1;30051:10:::0;;::::1;::::0;;;29990:85;;::::1;::::0;;;;30063:10;;;;;;;;;::::1;::::0;;;;;;;::::1;::::0;-1:-1:-1;;;29990:85:0;;;-1:-1:-1;;;;;;;;;;;29990:85:0;::::1;::::0;::::1;:::i;18512:473::-:0;6498:10;15586:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;11834:7:0;11861:6;-1:-1:-1;;;;;11861:6:0;15614:10;:21;15586:49;15578:89;;;;-1:-1:-1;;;15578:89:0;;;;;;;:::i;:::-;18599:17:::1;18664:3;18620:40;18644:16:::0;18620:21:::1;:40;:::i;:::-;18619:48;;;;:::i;:::-;18712:16;::::0;;18726:1:::1;18712:16:::0;;;;;::::1;::::0;;18599:68;;-1:-1:-1;18688:21:0::1;::::0;18712:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;18749:6:0::1;::::0;:13:::1;::::0;;-1:-1:-1;;;18749:13:0;;;;18688:40;;-1:-1:-1;;;;;;18749:6:0;;::::1;::::0;:11:::1;::::0;-1:-1:-1;18749:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18739:4;18744:1;18739:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;18739:23:0::1;;;-1:-1:-1::0;;;;;18739:23:0::1;;;::::0;::::1;18783:5;18773:4;18778:1;18773:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18773:15:0;;::::1;:7;::::0;;::::1;::::0;;;;;:15;18801:6:::1;::::0;:176:::1;::::0;-1:-1:-1;;;18801:176:0;;:6;::::1;::::0;:57:::1;::::0;18866:9;;18801:176:::1;::::0;:6:::1;::::0;18907:4;;18926:10:::1;::::0;18951:15:::1;::::0;18801:176:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;18588:397;;18512:473:::0;;:::o;20058:235::-;6498:10;15586:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;11834:7:0;11861:6;-1:-1:-1;;;;;11861:6:0;15614:10;:21;15586:49;15578:89;;;;-1:-1:-1;;;15578:89:0;;;;;;;:::i;:::-;20152:18:::1;::::0;::::1;::::0;::::1;;;20151:19;20143:28;;;::::0;::::1;;20182:17;:28:::0;;-1:-1:-1;;20182:28:0::1;::::0;::::1;;;::::0;;20240:6:::1;20229:17:::0;::::1;20221:26;;;::::0;::::1;;20277:8;20258:15;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;20058:235:0:o;32341:621::-;12008:6;;-1:-1:-1;;;;;12008:6:0;6498:10;12008:22;12000:67;;;;-1:-1:-1;;;12000:67:0;;;;;;;:::i;:::-;32478:20:::1;:53:::0;;-1:-1:-1;;;;;32478:53:0;;::::1;-1:-1:-1::0;;;;;;32478:53:0;;::::1;;::::0;;;32542:20:::1;:53:::0;;;;::::1;::::0;;::::1;;::::0;;32606:9:::1;:31:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;32653:301:::1;::::0;;32691:85;;;;;::::1;32687:93:::0;;;32691:85;;;-1:-1:-1;;;32691:85:0;;;;32735:39;;-1:-1:-1;;;;;;;;;;;32653:301:0;;;::::1;::::0;::::1;::::0;;;32691:85:::1;::::0;32687:93;32726:49:::1;::::0;32735:39:::1;::::0;32509:21;;32691:85:::1;32735:39;;:::i;32691:85::-;32687:93;;;;32778:1;32687:93;;::::0;32653:301:::1;;;;32781:93;;;;;;;;32785:85;;;;;;;;;;;;;;-1:-1:-1::0;;;32785:85:0::1;;::::0;32820:49:::1;32846:21;32829:39;;;;;;;;:::i;32785:85::-;32781:93;;;;32872:1;32781:93;;::::0;32653:301:::1;;;;32876:76;;;;;;;;32880:68;;;;;;;;;;;;;;-1:-1:-1::0;;;32880:68:0::1;;::::0;32909:38:::1;32935:10;32918:28;;;;;;;;:::i;32880:68::-;32876:76:::0;;32950:1:::1;32876:76;::::0;;::::1;::::0;32653:301;;::::1;::::0;::::1;::::0;;::::1;:::i;25764:243::-:0;25820:7;25870:12;25856:10;;25843;;:23;;;;:::i;:::-;:39;25840:73;;25909:1;25892:14;;:18;;;;:::i;25840:73::-;25927:7;25923:39;;;25954:8;;25943;;:19;;;;:::i;25923:39::-;25991:8;;25980;;:19;;;;:::i;12740:244::-;12008:6;;-1:-1:-1;;;;;12008:6:0;6498:10;12008:22;12000:67;;;;-1:-1:-1;;;12000:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12829:22:0;::::1;12821:73;;;::::0;-1:-1:-1;;;12821:73:0;;17154:2:1;12821:73:0::1;::::0;::::1;17136:21:1::0;17193:2;17173:18;;;17166:30;17232:34;17212:18;;;17205:62;-1:-1:-1;;;17283:18:1;;;17276:36;17329:19;;12821:73:0::1;16952:402:1::0;12821:73:0::1;12931:6;::::0;;12910:38:::1;::::0;-1:-1:-1;;;;;12910:38:0;;::::1;::::0;12931:6;::::1;::::0;12910:38:::1;::::0;::::1;12959:6;:17:::0;;-1:-1:-1;;;;;;12959:17:0::1;-1:-1:-1::0;;;;;12959:17:0;;;::::1;::::0;;;::::1;::::0;;12740:244::o;31266:297::-;12008:6;;-1:-1:-1;;;;;12008:6:0;6498:10;12008:22;12000:67;;;;-1:-1:-1;;;12000:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31353:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;31353:32:0::1;::::0;::::1;;;::::0;;-1:-1:-1;;;;;;;;;;;31353:32:0;31417:67:::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;31401:154;;31487:42;;;;;;31417:67;31401:154;::::1;::::0;::::1;::::0;31491:34:::1;31500:24;31517:6:::0;31500:24;;;::::1;:::i;33650:465::-:0;33735:42;;;;;;;;;;;;-1:-1:-1;;;33735:42:0;;;;33827:11;;33709:13;;33735:42;:21;;33827:15;;33841:1;33827:15;:::i;:::-;33823:19;;:1;:19;:::i;:::-;33813:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33813:30:0;;33794:49;;-1:-1:-1;;;33854:3:0;33858:1;33854:6;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;33854:12:0;;;;;;;;;-1:-1:-1;;;33877:3:0;33881:1;33877:6;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;33877:12:0;;;;;;;;;33905:6;33900:179;33921:4;:11;33917:1;:15;33900:179;;;33967:8;33998:1;33987:4;33992:1;33987:7;;;;;;;;:::i;:::-;;;;;33967:35;;-1:-1:-1;;;;;;33987:7:0;;;:12;;;:7;33981:19;;33967:35;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;33967:35:0;33954:3;33960;:1;33962;33960:3;:::i;:::-;33958:5;;:1;:5;:::i;:::-;33954:10;;;;;;;;:::i;:::-;;;;:48;-1:-1:-1;;;;;33954:48:0;;;;;;;;;34030:8;34050:4;34055:1;34050:7;;;;;;;;:::i;:::-;;;;;;34030:37;;34050:7;;;;;34060:4;34044:21;;34030:37;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;34030:37:0;34017:3;34023;:1;34025;34023:3;:::i;:::-;34021:5;;:1;:5;:::i;:::-;34017:10;;;;;;;;:::i;:::-;;;;:50;-1:-1:-1;;;;;34017:50:0;;;;;;;;-1:-1:-1;33934:3:0;;;;:::i;:::-;;;;33900:179;;;-1:-1:-1;34103:3:0;33650:465;-1:-1:-1;;;33650:465:0:o;34127:149::-;34205:13;34262:1;34265;34245:22;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34231:37;;34127:149;;;;:::o;21582:2018::-;21674:4;-1:-1:-1;;;;;21699:20:0;;21691:57;;;;-1:-1:-1;;;21691:57:0;;16801:2:1;21691:57:0;;;16783:21:1;16840:2;16820:18;;;16813:30;16879:26;16859:18;;;16852:54;16923:18;;21691:57:0;16599:348:1;21691:57:0;-1:-1:-1;;;;;21767:23:0;;21759:58;;;;-1:-1:-1;;;21759:58:0;;18089:2:1;21759:58:0;;;18071:21:1;18128:2;18108:18;;;18101:30;-1:-1:-1;;;18147:18:1;;;18140:52;18209:18;;21759:58:0;17887:346:1;21759:58:0;21845:1;21836:6;:10;21828:44;;;;-1:-1:-1;;;21828:44:0;;15699:2:1;21828:44:0;;;15681:21:1;15738:2;15718:18;;;15711:30;-1:-1:-1;;;15757:18:1;;;15750:51;15818:18;;21828:44:0;15497:345:1;21828:44:0;-1:-1:-1;;;;;21891:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;21891:27:0;21883:60;;;;-1:-1:-1;;;21883:60:0;;18440:2:1;21883:60:0;;;18422:21:1;18479:2;18459:18;;;18452:30;-1:-1:-1;;;18498:18:1;;;18491:50;18558:18;;21883:60:0;18238:344:1;21883:60:0;23679:10;;:15;;;21957:40;;-1:-1:-1;;;;;;21972:25:0;;;;;;:14;:25;;;;;;;;21957:40;21954:120;;;-1:-1:-1;;;;;22008:24:0;;;;;;:16;:24;;;;;;;;22000:61;;;;-1:-1:-1;;;22000:61:0;;20041:2:1;22000:61:0;;;20023:21:1;20080:2;20060:18;;;20053:30;20119:26;20099:18;;;20092:54;20163:18;;22000:61:0;19839:348:1;22000:61:0;22063:8;23761:12;23748:10;:25;23799:15;23784:12;:30;23825:11;:18;;-1:-1:-1;;23825:18:0;;;;;23710:141;22063:8;22088:12;;;;22084:111;;-1:-1:-1;;;;;22111:24:0;;;;;;:16;:24;;;;;;;;;:55;;-1:-1:-1;;;;;;22139:27:0;;;;;;:16;:27;;;;;;;;22111:55;22103:89;;;;-1:-1:-1;;;22103:89:0;;22790:2:1;22103:89:0;;;22772:21:1;22829:2;22809:18;;;22802:30;-1:-1:-1;;;22848:18:1;;;22841:51;22909:18;;22103:89:0;22588:345:1;22103:89:0;22212:15;;;;22211:16;:54;;;;;22250:15;22231;;:34;;22211:54;22207:272;;;22282:15;:22;;-1:-1:-1;;22282:22:0;22300:4;22282:22;;;:15;22319:9;:13;22364:12;;22347:14;:29;;;22391:15;:30;;;22436:16;:31;22207:272;22491:39;22504:6;22512:9;22523:6;22491:12;:39::i;:::-;-1:-1:-1;;;;;22556:25:0;;;;;;:14;:25;;;;;;;;22555:26;:47;;;;-1:-1:-1;22598:4:0;;-1:-1:-1;;;;;22585:17:0;;;22598:4;;22585:17;;22555:47;22551:182;;;-1:-1:-1;;;;;22624:26:0;;;;;;:15;:26;;;;;;;;22619:103;;22671:35;22688:9;22699:6;22671:16;:35::i;:::-;22756:17;;;;:54;;;;;22795:15;22777;;:33;22756:54;22753:351;;;-1:-1:-1;;;;;22830:22:0;;;;;;:14;:22;;;;;;;;:48;;;;-1:-1:-1;22856:9:0;-1:-1:-1;;;;;22856:22:0;;;;22830:48;:77;;;;-1:-1:-1;;;;;;22882:20:0;;;;;;:9;:20;;;;;;:25;22830:77;22827:266;;;-1:-1:-1;;;;;22928:20:0;;;;;;:9;:20;;;;;22951:12;22928:35;;22982:15;:17;;;;;;:::i;:::-;;;;;;23023:54;23039:9;23050;23061:12;23075:1;23023:54;;;;;;;;;:::i;:::-;;;;;;;;22827:266;23127:6;;;;23124:63;;;23143:41;23158:6;23166:9;23177:6;23143:14;:41::i;:::-;23136:48;;;;23124:63;-1:-1:-1;;;;;23219:17:0;;;;;;:9;:17;;;;;;:26;;23239:6;;23219:26;:::i;:::-;-1:-1:-1;;;;;23199:17:0;;;;;;:9;:17;;;;;;;;:46;;;;25729:11;:19;;;;;;;;25728:20;23283:59;;23336:6;23283:59;;;23307:26;23315:9;23326:6;23307:7;:26::i;:::-;23258:84;;23366:25;23381:9;23366:14;:25::i;:::-;23363:66;;;23398:10;;23394:32;;23410:16;23419:6;23410:8;:16::i;:::-;-1:-1:-1;;;;;23472:20:0;;;;;;:9;:20;;;;;;:37;;23495:14;;23472:37;:::i;:::-;-1:-1:-1;;;;;23449:20:0;;;;;;;:9;:20;;;;;;;:60;;;;23527:43;;;;;;;;;;23555:14;24031:25:1;;24019:2;24004:18;;23885:177;23527:43:0;;;;;;;;-1:-1:-1;23588:4:0;;21582:2018;-1:-1:-1;;;;21582:2018:0:o;23859:300::-;-1:-1:-1;;;;;23989:17:0;;23952:4;23989:17;;;:9;:17;;;;;;:26;;24009:6;;23989:26;:::i;:::-;-1:-1:-1;;;;;23969:17:0;;;;;;;:9;:17;;;;;;:46;;;;24049:20;;;;;;;:29;;24072:6;;24049:29;:::i;:::-;-1:-1:-1;;;;;24026:20:0;;;;;;;:9;:20;;;;;;;:52;;;;24094:35;;;;;;;;;;24122:6;24031:25:1;;24019:2;24004:18;;23885:177;24094:35:0;;;;;;;;-1:-1:-1;24147:4:0;23859:300;;;;;:::o;24414:1220::-;-1:-1:-1;;;;;24515:23:0;;;;;;:15;:23;;;;;;;;;:98;;-1:-1:-1;;;;;;24553:22:0;;;;;;:14;:22;;;;;;;;:59;;24596:16;;24553:59;;;24578:15;;24553:59;24542:6;:71;;24515:98;24507:128;;;;-1:-1:-1;;;24507:128:0;;16455:2:1;24507:128:0;;;16437:21:1;16494:2;16474:18;;;16467:30;-1:-1:-1;;;16513:18:1;;;16506:47;16570:18;;24507:128:0;16253:341:1;24507:128:0;-1:-1:-1;;;;;24654:23:0;;;;;;:15;:23;;;;;;;;;:73;;-1:-1:-1;24702:9:0;;-1:-1:-1;;;;;24681:18:0;;;;;;:7;:18;;;;;;24715:12;;24681:30;;;:::i;:::-;:46;;24654:73;24646:115;;;;-1:-1:-1;;;24646:115:0;;19683:2:1;24646:115:0;;;19665:21:1;19722:2;19702:18;;;19695:30;19761:31;19741:18;;;19734:59;19810:18;;24646:115:0;19481:353:1;24646:115:0;-1:-1:-1;;;;;24786:17:0;;;;;;:9;:17;;;;;;:22;24782:261;;24861:15;13309:1;24861:2;:15;:::i;:::-;24842;;:35;;;;:::i;:::-;24832:6;:45;;:70;;;;-1:-1:-1;;;;;;24881:16:0;;;;;;:8;:16;;;;;;:21;24832:70;:107;;;;;24924:15;24906;;:33;24832:107;24824:161;;;;-1:-1:-1;;;24824:161:0;;20394:2:1;24824:161:0;;;20376:21:1;20433:2;20413:18;;;20406:30;20472:34;20452:18;;;20445:62;-1:-1:-1;;;20523:18:1;;;20516:39;20572:19;;24824:161:0;20192:405:1;24824:161:0;-1:-1:-1;;;;;25000:16:0;;;;;;:8;:16;;;;;25019:12;25000:31;;24782:261;-1:-1:-1;;;;;25067:25:0;;;;;;:14;:25;;;;;;;;25063:564;;;-1:-1:-1;;;;;;;25109:16:0;;;;;:8;:16;;;;;25128:12;25109:31;;24414:1220::o;25063:564::-;-1:-1:-1;;;;;25729:19:0;;25704:4;25729:19;;;:11;:19;;;;;;;;25158:469;;25204:17;;;;:54;;;;;25243:15;25225;;:33;25204:54;:92;;;;-1:-1:-1;25270:9:0;25262:18;;;;:7;:18;;;;;;25284:12;25262:34;25204:92;:121;;;;-1:-1:-1;;;;;;25300:20:0;;;;;;:9;:20;;;;;;:25;25204:121;25200:275;;;-1:-1:-1;;;;;25346:20:0;;;;;;:9;:20;;;;;;;25369:12;25346:35;;;;25405:54;;;;;;25421:9;;25356;;25457:1;;25405:54;:::i;:::-;;;;;;;;25200:275;-1:-1:-1;;;;;25489:18:0;;;;;;:7;:18;;;;;25510:12;25489:33;;25541:9;:22;25537:78;;25590:9;25582:18;;;;:7;:18;;;;;25603:12;25582:33;;25537:78;24414:1220;;;:::o;24171:235::-;24279:14;;-1:-1:-1;;;;;24312:20:0;;24257:19;24312:20;;;:9;:20;;;;;;24279:14;;24312:29;;24335:6;;24312:29;:::i;:::-;:44;;24304:94;;;;-1:-1:-1;;;24304:94:0;;16049:2:1;24304:94:0;;;16031:21:1;16088:2;16068:18;;;16061:30;16127:34;16107:18;;;16100:62;-1:-1:-1;;;16178:18:1;;;16171:35;16223:19;;24304:94:0;15847:401:1;26015:317:0;-1:-1:-1;;;;;26120:25:0;;26085:7;26120:25;;;:14;:25;;;;;;26210:14;;26120:25;;;;;26085:7;;26186:20;26120:25;26186:11;:20::i;:::-;26177:29;;:6;:29;:::i;:::-;26176:48;;;;:::i;:::-;26263:4;26245:24;;;;:9;:24;;;;;:37;;26156:68;;-1:-1:-1;26156:68:0;;26245:24;;;:37;;26156:68;;26245:37;:::i;:::-;;;;-1:-1:-1;26306:18:0;;-1:-1:-1;26315:9:0;26306:6;:18;:::i;:::-;26299:25;26015:317;-1:-1:-1;;;;;26015:317:0:o;26340:259::-;26446:10;26406:4;26431:26;;;:14;:26;;;;;;;;26430:27;:47;;;;-1:-1:-1;26471:6:0;;;;26470:7;26430:47;:71;;;;-1:-1:-1;26490:11:0;;;;;;;26430:71;:109;;;;-1:-1:-1;;;;;;26514:25:0;;;;;;:14;:25;;;;;;;;26430:109;:161;;;;-1:-1:-1;26580:11:0;;26570:4;26552:24;;;;:9;:24;;;;;;:39;;26423:168;26340:259;-1:-1:-1;;26340:259:0:o;26607:1743::-;15451:6;:13;;-1:-1:-1;;15451:13:0;15460:4;15451:13;;;26702::::1;::::0;15451:6;;26693:22;::::1;:47;;26727:13;;26693:47;;;26718:6;26693:47;26773:4;26755:24;::::0;;;:9:::1;:24;::::0;;;;;26670:70;;-1:-1:-1;26755:39:0;-1:-1:-1;26751:84:0::1;;;-1:-1:-1::0;26829:4:0::1;26811:24;::::0;;;:9:::1;:24;::::0;;;;;26751:84:::1;26856:23;26918:8;;26913:1;26898:12;;26883;:27;;;;:::i;:::-;:31;;;;:::i;:::-;26882:44;;;;:::i;:::-;26856:70:::0;-1:-1:-1;26937:31:0::1;26856:70:::0;26937:31;::::1;:::i;:::-;27005:16;::::0;;27019:1:::1;27005:16:::0;;;;;::::1;::::0;;26937:31;;-1:-1:-1;26981:21:0::1;::::0;27005:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27005:16:0::1;26981:40;;27050:4;27032;27037:1;27032:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27032:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27076:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;27076:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;27032:7;;27076:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27066:4;27071:1;27066:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27066:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;27168:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;27168:188:0;;27134:21:::1;::::0;27168:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;27240:12;;27110:21:::1;::::0;27283:4;;27310::::1;::::0;27330:15:::1;::::0;27168:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27369:17;27413:13;27389:21;:37;;;;:::i;:::-;27369:57;;27437:19;27486:1;27471:12;;:16;;;;:::i;:::-;27459:8;;:29;;;;:::i;:::-;27437:51;;27501:26;27563:11;27558:1;27543:12;;27531:9;:24;;;;:::i;:::-;:28;;;;:::i;:::-;27530:44;;;;:::i;:::-;27501:73;;27585:26;27643:11;27627:12;;27615:9;:24;;;;:::i;:::-;27614:40;;;;:::i;:::-;27585:69;;27665:26;27723:11;27707:12;;27695:9;:24;;;;:::i;:::-;27694:40;;;;:::i;:::-;27665:69:::0;-1:-1:-1;27759:22:0;;27755:90:::1;;27796:20;::::0;:49:::1;::::0;-1:-1:-1;;;;;27796:20:0;;::::1;::::0;:49;::::1;;;::::0;27826:18;;27796:20:::1;:49:::0;:20;:49;27826:18;27796:20;:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27755:90;27860:22:::0;;27856:79:::1;;27897:9;::::0;:38:::1;::::0;-1:-1:-1;;;;;27897:9:0;;::::1;::::0;:38;::::1;;;::::0;27916:18;;27897:9:::1;:38:::0;:9;:38;27916:18;27897:9;:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27856:79;27959:19:::0;;27956:293:::1;;27994:6;::::0;28168:20:::1;::::0;27994:243:::1;::::0;-1:-1:-1;;;27994:243:0;;28070:4:::1;27994:243;::::0;::::1;12510:34:1::0;12560:18;;;12553:34;;;27994:6:0::1;12603:18:1::0;;;12596:34;;;12646:18;;;12639:34;-1:-1:-1;;;;;28168:20:0;;::::1;12689:19:1::0;;;12682:44;28207:15:0::1;12742:19:1::0;;;12735:35;27994:6:0;::::1;::::0;:22:::1;::::0;28024:18;;12444:19:1;;27994:243:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27956:293;28266:76;::::0;;24856:25:1;;;24912:2;24897:18;;24890:34;;;24940:18;;;24933:34;;;28266:76:0::1;::::0;24844:2:1;24829:18;28266:76:0::1;;;;;;;-1:-1:-1::0;;15469:6:0;:14;;-1:-1:-1;;15469:14:0;;;-1:-1:-1;;;;;;;;26607:1743:0:o;14:367:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;225:18;214:30;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:247::-;445:6;498:2;486:9;477:7;473:23;469:32;466:52;;;514:1;511;504:12;466:52;553:9;540:23;572:31;597:5;572:31;:::i;638:251::-;708:6;761:2;749:9;740:7;736:23;732:32;729:52;;;777:1;774;767:12;729:52;809:9;803:16;828:31;853:5;828:31;:::i;894:388::-;962:6;970;1023:2;1011:9;1002:7;998:23;994:32;991:52;;;1039:1;1036;1029:12;991:52;1078:9;1065:23;1097:31;1122:5;1097:31;:::i;:::-;1147:5;-1:-1:-1;1204:2:1;1189:18;;1176:32;1217:33;1176:32;1217:33;:::i;:::-;1269:7;1259:17;;;894:388;;;;;:::o;1287:529::-;1364:6;1372;1380;1433:2;1421:9;1412:7;1408:23;1404:32;1401:52;;;1449:1;1446;1439:12;1401:52;1488:9;1475:23;1507:31;1532:5;1507:31;:::i;:::-;1557:5;-1:-1:-1;1614:2:1;1599:18;;1586:32;1627:33;1586:32;1627:33;:::i;:::-;1679:7;-1:-1:-1;1738:2:1;1723:18;;1710:32;1751:33;1710:32;1751:33;:::i;:::-;1803:7;1793:17;;;1287:529;;;;;:::o;1821:456::-;1898:6;1906;1914;1967:2;1955:9;1946:7;1942:23;1938:32;1935:52;;;1983:1;1980;1973:12;1935:52;2022:9;2009:23;2041:31;2066:5;2041:31;:::i;:::-;2091:5;-1:-1:-1;2148:2:1;2133:18;;2120:32;2161:33;2120:32;2161:33;:::i;:::-;1821:456;;2213:7;;-1:-1:-1;;;2267:2:1;2252:18;;;;2239:32;;1821:456::o;2282:382::-;2347:6;2355;2408:2;2396:9;2387:7;2383:23;2379:32;2376:52;;;2424:1;2421;2414:12;2376:52;2463:9;2450:23;2482:31;2507:5;2482:31;:::i;:::-;2532:5;-1:-1:-1;2589:2:1;2574:18;;2561:32;2602:30;2561:32;2602:30;:::i;2669:315::-;2737:6;2745;2798:2;2786:9;2777:7;2773:23;2769:32;2766:52;;;2814:1;2811;2804:12;2766:52;2853:9;2840:23;2872:31;2897:5;2872:31;:::i;:::-;2922:5;2974:2;2959:18;;;;2946:32;;-1:-1:-1;;;2669:315:1:o;2989:773::-;3111:6;3119;3127;3135;3188:2;3176:9;3167:7;3163:23;3159:32;3156:52;;;3204:1;3201;3194:12;3156:52;3244:9;3231:23;3273:18;3314:2;3306:6;3303:14;3300:34;;;3330:1;3327;3320:12;3300:34;3369:70;3431:7;3422:6;3411:9;3407:22;3369:70;:::i;:::-;3458:8;;-1:-1:-1;3343:96:1;-1:-1:-1;3546:2:1;3531:18;;3518:32;;-1:-1:-1;3562:16:1;;;3559:36;;;3591:1;3588;3581:12;3559:36;;3630:72;3694:7;3683:8;3672:9;3668:24;3630:72;:::i;:::-;2989:773;;;;-1:-1:-1;3721:8:1;-1:-1:-1;;;;2989:773:1:o;3767:566::-;3859:6;3867;3875;3928:2;3916:9;3907:7;3903:23;3899:32;3896:52;;;3944:1;3941;3934:12;3896:52;3984:9;3971:23;4017:18;4009:6;4006:30;4003:50;;;4049:1;4046;4039:12;4003:50;4088:70;4150:7;4141:6;4130:9;4126:22;4088:70;:::i;:::-;4177:8;;-1:-1:-1;4062:96:1;-1:-1:-1;;4262:2:1;4247:18;;4234:32;4275:28;4234:32;4275:28;:::i;4338:241::-;4394:6;4447:2;4435:9;4426:7;4422:23;4418:32;4415:52;;;4463:1;4460;4453:12;4415:52;4502:9;4489:23;4521:28;4543:5;4521:28;:::i;4584:245::-;4651:6;4704:2;4692:9;4683:7;4679:23;4675:32;4672:52;;;4720:1;4717;4710:12;4672:52;4752:9;4746:16;4771:28;4793:5;4771:28;:::i;4834:513::-;4914:6;4922;4930;4938;4991:3;4979:9;4970:7;4966:23;4962:33;4959:53;;;5008:1;5005;4998:12;4959:53;5047:9;5034:23;5066:28;5088:5;5066:28;:::i;:::-;5113:5;-1:-1:-1;5170:2:1;5155:18;;5142:32;5183:30;5142:32;5183:30;:::i;:::-;4834:513;;5232:7;;-1:-1:-1;;;;5286:2:1;5271:18;;5258:32;;5337:2;5322:18;5309:32;;4834:513::o;5352:309::-;5417:6;5425;5478:2;5466:9;5457:7;5453:23;5449:32;5446:52;;;5494:1;5491;5484:12;5446:52;5533:9;5520:23;5552:28;5574:5;5552:28;:::i;5666:180::-;5725:6;5778:2;5766:9;5757:7;5753:23;5749:32;5746:52;;;5794:1;5791;5784:12;5746:52;-1:-1:-1;5817:23:1;;5666:180;-1:-1:-1;5666:180:1:o;5851:315::-;5919:6;5927;5980:2;5968:9;5959:7;5955:23;5951:32;5948:52;;;5996:1;5993;5986:12;5948:52;6032:9;6019:23;6009:33;;6092:2;6081:9;6077:18;6064:32;6105:31;6130:5;6105:31;:::i;6171:248::-;6239:6;6247;6300:2;6288:9;6279:7;6275:23;6271:32;6268:52;;;6316:1;6313;6306:12;6268:52;-1:-1:-1;;6339:23:1;;;6409:2;6394:18;;;6381:32;;-1:-1:-1;6171:248:1:o;6424:316::-;6501:6;6509;6517;6570:2;6558:9;6549:7;6545:23;6541:32;6538:52;;;6586:1;6583;6576:12;6538:52;-1:-1:-1;;6609:23:1;;;6679:2;6664:18;;6651:32;;-1:-1:-1;6730:2:1;6715:18;;;6702:32;;6424:316;-1:-1:-1;6424:316:1:o;6745:306::-;6833:6;6841;6849;6902:2;6890:9;6881:7;6877:23;6873:32;6870:52;;;6918:1;6915;6908:12;6870:52;6947:9;6941:16;6931:26;;6997:2;6986:9;6982:18;6976:25;6966:35;;7041:2;7030:9;7026:18;7020:25;7010:35;;6745:306;;;;;:::o;7056:523::-;7160:6;7168;7176;7184;7192;7200;7253:3;7241:9;7232:7;7228:23;7224:33;7221:53;;;7270:1;7267;7260:12;7221:53;-1:-1:-1;;7293:23:1;;;7363:2;7348:18;;7335:32;;-1:-1:-1;7414:2:1;7399:18;;7386:32;;7465:2;7450:18;;7437:32;;-1:-1:-1;7516:3:1;7501:19;;7488:33;;-1:-1:-1;7568:3:1;7553:19;7540:33;;-1:-1:-1;7056:523:1;-1:-1:-1;7056:523:1:o;7584:461::-;7637:3;7675:5;7669:12;7702:6;7697:3;7690:19;7728:4;7757:2;7752:3;7748:12;7741:19;;7794:2;7787:5;7783:14;7815:1;7825:195;7839:6;7836:1;7833:13;7825:195;;;7904:13;;-1:-1:-1;;;;;7900:39:1;7888:52;;7960:12;;;;7995:15;;;;7936:1;7854:9;7825:195;;;-1:-1:-1;8036:3:1;;7584:461;-1:-1:-1;;;;;7584:461:1:o;8050:707::-;8102:3;8133;8187:2;8180:5;8176:14;8213:5;8236:1;8246:485;8260:4;8257:1;8254:11;8246:485;;;8329:5;8323:4;8319:16;8314:3;8307:29;8365:6;8359:13;8395:4;8438:2;8432:9;8467:2;8461:4;8454:16;8497:46;8539:2;8533:4;8529:13;8515:12;8497:46;:::i;:::-;8566:4;8611:11;;;8605:18;8590:13;;;8583:41;;;;-1:-1:-1;;8709:12:1;;;;8674:15;;;;;8280:1;8273:9;8246:485;;;-1:-1:-1;8747:4:1;;8050:707;-1:-1:-1;;;;;8050:707:1:o;8762:258::-;8804:3;8842:5;8836:12;8869:6;8864:3;8857:19;8885:63;8941:6;8934:4;8929:3;8925:14;8918:4;8911:5;8907:16;8885:63;:::i;:::-;9002:2;8981:15;-1:-1:-1;;8977:29:1;8968:39;;;;9009:4;8964:50;;8762:258;-1:-1:-1;;8762:258:1:o;9025:229::-;9174:2;9170:15;;;;-1:-1:-1;;9166:53:1;9154:66;;9245:2;9236:12;;9025:229::o;9259:470::-;9438:3;9476:6;9470:13;9492:53;9538:6;9533:3;9526:4;9518:6;9514:17;9492:53;:::i;:::-;9608:13;;9567:16;;;;9630:57;9608:13;9567:16;9664:4;9652:17;;9630:57;:::i;:::-;9703:20;;9259:470;-1:-1:-1;;;;9259:470:1:o;10475:464::-;-1:-1:-1;;;;;10768:15:1;;;10750:34;;10820:15;;;;10815:2;10800:18;;10793:43;10867:2;10852:18;;10845:34;10927:4;10915:17;;;10910:2;10895:18;;10888:45;10699:3;10684:19;;10475:464::o;13199:510::-;13470:6;13459:9;13452:25;13513:3;13508:2;13497:9;13493:18;13486:31;13433:4;13534:57;13586:3;13575:9;13571:19;13563:6;13534:57;:::i;:::-;-1:-1:-1;;;;;13627:32:1;;;;13622:2;13607:18;;13600:60;-1:-1:-1;13691:2:1;13676:18;13669:34;13526:65;13199:510;-1:-1:-1;;13199:510:1:o;13714:220::-;13863:2;13852:9;13845:21;13826:4;13883:45;13924:2;13913:9;13909:18;13901:6;13883:45;:::i;13939:461::-;14204:2;14193:9;14186:21;14167:4;14230:45;14271:2;14260:9;14256:18;14248:6;14230:45;:::i;:::-;14323:9;14315:6;14311:22;14306:2;14295:9;14291:18;14284:50;14351:43;14387:6;14379;14351:43;:::i;14405:539::-;14723:2;14712:9;14705:21;14762:2;14757;14746:9;14742:18;14735:30;-1:-1:-1;;;14796:2:1;14785:9;14781:18;14774:49;14861:3;14854:4;14843:9;14839:20;14832:33;14686:4;14882:56;14933:3;14922:9;14918:19;14910:6;14882:56;:::i;14949:543::-;15267:2;15256:9;15249:21;15306:2;15301;15290:9;15286:18;15279:30;15345:25;15340:2;15329:9;15325:18;15318:53;15409:3;15402:4;15391:9;15387:20;15380:33;15230:4;15430:56;15481:3;15470:9;15466:19;15458:6;15430:56;:::i;17359:523::-;17677:2;17666:9;17659:21;17716:1;17711:2;17700:9;17696:18;17689:29;-1:-1:-1;;;17749:2:1;17738:9;17734:18;17727:34;17799:3;17792:4;17781:9;17777:20;17770:33;17640:4;17820:56;17871:3;17860:9;17856:19;17848:6;17820:56;:::i;18587:351::-;18789:2;18771:21;;;18828:2;18808:18;;;18801:30;18867:29;18862:2;18847:18;;18840:57;18929:2;18914:18;;18587:351::o;18943:533::-;19261:2;19250:9;19243:21;19300:2;19295;19284:9;19280:18;19273:30;-1:-1:-1;;;19334:2:1;19323:9;19319:18;19312:43;19393:3;19386:4;19375:9;19371:20;19364:33;19224:4;19414:56;19465:3;19454:9;19450:19;19442:6;19414:56;:::i;20602:356::-;20804:2;20786:21;;;20823:18;;;20816:30;20882:34;20877:2;20862:18;;20855:62;20949:2;20934:18;;20602:356::o;20963:533::-;21281:2;21270:9;21263:21;21320:2;21315;21304:9;21300:18;21293:30;-1:-1:-1;;;21354:2:1;21343:9;21339:18;21332:43;21413:3;21406:4;21395:9;21391:20;21384:33;21244:4;21434:56;21485:3;21474:9;21470:19;21462:6;21434:56;:::i;21501:544::-;21819:2;21808:9;21801:21;21858:2;21853;21842:9;21838:18;21831:30;21897:26;21892:2;21881:9;21877:18;21870:54;21962:3;21955:4;21944:9;21940:20;21933:33;21782:4;21983:56;22034:3;22023:9;22019:19;22011:6;21983:56;:::i;22050:533::-;22368:2;22357:9;22350:21;22407:2;22402;22391:9;22387:18;22380:30;-1:-1:-1;;;22441:2:1;22430:9;22426:18;22419:43;22500:3;22493:4;22482:9;22478:20;22471:33;22331:4;22521:56;22572:3;22561:9;22557:19;22549:6;22521:56;:::i;23341:539::-;23659:2;23648:9;23641:21;23698:2;23693;23682:9;23678:18;23671:30;-1:-1:-1;;;23732:2:1;23721:9;23717:18;23710:49;23797:3;23790:4;23779:9;23775:20;23768:33;23622:4;23818:56;23869:3;23858:9;23854:19;23846:6;23818:56;:::i;24067:582::-;24366:6;24355:9;24348:25;24409:6;24404:2;24393:9;24389:18;24382:34;24452:3;24447:2;24436:9;24432:18;24425:31;24329:4;24473:57;24525:3;24514:9;24510:19;24502:6;24473:57;:::i;:::-;-1:-1:-1;;;;;24566:32:1;;;;24561:2;24546:18;;24539:60;-1:-1:-1;24630:3:1;24615:19;24608:35;24465:65;24067:582;-1:-1:-1;;;24067:582:1:o;25167:128::-;25207:3;25238:1;25234:6;25231:1;25228:13;25225:39;;;25244:18;;:::i;:::-;-1:-1:-1;25280:9:1;;25167:128::o;25300:217::-;25340:1;25366;25356:132;;25410:10;25405:3;25401:20;25398:1;25391:31;25445:4;25442:1;25435:15;25473:4;25470:1;25463:15;25356:132;-1:-1:-1;25502:9:1;;25300:217::o;25522:422::-;25611:1;25654:5;25611:1;25668:270;25689:7;25679:8;25676:21;25668:270;;;25748:4;25744:1;25740:6;25736:17;25730:4;25727:27;25724:53;;;25757:18;;:::i;:::-;25807:7;25797:8;25793:22;25790:55;;;25827:16;;;;25790:55;25906:22;;;;25866:15;;;;25668:270;;;25672:3;25522:422;;;;;:::o;25949:140::-;26007:5;26036:47;26077:4;26067:8;26063:19;26057:4;26143:5;26173:8;26163:80;;-1:-1:-1;26214:1:1;26228:5;;26163:80;26262:4;26252:76;;-1:-1:-1;26299:1:1;26313:5;;26252:76;26344:4;26362:1;26357:59;;;;26430:1;26425:130;;;;26337:218;;26357:59;26387:1;26378:10;;26401:5;;;26425:130;26462:3;26452:8;26449:17;26446:43;;;26469:18;;:::i;:::-;-1:-1:-1;;26525:1:1;26511:16;;26540:5;;26337:218;;26639:2;26629:8;26626:16;26620:3;26614:4;26611:13;26607:36;26601:2;26591:8;26588:16;26583:2;26577:4;26574:12;26570:35;26567:77;26564:159;;;-1:-1:-1;26676:19:1;;;26708:5;;26564:159;26755:34;26780:8;26774:4;26755:34;:::i;:::-;26825:6;26821:1;26817:6;26813:19;26804:7;26801:32;26798:58;;;26836:18;;:::i;:::-;26874:20;;26094:806;-1:-1:-1;;;26094:806:1:o;26905:168::-;26945:7;27011:1;27007;27003:6;26999:14;26996:1;26993:21;26988:1;26981:9;26974:17;26970:45;26967:71;;;27018:18;;:::i;:::-;-1:-1:-1;27058:9:1;;26905:168::o;27078:125::-;27118:4;27146:1;27143;27140:8;27137:34;;;27151:18;;:::i;:::-;-1:-1:-1;27188:9:1;;27078:125::o;27208:258::-;27280:1;27290:113;27304:6;27301:1;27298:13;27290:113;;;27380:11;;;27374:18;27361:11;;;27354:39;27326:2;27319:10;27290:113;;;27421:6;27418:1;27415:13;27412:48;;;-1:-1:-1;;27456:1:1;27438:16;;27431:27;27208:258::o;27471:136::-;27510:3;27538:5;27528:39;;27547:18;;:::i;:::-;-1:-1:-1;;;27583:18:1;;27471:136::o;27612:135::-;27651:3;-1:-1:-1;;27672:17:1;;27669:43;;;27692:18;;:::i;:::-;-1:-1:-1;27739:1:1;27728:13;;27612:135::o;27752:127::-;27813:10;27808:3;27804:20;27801:1;27794:31;27844:4;27841:1;27834:15;27868:4;27865:1;27858:15;27884:127;27945:10;27940:3;27936:20;27933:1;27926:31;27976:4;27973:1;27966:15;28000:4;27997:1;27990:15;28016:127;28077:10;28072:3;28068:20;28065:1;28058:31;28108:4;28105:1;28098:15;28132:4;28129:1;28122:15;28148:131;-1:-1:-1;;;;;28223:31:1;;28213:42;;28203:70;;28269:1;28266;28259:12;28203:70;28148:131;:::o;28284:118::-;28370:5;28363:13;28356:21;28349:5;28346:32;28336:60;;28392:1;28389;28382:12

Swarm Source

ipfs://d00efcfcc1f55961ed9c19b08f1e20a50b83c99f0dc210de277a173f1c66b45b
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.