ETH Price: $2,954.32 (-3.61%)
Gas: 2 Gwei

Token

Wall Finance (WALL)
 

Overview

Max Total Supply

21,000,000,000 WALL

Holders

18

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
105,000,000 WALL

Value
$0.00
0x903d4a8165C11bC4ec22a2A2C1f00dFcE205C18E
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:
wall

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 3 of 3: wall.sol
// SPDX-License-Identifier: MIT


/* 
      _____                    _____                    _____                    _____                    _____                    _____            _____  
     /\    \                  /\    \                  /\    \                  /\    \                  /\    \                  /\    \          /\    \ 
    /::\    \                /::\____\                /::\    \                /::\____\                /::\    \                /::\____\        /::\____\
    \:::\    \              /:::/    /               /::::\    \              /:::/    /               /::::\    \              /:::/    /       /:::/    /
     \:::\    \            /:::/    /               /::::::\    \            /:::/   _/___            /::::::\    \            /:::/    /       /:::/    / 
      \:::\    \          /:::/    /               /:::/\:::\    \          /:::/   /\    \          /:::/\:::\    \          /:::/    /       /:::/    /  
       \:::\    \        /:::/____/               /:::/__\:::\    \        /:::/   /::\____\        /:::/__\:::\    \        /:::/    /       /:::/    /   
       /::::\    \      /::::\    \              /::::\   \:::\    \      /:::/   /:::/    /       /::::\   \:::\    \      /:::/    /       /:::/    /    
      /::::::\    \    /::::::\    \   _____    /::::::\   \:::\    \    /:::/   /:::/   _/___    /::::::\   \:::\    \    /:::/    /       /:::/    /     
     /:::/\:::\    \  /:::/\:::\    \ /\    \  /:::/\:::\   \:::\    \  /:::/___/:::/   /\    \  /:::/\:::\   \:::\    \  /:::/    /       /:::/    /      
    /:::/  \:::\____\/:::/  \:::\    /::\____\/:::/__\:::\   \:::\____\|:::|   /:::/   /::\____\/:::/  \:::\   \:::\____\/:::/____/       /:::/____/       
   /:::/    \::/    /\::/    \:::\  /:::/    /\:::\   \:::\   \::/    /|:::|__/:::/   /:::/    /\::/    \:::\  /:::/    /\:::\    \       \:::\    \       
  /:::/    / \/____/  \/____/ \:::\/:::/    /  \:::\   \:::\   \/____/  \:::\/:::/   /:::/    /  \/____/ \:::\/:::/    /  \:::\    \       \:::\    \      
 /:::/    /                    \::::::/    /    \:::\   \:::\    \       \::::::/   /:::/    /            \::::::/    /    \:::\    \       \:::\    \     
/:::/    /                      \::::/    /      \:::\   \:::\____\       \::::/___/:::/    /              \::::/    /      \:::\    \       \:::\    \    
\::/    /                       /:::/    /        \:::\   \::/    /        \:::\__/:::/    /               /:::/    /        \:::\    \       \:::\    \   
 \/____/                       /:::/    /          \:::\   \/____/          \::::::::/    /               /:::/    /          \:::\    \       \:::\    \  
                              /:::/    /            \:::\    \               \::::::/    /               /:::/    /            \:::\    \       \:::\    \ 
                             /:::/    /              \:::\____\               \::::/    /               /:::/    /              \:::\____\       \:::\____\
                             \::/    /                \::/    /                \::/____/                \::/    /                \::/    /        \::/    /
                              \/____/                  \/____/                  ~~                       \/____/                  \/____/          \/____/ 
                                                                                                                                                           
*
*
* The Wall - Stability growth 
* Created by Colangius 2022
* Official Website: https://thewall.finance
* Github: https://github.com/wallfinance
* Twitter: https://twitter.com/wall_financeETH
* Medium: https://medium.com/@thewallfinance
*/

pragma solidity 0.8.13;

import './IUniswapV2Pair.sol';
import './IERC20.sol';


interface IFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

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

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

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

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

contract Ownable is Context {
    address private _owner;
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
    }
    function owner() public view returns (address) { return _owner; }
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner.");
        _;
    }
    function renounceOwnership() external virtual onlyOwner { _owner = address(0); }
    function transferOwnership(address newOwner) external virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address.");
        _owner = newOwner;
    }
}

contract wall is IERC20, Ownable {
    
    event TransferReceived(address _from, uint _amount);
    event TransferSent(address _from, address _destAddr, uint _amount);
    
    IRouter public uniswapV2Router;
    address public uniswapV2Pair;
    string private constant _name =  "Wall Finance";
    string private constant _symbol = "WALL";
    uint8 private constant _decimals = 18;
    mapping (address => uint256) private balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    // Token number and initial supply
    uint256 private _totalSupply = 21000000000 * 10**18; 
    uint256 private constant _initialTotalSupply = 21000000000 * 10**18; 
    mapping (address => bool) public automatedMarketMakerPairs;
    bool private isLiquidityAdded = false;
    address public liquidityWallet;
    address public marketingWallet;
    address public investmentWallet;
    address public devWallet;
    uint256 private _launchTimestamp;
    mapping (address => uint256) private addressAmount;
    address public constant deadWallet = 0x000000000000000000000000000000000000dEaD;
    uint256 public maxTxAmount = _totalSupply;
    uint256 public maxWalletAmount = _totalSupply;
    uint private launchBlock;   // When contract was launched
    /* Invariable TAX AMOUNT */
    uint constant buyTaxCostant = 4;
    uint constant sellTaxCostant = 4;
    /* Tax for operations */
    uint sellTax = sellTaxCostant;
    uint buyTax = buyTaxCostant;
    /* Tax percentage for different use */
    uint256 toMarketing;
    uint256 toDev;
    uint256 toInvestment;
    /* Value of the new calculated wall */
    uint256 calculatedNewWall = 0;         // Initial state
    uint arrayOfETHLPValueLength;       // Will contain the lenth of the LPETH value array
    /* Setting up whitelist */
    mapping (address =>bool) private whitelistedWallet;
    mapping (address =>bool) private sniperkiller;
    /* This will create the wall based on market cap */
    uint256 ethWallCurrent;             // WEI 10**18 precision
    uint256 ethInLPBeforeTransfer;          // WEI 10**18 precision
    uint256 tokenToAllocateForMarketing = (_totalSupply * 25)/100;
    uint256 amountAllocatedForPublicSale = _totalSupply - (_totalSupply * 25)/100;

    uint256 minimumTokensBeforeSwap = amountAllocatedForPublicSale * 250 / 1000000; // .025%
    // Track pair address
    address public pairAddressOfTokenETH;
    // Register LPETH -> Block Number in an array
    uint256[] public ETHLPVariationOnBlocks;
    address public _owner ;
    
   
    constructor() {
        IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 
        uniswapV2Router = _uniswapV2Router;
        liquidityWallet = owner();
        whitelistedWallet[address(uniswapV2Router)] = true;
        whitelistedWallet[address(this)] = true;
        whitelistedWallet[devWallet] = true;
        whitelistedWallet[marketingWallet] = true;
        whitelistedWallet[investmentWallet] = true;
        whitelistedWallet[owner()] = true;
        whitelistedWallet[deadWallet] = true;
        // Set the owner
        _owner = msg.sender;
        // Fill owner's wallet with 20% of token for marketing and staking purpose
        balances[liquidityWallet] = tokenToAllocateForMarketing;
        emit Transfer(address(this), liquidityWallet, tokenToAllocateForMarketing);

        // Fill contract with tokens
        balances[address(this)] = amountAllocatedForPublicSale;
        emit Transfer(address(0), address(this), amountAllocatedForPublicSale);
    }

    receive() external payable {
        /* Contract can receive ETH and other token to its address */
        balances[msg.sender] += msg.value;
    } 

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom( address sender,address recipient,uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        require(amount <= _allowances[sender][_msgSender()], "ERC20: transfer amount exceeds allowance.");
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool){
        _approve(_msgSender(),spender,_allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        require(subtractedValue <= _allowances[_msgSender()][spender], "ERC20: decreased allownace below zero.");
        _approve(_msgSender(),spender,_allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function _approve(address owner, address spender,uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
    }

    function withdrawStuckETH() external {
        require(msg.sender == _owner);
        require(address(this).balance > 0, "cannot send more than contract balance.");
        uint256 amount = address(this).balance;
        (bool success,) = _owner.call{value : amount}("");
        require(success, "error withdrawing ETH from contract.");
    }

    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(newValue != maxWalletAmount, "cannot update maxWalletAmount to same value.");
        require(newValue > amountAllocatedForPublicSale * 1 / 100, "maxWalletAmount must be >1% of total supply.");
        maxWalletAmount = newValue;
    }

    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(newValue != maxTxAmount, "cannot update maxTxAmount to same value.");
        require(newValue > amountAllocatedForPublicSale * 1 / 1000, "maxTxAmount must be > .1% of total supply.");
        maxTxAmount = newValue;
    }
    function activateTrading() external onlyOwner {
        require(!isLiquidityAdded, "you can only add liquidity once.");
        isLiquidityAdded = true;
       _approve(address(this), address(uniswapV2Router), amountAllocatedForPublicSale);
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this), amountAllocatedForPublicSale, 0, 0, _msgSender(), block.timestamp);
        // Get the pair on Uniswap
        address _uniswapV2Pair = IFactory(uniswapV2Router.factory()).getPair(address(this), uniswapV2Router.WETH() );
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        _launchTimestamp = block.timestamp;
        maxWalletAmount = amountAllocatedForPublicSale * 2 / 100; //  2%
        maxTxAmount = amountAllocatedForPublicSale * 2 / 100;     //  2%
        // Exclude system wallet to limit
        whitelistedWallet[_uniswapV2Pair] = true;
        // Register pair in global variable
        pairAddressOfTokenETH = _uniswapV2Pair;
        // Register when trading was activated
        launchBlock = block.number;
        // Set the wall initially to 0
        ethWallCurrent = 0;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "automated market maker pair is already set to that value.");
        automatedMarketMakerPairs[pair] = value;
    }

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

    function _transfer(address from, address to, uint256 amount) internal {
        require(from != address(0), "cannot transfer from the zero address.");
        require(to != address(0), "cannot transfer to the zero address.");
        require(amount > 0, "transfer amount must be greater than zero.");
        require(amount <= balanceOf(from), "cannot transfer more than balance.");

        if (from == uniswapV2Pair)  {

            // Check if the wallet is whitelisted or not
            if(checkWalletForWhitelisting(to))  { buyTax = 0; }

            if (!whitelistedWallet[to]) {
                require((balanceOf(to) + amount) <= maxWalletAmount, "expected wallet amount exceeds the maxWalletAmount.");
                require(amount <= maxTxAmount, "transfer amount exceeds the maxTxAmount.");
            }
            // Execute transaction
            balances[from] -= amount;
            balances[to] += amount - (amount * (buyTax) / 100);
            
            /* Send TAX to contract*/
            balances[address(this)] += (amount * (buyTax)) / 100;
            emit Transfer(from, address(this), (amount * (buyTax) / 100));              
            /* End of sending TAX to contract */

            emit Transfer(from, to, amount - (amount * (buyTax) / 100));              
            // End of transaction

            /* Register the LP value of ETH in the array */
            ETHLPVariationOnBlocks.push(extractETHValueDynamicallyDiscovered());
            // Calculate length of array
            arrayOfETHLPValueLength = ETHLPVariationOnBlocks.length;
        
            /* New wall calculation based on math of previous transactions */
            
            // To avoid overflow
            if (arrayOfETHLPValueLength >= 3)  {
                uint256 previousValue = ETHLPVariationOnBlocks[arrayOfETHLPValueLength-3];
                calculatedNewWall = previousValue + ((previousValue * 1) / 1000);
                if(extractETHValueDynamicallyDiscovered() >= calculatedNewWall) {
                    ethWallCurrent = previousValue;
                }
            }

        
            if (balanceOf(address(this)) > minimumTokensBeforeSwap) {
                _swapTokensForETH(balanceOf(address(this)));
                /* 
                 *
                 * Tax division:
                 *
                 * Marketing: 30%
                 * Dev: 30%
                 * Investment: 40% (will be diverted to selected staking pool for community)
                 *
                 */ 
                
                // Calculate correct percentage. Little correction are to guarantee that fees are always paid to ERC20 system
                toMarketing = (address(this).balance * 29) / 100;
                toDev = (address(this).balance * 29) / 100;
                toInvestment = (address(this).balance * 39) / 100;

                // Execute funds transfer
                payable(marketingWallet).transfer(toMarketing);
                payable(devWallet).transfer(toDev);
                payable(investmentWallet).transfer(toInvestment);

            }
        }

        if (to == uniswapV2Pair)    {

            if (!whitelistedWallet[from]) {
                require(amount <= maxTxAmount, "transfer amount exceeds the maxTxAmount.");
            }
            
            // Check if we can sell, based on calculation over the wall. If selling is forbidden, tax is elevated to 28%
            if (extractETHValueDynamicallyDiscovered() < ethWallCurrent)    {
                // Tax is 25% but selling is possibile
                sellTax = 25;
            }

            // Sniperkille on sell check
            if(sniperkiller[from]) {
                require(sniperkiller[from] == false);
            }
            
            // Check if the wallet is whitelisted or not
            if(checkWalletForWhitelisting(from))  { sellTax = 0; }
            
            // Execute transfer
            balances[from] -= amount;
            balances[to] += amount - (amount * (sellTax) / 100);
            
            /* Send TAX to contract*/
            balances[address(this)] += (amount * (sellTax)) / 100;
            emit Transfer(from, address(this), (amount * (sellTax) / 100));              
            /* End of sending TAX to contract */

            emit Transfer(from, to, amount - (amount * (sellTax) / 100));

            /* Register the LP value of ETH in the array */
            ETHLPVariationOnBlocks.push(extractETHValueDynamicallyDiscovered());

            if (balanceOf(address(this)) > minimumTokensBeforeSwap) {
                _swapTokensForETH(balanceOf(address(this)));
                /* 
                 *
                 * Tax division:
                 *
                 * Marketing: 30%
                 * Dev: 30%
                 * Investment: 40% (will be diverted to selected staking pool for community)
                 *
                 */ 
                
                // Calculate correct percentage. Little correction are to guarantee that fees are always paid to ERC20 system
                toMarketing = (address(this).balance * 29) / 100;
                toDev = (address(this).balance * 29) / 100;
                toInvestment = (address(this).balance * 39) / 100;

                // Execute funds transfer
                payable(marketingWallet).transfer(toMarketing);
                payable(devWallet).transfer(toDev);
                payable(investmentWallet).transfer(toInvestment);
            }
            // Set sell tax to normal value
            sellTax = sellTaxCostant;
        }

        if (to != uniswapV2Pair && from != uniswapV2Pair)    {
            // Check if the wallet is whitelisted or not

            if (!whitelistedWallet[to] || !whitelistedWallet[from]) {
                require((balanceOf(to) + amount) <= maxWalletAmount, "expected wallet amount exceeds the maxWalletAmount.");
            }
            // Execute transfer Wallet to Wallet
            balances[from] -= amount;
            balances[to] += amount;              
            emit Transfer(from, to, amount);    
        }
    }

    function _swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);
    }

    function withdrawStuckToken(IERC20 token, address to) public {
        require(msg.sender == _owner);
        // If someone send some wrong token to this contract, this function allow the owner to save that funds
        uint256 erc20balance = token.balanceOf(address(this));
        token.transfer(to, erc20balance);
        emit TransferSent(msg.sender, to, erc20balance);
    }  

    /* Function for PAIR manipulation and calculation over MarketCap */


   function extractETHValueDynamicallyDiscovered() public view returns (uint)   {
       IUniswapV2Pair pair = IUniswapV2Pair(pairAddressOfTokenETH);
        //IERC20 token1 = IERC20(pair.token1()); // function `token1()`
        (uint Res0, uint Res1,) = pair.getReserves();
        // Problem is: i dont know and cannot know if is Res0 or Res1 the Wall token. It's quite random and i need to calculate what i'm extracting 
        // This method will return WALL. Given that i exactply know it's number.. should be easy. We know that WALL are > than ETH
        // return variable. This will be read by dAPP!
        uint returnValueOfEth;

        if (Res0 > Res1)    {
            returnValueOfEth = Res1;
        }
        else {
            returnValueOfEth = Res0;
        }
        return returnValueOfEth;
   }

    function tokenPrice() public view returns(uint)  {
        IUniswapV2Pair pair = IUniswapV2Pair(pairAddressOfTokenETH);
        //IERC20 token1 = IERC20(pair.token1()); // function `token1()`
        (uint Res0, uint Res1,) = pair.getReserves();

        // Get the right ETH variable
        uint256 whoIsEth;
        uint256 whoIsWall;

        if (Res0 > Res1)    {
            whoIsEth = Res1;
            whoIsWall = 0;
        }
        else {
            whoIsEth = Res0;
            whoIsWall = Res1;
        }

        // decimals
        uint ethInLP = whoIsEth*(10**pair.decimals());
        // Return token price (will be read by dAPP!
        return((1*ethInLP)/whoIsWall);
   }

    /* Here all the function for varius common services */


    function setSystemWallettAddress(address newMarketing, address newDev, address newInvestment) public onlyOwner    {
        marketingWallet = newMarketing;
        devWallet = newDev;
        investmentWallet = newInvestment;
        whitelistedWallet[newMarketing] = true;
        whitelistedWallet[newDev] = true;
        whitelistedWallet[newInvestment] = true;
    }

    function getTax() public view returns(uint,uint)   {
        return (buyTax, sellTax);
    }
    
    function setTax(uint newBuyTax, uint newSellTax) public onlyOwner   {
        buyTax = newBuyTax;
        sellTax = newSellTax;
    }

    function getCurrentEthWall() public view returns(uint256)   {
        return ethWallCurrent;
    }

    function setCurrentEthWall(uint256 newWall) public onlyOwner   {
        ethWallCurrent = newWall;
    }
    

    function addToWhitelist(address addressToWhitelist) public onlyOwner    {
        // Add to whitelist
        whitelistedWallet[addressToWhitelist] = true;
    }
    
    function removeFromWhitelist(address addressToRemove) public onlyOwner    {
        // Remove from whitelist
        whitelistedWallet[addressToRemove] = false;
    }

    function checkWalletForWhitelisting(address addressToCheck) public view returns(bool)   {
        return whitelistedWallet[addressToCheck];
    }
    
    function tokenInContract() public view returns (uint256)    {
        return balances[address(this)];
    }

    function getSystemWallet() public view returns (address, address, address)  {
        return (marketingWallet, devWallet, investmentWallet);
    }

    function addToSniperkiller(address addressToAddSniperkiller) public onlyOwner    {
        // Add to sniperkiller
        sniperkiller[addressToAddSniperkiller] = true;
    }
    
    function removeFromSniperkiller(address addressToRemoveSniperkiller) public onlyOwner    {
        // Remove from sniperkiller
        sniperkiller[addressToRemoveSniperkiller] = false;
    }
    // Check for sniperkiller list
    function checkWalletForSniperkiller(address addressToCheckSniperkiller) public view returns(bool)   {
        return sniperkiller[addressToCheckSniperkiller];
    }
    
}

