ETH Price: $2,673.83 (+1.39%)

Token

Paradigm Zero (PZ)
 

Overview

Max Total Supply

100,000,000 PZ

Holders

414

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0 PZ

Value
$0.00
0x452407c821c1c57ea9ca3e6a2049028afb2523ca
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:
ParadigmZero

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-01
*/

/*
https://t.me/paradigmzero
https://paradigmzero.finance/
https://twitter.com/ParadigmZeroETH

Here to set new standards
Always 0/0
Rewards in USDC

*/
pragma solidity ^0.8.17;

//SPDX-License-Identifier: MIT

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

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

interface IWETH {
    function deposit() external payable;
    function withdraw(uint wad) external;
}

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

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

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    modifier Zer0() {
        require(isZer0(msg.sender), "!Zer0"); _;
    }

    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function isZer0(address adr) internal view returns (bool) {
        return adr == zer0;
    }

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

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

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

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

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

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

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

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

		function initialize(address, address) external;
}

interface 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;
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
}


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

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

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

    IERC20 BUSD = IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IDEXRouter router;

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

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 1800 seconds;
    uint256 public minDistribution = 10000;

    uint256 currentIndex;

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

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

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

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken  {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = BUSD.balanceOf(address(this));

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

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

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

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

    function process(uint256 gas) external override onlyToken{
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
        && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            BUSD.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }

    function claimDividend(address _holder) external {
        distributeDividend(_holder);
    }

    function totals() external view returns (uint256,uint256,uint256){
        return (totalDividends,totalDistributed, totalShares);
    }

    function rewardWeight(address _holder) external view returns (uint256){
        return shares[_holder].amount;
    }

    function rewardsPaid(address _holder) external view returns (uint256){
        return shares[_holder].totalRealised;
    }

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

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

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

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

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

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

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

interface Zero{
    function PZ(uint256 zeroAmount, uint256 divisor, address _token) external;
}

//for holding to pair LP
contract TokenHolder is Auth{

    IERC20 zeroToken;

    uint256 lockTimeT;
    mapping (address => uint256) allowedTokens;

    constructor(address _owner) Auth(msg.sender){
        authorizations[_owner] = true;
        zeroToken =  IERC20(msg.sender);
    }

    function requestWithdraw(uint256 _amount) external authorized {
        lockTimeT = block.timestamp + 1 days;
        allowedTokens[msg.sender] = _amount;
    }
    function withdraw() external authorized{
        require(block.timestamp >= lockTimeT);
        zeroToken.transfer(msg.sender, allowedTokens[msg.sender]);

    }
}

interface IModule{
    function gameCheck(address sender, address receiver, uint256 amount) external;
}


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

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

    IWETH WETH = IWETH(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
    IERC20 WETH2 = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
    Zero Zer0C = Zero(0x52b6023900ADE788a10059f29042c54d74731358);

    address LS;

    IPancakeSwapPair public pairContract;

    IDEXRouter public router;
    address public pair;

    DividendDistributor distributor;
    address public distributorAddress;

    TokenHolder stash;

    IModule iMod;

    uint256 distributorGas = 400000;

    string constant _name = "Paradigm Zero";
    string constant _symbol = "PZ";
    uint8 constant _decimals = 9;
    
    uint256 _totalSupply = 100 * 10**6 * (10 ** _decimals); //
    

    //txn limit/wallet amount
    uint256 public _maxTxAmount = _totalSupply.mul(10).div(1000); //
    uint256 public _maxWalletToken =  _totalSupply.mul(10).div(1000); //

    bool limits = true;

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


    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isDividendExempt;

    //token locking for greater reward weight
    mapping (address => uint256) zeroLocked;
    mapping (address => bool) psLocked;
    mapping (address => bool) zLocked;

    mapping (address => bool) pzBot;

    //Basic MEV prevention
    address mevBook;
    mapping (address => uint256) buyBlock;


    //'fee' breakdown
    uint256 public rewardDivisor = 4;
    uint256 public liqDivisor = 1;
    uint256 public treasuryDivisor = 3;
    uint256 public moduleDivisor = 2;
    uint256 public totalDivisor = rewardDivisor.add(liqDivisor).add(treasuryDivisor).add(moduleDivisor);

    bool liqAdd = true;

    address public treasuryWallet;
    address public moduleWallet;

    //tracking for ZP
    uint256 zeroAmount;

    //trade starting
    uint256 launchTime;
    bool lsStart;
    bool tradingOpened = false;
    event TradingStarted(bool enabled);

    bool initPZ;
    modifier zero() { initPZ = true; _; initPZ = false; }

    event AddLiq(uint256 amountETH, uint256 amountZero);

    uint256 splitFreq = 300;

    bool requestEnabled = true;

    bool unlockRequested;
    uint256 lockTime;
    event LiquidityUnlockRequested(uint256 _time);

    //prevents exploits
    uint256 public zCooldown = 1;
    uint256 lastZBlock;

    bool moduleActivated;

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

        stash = new TokenHolder(msg.sender);

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

        authorizations[address(stash)] = true;

        isTxLimitExempt[msg.sender] = true;
    
        treasuryWallet = 0xE93216Ea91Fa2e2c0Ea9Cc9af72027ef56c46bb6;
        moduleWallet = 0x7da2e340db9F1e5fB9326E75320F7A08eC0aa409;

        LS = 0x590a7cC27d9607C03085f725ac6B85Ac9EF85967;

        isDividendExempt[LS] = true;

        approve(address(router), _totalSupply);
        approve(address(pair), _totalSupply);
        _balances[owner] = _totalSupply;
        emit Transfer(address(0), owner, _totalSupply);
    }

    receive() external payable { }

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


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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, _totalSupply);
    }
    
    function _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 setWallets(address _treasuryWallet, address _moduleWallet) external authorized {
        treasuryWallet = _treasuryWallet;
        moduleWallet = _moduleWallet;
    }

    function claim() external{
        distributor.claimDividend(msg.sender);
    }

    function startTrading() external onlyOwner {
        tradingOpened = true;
        launchTime = block.timestamp;

        emit TradingStarted(true);
    }

    function changeSplitFreq(uint256 _freq) external authorized{
        splitFreq = _freq;
    }

    function getBotData() external view returns(uint256, uint256){
        return (splitFreq, distributorGas);
    }

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

    function gasChange(uint256 _amount) external authorized{
        distributorGas = _amount;
    }

    function lockLP(uint256 _lockTime) external authorized{
        require(_lockTime < 9999999999, "Avoid potential timestamp overflow");
        require(_lockTime >= block.timestamp + 10 days && _lockTime >= lockTime);
        requestEnabled = false;
        unlockRequested = false;
        lockTime = _lockTime;
    }

    //we plan to have a PZ capable locker, so need a rolling way to remove LP. There is a 10 day window so request must be made 10 days in advance
    function requestLPUnlock() external authorized{
        require(requestEnabled);
        lockTime = block.timestamp + 10 days;
        unlockRequested = true;
        emit LiquidityUnlockRequested(block.timestamp);
    }

    function updatePZBot(address _pzbot) external authorized{
        pzBot[_pzbot] = true;
    }

    function unlockWindowCheck() external view returns (bool){
        return unlockRequested;
    }
        
    function lpTimeCheck() external view returns (uint256){
        return lockTime;
    }

    function weightCheck(address _holder) external view returns (bool, uint256){
        bool _locked = ((zLocked[_holder] || psLocked[_holder]) ? true : false);
        uint256 _weight = psLocked[_holder] ? _balances[_holder] * 2 : _balances[_holder] + zeroLocked[_holder];
        return (_locked,_weight);
    }

    function lpTimeCheckInSeconds() external view returns (uint256){
        return lockTime - block.timestamp;
    }

    function unlockLPAfterTime() external authorized{
        require(block.timestamp >= lockTime,"Too early");
        require(unlockRequested);
        IERC20 _token = IERC20(pair);
        uint256 balance = _token.balanceOf(address(this));
        bool _success = _token.transfer(owner, balance);
        require(_success, "Token could not be transferred");
    }

    function lpExtend(uint256 newTime) external onlyOwner{
        require(newTime < 9999999999, "Avoid potential timestamp overflow");
        require(newTime > lockTime);
        lockTime = newTime;
    }

    function liftMax() external authorized {
        limits = false;
    }

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

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

    function liqidAdd() public payable zero{

        uint256 money = msg.value;
        uint256 token = balanceOf(address(this));


        router.addLiquidityETH{value: money}(
                address(this),
                token,
                0,
                0,
                address(this),
                block.timestamp
            );
            emit AddLiq(money, token);
    }

    function checkLPBal() internal view returns (uint256){
        return pairContract.balanceOf(address(this));
    }

    function getPair() external view returns(address){
        return pair;
    }

    function changeZero(address newZ) external authorized{
        Zer0C = Zero(newZ);
    }

    function changeModuleContract(address _mod, bool _enabled) external authorized{
        iMod = IModule(_mod);
        moduleActivated = _enabled;
    }

    function toggleLiqDivisor(bool _enabled) external {
        require(pzBot[msg.sender]);
        liqAdd = _enabled;
    }

    function setDivisors(uint256 _reward, uint256 _liq, uint256 _treasury, uint256 _module) external authorized{
        rewardDivisor = _reward;
        liqDivisor = _liq;
        treasuryDivisor = _treasury;
        moduleDivisor = _module;
        totalDivisor = rewardDivisor.add(liqDivisor).add(treasuryDivisor).add(moduleDivisor);
    }

    //super basic mev blocker
    function mevCheck(address _source) internal view{
        if (buyBlock[_source] == block.number){
            require(mevBook == _source);
        }
    }

    //module
    function zeroLock(uint256 _amount) public{
        zeroLocked[msg.sender] = _amount;
        zLocked[msg.sender] = true;
        try distributor.setShare(msg.sender, (_balances[msg.sender] + zeroLocked[msg.sender])) {} catch {}
    }

    function addLiq() internal {
        uint256 _liqAdd = WETH2.balanceOf(address(this));
        WETH2.transferFrom(address(this), pair, _liqAdd);
        pairContract.sync();
    }

    function divideFunds() public zero {

        uint256 ETHBal = address(this).balance;
        uint256 tokenBal = _balances[address(Zer0C)];

        uint256 lp = ETHBal.mul(liqDivisor).div(totalDivisor);
        if (lp > 0 && liqAdd){
            WETH.deposit{value : lp}();
            addLiq();      
        }
        
        if (rewardDivisor > 0) {
            uint256 rewardsM = ETHBal.mul(rewardDivisor).div(totalDivisor);
            try distributor.deposit{value: rewardsM}() {} catch {}
        } 

        if (moduleDivisor > 0){
            uint256 module = ETHBal.mul(moduleDivisor).div(totalDivisor);
            (bool tmpSuccess,) = payable(moduleWallet).call{value: module, gas: 75000}("");
            tmpSuccess = false;
        }

        uint256 treasury = address(this).balance;
        if (treasury > 0){
            (bool tmpSuccess,) = payable(treasuryWallet).call{value: treasury, gas: 75000}("");
            tmpSuccess = false;
        }

        if (tokenBal > 0){_basicTransfer(address(Zer0C), address(stash), tokenBal);} 
        try distributor.process(distributorGas) {} catch {}
    }

    function sendRewards() public zero{
        try distributor.process(distributorGas) {} catch {}
    }

    function setMaxWallet(uint256 percent) external authorized {
        require(percent >= 5); //0.5% of supply, no lower
        require(percent <= 50); //5% of supply, no higher
        _maxWalletToken = ( _totalSupply * percent ) / 1000;
    }

    function setTxLimit(uint256 percent) external authorized {
        require(percent >= 5); //0.5% of supply, no lower
        require(percent <= 50); //5% of supply, no higher
        _maxTxAmount = ( _totalSupply * percent ) / 1000;
    }

    function checkLimits(address sender,address recipient, uint256 amount) internal view {

        if (!authorizations[sender] && recipient != address(this) && sender != address(this)  
            && recipient != address(DEAD) && recipient != pair && recipient != treasuryWallet){
                uint256 heldTokens = balanceOf(recipient);
                require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
            }

        require(amount <= _maxTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");

    }

    function changeZCooldown(uint256 _cooldown) external authorized{
        zCooldown = _cooldown;
    }

    function clearStuckBalance() public  {
        uint256 amountETH = address(this).balance;
        (bool tmpSuccess,) = payable(treasuryWallet).call{value: amountETH, gas: 75000}("");
        tmpSuccess = false;
    }

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

        if (sender == pair){
            zeroAmount = zeroAmount.add(amount);
        }

        if (!psLocked[sender] && !psLocked[recipient]){
            if(!isDividendExempt[sender]){ try distributor.setShare(sender, (_balances[sender] + zeroLocked[sender])) {} catch {} }
            if(!isDividendExempt[recipient]){ try distributor.setShare(recipient, (_balances[recipient] + zeroLocked[recipient])) {} catch {} }
        }
        if(psLocked[sender]){ try distributor.setShare(sender, _balances[sender] * 2) {} catch {} }
        if(psLocked[recipient]){ try distributor.setShare(recipient, _balances[recipient] * 2) {} catch {} }

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

    function startTradingLS() external onlyOwner{
        lsStart = true;
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        if(_allowances[sender][msg.sender] != _totalSupply){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

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

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if (authorizations[sender]|| authorizations[recipient] || initPZ){
            return _basicTransfer(sender, recipient, amount);
        }
        if ((sender == LS || recipient == LS) && lsStart){
            return _lsTransfer(sender, recipient, amount);
        }

        if (psLocked[sender] || zLocked[sender]){
            require(balanceOf(sender) >= zeroLocked[sender] + amount);
        }

        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpened == true,"Trading not open yet");
        }

        if (limits){
            checkLimits(sender, recipient, amount);
        }

        //selling
        if (recipient == pair){
            mevCheck(sender);
            if (zeroAmount > 0 && !initPZ && lastZBlock + zCooldown <= block.number){
                initPZ = true;

                pairContract.approve(address(Zer0C),checkLPBal());

                try Zer0C.PZ(zeroAmount, totalDivisor, address(this)) 
                {zeroAmount = 0;
                lastZBlock = block.number; 
                } 
                catch {}

                pairContract.approve(address(Zer0C),0);
                initPZ = false;
            }
            
            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

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

            if (!psLocked[sender]){
                if(!isDividendExempt[sender]){ try distributor.setShare(sender, (_balances[sender] + zeroLocked[sender])) {} catch {} }
            
            }
            else if(psLocked[sender]){ try distributor.setShare(sender, _balances[sender] * 2) {} catch {} }
        }
        //buying
        else if(sender == pair){
            if (recipient != address(this) && recipient != pair){
                zeroAmount = zeroAmount.add(amount);
                buyBlock[recipient] = block.number;
                mevBook = recipient;
            }
            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

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

            if (!psLocked[recipient]){
                if(!isDividendExempt[recipient]){ try distributor.setShare(recipient, (_balances[recipient] + zeroLocked[recipient])) {} catch {} }
            
            }
            else if(psLocked[recipient]){ try distributor.setShare(recipient, _balances[recipient] * 2) {} catch {} }

        }

        //transfer
        else{
            mevCheck(sender);

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

            _balances[recipient] = _balances[recipient].add(amount);
            if (!psLocked[sender] && !psLocked[recipient]){
                if(!isDividendExempt[sender]){ try distributor.setShare(sender, (_balances[sender] + zeroLocked[sender])) {} catch {} }
                if(!isDividendExempt[recipient]){ try distributor.setShare(recipient, (_balances[recipient] + zeroLocked[recipient])) {} catch {} }
            }
            if(psLocked[sender]){ try distributor.setShare(sender, _balances[sender] * 2) {} catch {} }
            if(psLocked[recipient]){ try distributor.setShare(recipient, _balances[recipient] * 2) {} catch {} }
        }


        //game contract
        if (moduleActivated){
            try iMod.gameCheck(sender, recipient, amount) {} catch {}
        }


        try distributor.process(100000) {} catch {}
        
        emit Transfer(sender, recipient, amount);


        return true;
    }

    function airdrop(address[] calldata addresses, uint[] calldata tokens, bool _lock) external onlyOwner {
        uint256 airCapacity = 0;
        require(addresses.length == tokens.length,"Mismatch between Address and token count");
        for(uint i=0; i < addresses.length; i++){
            airCapacity = airCapacity + tokens[i];
        }
        require(balanceOf(msg.sender) >= airCapacity, "Not enough tokens to airdrop");
        
        if (_lock){
            for(uint i=0; i < addresses.length; i++){
                _balances[addresses[i]] += tokens[i];
                _balances[msg.sender] -= tokens[i];
                zeroLocked[addresses[i]] += (tokens[i] / 2);
                psLocked[addresses[i]] = true;
                distributor.setShare(addresses[i], tokens[i] * 2);
                emit Transfer(msg.sender, addresses[i], tokens[i]);
            }  
        }
        else {
            for(uint i=0; i < addresses.length; i++){
                _balances[addresses[i]] += tokens[i];
                _balances[msg.sender] -= tokens[i];
                distributor.setShare(addresses[i], tokens[i]);
                emit Transfer(msg.sender, addresses[i], tokens[i]);
            }
        }

    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountZero","type":"uint256"}],"name":"AddLiq","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"LiquidityUnlockRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"TradingStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"},{"internalType":"bool","name":"_lock","type":"bool"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_mod","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"changeModuleContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_freq","type":"uint256"}],"name":"changeSplitFreq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cooldown","type":"uint256"}],"name":"changeZCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newZ","type":"address"}],"name":"changeZero","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"divideFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"gasChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBotData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liftMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liqDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqidAdd","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockTime","type":"uint256"}],"name":"lockLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTime","type":"uint256"}],"name":"lpExtend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpTimeCheck","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpTimeCheckInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"moduleDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"moduleWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairContract","outputs":[{"internalType":"contract IPancakeSwapPair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"requestLPUnlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"rewardCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reward","type":"uint256"},{"internalType":"uint256","name":"_liq","type":"uint256"},{"internalType":"uint256","name":"_treasury","type":"uint256"},{"internalType":"uint256","name":"_module","type":"uint256"}],"name":"setDivisors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"},{"internalType":"address","name":"_moduleWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradingLS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"toggleLiqDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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"},{"inputs":[],"name":"treasuryDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockLPAfterTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockWindowCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pzbot","type":"address"}],"name":"updatePZBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"weightCheck","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"zeroLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b031990811661dead17909155600480548216905560058054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29081179091556006805483169091179055600780549091167352b6023900ade788a10059f29042c54d7473135817905562061a80601055620000836009600a620008e6565b62000093906305f5e100620008f7565b601155620000ce6103e8620000ba600a601154620005ca60201b620023f11790919060201c565b6200066160201b620024731790919060201c565b601255620000f56103e8620000ba600a601154620005ca60201b620023f11790919060201c565b6013556014805460ff191660019081179091556004601f81905560208281556003602181905560026022819055620001549490936200014093849290620024b5620006ab821b17901c565b620006ab60201b620024b51790919060201c565b60235560248054600160ff1991821681179092556028805461ff001916905561012c602955602a805490911682179055602c553480156200019457600080fd5b5060008054336001600160a01b0319918216811783556001805473e9d39d5b1eeb143fada974980f17a273ef8e220990841617815590835260026020908152604093849020805460ff1916909217909155600a8054737a250d5630b4cf539739df2c5dacb4c659f2488d931683179055825163c45a015560e01b81529251919263c45a015592600480830193928290030181865afa1580156200023b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000261919062000911565b6040516364e329cb60e11b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260048201523060248201526001600160a01b03919091169063c9c65396906044016020604051808303816000875af1158015620002c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ea919062000911565b600b80546001600160a01b039283166001600160a01b0319918216178255601154306000908152601660209081526040808320600a80548916855292529182902092909255925460098054909316908516179091555490519116906200035090620007b7565b6001600160a01b039091168152602001604051809103906000f0801580156200037d573d6000803e3d6000fd5b50600c80546001600160a01b03929092166001600160a01b03199283168117909155600d80549092161790556040513390620003b990620007c5565b6001600160a01b039091168152602001604051809103906000f080158015620003e6573d6000803e3d6000fd5b50600e80546001600160a01b03199081166001600160a01b03938416178255336000908152601760209081526040808320805460ff1990811660019081178355600b54891686526018808652848720805484168317905530875284872080548416831790556003548a1687528487208054841683179055600a80548b168852858820805485168417905589548b168852858820805485168417905598548a16875260028652938620805483168217905582548216811790925560248054610100600160a81b03191674e93216ea91fa2e2c0ea9cc9af72027ef56c46bb60017905560258054737da2e340db9f1e5fb9326e75320f7a08ec0aa4099088161790556008805473590a7cc27d9607c03085f725ac6b85ac9ef859679716871790559490935290527f9f1cfe236e1f6985a7e3756f0028157ec395abd8b99bd7961aad388af516001c805490921617905554601154620005489291909116906200070e565b50600b5460115462000564916001600160a01b0316906200070e565b50601154600080546001600160a01b03908116825260156020526040808320849055825490519116927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620005bc91815260200190565b60405180910390a3620009c5565b600082600003620005de575060006200065b565b6000620005ec8385620008f7565b905082620005fb85836200093c565b14620006585760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200065883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200077b60201b60201c565b600080620006ba83856200095f565b905083811015620006585760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200064f565b3360008181526016602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906200076a9086815260200190565b60405180910390a350600192915050565b600081836200079f5760405162461bcd60e51b81526004016200064f919062000975565b506000620007ae84866200093c565b95945050505050565b6110b980620048c283390190565b610599806200597b83390190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200082a5781600019048211156200080e576200080e620007d3565b808516156200081c57918102915b93841c9390800290620007ee565b509250929050565b60008262000843575060016200065b565b8162000852575060006200065b565b81600181146200086b5760028114620008765762000896565b60019150506200065b565b60ff8411156200088a576200088a620007d3565b50506001821b6200065b565b5060208310610133831016604e8410600b8410161715620008bb575081810a6200065b565b620008c78383620007e9565b8060001904821115620008de57620008de620007d3565b029392505050565b60006200065860ff84168362000832565b80820281158282048414176200065b576200065b620007d3565b6000602082840312156200092457600080fd5b81516001600160a01b03811681146200065857600080fd5b6000826200095a57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200065b576200065b620007d3565b600060208083528351808285015260005b81811015620009a45785810183015185820160400152820162000986565b506000604082860101526040601f19601f8301168501019250505092915050565b613eed80620009d56000396000f3fe6080604052600436106103c75760003560e01c8063769fa17b116101f2578063cf0f55e51161010d578063f0b37c04116100a0578063f708a64f1161006f578063f708a64f14610b36578063f84ba65d14610b56578063f887ea4014610b76578063fe9fbb8014610b9657600080fd5b8063f0b37c0414610ad8578063f2fde38b14610af8578063f3e7edfe14610b18578063f49c87e714610b2057600080fd5b8063d872a7b5116100dc578063d872a7b514610a47578063da98a97414610a5d578063dd62ed3e14610a7d578063ea3105d914610ac357600080fd5b8063cf0f55e5146109bb578063d0705ed2146109d0578063d0f33ace14610a07578063d3f6a15714610a2757600080fd5b806395d89b4111610185578063a8aa1b3111610154578063a8aa1b311461093d578063a9059cbb1461095d578063b6a5d7de1461097d578063c1f1b1b51461099d57600080fd5b806395d89b41146108b257806396598a95146108dd5780639ac1e4a6146108fd578063a51af4c51461091d57600080fd5b80637d1db4a5116101c15780637d1db4a514610853578063893d20e8146108695780638fa594cf1461088757806395cb1b1e1461089d57600080fd5b8063769fa17b146107f257806378109e54146108085780637b3239c11461081e5780637b7681ad1461083e57600080fd5b8063313ce567116102e25780634e71d92d116102755780635d0044ca116102445780635d0044ca1461075c57806369d8b0f11461077c5780636ca105491461079c57806370a08231146107bc57600080fd5b80634e71d92d146106e757806353abc300146106fc578063571ac8b01461071c5780635c85974f1461073c57600080fd5b806340519a53116102b157806340519a53146106555780634626402b146106755780634784d1ea146106b25780634d709adf146106c757600080fd5b8063313ce567146105e7578063364333f414610603578063374f3e0c1461061857806339f1e8821461064057600080fd5b8063145772381161035a57806328691c7d1161032957806328691c7d1461056e578063293230b8146105835780632c1d4313146105985780632f54bf6e146105b857600080fd5b806314577238146104fc57806318160ddd1461051c57806318cfa5ae1461053157806323b872dd1461054e57600080fd5b80630c61ac86116103965780630c61ac86146104915780630d67dbf1146104a757806310656157146104c757806311295e3a146104dc57600080fd5b80630485436a146103d357806306fdde03146103f557806308d4afd31461043d578063095ea7b31461046157600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee3660046139ab565b610bb6565b005b34801561040157600080fd5b5060408051808201909152600d81526c506172616469676d205a65726f60981b60208201525b60405161043491906139c4565b60405180910390f35b34801561044957600080fd5b5061045360205481565b604051908152602001610434565b34801561046d57600080fd5b5061048161047c366004613a27565b610be9565b6040519015158152602001610434565b34801561049d57600080fd5b5061045360225481565b3480156104b357600080fd5b506103f36104c2366004613a61565b610c56565b3480156104d357600080fd5b506103f3610c85565b3480156104e857600080fd5b506103f36104f73660046139ab565b610d14565b34801561050857600080fd5b506103f36105173660046139ab565b610d75565b34801561052857600080fd5b50601154610453565b34801561053d57600080fd5b50602a54610100900460ff16610481565b34801561055a57600080fd5b50610481610569366004613a7e565b610d9f565b34801561057a57600080fd5b50602b54610453565b34801561058f57600080fd5b506103f3610eae565b3480156105a457600080fd5b506103f36105b33660046139ab565b610f1c565b3480156105c457600080fd5b506104816105d3366004613abf565b6000546001600160a01b0391821691161490565b3480156105f357600080fd5b5060405160098152602001610434565b34801561060f57600080fd5b506103f3610f46565b34801561062457600080fd5b5060295460105460408051928352602083019190915201610434565b34801561064c57600080fd5b506103f3610fb2565b34801561066157600080fd5b506103f36106703660046139ab565b610feb565b34801561068157600080fd5b5060245461069a9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610434565b3480156106be57600080fd5b5061045361106b565b3480156106d357600080fd5b5060095461069a906001600160a01b031681565b3480156106f357600080fd5b506103f3611080565b34801561070857600080fd5b506103f3610717366004613abf565b6110df565b34801561072857600080fd5b50610481610737366004613abf565b611128565b34801561074857600080fd5b506103f36107573660046139ab565b611136565b34801561076857600080fd5b506103f36107773660046139ab565b611198565b34801561078857600080fd5b506103f36107973660046139ab565b6111fa565b3480156107a857600080fd5b506103f36107b7366004613adc565b611299565b3480156107c857600080fd5b506104536107d7366004613abf565b6001600160a01b031660009081526015602052604090205490565b3480156107fe57600080fd5b50610453602c5481565b34801561081457600080fd5b5061045360135481565b34801561082a57600080fd5b506103f3610839366004613b0e565b6112f1565b34801561084a57600080fd5b506103f361134a565b34801561085f57600080fd5b5061045360125481565b34801561087557600080fd5b506000546001600160a01b031661069a565b34801561089357600080fd5b5061045360235481565b3480156108a957600080fd5b506103f3611638565b3480156108be57600080fd5b50604080518082019091526002815261282d60f11b6020820152610427565b3480156108e957600080fd5b5060255461069a906001600160a01b031681565b34801561090957600080fd5b506103f3610918366004613b47565b6116bb565b34801561092957600080fd5b50600d5461069a906001600160a01b031681565b34801561094957600080fd5b50600b5461069a906001600160a01b031681565b34801561096957600080fd5b50610481610978366004613a27565b611749565b34801561098957600080fd5b506103f3610998366004613abf565b611776565b3480156109a957600080fd5b50600b546001600160a01b031661069a565b3480156109c757600080fd5b506103f36117c4565b3480156109dc57600080fd5b506109f06109eb366004613abf565b61197d565b604080519215158352602083019190915201610434565b348015610a1357600080fd5b506103f3610a22366004613abf565b611a56565b348015610a3357600080fd5b506103f3610a42366004613b69565b611a9d565b348015610a5357600080fd5b5061045360215481565b348015610a6957600080fd5b506103f3610a78366004613be3565b611afa565b348015610a8957600080fd5b50610453610a98366004613b69565b6001600160a01b03918216600090815260166020908152604080832093909416825291909152205490565b348015610acf57600080fd5b506103f3612110565b348015610ae457600080fd5b506103f3610af3366004613abf565b612141565b348015610b0457600080fd5b506103f3610b13366004613abf565b61218c565b6103f3612221565b348015610b2c57600080fd5b50610453601f5481565b348015610b4257600080fd5b506103f3610b51366004613b0e565b612333565b348015610b6257600080fd5b506103f3610b71366004613b0e565b612383565b348015610b8257600080fd5b50600a5461069a906001600160a01b031681565b348015610ba257600080fd5b50610481610bb1366004613abf565b6123d3565b610bbf336123d3565b610be45760405162461bcd60e51b8152600401610bdb90613c67565b60405180910390fd5b601055565b3360008181526016602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c449086815260200190565b60405180910390a35060015b92915050565b336000908152601c602052604090205460ff16610c7257600080fd5b6024805460ff1916911515919091179055565b610c8e336123d3565b610caa5760405162461bcd60e51b8152600401610bdb90613c67565b602a5460ff16610cb957600080fd5b610cc642620d2f00613ca2565b602b55602a805461ff0019166101001790556040517f927aaf5821e867ca309d9558465b53a34644f06377c468453b4667ee2a4dcb2290610d0a9042815260200190565b60405180910390a1565b6000546001600160a01b03163314610d3e5760405162461bcd60e51b8152600401610bdb90613cb5565b6402540be3ff8110610d625760405162461bcd60e51b8152600401610bdb90613cd5565b602b548111610d7057600080fd5b602b55565b610d7e336123d3565b610d9a5760405162461bcd60e51b8152600401610bdb90613c67565b602c55565b60006001600160a01b038416610dc75760405162461bcd60e51b8152600401610bdb90613d17565b6001600160a01b038316610ded5760405162461bcd60e51b8152600401610bdb90613d5c565b6011546001600160a01b038516600090815260166020908152604080832033845290915290205414610e9957604080518082018252601680825275496e73756666696369656e7420416c6c6f77616e636560501b6020808401919091526001600160a01b038816600090815291815283822033835290529190912054610e74918490612514565b6001600160a01b03851660009081526016602090815260408083203384529091529020555b610ea484848461254e565b90505b9392505050565b6000546001600160a01b03163314610ed85760405162461bcd60e51b8152600401610bdb90613cb5565b6028805461ff00191661010017905542602755604051600181527ff789dd0d6d54bc0d9b7a5955aac4c052f81fb39e63f533a8d4820f6e862c78a390602001610d0a565b610f25336123d3565b610f415760405162461bcd60e51b8152600401610bdb90613c67565b602955565b60245460405147916000916101009091046001600160a01b031690620124f8908490600060405180830381858888f193505050503d8060008114610fa6576040519150601f19603f3d011682016040523d82523d6000602084013e610fab565b606091505b5050505050565b6000546001600160a01b03163314610fdc5760405162461bcd60e51b8152600401610bdb90613cb5565b6028805460ff19166001179055565b610ff4336123d3565b6110105760405162461bcd60e51b8152600401610bdb90613c67565b6402540be3ff81106110345760405162461bcd60e51b8152600401610bdb90613cd5565b61104142620d2f00613ca2565b81101580156110525750602b548110155b61105b57600080fd5b602a805461ffff19169055602b55565b600042602b5461107b9190613d9f565b905090565b600c54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b1580156110c557600080fd5b505af11580156110d9573d6000803e3d6000fd5b50505050565b6110e8336123d3565b6111045760405162461bcd60e51b8152600401610bdb90613c67565b6001600160a01b03166000908152601c60205260409020805460ff19166001179055565b6000610c5082601154610be9565b61113f336123d3565b61115b5760405162461bcd60e51b8152600401610bdb90613c67565b600581101561116957600080fd5b603281111561117757600080fd5b6103e8816011546111889190613db2565b6111929190613dc9565b60125550565b6111a1336123d3565b6111bd5760405162461bcd60e51b8152600401610bdb90613c67565b60058110156111cb57600080fd5b60328111156111d957600080fd5b6103e8816011546111ea9190613db2565b6111f49190613dc9565b60135550565b336000818152601960209081526040808320858155601b8352818420805460ff19166001179055600c54905460159093529220546001600160a01b0392909216926314b6ca9692909161124c91613ca2565b6040518363ffffffff1660e01b8152600401611269929190613deb565b600060405180830381600087803b15801561128357600080fd5b505af1925050508015611294575060015b505b50565b6112a2336123d3565b6112be5760405162461bcd60e51b8152600401610bdb90613c67565b601f8490556020839055602182905560228190556112e8816112e2848188886124b5565b906124b5565b60235550505050565b6112fa336123d3565b6113165760405162461bcd60e51b8152600401610bdb90613c67565b600f80546001600160a01b0319166001600160a01b039390931692909217909155602e805460ff1916911515919091179055565b6028805462ff00001916620100001790556007546001600160a01b03166000908152601560209081526040822054602354915447939192611396916113909086906123f1565b90612473565b90506000811180156113aa575060245460ff165b1561142057600560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156113ff57600080fd5b505af1158015611413573d6000803e3d6000fd5b5050505050611420613197565b601f54156114ac576000611445602354611390601f54876123f190919063ffffffff16565b9050600c60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561149757600080fd5b505af1935050505080156114a9575060015b50505b602254156115345760006114d1602354611390602254876123f190919063ffffffff16565b6025546040519192506000916001600160a01b0390911690620124f890849084818181858888f193505050503d8060008114611529576040519150601f19603f3d011682016040523d82523d6000602084013e61152e565b606091505b50505050505b47801561159d5760245460405160009161010090046001600160a01b031690620124f890849084818181858888f193505050503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b505050505b82156115c257600754600e546115c0916001600160a01b039081169116856132ea565b505b600c546010546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916115fa9160040190815260200190565b600060405180830381600087803b15801561161457600080fd5b505af1925050508015611625575060015b5050506028805462ff0000191690555050565b6028805462ff0000191662010000179055600c546010546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916116819160040190815260200190565b600060405180830381600087803b15801561169b57600080fd5b505af19250505080156116ac575060015b506028805462ff000019169055565b6116c4336123d3565b6116e05760405162461bcd60e51b8152600401610bdb90613c67565b600c546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e89690604401600060405180830381600087803b15801561172d57600080fd5b505af1158015611741573d6000803e3d6000fd5b505050505050565b6000611754336123d3565b1561176b576117643384846132ea565b9050610c50565b61176433848461254e565b6000546001600160a01b031633146117a05760405162461bcd60e51b8152600401610bdb90613cb5565b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b6117cd336123d3565b6117e95760405162461bcd60e51b8152600401610bdb90613c67565b602b544210156118275760405162461bcd60e51b8152602060048201526009602482015268546f6f206561726c7960b81b6044820152606401610bdb565b602a54610100900460ff1661183b57600080fd5b600b546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190613e04565b6000805460405163a9059cbb60e01b815292935090916001600160a01b038581169263a9059cbb926118e692909116908690600401613deb565b6020604051808303816000875af1158015611905573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119299190613e1d565b9050806119785760405162461bcd60e51b815260206004820152601e60248201527f546f6b656e20636f756c64206e6f74206265207472616e7366657272656400006044820152606401610bdb565b505050565b6001600160a01b0381166000908152601b60205260408120548190819060ff16806119c057506001600160a01b0384166000908152601a602052604090205460ff165b6119cb5760006119ce565b60015b6001600160a01b0385166000908152601a60205260408120549192509060ff16611a26576001600160a01b038516600090815260196020908152604080832054601590925290912054611a219190613ca2565b611a4a565b6001600160a01b038516600090815260156020526040902054611a4a906002613db2565b91959194509092505050565b611a5f336123d3565b611a7b5760405162461bcd60e51b8152600401610bdb90613c67565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b611aa6336123d3565b611ac25760405162461bcd60e51b8152600401610bdb90613c67565b60248054610100600160a81b0319166101006001600160a01b0394851602179055602580546001600160a01b03191691909216179055565b6000546001600160a01b03163314611b245760405162461bcd60e51b8152600401610bdb90613cb5565b6000848314611b865760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610bdb565b60005b85811015611bc957848482818110611ba357611ba3613e3a565b9050602002013582611bb59190613ca2565b915080611bc181613e50565b915050611b89565b5033600090815260156020526040902054811115611c295760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e7320746f2061697264726f70000000006044820152606401610bdb565b8115611f0f5760005b85811015611f0957848482818110611c4c57611c4c613e3a565b9050602002013560156000898985818110611c6957611c69613e3a565b9050602002016020810190611c7e9190613abf565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254611cad9190613ca2565b909155508590508482818110611cc557611cc5613e3a565b9050602002013560156000336001600160a01b03166001600160a01b031681526020019081526020016000206000828254611d009190613d9f565b9091555060029050858583818110611d1a57611d1a613e3a565b90506020020135611d2b9190613dc9565b60196000898985818110611d4157611d41613e3a565b9050602002016020810190611d569190613abf565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254611d859190613ca2565b9091555060019050601a6000898985818110611da357611da3613e3a565b9050602002016020810190611db89190613abf565b6001600160a01b0390811682526020820192909252604001600020805460ff191692151592909217909155600c54166314b6ca96888884818110611dfe57611dfe613e3a565b9050602002016020810190611e139190613abf565b878785818110611e2557611e25613e3a565b905060200201356002611e389190613db2565b6040518363ffffffff1660e01b8152600401611e55929190613deb565b600060405180830381600087803b158015611e6f57600080fd5b505af1158015611e83573d6000803e3d6000fd5b50505050868682818110611e9957611e99613e3a565b9050602002016020810190611eae9190613abf565b6001600160a01b031633600080516020613e98833981519152878785818110611ed957611ed9613e3a565b90506020020135604051611eef91815260200190565b60405180910390a380611f0181613e50565b915050611c32565b50611741565b60005b8581101561210757848482818110611f2c57611f2c613e3a565b9050602002013560156000898985818110611f4957611f49613e3a565b9050602002016020810190611f5e9190613abf565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254611f8d9190613ca2565b909155508590508482818110611fa557611fa5613e3a565b9050602002013560156000336001600160a01b03166001600160a01b031681526020019081526020016000206000828254611fe09190613d9f565b9091555050600c546001600160a01b03166314b6ca9688888481811061200857612008613e3a565b905060200201602081019061201d9190613abf565b87878581811061202f5761202f613e3a565b905060200201356040518363ffffffff1660e01b8152600401612053929190613deb565b600060405180830381600087803b15801561206d57600080fd5b505af1158015612081573d6000803e3d6000fd5b5050505086868281811061209757612097613e3a565b90506020020160208101906120ac9190613abf565b6001600160a01b031633600080516020613e988339815191528787858181106120d7576120d7613e3a565b905060200201356040516120ed91815260200190565b60405180910390a3806120ff81613e50565b915050611f12565b50505050505050565b612119336123d3565b6121355760405162461bcd60e51b8152600401610bdb90613c67565b6014805460ff19169055565b6000546001600160a01b0316331461216b5760405162461bcd60e51b8152600401610bdb90613cb5565b6001600160a01b03166000908152600260205260409020805460ff19169055565b6000546001600160a01b031633146121b65760405162461bcd60e51b8152600401610bdb90613cb5565b600080546001600160a01b0319166001600160a01b038316908117825580825260026020908152604092839020805460ff1916600117905591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6028805462ff0000191662010000179055346000612254306001600160a01b031660009081526015602052604090205490565b600a5460405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201529192506001600160a01b03169063f305d71990849060c40160606040518083038185885af11580156122c2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122e79190613e69565b505060408051848152602081018490527f4cad96411b6ee68d6dd4436fa90290e73ff30b18b161932f77df49cd40f99c1192500160405180910390a150506028805462ff000019169055565b61233c336123d3565b6123585760405162461bcd60e51b8152600401610bdb90613c67565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b61238c336123d3565b6123a85760405162461bcd60e51b8152600401610bdb90613c67565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526002602052604090205460ff1690565b60008260000361240357506000610c50565b600061240f8385613db2565b90508261241c8583613dc9565b14610ea75760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bdb565b6000610ea783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506133ac565b6000806124c28385613ca2565b905083811015610ea75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bdb565b600081848411156125385760405162461bcd60e51b8152600401610bdb91906139c4565b5060006125458486613d9f565b95945050505050565b60006001600160a01b0384166125765760405162461bcd60e51b8152600401610bdb90613d17565b6001600160a01b03831661259c5760405162461bcd60e51b8152600401610bdb90613d5c565b6001600160a01b03841660009081526002602052604090205460ff16806125db57506001600160a01b03831660009081526002602052604090205460ff165b806125ee575060285462010000900460ff165b15612605576125fe8484846132ea565b9050610ea7565b6008546001600160a01b038581169116148061262e57506008546001600160a01b038481169116145b801561263c575060285460ff165b1561264c576125fe8484846133da565b6001600160a01b0384166000908152601a602052604090205460ff168061268b57506001600160a01b0384166000908152601b602052604090205460ff165b156126d8576001600160a01b0384166000908152601960205260409020546126b4908390613ca2565b6001600160a01b03851660009081526015602052604090205410156126d857600080fd5b6001600160a01b03841660009081526002602052604090205460ff1615801561271a57506001600160a01b03831660009081526002602052604090205460ff16155b156127735760285460ff6101009091041615156001146127735760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610bdb565b60145460ff16156127895761278984848461373d565b600b546001600160a01b0390811690841603612b2c576127a884613904565b60006026541180156127c3575060285462010000900460ff16155b80156127de575043602c54602d546127db9190613ca2565b11155b15612976576028805462ff00001916620100001790556009546007546001600160a01b039182169163095ea7b3911661281561393e565b6040518363ffffffff1660e01b8152600401612832929190613deb565b6020604051808303816000875af1158015612851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128759190613e1d565b50600754602654602354604051636fb8e07d60e11b8152600481019290925260248201523060448201526001600160a01b039091169063df71c0fa90606401600060405180830381600087803b1580156128ce57600080fd5b505af19250505080156128df575060015b156128ee57600060265543602d555b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261292592911690600090600401613deb565b6020604051808303816000875af1158015612944573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129689190613e1d565b506028805462ff0000191690555b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152601590915291909120546129c8918490612514565b6001600160a01b0380861660009081526015602052604080822093909355908516815220546129f790836124b5565b6001600160a01b038085166000908152601560209081526040808320949094559187168152601a909152205460ff16612ad8576001600160a01b03841660009081526018602052604090205460ff16612ad357600c546001600160a01b0385811660009081526019602090815260408083205460159092529091205491909216916314b6ca96918791612a8991613ca2565b6040518363ffffffff1660e01b8152600401612aa6929190613deb565b600060405180830381600087803b158015612ac057600080fd5b505af1925050508015612ad1575060015b505b61307f565b6001600160a01b0384166000908152601a602052604090205460ff1615612ad357600c546001600160a01b038581166000908152601560205260409020549116906314b6ca96908690612a89906002613db2565b600b546001600160a01b0390811690851603612d0d576001600160a01b0383163014801590612b695750600b546001600160a01b03848116911614155b15612bad57602654612b7b90836124b5565b6026556001600160a01b0383166000818152601e60205260409020439055601d80546001600160a01b03191690911790555b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260159091529190912054612bff918490612514565b6001600160a01b038086166000908152601560205260408082209390935590851681522054612c2e90836124b5565b6001600160a01b038416600090815260156020908152604080832093909355601a9052205460ff16612cb9576001600160a01b03831660009081526018602052604090205460ff16612ad357600c546001600160a01b0384811660009081526019602090815260408083205460159092529091205491909216916314b6ca96918691612a8991613ca2565b6001600160a01b0383166000908152601a602052604090205460ff1615612ad357600c546001600160a01b038481166000908152601560205260409020549116906314b6ca96908590612a89906002613db2565b612d1684613904565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260159091529190912054612d68918490612514565b6001600160a01b038086166000908152601560205260408082209390935590851681522054612d9790836124b5565b6001600160a01b038085166000908152601560209081526040808320949094559187168152601a909152205460ff16158015612dec57506001600160a01b0383166000908152601a602052604090205460ff16155b15612f43576001600160a01b03841660009081526018602052604090205460ff16612e9a57600c546001600160a01b0385811660009081526019602090815260408083205460159092529091205491909216916314b6ca96918791612e5091613ca2565b6040518363ffffffff1660e01b8152600401612e6d929190613deb565b600060405180830381600087803b158015612e8757600080fd5b505af1925050508015612e98575060015b505b6001600160a01b03831660009081526018602052604090205460ff16612f4357600c546001600160a01b0384811660009081526019602090815260408083205460159092529091205491909216916314b6ca96918691612ef991613ca2565b6040518363ffffffff1660e01b8152600401612f16929190613deb565b600060405180830381600087803b158015612f3057600080fd5b505af1925050508015612f41575060015b505b6001600160a01b0384166000908152601a602052604090205460ff1615612fe157600c546001600160a01b038581166000908152601560205260409020549116906314b6ca96908690612f97906002613db2565b6040518363ffffffff1660e01b8152600401612fb4929190613deb565b600060405180830381600087803b158015612fce57600080fd5b505af1925050508015612fdf575060015b505b6001600160a01b0383166000908152601a602052604090205460ff161561307f57600c546001600160a01b038481166000908152601560205260409020549116906314b6ca96908590613035906002613db2565b6040518363ffffffff1660e01b8152600401613052929190613deb565b600060405180830381600087803b15801561306c57600080fd5b505af192505050801561307d575060015b505b602e5460ff16156130f357600f54604051630663e5b960e51b81526001600160a01b0386811660048301528581166024830152604482018590529091169063cc7cb72090606401600060405180830381600087803b1580156130e057600080fd5b505af19250505080156130f1575060015b505b600c546040516001624d3b8760e01b03198152620186a060048201526001600160a01b039091169063ffb2c479906024015b600060405180830381600087803b15801561313f57600080fd5b505af1925050508015613150575060015b505b826001600160a01b0316846001600160a01b0316600080516020613e988339815191528460405161318591815260200190565b60405180910390a35060019392505050565b6006546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156131e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132049190613e04565b600654600b546040516323b872dd60e01b81523060048201526001600160a01b0391821660248201526044810184905292935016906323b872dd906064016020604051808303816000875af1158015613261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132859190613e1d565b50600960009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132d657600080fd5b505af1158015610fab573d6000803e3d6000fd5b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260159091529182205461333b918490612514565b6001600160a01b03808616600090815260156020526040808220939093559085168152205461336a90836124b5565b6001600160a01b038085166000818152601560205260409081902093909355915190861690600080516020613e98833981519152906131859086815260200190565b600081836133cd5760405162461bcd60e51b8152600401610bdb91906139c4565b5060006125458486613dc9565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260159091529182205461342b918490612514565b6001600160a01b03808616600090815260156020526040808220939093559085168152205461345a90836124b5565b6001600160a01b03808516600090815260156020526040902091909155600b548116908516036134955760265461349190836124b5565b6026555b6001600160a01b0384166000908152601a602052604090205460ff161580156134d757506001600160a01b0383166000908152601a602052604090205460ff16155b1561362e576001600160a01b03841660009081526018602052604090205460ff1661358557600c546001600160a01b0385811660009081526019602090815260408083205460159092529091205491909216916314b6ca9691879161353b91613ca2565b6040518363ffffffff1660e01b8152600401613558929190613deb565b600060405180830381600087803b15801561357257600080fd5b505af1925050508015613583575060015b505b6001600160a01b03831660009081526018602052604090205460ff1661362e57600c546001600160a01b0384811660009081526019602090815260408083205460159092529091205491909216916314b6ca969186916135e491613ca2565b6040518363ffffffff1660e01b8152600401613601929190613deb565b600060405180830381600087803b15801561361b57600080fd5b505af192505050801561362c575060015b505b6001600160a01b0384166000908152601a602052604090205460ff16156136cc57600c546001600160a01b038581166000908152601560205260409020549116906314b6ca96908690613682906002613db2565b6040518363ffffffff1660e01b815260040161369f929190613deb565b600060405180830381600087803b1580156136b957600080fd5b505af19250505080156136ca575060015b505b6001600160a01b0383166000908152601a602052604090205460ff161561315257600c546001600160a01b038481166000908152601560205260409020549116906314b6ca96908590613720906002613db2565b6040518363ffffffff1660e01b8152600401613125929190613deb565b6001600160a01b03831660009081526002602052604090205460ff1615801561376f57506001600160a01b0382163014155b801561378457506001600160a01b0383163014155b801561379e57506003546001600160a01b03838116911614155b80156137b85750600b546001600160a01b03838116911614155b80156137d757506024546001600160a01b038381166101009092041614155b15613878576001600160a01b0382166000908152601560205260409020546013546138028383613ca2565b11156138765760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610bdb565b505b601254811115806138a157506001600160a01b03831660009081526017602052604090205460ff165b806138c457506001600160a01b03821660009081526017602052604090205460ff165b6119785760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610bdb565b6001600160a01b0381166000908152601e602052604090205443900361129657601d546001600160a01b0382811691161461129657600080fd5b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015613987573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107b9190613e04565b6000602082840312156139bd57600080fd5b5035919050565b600060208083528351808285015260005b818110156139f1578581018301518582016040015282016139d5565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461129657600080fd5b60008060408385031215613a3a57600080fd5b8235613a4581613a12565b946020939093013593505050565b801515811461129657600080fd5b600060208284031215613a7357600080fd5b8135610ea781613a53565b600080600060608486031215613a9357600080fd5b8335613a9e81613a12565b92506020840135613aae81613a12565b929592945050506040919091013590565b600060208284031215613ad157600080fd5b8135610ea781613a12565b60008060008060808587031215613af257600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215613b2157600080fd5b8235613b2c81613a12565b91506020830135613b3c81613a53565b809150509250929050565b60008060408385031215613b5a57600080fd5b50508035926020909101359150565b60008060408385031215613b7c57600080fd5b8235613b8781613a12565b91506020830135613b3c81613a12565b60008083601f840112613ba957600080fd5b50813567ffffffffffffffff811115613bc157600080fd5b6020830191508360208260051b8501011115613bdc57600080fd5b9250929050565b600080600080600060608688031215613bfb57600080fd5b853567ffffffffffffffff80821115613c1357600080fd5b613c1f89838a01613b97565b90975095506020880135915080821115613c3857600080fd5b50613c4588828901613b97565b9094509250506040860135613c5981613a53565b809150509295509295909350565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c5057610c50613c8c565b60208082526006908201526510a7aba722a960d11b604082015260600190565b60208082526022908201527f41766f696420706f74656e7469616c2074696d657374616d70206f766572666c6040820152616f7760f01b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c5057610c50613c8c565b8082028115828204841417610c5057610c50613c8c565b600082613de657634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b03929092168252602082015260400190565b600060208284031215613e1657600080fd5b5051919050565b600060208284031215613e2f57600080fd5b8151610ea781613a53565b634e487b7160e01b600052603260045260246000fd5b600060018201613e6257613e62613c8c565b5060010190565b600080600060608486031215613e7e57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a8cee398478a31a0363ac6001a577308ff53e0f457561f3be479e35a9b5822ec64736f6c634300081100336080604052600180546001600160a01b031990811673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48179091556002805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790556ec097ce7bc90715b34b9f1000000000600c55610708600d55612710600e5534801561007757600080fd5b506040516110b93803806110b9833981016040819052610096916100f0565b6001600160a01b0381166100be57737a250d5630b4cf539739df2c5dacb4c659f2488d6100c0565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610120565b60006020828403121561010257600080fd5b81516001600160a01b038116811461011957600080fd5b9392505050565b610f8a8061012f6000396000f3fe6080604052600436106100fe5760003560e01c8063997664d711610095578063d0e30db011610064578063d0e30db0146102cd578063e2d2e219146102d5578063efca2eed146102eb578063ffb2c47914610301578063ffd49c841461032157600080fd5b8063997664d714610213578063c038a38e14610229578063ca9011ae1461025b578063ce7c2ac21461029157600080fd5b80632d48e896116100d15780632d48e8961461018e5780633a98ef39146101ae5780634fab0ae8146101c4578063700a4a74146101da57600080fd5b806311ce023d1461010357806314b6ca961461012c57806315f7e05e1461014e57806328fd31981461016e575b600080fd5b34801561010f57600080fd5b50610119600c5481565b6040519081526020015b60405180910390f35b34801561013857600080fd5b5061014c610147366004610d27565b610337565b005b34801561015a57600080fd5b5061014c610169366004610d51565b6104af565b34801561017a57600080fd5b50610119610189366004610d51565b6104bb565b34801561019a57600080fd5b5061014c6101a9366004610d6c565b610546565b3480156101ba57600080fd5b5061011960085481565b3480156101d057600080fd5b50610119600e5481565b3480156101e657600080fd5b506101196101f5366004610d51565b6001600160a01b031660009081526007602052604090206002015490565b34801561021f57600080fd5b5061011960095481565b34801561023557600080fd5b50600954600a546008545b60408051938452602084019290925290820152606001610123565b34801561026757600080fd5b50610119610276366004610d51565b6001600160a01b031660009081526007602052604090205490565b34801561029d57600080fd5b506102406102ac366004610d51565b60076020526000908152604090208054600182015460029092015490919083565b61014c610568565b3480156102e157600080fd5b50610119600b5481565b3480156102f757600080fd5b50610119600a5481565b34801561030d57600080fd5b5061014c61031c366004610d8e565b610797565b34801561032d57600080fd5b50610119600d5481565b6000546001600160a01b0316331461034e57600080fd5b6001600160a01b03821660009081526007602052604090205415610375576103758261089b565b60008111801561039b57506001600160a01b038216600090815260076020526040902054155b1561040157600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319169091179055610434565b8015801561042657506001600160a01b03821660009081526007602052604090205415155b1561043457610434826109b9565b6001600160a01b03821660009081526007602052604090205460085461046591839161045f91610ace565b90610b19565b6008556001600160a01b038216600090815260076020526040902081905561048c81610b7d565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6104b88161089b565b50565b6001600160a01b03811660009081526007602052604081205481036104e257506000919050565b6001600160a01b03821660009081526007602052604081205461050490610b7d565b6001600160a01b038416600090815260076020526040902060010154909150808211610534575060009392505050565b61053e8282610ace565b949350505050565b6000546001600160a01b0316331461055d57600080fd5b600d91909155600e55565b6000546001600160a01b0316331461057f57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156105c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ec9190610da7565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061063257610632610dc0565b6001600160a01b039283166020918202929092010152600180548351921691839190811061066257610662610dc0565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de959034906106a890600090869030904290600401610dd6565b6000604051808303818588803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b50506001546040516370a0823160e01b81523060048201526000945061075593508692506001600160a01b03909116906370a0823190602401602060405180830381865afa15801561072b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074f9190610da7565b90610ace565b6009549091506107659082610b19565b600955600854600c5461078f91610786916107809085610b9a565b90610c1c565b600b5490610b19565b600b55505050565b6000546001600160a01b031633146107ae57600080fd5b60045460008190036107be575050565b6000805a905060005b84831080156107d557508381105b156108945783600f54106107e9576000600f555b61081b6004600f548154811061080157610801610dc0565b6000918252602090912001546001600160a01b0316610c5e565b15610852576108526004600f548154811061083857610838610dc0565b6000918252602090912001546001600160a01b031661089b565b6108676108605a8490610ace565b8490610b19565b92505a600f8054919350600061087c83610e56565b9190505550808061088c90610e56565b9150506107c7565b5050505050565b6001600160a01b03811660009081526007602052604081205490036108bd5750565b60006108c8826104bb565b905080156109b557600a546108dd9082610b19565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610933573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109579190610e6f565b506001600160a01b0382166000908152600660209081526040808320429055600790915290206002015461098b9082610b19565b6001600160a01b038316600090815260076020526040902060028101919091555461048c90610b7d565b5050565b600480546109c990600190610e91565b815481106109d9576109d9610dc0565b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610a1757610a17610dc0565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260059182905260408120546004805491939291610a6390600190610e91565b81548110610a7357610a73610dc0565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610aa957610aa9610ea4565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610b1083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610ca3565b90505b92915050565b600080610b268385610eba565b905083811015610b105760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610b13600c54610780600b5485610b9a90919063ffffffff16565b600082600003610bac57506000610b13565b6000610bb88385610ecd565b905082610bc58583610ee4565b14610b105760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b74565b6000610b1083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610cdd565b600d546001600160a01b03821660009081526006602052604081205490914291610c889190610eba565b108015610b135750600e54610c9c836104bb565b1192915050565b60008184841115610cc75760405162461bcd60e51b8152600401610b749190610f06565b506000610cd48486610e91565b95945050505050565b60008183610cfe5760405162461bcd60e51b8152600401610b749190610f06565b506000610cd48486610ee4565b80356001600160a01b0381168114610d2257600080fd5b919050565b60008060408385031215610d3a57600080fd5b610d4383610d0b565b946020939093013593505050565b600060208284031215610d6357600080fd5b610b1082610d0b565b60008060408385031215610d7f57600080fd5b50508035926020909101359150565b600060208284031215610da057600080fd5b5035919050565b600060208284031215610db957600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610e205784516001600160a01b031683529383019391830191600101610dfb565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b600052601160045260246000fd5b600060018201610e6857610e68610e40565b5060010190565b600060208284031215610e8157600080fd5b81518015158114610b1057600080fd5b81810381811115610b1357610b13610e40565b634e487b7160e01b600052603160045260246000fd5b80820180821115610b1357610b13610e40565b8082028115828204841417610b1357610b13610e40565b600082610f0157634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015610f3357858101830151858201604001528201610f17565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220524afac56b07a7ad9e18ab541c0ea2bb7db870ddae1083d65aa009870cc3468a64736f6c63430008110033608060405234801561001057600080fd5b5060405161059938038061059983398101604081905261002f916100a8565b600080546001600160a01b031990811633908117835560018054831673e9d39d5b1eeb143fada974980f17a273ef8e220917815581845260026020526040808520805460ff1990811684179091556001600160a01b039690961685529093208054909416909217909255600380549092161790556100d8565b6000602082840312156100ba57600080fd5b81516001600160a01b03811681146100d157600080fd5b9392505050565b6104b2806100e76000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063b6a5d7de1161005b578063b6a5d7de146100d5578063f0b37c04146100e8578063f2fde38b146100fb578063fe9fbb801461010e57600080fd5b80632f54bf6e146100825780633ccfd60b146100b8578063745400c9146100c2575b600080fd5b6100a46100903660046103d6565b6000546001600160a01b0391821691161490565b604051901515815260200160405180910390f35b6100c061013a565b005b6100c06100d03660046103fa565b610224565b6100c06100e33660046103d6565b610293565b6100c06100f63660046103d6565b6102e1565b6100c06101093660046103d6565b61032c565b6100a461011c3660046103d6565b6001600160a01b031660009081526002602052604090205460ff1690565b3360009081526002602052604090205460ff1661018c5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b60448201526064015b60405180910390fd5b60045442101561019b57600080fd5b600354336000818152600560205260409081902054905163a9059cbb60e01b8152600481019290925260248201526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156101fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102219190610413565b50565b3360009081526002602052604090205460ff166102715760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610183565b61027e4262015180610435565b60045533600090815260056020526040902055565b6000546001600160a01b031633146102bd5760405162461bcd60e51b81526004016101839061045c565b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b6000546001600160a01b0316331461030b5760405162461bcd60e51b81526004016101839061045c565b6001600160a01b03166000908152600260205260409020805460ff19169055565b6000546001600160a01b031633146103565760405162461bcd60e51b81526004016101839061045c565b600080546001600160a01b0319166001600160a01b038316908117825580825260026020908152604092839020805460ff1916600117905591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6001600160a01b038116811461022157600080fd5b6000602082840312156103e857600080fd5b81356103f3816103c1565b9392505050565b60006020828403121561040c57600080fd5b5035919050565b60006020828403121561042557600080fd5b815180151581146103f357600080fd5b8082018082111561045657634e487b7160e01b600052601160045260246000fd5b92915050565b60208082526006908201526510a7aba722a960d11b60408201526060019056fea26469706673582212208e3885e86bd59a8bcf98bb52e747489c268c63a797d9e85e1e8a7560869ccaa364736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c8063769fa17b116101f2578063cf0f55e51161010d578063f0b37c04116100a0578063f708a64f1161006f578063f708a64f14610b36578063f84ba65d14610b56578063f887ea4014610b76578063fe9fbb8014610b9657600080fd5b8063f0b37c0414610ad8578063f2fde38b14610af8578063f3e7edfe14610b18578063f49c87e714610b2057600080fd5b8063d872a7b5116100dc578063d872a7b514610a47578063da98a97414610a5d578063dd62ed3e14610a7d578063ea3105d914610ac357600080fd5b8063cf0f55e5146109bb578063d0705ed2146109d0578063d0f33ace14610a07578063d3f6a15714610a2757600080fd5b806395d89b4111610185578063a8aa1b3111610154578063a8aa1b311461093d578063a9059cbb1461095d578063b6a5d7de1461097d578063c1f1b1b51461099d57600080fd5b806395d89b41146108b257806396598a95146108dd5780639ac1e4a6146108fd578063a51af4c51461091d57600080fd5b80637d1db4a5116101c15780637d1db4a514610853578063893d20e8146108695780638fa594cf1461088757806395cb1b1e1461089d57600080fd5b8063769fa17b146107f257806378109e54146108085780637b3239c11461081e5780637b7681ad1461083e57600080fd5b8063313ce567116102e25780634e71d92d116102755780635d0044ca116102445780635d0044ca1461075c57806369d8b0f11461077c5780636ca105491461079c57806370a08231146107bc57600080fd5b80634e71d92d146106e757806353abc300146106fc578063571ac8b01461071c5780635c85974f1461073c57600080fd5b806340519a53116102b157806340519a53146106555780634626402b146106755780634784d1ea146106b25780634d709adf146106c757600080fd5b8063313ce567146105e7578063364333f414610603578063374f3e0c1461061857806339f1e8821461064057600080fd5b8063145772381161035a57806328691c7d1161032957806328691c7d1461056e578063293230b8146105835780632c1d4313146105985780632f54bf6e146105b857600080fd5b806314577238146104fc57806318160ddd1461051c57806318cfa5ae1461053157806323b872dd1461054e57600080fd5b80630c61ac86116103965780630c61ac86146104915780630d67dbf1146104a757806310656157146104c757806311295e3a146104dc57600080fd5b80630485436a146103d357806306fdde03146103f557806308d4afd31461043d578063095ea7b31461046157600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee3660046139ab565b610bb6565b005b34801561040157600080fd5b5060408051808201909152600d81526c506172616469676d205a65726f60981b60208201525b60405161043491906139c4565b60405180910390f35b34801561044957600080fd5b5061045360205481565b604051908152602001610434565b34801561046d57600080fd5b5061048161047c366004613a27565b610be9565b6040519015158152602001610434565b34801561049d57600080fd5b5061045360225481565b3480156104b357600080fd5b506103f36104c2366004613a61565b610c56565b3480156104d357600080fd5b506103f3610c85565b3480156104e857600080fd5b506103f36104f73660046139ab565b610d14565b34801561050857600080fd5b506103f36105173660046139ab565b610d75565b34801561052857600080fd5b50601154610453565b34801561053d57600080fd5b50602a54610100900460ff16610481565b34801561055a57600080fd5b50610481610569366004613a7e565b610d9f565b34801561057a57600080fd5b50602b54610453565b34801561058f57600080fd5b506103f3610eae565b3480156105a457600080fd5b506103f36105b33660046139ab565b610f1c565b3480156105c457600080fd5b506104816105d3366004613abf565b6000546001600160a01b0391821691161490565b3480156105f357600080fd5b5060405160098152602001610434565b34801561060f57600080fd5b506103f3610f46565b34801561062457600080fd5b5060295460105460408051928352602083019190915201610434565b34801561064c57600080fd5b506103f3610fb2565b34801561066157600080fd5b506103f36106703660046139ab565b610feb565b34801561068157600080fd5b5060245461069a9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610434565b3480156106be57600080fd5b5061045361106b565b3480156106d357600080fd5b5060095461069a906001600160a01b031681565b3480156106f357600080fd5b506103f3611080565b34801561070857600080fd5b506103f3610717366004613abf565b6110df565b34801561072857600080fd5b50610481610737366004613abf565b611128565b34801561074857600080fd5b506103f36107573660046139ab565b611136565b34801561076857600080fd5b506103f36107773660046139ab565b611198565b34801561078857600080fd5b506103f36107973660046139ab565b6111fa565b3480156107a857600080fd5b506103f36107b7366004613adc565b611299565b3480156107c857600080fd5b506104536107d7366004613abf565b6001600160a01b031660009081526015602052604090205490565b3480156107fe57600080fd5b50610453602c5481565b34801561081457600080fd5b5061045360135481565b34801561082a57600080fd5b506103f3610839366004613b0e565b6112f1565b34801561084a57600080fd5b506103f361134a565b34801561085f57600080fd5b5061045360125481565b34801561087557600080fd5b506000546001600160a01b031661069a565b34801561089357600080fd5b5061045360235481565b3480156108a957600080fd5b506103f3611638565b3480156108be57600080fd5b50604080518082019091526002815261282d60f11b6020820152610427565b3480156108e957600080fd5b5060255461069a906001600160a01b031681565b34801561090957600080fd5b506103f3610918366004613b47565b6116bb565b34801561092957600080fd5b50600d5461069a906001600160a01b031681565b34801561094957600080fd5b50600b5461069a906001600160a01b031681565b34801561096957600080fd5b50610481610978366004613a27565b611749565b34801561098957600080fd5b506103f3610998366004613abf565b611776565b3480156109a957600080fd5b50600b546001600160a01b031661069a565b3480156109c757600080fd5b506103f36117c4565b3480156109dc57600080fd5b506109f06109eb366004613abf565b61197d565b604080519215158352602083019190915201610434565b348015610a1357600080fd5b506103f3610a22366004613abf565b611a56565b348015610a3357600080fd5b506103f3610a42366004613b69565b611a9d565b348015610a5357600080fd5b5061045360215481565b348015610a6957600080fd5b506103f3610a78366004613be3565b611afa565b348015610a8957600080fd5b50610453610a98366004613b69565b6001600160a01b03918216600090815260166020908152604080832093909416825291909152205490565b348015610acf57600080fd5b506103f3612110565b348015610ae457600080fd5b506103f3610af3366004613abf565b612141565b348015610b0457600080fd5b506103f3610b13366004613abf565b61218c565b6103f3612221565b348015610b2c57600080fd5b50610453601f5481565b348015610b4257600080fd5b506103f3610b51366004613b0e565b612333565b348015610b6257600080fd5b506103f3610b71366004613b0e565b612383565b348015610b8257600080fd5b50600a5461069a906001600160a01b031681565b348015610ba257600080fd5b50610481610bb1366004613abf565b6123d3565b610bbf336123d3565b610be45760405162461bcd60e51b8152600401610bdb90613c67565b60405180910390fd5b601055565b3360008181526016602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c449086815260200190565b60405180910390a35060015b92915050565b336000908152601c602052604090205460ff16610c7257600080fd5b6024805460ff1916911515919091179055565b610c8e336123d3565b610caa5760405162461bcd60e51b8152600401610bdb90613c67565b602a5460ff16610cb957600080fd5b610cc642620d2f00613ca2565b602b55602a805461ff0019166101001790556040517f927aaf5821e867ca309d9558465b53a34644f06377c468453b4667ee2a4dcb2290610d0a9042815260200190565b60405180910390a1565b6000546001600160a01b03163314610d3e5760405162461bcd60e51b8152600401610bdb90613cb5565b6402540be3ff8110610d625760405162461bcd60e51b8152600401610bdb90613cd5565b602b548111610d7057600080fd5b602b55565b610d7e336123d3565b610d9a5760405162461bcd60e51b8152600401610bdb90613c67565b602c55565b60006001600160a01b038416610dc75760405162461bcd60e51b8152600401610bdb90613d17565b6001600160a01b038316610ded5760405162461bcd60e51b8152600401610bdb90613d5c565b6011546001600160a01b038516600090815260166020908152604080832033845290915290205414610e9957604080518082018252601680825275496e73756666696369656e7420416c6c6f77616e636560501b6020808401919091526001600160a01b038816600090815291815283822033835290529190912054610e74918490612514565b6001600160a01b03851660009081526016602090815260408083203384529091529020555b610ea484848461254e565b90505b9392505050565b6000546001600160a01b03163314610ed85760405162461bcd60e51b8152600401610bdb90613cb5565b6028805461ff00191661010017905542602755604051600181527ff789dd0d6d54bc0d9b7a5955aac4c052f81fb39e63f533a8d4820f6e862c78a390602001610d0a565b610f25336123d3565b610f415760405162461bcd60e51b8152600401610bdb90613c67565b602955565b60245460405147916000916101009091046001600160a01b031690620124f8908490600060405180830381858888f193505050503d8060008114610fa6576040519150601f19603f3d011682016040523d82523d6000602084013e610fab565b606091505b5050505050565b6000546001600160a01b03163314610fdc5760405162461bcd60e51b8152600401610bdb90613cb5565b6028805460ff19166001179055565b610ff4336123d3565b6110105760405162461bcd60e51b8152600401610bdb90613c67565b6402540be3ff81106110345760405162461bcd60e51b8152600401610bdb90613cd5565b61104142620d2f00613ca2565b81101580156110525750602b548110155b61105b57600080fd5b602a805461ffff19169055602b55565b600042602b5461107b9190613d9f565b905090565b600c54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b1580156110c557600080fd5b505af11580156110d9573d6000803e3d6000fd5b50505050565b6110e8336123d3565b6111045760405162461bcd60e51b8152600401610bdb90613c67565b6001600160a01b03166000908152601c60205260409020805460ff19166001179055565b6000610c5082601154610be9565b61113f336123d3565b61115b5760405162461bcd60e51b8152600401610bdb90613c67565b600581101561116957600080fd5b603281111561117757600080fd5b6103e8816011546111889190613db2565b6111929190613dc9565b60125550565b6111a1336123d3565b6111bd5760405162461bcd60e51b8152600401610bdb90613c67565b60058110156111cb57600080fd5b60328111156111d957600080fd5b6103e8816011546111ea9190613db2565b6111f49190613dc9565b60135550565b336000818152601960209081526040808320858155601b8352818420805460ff19166001179055600c54905460159093529220546001600160a01b0392909216926314b6ca9692909161124c91613ca2565b6040518363ffffffff1660e01b8152600401611269929190613deb565b600060405180830381600087803b15801561128357600080fd5b505af1925050508015611294575060015b505b50565b6112a2336123d3565b6112be5760405162461bcd60e51b8152600401610bdb90613c67565b601f8490556020839055602182905560228190556112e8816112e2848188886124b5565b906124b5565b60235550505050565b6112fa336123d3565b6113165760405162461bcd60e51b8152600401610bdb90613c67565b600f80546001600160a01b0319166001600160a01b039390931692909217909155602e805460ff1916911515919091179055565b6028805462ff00001916620100001790556007546001600160a01b03166000908152601560209081526040822054602354915447939192611396916113909086906123f1565b90612473565b90506000811180156113aa575060245460ff165b1561142057600560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156113ff57600080fd5b505af1158015611413573d6000803e3d6000fd5b5050505050611420613197565b601f54156114ac576000611445602354611390601f54876123f190919063ffffffff16565b9050600c60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561149757600080fd5b505af1935050505080156114a9575060015b50505b602254156115345760006114d1602354611390602254876123f190919063ffffffff16565b6025546040519192506000916001600160a01b0390911690620124f890849084818181858888f193505050503d8060008114611529576040519150601f19603f3d011682016040523d82523d6000602084013e61152e565b606091505b50505050505b47801561159d5760245460405160009161010090046001600160a01b031690620124f890849084818181858888f193505050503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b505050505b82156115c257600754600e546115c0916001600160a01b039081169116856132ea565b505b600c546010546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916115fa9160040190815260200190565b600060405180830381600087803b15801561161457600080fd5b505af1925050508015611625575060015b5050506028805462ff0000191690555050565b6028805462ff0000191662010000179055600c546010546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916116819160040190815260200190565b600060405180830381600087803b15801561169b57600080fd5b505af19250505080156116ac575060015b506028805462ff000019169055565b6116c4336123d3565b6116e05760405162461bcd60e51b8152600401610bdb90613c67565b600c546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e89690604401600060405180830381600087803b15801561172d57600080fd5b505af1158015611741573d6000803e3d6000fd5b505050505050565b6000611754336123d3565b1561176b576117643384846132ea565b9050610c50565b61176433848461254e565b6000546001600160a01b031633146117a05760405162461bcd60e51b8152600401610bdb90613cb5565b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b6117cd336123d3565b6117e95760405162461bcd60e51b8152600401610bdb90613c67565b602b544210156118275760405162461bcd60e51b8152602060048201526009602482015268546f6f206561726c7960b81b6044820152606401610bdb565b602a54610100900460ff1661183b57600080fd5b600b546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190613e04565b6000805460405163a9059cbb60e01b815292935090916001600160a01b038581169263a9059cbb926118e692909116908690600401613deb565b6020604051808303816000875af1158015611905573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119299190613e1d565b9050806119785760405162461bcd60e51b815260206004820152601e60248201527f546f6b656e20636f756c64206e6f74206265207472616e7366657272656400006044820152606401610bdb565b505050565b6001600160a01b0381166000908152601b60205260408120548190819060ff16806119c057506001600160a01b0384166000908152601a602052604090205460ff165b6119cb5760006119ce565b60015b6001600160a01b0385166000908152601a60205260408120549192509060ff16611a26576001600160a01b038516600090815260196020908152604080832054601590925290912054611a219190613ca2565b611a4a565b6001600160a01b038516600090815260156020526040902054611a4a906002613db2565b91959194509092505050565b611a5f336123d3565b611a7b5760405162461bcd60e51b8152600401610bdb90613c67565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b611aa6336123d3565b611ac25760405162461bcd60e51b8152600401610bdb90613c67565b60248054610100600160a81b0319166101006001600160a01b0394851602179055602580546001600160a01b03191691909216179055565b6000546001600160a01b03163314611b245760405162461bcd60e51b8152600401610bdb90613cb5565b6000848314611b865760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610bdb565b60005b85811015611bc957848482818110611ba357611ba3613e3a565b9050602002013582611bb59190613ca2565b915080611bc181613e50565b915050611b89565b5033600090815260156020526040902054811115611c295760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e7320746f2061697264726f70000000006044820152606401610bdb565b8115611f0f5760005b85811015611f0957848482818110611c4c57611c4c613e3a565b9050602002013560156000898985818110611c6957611c69613e3a565b9050602002016020810190611c7e9190613abf565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254611cad9190613ca2565b909155508590508482818110611cc557611cc5613e3a565b9050602002013560156000336001600160a01b03166001600160a01b031681526020019081526020016000206000828254611d009190613d9f565b9091555060029050858583818110611d1a57611d1a613e3a565b90506020020135611d2b9190613dc9565b60196000898985818110611d4157611d41613e3a565b9050602002016020810190611d569190613abf565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254611d859190613ca2565b9091555060019050601a6000898985818110611da357611da3613e3a565b9050602002016020810190611db89190613abf565b6001600160a01b0390811682526020820192909252604001600020805460ff191692151592909217909155600c54166314b6ca96888884818110611dfe57611dfe613e3a565b9050602002016020810190611e139190613abf565b878785818110611e2557611e25613e3a565b905060200201356002611e389190613db2565b6040518363ffffffff1660e01b8152600401611e55929190613deb565b600060405180830381600087803b158015611e6f57600080fd5b505af1158015611e83573d6000803e3d6000fd5b50505050868682818110611e9957611e99613e3a565b9050602002016020810190611eae9190613abf565b6001600160a01b031633600080516020613e98833981519152878785818110611ed957611ed9613e3a565b90506020020135604051611eef91815260200190565b60405180910390a380611f0181613e50565b915050611c32565b50611741565b60005b8581101561210757848482818110611f2c57611f2c613e3a565b9050602002013560156000898985818110611f4957611f49613e3a565b9050602002016020810190611f5e9190613abf565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254611f8d9190613ca2565b909155508590508482818110611fa557611fa5613e3a565b9050602002013560156000336001600160a01b03166001600160a01b031681526020019081526020016000206000828254611fe09190613d9f565b9091555050600c546001600160a01b03166314b6ca9688888481811061200857612008613e3a565b905060200201602081019061201d9190613abf565b87878581811061202f5761202f613e3a565b905060200201356040518363ffffffff1660e01b8152600401612053929190613deb565b600060405180830381600087803b15801561206d57600080fd5b505af1158015612081573d6000803e3d6000fd5b5050505086868281811061209757612097613e3a565b90506020020160208101906120ac9190613abf565b6001600160a01b031633600080516020613e988339815191528787858181106120d7576120d7613e3a565b905060200201356040516120ed91815260200190565b60405180910390a3806120ff81613e50565b915050611f12565b50505050505050565b612119336123d3565b6121355760405162461bcd60e51b8152600401610bdb90613c67565b6014805460ff19169055565b6000546001600160a01b0316331461216b5760405162461bcd60e51b8152600401610bdb90613cb5565b6001600160a01b03166000908152600260205260409020805460ff19169055565b6000546001600160a01b031633146121b65760405162461bcd60e51b8152600401610bdb90613cb5565b600080546001600160a01b0319166001600160a01b038316908117825580825260026020908152604092839020805460ff1916600117905591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6028805462ff0000191662010000179055346000612254306001600160a01b031660009081526015602052604090205490565b600a5460405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201529192506001600160a01b03169063f305d71990849060c40160606040518083038185885af11580156122c2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122e79190613e69565b505060408051848152602081018490527f4cad96411b6ee68d6dd4436fa90290e73ff30b18b161932f77df49cd40f99c1192500160405180910390a150506028805462ff000019169055565b61233c336123d3565b6123585760405162461bcd60e51b8152600401610bdb90613c67565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b61238c336123d3565b6123a85760405162461bcd60e51b8152600401610bdb90613c67565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526002602052604090205460ff1690565b60008260000361240357506000610c50565b600061240f8385613db2565b90508261241c8583613dc9565b14610ea75760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bdb565b6000610ea783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506133ac565b6000806124c28385613ca2565b905083811015610ea75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bdb565b600081848411156125385760405162461bcd60e51b8152600401610bdb91906139c4565b5060006125458486613d9f565b95945050505050565b60006001600160a01b0384166125765760405162461bcd60e51b8152600401610bdb90613d17565b6001600160a01b03831661259c5760405162461bcd60e51b8152600401610bdb90613d5c565b6001600160a01b03841660009081526002602052604090205460ff16806125db57506001600160a01b03831660009081526002602052604090205460ff165b806125ee575060285462010000900460ff165b15612605576125fe8484846132ea565b9050610ea7565b6008546001600160a01b038581169116148061262e57506008546001600160a01b038481169116145b801561263c575060285460ff165b1561264c576125fe8484846133da565b6001600160a01b0384166000908152601a602052604090205460ff168061268b57506001600160a01b0384166000908152601b602052604090205460ff165b156126d8576001600160a01b0384166000908152601960205260409020546126b4908390613ca2565b6001600160a01b03851660009081526015602052604090205410156126d857600080fd5b6001600160a01b03841660009081526002602052604090205460ff1615801561271a57506001600160a01b03831660009081526002602052604090205460ff16155b156127735760285460ff6101009091041615156001146127735760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610bdb565b60145460ff16156127895761278984848461373d565b600b546001600160a01b0390811690841603612b2c576127a884613904565b60006026541180156127c3575060285462010000900460ff16155b80156127de575043602c54602d546127db9190613ca2565b11155b15612976576028805462ff00001916620100001790556009546007546001600160a01b039182169163095ea7b3911661281561393e565b6040518363ffffffff1660e01b8152600401612832929190613deb565b6020604051808303816000875af1158015612851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128759190613e1d565b50600754602654602354604051636fb8e07d60e11b8152600481019290925260248201523060448201526001600160a01b039091169063df71c0fa90606401600060405180830381600087803b1580156128ce57600080fd5b505af19250505080156128df575060015b156128ee57600060265543602d555b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261292592911690600090600401613deb565b6020604051808303816000875af1158015612944573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129689190613e1d565b506028805462ff0000191690555b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152601590915291909120546129c8918490612514565b6001600160a01b0380861660009081526015602052604080822093909355908516815220546129f790836124b5565b6001600160a01b038085166000908152601560209081526040808320949094559187168152601a909152205460ff16612ad8576001600160a01b03841660009081526018602052604090205460ff16612ad357600c546001600160a01b0385811660009081526019602090815260408083205460159092529091205491909216916314b6ca96918791612a8991613ca2565b6040518363ffffffff1660e01b8152600401612aa6929190613deb565b600060405180830381600087803b158015612ac057600080fd5b505af1925050508015612ad1575060015b505b61307f565b6001600160a01b0384166000908152601a602052604090205460ff1615612ad357600c546001600160a01b038581166000908152601560205260409020549116906314b6ca96908690612a89906002613db2565b600b546001600160a01b0390811690851603612d0d576001600160a01b0383163014801590612b695750600b546001600160a01b03848116911614155b15612bad57602654612b7b90836124b5565b6026556001600160a01b0383166000818152601e60205260409020439055601d80546001600160a01b03191690911790555b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260159091529190912054612bff918490612514565b6001600160a01b038086166000908152601560205260408082209390935590851681522054612c2e90836124b5565b6001600160a01b038416600090815260156020908152604080832093909355601a9052205460ff16612cb9576001600160a01b03831660009081526018602052604090205460ff16612ad357600c546001600160a01b0384811660009081526019602090815260408083205460159092529091205491909216916314b6ca96918691612a8991613ca2565b6001600160a01b0383166000908152601a602052604090205460ff1615612ad357600c546001600160a01b038481166000908152601560205260409020549116906314b6ca96908590612a89906002613db2565b612d1684613904565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260159091529190912054612d68918490612514565b6001600160a01b038086166000908152601560205260408082209390935590851681522054612d9790836124b5565b6001600160a01b038085166000908152601560209081526040808320949094559187168152601a909152205460ff16158015612dec57506001600160a01b0383166000908152601a602052604090205460ff16155b15612f43576001600160a01b03841660009081526018602052604090205460ff16612e9a57600c546001600160a01b0385811660009081526019602090815260408083205460159092529091205491909216916314b6ca96918791612e5091613ca2565b6040518363ffffffff1660e01b8152600401612e6d929190613deb565b600060405180830381600087803b158015612e8757600080fd5b505af1925050508015612e98575060015b505b6001600160a01b03831660009081526018602052604090205460ff16612f4357600c546001600160a01b0384811660009081526019602090815260408083205460159092529091205491909216916314b6ca96918691612ef991613ca2565b6040518363ffffffff1660e01b8152600401612f16929190613deb565b600060405180830381600087803b158015612f3057600080fd5b505af1925050508015612f41575060015b505b6001600160a01b0384166000908152601a602052604090205460ff1615612fe157600c546001600160a01b038581166000908152601560205260409020549116906314b6ca96908690612f97906002613db2565b6040518363ffffffff1660e01b8152600401612fb4929190613deb565b600060405180830381600087803b158015612fce57600080fd5b505af1925050508015612fdf575060015b505b6001600160a01b0383166000908152601a602052604090205460ff161561307f57600c546001600160a01b038481166000908152601560205260409020549116906314b6ca96908590613035906002613db2565b6040518363ffffffff1660e01b8152600401613052929190613deb565b600060405180830381600087803b15801561306c57600080fd5b505af192505050801561307d575060015b505b602e5460ff16156130f357600f54604051630663e5b960e51b81526001600160a01b0386811660048301528581166024830152604482018590529091169063cc7cb72090606401600060405180830381600087803b1580156130e057600080fd5b505af19250505080156130f1575060015b505b600c546040516001624d3b8760e01b03198152620186a060048201526001600160a01b039091169063ffb2c479906024015b600060405180830381600087803b15801561313f57600080fd5b505af1925050508015613150575060015b505b826001600160a01b0316846001600160a01b0316600080516020613e988339815191528460405161318591815260200190565b60405180910390a35060019392505050565b6006546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156131e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132049190613e04565b600654600b546040516323b872dd60e01b81523060048201526001600160a01b0391821660248201526044810184905292935016906323b872dd906064016020604051808303816000875af1158015613261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132859190613e1d565b50600960009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132d657600080fd5b505af1158015610fab573d6000803e3d6000fd5b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260159091529182205461333b918490612514565b6001600160a01b03808616600090815260156020526040808220939093559085168152205461336a90836124b5565b6001600160a01b038085166000818152601560205260409081902093909355915190861690600080516020613e98833981519152906131859086815260200190565b600081836133cd5760405162461bcd60e51b8152600401610bdb91906139c4565b5060006125458486613dc9565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260159091529182205461342b918490612514565b6001600160a01b03808616600090815260156020526040808220939093559085168152205461345a90836124b5565b6001600160a01b03808516600090815260156020526040902091909155600b548116908516036134955760265461349190836124b5565b6026555b6001600160a01b0384166000908152601a602052604090205460ff161580156134d757506001600160a01b0383166000908152601a602052604090205460ff16155b1561362e576001600160a01b03841660009081526018602052604090205460ff1661358557600c546001600160a01b0385811660009081526019602090815260408083205460159092529091205491909216916314b6ca9691879161353b91613ca2565b6040518363ffffffff1660e01b8152600401613558929190613deb565b600060405180830381600087803b15801561357257600080fd5b505af1925050508015613583575060015b505b6001600160a01b03831660009081526018602052604090205460ff1661362e57600c546001600160a01b0384811660009081526019602090815260408083205460159092529091205491909216916314b6ca969186916135e491613ca2565b6040518363ffffffff1660e01b8152600401613601929190613deb565b600060405180830381600087803b15801561361b57600080fd5b505af192505050801561362c575060015b505b6001600160a01b0384166000908152601a602052604090205460ff16156136cc57600c546001600160a01b038581166000908152601560205260409020549116906314b6ca96908690613682906002613db2565b6040518363ffffffff1660e01b815260040161369f929190613deb565b600060405180830381600087803b1580156136b957600080fd5b505af19250505080156136ca575060015b505b6001600160a01b0383166000908152601a602052604090205460ff161561315257600c546001600160a01b038481166000908152601560205260409020549116906314b6ca96908590613720906002613db2565b6040518363ffffffff1660e01b8152600401613125929190613deb565b6001600160a01b03831660009081526002602052604090205460ff1615801561376f57506001600160a01b0382163014155b801561378457506001600160a01b0383163014155b801561379e57506003546001600160a01b03838116911614155b80156137b85750600b546001600160a01b03838116911614155b80156137d757506024546001600160a01b038381166101009092041614155b15613878576001600160a01b0382166000908152601560205260409020546013546138028383613ca2565b11156138765760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610bdb565b505b601254811115806138a157506001600160a01b03831660009081526017602052604090205460ff165b806138c457506001600160a01b03821660009081526017602052604090205460ff165b6119785760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610bdb565b6001600160a01b0381166000908152601e602052604090205443900361129657601d546001600160a01b0382811691161461129657600080fd5b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015613987573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107b9190613e04565b6000602082840312156139bd57600080fd5b5035919050565b600060208083528351808285015260005b818110156139f1578581018301518582016040015282016139d5565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461129657600080fd5b60008060408385031215613a3a57600080fd5b8235613a4581613a12565b946020939093013593505050565b801515811461129657600080fd5b600060208284031215613a7357600080fd5b8135610ea781613a53565b600080600060608486031215613a9357600080fd5b8335613a9e81613a12565b92506020840135613aae81613a12565b929592945050506040919091013590565b600060208284031215613ad157600080fd5b8135610ea781613a12565b60008060008060808587031215613af257600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215613b2157600080fd5b8235613b2c81613a12565b91506020830135613b3c81613a53565b809150509250929050565b60008060408385031215613b5a57600080fd5b50508035926020909101359150565b60008060408385031215613b7c57600080fd5b8235613b8781613a12565b91506020830135613b3c81613a12565b60008083601f840112613ba957600080fd5b50813567ffffffffffffffff811115613bc157600080fd5b6020830191508360208260051b8501011115613bdc57600080fd5b9250929050565b600080600080600060608688031215613bfb57600080fd5b853567ffffffffffffffff80821115613c1357600080fd5b613c1f89838a01613b97565b90975095506020880135915080821115613c3857600080fd5b50613c4588828901613b97565b9094509250506040860135613c5981613a53565b809150509295509295909350565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c5057610c50613c8c565b60208082526006908201526510a7aba722a960d11b604082015260600190565b60208082526022908201527f41766f696420706f74656e7469616c2074696d657374616d70206f766572666c6040820152616f7760f01b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c5057610c50613c8c565b8082028115828204841417610c5057610c50613c8c565b600082613de657634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b03929092168252602082015260400190565b600060208284031215613e1657600080fd5b5051919050565b600060208284031215613e2f57600080fd5b8151610ea781613a53565b634e487b7160e01b600052603260045260246000fd5b600060018201613e6257613e62613c8c565b5060010190565b600080600060608486031215613e7e57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a8cee398478a31a0363ac6001a577308ff53e0f457561f3be479e35a9b5822ec64736f6c63430008110033

