ETH Price: $2,523.56 (-0.67%)

Token

PIPI (PIPI)
 

Overview

Max Total Supply

1,000,000,000 PIPI

Holders

180

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.694670398 PIPI

Value
$0.00
0x7b91a9c9b6fe81db958fea128a5fd14ebd5ba68f
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:
PIPI

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-11
*/

// SPDX-License-Identifier: Unlicensed

/**
 *  Twitter: https://twitter.com/thePipicoineth
 */

pragma solidity 0.8.20;

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

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

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

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

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

        return c;
    }
}

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

/**
 * Allows for contract ownership along with multi-address authorization
 */
abstract contract Auth {
    address internal owner;

    constructor(address _owner) {
        owner = _owner;
    }

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

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(owner, address(0));
        owner = address(0);
    }

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

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


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

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

    string private constant  _name = "PIPI";
    string private constant _symbol = "PIPI";
    uint8 private constant _decimals = 9;

    uint256 private _totalSupply = 1000000000 * (10 ** _decimals);
    uint256 public maxWallet = ( _totalSupply * 2 ) / 100;
    uint256 public maxTransactionAmount = ( _totalSupply * 2 ) / 100;
    uint256 public numTokensSellToAddToLiquidity = _totalSupply * 5 / 10000;

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

    mapping (address => bool) private isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isTimelockExempt;
            
    uint256 public buyFeeRate = 20;
    uint256 public sellFeeRate = 20;

    uint256 private feeDenominator = 100;

    address payable public devWallet = payable(0xeb9A7070478962424b38a9464bFaE0F74386B3E9);
    address payable public marketingWallet = payable(0x484fF85dc7E03464782647e1961ac575013C4f1b);

    IDEXRouter public router;
    address public pair;

    bool private tradingOpen;
    bool private limitEffect = true;

    bool public maxWalletEnabled = true;
    bool private inSwap;

    // Cooldown & timer functionality
    bool public buyCooldownEnabled = false;
    uint8 public cooldownTimerInterval = 15;

    mapping (address => uint) private cooldownTimer;

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

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

        isTxLimitExempt[msg.sender] = true;

        isFeeExempt[msg.sender] = true;
        isFeeExempt[marketingWallet] = true;   
        isFeeExempt[devWallet] = true;               

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

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

    receive() external payable { }

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

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

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

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

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

        return _transferFrom(sender, recipient, amount);
    }

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

        if(limitEffect){
            if (
                sender != owner &&
                recipient != owner &&
                recipient != address(0) &&
                recipient != address(0xdead)
            ){
                if(!isFeeExempt[sender] && !isFeeExempt[recipient]){ 
                    require(tradingOpen, "Trading not yet enabled.");
                }
            }

            // Checks max transaction limit
            require(amount <= maxTransactionAmount || isTxLimitExempt[sender], "TX Limit Exceeded");

            // max wallet code
            if (maxWalletEnabled && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != marketingWallet && recipient != devWallet){
                uint256 heldTokens = balanceOf(recipient);
                require((heldTokens + amount) <= maxWallet,"Total Holding is currently limited, you can not buy that much.");
            }

            // cooldown timer, so a bot doesnt do quick trades! 1min gap between 2 trades.
            if (sender == pair &&
                buyCooldownEnabled &&
                !isTimelockExempt[recipient]) {
                require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two buys");
                cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
            }
        }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
    
        bool shouldSwapBack = (overMinTokenBalance && recipient==pair && balanceOf(address(this)) > 0);
        if(shouldSwapBack){ 
            swapBack(numTokensSellToAddToLiquidity); 

            uint256 _contractETHBalance = address(this).balance;
            if(_contractETHBalance > 0) { _distributeTaxEth(_contractETHBalance); }
            
        }

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

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

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

	function _distributeTaxEth(uint256 _amount) private {
		marketingWallet.transfer(_amount.div(2));
		devWallet.transfer(_amount.div(2));
	}
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return ( !(isFeeExempt[sender] || isFeeExempt[recipient]) &&  (sender == pair || recipient == pair) );
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 transferFeeRate = recipient == pair ? sellFeeRate : buyFeeRate;
        uint256 feeAmount;
        feeAmount = amount.mul(transferFeeRate).div(feeDenominator);
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);   

        return amount.sub(feeAmount);
    }

    function swapBack(uint256 amount) internal swapping {
        swapTokensForEth(amount);
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapToken() public onlyOwner {

        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
    
        bool shouldSwapBack = (overMinTokenBalance && balanceOf(address(this)) > 0);
        if(shouldSwapBack){ 
            swapTokensForEth(numTokensSellToAddToLiquidity);
         }
    }

    function enableTrading() external onlyOwner {
        tradingOpen = true;
    }    
    
    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setFee (uint256 _buyFeeRate, uint256 _sellFeeRate) external onlyOwner {
        require (_buyFeeRate <= 20, "Fee can't exceed 20%");
        require (_sellFeeRate <= 20, "Fee can't exceed 20%");
        buyFeeRate = _buyFeeRate;
        sellFeeRate = _sellFeeRate;
    }

    function manualBurn(uint256 amount) external onlyOwner returns (bool) {
        return _basicTransfer(address(this), DEAD, amount);
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function setWallets(address _marketingWallet, address _devWallet) external onlyOwner {
        marketingWallet = payable(_marketingWallet);
        devWallet = payable(_devWallet);
    } 

    function removeLimitEffect() external onlyOwner {
        limitEffect = false;
    }

    function setMaxWalletEnabled(bool value) external onlyOwner {
        maxWalletEnabled = value;
    }

    function setSwapThresholdAmount (uint256 amount) external onlyOwner {
        require (amount <= _totalSupply.div(100), "can't exceed 1%");
        numTokensSellToAddToLiquidity = amount * 10 ** 9;
    } 

    function setMaxBuyAmount (uint256 maxBuyPercent) external onlyOwner {
        maxTransactionAmount = (_totalSupply * maxBuyPercent ) / 1000;
    } 

    function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner {
        maxWallet = (_totalSupply * maxWallPercent ) / 1000;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    function setIsTimelockExempt(address holder, bool exempt) external onlyOwner {
        isTimelockExempt[holder] = exempt;
    }
    
    // enable cooldown between trades
    function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }

    function clearStuckBalance(uint256 amountPercentage, address adr) external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(adr).transfer(
            (amountETH * amountPercentage) / 100
        );
    }

    function rescueToken(address tokenAddress, uint256 tokens)
        public
        onlyOwner
        returns (bool success)
    {
        return IERC20(tokenAddress).transfer(msg.sender, tokens);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"},{"internalType":"address","name":"adr","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimitEffect","outputs":[],"stateMutability":"nonpayable","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":[],"name":"sellFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFeeRate","type":"uint256"},{"internalType":"uint256","name":"_sellFeeRate","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyPercent","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setMaxWalletEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapToken","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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a62000096919062000acf565b633b9aca00620000a7919062000b1f565b60045560646002600454620000bd919062000b1f565b620000c9919062000b96565b60055560646002600454620000df919062000b1f565b620000eb919062000b96565b600655612710600560045462000102919062000b1f565b6200010e919062000b96565b6007556014600e556014600f55606460105573eb9a7070478962424b38a9464bfae0f74386b3e960115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073484ff85dc7e03464782647e1961ac575013c4f1b60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601460156101000a81548160ff0219169083151502179055506001601460166101000a81548160ff0219169083151502179055505f601460186101000a81548160ff021916908315150217905550600f601460196101000a81548160ff021916908360ff16021790555034801562000240575f80fd5b5033805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050737a250d5630b4cf539739df2c5dacb4c659f2488d60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000341573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000367919062000c32565b60015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000411573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000437919062000c32565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200049492919062000c73565b6020604051808303815f875af1158015620004b1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004d7919062000c32565b60145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506001600c5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600d5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600d5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600d5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060045460085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004546040516200092f919062000caf565b60405180910390a362000cca565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620009c7578086048111156200099f576200099e6200093d565b5b6001851615620009af5780820291505b8081029050620009bf856200096a565b94506200097f565b94509492505050565b5f82620009e1576001905062000ab3565b81620009f0575f905062000ab3565b816001811462000a09576002811462000a145762000a4a565b600191505062000ab3565b60ff84111562000a295762000a286200093d565b5b8360020a91508482111562000a435762000a426200093d565b5b5062000ab3565b5060208310610133831016604e8410600b841016171562000a845782820a90508381111562000a7e5762000a7d6200093d565b5b62000ab3565b62000a93848484600162000976565b9250905081840481111562000aad5762000aac6200093d565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f62000adb8262000aba565b915062000ae88362000ac3565b925062000b177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620009d0565b905092915050565b5f62000b2b8262000aba565b915062000b388362000aba565b925082820262000b488162000aba565b9150828204841483151762000b625762000b616200093d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000ba28262000aba565b915062000baf8362000aba565b92508262000bc25762000bc162000b69565b5b828204905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000bfc8262000bd1565b9050919050565b62000c0e8162000bf0565b811462000c19575f80fd5b50565b5f8151905062000c2c8162000c03565b92915050565b5f6020828403121562000c4a5762000c4962000bcd565b5b5f62000c598482850162000c1c565b91505092915050565b62000c6d8162000bf0565b82525050565b5f60408201905062000c885f83018562000c62565b62000c97602083018462000c62565b9392505050565b62000ca98162000aba565b82525050565b5f60208201905062000cc45f83018462000c9e565b92915050565b613b648062000cd85f395ff3fe60806040526004361061025f575f3560e01c8063722b62ad11610143578063d045a329116100b5578063dd62ed3e11610079578063dd62ed3e146108aa578063f2fde38b146108e6578063f34eb0b81461090e578063f84ba65d14610936578063f887ea401461095e578063f8b45b051461098857610266565b8063d045a32914610802578063d12a76881461082c578063d3f6a15714610856578063d47edea21461087e578063dc73e49c1461089457610266565b80638ea5220f116101075780638ea5220f146106f657806395d89b4114610720578063a614ff751461074a578063a8aa1b3114610772578063a9059cbb1461079c578063c8c8ebe4146107d857610266565b8063722b62ad1461063a57806375f0a8741461066457806382bf293c1461068e578063893d20e8146106b65780638a8c523c146106e057610266565b806333f3d628116101dc5780635b149feb116101a05780635b149feb14610542578063617fe0ed1461056c578063658d4b7f146105965780636b1b4987146105be57806370a08231146105e8578063715018a61461062457610266565b806333f3d6281461045257806350db71fb1461048e57806352f7c988146104b657806356a227f2146104de578063571ac8b01461050657610266565b806329e04b4a1161022357806329e04b4a146103725780632b112e491461039a5780632d594567146103c45780632f54bf6e146103ec578063313ce5671461042857610266565b806306fdde031461026a578063095ea7b31461029457806318160ddd146102d057806323b63585146102fa57806323b872dd1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109b2565b60405161028b9190612ed8565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b59190612f89565b6109ef565b6040516102c79190612fe1565b60405180910390f35b3480156102db575f80fd5b506102e4610adc565b6040516102f19190613009565b60405180910390f35b348015610305575f80fd5b50610320600480360381019061031b9190613022565b610ae5565b60405161032d9190612fe1565b60405180910390f35b348015610341575f80fd5b5061035c6004803603810190610357919061304d565b610b61565b6040516103699190612fe1565b60405180910390f35b34801561037d575f80fd5b5061039860048036038101906103939190613022565b610d54565b005b3480156103a5575f80fd5b506103ae610e0d565b6040516103bb9190613009565b60405180910390f35b3480156103cf575f80fd5b506103ea60048036038101906103e591906130fd565b610e8c565b005b3480156103f7575f80fd5b50610412600480360381019061040d919061313b565b610f0d565b60405161041f9190612fe1565b60405180910390f35b348015610433575f80fd5b5061043c610f64565b6040516104499190613175565b60405180910390f35b34801561045d575f80fd5b5061047860048036038101906104739190612f89565b610f6c565b6040516104859190612fe1565b60405180910390f35b348015610499575f80fd5b506104b460048036038101906104af919061318e565b611038565b005b3480156104c1575f80fd5b506104dc60048036038101906104d791906131cc565b6110d8565b005b3480156104e9575f80fd5b5061050460048036038101906104ff919061320a565b6111ba565b005b348015610511575f80fd5b5061052c6004803603810190610527919061313b565b611266565b6040516105399190612fe1565b60405180910390f35b34801561054d575f80fd5b50610556611298565b6040516105639190613009565b60405180910390f35b348015610577575f80fd5b5061058061129e565b60405161058d9190612fe1565b60405180910390f35b3480156105a1575f80fd5b506105bc60048036038101906105b7919061318e565b6112b1565b005b3480156105c9575f80fd5b506105d2611351565b6040516105df9190613009565b60405180910390f35b3480156105f3575f80fd5b5061060e6004803603810190610609919061313b565b611357565b60405161061b9190613009565b60405180910390f35b34801561062f575f80fd5b5061063861139d565b005b348015610645575f80fd5b5061064e61149f565b60405161065b9190613175565b60405180910390f35b34801561066f575f80fd5b506106786114b2565b6040516106859190613268565b60405180910390f35b348015610699575f80fd5b506106b460048036038101906106af9190613022565b6114d7565b005b3480156106c1575f80fd5b506106ca611543565b6040516106d79190613290565b60405180910390f35b3480156106eb575f80fd5b506106f461156a565b005b348015610701575f80fd5b5061070a6115ce565b6040516107179190613268565b60405180910390f35b34801561072b575f80fd5b506107346115f3565b6040516107419190612ed8565b60405180910390f35b348015610755575f80fd5b50610770600480360381019061076b91906132a9565b611630565b005b34801561077d575f80fd5b50610786611695565b6040516107939190613290565b60405180910390f35b3480156107a7575f80fd5b506107c260048036038101906107bd9190612f89565b6116ba565b6040516107cf9190612fe1565b60405180910390f35b3480156107e3575f80fd5b506107ec6116ce565b6040516107f99190613009565b60405180910390f35b34801561080d575f80fd5b506108166116d4565b6040516108239190612fe1565b60405180910390f35b348015610837575f80fd5b506108406116e7565b60405161084d9190613009565b60405180910390f35b348015610861575f80fd5b5061087c600480360381019061087791906132d4565b6116ed565b005b348015610889575f80fd5b506108926117b9565b005b34801561089f575f80fd5b506108a861181d565b005b3480156108b5575f80fd5b506108d060048036038101906108cb91906132d4565b6118a8565b6040516108dd9190613009565b60405180910390f35b3480156108f1575f80fd5b5061090c6004803603810190610907919061333c565b61192a565b005b348015610919575f80fd5b50610934600480360381019061092f9190613022565b611a2d565b005b348015610941575f80fd5b5061095c6004803603810190610957919061318e565b611a99565b005b348015610969575f80fd5b50610972611b39565b60405161097f91906133c2565b60405180910390f35b348015610993575f80fd5b5061099c611b5e565b6040516109a99190613009565b60405180910390f35b60606040518060400160405280600481526020017f5049504900000000000000000000000000000000000000000000000000000000815250905090565b5f8160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610aca9190613009565b60405180910390a36001905092915050565b5f600454905090565b5f610aef33610f0d565b610b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2590613425565b60405180910390fd5b610b5a3060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611b64565b9050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610d4057610cc3826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e63650000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611d2e9092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b610d4b848484611d90565b90509392505050565b610d5d33610f0d565b610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9390613425565b60405180910390fd5b610db260646004546126bf90919063ffffffff16565b811115610df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610deb9061348d565b60405180910390fd5b633b9aca0081610e0491906134d8565b60078190555050565b5f610e87610e3b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611357565b610e79610e6860025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611357565b60045461270890919063ffffffff16565b61270890919063ffffffff16565b905090565b610e9533610f0d565b610ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecb90613425565b60405180910390fd5b81601460186101000a81548160ff02191690831515021790555080601460196101000a81548160ff021916908360ff1602179055505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b5f6009905090565b5f610f7633610f0d565b610fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fac90613425565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610ff0929190613519565b6020604051808303815f875af115801561100c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110309190613554565b905092915050565b61104133610f0d565b611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790613425565b60405180910390fd5b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6110e133610f0d565b611120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111790613425565b60405180910390fd5b6014821115611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b906135c9565b60405180910390fd5b60148111156111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f906135c9565b60405180910390fd5b81600e8190555080600f819055505050565b6111c333610f0d565b611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990613425565b60405180910390fd5b5f4790508173ffffffffffffffffffffffffffffffffffffffff166108fc6064858461122e91906134d8565b6112389190613614565b90811502906040515f60405180830381858888f19350505050158015611260573d5f803e3d5ffd5b50505050565b5f611291827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6109ef565b9050919050565b600f5481565b601460189054906101000a900460ff1681565b6112ba33610f0d565b6112f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f090613425565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600e5481565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113a633610f0d565b6113e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dc90613425565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601460199054906101000a900460ff1681565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114e033610f0d565b61151f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151690613425565b60405180910390fd5b6103e88160045461153091906134d8565b61153a9190613614565b60058190555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61157333610f0d565b6115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990613425565b60405180910390fd5b60016014806101000a81548160ff021916908315150217905550565b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f5049504900000000000000000000000000000000000000000000000000000000815250905090565b61163933610f0d565b611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f90613425565b60405180910390fd5b80601460166101000a81548160ff02191690831515021790555050565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6116c6338484611d90565b905092915050565b60065481565b601460169054906101000a900460ff1681565b60075481565b6116f633610f0d565b611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c90613425565b60405180910390fd5b8160125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6117c233610f0d565b611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f890613425565b60405180910390fd5b5f601460156101000a81548160ff021916908315150217905550565b61182633610f0d565b611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c90613425565b60405180910390fd5b5f61186f30611357565b90505f60075482101590505f81801561188f57505f61188d30611357565b115b905080156118a3576118a2600754612751565b5b505050565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61193333610f0d565b611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196990613425565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611a3633610f0d565b611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c90613425565b60405180910390fd5b6103e881600454611a8691906134d8565b611a909190613614565b60068190555050565b611aa233610f0d565b611ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad890613425565b60405180910390fd5b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b5f611bec826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611d2e9092919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611c7d8260085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ef90919063ffffffff16565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d1b9190613009565b60405180910390a3600190509392505050565b5f838311158290611d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6c9190612ed8565b60405180910390fd5b505f8385611d839190613644565b9050809150509392505050565b5f601460159054906101000a900460ff16156123fa575f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611e4c57505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611e8457505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611ebe575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611fb557600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611f615750600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611fb45760148054906101000a900460ff16611fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faa906136c1565b60405180910390fd5b5b5b6006548211158061200c5750600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61204b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204290613729565b60405180910390fd5b601460169054906101000a900460ff16801561209357503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156120ec575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612145575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561219e575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156121f7575060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561225a575f61220684611357565b905060055483826122179190613747565b1115612258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224f906137ea565b60405180910390fd5b505b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156122c25750601460189054906101000a900460ff165b80156123155750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123f9574260155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239090613878565b60405180910390fd5b601460199054906101000a900460ff1660ff16426123b79190613747565b60155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601460179054906101000a900460ff16156124215761241a848484611b64565b90506126b8565b5f61242b30611357565b90505f60075482101590505f818015612490575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80156124a357505f6124a130611357565b115b905080156124ce576124b660075461294c565b5f4790505f8111156124cc576124cb8161298d565b5b505b612555856040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060085f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611d2e9092919063ffffffff16565b60085f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f6125a18888612a80565b6125ab57856125b7565b6125b6888888612bd4565b5b90506126098160085f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ef90919063ffffffff16565b60085f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126a79190613009565b60405180910390a360019450505050505b9392505050565b5f61270083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d76565b905092915050565b5f61274983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d2e565b905092915050565b5f600267ffffffffffffffff81111561276d5761276c613896565b5b60405190808252806020026020018201604052801561279b5781602001602082028036833780820191505090505b50905030815f815181106127b2576127b16138c3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612822576128216138c3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016128be9594939291906139e0565b5f604051808303815f87803b1580156128d5575f80fd5b505af11580156128e7573d5f803e3d5ffd5b505050505050565b5f8082846128fd9190613747565b905083811015612942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293990613a82565b60405180910390fd5b8091505092915050565b6001601460176101000a81548160ff02191690831515021790555061297081612751565b5f601460176101000a81548160ff02191690831515021790555050565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6129dc6002846126bf90919063ffffffff16565b90811502906040515f60405180830381858888f19350505050158015612a04573d5f803e3d5ffd5b5060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612a546002846126bf90919063ffffffff16565b90811502906040515f60405180830381858888f19350505050158015612a7c573d5f803e3d5ffd5b5050565b5f600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612b1c5750600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b158015612bcc575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612bcb575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b5b905092915050565b5f8060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612c3257600e54612c36565b600f545b90505f612c60601054612c528487612dd790919063ffffffff16565b6126bf90919063ffffffff16565b9050612cb28160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ef90919063ffffffff16565b60085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d509190613009565b60405180910390a3612d6b818561270890919063ffffffff16565b925050509392505050565b5f8083118290612dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db39190612ed8565b60405180910390fd5b505f8385612dca9190613614565b9050809150509392505050565b5f808303612de7575f9050612e48565b5f8284612df491906134d8565b9050828482612e039190613614565b14612e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3a90613b10565b60405180910390fd5b809150505b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612e85578082015181840152602081019050612e6a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612eaa82612e4e565b612eb48185612e58565b9350612ec4818560208601612e68565b612ecd81612e90565b840191505092915050565b5f6020820190508181035f830152612ef08184612ea0565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f2582612efc565b9050919050565b612f3581612f1b565b8114612f3f575f80fd5b50565b5f81359050612f5081612f2c565b92915050565b5f819050919050565b612f6881612f56565b8114612f72575f80fd5b50565b5f81359050612f8381612f5f565b92915050565b5f8060408385031215612f9f57612f9e612ef8565b5b5f612fac85828601612f42565b9250506020612fbd85828601612f75565b9150509250929050565b5f8115159050919050565b612fdb81612fc7565b82525050565b5f602082019050612ff45f830184612fd2565b92915050565b61300381612f56565b82525050565b5f60208201905061301c5f830184612ffa565b92915050565b5f6020828403121561303757613036612ef8565b5b5f61304484828501612f75565b91505092915050565b5f805f6060848603121561306457613063612ef8565b5b5f61307186828701612f42565b935050602061308286828701612f42565b925050604061309386828701612f75565b9150509250925092565b6130a681612fc7565b81146130b0575f80fd5b50565b5f813590506130c18161309d565b92915050565b5f60ff82169050919050565b6130dc816130c7565b81146130e6575f80fd5b50565b5f813590506130f7816130d3565b92915050565b5f806040838503121561311357613112612ef8565b5b5f613120858286016130b3565b9250506020613131858286016130e9565b9150509250929050565b5f602082840312156131505761314f612ef8565b5b5f61315d84828501612f42565b91505092915050565b61316f816130c7565b82525050565b5f6020820190506131885f830184613166565b92915050565b5f80604083850312156131a4576131a3612ef8565b5b5f6131b185828601612f42565b92505060206131c2858286016130b3565b9150509250929050565b5f80604083850312156131e2576131e1612ef8565b5b5f6131ef85828601612f75565b925050602061320085828601612f75565b9150509250929050565b5f80604083850312156132205761321f612ef8565b5b5f61322d85828601612f75565b925050602061323e85828601612f42565b9150509250929050565b5f61325282612efc565b9050919050565b61326281613248565b82525050565b5f60208201905061327b5f830184613259565b92915050565b61328a81612f1b565b82525050565b5f6020820190506132a35f830184613281565b92915050565b5f602082840312156132be576132bd612ef8565b5b5f6132cb848285016130b3565b91505092915050565b5f80604083850312156132ea576132e9612ef8565b5b5f6132f785828601612f42565b925050602061330885828601612f42565b9150509250929050565b61331b81613248565b8114613325575f80fd5b50565b5f8135905061333681613312565b92915050565b5f6020828403121561335157613350612ef8565b5b5f61335e84828501613328565b91505092915050565b5f819050919050565b5f61338a61338561338084612efc565b613367565b612efc565b9050919050565b5f61339b82613370565b9050919050565b5f6133ac82613391565b9050919050565b6133bc816133a2565b82525050565b5f6020820190506133d55f8301846133b3565b92915050565b7f214f574e455200000000000000000000000000000000000000000000000000005f82015250565b5f61340f600683612e58565b915061341a826133db565b602082019050919050565b5f6020820190508181035f83015261343c81613403565b9050919050565b7f63616e27742065786365656420312500000000000000000000000000000000005f82015250565b5f613477600f83612e58565b915061348282613443565b602082019050919050565b5f6020820190508181035f8301526134a48161346b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6134e282612f56565b91506134ed83612f56565b92508282026134fb81612f56565b91508282048414831517613512576135116134ab565b5b5092915050565b5f60408201905061352c5f830185613281565b6135396020830184612ffa565b9392505050565b5f8151905061354e8161309d565b92915050565b5f6020828403121561356957613568612ef8565b5b5f61357684828501613540565b91505092915050565b7f4665652063616e277420657863656564203230250000000000000000000000005f82015250565b5f6135b3601483612e58565b91506135be8261357f565b602082019050919050565b5f6020820190508181035f8301526135e0816135a7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61361e82612f56565b915061362983612f56565b925082613639576136386135e7565b5b828204905092915050565b5f61364e82612f56565b915061365983612f56565b9250828203905081811115613671576136706134ab565b5b92915050565b7f54726164696e67206e6f742079657420656e61626c65642e00000000000000005f82015250565b5f6136ab601883612e58565b91506136b682613677565b602082019050919050565b5f6020820190508181035f8301526136d88161369f565b9050919050565b7f5458204c696d69742045786365656465640000000000000000000000000000005f82015250565b5f613713601183612e58565b915061371e826136df565b602082019050919050565b5f6020820190508181035f83015261374081613707565b9050919050565b5f61375182612f56565b915061375c83612f56565b9250828201905080821115613774576137736134ab565b5b92915050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d69745f8201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b5f6137d4603e83612e58565b91506137df8261377a565b604082019050919050565b5f6020820190508181035f830152613801816137c8565b9050919050565b7f506c65617365207761697420666f7220316d696e206265747765656e2074776f5f8201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b5f613862602583612e58565b915061386d82613808565b604082019050919050565b5f6020820190508181035f83015261388f81613856565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f61391361390e613909846138f0565b613367565b612f56565b9050919050565b613923816138f9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61395b81612f1b565b82525050565b5f61396c8383613952565b60208301905092915050565b5f602082019050919050565b5f61398e82613929565b6139988185613933565b93506139a383613943565b805f5b838110156139d35781516139ba8882613961565b97506139c583613978565b9250506001810190506139a6565b5085935050505092915050565b5f60a0820190506139f35f830188612ffa565b613a00602083018761391a565b8181036040830152613a128186613984565b9050613a216060830185613281565b613a2e6080830184612ffa565b9695505050505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613a6c601b83612e58565b9150613a7782613a38565b602082019050919050565b5f6020820190508181035f830152613a9981613a60565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f613afa602183612e58565b9150613b0582613aa0565b604082019050919050565b5f6020820190508181035f830152613b2781613aee565b905091905056fea264697066735822122060a01e9aeaaa201546381b5c94f80489b96ddb0f61b5652666cacb7f6ebac37764736f6c63430008140033

Deployed Bytecode

0x60806040526004361061025f575f3560e01c8063722b62ad11610143578063d045a329116100b5578063dd62ed3e11610079578063dd62ed3e146108aa578063f2fde38b146108e6578063f34eb0b81461090e578063f84ba65d14610936578063f887ea401461095e578063f8b45b051461098857610266565b8063d045a32914610802578063d12a76881461082c578063d3f6a15714610856578063d47edea21461087e578063dc73e49c1461089457610266565b80638ea5220f116101075780638ea5220f146106f657806395d89b4114610720578063a614ff751461074a578063a8aa1b3114610772578063a9059cbb1461079c578063c8c8ebe4146107d857610266565b8063722b62ad1461063a57806375f0a8741461066457806382bf293c1461068e578063893d20e8146106b65780638a8c523c146106e057610266565b806333f3d628116101dc5780635b149feb116101a05780635b149feb14610542578063617fe0ed1461056c578063658d4b7f146105965780636b1b4987146105be57806370a08231146105e8578063715018a61461062457610266565b806333f3d6281461045257806350db71fb1461048e57806352f7c988146104b657806356a227f2146104de578063571ac8b01461050657610266565b806329e04b4a1161022357806329e04b4a146103725780632b112e491461039a5780632d594567146103c45780632f54bf6e146103ec578063313ce5671461042857610266565b806306fdde031461026a578063095ea7b31461029457806318160ddd146102d057806323b63585146102fa57806323b872dd1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109b2565b60405161028b9190612ed8565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b59190612f89565b6109ef565b6040516102c79190612fe1565b60405180910390f35b3480156102db575f80fd5b506102e4610adc565b6040516102f19190613009565b60405180910390f35b348015610305575f80fd5b50610320600480360381019061031b9190613022565b610ae5565b60405161032d9190612fe1565b60405180910390f35b348015610341575f80fd5b5061035c6004803603810190610357919061304d565b610b61565b6040516103699190612fe1565b60405180910390f35b34801561037d575f80fd5b5061039860048036038101906103939190613022565b610d54565b005b3480156103a5575f80fd5b506103ae610e0d565b6040516103bb9190613009565b60405180910390f35b3480156103cf575f80fd5b506103ea60048036038101906103e591906130fd565b610e8c565b005b3480156103f7575f80fd5b50610412600480360381019061040d919061313b565b610f0d565b60405161041f9190612fe1565b60405180910390f35b348015610433575f80fd5b5061043c610f64565b6040516104499190613175565b60405180910390f35b34801561045d575f80fd5b5061047860048036038101906104739190612f89565b610f6c565b6040516104859190612fe1565b60405180910390f35b348015610499575f80fd5b506104b460048036038101906104af919061318e565b611038565b005b3480156104c1575f80fd5b506104dc60048036038101906104d791906131cc565b6110d8565b005b3480156104e9575f80fd5b5061050460048036038101906104ff919061320a565b6111ba565b005b348015610511575f80fd5b5061052c6004803603810190610527919061313b565b611266565b6040516105399190612fe1565b60405180910390f35b34801561054d575f80fd5b50610556611298565b6040516105639190613009565b60405180910390f35b348015610577575f80fd5b5061058061129e565b60405161058d9190612fe1565b60405180910390f35b3480156105a1575f80fd5b506105bc60048036038101906105b7919061318e565b6112b1565b005b3480156105c9575f80fd5b506105d2611351565b6040516105df9190613009565b60405180910390f35b3480156105f3575f80fd5b5061060e6004803603810190610609919061313b565b611357565b60405161061b9190613009565b60405180910390f35b34801561062f575f80fd5b5061063861139d565b005b348015610645575f80fd5b5061064e61149f565b60405161065b9190613175565b60405180910390f35b34801561066f575f80fd5b506106786114b2565b6040516106859190613268565b60405180910390f35b348015610699575f80fd5b506106b460048036038101906106af9190613022565b6114d7565b005b3480156106c1575f80fd5b506106ca611543565b6040516106d79190613290565b60405180910390f35b3480156106eb575f80fd5b506106f461156a565b005b348015610701575f80fd5b5061070a6115ce565b6040516107179190613268565b60405180910390f35b34801561072b575f80fd5b506107346115f3565b6040516107419190612ed8565b60405180910390f35b348015610755575f80fd5b50610770600480360381019061076b91906132a9565b611630565b005b34801561077d575f80fd5b50610786611695565b6040516107939190613290565b60405180910390f35b3480156107a7575f80fd5b506107c260048036038101906107bd9190612f89565b6116ba565b6040516107cf9190612fe1565b60405180910390f35b3480156107e3575f80fd5b506107ec6116ce565b6040516107f99190613009565b60405180910390f35b34801561080d575f80fd5b506108166116d4565b6040516108239190612fe1565b60405180910390f35b348015610837575f80fd5b506108406116e7565b60405161084d9190613009565b60405180910390f35b348015610861575f80fd5b5061087c600480360381019061087791906132d4565b6116ed565b005b348015610889575f80fd5b506108926117b9565b005b34801561089f575f80fd5b506108a861181d565b005b3480156108b5575f80fd5b506108d060048036038101906108cb91906132d4565b6118a8565b6040516108dd9190613009565b60405180910390f35b3480156108f1575f80fd5b5061090c6004803603810190610907919061333c565b61192a565b005b348015610919575f80fd5b50610934600480360381019061092f9190613022565b611a2d565b005b348015610941575f80fd5b5061095c6004803603810190610957919061318e565b611a99565b005b348015610969575f80fd5b50610972611b39565b60405161097f91906133c2565b60405180910390f35b348015610993575f80fd5b5061099c611b5e565b6040516109a99190613009565b60405180910390f35b60606040518060400160405280600481526020017f5049504900000000000000000000000000000000000000000000000000000000815250905090565b5f8160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610aca9190613009565b60405180910390a36001905092915050565b5f600454905090565b5f610aef33610f0d565b610b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2590613425565b60405180910390fd5b610b5a3060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611b64565b9050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610d4057610cc3826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e63650000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611d2e9092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b610d4b848484611d90565b90509392505050565b610d5d33610f0d565b610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9390613425565b60405180910390fd5b610db260646004546126bf90919063ffffffff16565b811115610df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610deb9061348d565b60405180910390fd5b633b9aca0081610e0491906134d8565b60078190555050565b5f610e87610e3b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611357565b610e79610e6860025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611357565b60045461270890919063ffffffff16565b61270890919063ffffffff16565b905090565b610e9533610f0d565b610ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecb90613425565b60405180910390fd5b81601460186101000a81548160ff02191690831515021790555080601460196101000a81548160ff021916908360ff1602179055505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b5f6009905090565b5f610f7633610f0d565b610fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fac90613425565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610ff0929190613519565b6020604051808303815f875af115801561100c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110309190613554565b905092915050565b61104133610f0d565b611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790613425565b60405180910390fd5b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6110e133610f0d565b611120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111790613425565b60405180910390fd5b6014821115611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b906135c9565b60405180910390fd5b60148111156111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f906135c9565b60405180910390fd5b81600e8190555080600f819055505050565b6111c333610f0d565b611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990613425565b60405180910390fd5b5f4790508173ffffffffffffffffffffffffffffffffffffffff166108fc6064858461122e91906134d8565b6112389190613614565b90811502906040515f60405180830381858888f19350505050158015611260573d5f803e3d5ffd5b50505050565b5f611291827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6109ef565b9050919050565b600f5481565b601460189054906101000a900460ff1681565b6112ba33610f0d565b6112f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f090613425565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600e5481565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113a633610f0d565b6113e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dc90613425565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601460199054906101000a900460ff1681565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114e033610f0d565b61151f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151690613425565b60405180910390fd5b6103e88160045461153091906134d8565b61153a9190613614565b60058190555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61157333610f0d565b6115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990613425565b60405180910390fd5b60016014806101000a81548160ff021916908315150217905550565b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f5049504900000000000000000000000000000000000000000000000000000000815250905090565b61163933610f0d565b611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f90613425565b60405180910390fd5b80601460166101000a81548160ff02191690831515021790555050565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6116c6338484611d90565b905092915050565b60065481565b601460169054906101000a900460ff1681565b60075481565b6116f633610f0d565b611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c90613425565b60405180910390fd5b8160125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6117c233610f0d565b611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f890613425565b60405180910390fd5b5f601460156101000a81548160ff021916908315150217905550565b61182633610f0d565b611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c90613425565b60405180910390fd5b5f61186f30611357565b90505f60075482101590505f81801561188f57505f61188d30611357565b115b905080156118a3576118a2600754612751565b5b505050565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61193333610f0d565b611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196990613425565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611a3633610f0d565b611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c90613425565b60405180910390fd5b6103e881600454611a8691906134d8565b611a909190613614565b60068190555050565b611aa233610f0d565b611ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad890613425565b60405180910390fd5b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b5f611bec826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611d2e9092919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611c7d8260085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ef90919063ffffffff16565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d1b9190613009565b60405180910390a3600190509392505050565b5f838311158290611d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6c9190612ed8565b60405180910390fd5b505f8385611d839190613644565b9050809150509392505050565b5f601460159054906101000a900460ff16156123fa575f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611e4c57505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611e8457505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611ebe575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611fb557600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611f615750600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611fb45760148054906101000a900460ff16611fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faa906136c1565b60405180910390fd5b5b5b6006548211158061200c5750600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61204b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204290613729565b60405180910390fd5b601460169054906101000a900460ff16801561209357503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156120ec575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612145575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561219e575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156121f7575060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561225a575f61220684611357565b905060055483826122179190613747565b1115612258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224f906137ea565b60405180910390fd5b505b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156122c25750601460189054906101000a900460ff165b80156123155750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123f9574260155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239090613878565b60405180910390fd5b601460199054906101000a900460ff1660ff16426123b79190613747565b60155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601460179054906101000a900460ff16156124215761241a848484611b64565b90506126b8565b5f61242b30611357565b90505f60075482101590505f818015612490575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80156124a357505f6124a130611357565b115b905080156124ce576124b660075461294c565b5f4790505f8111156124cc576124cb8161298d565b5b505b612555856040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060085f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611d2e9092919063ffffffff16565b60085f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f6125a18888612a80565b6125ab57856125b7565b6125b6888888612bd4565b5b90506126098160085f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ef90919063ffffffff16565b60085f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126a79190613009565b60405180910390a360019450505050505b9392505050565b5f61270083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d76565b905092915050565b5f61274983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d2e565b905092915050565b5f600267ffffffffffffffff81111561276d5761276c613896565b5b60405190808252806020026020018201604052801561279b5781602001602082028036833780820191505090505b50905030815f815181106127b2576127b16138c3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612822576128216138c3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016128be9594939291906139e0565b5f604051808303815f87803b1580156128d5575f80fd5b505af11580156128e7573d5f803e3d5ffd5b505050505050565b5f8082846128fd9190613747565b905083811015612942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293990613a82565b60405180910390fd5b8091505092915050565b6001601460176101000a81548160ff02191690831515021790555061297081612751565b5f601460176101000a81548160ff02191690831515021790555050565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6129dc6002846126bf90919063ffffffff16565b90811502906040515f60405180830381858888f19350505050158015612a04573d5f803e3d5ffd5b5060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612a546002846126bf90919063ffffffff16565b90811502906040515f60405180830381858888f19350505050158015612a7c573d5f803e3d5ffd5b5050565b5f600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612b1c5750600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b158015612bcc575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612bcb575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b5b905092915050565b5f8060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612c3257600e54612c36565b600f545b90505f612c60601054612c528487612dd790919063ffffffff16565b6126bf90919063ffffffff16565b9050612cb28160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ef90919063ffffffff16565b60085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d509190613009565b60405180910390a3612d6b818561270890919063ffffffff16565b925050509392505050565b5f8083118290612dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db39190612ed8565b60405180910390fd5b505f8385612dca9190613614565b9050809150509392505050565b5f808303612de7575f9050612e48565b5f8284612df491906134d8565b9050828482612e039190613614565b14612e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3a90613b10565b60405180910390fd5b809150505b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612e85578082015181840152602081019050612e6a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612eaa82612e4e565b612eb48185612e58565b9350612ec4818560208601612e68565b612ecd81612e90565b840191505092915050565b5f6020820190508181035f830152612ef08184612ea0565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f2582612efc565b9050919050565b612f3581612f1b565b8114612f3f575f80fd5b50565b5f81359050612f5081612f2c565b92915050565b5f819050919050565b612f6881612f56565b8114612f72575f80fd5b50565b5f81359050612f8381612f5f565b92915050565b5f8060408385031215612f9f57612f9e612ef8565b5b5f612fac85828601612f42565b9250506020612fbd85828601612f75565b9150509250929050565b5f8115159050919050565b612fdb81612fc7565b82525050565b5f602082019050612ff45f830184612fd2565b92915050565b61300381612f56565b82525050565b5f60208201905061301c5f830184612ffa565b92915050565b5f6020828403121561303757613036612ef8565b5b5f61304484828501612f75565b91505092915050565b5f805f6060848603121561306457613063612ef8565b5b5f61307186828701612f42565b935050602061308286828701612f42565b925050604061309386828701612f75565b9150509250925092565b6130a681612fc7565b81146130b0575f80fd5b50565b5f813590506130c18161309d565b92915050565b5f60ff82169050919050565b6130dc816130c7565b81146130e6575f80fd5b50565b5f813590506130f7816130d3565b92915050565b5f806040838503121561311357613112612ef8565b5b5f613120858286016130b3565b9250506020613131858286016130e9565b9150509250929050565b5f602082840312156131505761314f612ef8565b5b5f61315d84828501612f42565b91505092915050565b61316f816130c7565b82525050565b5f6020820190506131885f830184613166565b92915050565b5f80604083850312156131a4576131a3612ef8565b5b5f6131b185828601612f42565b92505060206131c2858286016130b3565b9150509250929050565b5f80604083850312156131e2576131e1612ef8565b5b5f6131ef85828601612f75565b925050602061320085828601612f75565b9150509250929050565b5f80604083850312156132205761321f612ef8565b5b5f61322d85828601612f75565b925050602061323e85828601612f42565b9150509250929050565b5f61325282612efc565b9050919050565b61326281613248565b82525050565b5f60208201905061327b5f830184613259565b92915050565b61328a81612f1b565b82525050565b5f6020820190506132a35f830184613281565b92915050565b5f602082840312156132be576132bd612ef8565b5b5f6132cb848285016130b3565b91505092915050565b5f80604083850312156132ea576132e9612ef8565b5b5f6132f785828601612f42565b925050602061330885828601612f42565b9150509250929050565b61331b81613248565b8114613325575f80fd5b50565b5f8135905061333681613312565b92915050565b5f6020828403121561335157613350612ef8565b5b5f61335e84828501613328565b91505092915050565b5f819050919050565b5f61338a61338561338084612efc565b613367565b612efc565b9050919050565b5f61339b82613370565b9050919050565b5f6133ac82613391565b9050919050565b6133bc816133a2565b82525050565b5f6020820190506133d55f8301846133b3565b92915050565b7f214f574e455200000000000000000000000000000000000000000000000000005f82015250565b5f61340f600683612e58565b915061341a826133db565b602082019050919050565b5f6020820190508181035f83015261343c81613403565b9050919050565b7f63616e27742065786365656420312500000000000000000000000000000000005f82015250565b5f613477600f83612e58565b915061348282613443565b602082019050919050565b5f6020820190508181035f8301526134a48161346b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6134e282612f56565b91506134ed83612f56565b92508282026134fb81612f56565b91508282048414831517613512576135116134ab565b5b5092915050565b5f60408201905061352c5f830185613281565b6135396020830184612ffa565b9392505050565b5f8151905061354e8161309d565b92915050565b5f6020828403121561356957613568612ef8565b5b5f61357684828501613540565b91505092915050565b7f4665652063616e277420657863656564203230250000000000000000000000005f82015250565b5f6135b3601483612e58565b91506135be8261357f565b602082019050919050565b5f6020820190508181035f8301526135e0816135a7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61361e82612f56565b915061362983612f56565b925082613639576136386135e7565b5b828204905092915050565b5f61364e82612f56565b915061365983612f56565b9250828203905081811115613671576136706134ab565b5b92915050565b7f54726164696e67206e6f742079657420656e61626c65642e00000000000000005f82015250565b5f6136ab601883612e58565b91506136b682613677565b602082019050919050565b5f6020820190508181035f8301526136d88161369f565b9050919050565b7f5458204c696d69742045786365656465640000000000000000000000000000005f82015250565b5f613713601183612e58565b915061371e826136df565b602082019050919050565b5f6020820190508181035f83015261374081613707565b9050919050565b5f61375182612f56565b915061375c83612f56565b9250828201905080821115613774576137736134ab565b5b92915050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d69745f8201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b5f6137d4603e83612e58565b91506137df8261377a565b604082019050919050565b5f6020820190508181035f830152613801816137c8565b9050919050565b7f506c65617365207761697420666f7220316d696e206265747765656e2074776f5f8201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b5f613862602583612e58565b915061386d82613808565b604082019050919050565b5f6020820190508181035f83015261388f81613856565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f61391361390e613909846138f0565b613367565b612f56565b9050919050565b613923816138f9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61395b81612f1b565b82525050565b5f61396c8383613952565b60208301905092915050565b5f602082019050919050565b5f61398e82613929565b6139988185613933565b93506139a383613943565b805f5b838110156139d35781516139ba8882613961565b97506139c583613978565b9250506001810190506139a6565b5085935050505092915050565b5f60a0820190506139f35f830188612ffa565b613a00602083018761391a565b8181036040830152613a128186613984565b9050613a216060830185613281565b613a2e6080830184612ffa565b9695505050505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613a6c601b83612e58565b9150613a7782613a38565b602082019050919050565b5f6020820190508181035f830152613a9981613a60565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f613afa602183612e58565b9150613b0582613aa0565b604082019050919050565b5f6020820190508181035f830152613b2781613aee565b905091905056fea264697066735822122060a01e9aeaaa201546381b5c94f80489b96ddb0f61b5652666cacb7f6ebac37764736f6c63430008140033

Deployed Bytecode Sourcemap

4984:11565:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7857:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8279:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7587:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14378:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8797:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15082:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14529:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15919:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2889:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7681:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16338:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15739:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14086:284;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16091:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8503:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6029:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6547:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13959:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5992:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8027:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3262:146;;;;;;;;;;;;;:::i;:::-;;6592:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6207:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15454:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7943:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13862:81;;;;;;;;;;;;;:::i;:::-;;6114:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7767:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14971:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6339:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8633:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5495:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6438:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5566:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14679:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14877:86;;;;;;;;;;;;;:::i;:::-;;13451:403;;;;;;;;;;;;;:::i;:::-;;8138:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3111:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15297:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15604:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6308:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5435:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7857:80;7905:13;7929:5;;;;;;;;;;;;;;;;;7922:12;;7857:80;:::o;8279:216::-;8354:4;8406:6;8371:11;:23;8383:10;8371:23;;;;;;;;;;;;;;;:32;8395:7;8371:32;;;;;;;;;;;;;;;:41;;;;8449:7;8428:37;;8437:10;8428:37;;;8458:6;8428:37;;;;;;:::i;:::-;;;;;;;;8483:4;8476:11;;8279:216;;;;:::o;7587:88::-;7642:7;7660:12;;7653:19;;7587:88;:::o;14378:139::-;14442:4;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;14466:43:::1;14489:4;14496;;;;;;;;;;;14502:6;14466:14;:43::i;:::-;14459:50;;14378:139:::0;;;:::o;8797:370::-;8897:4;8952:17;8917:11;:19;8929:6;8917:19;;;;;;;;;;;;;;;:31;8937:10;8917:31;;;;;;;;;;;;;;;;:52;8914:186;;9019:69;9055:6;9019:69;;;;;;;;;;;;;;;;;:11;:19;9031:6;9019:19;;;;;;;;;;;;;;;:31;9039:10;9019:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;8985:11;:19;8997:6;8985:19;;;;;;;;;;;;;;;:31;9005:10;8985:31;;;;;;;;;;;;;;;:103;;;;8914:186;9119:40;9133:6;9141:9;9152:6;9119:13;:40::i;:::-;9112:47;;8797:370;;;;;:::o;15082:206::-;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15180:21:::1;15197:3;15180:12;;:16;;:21;;;;:::i;:::-;15170:6;:31;;15161:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;15273:7;15264:6;:16;;;;:::i;:::-;15232:29;:48;;;;15082:206:::0;:::o;14529:142::-;14582:7;14609:54;14647:15;14657:4;;;;;;;;;;;14647:9;:15::i;:::-;14609:33;14626:15;14636:4;;;;;;;;;;;14626:9;:15::i;:::-;14609:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;14602:61;;14529:142;:::o;15919:164::-;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16024:7:::1;16003:18;;:28;;;;;;;;;;;;;;;;;;16066:9;16042:21;;:33;;;;;;;;;;;;;;;;;;15919:164:::0;;:::o;2889:103::-;2944:4;2979:5;;;;;;;;;;;2968:16;;:7;:16;;;2961:23;;2889:103;;;:::o;7681:80::-;7733:5;5357:1;7742:16;;7681:80;:::o;16338:206::-;16450:12;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16494:12:::1;16487:29;;;16517:10;16529:6;16487:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16480:56;;16338:206:::0;;;;:::o;15739:129::-;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15854:6:::1;15827:16;:24;15844:6;15827:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;15739:129:::0;;:::o;14086:284::-;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;14200:2:::1;14185:11;:17;;14176:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;14263:2;14247:12;:18;;14238:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;14314:11;14301:10;:24;;;;14350:12;14336:11;:26;;;;14086:284:::0;;:::o;16091:239::-;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16187:17:::1;16207:21;16187:41;;16247:3;16239:21;;:83;16308:3;16288:16;16276:9;:28;;;;:::i;:::-;16275:36;;;;:::i;:::-;16239:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;16176:154;16091:239:::0;;:::o;8503:122::-;8558:4;8582:35;8590:7;8599:17;8582:7;:35::i;:::-;8575:42;;8503:122;;;:::o;6029:31::-;;;;:::o;6547:38::-;;;;;;;;;;;;;:::o;13959:119::-;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;14064:6:::1;14042:11;:19;14054:6;14042:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;13959:119:::0;;:::o;5992:30::-;;;;:::o;8027:105::-;8093:7;8111:9;:18;8121:7;8111:18;;;;;;;;;;;;;;;;8104:25;;8027:105;;;:::o;3262:146::-;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3368:1:::1;3332:39;;3353:5;::::0;::::1;;;;;;;;3332:39;;;;;;;;;;;;3398:1;3382:5:::0;::::1;:18;;;;;;;;;;;;;;;;;;3262:146::o:0;6592:39::-;;;;;;;;;;;;;:::o;6207:92::-;;;;;;;;;;;;;:::o;15454:142::-;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15584:4:::1;15565:14;15550:12;;:29;;;;:::i;:::-;15549:39;;;;:::i;:::-;15537:9;:51;;;;15454:142:::0;:::o;7943:78::-;7995:7;8013:5;;;;;;;;;;;8006:12;;7943:78;:::o;13862:81::-;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;13931:4:::1;13917:11;::::0;:18:::1;;;;;;;;;;;;;;;;;;13862:81::o:0;6114:86::-;;;;;;;;;;;;;:::o;7767:84::-;7817:13;7841:7;;;;;;;;;;;;;;;;;7834:14;;7767:84;:::o;14971:103::-;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15061:5:::1;15042:16;;:24;;;;;;;;;;;;;;;;;;14971:103:::0;:::o;6339:19::-;;;;;;;;;;;;;:::o;8633:156::-;8713:4;8737:44;8751:10;8763:9;8774:6;8737:13;:44::i;:::-;8730:51;;8633:156;;;;:::o;5495:64::-;;;;:::o;6438:35::-;;;;;;;;;;;;;:::o;5566:71::-;;;;:::o;14679:189::-;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;14801:16:::1;14775:15;;:43;;;;;;;;;;;;;;;;;;14849:10;14829:9;;:31;;;;;;;;;;;;;;;;;;14679:189:::0;;:::o;14877:86::-;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;14950:5:::1;14936:11;;:19;;;;;;;;;;;;;;;;;;14877:86::o:0;13451:403::-;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;13502:28:::1;13533:24;13551:4;13533:9;:24::i;:::-;13502:55;;13570:24;13621:29;;13597:20;:53;;13570:80;;13667:19;13690;:51;;;;;13740:1;13713:24;13731:4;13713:9;:24::i;:::-;:28;13690:51;13667:75;;13756:14;13753:94;;;13787:47;13804:29;;13787:16;:47::i;:::-;13753:94;13489:365;;;13451:403::o:0;8138:133::-;8222:7;8240:11;:19;8252:6;8240:19;;;;;;;;;;;;;;;:28;8260:7;8240:28;;;;;;;;;;;;;;;;8233:35;;8138:133;;;;:::o;3111:143::-;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3220:3:::1;3192:32;;3213:5;::::0;::::1;;;;;;;;3192:32;;;;;;;;;;;;3243:3;3235:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;3111:143:::0;:::o;15297:148::-;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15433:4:::1;15415:13;15400:12;;:28;;;;:::i;:::-;15399:38;;;;:::i;:::-;15376:20;:61;;;;15297:148:::0;:::o;15604:127::-;2788:19;2796:10;2788:7;:19::i;:::-;2780:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15717:6:::1;15691:15;:23;15707:6;15691:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;15604:127:::0;;:::o;6308:24::-;;;;;;;;;;;;;:::o;5435:53::-;;;;:::o;11825:330::-;11918:4;11955:53;11977:6;11955:53;;;;;;;;;;;;;;;;;:9;:17;11965:6;11955:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;11935:9;:17;11945:6;11935:17;;;;;;;;;;;;;;;:73;;;;12042:32;12067:6;12042:9;:20;12052:9;12042:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12019:9;:20;12029:9;12019:20;;;;;;;;;;;;;;;:55;;;;12107:9;12090:35;;12099:6;12090:35;;;12118:6;12090:35;;;;;;:::i;:::-;;;;;;;;12143:4;12136:11;;11825:330;;;;;:::o;554:192::-;640:7;673:1;668;:6;;676:12;660:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;700:9;716:1;712;:5;;;;:::i;:::-;700:17;;737:1;730:8;;;554:192;;;;;:::o;9175:2492::-;9267:4;9289:11;;;;;;;;;;;9286:1389;;;9348:5;;;;;;;;;;9338:15;;:6;:15;;;;:54;;;;;9387:5;;;;;;;;;;9374:18;;:9;:18;;;;9338:54;:98;;;;;9434:1;9413:23;;:9;:23;;;;9338:98;:147;;;;;9478:6;9457:28;;:9;:28;;;;9338:147;9316:361;;;9523:11;:19;9535:6;9523:19;;;;;;;;;;;;;;;;;;;;;;;;;9522:20;:47;;;;;9547:11;:22;9559:9;9547:22;;;;;;;;;;;;;;;;;;;;;;;;;9546:23;9522:47;9519:143;;;9602:11;;;;;;;;;;9594:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;9519:143;9316:361;9756:20;;9746:6;:30;;:57;;;;9780:15;:23;9796:6;9780:23;;;;;;;;;;;;;;;;;;;;;;;;;9746:57;9738:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;9878:16;;;;;;;;;;;:46;;;;;9919:4;9898:26;;:9;:26;;;;9878:46;:76;;;;;9949:4;;;;;;;;;;;9928:26;;:9;:26;;;;9878:76;:97;;;;;9971:4;;;;;;;;;;;9958:17;;:9;:17;;;;9878:97;:129;;;;;9992:15;;;;;;;;;;;9979:28;;:9;:28;;;;9878:129;:155;;;;;10024:9;;;;;;;;;;;10011:22;;:9;:22;;;;9878:155;9874:363;;;10053:18;10074:20;10084:9;10074;:20::i;:::-;10053:41;;10146:9;;10135:6;10122:10;:19;;;;:::i;:::-;10121:34;;10113:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;10034:203;9874:363;10359:4;;;;;;;;;;;10349:14;;:6;:14;;;:53;;;;;10384:18;;;;;;;;;;;10349:53;:102;;;;;10424:16;:27;10441:9;10424:27;;;;;;;;;;;;;;;;;;;;;;;;;10423:28;10349:102;10345:319;;;10507:15;10480:13;:24;10494:9;10480:24;;;;;;;;;;;;;;;;:42;10472:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;10627:21;;;;;;;;;;;10609:39;;:15;:39;;;;:::i;:::-;10582:13;:24;10596:9;10582:24;;;;;;;;;;;;;;;:66;;;;10345:319;9286:1389;10690:6;;;;;;;;;;;10687:63;;;10706:41;10721:6;10729:9;10740:6;10706:14;:41::i;:::-;10699:48;;;;10687:63;10768:28;10799:24;10817:4;10799:9;:24::i;:::-;10768:55;;10836:24;10887:29;;10863:20;:53;;10836:80;;10933:19;10956;:38;;;;;10990:4;;;;;;;;;;;10979:15;;:9;:15;;;10956:38;:70;;;;;11025:1;10998:24;11016:4;10998:9;:24::i;:::-;:28;10956:70;10933:94;;11041:14;11038:253;;;11072:39;11081:29;;11072:8;:39::i;:::-;11129:27;11159:21;11129:51;;11220:1;11198:19;:23;11195:71;;;11225:38;11243:19;11225:17;:38::i;:::-;11195:71;11056:235;11038:253;11323:53;11345:6;11323:53;;;;;;;;;;;;;;;;;:9;:17;11333:6;11323:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;11303:9;:17;11313:6;11303:17;;;;;;;;;;;;;;;:73;;;;11389:22;11414:32;11428:6;11436:9;11414:13;:32::i;:::-;:78;;11486:6;11414:78;;;11449:34;11457:6;11465:9;11476:6;11449:7;:34::i;:::-;11414:78;11389:103;;11536:40;11561:14;11536:9;:20;11546:9;11536:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;11513:9;:20;11523:9;11513:20;;;;;;;;;;;;;;;:63;;;;11611:9;11594:43;;11603:6;11594:43;;;11622:14;11594:43;;;;;;:::i;:::-;;;;;;;;11655:4;11648:11;;;;;;9175:2492;;;;;;:::o;1008:132::-;1066:7;1093:39;1097:1;1100;1093:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1086:46;;1008:132;;;;:::o;412:136::-;470:7;497:43;501:1;504;497:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;490:50;;412:136;;;;:::o;12954:489::-;13082:21;13120:1;13106:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13082:40;;13151:4;13133;13138:1;13133:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;13177:4;;;;;;;;;;;13167;13172:1;13167:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;13220:6;;;;;;;;;;;:57;;;13292:11;13318:1;13362:4;13389;13409:15;13220:215;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13009:434;12954:489;:::o;225:181::-;283:7;303:9;319:1;315;:5;;;;:::i;:::-;303:17;;344:1;339;:6;;331:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;397:1;390:8;;;225:181;;;;:::o;12847:95::-;6727:4;6718:6;;:13;;;;;;;;;;;;;;;;;;12910:24:::1;12927:6;12910:16;:24::i;:::-;6745:5:::0;6736:6;;:14;;;;;;;;;;;;;;;;;;12847:95;:::o;11672:141::-;11729:15;;;;;;;;;;;:24;;:40;11754:14;11766:1;11754:7;:11;;:14;;;;:::i;:::-;11729:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11774:9;;;;;;;;;;;:18;;:34;11793:14;11805:1;11793:7;:11;;:14;;;;:::i;:::-;11774:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11672:141;:::o;12163:207::-;12244:4;12272:11;:19;12284:6;12272:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;12295:11;:22;12307:9;12295:22;;;;;;;;;;;;;;;;;;;;;;;;;12272:45;12270:48;:90;;;;;12334:4;;;;;;;;;;;12324:14;;:6;:14;;;:35;;;;12355:4;;;;;;;;;;;12342:17;;:9;:17;;;12324:35;12270:90;12261:101;;12163:207;;;;:::o;12378:461::-;12464:7;12484:23;12523:4;;;;;;;;;;;12510:17;;:9;:17;;;:44;;12544:10;;12510:44;;;12530:11;;12510:44;12484:70;;12565:17;12605:47;12637:14;;12605:27;12616:15;12605:6;:10;;:27;;;;:::i;:::-;:31;;:47;;;;:::i;:::-;12593:59;;12690:39;12719:9;12690;:24;12708:4;12690:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;12663:9;:24;12681:4;12663:24;;;;;;;;;;;;;;;:66;;;;12770:4;12745:42;;12754:6;12745:42;;;12777:9;12745:42;;;;;;:::i;:::-;;;;;;;;12810:21;12821:9;12810:6;:10;;:21;;;;:::i;:::-;12803:28;;;;12378:461;;;;;:::o;1146:345::-;1232:7;1331:1;1327;:5;1334:12;1319:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1358:9;1374:1;1370;:5;;;;:::i;:::-;1358:17;;1482:1;1475:8;;;1146:345;;;;;:::o;752:250::-;810:7;839:1;834;:6;830:47;;864:1;857:8;;;;830:47;889:9;905:1;901;:5;;;;:::i;:::-;889:17;;934:1;929;925;:5;;;;:::i;:::-;:10;917:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;993:1;986:8;;;752:250;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:116::-;4828:21;4843:5;4828:21;:::i;:::-;4821:5;4818:32;4808:60;;4864:1;4861;4854:12;4808:60;4758:116;:::o;4880:133::-;4923:5;4961:6;4948:20;4939:29;;4977:30;5001:5;4977:30;:::i;:::-;4880:133;;;;:::o;5019:86::-;5054:7;5094:4;5087:5;5083:16;5072:27;;5019:86;;;:::o;5111:118::-;5182:22;5198:5;5182:22;:::i;:::-;5175:5;5172:33;5162:61;;5219:1;5216;5209:12;5162:61;5111:118;:::o;5235:135::-;5279:5;5317:6;5304:20;5295:29;;5333:31;5358:5;5333:31;:::i;:::-;5235:135;;;;:::o;5376:464::-;5439:6;5447;5496:2;5484:9;5475:7;5471:23;5467:32;5464:119;;;5502:79;;:::i;:::-;5464:119;5622:1;5647:50;5689:7;5680:6;5669:9;5665:22;5647:50;:::i;:::-;5637:60;;5593:114;5746:2;5772:51;5815:7;5806:6;5795:9;5791:22;5772:51;:::i;:::-;5762:61;;5717:116;5376:464;;;;;:::o;5846:329::-;5905:6;5954:2;5942:9;5933:7;5929:23;5925:32;5922:119;;;5960:79;;:::i;:::-;5922:119;6080:1;6105:53;6150:7;6141:6;6130:9;6126:22;6105:53;:::i;:::-;6095:63;;6051:117;5846:329;;;;:::o;6181:112::-;6264:22;6280:5;6264:22;:::i;:::-;6259:3;6252:35;6181:112;;:::o;6299:214::-;6388:4;6426:2;6415:9;6411:18;6403:26;;6439:67;6503:1;6492:9;6488:17;6479:6;6439:67;:::i;:::-;6299:214;;;;:::o;6519:468::-;6584:6;6592;6641:2;6629:9;6620:7;6616:23;6612:32;6609:119;;;6647:79;;:::i;:::-;6609:119;6767:1;6792:53;6837:7;6828:6;6817:9;6813:22;6792:53;:::i;:::-;6782:63;;6738:117;6894:2;6920:50;6962:7;6953:6;6942:9;6938:22;6920:50;:::i;:::-;6910:60;;6865:115;6519:468;;;;;:::o;6993:474::-;7061:6;7069;7118:2;7106:9;7097:7;7093:23;7089:32;7086:119;;;7124:79;;:::i;:::-;7086:119;7244:1;7269:53;7314:7;7305:6;7294:9;7290:22;7269:53;:::i;:::-;7259:63;;7215:117;7371:2;7397:53;7442:7;7433:6;7422:9;7418:22;7397:53;:::i;:::-;7387:63;;7342:118;6993:474;;;;;:::o;7473:::-;7541:6;7549;7598:2;7586:9;7577:7;7573:23;7569:32;7566:119;;;7604:79;;:::i;:::-;7566:119;7724:1;7749:53;7794:7;7785:6;7774:9;7770:22;7749:53;:::i;:::-;7739:63;;7695:117;7851:2;7877:53;7922:7;7913:6;7902:9;7898:22;7877:53;:::i;:::-;7867:63;;7822:118;7473:474;;;;;:::o;7953:104::-;7998:7;8027:24;8045:5;8027:24;:::i;:::-;8016:35;;7953:104;;;:::o;8063:142::-;8166:32;8192:5;8166:32;:::i;:::-;8161:3;8154:45;8063:142;;:::o;8211:254::-;8320:4;8358:2;8347:9;8343:18;8335:26;;8371:87;8455:1;8444:9;8440:17;8431:6;8371:87;:::i;:::-;8211:254;;;;:::o;8471:118::-;8558:24;8576:5;8558:24;:::i;:::-;8553:3;8546:37;8471:118;;:::o;8595:222::-;8688:4;8726:2;8715:9;8711:18;8703:26;;8739:71;8807:1;8796:9;8792:17;8783:6;8739:71;:::i;:::-;8595:222;;;;:::o;8823:323::-;8879:6;8928:2;8916:9;8907:7;8903:23;8899:32;8896:119;;;8934:79;;:::i;:::-;8896:119;9054:1;9079:50;9121:7;9112:6;9101:9;9097:22;9079:50;:::i;:::-;9069:60;;9025:114;8823:323;;;;:::o;9152:474::-;9220:6;9228;9277:2;9265:9;9256:7;9252:23;9248:32;9245:119;;;9283:79;;:::i;:::-;9245:119;9403:1;9428:53;9473:7;9464:6;9453:9;9449:22;9428:53;:::i;:::-;9418:63;;9374:117;9530:2;9556:53;9601:7;9592:6;9581:9;9577:22;9556:53;:::i;:::-;9546:63;;9501:118;9152:474;;;;;:::o;9632:138::-;9713:32;9739:5;9713:32;:::i;:::-;9706:5;9703:43;9693:71;;9760:1;9757;9750:12;9693:71;9632:138;:::o;9776:155::-;9830:5;9868:6;9855:20;9846:29;;9884:41;9919:5;9884:41;:::i;:::-;9776:155;;;;:::o;9937:345::-;10004:6;10053:2;10041:9;10032:7;10028:23;10024:32;10021:119;;;10059:79;;:::i;:::-;10021:119;10179:1;10204:61;10257:7;10248:6;10237:9;10233:22;10204:61;:::i;:::-;10194:71;;10150:125;9937:345;;;;:::o;10288:60::-;10316:3;10337:5;10330:12;;10288:60;;;:::o;10354:142::-;10404:9;10437:53;10455:34;10464:24;10482:5;10464:24;:::i;:::-;10455:34;:::i;:::-;10437:53;:::i;:::-;10424:66;;10354:142;;;:::o;10502:126::-;10552:9;10585:37;10616:5;10585:37;:::i;:::-;10572:50;;10502:126;;;:::o;10634:144::-;10702:9;10735:37;10766:5;10735:37;:::i;:::-;10722:50;;10634:144;;;:::o;10784:167::-;10889:55;10938:5;10889:55;:::i;:::-;10884:3;10877:68;10784:167;;:::o;10957:258::-;11068:4;11106:2;11095:9;11091:18;11083:26;;11119:89;11205:1;11194:9;11190:17;11181:6;11119:89;:::i;:::-;10957:258;;;;:::o;11221:156::-;11361:8;11357:1;11349:6;11345:14;11338:32;11221:156;:::o;11383:365::-;11525:3;11546:66;11610:1;11605:3;11546:66;:::i;:::-;11539:73;;11621:93;11710:3;11621:93;:::i;:::-;11739:2;11734:3;11730:12;11723:19;;11383:365;;;:::o;11754:419::-;11920:4;11958:2;11947:9;11943:18;11935:26;;12007:9;12001:4;11997:20;11993:1;11982:9;11978:17;11971:47;12035:131;12161:4;12035:131;:::i;:::-;12027:139;;11754:419;;;:::o;12179:165::-;12319:17;12315:1;12307:6;12303:14;12296:41;12179:165;:::o;12350:366::-;12492:3;12513:67;12577:2;12572:3;12513:67;:::i;:::-;12506:74;;12589:93;12678:3;12589:93;:::i;:::-;12707:2;12702:3;12698:12;12691:19;;12350:366;;;:::o;12722:419::-;12888:4;12926:2;12915:9;12911:18;12903:26;;12975:9;12969:4;12965:20;12961:1;12950:9;12946:17;12939:47;13003:131;13129:4;13003:131;:::i;:::-;12995:139;;12722:419;;;:::o;13147:180::-;13195:77;13192:1;13185:88;13292:4;13289:1;13282:15;13316:4;13313:1;13306:15;13333:410;13373:7;13396:20;13414:1;13396:20;:::i;:::-;13391:25;;13430:20;13448:1;13430:20;:::i;:::-;13425:25;;13485:1;13482;13478:9;13507:30;13525:11;13507:30;:::i;:::-;13496:41;;13686:1;13677:7;13673:15;13670:1;13667:22;13647:1;13640:9;13620:83;13597:139;;13716:18;;:::i;:::-;13597:139;13381:362;13333:410;;;;:::o;13749:332::-;13870:4;13908:2;13897:9;13893:18;13885:26;;13921:71;13989:1;13978:9;13974:17;13965:6;13921:71;:::i;:::-;14002:72;14070:2;14059:9;14055:18;14046:6;14002:72;:::i;:::-;13749:332;;;;;:::o;14087:137::-;14141:5;14172:6;14166:13;14157:22;;14188:30;14212:5;14188:30;:::i;:::-;14087:137;;;;:::o;14230:345::-;14297:6;14346:2;14334:9;14325:7;14321:23;14317:32;14314:119;;;14352:79;;:::i;:::-;14314:119;14472:1;14497:61;14550:7;14541:6;14530:9;14526:22;14497:61;:::i;:::-;14487:71;;14443:125;14230:345;;;;:::o;14581:170::-;14721:22;14717:1;14709:6;14705:14;14698:46;14581:170;:::o;14757:366::-;14899:3;14920:67;14984:2;14979:3;14920:67;:::i;:::-;14913:74;;14996:93;15085:3;14996:93;:::i;:::-;15114:2;15109:3;15105:12;15098:19;;14757:366;;;:::o;15129:419::-;15295:4;15333:2;15322:9;15318:18;15310:26;;15382:9;15376:4;15372:20;15368:1;15357:9;15353:17;15346:47;15410:131;15536:4;15410:131;:::i;:::-;15402:139;;15129:419;;;:::o;15554:180::-;15602:77;15599:1;15592:88;15699:4;15696:1;15689:15;15723:4;15720:1;15713:15;15740:185;15780:1;15797:20;15815:1;15797:20;:::i;:::-;15792:25;;15831:20;15849:1;15831:20;:::i;:::-;15826:25;;15870:1;15860:35;;15875:18;;:::i;:::-;15860:35;15917:1;15914;15910:9;15905:14;;15740:185;;;;:::o;15931:194::-;15971:4;15991:20;16009:1;15991:20;:::i;:::-;15986:25;;16025:20;16043:1;16025:20;:::i;:::-;16020:25;;16069:1;16066;16062:9;16054:17;;16093:1;16087:4;16084:11;16081:37;;;16098:18;;:::i;:::-;16081:37;15931:194;;;;:::o;16131:174::-;16271:26;16267:1;16259:6;16255:14;16248:50;16131:174;:::o;16311:366::-;16453:3;16474:67;16538:2;16533:3;16474:67;:::i;:::-;16467:74;;16550:93;16639:3;16550:93;:::i;:::-;16668:2;16663:3;16659:12;16652:19;;16311:366;;;:::o;16683:419::-;16849:4;16887:2;16876:9;16872:18;16864:26;;16936:9;16930:4;16926:20;16922:1;16911:9;16907:17;16900:47;16964:131;17090:4;16964:131;:::i;:::-;16956:139;;16683:419;;;:::o;17108:167::-;17248:19;17244:1;17236:6;17232:14;17225:43;17108:167;:::o;17281:366::-;17423:3;17444:67;17508:2;17503:3;17444:67;:::i;:::-;17437:74;;17520:93;17609:3;17520:93;:::i;:::-;17638:2;17633:3;17629:12;17622:19;;17281:366;;;:::o;17653:419::-;17819:4;17857:2;17846:9;17842:18;17834:26;;17906:9;17900:4;17896:20;17892:1;17881:9;17877:17;17870:47;17934:131;18060:4;17934:131;:::i;:::-;17926:139;;17653:419;;;:::o;18078:191::-;18118:3;18137:20;18155:1;18137:20;:::i;:::-;18132:25;;18171:20;18189:1;18171:20;:::i;:::-;18166:25;;18214:1;18211;18207:9;18200:16;;18235:3;18232:1;18229:10;18226:36;;;18242:18;;:::i;:::-;18226:36;18078:191;;;;:::o;18275:249::-;18415:34;18411:1;18403:6;18399:14;18392:58;18484:32;18479:2;18471:6;18467:15;18460:57;18275:249;:::o;18530:366::-;18672:3;18693:67;18757:2;18752:3;18693:67;:::i;:::-;18686:74;;18769:93;18858:3;18769:93;:::i;:::-;18887:2;18882:3;18878:12;18871:19;;18530:366;;;:::o;18902:419::-;19068:4;19106:2;19095:9;19091:18;19083:26;;19155:9;19149:4;19145:20;19141:1;19130:9;19126:17;19119:47;19183:131;19309:4;19183:131;:::i;:::-;19175:139;;18902:419;;;:::o;19327:224::-;19467:34;19463:1;19455:6;19451:14;19444:58;19536:7;19531:2;19523:6;19519:15;19512:32;19327:224;:::o;19557:366::-;19699:3;19720:67;19784:2;19779:3;19720:67;:::i;:::-;19713:74;;19796:93;19885:3;19796:93;:::i;:::-;19914:2;19909:3;19905:12;19898:19;;19557:366;;;:::o;19929:419::-;20095:4;20133:2;20122:9;20118:18;20110:26;;20182:9;20176:4;20172:20;20168:1;20157:9;20153:17;20146:47;20210:131;20336:4;20210:131;:::i;:::-;20202:139;;19929:419;;;:::o;20354:180::-;20402:77;20399:1;20392:88;20499:4;20496:1;20489:15;20523:4;20520:1;20513:15;20540:180;20588:77;20585:1;20578:88;20685:4;20682:1;20675:15;20709:4;20706:1;20699:15;20726:85;20771:7;20800:5;20789:16;;20726:85;;;:::o;20817:158::-;20875:9;20908:61;20926:42;20935:32;20961:5;20935:32;:::i;:::-;20926:42;:::i;:::-;20908:61;:::i;:::-;20895:74;;20817:158;;;:::o;20981:147::-;21076:45;21115:5;21076:45;:::i;:::-;21071:3;21064:58;20981:147;;:::o;21134:114::-;21201:6;21235:5;21229:12;21219:22;;21134:114;;;:::o;21254:184::-;21353:11;21387:6;21382:3;21375:19;21427:4;21422:3;21418:14;21403:29;;21254:184;;;;:::o;21444:132::-;21511:4;21534:3;21526:11;;21564:4;21559:3;21555:14;21547:22;;21444:132;;;:::o;21582:108::-;21659:24;21677:5;21659:24;:::i;:::-;21654:3;21647:37;21582:108;;:::o;21696:179::-;21765:10;21786:46;21828:3;21820:6;21786:46;:::i;:::-;21864:4;21859:3;21855:14;21841:28;;21696:179;;;;:::o;21881:113::-;21951:4;21983;21978:3;21974:14;21966:22;;21881:113;;;:::o;22030:732::-;22149:3;22178:54;22226:5;22178:54;:::i;:::-;22248:86;22327:6;22322:3;22248:86;:::i;:::-;22241:93;;22358:56;22408:5;22358:56;:::i;:::-;22437:7;22468:1;22453:284;22478:6;22475:1;22472:13;22453:284;;;22554:6;22548:13;22581:63;22640:3;22625:13;22581:63;:::i;:::-;22574:70;;22667:60;22720:6;22667:60;:::i;:::-;22657:70;;22513:224;22500:1;22497;22493:9;22488:14;;22453:284;;;22457:14;22753:3;22746:10;;22154:608;;;22030:732;;;;:::o;22768:831::-;23031:4;23069:3;23058:9;23054:19;23046:27;;23083:71;23151:1;23140:9;23136:17;23127:6;23083:71;:::i;:::-;23164:80;23240:2;23229:9;23225:18;23216:6;23164:80;:::i;:::-;23291:9;23285:4;23281:20;23276:2;23265:9;23261:18;23254:48;23319:108;23422:4;23413:6;23319:108;:::i;:::-;23311:116;;23437:72;23505:2;23494:9;23490:18;23481:6;23437:72;:::i;:::-;23519:73;23587:3;23576:9;23572:19;23563:6;23519:73;:::i;:::-;22768:831;;;;;;;;:::o;23605:177::-;23745:29;23741:1;23733:6;23729:14;23722:53;23605:177;:::o;23788:366::-;23930:3;23951:67;24015:2;24010:3;23951:67;:::i;:::-;23944:74;;24027:93;24116:3;24027:93;:::i;:::-;24145:2;24140:3;24136:12;24129:19;;23788:366;;;:::o;24160:419::-;24326:4;24364:2;24353:9;24349:18;24341:26;;24413:9;24407:4;24403:20;24399:1;24388:9;24384:17;24377:47;24441:131;24567:4;24441:131;:::i;:::-;24433:139;;24160:419;;;:::o;24585:220::-;24725:34;24721:1;24713:6;24709:14;24702:58;24794:3;24789:2;24781:6;24777:15;24770:28;24585:220;:::o;24811:366::-;24953:3;24974:67;25038:2;25033:3;24974:67;:::i;:::-;24967:74;;25050:93;25139:3;25050:93;:::i;:::-;25168:2;25163:3;25159:12;25152:19;;24811:366;;;:::o;25183:419::-;25349:4;25387:2;25376:9;25372:18;25364:26;;25436:9;25430:4;25426:20;25422:1;25411:9;25407:17;25400:47;25464:131;25590:4;25464:131;:::i;:::-;25456:139;;25183:419;;;:::o

Swarm Source

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