File 1 of 3: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

File 2 of 3: IUniswapV2Pair.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    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;
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"address","name":"_destAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferSent","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ETHLPVariationOnBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addressToAddSniperkiller","type":"address"}],"name":"addToSniperkiller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addressToWhitelist","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addressToCheckSniperkiller","type":"address"}],"name":"checkWalletForSniperkiller","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addressToCheck","type":"address"}],"name":"checkWalletForWhitelisting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"extractETHValueDynamicallyDiscovered","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentEthWall","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSystemWallet","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"investmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairAddressOfTokenETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addressToRemoveSniperkiller","type":"address"}],"name":"removeFromSniperkiller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addressToRemove","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newWall","type":"uint256"}],"name":"setCurrentEthWall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketing","type":"address"},{"internalType":"address","name":"newDev","type":"address"},{"internalType":"address","name":"newInvestment","type":"address"}],"name":"setSystemWallettAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyTax","type":"uint256"},{"internalType":"uint256","name":"newSellTax","type":"uint256"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tokenInContract","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice","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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526b43dacaf91c1a84ff080000006005556000600760006101000a81548160ff021916908315150217905550600554600d55600554600e55600460105560046011556000601555606460196005546200005d919062000724565b620000699190620007b4565b601b55606460196005546200007f919062000724565b6200008b9190620007b4565b6005546200009a9190620007ec565b601c55620f424060fa601c54620000b2919062000724565b620000be9190620007b4565b601d55348015620000ce57600080fd5b506000620000e1620006ba60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200018e620006c260201b60201c565b600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160176000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016017600062000424620006c260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016017600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601b5460036000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601b54604051620005fb919062000838565b60405180910390a3601c54600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601c54604051620006ab919062000838565b60405180910390a35062000855565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200073182620006eb565b91506200073e83620006eb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200077a5762000779620006f5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620007c182620006eb565b9150620007ce83620006eb565b925082620007e157620007e062000785565b5b828204905092915050565b6000620007f982620006eb565b91506200080683620006eb565b9250828210156200081c576200081b620006f5565b5b828203905092915050565b6200083281620006eb565b82525050565b60006020820190506200084f600083018462000827565b92915050565b6157ca80620008656000396000f3fe60806040526004361061028c5760003560e01c80638c0b5e221161015a578063d4698016116100c1578063e8d1c11e1161007a578063e8d1c11e14610a5f578063eec3c69514610a8a578063f115a73814610ab3578063f2fde38b14610adc578063f5648a4f14610b05578063fd24100f14610b1c576102e8565b8063d46980161461093d578063d5ace29914610968578063d7411a8014610991578063dd62ed3e146109bc578063e43252d7146109f9578063e8595bda14610a22576102e8565b8063a9059cbb11610113578063a9059cbb14610819578063aa4bde2814610856578063b2bdfa7b14610881578063b62496f5146108ac578063b6fa37bc146108e9578063bc205ad314610914576102e8565b80638c0b5e22146106f35780638da5cb5b1461071e5780638ea5220f1461074957806395d89b4114610774578063a3528dda1461079f578063a457c2d7146107dc576102e8565b806349bd5a5e116101fe57806375f0a874116101b757806375f0a874146105e157806377a2d7111461060c5780637eb710c8146106495780637ff9b5961461067457806385141a771461069f5780638ab1d681146106ca576102e8565b806349bd5a5e146104e25780634b9d07161461050d57806354b762a614610538578063667f65261461056457806370a082311461058d578063715018a6146105ca576102e8565b80631e293c10116102505780631e293c10146103c257806323b872dd146103eb578063242df4ba1461042857806327a14fc214610451578063313ce5671461047a57806339509351146104a5576102e8565b806306fdde03146102ed578063095ea7b3146103185780630bd05b69146103555780631694505e1461036c57806318160ddd14610397576102e8565b366102e85734600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546102e09190613f2e565b925050819055005b600080fd5b3480156102f957600080fd5b50610302610b49565b60405161030f919061401d565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a91906140ce565b610b86565b60405161034c9190614129565b60405180910390f35b34801561036157600080fd5b5061036a610ba4565b005b34801561037857600080fd5b50610381611069565b60405161038e91906141a3565b60405180910390f35b3480156103a357600080fd5b506103ac61108f565b6040516103b991906141cd565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e491906141e8565b611099565b005b3480156103f757600080fd5b50610412600480360381019061040d9190614215565b6111d9565b60405161041f9190614129565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190614268565b611357565b005b34801561045d57600080fd5b50610478600480360381019061047391906141e8565b611447565b005b34801561048657600080fd5b5061048f611586565b60405161049c91906142b1565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c791906140ce565b61158f565b6040516104d99190614129565b60405180910390f35b3480156104ee57600080fd5b506104f761163b565b60405161050491906142db565b60405180910390f35b34801561051957600080fd5b50610522611661565b60405161052f91906142db565b60405180910390f35b34801561054457600080fd5b5061054d611687565b60405161055b9291906142f6565b60405180910390f35b34801561057057600080fd5b5061058b6004803603810190610586919061431f565b611698565b005b34801561059957600080fd5b506105b460048036038101906105af9190614268565b61173f565b6040516105c191906141cd565b60405180910390f35b3480156105d657600080fd5b506105df611788565b005b3480156105ed57600080fd5b506105f6611860565b60405161060391906142db565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e91906141e8565b611886565b60405161064091906141cd565b60405180910390f35b34801561065557600080fd5b5061065e6118aa565b60405161066b91906141cd565b60405180910390f35b34801561068057600080fd5b506106896118f1565b60405161069691906141cd565b60405180910390f35b3480156106ab57600080fd5b506106b4611a7b565b6040516106c191906142db565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec9190614268565b611a81565b005b3480156106ff57600080fd5b50610708611b71565b60405161071591906141cd565b60405180910390f35b34801561072a57600080fd5b50610733611b77565b60405161074091906142db565b60405180910390f35b34801561075557600080fd5b5061075e611ba0565b60405161076b91906142db565b60405180910390f35b34801561078057600080fd5b50610789611bc6565b604051610796919061401d565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c19190614268565b611c03565b6040516107d39190614129565b60405180910390f35b3480156107e857600080fd5b5061080360048036038101906107fe91906140ce565b611c59565b6040516108109190614129565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b91906140ce565b611dcb565b60405161084d9190614129565b60405180910390f35b34801561086257600080fd5b5061086b611de9565b60405161087891906141cd565b60405180910390f35b34801561088d57600080fd5b50610896611def565b6040516108a391906142db565b60405180910390f35b3480156108b857600080fd5b506108d360048036038101906108ce9190614268565b611e15565b6040516108e09190614129565b60405180910390f35b3480156108f557600080fd5b506108fe611e35565b60405161090b91906142db565b60405180910390f35b34801561092057600080fd5b5061093b6004803603810190610936919061439d565b611e5b565b005b34801561094957600080fd5b50610952611ff2565b60405161095f91906142db565b60405180910390f35b34801561097457600080fd5b5061098f600480360381019061098a9190614268565b612018565b005b34801561099d57600080fd5b506109a6612108565b6040516109b391906141cd565b60405180910390f35b3480156109c857600080fd5b506109e360048036038101906109de91906143dd565b612112565b6040516109f091906141cd565b60405180910390f35b348015610a0557600080fd5b50610a206004803603810190610a1b9190614268565b612199565b005b348015610a2e57600080fd5b50610a496004803603810190610a449190614268565b612289565b604051610a569190614129565b60405180910390f35b348015610a6b57600080fd5b50610a746122df565b604051610a8191906141cd565b60405180910390f35b348015610a9657600080fd5b50610ab16004803603810190610aac919061441d565b6123be565b005b348015610abf57600080fd5b50610ada6004803603810190610ad591906141e8565b612623565b005b348015610ae857600080fd5b50610b036004803603810190610afe9190614268565b6126c2565b005b348015610b1157600080fd5b50610b1a612809565b005b348015610b2857600080fd5b50610b3161297d565b604051610b4093929190614470565b60405180910390f35b60606040518060400160405280600c81526020017f57616c6c2046696e616e63650000000000000000000000000000000000000000815250905090565b6000610b9a610b936129f6565b84846129fe565b6001905092915050565b610bac6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090614519565b60405180910390fd5b600760009054906101000a900460ff1615610c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8090614585565b60405180910390fd5b6001600760006101000a81548160ff021916908315150217905550610cd330600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601c546129fe565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730601c54600080610d216129f6565b426040518863ffffffff1660e01b8152600401610d43969594939291906145e0565b60606040518083038185885af1158015610d61573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d869190614656565b5050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1c91906146be565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec991906146be565b6040518363ffffffff1660e01b8152600401610ee69291906146eb565b602060405180830381865afa158015610f03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2791906146be565b905080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f75816001612b62565b42600b8190555060646002601c54610f8d9190614714565b610f97919061479d565b600e8190555060646002601c54610fae9190614714565b610fb8919061479d565b600d819055506001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555043600f81905550600060198190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600554905090565b6110a16129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112590614519565b60405180910390fd5b600d548103611172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116990614840565b60405180910390fd5b6103e86001601c546111849190614714565b61118e919061479d565b81116111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c6906148d2565b60405180910390fd5b80600d8190555050565b60006111e6848484612c4f565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061122f6129f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390614964565b60405180910390fd5b61134c846112b86129f6565b84600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113026129f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113479190614984565b6129fe565b600190509392505050565b61135f6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e390614519565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61144f6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d390614519565b60405180910390fd5b600e548103611520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151790614a2a565b60405180910390fd5b60646001601c546115319190614714565b61153b919061479d565b811161157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390614abc565b60405180910390fd5b80600e8190555050565b60006012905090565b600061163161159c6129f6565b8484600460006115aa6129f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461162c9190613f2e565b6129fe565b6001905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080601154601054915091509091565b6116a06129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490614519565b60405180910390fd5b81601181905550806010819055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117906129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461181d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181490614519565b60405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601f818154811061189657600080fd5b906000526020600020016000915090505481565b6000600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b600080601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198b9190614b5e565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150600080828411156119c757829150600090506119ce565b8391508290505b60008573ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3f9190614bdd565b600a611a4b9190614d3d565b83611a569190614714565b905081816001611a669190614714565b611a70919061479d565b965050505050505090565b61dead81565b611a896129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d90614519565b60405180910390fd5b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f57414c4c00000000000000000000000000000000000000000000000000000000815250905090565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600060046000611c676129f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115611d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1890614dfa565b60405180910390fd5b611dc1611d2c6129f6565b848460046000611d3a6129f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611dbc9190614984565b6129fe565b6001905092915050565b6000611ddf611dd86129f6565b8484612c4f565b6001905092915050565b600e5481565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60066020528060005260406000206000915054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611eb557600080fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ef091906142db565b602060405180830381865afa158015611f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f319190614e1a565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611f6e929190614e47565b6020604051808303816000875af1158015611f8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb19190614e9c565b507ffda3a3e0e1479b43cb1c701f7576187f4c4ad80768d627387e00184302f7d88e338383604051611fe593929190614ec9565b60405180910390a1505050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120206129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a490614519565b60405180910390fd5b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000601954905090565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121a16129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461222e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222590614519565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612355573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123799190614b5e565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000818311156123b0578190506123b4565b8290505b8094505050505090565b6123c66129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a90614519565b60405180910390fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b61262b6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126af90614519565b60405180910390fd5b8060198190555050565b6126ca6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274e90614519565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bd90614f72565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461286357600080fd5b600047116128a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d90615004565b60405180910390fd5b60004790506000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516128f390615055565b60006040518083038185875af1925050503d8060008114612930576040519150601f19603f3d011682016040523d82523d6000602084013e612935565b606091505b5050905080612979576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612970906150dc565b60405180910390fd5b5050565b6000806000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925092509250909192565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a649061516e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad390615200565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612beb90615292565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb590615324565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d24906153b6565b60405180910390fd5b60008111612d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6790615448565b60405180910390fd5b612d798361173f565b811115612dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db2906154da565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133db57612e1982612289565b15612e275760006011819055505b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f1657600e5481612e858461173f565b612e8f9190613f2e565b1115612ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec79061556c565b60405180910390fd5b600d54811115612f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0c906155fe565b60405180910390fd5b5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f659190614984565b92505081905550606460115482612f7c9190614714565b612f86919061479d565b81612f919190614984565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fdf9190613f2e565b92505081905550606460115482612ff69190614714565b613000919061479d565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461304e9190613f2e565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6064601154856130b49190614714565b6130be919061479d565b6040516130cb91906141cd565b60405180910390a38173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6064601154856131329190614714565b61313c919061479d565b846131479190614984565b60405161315491906141cd565b60405180910390a3601f6131666122df565b9080600181540180825580915050600190039060005260206000200160009091909190915055601f80549050601681905550600360165410613218576000601f60036016546131b59190614984565b815481106131c6576131c561561e565b5b906000526020600020015490506103e86001826131e39190614714565b6131ed919061479d565b816131f89190613f2e565b6015819055506015546132096122df565b1061321657806019819055505b505b601d546132243061173f565b11156133da5761323b6132363061173f565b613cb2565b6064601d4761324a9190614714565b613254919061479d565b6012819055506064601d476132699190614714565b613273919061479d565b60138190555060646027476132889190614714565b613292919061479d565b601481905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6012549081150290604051600060405180830381858888f19350505050158015613302573d6000803e3d6000fd5b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6013549081150290604051600060405180830381858888f1935050505015801561336d573d6000803e3d6000fd5b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6014549081150290604051600060405180830381858888f193505050501580156133d8573d6000803e3d6000fd5b505b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036139e957601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134c757600d548111156134c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134bd906155fe565b60405180910390fd5b5b6019546134d26122df565b10156134e15760196010819055505b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135915760001515601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461359057600080fd5b5b61359a83612289565b156135a85760006010819055505b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135f79190614984565b9250508190555060646010548261360e9190614714565b613618919061479d565b816136239190614984565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136719190613f2e565b925050819055506064601054826136889190614714565b613692919061479d565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136e09190613f2e565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6064601054856137469190614714565b613750919061479d565b60405161375d91906141cd565b60405180910390a38173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6064601054856137c49190614714565b6137ce919061479d565b846137d99190614984565b6040516137e691906141cd565b60405180910390a3601f6137f86122df565b9080600181540180825580915050600190039060005260206000200160009091909190915055601d5461382a3061173f565b11156139e05761384161383c3061173f565b613cb2565b6064601d476138509190614714565b61385a919061479d565b6012819055506064601d4761386f9190614714565b613879919061479d565b601381905550606460274761388e9190614714565b613898919061479d565b601481905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6012549081150290604051600060405180830381858888f19350505050158015613908573d6000803e3d6000fd5b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6013549081150290604051600060405180830381858888f19350505050158015613973573d6000803e3d6000fd5b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6014549081150290604051600060405180830381858888f193505050501580156139de573d6000803e3d6000fd5b505b60046010819055505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613a955750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15613cad57601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580613b3d5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b9b57600e5481613b4f8461173f565b613b599190613f2e565b1115613b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b919061556c565b60405180910390fd5b5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613bea9190614984565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613c409190613f2e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ca491906141cd565b60405180910390a35b505050565b6000600267ffffffffffffffff811115613ccf57613cce61564d565b5b604051908082528060200260200182016040528015613cfd5781602001602082028036833780820191505090505b5090503081600081518110613d1557613d1461561e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613de091906146be565b81600181518110613df457613df361561e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e5b30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129fe565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ebf95949392919061573a565b600060405180830381600087803b158015613ed957600080fd5b505af1158015613eed573d6000803e3d6000fd5b505050505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f3982613ef5565b9150613f4483613ef5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f7957613f78613eff565b5b828201905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fbe578082015181840152602081019050613fa3565b83811115613fcd576000848401525b50505050565b6000601f19601f8301169050919050565b6000613fef82613f84565b613ff98185613f8f565b9350614009818560208601613fa0565b61401281613fd3565b840191505092915050565b600060208201905081810360008301526140378184613fe4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061406f82614044565b9050919050565b61407f81614064565b811461408a57600080fd5b50565b60008135905061409c81614076565b92915050565b6140ab81613ef5565b81146140b657600080fd5b50565b6000813590506140c8816140a2565b92915050565b600080604083850312156140e5576140e461403f565b5b60006140f38582860161408d565b9250506020614104858286016140b9565b9150509250929050565b60008115159050919050565b6141238161410e565b82525050565b600060208201905061413e600083018461411a565b92915050565b6000819050919050565b600061416961416461415f84614044565b614144565b614044565b9050919050565b600061417b8261414e565b9050919050565b600061418d82614170565b9050919050565b61419d81614182565b82525050565b60006020820190506141b86000830184614194565b92915050565b6141c781613ef5565b82525050565b60006020820190506141e260008301846141be565b92915050565b6000602082840312156141fe576141fd61403f565b5b600061420c848285016140b9565b91505092915050565b60008060006060848603121561422e5761422d61403f565b5b600061423c8682870161408d565b935050602061424d8682870161408d565b925050604061425e868287016140b9565b9150509250925092565b60006020828403121561427e5761427d61403f565b5b600061428c8482850161408d565b91505092915050565b600060ff82169050919050565b6142ab81614295565b82525050565b60006020820190506142c660008301846142a2565b92915050565b6142d581614064565b82525050565b60006020820190506142f060008301846142cc565b92915050565b600060408201905061430b60008301856141be565b61431860208301846141be565b9392505050565b600080604083850312156143365761433561403f565b5b6000614344858286016140b9565b9250506020614355858286016140b9565b9150509250929050565b600061436a82614064565b9050919050565b61437a8161435f565b811461438557600080fd5b50565b60008135905061439781614371565b92915050565b600080604083850312156143b4576143b361403f565b5b60006143c285828601614388565b92505060206143d38582860161408d565b9150509250929050565b600080604083850312156143f4576143f361403f565b5b60006144028582860161408d565b92505060206144138582860161408d565b9150509250929050565b6000806000606084860312156144365761443561403f565b5b60006144448682870161408d565b93505060206144558682870161408d565b92505060406144668682870161408d565b9150509250925092565b600060608201905061448560008301866142cc565b61449260208301856142cc565b61449f60408301846142cc565b949350505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000614503602183613f8f565b915061450e826144a7565b604082019050919050565b60006020820190508181036000830152614532816144f6565b9050919050565b7f796f752063616e206f6e6c7920616464206c6971756964697479206f6e63652e600082015250565b600061456f602083613f8f565b915061457a82614539565b602082019050919050565b6000602082019050818103600083015261459e81614562565b9050919050565b6000819050919050565b60006145ca6145c56145c0846145a5565b614144565b613ef5565b9050919050565b6145da816145af565b82525050565b600060c0820190506145f560008301896142cc565b61460260208301886141be565b61460f60408301876145d1565b61461c60608301866145d1565b61462960808301856142cc565b61463660a08301846141be565b979650505050505050565b600081519050614650816140a2565b92915050565b60008060006060848603121561466f5761466e61403f565b5b600061467d86828701614641565b935050602061468e86828701614641565b925050604061469f86828701614641565b9150509250925092565b6000815190506146b881614076565b92915050565b6000602082840312156146d4576146d361403f565b5b60006146e2848285016146a9565b91505092915050565b600060408201905061470060008301856142cc565b61470d60208301846142cc565b9392505050565b600061471f82613ef5565b915061472a83613ef5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561476357614762613eff565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147a882613ef5565b91506147b383613ef5565b9250826147c3576147c261476e565b5b828204905092915050565b7f63616e6e6f7420757064617465206d61785478416d6f756e7420746f2073616d60008201527f652076616c75652e000000000000000000000000000000000000000000000000602082015250565b600061482a602883613f8f565b9150614835826147ce565b604082019050919050565b600060208201905081810360008301526148598161481d565b9050919050565b7f6d61785478416d6f756e74206d757374206265203e202e3125206f6620746f7460008201527f616c20737570706c792e00000000000000000000000000000000000000000000602082015250565b60006148bc602a83613f8f565b91506148c782614860565b604082019050919050565b600060208201905081810360008301526148eb816148af565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e63652e0000000000000000000000000000000000000000000000602082015250565b600061494e602983613f8f565b9150614959826148f2565b604082019050919050565b6000602082019050818103600083015261497d81614941565b9050919050565b600061498f82613ef5565b915061499a83613ef5565b9250828210156149ad576149ac613eff565b5b828203905092915050565b7f63616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60008201527f2073616d652076616c75652e0000000000000000000000000000000000000000602082015250565b6000614a14602c83613f8f565b9150614a1f826149b8565b604082019050919050565b60006020820190508181036000830152614a4381614a07565b9050919050565b7f6d617857616c6c6574416d6f756e74206d757374206265203e3125206f66207460008201527f6f74616c20737570706c792e0000000000000000000000000000000000000000602082015250565b6000614aa6602c83613f8f565b9150614ab182614a4a565b604082019050919050565b60006020820190508181036000830152614ad581614a99565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b614aff81614adc565b8114614b0a57600080fd5b50565b600081519050614b1c81614af6565b92915050565b600063ffffffff82169050919050565b614b3b81614b22565b8114614b4657600080fd5b50565b600081519050614b5881614b32565b92915050565b600080600060608486031215614b7757614b7661403f565b5b6000614b8586828701614b0d565b9350506020614b9686828701614b0d565b9250506040614ba786828701614b49565b9150509250925092565b614bba81614295565b8114614bc557600080fd5b50565b600081519050614bd781614bb1565b92915050565b600060208284031215614bf357614bf261403f565b5b6000614c0184828501614bc8565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115614c6157808604811115614c3d57614c3c613eff565b5b6001851615614c4c5780820291505b8081029050614c5a85614c0a565b9450614c21565b94509492505050565b600082614c7a5760019050614d36565b81614c885760009050614d36565b8160018114614c9e5760028114614ca857614cd7565b6001915050614d36565b60ff841115614cba57614cb9613eff565b5b8360020a915084821115614cd157614cd0613eff565b5b50614d36565b5060208310610133831016604e8410600b8410161715614d0c5782820a905083811115614d0757614d06613eff565b5b614d36565b614d198484846001614c17565b92509050818404811115614d3057614d2f613eff565b5b81810290505b9392505050565b6000614d4882613ef5565b9150614d5383614295565b9250614d807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614c6a565b905092915050565b7f45524332303a2064656372656173656420616c6c6f776e6163652062656c6f7760008201527f207a65726f2e0000000000000000000000000000000000000000000000000000602082015250565b6000614de4602683613f8f565b9150614def82614d88565b604082019050919050565b60006020820190508181036000830152614e1381614dd7565b9050919050565b600060208284031215614e3057614e2f61403f565b5b6000614e3e84828501614641565b91505092915050565b6000604082019050614e5c60008301856142cc565b614e6960208301846141be565b9392505050565b614e798161410e565b8114614e8457600080fd5b50565b600081519050614e9681614e70565b92915050565b600060208284031215614eb257614eb161403f565b5b6000614ec084828501614e87565b91505092915050565b6000606082019050614ede60008301866142cc565b614eeb60208301856142cc565b614ef860408301846141be565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573732e00000000000000000000000000000000000000000000000000602082015250565b6000614f5c602783613f8f565b9150614f6782614f00565b604082019050919050565b60006020820190508181036000830152614f8b81614f4f565b9050919050565b7f63616e6e6f742073656e64206d6f7265207468616e20636f6e7472616374206260008201527f616c616e63652e00000000000000000000000000000000000000000000000000602082015250565b6000614fee602783613f8f565b9150614ff982614f92565b604082019050919050565b6000602082019050818103600083015261501d81614fe1565b9050919050565b600081905092915050565b50565b600061503f600083615024565b915061504a8261502f565b600082019050919050565b600061506082615032565b9150819050919050565b7f6572726f72207769746864726177696e67204554482066726f6d20636f6e747260008201527f6163742e00000000000000000000000000000000000000000000000000000000602082015250565b60006150c6602483613f8f565b91506150d18261506a565b604082019050919050565b600060208201905081810360008301526150f5816150b9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615158602483613f8f565b9150615163826150fc565b604082019050919050565b600060208201905081810360008301526151878161514b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151ea602283613f8f565b91506151f58261518e565b604082019050919050565b60006020820190508181036000830152615219816151dd565b9050919050565b7f6175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75652e00000000000000602082015250565b600061527c603983613f8f565b915061528782615220565b604082019050919050565b600060208201905081810360008301526152ab8161526f565b9050919050565b7f63616e6e6f74207472616e736665722066726f6d20746865207a65726f20616460008201527f64726573732e0000000000000000000000000000000000000000000000000000602082015250565b600061530e602683613f8f565b9150615319826152b2565b604082019050919050565b6000602082019050818103600083015261533d81615301565b9050919050565b7f63616e6e6f74207472616e7366657220746f20746865207a65726f206164647260008201527f6573732e00000000000000000000000000000000000000000000000000000000602082015250565b60006153a0602483613f8f565b91506153ab82615344565b604082019050919050565b600060208201905081810360008301526153cf81615393565b9050919050565b7f7472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f2e00000000000000000000000000000000000000000000602082015250565b6000615432602a83613f8f565b915061543d826153d6565b604082019050919050565b6000602082019050818103600083015261546181615425565b9050919050565b7f63616e6e6f74207472616e73666572206d6f7265207468616e2062616c616e6360008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006154c4602283613f8f565b91506154cf82615468565b604082019050919050565b600060208201905081810360008301526154f3816154b7565b9050919050565b7f65787065637465642077616c6c657420616d6f756e742065786365656473207460008201527f6865206d617857616c6c6574416d6f756e742e00000000000000000000000000602082015250565b6000615556603383613f8f565b9150615561826154fa565b604082019050919050565b6000602082019050818103600083015261558581615549565b9050919050565b7f7472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006155e8602883613f8f565b91506155f38261558c565b604082019050919050565b60006020820190508181036000830152615617816155db565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6156b181614064565b82525050565b60006156c383836156a8565b60208301905092915050565b6000602082019050919050565b60006156e78261567c565b6156f18185615687565b93506156fc83615698565b8060005b8381101561572d57815161571488826156b7565b975061571f836156cf565b925050600181019050615700565b5085935050505092915050565b600060a08201905061574f60008301886141be565b61575c60208301876145d1565b818103604083015261576e81866156dc565b905061577d60608301856142cc565b61578a60808301846141be565b969550505050505056fea264697066735822122083e2eb02545cc3c3fa5782806264e72da2615002921d5a38618a8e7d919e659e64736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c80638c0b5e221161015a578063d4698016116100c1578063e8d1c11e1161007a578063e8d1c11e14610a5f578063eec3c69514610a8a578063f115a73814610ab3578063f2fde38b14610adc578063f5648a4f14610b05578063fd24100f14610b1c576102e8565b8063d46980161461093d578063d5ace29914610968578063d7411a8014610991578063dd62ed3e146109bc578063e43252d7146109f9578063e8595bda14610a22576102e8565b8063a9059cbb11610113578063a9059cbb14610819578063aa4bde2814610856578063b2bdfa7b14610881578063b62496f5146108ac578063b6fa37bc146108e9578063bc205ad314610914576102e8565b80638c0b5e22146106f35780638da5cb5b1461071e5780638ea5220f1461074957806395d89b4114610774578063a3528dda1461079f578063a457c2d7146107dc576102e8565b806349bd5a5e116101fe57806375f0a874116101b757806375f0a874146105e157806377a2d7111461060c5780637eb710c8146106495780637ff9b5961461067457806385141a771461069f5780638ab1d681146106ca576102e8565b806349bd5a5e146104e25780634b9d07161461050d57806354b762a614610538578063667f65261461056457806370a082311461058d578063715018a6146105ca576102e8565b80631e293c10116102505780631e293c10146103c257806323b872dd146103eb578063242df4ba1461042857806327a14fc214610451578063313ce5671461047a57806339509351146104a5576102e8565b806306fdde03146102ed578063095ea7b3146103185780630bd05b69146103555780631694505e1461036c57806318160ddd14610397576102e8565b366102e85734600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546102e09190613f2e565b925050819055005b600080fd5b3480156102f957600080fd5b50610302610b49565b60405161030f919061401d565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a91906140ce565b610b86565b60405161034c9190614129565b60405180910390f35b34801561036157600080fd5b5061036a610ba4565b005b34801561037857600080fd5b50610381611069565b60405161038e91906141a3565b60405180910390f35b3480156103a357600080fd5b506103ac61108f565b6040516103b991906141cd565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e491906141e8565b611099565b005b3480156103f757600080fd5b50610412600480360381019061040d9190614215565b6111d9565b60405161041f9190614129565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190614268565b611357565b005b34801561045d57600080fd5b50610478600480360381019061047391906141e8565b611447565b005b34801561048657600080fd5b5061048f611586565b60405161049c91906142b1565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c791906140ce565b61158f565b6040516104d99190614129565b60405180910390f35b3480156104ee57600080fd5b506104f761163b565b60405161050491906142db565b60405180910390f35b34801561051957600080fd5b50610522611661565b60405161052f91906142db565b60405180910390f35b34801561054457600080fd5b5061054d611687565b60405161055b9291906142f6565b60405180910390f35b34801561057057600080fd5b5061058b6004803603810190610586919061431f565b611698565b005b34801561059957600080fd5b506105b460048036038101906105af9190614268565b61173f565b6040516105c191906141cd565b60405180910390f35b3480156105d657600080fd5b506105df611788565b005b3480156105ed57600080fd5b506105f6611860565b60405161060391906142db565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e91906141e8565b611886565b60405161064091906141cd565b60405180910390f35b34801561065557600080fd5b5061065e6118aa565b60405161066b91906141cd565b60405180910390f35b34801561068057600080fd5b506106896118f1565b60405161069691906141cd565b60405180910390f35b3480156106ab57600080fd5b506106b4611a7b565b6040516106c191906142db565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec9190614268565b611a81565b005b3480156106ff57600080fd5b50610708611b71565b60405161071591906141cd565b60405180910390f35b34801561072a57600080fd5b50610733611b77565b60405161074091906142db565b60405180910390f35b34801561075557600080fd5b5061075e611ba0565b60405161076b91906142db565b60405180910390f35b34801561078057600080fd5b50610789611bc6565b604051610796919061401d565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c19190614268565b611c03565b6040516107d39190614129565b60405180910390f35b3480156107e857600080fd5b5061080360048036038101906107fe91906140ce565b611c59565b6040516108109190614129565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b91906140ce565b611dcb565b60405161084d9190614129565b60405180910390f35b34801561086257600080fd5b5061086b611de9565b60405161087891906141cd565b60405180910390f35b34801561088d57600080fd5b50610896611def565b6040516108a391906142db565b60405180910390f35b3480156108b857600080fd5b506108d360048036038101906108ce9190614268565b611e15565b6040516108e09190614129565b60405180910390f35b3480156108f557600080fd5b506108fe611e35565b60405161090b91906142db565b60405180910390f35b34801561092057600080fd5b5061093b6004803603810190610936919061439d565b611e5b565b005b34801561094957600080fd5b50610952611ff2565b60405161095f91906142db565b60405180910390f35b34801561097457600080fd5b5061098f600480360381019061098a9190614268565b612018565b005b34801561099d57600080fd5b506109a6612108565b6040516109b391906141cd565b60405180910390f35b3480156109c857600080fd5b506109e360048036038101906109de91906143dd565b612112565b6040516109f091906141cd565b60405180910390f35b348015610a0557600080fd5b50610a206004803603810190610a1b9190614268565b612199565b005b348015610a2e57600080fd5b50610a496004803603810190610a449190614268565b612289565b604051610a569190614129565b60405180910390f35b348015610a6b57600080fd5b50610a746122df565b604051610a8191906141cd565b60405180910390f35b348015610a9657600080fd5b50610ab16004803603810190610aac919061441d565b6123be565b005b348015610abf57600080fd5b50610ada6004803603810190610ad591906141e8565b612623565b005b348015610ae857600080fd5b50610b036004803603810190610afe9190614268565b6126c2565b005b348015610b1157600080fd5b50610b1a612809565b005b348015610b2857600080fd5b50610b3161297d565b604051610b4093929190614470565b60405180910390f35b60606040518060400160405280600c81526020017f57616c6c2046696e616e63650000000000000000000000000000000000000000815250905090565b6000610b9a610b936129f6565b84846129fe565b6001905092915050565b610bac6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090614519565b60405180910390fd5b600760009054906101000a900460ff1615610c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8090614585565b60405180910390fd5b6001600760006101000a81548160ff021916908315150217905550610cd330600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601c546129fe565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730601c54600080610d216129f6565b426040518863ffffffff1660e01b8152600401610d43969594939291906145e0565b60606040518083038185885af1158015610d61573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d869190614656565b5050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1c91906146be565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec991906146be565b6040518363ffffffff1660e01b8152600401610ee69291906146eb565b602060405180830381865afa158015610f03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2791906146be565b905080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f75816001612b62565b42600b8190555060646002601c54610f8d9190614714565b610f97919061479d565b600e8190555060646002601c54610fae9190614714565b610fb8919061479d565b600d819055506001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555043600f81905550600060198190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600554905090565b6110a16129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112590614519565b60405180910390fd5b600d548103611172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116990614840565b60405180910390fd5b6103e86001601c546111849190614714565b61118e919061479d565b81116111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c6906148d2565b60405180910390fd5b80600d8190555050565b60006111e6848484612c4f565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061122f6129f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390614964565b60405180910390fd5b61134c846112b86129f6565b84600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113026129f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113479190614984565b6129fe565b600190509392505050565b61135f6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e390614519565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61144f6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d390614519565b60405180910390fd5b600e548103611520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151790614a2a565b60405180910390fd5b60646001601c546115319190614714565b61153b919061479d565b811161157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390614abc565b60405180910390fd5b80600e8190555050565b60006012905090565b600061163161159c6129f6565b8484600460006115aa6129f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461162c9190613f2e565b6129fe565b6001905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080601154601054915091509091565b6116a06129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490614519565b60405180910390fd5b81601181905550806010819055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117906129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461181d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181490614519565b60405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601f818154811061189657600080fd5b906000526020600020016000915090505481565b6000600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b600080601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198b9190614b5e565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150600080828411156119c757829150600090506119ce565b8391508290505b60008573ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3f9190614bdd565b600a611a4b9190614d3d565b83611a569190614714565b905081816001611a669190614714565b611a70919061479d565b965050505050505090565b61dead81565b611a896129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d90614519565b60405180910390fd5b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f57414c4c00000000000000000000000000000000000000000000000000000000815250905090565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600060046000611c676129f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115611d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1890614dfa565b60405180910390fd5b611dc1611d2c6129f6565b848460046000611d3a6129f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611dbc9190614984565b6129fe565b6001905092915050565b6000611ddf611dd86129f6565b8484612c4f565b6001905092915050565b600e5481565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60066020528060005260406000206000915054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611eb557600080fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ef091906142db565b602060405180830381865afa158015611f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f319190614e1a565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611f6e929190614e47565b6020604051808303816000875af1158015611f8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb19190614e9c565b507ffda3a3e0e1479b43cb1c701f7576187f4c4ad80768d627387e00184302f7d88e338383604051611fe593929190614ec9565b60405180910390a1505050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120206129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a490614519565b60405180910390fd5b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000601954905090565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121a16129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461222e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222590614519565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612355573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123799190614b5e565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000818311156123b0578190506123b4565b8290505b8094505050505090565b6123c66129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a90614519565b60405180910390fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b61262b6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126af90614519565b60405180910390fd5b8060198190555050565b6126ca6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274e90614519565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bd90614f72565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461286357600080fd5b600047116128a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d90615004565b60405180910390fd5b60004790506000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516128f390615055565b60006040518083038185875af1925050503d8060008114612930576040519150601f19603f3d011682016040523d82523d6000602084013e612935565b606091505b5050905080612979576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612970906150dc565b60405180910390fd5b5050565b6000806000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925092509250909192565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a649061516e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad390615200565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612beb90615292565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb590615324565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d24906153b6565b60405180910390fd5b60008111612d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6790615448565b60405180910390fd5b612d798361173f565b811115612dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db2906154da565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133db57612e1982612289565b15612e275760006011819055505b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f1657600e5481612e858461173f565b612e8f9190613f2e565b1115612ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec79061556c565b60405180910390fd5b600d54811115612f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0c906155fe565b60405180910390fd5b5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f659190614984565b92505081905550606460115482612f7c9190614714565b612f86919061479d565b81612f919190614984565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fdf9190613f2e565b92505081905550606460115482612ff69190614714565b613000919061479d565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461304e9190613f2e565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6064601154856130b49190614714565b6130be919061479d565b6040516130cb91906141cd565b60405180910390a38173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6064601154856131329190614714565b61313c919061479d565b846131479190614984565b60405161315491906141cd565b60405180910390a3601f6131666122df565b9080600181540180825580915050600190039060005260206000200160009091909190915055601f80549050601681905550600360165410613218576000601f60036016546131b59190614984565b815481106131c6576131c561561e565b5b906000526020600020015490506103e86001826131e39190614714565b6131ed919061479d565b816131f89190613f2e565b6015819055506015546132096122df565b1061321657806019819055505b505b601d546132243061173f565b11156133da5761323b6132363061173f565b613cb2565b6064601d4761324a9190614714565b613254919061479d565b6012819055506064601d476132699190614714565b613273919061479d565b60138190555060646027476132889190614714565b613292919061479d565b601481905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6012549081150290604051600060405180830381858888f19350505050158015613302573d6000803e3d6000fd5b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6013549081150290604051600060405180830381858888f1935050505015801561336d573d6000803e3d6000fd5b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6014549081150290604051600060405180830381858888f193505050501580156133d8573d6000803e3d6000fd5b505b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036139e957601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134c757600d548111156134c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134bd906155fe565b60405180910390fd5b5b6019546134d26122df565b10156134e15760196010819055505b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135915760001515601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461359057600080fd5b5b61359a83612289565b156135a85760006010819055505b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135f79190614984565b9250508190555060646010548261360e9190614714565b613618919061479d565b816136239190614984565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136719190613f2e565b925050819055506064601054826136889190614714565b613692919061479d565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136e09190613f2e565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6064601054856137469190614714565b613750919061479d565b60405161375d91906141cd565b60405180910390a38173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6064601054856137c49190614714565b6137ce919061479d565b846137d99190614984565b6040516137e691906141cd565b60405180910390a3601f6137f86122df565b9080600181540180825580915050600190039060005260206000200160009091909190915055601d5461382a3061173f565b11156139e05761384161383c3061173f565b613cb2565b6064601d476138509190614714565b61385a919061479d565b6012819055506064601d4761386f9190614714565b613879919061479d565b601381905550606460274761388e9190614714565b613898919061479d565b601481905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6012549081150290604051600060405180830381858888f19350505050158015613908573d6000803e3d6000fd5b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6013549081150290604051600060405180830381858888f19350505050158015613973573d6000803e3d6000fd5b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6014549081150290604051600060405180830381858888f193505050501580156139de573d6000803e3d6000fd5b505b60046010819055505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613a955750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15613cad57601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580613b3d5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b9b57600e5481613b4f8461173f565b613b599190613f2e565b1115613b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b919061556c565b60405180910390fd5b5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613bea9190614984565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613c409190613f2e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ca491906141cd565b60405180910390a35b505050565b6000600267ffffffffffffffff811115613ccf57613cce61564d565b5b604051908082528060200260200182016040528015613cfd5781602001602082028036833780820191505090505b5090503081600081518110613d1557613d1461561e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613de091906146be565b81600181518110613df457613df361561e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e5b30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129fe565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ebf95949392919061573a565b600060405180830381600087803b158015613ed957600080fd5b505af1158015613eed573d6000803e3d6000fd5b505050505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f3982613ef5565b9150613f4483613ef5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f7957613f78613eff565b5b828201905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fbe578082015181840152602081019050613fa3565b83811115613fcd576000848401525b50505050565b6000601f19601f8301169050919050565b6000613fef82613f84565b613ff98185613f8f565b9350614009818560208601613fa0565b61401281613fd3565b840191505092915050565b600060208201905081810360008301526140378184613fe4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061406f82614044565b9050919050565b61407f81614064565b811461408a57600080fd5b50565b60008135905061409c81614076565b92915050565b6140ab81613ef5565b81146140b657600080fd5b50565b6000813590506140c8816140a2565b92915050565b600080604083850312156140e5576140e461403f565b5b60006140f38582860161408d565b9250506020614104858286016140b9565b9150509250929050565b60008115159050919050565b6141238161410e565b82525050565b600060208201905061413e600083018461411a565b92915050565b6000819050919050565b600061416961416461415f84614044565b614144565b614044565b9050919050565b600061417b8261414e565b9050919050565b600061418d82614170565b9050919050565b61419d81614182565b82525050565b60006020820190506141b86000830184614194565b92915050565b6141c781613ef5565b82525050565b60006020820190506141e260008301846141be565b92915050565b6000602082840312156141fe576141fd61403f565b5b600061420c848285016140b9565b91505092915050565b60008060006060848603121561422e5761422d61403f565b5b600061423c8682870161408d565b935050602061424d8682870161408d565b925050604061425e868287016140b9565b9150509250925092565b60006020828403121561427e5761427d61403f565b5b600061428c8482850161408d565b91505092915050565b600060ff82169050919050565b6142ab81614295565b82525050565b60006020820190506142c660008301846142a2565b92915050565b6142d581614064565b82525050565b60006020820190506142f060008301846142cc565b92915050565b600060408201905061430b60008301856141be565b61431860208301846141be565b9392505050565b600080604083850312156143365761433561403f565b5b6000614344858286016140b9565b9250506020614355858286016140b9565b9150509250929050565b600061436a82614064565b9050919050565b61437a8161435f565b811461438557600080fd5b50565b60008135905061439781614371565b92915050565b600080604083850312156143b4576143b361403f565b5b60006143c285828601614388565b92505060206143d38582860161408d565b9150509250929050565b600080604083850312156143f4576143f361403f565b5b60006144028582860161408d565b92505060206144138582860161408d565b9150509250929050565b6000806000606084860312156144365761443561403f565b5b60006144448682870161408d565b93505060206144558682870161408d565b92505060406144668682870161408d565b9150509250925092565b600060608201905061448560008301866142cc565b61449260208301856142cc565b61449f60408301846142cc565b949350505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000614503602183613f8f565b915061450e826144a7565b604082019050919050565b60006020820190508181036000830152614532816144f6565b9050919050565b7f796f752063616e206f6e6c7920616464206c6971756964697479206f6e63652e600082015250565b600061456f602083613f8f565b915061457a82614539565b602082019050919050565b6000602082019050818103600083015261459e81614562565b9050919050565b6000819050919050565b60006145ca6145c56145c0846145a5565b614144565b613ef5565b9050919050565b6145da816145af565b82525050565b600060c0820190506145f560008301896142cc565b61460260208301886141be565b61460f60408301876145d1565b61461c60608301866145d1565b61462960808301856142cc565b61463660a08301846141be565b979650505050505050565b600081519050614650816140a2565b92915050565b60008060006060848603121561466f5761466e61403f565b5b600061467d86828701614641565b935050602061468e86828701614641565b925050604061469f86828701614641565b9150509250925092565b6000815190506146b881614076565b92915050565b6000602082840312156146d4576146d361403f565b5b60006146e2848285016146a9565b91505092915050565b600060408201905061470060008301856142cc565b61470d60208301846142cc565b9392505050565b600061471f82613ef5565b915061472a83613ef5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561476357614762613eff565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147a882613ef5565b91506147b383613ef5565b9250826147c3576147c261476e565b5b828204905092915050565b7f63616e6e6f7420757064617465206d61785478416d6f756e7420746f2073616d60008201527f652076616c75652e000000000000000000000000000000000000000000000000602082015250565b600061482a602883613f8f565b9150614835826147ce565b604082019050919050565b600060208201905081810360008301526148598161481d565b9050919050565b7f6d61785478416d6f756e74206d757374206265203e202e3125206f6620746f7460008201527f616c20737570706c792e00000000000000000000000000000000000000000000602082015250565b60006148bc602a83613f8f565b91506148c782614860565b604082019050919050565b600060208201905081810360008301526148eb816148af565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e63652e0000000000000000000000000000000000000000000000602082015250565b600061494e602983613f8f565b9150614959826148f2565b604082019050919050565b6000602082019050818103600083015261497d81614941565b9050919050565b600061498f82613ef5565b915061499a83613ef5565b9250828210156149ad576149ac613eff565b5b828203905092915050565b7f63616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60008201527f2073616d652076616c75652e0000000000000000000000000000000000000000602082015250565b6000614a14602c83613f8f565b9150614a1f826149b8565b604082019050919050565b60006020820190508181036000830152614a4381614a07565b9050919050565b7f6d617857616c6c6574416d6f756e74206d757374206265203e3125206f66207460008201527f6f74616c20737570706c792e0000000000000000000000000000000000000000602082015250565b6000614aa6602c83613f8f565b9150614ab182614a4a565b604082019050919050565b60006020820190508181036000830152614ad581614a99565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b614aff81614adc565b8114614b0a57600080fd5b50565b600081519050614b1c81614af6565b92915050565b600063ffffffff82169050919050565b614b3b81614b22565b8114614b4657600080fd5b50565b600081519050614b5881614b32565b92915050565b600080600060608486031215614b7757614b7661403f565b5b6000614b8586828701614b0d565b9350506020614b9686828701614b0d565b9250506040614ba786828701614b49565b9150509250925092565b614bba81614295565b8114614bc557600080fd5b50565b600081519050614bd781614bb1565b92915050565b600060208284031215614bf357614bf261403f565b5b6000614c0184828501614bc8565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115614c6157808604811115614c3d57614c3c613eff565b5b6001851615614c4c5780820291505b8081029050614c5a85614c0a565b9450614c21565b94509492505050565b600082614c7a5760019050614d36565b81614c885760009050614d36565b8160018114614c9e5760028114614ca857614cd7565b6001915050614d36565b60ff841115614cba57614cb9613eff565b5b8360020a915084821115614cd157614cd0613eff565b5b50614d36565b5060208310610133831016604e8410600b8410161715614d0c5782820a905083811115614d0757614d06613eff565b5b614d36565b614d198484846001614c17565b92509050818404811115614d3057614d2f613eff565b5b81810290505b9392505050565b6000614d4882613ef5565b9150614d5383614295565b9250614d807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614c6a565b905092915050565b7f45524332303a2064656372656173656420616c6c6f776e6163652062656c6f7760008201527f207a65726f2e0000000000000000000000000000000000000000000000000000602082015250565b6000614de4602683613f8f565b9150614def82614d88565b604082019050919050565b60006020820190508181036000830152614e1381614dd7565b9050919050565b600060208284031215614e3057614e2f61403f565b5b6000614e3e84828501614641565b91505092915050565b6000604082019050614e5c60008301856142cc565b614e6960208301846141be565b9392505050565b614e798161410e565b8114614e8457600080fd5b50565b600081519050614e9681614e70565b92915050565b600060208284031215614eb257614eb161403f565b5b6000614ec084828501614e87565b91505092915050565b6000606082019050614ede60008301866142cc565b614eeb60208301856142cc565b614ef860408301846141be565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573732e00000000000000000000000000000000000000000000000000602082015250565b6000614f5c602783613f8f565b9150614f6782614f00565b604082019050919050565b60006020820190508181036000830152614f8b81614f4f565b9050919050565b7f63616e6e6f742073656e64206d6f7265207468616e20636f6e7472616374206260008201527f616c616e63652e00000000000000000000000000000000000000000000000000602082015250565b6000614fee602783613f8f565b9150614ff982614f92565b604082019050919050565b6000602082019050818103600083015261501d81614fe1565b9050919050565b600081905092915050565b50565b600061503f600083615024565b915061504a8261502f565b600082019050919050565b600061506082615032565b9150819050919050565b7f6572726f72207769746864726177696e67204554482066726f6d20636f6e747260008201527f6163742e00000000000000000000000000000000000000000000000000000000602082015250565b60006150c6602483613f8f565b91506150d18261506a565b604082019050919050565b600060208201905081810360008301526150f5816150b9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615158602483613f8f565b9150615163826150fc565b604082019050919050565b600060208201905081810360008301526151878161514b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151ea602283613f8f565b91506151f58261518e565b604082019050919050565b60006020820190508181036000830152615219816151dd565b9050919050565b7f6175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75652e00000000000000602082015250565b600061527c603983613f8f565b915061528782615220565b604082019050919050565b600060208201905081810360008301526152ab8161526f565b9050919050565b7f63616e6e6f74207472616e736665722066726f6d20746865207a65726f20616460008201527f64726573732e0000000000000000000000000000000000000000000000000000602082015250565b600061530e602683613f8f565b9150615319826152b2565b604082019050919050565b6000602082019050818103600083015261533d81615301565b9050919050565b7f63616e6e6f74207472616e7366657220746f20746865207a65726f206164647260008201527f6573732e00000000000000000000000000000000000000000000000000000000602082015250565b60006153a0602483613f8f565b91506153ab82615344565b604082019050919050565b600060208201905081810360008301526153cf81615393565b9050919050565b7f7472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f2e00000000000000000000000000000000000000000000602082015250565b6000615432602a83613f8f565b915061543d826153d6565b604082019050919050565b6000602082019050818103600083015261546181615425565b9050919050565b7f63616e6e6f74207472616e73666572206d6f7265207468616e2062616c616e6360008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006154c4602283613f8f565b91506154cf82615468565b604082019050919050565b600060208201905081810360008301526154f3816154b7565b9050919050565b7f65787065637465642077616c6c657420616d6f756e742065786365656473207460008201527f6865206d617857616c6c6574416d6f756e742e00000000000000000000000000602082015250565b6000615556603383613f8f565b9150615561826154fa565b604082019050919050565b6000602082019050818103600083015261558581615549565b9050919050565b7f7472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006155e8602883613f8f565b91506155f38261558c565b604082019050919050565b60006020820190508181036000830152615617816155db565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6156b181614064565b82525050565b60006156c383836156a8565b60208301905092915050565b6000602082019050919050565b60006156e78261567c565b6156f18185615687565b93506156fc83615698565b8060005b8381101561572d57815161571488826156b7565b975061571f836156cf565b925050600181019050615700565b5085935050505092915050565b600060a08201905061574f60008301886141be565b61575c60208301876145d1565b818103604083015261576e81866156dc565b905061577d60608301856142cc565b61578a60808301846141be565b969550505050505056fea264697066735822122083e2eb02545cc3c3fa5782806264e72da2615002921d5a38618a8e7d919e659e64736f6c634300080d0033

Deployed Bytecode Sourcemap

5456:19490:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9230:9;9206:8;:20;9215:10;9206:20;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;5456:19490;;;;13321:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9433:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11858:1196;;;;;;;;;;;;;:::i;:::-;;5639:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13564:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11538:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9604:375;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24346:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11208:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13479:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9987:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5676:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7886:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23083:94;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;23189:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13658:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5170:80;;;;;;;;;;;;;:::i;:::-;;6304:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7980:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24073:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21913:713;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6506:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23737:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6592:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4973:65;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6379:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13398:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24771:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10209:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9256:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6640:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8026:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6158:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6341:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20601:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6267:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24535:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23333:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13768:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23561:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23914:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21073:832;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22698:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23441:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5256:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10851:349;;;;;;;;;;;;;:::i;:::-;;24190:148;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;13321:71;13360:13;13384:5;;;;;;;;;;;;;;;;;13377:12;;13321:71;:::o;9433:163::-;9510:4;9527:39;9536:12;:10;:12::i;:::-;9550:7;9559:6;9527:8;:39::i;:::-;9584:4;9577:11;;9433:163;;;;:::o;11858:1196::-;5094:12;:10;:12::i;:::-;5084:22;;:6;;;;;;;;;;:22;;;5076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11924:16:::1;;;;;;;;;;;11923:17;11915:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;12007:4;11988:16;;:23;;;;;;;;;;;;;;;;;;12021:79;12038:4;12053:15;;;;;;;;;;;12071:28;;12021:8;:79::i;:::-;12111:15;;;;;;;;;;;:31;;;12150:21;12181:4;12188:28;;12218:1;12221::::0;12224:12:::1;:10;:12::i;:::-;12238:15;12111:143;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12301:22;12335:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12326:43;;;12378:4;12385:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12326:83;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12301:108;;12436:14;12420:13;;:30;;;;;;;;;;;;;;;;;;12461:50;12490:14;12506:4;12461:28;:50::i;:::-;12541:15;12522:16;:34;;;;12620:3;12616:1;12585:28;;:32;;;;:::i;:::-;:38;;;;:::i;:::-;12567:15;:56;;;;12690:3;12686:1;12655:28;;:32;;;;:::i;:::-;:38;;;;:::i;:::-;12641:11;:52;;;;12794:4;12758:17;:33;12776:14;12758:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;12878:14;12854:21;;:38;;;;;;;;;;;;;;;;;;12965:12;12951:11;:26;;;;13045:1;13028:14;:18;;;;11904:1150;11858:1196::o:0;5639:30::-;;;;;;;;;;;;;:::o;13564:88::-;13619:7;13637:12;;13630:19;;13564:88;:::o;11538:314::-;5094:12;:10;:12::i;:::-;5084:22;;:6;;;;;;;;;;:22;;;5076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11639:11:::1;;11627:8;:23:::0;11619:76:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11760:4;11756:1;11725:28;;:32;;;;:::i;:::-;:39;;;;:::i;:::-;11714:8;:50;11706:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;11836:8;11822:11;:22;;;;11538:314:::0;:::o;9604:375::-;9703:4;9720:36;9730:6;9738:9;9749:6;9720:9;:36::i;:::-;9785:11;:19;9797:6;9785:19;;;;;;;;;;;;;;;:33;9805:12;:10;:12::i;:::-;9785:33;;;;;;;;;;;;;;;;9775:6;:43;;9767:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;9875:74;9884:6;9892:12;:10;:12::i;:::-;9942:6;9906:11;:19;9918:6;9906:19;;;;;;;;;;;;;;;:33;9926:12;:10;:12::i;:::-;9906:33;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;9875:8;:74::i;:::-;9967:4;9960:11;;9604:375;;;;;:::o;24346:177::-;5094:12;:10;:12::i;:::-;5084:22;;:6;;;;;;;;;;:22;;;5076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24511:4:::1;24470:12;:38;24483:24;24470:38;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;24346:177:::0;:::o;11208:322::-;5094:12;:10;:12::i;:::-;5084:22;;:6;;;;;;;;;;:22;;;5076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11304:15:::1;;11292:8;:27:::0;11284:84:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11433:3;11429:1;11398:28;;:32;;;;:::i;:::-;:38;;;;:::i;:::-;11387:8;:49;11379:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;11514:8;11496:15;:26;;;;11208:322:::0;:::o;13479:79::-;13530:5;5847:2;13539:16;;13479:79;:::o;9987:214::-;10077:4;10093:78;10102:12;:10;:12::i;:::-;10115:7;10160:10;10123:11;:25;10135:12;:10;:12::i;:::-;10123:25;;;;;;;;;;;;;;;:34;10149:7;10123:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10093:8;:78::i;:::-;10189:4;10182:11;;9987:214;;;;:::o;5676:28::-;;;;;;;;;;;;;:::o;7886:36::-;;;;;;;;;;;;;:::o;23083:94::-;23121:4;23126;23153:6;;23161:7;;23145:24;;;;23083:94;;:::o;23189:136::-;5094:12;:10;:12::i;:::-;5084:22;;:6;;;;;;;;;;:22;;;5076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23277:9:::1;23268:6;:18;;;;23307:10;23297:7;:20;;;;23189:136:::0;;:::o;13658:104::-;13724:7;13742:8;:17;13751:7;13742:17;;;;;;;;;;;;;;;;13735:24;;13658:104;;;:::o;5170:80::-;5094:12;:10;:12::i;:::-;5084:22;;:6;;;;;;;;;;:22;;;5076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5245:1:::1;5228:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5170:80::o:0;6304:30::-;;;;;;;;;;;;;:::o;7980:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24073:109::-;24121:7;24151:8;:23;24168:4;24151:23;;;;;;;;;;;;;;;;24144:30;;24073:109;:::o;21913:713::-;21955:4;21973:19;22010:21;;;;;;;;;;;21973:59;;22117:9;22128;22142:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22116:44;;;;;;;;;22212:16;22239:17;22280:4;22273;:11;22269:178;;;22315:4;22304:15;;22346:1;22334:13;;22269:178;;;22400:4;22389:15;;22431:4;22419:16;;22269:178;22480:12;22509:4;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22505:2;:19;;;;:::i;:::-;22495:8;:30;;;;:::i;:::-;22480:45;;22609:9;22600:7;22598:1;:9;;;;:::i;:::-;22597:21;;;;:::i;:::-;22590:29;;;;;;;;21913:713;:::o;6506:79::-;6543:42;6506:79;:::o;23737:169::-;5094:12;:10;:12::i;:::-;5084:22;;:6;;;;;;;;;;:22;;;5076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23893:5:::1;23856:17;:34;23874:15;23856:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;23737:169:::0;:::o;6592:41::-;;;;:::o;4973:65::-;5011:7;5029:6;;;;;;;;;;;5022:13;;4973:65;:::o;6379:24::-;;;;;;;;;;;;;:::o;13398:75::-;13439:13;13463:7;;;;;;;;;;;;;;;;;13456:14;;13398:75;:::o;24771:166::-;24863:4;24889:12;:40;24902:26;24889:40;;;;;;;;;;;;;;;;;;;;;;;;;24882:47;;24771:166;;;:::o;10209:340::-;10304:4;10348:11;:25;10360:12;:10;:12::i;:::-;10348:25;;;;;;;;;;;;;;;:34;10374:7;10348:34;;;;;;;;;;;;;;;;10329:15;:53;;10321:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;10436:83;10445:12;:10;:12::i;:::-;10458:7;10503:15;10466:11;:25;10478:12;:10;:12::i;:::-;10466:25;;;;;;;;;;;;;;;:34;10492:7;10466:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;10436:8;:83::i;:::-;10537:4;10530:11;;10209:340;;;;:::o;9256:169::-;9336:4;9353:42;9363:12;:10;:12::i;:::-;9377:9;9388:6;9353:9;:42::i;:::-;9413:4;9406:11;;9256:169;;;;:::o;6640:45::-;;;;:::o;8026:21::-;;;;;;;;;;;;;:::o;6158:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;6341:31::-;;;;;;;;;;;;;:::o;20601:386::-;20695:6;;;;;;;;;;;20681:20;;:10;:20;;;20673:29;;;;;;20825:20;20848:5;:15;;;20872:4;20848:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20825:53;;20889:5;:14;;;20904:2;20908:12;20889:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20937:42;20950:10;20962:2;20966:12;20937:42;;;;;;;;:::i;:::-;;;;;;;;20662:325;20601:386;;:::o;6267:30::-;;;;;;;;;;;;;:::o;24535:194::-;5094:12;:10;:12::i;:::-;5084:22;;:6;;;;;;;;;;:22;;;5076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24716:5:::1;24672:12;:41;24685:27;24672:41;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;24535:194:::0;:::o;23333:100::-;23382:7;23411:14;;23404:21;;23333:100;:::o;13768:131::-;13851:7;13869:11;:18;13881:5;13869:18;;;;;;;;;;;;;;;:27;13888:7;13869:27;;;;;;;;;;;;;;;;13862:34;;13768:131;;;;:::o;23561:164::-;5094:12;:10;:12::i;:::-;5084:22;;:6;;;;;;;;;;:22;;;5076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23713:4:::1;23673:17;:37;23691:18;23673:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;23561:164:::0;:::o;23914:147::-;23994:4;24020:17;:33;24038:14;24020:33;;;;;;;;;;;;;;;;;;;;;;;;;24013:40;;23914:147;;;:::o;21073:832::-;21142:4;21160:19;21197:21;;;;;;;;;;;21160:59;;21304:9;21315;21329:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21303:44;;;;;;;;;21696:21;21741:4;21734;:11;21730:135;;;21784:4;21765:23;;21730:135;;;21849:4;21830:23;;21730:135;21882:16;21875:23;;;;;;21073:832;:::o;22698:377::-;5094:12;:10;:12::i;:::-;5084:22;;:6;;;;;;;;;;:22;;;5076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22841:12:::1;22823:15;;:30;;;;;;;;;;;;;;;;;;22876:6;22864:9;;:18;;;;;;;;;;;;;;;;;;22912:13;22893:16;;:32;;;;;;;;;;;;;;;;;;22970:4;22936:17;:31;22954:12;22936:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;23013:4;22985:17;:25;23003:6;22985:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;23063:4;23028:17;:32;23046:13;23028:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22698:377:::0;;;:::o;23441:106::-;5094:12;:10;:12::i;:::-;5084:22;;:6;;;;;;;;;;:22;;;5076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23532:7:::1;23515:14;:24;;;;23441:106:::0;:::o;5256:193::-;5094:12;:10;:12::i;:::-;5084:22;;:6;;;;;;;;;;:22;;;5076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5367:1:::1;5347:22;;:8;:22;;::::0;5339:74:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5433:8;5424:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;5256:193:::0;:::o;10851:349::-;10921:6;;;;;;;;;;;10907:20;;:10;:20;;;10899:29;;;;;;10971:1;10947:21;:25;10939:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;11027:14;11044:21;11027:38;;11077:12;11094:6;;;;;;;;;;;:11;;11114:6;11094:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11076:49;;;11144:7;11136:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;10888:312;;10851:349::o;24190:148::-;24238:7;24247;24256;24285:15;;;;;;;;;;;24302:9;;;;;;;;;;;24313:16;;;;;;;;;;;24277:53;;;;;;24190:148;;;:::o;4717:84::-;4770:7;4788:10;4781:17;;4717:84;:::o;10557:286::-;10666:1;10649:19;;:5;:19;;;10641:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10747:1;10728:21;;:7;:21;;;10720:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10829:6;10799:11;:18;10811:5;10799:18;;;;;;;;;;;;;;;:27;10818:7;10799:27;;;;;;;;;;;;;;;:36;;;;10557:286;;;:::o;13062:251::-;13188:5;13153:40;;:25;:31;13179:4;13153:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;13145:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;13300:5;13266:25;:31;13292:4;13266:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;13062:251;;:::o;13907:6282::-;14012:1;13996:18;;:4;:18;;;13988:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;14090:1;14076:16;;:2;:16;;;14068:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;14161:1;14152:6;:10;14144:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;14238:15;14248:4;14238:9;:15::i;:::-;14228:6;:25;;14220:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14317:13;;;;;;;;;;;14309:21;;:4;:21;;;14305:2786;;14411:30;14438:2;14411:26;:30::i;:::-;14408:51;;;14455:1;14446:6;:10;;;;14408:51;14480:17;:21;14498:2;14480:21;;;;;;;;;;;;;;;;;;;;;;;;;14475:263;;14558:15;;14547:6;14531:13;14541:2;14531:9;:13::i;:::-;:22;;;;:::i;:::-;14530:43;;14522:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;14666:11;;14656:6;:21;;14648:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14475:263;14806:6;14788:8;:14;14797:4;14788:14;;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;14873:3;14863:6;;14853;:17;;;;:::i;:::-;:23;;;;:::i;:::-;14843:6;:34;;;;:::i;:::-;14827:8;:12;14836:2;14827:12;;;;;;;;;;;;;;;;:50;;;;;;;:::i;:::-;;;;;;;;14994:3;14983:6;;14973;:17;;;;:::i;:::-;14972:25;;;;:::i;:::-;14945:8;:23;14962:4;14945:23;;;;;;;;;;;;;;;;:52;;;;;;;:::i;:::-;;;;;;;;15040:4;15017:56;;15026:4;15017:56;;;15068:3;15058:6;;15048;:17;;;;:::i;:::-;:23;;;;:::i;:::-;15017:56;;;;;;:::i;:::-;;;;;;;;15174:2;15159:54;;15168:4;15159:54;;;15208:3;15198:6;;15188;:17;;;;:::i;:::-;:23;;;;:::i;:::-;15178:6;:34;;;;:::i;:::-;15159:54;;;;;;:::i;:::-;;;;;;;;15340:22;15368:38;:36;:38::i;:::-;15340:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15490:22;:29;;;;15464:23;:55;;;;15702:1;15675:23;;:28;15671:381;;15725:21;15749:22;15796:1;15772:23;;:25;;;;:::i;:::-;15749:49;;;;;;;;:::i;:::-;;;;;;;;;;15725:73;;15876:4;15871:1;15855:13;:17;;;;:::i;:::-;15854:26;;;;:::i;:::-;15837:13;:44;;;;:::i;:::-;15817:17;:64;;;;15945:17;;15903:38;:36;:38::i;:::-;:59;15900:137;;16004:13;15987:14;:30;;;;15900:137;15706:346;15671:381;16109:23;;16082:24;16100:4;16082:9;:24::i;:::-;:50;16078:1002;;;16153:43;16171:24;16189:4;16171:9;:24::i;:::-;16153:17;:43::i;:::-;16700:3;16694:2;16670:21;:26;;;;:::i;:::-;16669:34;;;;:::i;:::-;16655:11;:48;;;;16761:3;16755:2;16731:21;:26;;;;:::i;:::-;16730:34;;;;:::i;:::-;16722:5;:42;;;;16829:3;16823:2;16799:21;:26;;;;:::i;:::-;16798:34;;;;:::i;:::-;16783:12;:49;;;;16904:15;;;;;;;;;;;16896:33;;:46;16930:11;;16896:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16969:9;;;;;;;;;;;16961:27;;:34;16989:5;;16961:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17022:16;;;;;;;;;;;17014:34;;:48;17049:12;;17014:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16078:1002;14305:2786;17113:13;;;;;;;;;;;17107:19;;:2;:19;;;17103:2540;;17153:17;:23;17171:4;17153:23;;;;;;;;;;;;;;;;;;;;;;;;;17148:139;;17215:11;;17205:6;:21;;17197:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;17148:139;17482:14;;17441:38;:36;:38::i;:::-;:55;17437:167;;;17586:2;17576:7;:12;;;;17437:167;17665:12;:18;17678:4;17665:18;;;;;;;;;;;;;;;;;;;;;;;;;17662:94;;;17734:5;17712:27;;:12;:18;17725:4;17712:18;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;17704:36;;;;;;17662:94;17845:32;17872:4;17845:26;:32::i;:::-;17842:54;;;17892:1;17882:7;:11;;;;17842:54;17975:6;17957:8;:14;17966:4;17957:14;;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;18043:3;18032:7;;18022:6;:18;;;;:::i;:::-;:24;;;;:::i;:::-;18012:6;:35;;;;:::i;:::-;17996:8;:12;18005:2;17996:12;;;;;;;;;;;;;;;;:51;;;;;;;:::i;:::-;;;;;;;;18165:3;18153:7;;18143:6;:18;;;;:::i;:::-;18142:26;;;;:::i;:::-;18115:8;:23;18132:4;18115:23;;;;;;;;;;;;;;;;:53;;;;;;;:::i;:::-;;;;;;;;18211:4;18188:57;;18197:4;18188:57;;;18240:3;18229:7;;18219:6;:18;;;;:::i;:::-;:24;;;;:::i;:::-;18188:57;;;;;;:::i;:::-;;;;;;;;18346:2;18331:55;;18340:4;18331:55;;;18381:3;18370:7;;18360:6;:18;;;;:::i;:::-;:24;;;;:::i;:::-;18350:6;:35;;;;:::i;:::-;18331:55;;;;;;:::i;:::-;;;;;;;;18464:22;18492:38;:36;:38::i;:::-;18464:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18579:23;;18552:24;18570:4;18552:9;:24::i;:::-;:50;18548:1000;;;18623:43;18641:24;18659:4;18641:9;:24::i;:::-;18623:17;:43::i;:::-;19170:3;19164:2;19140:21;:26;;;;:::i;:::-;19139:34;;;;:::i;:::-;19125:11;:48;;;;19231:3;19225:2;19201:21;:26;;;;:::i;:::-;19200:34;;;;:::i;:::-;19192:5;:42;;;;19299:3;19293:2;19269:21;:26;;;;:::i;:::-;19268:34;;;;:::i;:::-;19253:12;:49;;;;19374:15;;;;;;;;;;;19366:33;;:46;19400:11;;19366:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19439:9;;;;;;;;;;;19431:27;;:34;19459:5;;19431:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19492:16;;;;;;;;;;;19484:34;;:48;19519:12;;19484:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18548:1000;6857:1;19607:7;:24;;;;17103:2540;19665:13;;;;;;;;;;;19659:19;;:2;:19;;;;:44;;;;;19690:13;;;;;;;;;;;19682:21;;:4;:21;;;;19659:44;19655:527;;;19788:17;:21;19806:2;19788:21;;;;;;;;;;;;;;;;;;;;;;;;;19787:22;:50;;;;19814:17;:23;19832:4;19814:23;;;;;;;;;;;;;;;;;;;;;;;;;19813:24;19787:50;19783:198;;;19894:15;;19883:6;19867:13;19877:2;19867:9;:13::i;:::-;:22;;;;:::i;:::-;19866:43;;19858:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;19783:198;20063:6;20045:8;:14;20054:4;20045:14;;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;20100:6;20084:8;:12;20093:2;20084:12;;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;20155:2;20140:26;;20149:4;20140:26;;;20159:6;20140:26;;;;;;:::i;:::-;;;;;;;;19655:527;13907:6282;;;:::o;20197:396::-;20264:21;20302:1;20288:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20264:40;;20333:4;20315;20320:1;20315:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;20359:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20349:4;20354:1;20349:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;20392:62;20409:4;20424:15;;;;;;;;;;;20442:11;20392:8;:62::i;:::-;20465:15;;;;;;;;;;;:66;;;20532:11;20545:1;20548:4;20562;20569:15;20465:120;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20253:340;20197:396;:::o;7:77:3:-;44:7;73:5;62:16;;7:77;;;:::o;90:180::-;138:77;135:1;128:88;235:4;232:1;225:15;259:4;256:1;249:15;276:305;316:3;335:20;353:1;335:20;:::i;:::-;330:25;;369:20;387:1;369:20;:::i;:::-;364:25;;523:1;455:66;451:74;448:1;445:81;442:107;;;529:18;;:::i;:::-;442:107;573:1;570;566:9;559:16;;276:305;;;;:::o;587:99::-;639:6;673:5;667:12;657:22;;587:99;;;:::o;692:169::-;776:11;810:6;805:3;798:19;850:4;845:3;841:14;826:29;;692:169;;;;:::o;867:307::-;935:1;945:113;959:6;956:1;953:13;945:113;;;1044:1;1039:3;1035:11;1029:18;1025:1;1020:3;1016:11;1009:39;981:2;978:1;974:10;969:15;;945:113;;;1076:6;1073:1;1070:13;1067:101;;;1156:1;1147:6;1142:3;1138:16;1131:27;1067:101;916:258;867:307;;;:::o;1180:102::-;1221:6;1272:2;1268:7;1263:2;1256:5;1252:14;1248:28;1238:38;;1180:102;;;:::o;1288:364::-;1376:3;1404:39;1437:5;1404:39;:::i;:::-;1459:71;1523:6;1518:3;1459:71;:::i;:::-;1452:78;;1539:52;1584:6;1579:3;1572:4;1565:5;1561:16;1539:52;:::i;:::-;1616:29;1638:6;1616:29;:::i;:::-;1611:3;1607:39;1600:46;;1380:272;1288:364;;;;:::o;1658:313::-;1771:4;1809:2;1798:9;1794:18;1786:26;;1858:9;1852:4;1848:20;1844:1;1833:9;1829:17;1822:47;1886:78;1959:4;1950:6;1886:78;:::i;:::-;1878:86;;1658:313;;;;:::o;2058:117::-;2167:1;2164;2157:12;2304:126;2341:7;2381:42;2374:5;2370:54;2359:65;;2304:126;;;:::o;2436:96::-;2473:7;2502:24;2520:5;2502:24;:::i;:::-;2491:35;;2436:96;;;:::o;2538:122::-;2611:24;2629:5;2611:24;:::i;:::-;2604:5;2601:35;2591:63;;2650:1;2647;2640:12;2591:63;2538:122;:::o;2666:139::-;2712:5;2750:6;2737:20;2728:29;;2766:33;2793:5;2766:33;:::i;:::-;2666:139;;;;:::o;2811:122::-;2884:24;2902:5;2884:24;:::i;:::-;2877:5;2874:35;2864:63;;2923:1;2920;2913:12;2864:63;2811:122;:::o;2939:139::-;2985:5;3023:6;3010:20;3001:29;;3039:33;3066:5;3039:33;:::i;:::-;2939:139;;;;:::o;3084:474::-;3152:6;3160;3209:2;3197:9;3188:7;3184:23;3180:32;3177:119;;;3215:79;;:::i;:::-;3177:119;3335:1;3360:53;3405:7;3396:6;3385:9;3381:22;3360:53;:::i;:::-;3350:63;;3306:117;3462:2;3488:53;3533:7;3524:6;3513:9;3509:22;3488:53;:::i;:::-;3478:63;;3433:118;3084:474;;;;;:::o;3564:90::-;3598:7;3641:5;3634:13;3627:21;3616:32;;3564:90;;;:::o;3660:109::-;3741:21;3756:5;3741:21;:::i;:::-;3736:3;3729:34;3660:109;;:::o;3775:210::-;3862:4;3900:2;3889:9;3885:18;3877:26;;3913:65;3975:1;3964:9;3960:17;3951:6;3913:65;:::i;:::-;3775:210;;;;:::o;3991:60::-;4019:3;4040:5;4033:12;;3991:60;;;:::o;4057:142::-;4107:9;4140:53;4158:34;4167:24;4185:5;4167:24;:::i;:::-;4158:34;:::i;:::-;4140:53;:::i;:::-;4127:66;;4057:142;;;:::o;4205:126::-;4255:9;4288:37;4319:5;4288:37;:::i;:::-;4275:50;;4205:126;;;:::o;4337:141::-;4402:9;4435:37;4466:5;4435:37;:::i;:::-;4422:50;;4337:141;;;:::o;4484:161::-;4586:52;4632:5;4586:52;:::i;:::-;4581:3;4574:65;4484:161;;:::o;4651:252::-;4759:4;4797:2;4786:9;4782:18;4774:26;;4810:86;4893:1;4882:9;4878:17;4869:6;4810:86;:::i;:::-;4651:252;;;;:::o;4909:118::-;4996:24;5014:5;4996:24;:::i;:::-;4991:3;4984:37;4909:118;;:::o;5033:222::-;5126:4;5164:2;5153:9;5149:18;5141:26;;5177:71;5245:1;5234:9;5230:17;5221:6;5177:71;:::i;:::-;5033:222;;;;:::o;5261:329::-;5320:6;5369:2;5357:9;5348:7;5344:23;5340:32;5337:119;;;5375:79;;:::i;:::-;5337:119;5495:1;5520:53;5565:7;5556:6;5545:9;5541:22;5520:53;:::i;:::-;5510:63;;5466:117;5261:329;;;;:::o;5596:619::-;5673:6;5681;5689;5738:2;5726:9;5717:7;5713:23;5709:32;5706:119;;;5744:79;;:::i;:::-;5706:119;5864:1;5889:53;5934:7;5925:6;5914:9;5910:22;5889:53;:::i;:::-;5879:63;;5835:117;5991:2;6017:53;6062:7;6053:6;6042:9;6038:22;6017:53;:::i;:::-;6007:63;;5962:118;6119:2;6145:53;6190:7;6181:6;6170:9;6166:22;6145:53;:::i;:::-;6135:63;;6090:118;5596:619;;;;;:::o;6221:329::-;6280:6;6329:2;6317:9;6308:7;6304:23;6300:32;6297:119;;;6335:79;;:::i;:::-;6297:119;6455:1;6480:53;6525:7;6516:6;6505:9;6501:22;6480:53;:::i;:::-;6470:63;;6426:117;6221:329;;;;:::o;6556:86::-;6591:7;6631:4;6624:5;6620:16;6609:27;;6556:86;;;:::o;6648:112::-;6731:22;6747:5;6731:22;:::i;:::-;6726:3;6719:35;6648:112;;:::o;6766:214::-;6855:4;6893:2;6882:9;6878:18;6870:26;;6906:67;6970:1;6959:9;6955:17;6946:6;6906:67;:::i;:::-;6766:214;;;;:::o;6986:118::-;7073:24;7091:5;7073:24;:::i;:::-;7068:3;7061:37;6986:118;;:::o;7110:222::-;7203:4;7241:2;7230:9;7226:18;7218:26;;7254:71;7322:1;7311:9;7307:17;7298:6;7254:71;:::i;:::-;7110:222;;;;:::o;7338:332::-;7459:4;7497:2;7486:9;7482:18;7474:26;;7510:71;7578:1;7567:9;7563:17;7554:6;7510:71;:::i;:::-;7591:72;7659:2;7648:9;7644:18;7635:6;7591:72;:::i;:::-;7338:332;;;;;:::o;7676:474::-;7744:6;7752;7801:2;7789:9;7780:7;7776:23;7772:32;7769:119;;;7807:79;;:::i;:::-;7769:119;7927:1;7952:53;7997:7;7988:6;7977:9;7973:22;7952:53;:::i;:::-;7942:63;;7898:117;8054:2;8080:53;8125:7;8116:6;8105:9;8101:22;8080:53;:::i;:::-;8070:63;;8025:118;7676:474;;;;;:::o;8156:109::-;8206:7;8235:24;8253:5;8235:24;:::i;:::-;8224:35;;8156:109;;;:::o;8271:148::-;8357:37;8388:5;8357:37;:::i;:::-;8350:5;8347:48;8337:76;;8409:1;8406;8399:12;8337:76;8271:148;:::o;8425:165::-;8484:5;8522:6;8509:20;8500:29;;8538:46;8578:5;8538:46;:::i;:::-;8425:165;;;;:::o;8596:500::-;8677:6;8685;8734:2;8722:9;8713:7;8709:23;8705:32;8702:119;;;8740:79;;:::i;:::-;8702:119;8860:1;8885:66;8943:7;8934:6;8923:9;8919:22;8885:66;:::i;:::-;8875:76;;8831:130;9000:2;9026:53;9071:7;9062:6;9051:9;9047:22;9026:53;:::i;:::-;9016:63;;8971:118;8596:500;;;;;:::o;9102:474::-;9170:6;9178;9227:2;9215:9;9206:7;9202:23;9198:32;9195:119;;;9233:79;;:::i;:::-;9195:119;9353:1;9378:53;9423:7;9414:6;9403:9;9399:22;9378:53;:::i;:::-;9368:63;;9324:117;9480:2;9506:53;9551:7;9542:6;9531:9;9527:22;9506:53;:::i;:::-;9496:63;;9451:118;9102:474;;;;;:::o;9582:619::-;9659:6;9667;9675;9724:2;9712:9;9703:7;9699:23;9695:32;9692:119;;;9730:79;;:::i;:::-;9692:119;9850:1;9875:53;9920:7;9911:6;9900:9;9896:22;9875:53;:::i;:::-;9865:63;;9821:117;9977:2;10003:53;10048:7;10039:6;10028:9;10024:22;10003:53;:::i;:::-;9993:63;;9948:118;10105:2;10131:53;10176:7;10167:6;10156:9;10152:22;10131:53;:::i;:::-;10121:63;;10076:118;9582:619;;;;;:::o;10207:442::-;10356:4;10394:2;10383:9;10379:18;10371:26;;10407:71;10475:1;10464:9;10460:17;10451:6;10407:71;:::i;:::-;10488:72;10556:2;10545:9;10541:18;10532:6;10488:72;:::i;:::-;10570;10638:2;10627:9;10623:18;10614:6;10570:72;:::i;:::-;10207:442;;;;;;:::o;10655:220::-;10795:34;10791:1;10783:6;10779:14;10772:58;10864:3;10859:2;10851:6;10847:15;10840:28;10655:220;:::o;10881:366::-;11023:3;11044:67;11108:2;11103:3;11044:67;:::i;:::-;11037:74;;11120:93;11209:3;11120:93;:::i;:::-;11238:2;11233:3;11229:12;11222:19;;10881:366;;;:::o;11253:419::-;11419:4;11457:2;11446:9;11442:18;11434:26;;11506:9;11500:4;11496:20;11492:1;11481:9;11477:17;11470:47;11534:131;11660:4;11534:131;:::i;:::-;11526:139;;11253:419;;;:::o;11678:182::-;11818:34;11814:1;11806:6;11802:14;11795:58;11678:182;:::o;11866:366::-;12008:3;12029:67;12093:2;12088:3;12029:67;:::i;:::-;12022:74;;12105:93;12194:3;12105:93;:::i;:::-;12223:2;12218:3;12214:12;12207:19;;11866:366;;;:::o;12238:419::-;12404:4;12442:2;12431:9;12427:18;12419:26;;12491:9;12485:4;12481:20;12477:1;12466:9;12462:17;12455:47;12519:131;12645:4;12519:131;:::i;:::-;12511:139;;12238:419;;;:::o;12663:85::-;12708:7;12737:5;12726:16;;12663:85;;;:::o;12754:158::-;12812:9;12845:61;12863:42;12872:32;12898:5;12872:32;:::i;:::-;12863:42;:::i;:::-;12845:61;:::i;:::-;12832:74;;12754:158;;;:::o;12918:147::-;13013:45;13052:5;13013:45;:::i;:::-;13008:3;13001:58;12918:147;;:::o;13071:807::-;13320:4;13358:3;13347:9;13343:19;13335:27;;13372:71;13440:1;13429:9;13425:17;13416:6;13372:71;:::i;:::-;13453:72;13521:2;13510:9;13506:18;13497:6;13453:72;:::i;:::-;13535:80;13611:2;13600:9;13596:18;13587:6;13535:80;:::i;:::-;13625;13701:2;13690:9;13686:18;13677:6;13625:80;:::i;:::-;13715:73;13783:3;13772:9;13768:19;13759:6;13715:73;:::i;:::-;13798;13866:3;13855:9;13851:19;13842:6;13798:73;:::i;:::-;13071:807;;;;;;;;;:::o;13884:143::-;13941:5;13972:6;13966:13;13957:22;;13988:33;14015:5;13988:33;:::i;:::-;13884:143;;;;:::o;14033:663::-;14121:6;14129;14137;14186:2;14174:9;14165:7;14161:23;14157:32;14154:119;;;14192:79;;:::i;:::-;14154:119;14312:1;14337:64;14393:7;14384:6;14373:9;14369:22;14337:64;:::i;:::-;14327:74;;14283:128;14450:2;14476:64;14532:7;14523:6;14512:9;14508:22;14476:64;:::i;:::-;14466:74;;14421:129;14589:2;14615:64;14671:7;14662:6;14651:9;14647:22;14615:64;:::i;:::-;14605:74;;14560:129;14033:663;;;;;:::o;14702:143::-;14759:5;14790:6;14784:13;14775:22;;14806:33;14833:5;14806:33;:::i;:::-;14702:143;;;;:::o;14851:351::-;14921:6;14970:2;14958:9;14949:7;14945:23;14941:32;14938:119;;;14976:79;;:::i;:::-;14938:119;15096:1;15121:64;15177:7;15168:6;15157:9;15153:22;15121:64;:::i;:::-;15111:74;;15067:128;14851:351;;;;:::o;15208:332::-;15329:4;15367:2;15356:9;15352:18;15344:26;;15380:71;15448:1;15437:9;15433:17;15424:6;15380:71;:::i;:::-;15461:72;15529:2;15518:9;15514:18;15505:6;15461:72;:::i;:::-;15208:332;;;;;:::o;15546:348::-;15586:7;15609:20;15627:1;15609:20;:::i;:::-;15604:25;;15643:20;15661:1;15643:20;:::i;:::-;15638:25;;15831:1;15763:66;15759:74;15756:1;15753:81;15748:1;15741:9;15734:17;15730:105;15727:131;;;15838:18;;:::i;:::-;15727:131;15886:1;15883;15879:9;15868:20;;15546:348;;;;:::o;15900:180::-;15948:77;15945:1;15938:88;16045:4;16042:1;16035:15;16069:4;16066:1;16059:15;16086:185;16126:1;16143:20;16161:1;16143:20;:::i;:::-;16138:25;;16177:20;16195:1;16177:20;:::i;:::-;16172:25;;16216:1;16206:35;;16221:18;;:::i;:::-;16206:35;16263:1;16260;16256:9;16251:14;;16086:185;;;;:::o;16277:227::-;16417:34;16413:1;16405:6;16401:14;16394:58;16486:10;16481:2;16473:6;16469:15;16462:35;16277:227;:::o;16510:366::-;16652:3;16673:67;16737:2;16732:3;16673:67;:::i;:::-;16666:74;;16749:93;16838:3;16749:93;:::i;:::-;16867:2;16862:3;16858:12;16851:19;;16510:366;;;:::o;16882:419::-;17048:4;17086:2;17075:9;17071:18;17063:26;;17135:9;17129:4;17125:20;17121:1;17110:9;17106:17;17099:47;17163:131;17289:4;17163:131;:::i;:::-;17155:139;;16882:419;;;:::o;17307:229::-;17447:34;17443:1;17435:6;17431:14;17424:58;17516:12;17511:2;17503:6;17499:15;17492:37;17307:229;:::o;17542:366::-;17684:3;17705:67;17769:2;17764:3;17705:67;:::i;:::-;17698:74;;17781:93;17870:3;17781:93;:::i;:::-;17899:2;17894:3;17890:12;17883:19;;17542:366;;;:::o;17914:419::-;18080:4;18118:2;18107:9;18103:18;18095:26;;18167:9;18161:4;18157:20;18153:1;18142:9;18138:17;18131:47;18195:131;18321:4;18195:131;:::i;:::-;18187:139;;17914:419;;;:::o;18339:228::-;18479:34;18475:1;18467:6;18463:14;18456:58;18548:11;18543:2;18535:6;18531:15;18524:36;18339:228;:::o;18573:366::-;18715:3;18736:67;18800:2;18795:3;18736:67;:::i;:::-;18729:74;;18812:93;18901:3;18812:93;:::i;:::-;18930:2;18925:3;18921:12;18914:19;;18573:366;;;:::o;18945:419::-;19111:4;19149:2;19138:9;19134:18;19126:26;;19198:9;19192:4;19188:20;19184:1;19173:9;19169:17;19162:47;19226:131;19352:4;19226:131;:::i;:::-;19218:139;;18945:419;;;:::o;19370:191::-;19410:4;19430:20;19448:1;19430:20;:::i;:::-;19425:25;;19464:20;19482:1;19464:20;:::i;:::-;19459:25;;19503:1;19500;19497:8;19494:34;;;19508:18;;:::i;:::-;19494:34;19553:1;19550;19546:9;19538:17;;19370:191;;;;:::o;19567:231::-;19707:34;19703:1;19695:6;19691:14;19684:58;19776:14;19771:2;19763:6;19759:15;19752:39;19567:231;:::o;19804:366::-;19946:3;19967:67;20031:2;20026:3;19967:67;:::i;:::-;19960:74;;20043:93;20132:3;20043:93;:::i;:::-;20161:2;20156:3;20152:12;20145:19;;19804:366;;;:::o;20176:419::-;20342:4;20380:2;20369:9;20365:18;20357:26;;20429:9;20423:4;20419:20;20415:1;20404:9;20400:17;20393:47;20457:131;20583:4;20457:131;:::i;:::-;20449:139;;20176:419;;;:::o;20601:231::-;20741:34;20737:1;20729:6;20725:14;20718:58;20810:14;20805:2;20797:6;20793:15;20786:39;20601:231;:::o;20838:366::-;20980:3;21001:67;21065:2;21060:3;21001:67;:::i;:::-;20994:74;;21077:93;21166:3;21077:93;:::i;:::-;21195:2;21190:3;21186:12;21179:19;;20838:366;;;:::o;21210:419::-;21376:4;21414:2;21403:9;21399:18;21391:26;;21463:9;21457:4;21453:20;21449:1;21438:9;21434:17;21427:47;21491:131;21617:4;21491:131;:::i;:::-;21483:139;;21210:419;;;:::o;21635:114::-;21672:7;21712:30;21705:5;21701:42;21690:53;;21635:114;;;:::o;21755:122::-;21828:24;21846:5;21828:24;:::i;:::-;21821:5;21818:35;21808:63;;21867:1;21864;21857:12;21808:63;21755:122;:::o;21883:143::-;21940:5;21971:6;21965:13;21956:22;;21987:33;22014:5;21987:33;:::i;:::-;21883:143;;;;:::o;22032:93::-;22068:7;22108:10;22101:5;22097:22;22086:33;;22032:93;;;:::o;22131:120::-;22203:23;22220:5;22203:23;:::i;:::-;22196:5;22193:34;22183:62;;22241:1;22238;22231:12;22183:62;22131:120;:::o;22257:141::-;22313:5;22344:6;22338:13;22329:22;;22360:32;22386:5;22360:32;:::i;:::-;22257:141;;;;:::o;22404:661::-;22491:6;22499;22507;22556:2;22544:9;22535:7;22531:23;22527:32;22524:119;;;22562:79;;:::i;:::-;22524:119;22682:1;22707:64;22763:7;22754:6;22743:9;22739:22;22707:64;:::i;:::-;22697:74;;22653:128;22820:2;22846:64;22902:7;22893:6;22882:9;22878:22;22846:64;:::i;:::-;22836:74;;22791:129;22959:2;22985:63;23040:7;23031:6;23020:9;23016:22;22985:63;:::i;:::-;22975:73;;22930:128;22404:661;;;;;:::o;23071:118::-;23142:22;23158:5;23142:22;:::i;:::-;23135:5;23132:33;23122:61;;23179:1;23176;23169:12;23122:61;23071:118;:::o;23195:139::-;23250:5;23281:6;23275:13;23266:22;;23297:31;23322:5;23297:31;:::i;:::-;23195:139;;;;:::o;23340:347::-;23408:6;23457:2;23445:9;23436:7;23432:23;23428:32;23425:119;;;23463:79;;:::i;:::-;23425:119;23583:1;23608:62;23662:7;23653:6;23642:9;23638:22;23608:62;:::i;:::-;23598:72;;23554:126;23340:347;;;;:::o;23693:102::-;23735:8;23782:5;23779:1;23775:13;23754:34;;23693:102;;;:::o;23801:848::-;23862:5;23869:4;23893:6;23884:15;;23917:5;23908:14;;23931:712;23952:1;23942:8;23939:15;23931:712;;;24047:4;24042:3;24038:14;24032:4;24029:24;24026:50;;;24056:18;;:::i;:::-;24026:50;24106:1;24096:8;24092:16;24089:451;;;24521:4;24514:5;24510:16;24501:25;;24089:451;24571:4;24565;24561:15;24553:23;;24601:32;24624:8;24601:32;:::i;:::-;24589:44;;23931:712;;;23801:848;;;;;;;:::o;24655:1073::-;24709:5;24900:8;24890:40;;24921:1;24912:10;;24923:5;;24890:40;24949:4;24939:36;;24966:1;24957:10;;24968:5;;24939:36;25035:4;25083:1;25078:27;;;;25119:1;25114:191;;;;25028:277;;25078:27;25096:1;25087:10;;25098:5;;;25114:191;25159:3;25149:8;25146:17;25143:43;;;25166:18;;:::i;:::-;25143:43;25215:8;25212:1;25208:16;25199:25;;25250:3;25243:5;25240:14;25237:40;;;25257:18;;:::i;:::-;25237:40;25290:5;;;25028:277;;25414:2;25404:8;25401:16;25395:3;25389:4;25386:13;25382:36;25364:2;25354:8;25351:16;25346:2;25340:4;25337:12;25333:35;25317:111;25314:246;;;25470:8;25464:4;25460:19;25451:28;;25505:3;25498:5;25495:14;25492:40;;;25512:18;;:::i;:::-;25492:40;25545:5;;25314:246;25585:42;25623:3;25613:8;25607:4;25604:1;25585:42;:::i;:::-;25570:57;;;;25659:4;25654:3;25650:14;25643:5;25640:25;25637:51;;;25668:18;;:::i;:::-;25637:51;25717:4;25710:5;25706:16;25697:25;;24655:1073;;;;;;:::o;25734:281::-;25792:5;25816:23;25834:4;25816:23;:::i;:::-;25808:31;;25860:25;25876:8;25860:25;:::i;:::-;25848:37;;25904:104;25941:66;25931:8;25925:4;25904:104;:::i;:::-;25895:113;;25734:281;;;;:::o;26021:225::-;26161:34;26157:1;26149:6;26145:14;26138:58;26230:8;26225:2;26217:6;26213:15;26206:33;26021:225;:::o;26252:366::-;26394:3;26415:67;26479:2;26474:3;26415:67;:::i;:::-;26408:74;;26491:93;26580:3;26491:93;:::i;:::-;26609:2;26604:3;26600:12;26593:19;;26252:366;;;:::o;26624:419::-;26790:4;26828:2;26817:9;26813:18;26805:26;;26877:9;26871:4;26867:20;26863:1;26852:9;26848:17;26841:47;26905:131;27031:4;26905:131;:::i;:::-;26897:139;;26624:419;;;:::o;27049:351::-;27119:6;27168:2;27156:9;27147:7;27143:23;27139:32;27136:119;;;27174:79;;:::i;:::-;27136:119;27294:1;27319:64;27375:7;27366:6;27355:9;27351:22;27319:64;:::i;:::-;27309:74;;27265:128;27049:351;;;;:::o;27406:332::-;27527:4;27565:2;27554:9;27550:18;27542:26;;27578:71;27646:1;27635:9;27631:17;27622:6;27578:71;:::i;:::-;27659:72;27727:2;27716:9;27712:18;27703:6;27659:72;:::i;:::-;27406:332;;;;;:::o;27744:116::-;27814:21;27829:5;27814:21;:::i;:::-;27807:5;27804:32;27794:60;;27850:1;27847;27840:12;27794:60;27744:116;:::o;27866:137::-;27920:5;27951:6;27945:13;27936:22;;27967:30;27991:5;27967:30;:::i;:::-;27866:137;;;;:::o;28009:345::-;28076:6;28125:2;28113:9;28104:7;28100:23;28096:32;28093:119;;;28131:79;;:::i;:::-;28093:119;28251:1;28276:61;28329:7;28320:6;28309:9;28305:22;28276:61;:::i;:::-;28266:71;;28222:125;28009:345;;;;:::o;28360:442::-;28509:4;28547:2;28536:9;28532:18;28524:26;;28560:71;28628:1;28617:9;28613:17;28604:6;28560:71;:::i;:::-;28641:72;28709:2;28698:9;28694:18;28685:6;28641:72;:::i;:::-;28723;28791:2;28780:9;28776:18;28767:6;28723:72;:::i;:::-;28360:442;;;;;;:::o;28808:226::-;28948:34;28944:1;28936:6;28932:14;28925:58;29017:9;29012:2;29004:6;29000:15;28993:34;28808:226;:::o;29040:366::-;29182:3;29203:67;29267:2;29262:3;29203:67;:::i;:::-;29196:74;;29279:93;29368:3;29279:93;:::i;:::-;29397:2;29392:3;29388:12;29381:19;;29040:366;;;:::o;29412:419::-;29578:4;29616:2;29605:9;29601:18;29593:26;;29665:9;29659:4;29655:20;29651:1;29640:9;29636:17;29629:47;29693:131;29819:4;29693:131;:::i;:::-;29685:139;;29412:419;;;:::o;29837:226::-;29977:34;29973:1;29965:6;29961:14;29954:58;30046:9;30041:2;30033:6;30029:15;30022:34;29837:226;:::o;30069:366::-;30211:3;30232:67;30296:2;30291:3;30232:67;:::i;:::-;30225:74;;30308:93;30397:3;30308:93;:::i;:::-;30426:2;30421:3;30417:12;30410:19;;30069:366;;;:::o;30441:419::-;30607:4;30645:2;30634:9;30630:18;30622:26;;30694:9;30688:4;30684:20;30680:1;30669:9;30665:17;30658:47;30722:131;30848:4;30722:131;:::i;:::-;30714:139;;30441:419;;;:::o;30866:147::-;30967:11;31004:3;30989:18;;30866:147;;;;:::o;31019:114::-;;:::o;31139:398::-;31298:3;31319:83;31400:1;31395:3;31319:83;:::i;:::-;31312:90;;31411:93;31500:3;31411:93;:::i;:::-;31529:1;31524:3;31520:11;31513:18;;31139:398;;;:::o;31543:379::-;31727:3;31749:147;31892:3;31749:147;:::i;:::-;31742:154;;31913:3;31906:10;;31543:379;;;:::o;31928:223::-;32068:34;32064:1;32056:6;32052:14;32045:58;32137:6;32132:2;32124:6;32120:15;32113:31;31928:223;:::o;32157:366::-;32299:3;32320:67;32384:2;32379:3;32320:67;:::i;:::-;32313:74;;32396:93;32485:3;32396:93;:::i;:::-;32514:2;32509:3;32505:12;32498:19;;32157:366;;;:::o;32529:419::-;32695:4;32733:2;32722:9;32718:18;32710:26;;32782:9;32776:4;32772:20;32768:1;32757:9;32753:17;32746:47;32810:131;32936:4;32810:131;:::i;:::-;32802:139;;32529:419;;;:::o;32954:223::-;33094:34;33090:1;33082:6;33078:14;33071:58;33163:6;33158:2;33150:6;33146:15;33139:31;32954:223;:::o;33183:366::-;33325:3;33346:67;33410:2;33405:3;33346:67;:::i;:::-;33339:74;;33422:93;33511:3;33422:93;:::i;:::-;33540:2;33535:3;33531:12;33524:19;;33183:366;;;:::o;33555:419::-;33721:4;33759:2;33748:9;33744:18;33736:26;;33808:9;33802:4;33798:20;33794:1;33783:9;33779:17;33772:47;33836:131;33962:4;33836:131;:::i;:::-;33828:139;;33555:419;;;:::o;33980:221::-;34120:34;34116:1;34108:6;34104:14;34097:58;34189:4;34184:2;34176:6;34172:15;34165:29;33980:221;:::o;34207:366::-;34349:3;34370:67;34434:2;34429:3;34370:67;:::i;:::-;34363:74;;34446:93;34535:3;34446:93;:::i;:::-;34564:2;34559:3;34555:12;34548:19;;34207:366;;;:::o;34579:419::-;34745:4;34783:2;34772:9;34768:18;34760:26;;34832:9;34826:4;34822:20;34818:1;34807:9;34803:17;34796:47;34860:131;34986:4;34860:131;:::i;:::-;34852:139;;34579:419;;;:::o;35004:244::-;35144:34;35140:1;35132:6;35128:14;35121:58;35213:27;35208:2;35200:6;35196:15;35189:52;35004:244;:::o;35254:366::-;35396:3;35417:67;35481:2;35476:3;35417:67;:::i;:::-;35410:74;;35493:93;35582:3;35493:93;:::i;:::-;35611:2;35606:3;35602:12;35595:19;;35254:366;;;:::o;35626:419::-;35792:4;35830:2;35819:9;35815:18;35807:26;;35879:9;35873:4;35869:20;35865:1;35854:9;35850:17;35843:47;35907:131;36033:4;35907:131;:::i;:::-;35899:139;;35626:419;;;:::o;36051:225::-;36191:34;36187:1;36179:6;36175:14;36168:58;36260:8;36255:2;36247:6;36243:15;36236:33;36051:225;:::o;36282:366::-;36424:3;36445:67;36509:2;36504:3;36445:67;:::i;:::-;36438:74;;36521:93;36610:3;36521:93;:::i;:::-;36639:2;36634:3;36630:12;36623:19;;36282:366;;;:::o;36654:419::-;36820:4;36858:2;36847:9;36843:18;36835:26;;36907:9;36901:4;36897:20;36893:1;36882:9;36878:17;36871:47;36935:131;37061:4;36935:131;:::i;:::-;36927:139;;36654:419;;;:::o;37079:223::-;37219:34;37215:1;37207:6;37203:14;37196:58;37288:6;37283:2;37275:6;37271:15;37264:31;37079:223;:::o;37308:366::-;37450:3;37471:67;37535:2;37530:3;37471:67;:::i;:::-;37464:74;;37547:93;37636:3;37547:93;:::i;:::-;37665:2;37660:3;37656:12;37649:19;;37308:366;;;:::o;37680:419::-;37846:4;37884:2;37873:9;37869:18;37861:26;;37933:9;37927:4;37923:20;37919:1;37908:9;37904:17;37897:47;37961:131;38087:4;37961:131;:::i;:::-;37953:139;;37680:419;;;:::o;38105:229::-;38245:34;38241:1;38233:6;38229:14;38222:58;38314:12;38309:2;38301:6;38297:15;38290:37;38105:229;:::o;38340:366::-;38482:3;38503:67;38567:2;38562:3;38503:67;:::i;:::-;38496:74;;38579:93;38668:3;38579:93;:::i;:::-;38697:2;38692:3;38688:12;38681:19;;38340:366;;;:::o;38712:419::-;38878:4;38916:2;38905:9;38901:18;38893:26;;38965:9;38959:4;38955:20;38951:1;38940:9;38936:17;38929:47;38993:131;39119:4;38993:131;:::i;:::-;38985:139;;38712:419;;;:::o;39137:221::-;39277:34;39273:1;39265:6;39261:14;39254:58;39346:4;39341:2;39333:6;39329:15;39322:29;39137:221;:::o;39364:366::-;39506:3;39527:67;39591:2;39586:3;39527:67;:::i;:::-;39520:74;;39603:93;39692:3;39603:93;:::i;:::-;39721:2;39716:3;39712:12;39705:19;;39364:366;;;:::o;39736:419::-;39902:4;39940:2;39929:9;39925:18;39917:26;;39989:9;39983:4;39979:20;39975:1;39964:9;39960:17;39953:47;40017:131;40143:4;40017:131;:::i;:::-;40009:139;;39736:419;;;:::o;40161:238::-;40301:34;40297:1;40289:6;40285:14;40278:58;40370:21;40365:2;40357:6;40353:15;40346:46;40161:238;:::o;40405:366::-;40547:3;40568:67;40632:2;40627:3;40568:67;:::i;:::-;40561:74;;40644:93;40733:3;40644:93;:::i;:::-;40762:2;40757:3;40753:12;40746:19;;40405:366;;;:::o;40777:419::-;40943:4;40981:2;40970:9;40966:18;40958:26;;41030:9;41024:4;41020:20;41016:1;41005:9;41001:17;40994:47;41058:131;41184:4;41058:131;:::i;:::-;41050:139;;40777:419;;;:::o;41202:227::-;41342:34;41338:1;41330:6;41326:14;41319:58;41411:10;41406:2;41398:6;41394:15;41387:35;41202:227;:::o;41435:366::-;41577:3;41598:67;41662:2;41657:3;41598:67;:::i;:::-;41591:74;;41674:93;41763:3;41674:93;:::i;:::-;41792:2;41787:3;41783:12;41776:19;;41435:366;;;:::o;41807:419::-;41973:4;42011:2;42000:9;41996:18;41988:26;;42060:9;42054:4;42050:20;42046:1;42035:9;42031:17;42024:47;42088:131;42214:4;42088:131;:::i;:::-;42080:139;;41807:419;;;:::o;42232:180::-;42280:77;42277:1;42270:88;42377:4;42374:1;42367:15;42401:4;42398:1;42391:15;42418:180;42466:77;42463:1;42456:88;42563:4;42560:1;42553:15;42587:4;42584:1;42577:15;42604:114;42671:6;42705:5;42699:12;42689:22;;42604:114;;;:::o;42724:184::-;42823:11;42857:6;42852:3;42845:19;42897:4;42892:3;42888:14;42873:29;;42724:184;;;;:::o;42914:132::-;42981:4;43004:3;42996:11;;43034:4;43029:3;43025:14;43017:22;;42914:132;;;:::o;43052:108::-;43129:24;43147:5;43129:24;:::i;:::-;43124:3;43117:37;43052:108;;:::o;43166:179::-;43235:10;43256:46;43298:3;43290:6;43256:46;:::i;:::-;43334:4;43329:3;43325:14;43311:28;;43166:179;;;;:::o;43351:113::-;43421:4;43453;43448:3;43444:14;43436:22;;43351:113;;;:::o;43500:732::-;43619:3;43648:54;43696:5;43648:54;:::i;:::-;43718:86;43797:6;43792:3;43718:86;:::i;:::-;43711:93;;43828:56;43878:5;43828:56;:::i;:::-;43907:7;43938:1;43923:284;43948:6;43945:1;43942:13;43923:284;;;44024:6;44018:13;44051:63;44110:3;44095:13;44051:63;:::i;:::-;44044:70;;44137:60;44190:6;44137:60;:::i;:::-;44127:70;;43983:224;43970:1;43967;43963:9;43958:14;;43923:284;;;43927:14;44223:3;44216:10;;43624:608;;;43500:732;;;;:::o;44238:831::-;44501:4;44539:3;44528:9;44524:19;44516:27;;44553:71;44621:1;44610:9;44606:17;44597:6;44553:71;:::i;:::-;44634:80;44710:2;44699:9;44695:18;44686:6;44634:80;:::i;:::-;44761:9;44755:4;44751:20;44746:2;44735:9;44731:18;44724:48;44789:108;44892:4;44883:6;44789:108;:::i;:::-;44781:116;;44907:72;44975:2;44964:9;44960:18;44951:6;44907:72;:::i;:::-;44989:73;45057:3;45046:9;45042:19;45033:6;44989:73;:::i;:::-;44238:831;;;;;;;;:::o

Swarm Source

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