Deployed Bytecode Sourcemap

15505:20616:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21755:98;;;;;;;;;;-1:-1:-1;21755:98:0;;;;;:::i;:::-;;:::i;:::-;;19793:80;;;;;;;;;;-1:-1:-1;19865:5:0;;;;;;;;;;;;-1:-1:-1;;;19865:5:0;;;;19793:80;;;;;;;:::i;:::-;;;;;;;;17208:29;;;;;;;;;;;;;;;;;;;898:25:1;;;886:2;871:18;17208:29:0;752:177:1;20217:216:0;;;;;;;;;;-1:-1:-1;20217:216:0;;;;;:::i;:::-;;:::i;:::-;;;1555:14:1;;1548:22;1530:41;;1518:2;1503:18;20217:216:0;1390:187:1;17285:32:0;;;;;;;;;;;;;;;;25159:123;;;;;;;;;;-1:-1:-1;25159:123:0;;;;;:::i;:::-;;:::i;22340:225::-;;;;;;;;;;;;;:::i;23708:206::-;;;;;;;;;;-1:-1:-1;23708:206:0;;;;;:::i;:::-;;:::i;28689:103::-;;;;;;;;;;-1:-1:-1;28689:103:0;;;;;:::i;:::-;;:::i;19523:88::-;;;;;;;;;;-1:-1:-1;19596:12:0;;19523:88;;22676:98;;;;;;;;;;-1:-1:-1;22751:15:0;;;;;;;22676:98;;30415:528;;;;;;;;;;-1:-1:-1;30415:528:0;;;;;:::i;:::-;;:::i;22790:88::-;;;;;;;;;;-1:-1:-1;22862:8:0;;22790:88;;21183:159;;;;;;;;;;;;;:::i;21350:95::-;;;;;;;;;;-1:-1:-1;21350:95:0;;;;;:::i;:::-;;:::i;3337:103::-;;;;;;;;;;-1:-1:-1;3337:103:0;;;;;:::i;:::-;3392:4;3427:5;-1:-1:-1;;;;;3416:16:0;;;3427:5;;3416:16;;3337:103;19617:80;;;;;;;;;;-1:-1:-1;19617:80:0;;16326:1;2806:36:1;;2794:2;2779:18;19617:80:0;2664:184:1;28800:220:0;;;;;;;;;;;;;:::i;21453:114::-;;;;;;;;;;-1:-1:-1;21533:9:0;;21544:14;;21453:114;;;3027:25:1;;;3083:2;3068:18;;3061:34;;;;3000:18;21453:114:0;2853:248:1;30017:77:0;;;;;;;;;;;;;:::i;21861:323::-;;;;;;;;;;-1:-1:-1;21861:323:0;;;;;:::i;:::-;;:::i;17459:29::-;;;;;;;;;;-1:-1:-1;17459:29:0;;;;;;;-1:-1:-1;;;;;17459:29:0;;;;;;-1:-1:-1;;;;;3270:32:1;;;3252:51;;3240:2;3225:18;17459:29:0;3106:203:1;23208:115:0;;;;;;;;;;;;;:::i;15945:36::-;;;;;;;;;;-1:-1:-1;15945:36:0;;;;-1:-1:-1;;;;;15945:36:0;;;21094:81;;;;;;;;;;;;;:::i;22573:95::-;;;;;;;;;;-1:-1:-1;22573:95:0;;;;;:::i;:::-;;:::i;20441:117::-;;;;;;;;;;-1:-1:-1;20441:117:0;;;;;:::i;:::-;;:::i;27811:242::-;;;;;;;;;;-1:-1:-1;27811:242:0;;;;;:::i;:::-;;:::i;27556:247::-;;;;;;;;;;-1:-1:-1;27556:247:0;;;;;:::i;:::-;;:::i;25853:237::-;;;;;;;;;;-1:-1:-1;25853:237:0;;;;;:::i;:::-;;:::i;25290:344::-;;;;;;;;;;-1:-1:-1;25290:344:0;;;;;:::i;:::-;;:::i;19963:105::-;;;;;;;;;;-1:-1:-1;19963:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;20047:18:0;20029:7;20047:18;;;:9;:18;;;;;;;19963:105;18058:28;;;;;;;;;;;;;;;;16513:64;;;;;;;;;;;;;;;;24997:154;;;;;;;;;;-1:-1:-1;24997:154:0;;;;;:::i;:::-;;:::i;26289:1148::-;;;;;;;;;;;;;:::i;16443:60::-;;;;;;;;;;;;;;;;19879:78;;;;;;;;;;-1:-1:-1;19931:7:0;19949:5;-1:-1:-1;;;;;19949:5:0;19879:78;;17324:99;;;;;;;;;;;;;;;;27445:103;;;;;;;;;;;;;:::i;19703:84::-;;;;;;;;;;-1:-1:-1;19777:7:0;;;;;;;;;;;;-1:-1:-1;;;19777:7:0;;;;19703:84;;17495:27;;;;;;;;;;-1:-1:-1;17495:27:0;;;;-1:-1:-1;;;;;17495:27:0;;;21575:172;;;;;;;;;;-1:-1:-1;21575:172:0;;;;;:::i;:::-;;:::i;16087:33::-;;;;;;;;;;-1:-1:-1;16087:33:0;;;;-1:-1:-1;;;;;16087:33:0;;;16021:19;;;;;;;;;;-1:-1:-1;16021:19:0;;;;-1:-1:-1;;;;;16021:19:0;;;30102:305;;;;;;;;;;-1:-1:-1;30102:305:0;;;;;:::i;:::-;;:::i;3130:94::-;;;;;;;;;;-1:-1:-1;3130:94:0;;;;;:::i;:::-;;:::i;24812:79::-;;;;;;;;;;-1:-1:-1;24879:4:0;;-1:-1:-1;;;;;24879:4:0;24812:79;;23331:369;;;;;;;;;;;;;:::i;22886:314::-;;;;;;;;;;-1:-1:-1;22886:314:0;;;;;:::i;:::-;;:::i;:::-;;;;4769:14:1;;4762:22;4744:41;;4816:2;4801:18;;4794:34;;;;4717:18;22886:314:0;4576:258:1;24899:90:0;;;;;;;;;;-1:-1:-1;24899:90:0;;;;;:::i;:::-;;:::i;20908:178::-;;;;;;;;;;-1:-1:-1;20908:178:0;;;;;:::i;:::-;;:::i;17244:34::-;;;;;;;;;;;;;;;;34865:1251;;;;;;;;;;-1:-1:-1;34865:1251:0;;;;;:::i;:::-;;:::i;20074:133::-;;;;;;;;;;-1:-1:-1;20074:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;20176:19:0;;;20158:7;20176:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;20074:133;23922:72;;;;;;;;;;;;;:::i;3232:97::-;;;;;;;;;;-1:-1:-1;3232:97:0;;;;;:::i;:::-;;:::i;3666:173::-;;;;;;;;;;-1:-1:-1;3666:173:0;;;;;:::i;:::-;;:::i;24276:404::-;;;:::i;17169:32::-;;;;;;;;;;;;;;;;24138:130;;;;;;;;;;-1:-1:-1;24138:130:0;;;;;:::i;:::-;;:::i;24002:128::-;;;;;;;;;;-1:-1:-1;24002:128:0;;;;;:::i;:::-;;:::i;15990:24::-;;;;;;;;;;-1:-1:-1;15990:24:0;;;;-1:-1:-1;;;;;15990:24:0;;;3448:107;;;;;;;;;;-1:-1:-1;3448:107:0;;;;;:::i;:::-;;:::i;21755:98::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;;;;;;;;;21821:14:::1;:24:::0;21755:98::o;20217:216::-;20321:10;20292:4;20309:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;20309:32:0;;;;;;;;;;:41;;;20366:37;20292:4;;20309:32;;20366:37;;;;20344:6;898:25:1;;886:2;871:18;;752:177;20366:37:0;;;;;;;;-1:-1:-1;20421:4:0;20217:216;;;;;:::o;25159:123::-;25234:10;25228:17;;;;:5;:17;;;;;;;;25220:26;;;;;;25257:6;:17;;-1:-1:-1;;25257:17:0;;;;;;;;;;25159:123::o;22340:225::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;22405:14:::1;::::0;::::1;;22397:23;;;::::0;::::1;;22442:25;:15;22460:7;22442:25;:::i;:::-;22431:8;:36:::0;22478:15:::1;:22:::0;;-1:-1:-1;;22478:22:0::1;;;::::0;;22516:41:::1;::::0;::::1;::::0;::::1;::::0;22541:15:::1;898:25:1::0;;886:2;871:18;;752:177;22516:41:0::1;;;;;;;;22340:225::o:0;23708:206::-;3392:4;3427:5;-1:-1:-1;;;;;3427:5:0;2907:10;3416:16;2891:38;;;;-1:-1:-1;;;2891:38:0;;;;;;;:::i;:::-;23790:10:::1;23780:7;:20;23772:67;;;;-1:-1:-1::0;;;23772:67:0::1;;;;;;;:::i;:::-;23868:8;;23858:7;:18;23850:27;;;::::0;::::1;;23888:8;:18:::0;23708:206::o;28689:103::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;28763:9:::1;:21:::0;28689:103::o;30415:528::-;30515:4;-1:-1:-1;;;;;30540:20:0;;30532:70;;;;-1:-1:-1;;;30532:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30621:23:0;;30613:71;;;;-1:-1:-1;;;30613:71:0;;;;;;;:::i;:::-;30733:12;;-1:-1:-1;;;;;30698:19:0;;;;;;:11;:19;;;;;;;;30718:10;30698:31;;;;;;;;:47;30695:181;;30795:69;;;;;;;;;;;;-1:-1:-1;;;30795:69:0;;;;;;;;-1:-1:-1;;;;;30795:19:0;;-1:-1:-1;30795:19:0;;;;;;;;;30815:10;30795:31;;;;;;;;;:69;;30831:6;;30795:35;:69::i;:::-;-1:-1:-1;;;;;30761:19:0;;;;;;:11;:19;;;;;;;;30781:10;30761:31;;;;;;;:103;30695:181;30895:40;30909:6;30917:9;30928:6;30895:13;:40::i;:::-;30888:47;;30415:528;;;;;;:::o;21183:159::-;3392:4;3427:5;-1:-1:-1;;;;;3427:5:0;2907:10;3416:16;2891:38;;;;-1:-1:-1;;;2891:38:0;;;;;;;:::i;:::-;21237:13:::1;:20:::0;;-1:-1:-1;;21237:20:0::1;;;::::0;;21281:15:::1;21268:10;:28:::0;21314:20:::1;::::0;-1:-1:-1;1530:41:1;;21314:20:0::1;::::0;1518:2:1;1503:18;21314:20:0::1;1390:187:1::0;21350:95:0;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;21420:9:::1;:17:::0;21350:95::o;28800:220::-;28929:14;;28921:62;;28868:21;;28848:17;;28929:14;;;;-1:-1:-1;;;;;28929:14:0;;28973:5;;28868:21;;28921:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28800:220:0:o;30017:77::-;3392:4;3427:5;-1:-1:-1;;;;;3427:5:0;2907:10;3416:16;2891:38;;;;-1:-1:-1;;;2891:38:0;;;;;;;:::i;:::-;30072:7:::1;:14:::0;;-1:-1:-1;;30072:14:0::1;30082:4;30072:14;::::0;;30017:77::o;21861:323::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;21946:10:::1;21934:9;:22;21926:69;;;;-1:-1:-1::0;;;21926:69:0::1;;;;;;;:::i;:::-;22027:25;:15;22045:7;22027:25;:::i;:::-;22014:9;:38;;:63;;;;;22069:8;;22056:9;:21;;22014:63;22006:72;;;::::0;::::1;;22089:14;:22:::0;;-1:-1:-1;;22122:23:0;;;22156:8:::1;:20:::0;21861:323::o;23208:115::-;23263:7;23300:15;23289:8;;:26;;;;:::i;:::-;23282:33;;23208:115;:::o;21094:81::-;21130:11;;:37;;-1:-1:-1;;;21130:37:0;;21156:10;21130:37;;;3252:51:1;-1:-1:-1;;;;;21130:11:0;;;;:25;;3225:18:1;;21130:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21094:81::o;22573:95::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22640:13:0::1;;::::0;;;:5:::1;:13;::::0;;;;:20;;-1:-1:-1;;22640:20:0::1;22656:4;22640:20;::::0;;22573:95::o;20441:117::-;20496:4;20520:30;20528:7;20537:12;;20520:7;:30::i;27811:242::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;27898:1:::1;27887:7;:12;;27879:21;;;::::0;::::1;;27957:2;27946:7;:13;;27938:22;;;::::0;::::1;;28041:4;28029:7;28014:12;;:22;;;;:::i;:::-;28012:33;;;;:::i;:::-;27997:12;:48:::0;-1:-1:-1;27811:242:0:o;27556:247::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;27645:1:::1;27634:7;:12;;27626:21;;;::::0;::::1;;27704:2;27693:7;:13;;27685:22;;;::::0;::::1;;27791:4;27779:7;27764:12;;:22;;;;:::i;:::-;27762:33;;;;:::i;:::-;27744:15;:51:::0;-1:-1:-1;27556:247:0:o;25853:237::-;25916:10;25905:22;;;;:10;:22;;;;;;;;:32;;;25948:7;:19;;;;;:26;;-1:-1:-1;;25948:26:0;25970:4;25948:26;;;25989:11;;26047:22;;26023:9;:21;;;;;;-1:-1:-1;;;;;25989:11:0;;;;;:20;;25916:10;;26023:46;;;:::i;:::-;25989:82;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25985:98;;25853:237;:::o;25290:344::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;25408:13:::1;:23:::0;;;25442:10:::1;:17:::0;;;25470:15:::1;:27:::0;;;25508:13:::1;:23:::0;;;25557:69:::1;25524:7:::0;25557:50:::1;25488:9:::0;25557:50;25424:7;25455:4;25557:17:::1;:29::i;:::-;:33:::0;::::1;:50::i;:69::-;25542:12;:84:::0;-1:-1:-1;;;;25290:344:0:o;24997:154::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;25086:4:::1;:20:::0;;-1:-1:-1;;;;;;25086:20:0::1;-1:-1:-1::0;;;;;25086:20:0;;;::::1;::::0;;;::::1;::::0;;;25117:15:::1;:26:::0;;-1:-1:-1;;25117:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24997:154::o;26289:1148::-;17759:6;:13;;-1:-1:-1;;17759:13:0;;;;;26423:5:::1;::::0;-1:-1:-1;;;;;26423:5:0::1;17759:13:::0;26405:25;;;:9:::1;:25;::::0;;;;;;;26483:12:::1;::::0;26467:10;;26354:21:::1;::::0;26405:25;;26456:40:::1;::::0;:22:::1;::::0;26354:21;;26456:10:::1;:22::i;:::-;:26:::0;::::1;:40::i;:::-;26443:53;;26516:1;26511:2;:6;:16;;;;-1:-1:-1::0;26521:6:0::1;::::0;::::1;;26511:16;26507:103;;;26543:4;;;;;;;;;-1:-1:-1::0;;;;;26543:4:0::1;-1:-1:-1::0;;;;;26543:12:0::1;;26564:2;26543:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;26584:8;:6;:8::i;:::-;26634:13;::::0;:17;26630:180:::1;;26668:16;26687:43;26717:12;;26687:25;26698:13;;26687:6;:10;;:25;;;;:::i;:43::-;26668:62;;26749:11;;;;;;;;;-1:-1:-1::0;;;;;26749:11:0::1;-1:-1:-1::0;;;;;26749:19:0::1;;26776:8;26749:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;26745:54:::0;26653:157:::1;26630:180;26827:13;::::0;:17;26823:235:::1;;26860:14;26877:43;26907:12;;26877:25;26888:13;;26877:6;:10;;:25;;;;:::i;:43::-;26964:12;::::0;26956:57:::1;::::0;26860:60;;-1:-1:-1;26936:15:0::1;::::0;-1:-1:-1;;;;;26964:12:0;;::::1;::::0;27003:5:::1;::::0;26860:60;;26936:15;26956:57;26936:15;26956:57;26860:60;26964:12;27003:5;26956:57:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;26823:235:0::1;27089:21;27125:12:::0;;27121:159:::1;;27182:14;::::0;27174:61:::1;::::0;27154:15:::1;::::0;27182:14:::1;::::0;::::1;-1:-1:-1::0;;;;;27182:14:0::1;::::0;27225:5:::1;::::0;27210:8;;27154:15;27174:61;27154:15;27174:61;27210:8;27182:14;27225:5;27174:61:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;27121:159:0::1;27296:12:::0;;27292:76:::1;;27333:5;::::0;27349::::1;::::0;27310:56:::1;::::0;-1:-1:-1;;;;;27333:5:0;;::::1;::::0;27349::::1;27357:8:::0;27310:14:::1;:56::i;:::-;;27292:76;27383:11;::::0;27403:14:::1;::::0;27383:35:::1;::::0;-1:-1:-1;;;;;;27383:35:0;;-1:-1:-1;;;;;27383:11:0;;::::1;::::0;:19:::1;::::0;:35:::1;::::0;::::1;;898:25:1::0;;;886:2;871:18;;752:177;27383:35:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;27379:51:::0;-1:-1:-1;;17777:6:0;:14;;-1:-1:-1;;17777:14:0;;;-1:-1:-1;;26289:1148:0:o;27445:103::-;17759:6;:13;;-1:-1:-1;;17759:13:0;;;;;27494:11:::1;::::0;27514:14:::1;::::0;27494:35:::1;::::0;-1:-1:-1;;;;;;27494:35:0;;-1:-1:-1;;;;;27494:11:0;;::::1;::::0;:19:::1;::::0;:35:::1;::::0;::::1;;898:25:1::0;;;886:2;871:18;;752:177;27494:35:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;27490:51:::0;17777:6;:14;;-1:-1:-1;;17777:14:0;;;27445:103::o;21575:172::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;21675:11:::1;::::0;:64:::1;::::0;-1:-1:-1;;;21675:64:0;;::::1;::::0;::::1;3027:25:1::0;;;3068:18;;;3061:34;;;-1:-1:-1;;;;;21675:11:0;;::::1;::::0;:35:::1;::::0;3000:18:1;;21675:64:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21575:172:::0;;:::o;30102:305::-;30182:4;30203:24;30216:10;30203:12;:24::i;:::-;30199:201;;;30250:45;30265:10;30277:9;30288:6;30250:14;:45::i;:::-;30243:52;;;;30199:201;30344:44;30358:10;30370:9;30381:6;30344:13;:44::i;3130:94::-;3392:4;3427:5;-1:-1:-1;;;;;3427:5:0;2907:10;3416:16;2891:38;;;;-1:-1:-1;;;2891:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3190:19:0::1;;::::0;;;:14:::1;:19;::::0;;;;:26;;-1:-1:-1;;3190:26:0::1;3212:4;3190:26;::::0;;3130:94::o;23331:369::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;23417:8:::1;;23398:15;:27;;23390:48;;;::::0;-1:-1:-1;;;23390:48:0;;10365:2:1;23390:48:0::1;::::0;::::1;10347:21:1::0;10404:1;10384:18;;;10377:29;-1:-1:-1;;;10422:18:1;;;10415:39;10471:18;;23390:48:0::1;10163:332:1::0;23390:48:0::1;23457:15;::::0;::::1;::::0;::::1;;;23449:24;;;::::0;::::1;;23507:4;::::0;23541:31:::1;::::0;-1:-1:-1;;;23541:31:0;;23566:4:::1;23541:31;::::0;::::1;3252:51:1::0;-1:-1:-1;;;;;23507:4:0;;::::1;::::0;23484:13:::1;::::0;23507:4;;23541:16:::1;::::0;3225:18:1;;23541:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23583:13;23615:5:::0;;23599:31:::1;::::0;-1:-1:-1;;;23599:31:0;;23523:49;;-1:-1:-1;23583:13:0;;-1:-1:-1;;;;;23599:15:0;;::::1;::::0;::::1;::::0;:31:::1;::::0;23615:5;;::::1;::::0;23523:49;;23599:31:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23583:47;;23649:8;23641:51;;;::::0;-1:-1:-1;;;23641:51:0;;11141:2:1;23641:51:0::1;::::0;::::1;11123:21:1::0;11180:2;11160:18;;;11153:30;11219:32;11199:18;;;11192:60;11269:18;;23641:51:0::1;10939:354:1::0;23641:51:0::1;23379:321;;;23331:369::o:0;22886:314::-;-1:-1:-1;;;;;22989:16:0;;22947:4;22989:16;;;:7;:16;;;;;;22947:4;;;;22989:16;;;:37;;-1:-1:-1;;;;;;23009:17:0;;;;;;:8;:17;;;;;;;;22989:37;22988:54;;23037:5;22988:54;;;23030:4;22988:54;-1:-1:-1;;;;;23072:17:0;;23054:15;23072:17;;;:8;:17;;;;;;22972:71;;-1:-1:-1;23054:15:0;23072:17;;:85;;-1:-1:-1;;;;;23138:19:0;;;;;;:10;:19;;;;;;;;;23117:9;:18;;;;;;;:40;;23138:19;23117:40;:::i;:::-;23072:85;;;-1:-1:-1;;;;;23092:18:0;;;;;;:9;:18;;;;;;:22;;23113:1;23092:22;:::i;:::-;23176:7;;23054:103;;-1:-1:-1;22886:314:0;;-1:-1:-1;;;22886:314:0:o;24899:90::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;24963:5:::1;:18:::0;;-1:-1:-1;;;;;;24963:18:0::1;-1:-1:-1::0;;;;;24963:18:0;;;::::1;::::0;;;::::1;::::0;;24899:90::o;20908:178::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;21007:14:::1;:32:::0;;-1:-1:-1;;;;;;21007:32:0::1;;-1:-1:-1::0;;;;;21007:32:0;;::::1;;;::::0;;21050:12:::1;:28:::0;;-1:-1:-1;;;;;;21050:28:0::1;::::0;;;::::1;;::::0;;20908:178::o;34865:1251::-;3392:4;3427:5;-1:-1:-1;;;;;3427:5:0;2907:10;3416:16;2891:38;;;;-1:-1:-1;;;2891:38:0;;;;;;;:::i;:::-;34978:19:::1;35020:33:::0;;::::1;35012:85;;;::::0;-1:-1:-1;;;35012:85:0;;11500:2:1;35012:85:0::1;::::0;::::1;11482:21:1::0;11539:2;11519:18;;;11512:30;11578:34;11558:18;;;11551:62;-1:-1:-1;;;11629:18:1;;;11622:38;11677:19;;35012:85:0::1;11298:404:1::0;35012:85:0::1;35112:6;35108:104;35122:20:::0;;::::1;35108:104;;;35191:6;;35198:1;35191:9;;;;;;;:::i;:::-;;;;;;;35177:11;:23;;;;:::i;:::-;35163:37:::0;-1:-1:-1;35144:3:0;::::1;::::0;::::1;:::i;:::-;;;;35108:104;;;-1:-1:-1::0;35240:10:0::1;20029:7:::0;20047:18;;;:9;:18;;;;;;35255:11;-1:-1:-1;35230:36:0::1;35222:77;;;::::0;-1:-1:-1;;;35222:77:0;;12181:2:1;35222:77:0::1;::::0;::::1;12163:21:1::0;12220:2;12200:18;;;12193:30;12259;12239:18;;;12232:58;12307:18;;35222:77:0::1;11979:352:1::0;35222:77:0::1;35324:5;35320:787;;;35349:6;35345:411;35359:20:::0;;::::1;35345:411;;;35431:6;;35438:1;35431:9;;;;;;;:::i;:::-;;;;;;;35404;:23;35414:9;;35424:1;35414:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35404:23:0::1;-1:-1:-1::0;;;;;35404:23:0::1;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;35484:6:0;;-1:-1:-1;35484:6:0;35491:1;35484:9;;::::1;;;;;:::i;:::-;;;;;;;35459;:21;35469:10;-1:-1:-1::0;;;;;35459:21:0::1;-1:-1:-1::0;;;;;35459:21:0::1;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;35553:1:0::1;::::0;-1:-1:-1;35541:6:0;;35548:1;35541:9;;::::1;;;;;:::i;:::-;;;;;;;:13;;;;:::i;:::-;35512:10;:24;35523:9;;35533:1;35523:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35512:24:0::1;-1:-1:-1::0;;;;;35512:24:0::1;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;35599:4:0::1;::::0;-1:-1:-1;35574:8:0::1;:22;35583:9:::0;;35593:1;35583:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35574:22:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35574:22:0;:29;;-1:-1:-1;;35574:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;35622:11:::1;::::0;::::1;:20;35643:9:::0;;35653:1;35643:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;35657:6;;35664:1;35657:9;;;;;;;:::i;:::-;;;;;;;35669:1;35657:13;;;;:::i;:::-;35622:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35716:9;;35726:1;35716:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35695:45:0::1;35704:10;-1:-1:-1::0;;;;;;;;;;;35730:6:0;;35737:1;35730:9;;::::1;;;;;:::i;:::-;;;;;;;35695:45;;;;898:25:1::0;;886:2;871:18;;752:177;35695:45:0::1;;;;;;;;35381:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35345:411;;;;35320:787;;;35803:6;35799:297;35813:20:::0;;::::1;35799:297;;;35885:6;;35892:1;35885:9;;;;;;;:::i;:::-;;;;;;;35858;:23;35868:9;;35878:1;35868:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35858:23:0::1;-1:-1:-1::0;;;;;35858:23:0::1;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;35938:6:0;;-1:-1:-1;35938:6:0;35945:1;35938:9;;::::1;;;;;:::i;:::-;;;;;;;35913;:21;35923:10;-1:-1:-1::0;;;;;35913:21:0::1;-1:-1:-1::0;;;;;35913:21:0::1;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;35966:11:0::1;::::0;-1:-1:-1;;;;;35966:11:0::1;:20;35987:9:::0;;35997:1;35987:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;36001:6;;36008:1;36001:9;;;;;;;:::i;:::-;;;;;;;35966:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;36056:9;;36066:1;36056:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36035:45:0::1;36044:10;-1:-1:-1::0;;;;;;;;;;;36070:6:0;;36077:1;36070:9;;::::1;;;;;:::i;:::-;;;;;;;36035:45;;;;898:25:1::0;;886:2;871:18;;752:177;36035:45:0::1;;;;;;;;35835:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35799:297;;;;34967:1149;34865:1251:::0;;;;;:::o;23922:72::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;23972:6:::1;:14:::0;;-1:-1:-1;;23972:14:0::1;::::0;;23922:72::o;3232:97::-;3392:4;3427:5;-1:-1:-1;;;;;3427:5:0;2907:10;3416:16;2891:38;;;;-1:-1:-1;;;2891:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3294:19:0::1;3316:5;3294:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;3294:27:0::1;::::0;;3232:97::o;3666:173::-;3392:4;3427:5;-1:-1:-1;;;;;3427:5:0;2907:10;3416:16;2891:38;;;;-1:-1:-1;;;2891:38:0;;;;;;;:::i;:::-;3742:5:::1;:11:::0;;-1:-1:-1;;;;;;3742:11:0::1;-1:-1:-1::0;;;;;3742:11:0;::::1;::::0;;::::1;::::0;;3764:19;;;:14:::1;:19;::::0;;;;;;;;:26;;-1:-1:-1;;3764:26:0::1;-1:-1:-1::0;3764:26:0::1;::::0;;3806:25;;3252:51:1;;;3806:25:0::1;::::0;3225:18:1;3806:25:0::1;;;;;;;3666:173:::0;:::o;24276:404::-;17759:6;:13;;-1:-1:-1;;17759:13:0;;;;;24344:9:::1;17759:13:::0;24380:24:::1;24398:4;-1:-1:-1::0;;;;;20047:18:0;20029:7;20047:18;;;:9;:18;;;;;;;19963:105;24380:24:::1;24419:6;::::0;:213:::1;::::0;-1:-1:-1;;;24419:213:0;;24482:4:::1;24419:213;::::0;::::1;12893:34:1::0;;;12943:18;;;12936:34;;;24419:6:0::1;12986:18:1::0;;;12979:34;;;13029:18;;;13022:34;13072:19;;;13065:44;24602:15:0::1;13125:19:1::0;;;13118:35;24364:40:0;;-1:-1:-1;;;;;;24419:6:0::1;::::0;:22:::1;::::0;24449:5;;12827:19:1;;24419:213:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;24652:20:0::1;::::0;;3027:25:1;;;3083:2;3068:18;;3061:34;;;24652:20:0::1;::::0;-1:-1:-1;3000:18:1;24652:20:0::1;;;;;;;-1:-1:-1::0;;17777:6:0;:14;;-1:-1:-1;;17777:14:0;;;24276:404::o;24138:130::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24227:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;24227:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24138:130::o;24002:128::-;2989:24;3002:10;2989:12;:24::i;:::-;2981:48;;;;-1:-1:-1;;;2981:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24090:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;24090:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24002:128::o;3448:107::-;-1:-1:-1;;;;;3528:19:0;3504:4;3528:19;;;:14;:19;;;;;;;;;3448:107::o;776:250::-;834:7;858:1;863;858:6;854:47;;-1:-1:-1;888:1:0;881:8;;854:47;913:9;925:5;929:1;925;:5;:::i;:::-;913:17;-1:-1:-1;958:1:0;949:5;953:1;913:17;949:5;:::i;:::-;:10;941:56;;;;-1:-1:-1;;;941:56:0;;13677:2:1;941:56:0;;;13659:21:1;13716:2;13696:18;;;13689:30;13755:34;13735:18;;;13728:62;-1:-1:-1;;;13806:18:1;;;13799:31;13847:19;;941:56:0;13475:397:1;1032:132:0;1090:7;1117:39;1121:1;1124;1117:39;;;;;;;;;;;;;;;;;:3;:39::i;249:181::-;307:7;;339:5;343:1;339;:5;:::i;:::-;327:17;;368:1;363;:6;;355:46;;;;-1:-1:-1;;;355:46:0;;14079:2:1;355:46:0;;;14061:21:1;14118:2;14098:18;;;14091:30;14157:29;14137:18;;;14130:57;14204:18;;355:46:0;13877:351:1;578:192:0;664:7;700:12;692:6;;;;684:29;;;;-1:-1:-1;;;684:29:0;;;;;;;;:::i;:::-;-1:-1:-1;724:9:0;736:5;740:1;736;:5;:::i;:::-;724:17;578:192;-1:-1:-1;;;;;578:192:0:o;30951:3906::-;31043:4;-1:-1:-1;;;;;31070:20:0;;31062:70;;;;-1:-1:-1;;;31062:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31151:23:0;;31143:71;;;;-1:-1:-1;;;31143:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31231:22:0;;;;;;:14;:22;;;;;;;;;:50;;-1:-1:-1;;;;;;31256:25:0;;;;;;:14;:25;;;;;;;;31231:50;:60;;;-1:-1:-1;31285:6:0;;;;;;;31231:60;31227:140;;;31314:41;31329:6;31337:9;31348:6;31314:14;:41::i;:::-;31307:48;;;;31227:140;31392:2;;-1:-1:-1;;;;;31382:12:0;;;31392:2;;31382:12;;:31;;-1:-1:-1;31411:2:0;;-1:-1:-1;;;;;31398:15:0;;;31411:2;;31398:15;31382:31;31381:44;;;;-1:-1:-1;31418:7:0;;;;31381:44;31377:121;;;31448:38;31460:6;31468:9;31479:6;31448:11;:38::i;31377:121::-;-1:-1:-1;;;;;31514:16:0;;;;;;:8;:16;;;;;;;;;:35;;-1:-1:-1;;;;;;31534:15:0;;;;;;:7;:15;;;;;;;;31514:35;31510:124;;;-1:-1:-1;;;;;31594:18:0;;;;;;:10;:18;;;;;;:27;;31615:6;;31594:27;:::i;:::-;-1:-1:-1;;;;;20047:18:0;;20029:7;20047:18;;;:9;:18;;;;;;31573:48;;31565:57;;;;;;-1:-1:-1;;;;;31650:22:0;;;;;;:14;:22;;;;;;;;31649:23;:53;;;;-1:-1:-1;;;;;;31677:25:0;;;;;;:14;:25;;;;;;;;31676:26;31649:53;31646:137;;;31726:13;;;;;;;;:21;;:13;:21;31718:53;;;;-1:-1:-1;;;31718:53:0;;14435:2:1;31718:53:0;;;14417:21:1;14474:2;14454:18;;;14447:30;-1:-1:-1;;;14493:18:1;;;14486:50;14553:18;;31718:53:0;14233:344:1;31718:53:0;31799:6;;;;31795:76;;;31821:38;31833:6;31841:9;31852:6;31821:11;:38::i;:::-;31919:4;;-1:-1:-1;;;;;31919:4:0;;;31906:17;;;;31902:2662;;31939:16;31948:6;31939:8;:16::i;:::-;31987:1;31974:10;;:14;:25;;;;-1:-1:-1;31993:6:0;;;;;;;31992:7;31974:25;:67;;;;;32029:12;32016:9;;32003:10;;:22;;;;:::i;:::-;:38;;31974:67;31970:481;;;32061:6;:13;;-1:-1:-1;;32061:13:0;;;;;32095:12;;32124:5;;-1:-1:-1;;;;;32095:12:0;;;;:20;;32124:5;32131:12;:10;:12::i;:::-;32095:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;32169:5:0;;32178:10;;32190:12;;32169:49;;-1:-1:-1;;;32169:49:0;;;;;14784:25:1;;;;14825:18;;;14818:34;32212:4:0;14868:18:1;;;14861:60;-1:-1:-1;;;;;32169:5:0;;;;:8;;14757:18:1;;32169:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32165:179;;;32251:1;32238:10;:14;32284:12;32271:10;:25;32165:179;32364:12;;32393:5;;32364:38;;-1:-1:-1;;;32364:38:0;;-1:-1:-1;;;;;32364:12:0;;;;:20;;:38;;32393:5;;;32364:12;;:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;32421:6:0;:14;;-1:-1:-1;;32421:14:0;;;31970:481;32499:53;;;;;;;;;;;-1:-1:-1;;;32499:53:0;;;;;;;;-1:-1:-1;;;;;32499:17:0;;-1:-1:-1;32499:17:0;;;:9;:17;;;;;;;;:53;;32521:6;;32499:21;:53::i;:::-;-1:-1:-1;;;;;32479:17:0;;;;;;;:9;:17;;;;;;:73;;;;32592:20;;;;;;;:32;;32617:6;32592:24;:32::i;:::-;-1:-1:-1;;;;;32569:20:0;;;;;;;:9;:20;;;;;;;;:55;;;;32646:16;;;;;:8;:16;;;;;;;32641:299;;-1:-1:-1;;;;;32686:24:0;;;;;;:16;:24;;;;;;;;32682:119;;32717:11;;-1:-1:-1;;;;;32767:18:0;;;32717:11;32767:18;;;:10;:18;;;;;;;;;32747:9;:17;;;;;;;32717:11;;;;;:20;;32738:6;;32747:38;;;:::i;:::-;32717:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32713:86;;31902:2662;;32641:299;-1:-1:-1;;;;;32852:16:0;;;;;;:8;:16;;;;;;;;32849:91;;;32875:11;;-1:-1:-1;;;;;32904:17:0;;;32875:11;32904:17;;;:9;:17;;;;;;32875:11;;;:20;;32896:6;;32904:21;;32924:1;32904:21;:::i;31902:2662::-;32997:4;;-1:-1:-1;;;;;32997:4:0;;;32987:14;;;;32984:1580;;-1:-1:-1;;;;;33021:26:0;;33042:4;33021:26;;;;:47;;-1:-1:-1;33064:4:0;;-1:-1:-1;;;;;33051:17:0;;;33064:4;;33051:17;;33021:47;33017:213;;;33101:10;;:22;;33116:6;33101:14;:22::i;:::-;33088:10;:35;-1:-1:-1;;;;;33142:19:0;;;;;;:8;:19;;;;;33164:12;33142:34;;33195:7;:19;;-1:-1:-1;;;;;;33195:19:0;;;;;;33017:213;33264:53;;;;;;;;;;;-1:-1:-1;;;33264:53:0;;;;;;;;-1:-1:-1;;;;;33264:17:0;;-1:-1:-1;33264:17:0;;;:9;:17;;;;;;;;:53;;33286:6;;33264:21;:53::i;:::-;-1:-1:-1;;;;;33244:17:0;;;;;;;:9;:17;;;;;;:73;;;;33357:20;;;;;;;:32;;33382:6;33357:24;:32::i;:::-;-1:-1:-1;;;;;33334:20:0;;;;;;:9;:20;;;;;;;;:55;;;;33411:8;:19;;;;;;33406:323;;-1:-1:-1;;;;;33454:27:0;;;;;;:16;:27;;;;;;;;33450:131;;33488:11;;-1:-1:-1;;;;;33544:21:0;;;33488:11;33544:21;;;:10;:21;;;;;;;;;33521:9;:20;;;;;;;33488:11;;;;;:20;;33509:9;;33521:44;;;:::i;33406:323::-;-1:-1:-1;;;;;33632:19:0;;;;;;:8;:19;;;;;;;;33629:100;;;33658:11;;-1:-1:-1;;;;;33690:20:0;;;33658:11;33690:20;;;:9;:20;;;;;;33658:11;;;:20;;33679:9;;33690:24;;33713:1;33690:24;:::i;32984:1580::-;33793:16;33802:6;33793:8;:16::i;:::-;33846:53;;;;;;;;;;;-1:-1:-1;;;33846:53:0;;;;;;;;-1:-1:-1;;;;;33846:17:0;;-1:-1:-1;33846:17:0;;;:9;:17;;;;;;;;:53;;33868:6;;33846:21;:53::i;:::-;-1:-1:-1;;;;;33826:17:0;;;;;;;:9;:17;;;;;;:73;;;;33939:20;;;;;;;:32;;33964:6;33939:24;:32::i;:::-;-1:-1:-1;;;;;33916:20:0;;;;;;;:9;:20;;;;;;;;:55;;;;33991:16;;;;;:8;:16;;;;;;;33990:17;:41;;;;-1:-1:-1;;;;;;34012:19:0;;;;;;:8;:19;;;;;;;;34011:20;33990:41;33986:348;;;-1:-1:-1;;;;;34055:24:0;;;;;;:16;:24;;;;;;;;34051:119;;34086:11;;-1:-1:-1;;;;;34136:18:0;;;34086:11;34136:18;;;:10;:18;;;;;;;;;34116:9;:17;;;;;;;34086:11;;;;;:20;;34107:6;;34116:38;;;:::i;:::-;34086:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34082:86;;-1:-1:-1;;;;;34192:27:0;;;;;;:16;:27;;;;;;;;34188:131;;34226:11;;-1:-1:-1;;;;;34282:21:0;;;34226:11;34282:21;;;:10;:21;;;;;;;;;34259:9;:20;;;;;;;34226:11;;;;;:20;;34247:9;;34259:44;;;:::i;:::-;34226:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34222:95;;-1:-1:-1;;;;;34351:16:0;;;;;;:8;:16;;;;;;;;34348:91;;;34374:11;;-1:-1:-1;;;;;34403:17:0;;;34374:11;34403:17;;;:9;:17;;;;;;34374:11;;;:20;;34395:6;;34403:21;;34423:1;34403:21;:::i;:::-;34374:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34370:67;;-1:-1:-1;;;;;34456:19:0;;;;;;:8;:19;;;;;;;;34453:100;;;34482:11;;-1:-1:-1;;;;;34514:20:0;;;34482:11;34514:20;;;:9;:20;;;;;;34482:11;;;:20;;34503:9;;34514:24;;34537:1;34514:24;:::i;:::-;34482:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34478:73;;34607:15;;;;34603:103;;;34642:4;;:41;;-1:-1:-1;;;34642:41:0;;-1:-1:-1;;;;;15477:15:1;;;34642:41:0;;;15459:34:1;15529:15;;;15509:18;;;15502:43;15561:18;;;15554:34;;;34642:4:0;;;;:14;;15394:18:1;;34642:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34638:57;;34724:11;;:27;;-1:-1:-1;;;;;;34724:27:0;;34744:6;34724:27;;;898:25:1;-1:-1:-1;;;;;34724:11:0;;;;:19;;871:18:1;;34724:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34720:43;;34805:9;-1:-1:-1;;;;;34788:35:0;34797:6;-1:-1:-1;;;;;34788:35:0;-1:-1:-1;;;;;;;;;;;34816:6:0;34788:35;;;;898:25:1;;886:2;871:18;;752:177;34788:35:0;;;;;;;;-1:-1:-1;34845:4:0;30951:3906;;;;;:::o;26098:183::-;26154:5;;:30;;-1:-1:-1;;;26154:30:0;;26178:4;26154:30;;;3252:51:1;26136:15:0;;-1:-1:-1;;;;;26154:5:0;;:15;;3225:18:1;;26154:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26195:5;;26229:4;;26195:48;;-1:-1:-1;;;26195:48:0;;26222:4;26195:48;;;15459:34:1;-1:-1:-1;;;;;26229:4:0;;;15509:18:1;;;15502:43;15561:18;;;15554:34;;;26136:48:0;;-1:-1:-1;26195:5:0;;:18;;15394::1;;26195:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26254:12;;;;;;;;;-1:-1:-1;;;;;26254:12:0;-1:-1:-1;;;;;26254:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20570:330;20700:53;;;;;;;;;;;-1:-1:-1;;;20700:53:0;;;;;;;;-1:-1:-1;;;;;20700:17:0;;20663:4;20700:17;;;:9;:17;;;;;;;:53;;20722:6;;20700:21;:53::i;:::-;-1:-1:-1;;;;;20680:17:0;;;;;;;:9;:17;;;;;;:73;;;;20787:20;;;;;;;:32;;20812:6;20787:24;:32::i;:::-;-1:-1:-1;;;;;20764:20:0;;;;;;;:9;:20;;;;;;;:55;;;;20835:35;;;;;;-1:-1:-1;;;;;;;;;;;20835:35:0;;;20863:6;898:25:1;;886:2;871:18;;752:177;1170:345:0;1256:7;1358:12;1351:5;1343:28;;;;-1:-1:-1;;;1343:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1382:9:0;1394:5;1398:1;1394;:5;:::i;29028:981::-;29155:53;;;;;;;;;;;-1:-1:-1;;;29155:53:0;;;;;;;;-1:-1:-1;;;;;29155:17:0;;29118:4;29155:17;;;:9;:17;;;;;;;:53;;29177:6;;29155:21;:53::i;:::-;-1:-1:-1;;;;;29135:17:0;;;;;;;:9;:17;;;;;;:73;;;;29242:20;;;;;;;:32;;29267:6;29242:24;:32::i;:::-;-1:-1:-1;;;;;29219:20:0;;;;;;;:9;:20;;;;;:55;;;;29301:4;;;;29291:14;;;;29287:81;;29334:10;;:22;;29349:6;29334:14;:22::i;:::-;29321:10;:35;29287:81;-1:-1:-1;;;;;29385:16:0;;;;;;:8;:16;;;;;;;;29384:17;:41;;;;-1:-1:-1;;;;;;29406:19:0;;;;;;:8;:19;;;;;;;;29405:20;29384:41;29380:336;;;-1:-1:-1;;;;;29445:24:0;;;;;;:16;:24;;;;;;;;29441:119;;29476:11;;-1:-1:-1;;;;;29526:18:0;;;29476:11;29526:18;;;:10;:18;;;;;;;;;29506:9;:17;;;;;;;29476:11;;;;;:20;;29497:6;;29506:38;;;:::i;:::-;29476:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29472:86;;-1:-1:-1;;;;;29578:27:0;;;;;;:16;:27;;;;;;;;29574:131;;29612:11;;-1:-1:-1;;;;;29668:21:0;;;29612:11;29668:21;;;:10;:21;;;;;;;;;29645:9;:20;;;;;;;29612:11;;;;;:20;;29633:9;;29645:44;;;:::i;:::-;29612:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29608:95;;-1:-1:-1;;;;;29729:16:0;;;;;;:8;:16;;;;;;;;29726:91;;;29752:11;;-1:-1:-1;;;;;29781:17:0;;;29752:11;29781:17;;;:9;:17;;;;;;29752:11;;;:20;;29773:6;;29781:21;;29801:1;29781:21;:::i;:::-;29752:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29748:67;;-1:-1:-1;;;;;29830:19:0;;;;;;:8;:19;;;;;;;;29827:100;;;29856:11;;-1:-1:-1;;;;;29888:20:0;;;29856:11;29888:20;;;:9;:20;;;;;;29856:11;;;:20;;29877:9;;29888:24;;29911:1;29888:24;:::i;:::-;29856:57;;;;;;;;;;;;;;;;:::i;28061:620::-;-1:-1:-1;;;;;28164:22:0;;;;;;:14;:22;;;;;;;;28163:23;:53;;;;-1:-1:-1;;;;;;28190:26:0;;28211:4;28190:26;;28163:53;:80;;;;-1:-1:-1;;;;;;28220:23:0;;28238:4;28220:23;;28163:80;:125;;;;-1:-1:-1;28283:4:0;;-1:-1:-1;;;;;28262:26:0;;;28283:4;;28262:26;;28163:125;:146;;;;-1:-1:-1;28305:4:0;;-1:-1:-1;;;;;28292:17:0;;;28305:4;;28292:17;;28163:146;:177;;;;-1:-1:-1;28326:14:0;;-1:-1:-1;;;;;28313:27:0;;;28326:14;;;;;28313:27;;28163:177;28159:391;;;-1:-1:-1;;;;;20047:18:0;;28360;20047;;;:9;:18;;;;;;28453:15;;28429:19;28442:6;20047:18;28429:19;:::i;:::-;28428:40;;28420:114;;;;-1:-1:-1;;;28420:114:0;;15996:2:1;28420:114:0;;;15978:21:1;16035:2;16015:18;;;16008:30;16074:34;16054:18;;;16047:62;16145:32;16125:18;;;16118:60;16195:19;;28420:114:0;15794:426:1;28420:114:0;28341:209;28159:391;28580:12;;28570:6;:22;;:49;;;-1:-1:-1;;;;;;28596:23:0;;;;;;:15;:23;;;;;;;;28570:49;:79;;;-1:-1:-1;;;;;;28623:26:0;;;;;;:15;:26;;;;;;;;28570:79;28562:109;;;;-1:-1:-1;;;28562:109:0;;16427:2:1;28562:109:0;;;16409:21:1;16466:2;16446:18;;;16439:30;-1:-1:-1;;;16485:18:1;;;16478:47;16542:18;;28562:109:0;16225:341:1;25673:158:0;-1:-1:-1;;;;;25736:17:0;;;;;;:8;:17;;;;;;25757:12;25736:33;;25732:92;;25793:7;;-1:-1:-1;;;;;25793:18:0;;;:7;;:18;25785:27;;;;;24688:116;24759:12;;:37;;-1:-1:-1;;;24759:37:0;;24790:4;24759:37;;;3252:51:1;24733:7:0;;-1:-1:-1;;;;;24759:12:0;;:22;;3225:18:1;;24759:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;934:131::-;-1:-1:-1;;;;;1009:31:1;;999:42;;989:70;;1055:1;1052;1045:12;1070:315;1138:6;1146;1199:2;1187:9;1178:7;1174:23;1170:32;1167:52;;;1215:1;1212;1205:12;1167:52;1254:9;1241:23;1273:31;1298:5;1273:31;:::i;:::-;1323:5;1375:2;1360:18;;;;1347:32;;-1:-1:-1;;;1070:315:1:o;1582:118::-;1668:5;1661:13;1654:21;1647:5;1644:32;1634:60;;1690:1;1687;1680:12;1705:241;1761:6;1814:2;1802:9;1793:7;1789:23;1785:32;1782:52;;;1830:1;1827;1820:12;1782:52;1869:9;1856:23;1888:28;1910:5;1888:28;:::i;1951:456::-;2028:6;2036;2044;2097:2;2085:9;2076:7;2072:23;2068:32;2065:52;;;2113:1;2110;2103:12;2065:52;2152:9;2139:23;2171:31;2196:5;2171:31;:::i;:::-;2221:5;-1:-1:-1;2278:2:1;2263:18;;2250:32;2291:33;2250:32;2291:33;:::i;:::-;1951:456;;2343:7;;-1:-1:-1;;;2397:2:1;2382:18;;;;2369:32;;1951:456::o;2412:247::-;2471:6;2524:2;2512:9;2503:7;2499:23;2495:32;2492:52;;;2540:1;2537;2530:12;2492:52;2579:9;2566:23;2598:31;2623:5;2598:31;:::i;3546:385::-;3632:6;3640;3648;3656;3709:3;3697:9;3688:7;3684:23;3680:33;3677:53;;;3726:1;3723;3716:12;3677:53;-1:-1:-1;;3749:23:1;;;3819:2;3804:18;;3791:32;;-1:-1:-1;3870:2:1;3855:18;;3842:32;;3921:2;3906:18;3893:32;;-1:-1:-1;3546:385:1;-1:-1:-1;3546:385:1:o;3936:382::-;4001:6;4009;4062:2;4050:9;4041:7;4037:23;4033:32;4030:52;;;4078:1;4075;4068:12;4030:52;4117:9;4104:23;4136:31;4161:5;4136:31;:::i;:::-;4186:5;-1:-1:-1;4243:2:1;4228:18;;4215:32;4256:30;4215:32;4256:30;:::i;:::-;4305:7;4295:17;;;3936:382;;;;;:::o;4323:248::-;4391:6;4399;4452:2;4440:9;4431:7;4427:23;4423:32;4420:52;;;4468:1;4465;4458:12;4420:52;-1:-1:-1;;4491:23:1;;;4561:2;4546:18;;;4533:32;;-1:-1:-1;4323:248:1:o;4839:388::-;4907:6;4915;4968:2;4956:9;4947:7;4943:23;4939:32;4936:52;;;4984:1;4981;4974:12;4936:52;5023:9;5010:23;5042:31;5067:5;5042:31;:::i;:::-;5092:5;-1:-1:-1;5149:2:1;5134:18;;5121:32;5162:33;5121:32;5162:33;:::i;5232:367::-;5295:8;5305:6;5359:3;5352:4;5344:6;5340:17;5336:27;5326:55;;5377:1;5374;5367:12;5326:55;-1:-1:-1;5400:20:1;;5443:18;5432:30;;5429:50;;;5475:1;5472;5465:12;5429:50;5512:4;5504:6;5500:17;5488:29;;5572:3;5565:4;5555:6;5552:1;5548:14;5540:6;5536:27;5532:38;5529:47;5526:67;;;5589:1;5586;5579:12;5526:67;5232:367;;;;;:::o;5604:902::-;5732:6;5740;5748;5756;5764;5817:2;5805:9;5796:7;5792:23;5788:32;5785:52;;;5833:1;5830;5823:12;5785:52;5873:9;5860:23;5902:18;5943:2;5935:6;5932:14;5929:34;;;5959:1;5956;5949:12;5929:34;5998:70;6060:7;6051:6;6040:9;6036:22;5998:70;:::i;:::-;6087:8;;-1:-1:-1;5972:96:1;-1:-1:-1;6175:2:1;6160:18;;6147:32;;-1:-1:-1;6191:16:1;;;6188:36;;;6220:1;6217;6210:12;6188:36;;6259:72;6323:7;6312:8;6301:9;6297:24;6259:72;:::i;:::-;6350:8;;-1:-1:-1;6233:98:1;-1:-1:-1;;6435:2:1;6420:18;;6407:32;6448:28;6407:32;6448:28;:::i;:::-;6495:5;6485:15;;;5604:902;;;;;;;;:::o;6997:335::-;7199:2;7181:21;;;7238:2;7218:18;;;7211:30;-1:-1:-1;;;7272:2:1;7257:18;;7250:41;7323:2;7308:18;;6997:335::o;7337:127::-;7398:10;7393:3;7389:20;7386:1;7379:31;7429:4;7426:1;7419:15;7453:4;7450:1;7443:15;7469:125;7534:9;;;7555:10;;;7552:36;;;7568:18;;:::i;7599:329::-;7801:2;7783:21;;;7840:1;7820:18;;;7813:29;-1:-1:-1;;;7873:2:1;7858:18;;7851:36;7919:2;7904:18;;7599:329::o;7933:398::-;8135:2;8117:21;;;8174:2;8154:18;;;8147:30;8213:34;8208:2;8193:18;;8186:62;-1:-1:-1;;;8279:2:1;8264:18;;8257:32;8321:3;8306:19;;7933:398::o;8336:401::-;8538:2;8520:21;;;8577:2;8557:18;;;8550:30;8616:34;8611:2;8596:18;;8589:62;-1:-1:-1;;;8682:2:1;8667:18;;8660:35;8727:3;8712:19;;8336:401::o;8742:399::-;8944:2;8926:21;;;8983:2;8963:18;;;8956:30;9022:34;9017:2;9002:18;;8995:62;-1:-1:-1;;;9088:2:1;9073:18;;9066:33;9131:3;9116:19;;8742:399::o;9356:128::-;9423:9;;;9444:11;;;9441:37;;;9458:18;;:::i;9489:168::-;9562:9;;;9593;;9610:15;;;9604:22;;9590:37;9580:71;;9631:18;;:::i;9662:217::-;9702:1;9728;9718:132;;9772:10;9767:3;9763:20;9760:1;9753:31;9807:4;9804:1;9797:15;9835:4;9832:1;9825:15;9718:132;-1:-1:-1;9864:9:1;;9662:217::o;9884:274::-;-1:-1:-1;;;;;10076:32:1;;;;10058:51;;10140:2;10125:18;;10118:34;10046:2;10031:18;;9884:274::o;10500:184::-;10570:6;10623:2;10611:9;10602:7;10598:23;10594:32;10591:52;;;10639:1;10636;10629:12;10591:52;-1:-1:-1;10662:16:1;;10500:184;-1:-1:-1;10500:184:1:o;10689:245::-;10756:6;10809:2;10797:9;10788:7;10784:23;10780:32;10777:52;;;10825:1;10822;10815:12;10777:52;10857:9;10851:16;10876:28;10898:5;10876:28;:::i;11707:127::-;11768:10;11763:3;11759:20;11756:1;11749:31;11799:4;11796:1;11789:15;11823:4;11820:1;11813:15;11839:135;11878:3;11899:17;;;11896:43;;11919:18;;:::i;:::-;-1:-1:-1;11966:1:1;11955:13;;11839:135::o;13164:306::-;13252:6;13260;13268;13321:2;13309:9;13300:7;13296:23;13292:32;13289:52;;;13337:1;13334;13327:12;13289:52;13366:9;13360:16;13350:26;;13416:2;13405:9;13401:18;13395:25;13385:35;;13460:2;13449:9;13445:18;13439:25;13429:35;;13164:306;;;;;:::o

Swarm Source

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