ETH Price: $3,923.20 (+0.77%)

Token

ERC-20: Behind The Curtain (BC)
 

Overview

Max Total Supply

1,000,000 BC

Holders

47

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,034.68127100460178123 BC

Value
$0.00
0x6a8cc59eF199459cf91b3195d657EF93d06EA33f
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:
BehindTheCurtain

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-16
*/

/*




We will not speak until 20-11-22
https://medium.com/@behindthecurtainerc



 */


// SPDX-License-Identifier: MIT


pragma solidity ^0.8.9;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

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

   
    function approve(address spender, uint256 amount) external returns (bool);


    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);


    event Transfer(address indexed from, address indexed to, uint256 value);

    
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

    function _setOwner(address newOwner) internal {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract BehindTheCurtain is ERC20, Ownable, Pausable {

    
    
    uint256 private initialSupply;
   
    uint256 private denominator = 100;

    uint256 private swapThreshold = 0.0000005 ether; // The contract will only swap to ETH, once the fee tokens reach the specified threshold
    
    uint256 private devTaxBuy;
    uint256 private liquidityTaxBuy;
   
    
    uint256 private devTaxSell;
    uint256 private liquidityTaxSell;
    uint256 public maxWallet;
    
    address private devTaxWallet;
    address private liquidityTaxWallet;
    
    
   
    
    mapping (address => bool) private blacklist;
    mapping (address => bool) private excludeList;
   
    
    mapping (string => uint256) private buyTaxes;
    mapping (string => uint256) private sellTaxes;
    mapping (string => address) private taxWallets;
    
    bool public taxStatus = true;
    
    IUniswapV2Router02 private uniswapV2Router02;
    IUniswapV2Factory private uniswapV2Factory;
    IUniswapV2Pair private uniswapV2Pair;
    
    constructor(string memory _tokenName,string memory _tokenSymbol,uint256 _supply) ERC20(_tokenName, _tokenSymbol) payable
    {
        initialSupply =_supply * (10**18);
        maxWallet = initialSupply * 3 / 100; 
        _setOwner(msg.sender);
        uniswapV2Router02 = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Factory = IUniswapV2Factory(uniswapV2Router02.factory());
        uniswapV2Pair = IUniswapV2Pair(uniswapV2Factory.createPair(address(this), uniswapV2Router02.WETH()));
        taxWallets["liquidity"] = address(0);
        setBuyTax(3,1); //dev tax, liquidity tax
        setSellTax(3,1); //dev tax, liquidity tax
        setTaxWallets(0xD112233fAb2D37E207B4795862bA24Aed8f48526); 
        exclude(msg.sender);
        exclude(address(this));
        exclude(devTaxWallet);
        _mint(msg.sender, initialSupply);
    }
    
    
    uint256 private devTokens;
    uint256 private liquidityTokens;
    
    
    /**
     * @dev Calculates the tax, transfer it to the contract. If the user is selling, and the swap threshold is met, it executes the tax.
     */
    function handleTax(address from, address to, uint256 amount) private returns (uint256) {
        address[] memory sellPath = new address[](2);
        sellPath[0] = address(this);
        sellPath[1] = uniswapV2Router02.WETH();
        
        if(!isExcluded(from) && !isExcluded(to)) {
            uint256 tax;
            uint256 baseUnit = amount / denominator;
            if(from == address(uniswapV2Pair)) {
                tax += baseUnit * buyTaxes["dev"];
                tax += baseUnit * buyTaxes["liquidity"];
               
                
                if(tax > 0) {
                    _transfer(from, address(this), tax);   
                }
                
                
                devTokens += baseUnit * buyTaxes["dev"];
                liquidityTokens += baseUnit * buyTaxes["liquidity"];

            } else if(to == address(uniswapV2Pair)) {
                
                tax += baseUnit * sellTaxes["dev"];
                tax += baseUnit * sellTaxes["liquidity"];
                
                
                if(tax > 0) {
                    _transfer(from, address(this), tax);   
                }
                
               
                devTokens += baseUnit * sellTaxes["dev"];
                liquidityTokens += baseUnit * sellTaxes["liquidity"];
                
                
                uint256 taxSum =  devTokens + liquidityTokens;
                
                if(taxSum == 0) return amount;
                
                uint256 ethValue = uniswapV2Router02.getAmountsOut( devTokens + liquidityTokens, sellPath)[1];
                
                if(ethValue >= swapThreshold) {
                    uint256 startBalance = address(this).balance;

                    uint256 toSell = devTokens + liquidityTokens / 2 ;
                    
                    _approve(address(this), address(uniswapV2Router02), toSell);
            
                    uniswapV2Router02.swapExactTokensForETH(
                        toSell,
                        0,
                        sellPath,
                        address(this),
                        block.timestamp
                    );
                    
                    uint256 ethGained = address(this).balance - startBalance;
                    
                    uint256 liquidityToken = liquidityTokens / 2;
                    uint256 liquidityETH = (ethGained * ((liquidityTokens / 2 * 10**18) / taxSum)) / 10**18;
                    
                    
                    uint256 devETH = (ethGained * ((devTokens * 10**18) / taxSum)) / 10**18;
                   
                    
                    _approve(address(this), address(uniswapV2Router02), liquidityToken);
                    
                    uniswapV2Router02.addLiquidityETH{value: liquidityETH}(
                        address(this),
                        liquidityToken,
                        0,
                        0,
                        taxWallets["liquidity"],
                        block.timestamp
                    );
                    
                    uint256 remainingTokens = (devTokens + liquidityTokens) - (toSell + liquidityToken);
                    
                    if(remainingTokens > 0) {
                        _transfer(address(this), taxWallets["dev"], remainingTokens);
                    }
                    
                    
                   (bool success,) = taxWallets["dev"].call{value: devETH}("");
                   require(success, "transfer to  dev wallet failed");
                    
                    
                    if(ethGained - ( devETH + liquidityETH) > 0) {
                       (bool success1,) = taxWallets["dev"].call{value: ethGained - (devETH + liquidityETH)}("");
                        require(success1, "transfer to  dev wallet failed");
                    }

                    
                    
                    
                    devTokens = 0;
                    liquidityTokens = 0;
                    
                }
                
            }
            
            amount -= tax;
            if (to != address(uniswapV2Pair)){
                require(balanceOf(to) + amount <= maxWallet, "maxWallet limit exceeded");
            }
           
        }
        
        return amount;
    }
    
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override virtual {
        require(!paused(), "ERC20: token transfer while paused");
        require(!isBlacklisted(msg.sender), "ERC20: sender blacklisted");
        require(!isBlacklisted(recipient), "ERC20: recipient blacklisted");
        require(!isBlacklisted(tx.origin), "ERC20: sender blacklisted");
        
        if(taxStatus) {
            amount = handleTax(sender, recipient, amount);   
        }

        super._transfer(sender, recipient, amount);
    }
    
    /**
     * @dev Triggers the tax handling functionality
     */
    function triggerTax() public onlyOwner {
        handleTax(address(0), address(uniswapV2Pair), 0);
    }
    
    /**
     * @dev Pauses transfers on the token.
     */
    function pause() public onlyOwner {
        require(!paused(), "ERC20: Contract is already paused");
        _pause();
    }

    /**
     * @dev Unpauses transfers on the token.
     */
    function unpause() public onlyOwner {
        require(paused(), "ERC20: Contract is not paused");
        _unpause();
    }

     /**
     * @dev set max wallet limit per address.
     */

    function setMaxWallet (uint256 amount) external onlyOwner {
        require (amount > 10000, "NO rug pull");
        maxWallet = amount * 10**18;
    }
    
    /**
     * @dev Burns tokens from caller address.
     */
    function burn(uint256 amount) public onlyOwner {
        _burn(msg.sender, amount);
    }
    
    /**
     * @dev Blacklists the specified account (Disables transfers to and from the account).
     */
    function enableBlacklist(address account) public onlyOwner {
        require(!blacklist[account], "ERC20: Account is already blacklisted");
        blacklist[account] = true;
    }
    
    /**
     * @dev Remove the specified account from the blacklist.
     */
    function disableBlacklist(address account) public onlyOwner {
        require(blacklist[account], "ERC20: Account is not blacklisted");
        blacklist[account] = false;
    }
    
    /**
     * @dev Excludes the specified account from tax.
     */
    function exclude(address account) public onlyOwner {
        require(!isExcluded(account), "ERC20: Account is already excluded");
        excludeList[account] = true;
    }
    
    /**
     * @dev Re-enables tax on the specified account.
     */
    function removeExclude(address account) public onlyOwner {
        require(isExcluded(account), "ERC20: Account is not excluded");
        excludeList[account] = false;
    }
    
    /**
     * @dev Sets tax for buys.
     */
    function setBuyTax(uint256 dev,uint256 liquidity) public onlyOwner {
        buyTaxes["dev"] = dev;
        buyTaxes["liquidity"] = liquidity;
       
    }
    
    /**
     * @dev Sets tax for sells.
     */
    function setSellTax(uint256 dev, uint256 liquidity) public onlyOwner {

        sellTaxes["dev"] = dev;
        sellTaxes["liquidity"] = liquidity;
        
    }
    
    /**
     * @dev Sets wallets for taxes.
     */
    function setTaxWallets(address dev) public onlyOwner {
        taxWallets["dev"] = dev;
        
    }

    function claimStuckTokens(address _token) external onlyOwner {
 
        if (_token == address(0x0)) {
            payable(owner()).transfer(address(this).balance);
            return;
        }
        IERC20 erc20token = IERC20(_token);
        uint256 balance = erc20token.balanceOf(address(this));
        erc20token.transfer(owner(), balance);
    }
    
    /**
     * @dev Enables tax globally.
     */
    function enableTax() public onlyOwner {
        require(!taxStatus, "ERC20: Tax is already enabled");
        taxStatus = true;
    }
    
    /**
     * @dev Disables tax globally.
     */
    function disableTax() public onlyOwner {
        require(taxStatus, "ERC20: Tax is already disabled");
        taxStatus = false;
    }
    
    /**
     * @dev Returns true if the account is blacklisted, and false otherwise.
     */
    function isBlacklisted(address account) public view returns (bool) {
        return blacklist[account];
    }
    
    /**
     * @dev Returns true if the account is excluded, and false otherwise.
     */
    function isExcluded(address account) public view returns (bool) {
        return excludeList[account];
    }
    
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"uint256","name":"_supply","type":"uint256"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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":"account","type":"address"}],"name":"Unpaused","type":"event"},{"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"}],"name":"disableBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"enableBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"exclude","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeExclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dev","type":"address"}],"name":"setTaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"triggerTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052606460075564746a5288006008556001601560006101000a81548160ff021916908315150217905550604051620060e2380380620060e2833981810160405281019062000052919062000e1b565b828281600390805190602001906200006c92919062000b93565b5080600490805190602001906200008592919062000b93565b5050506000600560146101000a81548160ff021916908315150217905550670de0b6b3a764000081620000b9919062000ee4565b60068190555060646003600654620000d2919062000ee4565b620000de919062000f74565b600d81905550620000f533620004e360201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d601560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001b357600080fd5b505afa158015620001c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ee919062001011565b601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002d657600080fd5b505afa158015620002eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000311919062001011565b6040518363ffffffff1660e01b81526004016200033092919062001054565b602060405180830381600087803b1580156200034b57600080fd5b505af115801562000360573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000386919062001011565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006014604051620003d890620010dc565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200043860036001620005a960201b60201c565b6200044c600360016200068260201b60201c565b6200047173d112233fab2d37e207b4795862ba24aed8f485266200075b60201b60201c565b62000482336200084a60201b60201c565b62000493306200084a60201b60201c565b620004c6600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200084a60201b60201c565b620004da336006546200098860201b60201c565b505050620013d7565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005b962000b0160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005df62000b0960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000638576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200062f9062001154565b60405180910390fd5b8160126040516200064990620011c6565b9081526020016040518091039020819055508060126040516200066c90620010dc565b9081526020016040518091039020819055505050565b6200069262000b0160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006b862000b0960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000711576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007089062001154565b60405180910390fd5b8160136040516200072290620011c6565b9081526020016040518091039020819055508060136040516200074590620010dc565b9081526020016040518091039020819055505050565b6200076b62000b0160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200079162000b0960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007e19062001154565b60405180910390fd5b806014604051620007fb90620011c6565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6200085a62000b0160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200088062000b0960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d09062001154565b60405180910390fd5b620008ea8162000b3360201b60201c565b156200092d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009249062001253565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f290620012c5565b60405180910390fd5b62000a0f6000838362000b8960201b60201c565b806002600082825462000a239190620012e7565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a7a9190620012e7565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ae1919062001355565b60405180910390a362000afd6000838362000b8e60201b60201c565b5050565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b505050565b505050565b82805462000ba190620013a1565b90600052602060002090601f01602090048101928262000bc5576000855562000c11565b82601f1062000be057805160ff191683800117855562000c11565b8280016001018555821562000c11579182015b8281111562000c1057825182559160200191906001019062000bf3565b5b50905062000c20919062000c24565b5090565b5b8082111562000c3f57600081600090555060010162000c25565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000cac8262000c61565b810181811067ffffffffffffffff8211171562000cce5762000ccd62000c72565b5b80604052505050565b600062000ce362000c43565b905062000cf1828262000ca1565b919050565b600067ffffffffffffffff82111562000d145762000d1362000c72565b5b62000d1f8262000c61565b9050602081019050919050565b60005b8381101562000d4c57808201518184015260208101905062000d2f565b8381111562000d5c576000848401525b50505050565b600062000d7962000d738462000cf6565b62000cd7565b90508281526020810184848401111562000d985762000d9762000c5c565b5b62000da584828562000d2c565b509392505050565b600082601f83011262000dc55762000dc462000c57565b5b815162000dd784826020860162000d62565b91505092915050565b6000819050919050565b62000df58162000de0565b811462000e0157600080fd5b50565b60008151905062000e158162000dea565b92915050565b60008060006060848603121562000e375762000e3662000c4d565b5b600084015167ffffffffffffffff81111562000e585762000e5762000c52565b5b62000e668682870162000dad565b935050602084015167ffffffffffffffff81111562000e8a5762000e8962000c52565b5b62000e988682870162000dad565b925050604062000eab8682870162000e04565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ef18262000de0565b915062000efe8362000de0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f3a5762000f3962000eb5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f818262000de0565b915062000f8e8362000de0565b92508262000fa15762000fa062000f45565b5b828204905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000fd98262000fac565b9050919050565b62000feb8162000fcc565b811462000ff757600080fd5b50565b6000815190506200100b8162000fe0565b92915050565b6000602082840312156200102a576200102962000c4d565b5b60006200103a8482850162000ffa565b91505092915050565b6200104e8162000fcc565b82525050565b60006040820190506200106b600083018562001043565b6200107a602083018462001043565b9392505050565b600081905092915050565b7f6c69717569646974790000000000000000000000000000000000000000000000600082015250565b6000620010c460098362001081565b9150620010d1826200108c565b600982019050919050565b6000620010e982620010b5565b9150819050919050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200113c602083620010f3565b9150620011498262001104565b602082019050919050565b600060208201905081810360008301526200116f816200112d565b9050919050565b7f6465760000000000000000000000000000000000000000000000000000000000600082015250565b6000620011ae60038362001081565b9150620011bb8262001176565b600382019050919050565b6000620011d3826200119f565b9150819050919050565b7f45524332303a204163636f756e7420697320616c7265616479206578636c756460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006200123b602283620010f3565b91506200124882620011dd565b604082019050919050565b600060208201905081810360008301526200126e816200122c565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620012ad601f83620010f3565b9150620012ba8262001275565b602082019050919050565b60006020820190508181036000830152620012e0816200129e565b9050919050565b6000620012f48262000de0565b9150620013018362000de0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001339576200133862000eb5565b5b828201905092915050565b6200134f8162000de0565b82525050565b60006020820190506200136c600083018462001344565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620013ba57607f821691505b60208210811415620013d157620013d062001372565b5b50919050565b614cfb80620013e76000396000f3fe6080604052600436106101fd5760003560e01c8063715018a61161010d578063cba0e996116100a0578063dd62ed3e1161006f578063dd62ed3e146106dc578063f2fde38b14610719578063f8b45b0514610742578063f9d0831a1461076d578063fe575a871461079657610204565b8063cba0e99614610636578063ced695a414610673578063cfefd79e1461068a578063d01dc84b146106b357610204565b806395d89b41116100dc57806395d89b4114610568578063a457c2d714610593578063a9059cbb146105d0578063abe4f11d1461060d57610204565b8063715018a6146104e6578063717a8651146104fd5780638456cb59146105265780638da5cb5b1461053d57610204565b8063313ce567116101905780634febf53d1161015f5780634febf53d1461041557806353eb3bcf1461043e5780635c975abb146104555780635d0044ca1461048057806370a08231146104a957610204565b8063313ce5671461036d57806339509351146103985780633f4ba83a146103d557806342966c68146103ec57610204565b806323a38a38116101cc57806323a38a38146102c557806323b872dd146102f0578063247b912d1461032d5780632c32abc21461035657610204565b806305a1f36d1461020957806306fdde0314610232578063095ea7b31461025d57806318160ddd1461029a57610204565b3661020457005b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906133f2565b6107d3565b005b34801561023e57600080fd5b50610247610895565b60405161025491906134cb565b60405180910390f35b34801561026957600080fd5b50610284600480360381019061027f919061354b565b610927565b60405161029191906135a6565b60405180910390f35b3480156102a657600080fd5b506102af610945565b6040516102bc91906135d0565b60405180910390f35b3480156102d157600080fd5b506102da61094f565b6040516102e791906135a6565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906135eb565b610962565b60405161032491906135a6565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f91906133f2565b610a5a565b005b34801561036257600080fd5b5061036b610b1c565b005b34801561037957600080fd5b50610382610bca565b60405161038f919061365a565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba919061354b565b610bd3565b6040516103cc91906135a6565b60405180910390f35b3480156103e157600080fd5b506103ea610c7f565b005b3480156103f857600080fd5b50610413600480360381019061040e9190613675565b610d4c565b005b34801561042157600080fd5b5061043c600480360381019061043791906136a2565b610dd5565b005b34801561044a57600080fd5b50610453610ef5565b005b34801561046157600080fd5b5061046a610fde565b60405161047791906135a6565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190613675565b610ff5565b005b3480156104b557600080fd5b506104d060048036038101906104cb91906136a2565b6110d2565b6040516104dd91906135d0565b60405180910390f35b3480156104f257600080fd5b506104fb61111a565b005b34801561050957600080fd5b50610524600480360381019061051f91906136a2565b6111a2565b005b34801561053257600080fd5b5061053b611306565b005b34801561054957600080fd5b506105526113d4565b60405161055f91906136de565b60405180910390f35b34801561057457600080fd5b5061057d6113fe565b60405161058a91906134cb565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b5919061354b565b611490565b6040516105c791906135a6565b60405180910390f35b3480156105dc57600080fd5b506105f760048036038101906105f2919061354b565b61157b565b60405161060491906135a6565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f91906136a2565b611599565b005b34801561064257600080fd5b5061065d600480360381019061065891906136a2565b6116b8565b60405161066a91906135a6565b60405180910390f35b34801561067f57600080fd5b5061068861170e565b005b34801561069657600080fd5b506106b160048036038101906106ac91906136a2565b6117f6565b005b3480156106bf57600080fd5b506106da60048036038101906106d591906136a2565b611959565b005b3480156106e857600080fd5b5061070360048036038101906106fe91906136f9565b611a33565b60405161071091906135d0565b60405180910390f35b34801561072557600080fd5b50610740600480360381019061073b91906136a2565b611aba565b005b34801561074e57600080fd5b50610757611bb2565b60405161076491906135d0565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f91906136a2565b611bb8565b005b3480156107a257600080fd5b506107bd60048036038101906107b891906136a2565b611de9565b6040516107ca91906135a6565b60405180910390f35b6107db611e3f565b73ffffffffffffffffffffffffffffffffffffffff166107f96113d4565b73ffffffffffffffffffffffffffffffffffffffff161461084f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084690613785565b60405180910390fd5b81601260405161085e906137fc565b90815260200160405180910390208190555080601260405161087f9061385d565b9081526020016040518091039020819055505050565b6060600380546108a4906138a1565b80601f01602080910402602001604051908101604052809291908181526020018280546108d0906138a1565b801561091d5780601f106108f25761010080835404028352916020019161091d565b820191906000526020600020905b81548152906001019060200180831161090057829003601f168201915b5050505050905090565b600061093b610934611e3f565b8484611e47565b6001905092915050565b6000600254905090565b601560009054906101000a900460ff1681565b600061096f848484612012565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109ba611e3f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3190613945565b60405180910390fd5b610a4e85610a46611e3f565b858403611e47565b60019150509392505050565b610a62611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610a806113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd90613785565b60405180910390fd5b816013604051610ae5906137fc565b908152602001604051809103902081905550806013604051610b069061385d565b9081526020016040518091039020819055505050565b610b24611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610b426113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90613785565b60405180910390fd5b610bc76000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612168565b50565b60006012905090565b6000610c75610be0611e3f565b848460016000610bee611e3f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c709190613994565b611e47565b6001905092915050565b610c87611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610ca56113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf290613785565b60405180910390fd5b610d03610fde565b610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990613a36565b60405180910390fd5b610d4a612d3b565b565b610d54611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610d726113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf90613785565b60405180910390fd5b610dd23382612ddd565b50565b610ddd611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610dfb6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4890613785565b60405180910390fd5b610e5a816116b8565b15610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9190613ac8565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610efd611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610f1b6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890613785565b60405180910390fd5b601560009054906101000a900460ff1615610fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb890613b34565b60405180910390fd5b6001601560006101000a81548160ff021916908315150217905550565b6000600560149054906101000a900460ff16905090565b610ffd611e3f565b73ffffffffffffffffffffffffffffffffffffffff1661101b6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890613785565b60405180910390fd5b61271081116110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac90613ba0565b60405180910390fd5b670de0b6b3a7640000816110c99190613bc0565b600d8190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611122611e3f565b73ffffffffffffffffffffffffffffffffffffffff166111406113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d90613785565b60405180910390fd5b6111a06000612fb4565b565b6111aa611e3f565b73ffffffffffffffffffffffffffffffffffffffff166111c86113d4565b73ffffffffffffffffffffffffffffffffffffffff161461121e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121590613785565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290613c8c565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61130e611e3f565b73ffffffffffffffffffffffffffffffffffffffff1661132c6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137990613785565b60405180910390fd5b61138a610fde565b156113ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c190613d1e565b60405180910390fd5b6113d261307a565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461140d906138a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611439906138a1565b80156114865780601f1061145b57610100808354040283529160200191611486565b820191906000526020600020905b81548152906001019060200180831161146957829003601f168201915b5050505050905090565b6000806001600061149f611e3f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561155c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155390613db0565b60405180910390fd5b611570611567611e3f565b85858403611e47565b600191505092915050565b600061158f611588611e3f565b8484612012565b6001905092915050565b6115a1611e3f565b73ffffffffffffffffffffffffffffffffffffffff166115bf6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90613785565b60405180910390fd5b61161e816116b8565b61165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490613e1c565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611716611e3f565b73ffffffffffffffffffffffffffffffffffffffff166117346113d4565b73ffffffffffffffffffffffffffffffffffffffff161461178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190613785565b60405180910390fd5b601560009054906101000a900460ff166117d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d090613e88565b60405180910390fd5b6000601560006101000a81548160ff021916908315150217905550565b6117fe611e3f565b73ffffffffffffffffffffffffffffffffffffffff1661181c6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186990613785565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f590613f1a565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611961611e3f565b73ffffffffffffffffffffffffffffffffffffffff1661197f6113d4565b73ffffffffffffffffffffffffffffffffffffffff16146119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc90613785565b60405180910390fd5b8060146040516119e4906137fc565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ac2611e3f565b73ffffffffffffffffffffffffffffffffffffffff16611ae06113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d90613785565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9d90613fac565b60405180910390fd5b611baf81612fb4565b50565b600d5481565b611bc0611e3f565b73ffffffffffffffffffffffffffffffffffffffff16611bde6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2b90613785565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cbc57611c716113d4565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611cb6573d6000803e3d6000fd5b50611de6565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cfc91906136de565b60206040518083038186803b158015611d1457600080fd5b505afa158015611d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4c9190613fe1565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611d726113d4565b836040518363ffffffff1660e01b8152600401611d9092919061400e565b602060405180830381600087803b158015611daa57600080fd5b505af1158015611dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de29190614063565b5050505b50565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eae90614102565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90614194565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161200591906135d0565b60405180910390a3505050565b61201a610fde565b1561205a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205190614226565b60405180910390fd5b61206333611de9565b156120a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209a90614292565b60405180910390fd5b6120ac82611de9565b156120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e3906142fe565b60405180910390fd5b6120f532611de9565b15612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212c90614292565b60405180910390fd5b601560009054906101000a900460ff161561215857612155838383612168565b90505b61216383838361311d565b505050565b600080600267ffffffffffffffff8111156121865761218561431e565b5b6040519080825280602002602001820160405280156121b45781602001602082028036833780820191505090505b50905030816000815181106121cc576121cb61434d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561226e57600080fd5b505afa158015612282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a69190614391565b816001815181106122ba576122b961434d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506122fd856116b8565b158015612310575061230e846116b8565b155b15612d2f576000806007548561232691906143ed565b9050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141561248257601260405161238c906137fc565b908152602001604051809103902054816123a69190613bc0565b826123b19190613994565b915060126040516123c19061385d565b908152602001604051809103902054816123db9190613bc0565b826123e69190613994565b915060008211156123fd576123fc873084612012565b5b601260405161240b906137fc565b908152602001604051809103902054816124259190613bc0565b601860008282546124369190613994565b92505081905550601260405161244b9061385d565b908152602001604051809103902054816124659190613bc0565b601960008282546124769190613994565b92505081905550612c70565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415612c6f5760136040516124e6906137fc565b908152602001604051809103902054816125009190613bc0565b8261250b9190613994565b9150601360405161251b9061385d565b908152602001604051809103902054816125359190613bc0565b826125409190613994565b9150600082111561255757612556873084612012565b5b6013604051612565906137fc565b9081526020016040518091039020548161257f9190613bc0565b601860008282546125909190613994565b9250508190555060136040516125a59061385d565b908152602001604051809103902054816125bf9190613bc0565b601960008282546125d09190613994565b9250508190555060006019546018546125e99190613994565b905060008114156126005785945050505050612d34565b6000601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f6019546018546126509190613994565b876040518363ffffffff1660e01b815260040161266e9291906144dc565b60006040518083038186803b15801561268657600080fd5b505afa15801561269a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906126c39190614625565b6001815181106126d6576126d561434d565b5b602002602001015190506008548110612c6c576000479050600060026019546126ff91906143ed565b60185461270c9190613994565b905061273b30601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611e47565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58260008a30426040518663ffffffff1660e01b815260040161279f9594939291906146b3565b600060405180830381600087803b1580156127b957600080fd5b505af11580156127cd573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906127f69190614625565b5060008247612805919061470d565b90506000600260195461281891906143ed565b90506000670de0b6b3a764000087670de0b6b3a7640000600260195461283e91906143ed565b6128489190613bc0565b61285291906143ed565b8461285d9190613bc0565b61286791906143ed565b90506000670de0b6b3a764000088670de0b6b3a764000060185461288b9190613bc0565b61289591906143ed565b856128a09190613bc0565b6128aa91906143ed565b90506128d930601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611e47565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719833086600080601460405161292b9061385d565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161297c96959493929190614741565b6060604051808303818588803b15801561299557600080fd5b505af11580156129a9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129ce91906147a2565b505050600083866129df9190613994565b6019546018546129ef9190613994565b6129f9919061470d565b90506000811115612a4c57612a4b306014604051612a16906137fc565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612012565b5b60006014604051612a5c906137fc565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051612aae90614826565b60006040518083038185875af1925050503d8060008114612aeb576040519150601f19603f3d011682016040523d82523d6000602084013e612af0565b606091505b5050905080612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90614887565b60405180910390fd5b60008484612b429190613994565b87612b4d919061470d565b1115612c535760006014604051612b63906137fc565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585612bb49190613994565b88612bbf919061470d565b604051612bcb90614826565b60006040518083038185875af1925050503d8060008114612c08576040519150601f19603f3d011682016040523d82523d6000602084013e612c0d565b606091505b5050905080612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890614887565b60405180910390fd5b505b6000601881905550600060198190555050505050505050505b50505b5b8185612c7c919061470d565b9450601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614612d2c57600d5485612ce0886110d2565b612cea9190613994565b1115612d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d22906148f3565b60405180910390fd5b5b50505b829150505b9392505050565b612d43610fde565b612d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d799061495f565b60405180910390fd5b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612dc6611e3f565b604051612dd391906136de565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e44906149f1565b60405180910390fd5b612e598260008361339e565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed690614a83565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612f36919061470d565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f9b91906135d0565b60405180910390a3612faf836000846133a3565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613082610fde565b156130c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b990614aef565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613106611e3f565b60405161311391906136de565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561318d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318490614b81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f490614c13565b60405180910390fd5b61320883838361339e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561328e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328590614ca5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133219190613994565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161338591906135d0565b60405180910390a36133988484846133a3565b50505050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6133cf816133bc565b81146133da57600080fd5b50565b6000813590506133ec816133c6565b92915050565b60008060408385031215613409576134086133b2565b5b6000613417858286016133dd565b9250506020613428858286016133dd565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561346c578082015181840152602081019050613451565b8381111561347b576000848401525b50505050565b6000601f19601f8301169050919050565b600061349d82613432565b6134a7818561343d565b93506134b781856020860161344e565b6134c081613481565b840191505092915050565b600060208201905081810360008301526134e58184613492565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613518826134ed565b9050919050565b6135288161350d565b811461353357600080fd5b50565b6000813590506135458161351f565b92915050565b60008060408385031215613562576135616133b2565b5b600061357085828601613536565b9250506020613581858286016133dd565b9150509250929050565b60008115159050919050565b6135a08161358b565b82525050565b60006020820190506135bb6000830184613597565b92915050565b6135ca816133bc565b82525050565b60006020820190506135e560008301846135c1565b92915050565b600080600060608486031215613604576136036133b2565b5b600061361286828701613536565b935050602061362386828701613536565b9250506040613634868287016133dd565b9150509250925092565b600060ff82169050919050565b6136548161363e565b82525050565b600060208201905061366f600083018461364b565b92915050565b60006020828403121561368b5761368a6133b2565b5b6000613699848285016133dd565b91505092915050565b6000602082840312156136b8576136b76133b2565b5b60006136c684828501613536565b91505092915050565b6136d88161350d565b82525050565b60006020820190506136f360008301846136cf565b92915050565b600080604083850312156137105761370f6133b2565b5b600061371e85828601613536565b925050602061372f85828601613536565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061376f60208361343d565b915061377a82613739565b602082019050919050565b6000602082019050818103600083015261379e81613762565b9050919050565b600081905092915050565b7f6465760000000000000000000000000000000000000000000000000000000000600082015250565b60006137e66003836137a5565b91506137f1826137b0565b600382019050919050565b6000613807826137d9565b9150819050919050565b7f6c69717569646974790000000000000000000000000000000000000000000000600082015250565b60006138476009836137a5565b915061385282613811565b600982019050919050565b60006138688261383a565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138b957607f821691505b602082108114156138cd576138cc613872565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061392f60288361343d565b915061393a826138d3565b604082019050919050565b6000602082019050818103600083015261395e81613922565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061399f826133bc565b91506139aa836133bc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139df576139de613965565b5b828201905092915050565b7f45524332303a20436f6e7472616374206973206e6f7420706175736564000000600082015250565b6000613a20601d8361343d565b9150613a2b826139ea565b602082019050919050565b60006020820190508181036000830152613a4f81613a13565b9050919050565b7f45524332303a204163636f756e7420697320616c7265616479206578636c756460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ab260228361343d565b9150613abd82613a56565b604082019050919050565b60006020820190508181036000830152613ae181613aa5565b9050919050565b7f45524332303a2054617820697320616c726561647920656e61626c6564000000600082015250565b6000613b1e601d8361343d565b9150613b2982613ae8565b602082019050919050565b60006020820190508181036000830152613b4d81613b11565b9050919050565b7f4e4f207275672070756c6c000000000000000000000000000000000000000000600082015250565b6000613b8a600b8361343d565b9150613b9582613b54565b602082019050919050565b60006020820190508181036000830152613bb981613b7d565b9050919050565b6000613bcb826133bc565b9150613bd6836133bc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c0f57613c0e613965565b5b828202905092915050565b7f45524332303a204163636f756e7420697320616c726561647920626c61636b6c60008201527f6973746564000000000000000000000000000000000000000000000000000000602082015250565b6000613c7660258361343d565b9150613c8182613c1a565b604082019050919050565b60006020820190508181036000830152613ca581613c69565b9050919050565b7f45524332303a20436f6e747261637420697320616c726561647920706175736560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d0860218361343d565b9150613d1382613cac565b604082019050919050565b60006020820190508181036000830152613d3781613cfb565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613d9a60258361343d565b9150613da582613d3e565b604082019050919050565b60006020820190508181036000830152613dc981613d8d565b9050919050565b7f45524332303a204163636f756e74206973206e6f74206578636c756465640000600082015250565b6000613e06601e8361343d565b9150613e1182613dd0565b602082019050919050565b60006020820190508181036000830152613e3581613df9565b9050919050565b7f45524332303a2054617820697320616c72656164792064697361626c65640000600082015250565b6000613e72601e8361343d565b9150613e7d82613e3c565b602082019050919050565b60006020820190508181036000830152613ea181613e65565b9050919050565b7f45524332303a204163636f756e74206973206e6f7420626c61636b6c6973746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f0460218361343d565b9150613f0f82613ea8565b604082019050919050565b60006020820190508181036000830152613f3381613ef7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f9660268361343d565b9150613fa182613f3a565b604082019050919050565b60006020820190508181036000830152613fc581613f89565b9050919050565b600081519050613fdb816133c6565b92915050565b600060208284031215613ff757613ff66133b2565b5b600061400584828501613fcc565b91505092915050565b600060408201905061402360008301856136cf565b61403060208301846135c1565b9392505050565b6140408161358b565b811461404b57600080fd5b50565b60008151905061405d81614037565b92915050565b600060208284031215614079576140786133b2565b5b60006140878482850161404e565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140ec60248361343d565b91506140f782614090565b604082019050919050565b6000602082019050818103600083015261411b816140df565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061417e60228361343d565b915061418982614122565b604082019050919050565b600060208201905081810360008301526141ad81614171565b9050919050565b7f45524332303a20746f6b656e207472616e73666572207768696c65207061757360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061421060228361343d565b915061421b826141b4565b604082019050919050565b6000602082019050818103600083015261423f81614203565b9050919050565b7f45524332303a2073656e64657220626c61636b6c697374656400000000000000600082015250565b600061427c60198361343d565b915061428782614246565b602082019050919050565b600060208201905081810360008301526142ab8161426f565b9050919050565b7f45524332303a20726563697069656e7420626c61636b6c697374656400000000600082015250565b60006142e8601c8361343d565b91506142f3826142b2565b602082019050919050565b60006020820190508181036000830152614317816142db565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061438b8161351f565b92915050565b6000602082840312156143a7576143a66133b2565b5b60006143b58482850161437c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143f8826133bc565b9150614403836133bc565b925082614413576144126143be565b5b828204905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144538161350d565b82525050565b6000614465838361444a565b60208301905092915050565b6000602082019050919050565b60006144898261441e565b6144938185614429565b935061449e8361443a565b8060005b838110156144cf5781516144b68882614459565b97506144c183614471565b9250506001810190506144a2565b5085935050505092915050565b60006040820190506144f160008301856135c1565b8181036020830152614503818461447e565b90509392505050565b600080fd5b61451a82613481565b810181811067ffffffffffffffff821117156145395761453861431e565b5b80604052505050565b600061454c6133a8565b90506145588282614511565b919050565b600067ffffffffffffffff8211156145785761457761431e565b5b602082029050602081019050919050565b600080fd5b60006145a161459c8461455d565b614542565b905080838252602082019050602084028301858111156145c4576145c3614589565b5b835b818110156145ed57806145d98882613fcc565b8452602084019350506020810190506145c6565b5050509392505050565b600082601f83011261460c5761460b61450c565b5b815161461c84826020860161458e565b91505092915050565b60006020828403121561463b5761463a6133b2565b5b600082015167ffffffffffffffff811115614659576146586133b7565b5b614665848285016145f7565b91505092915050565b6000819050919050565b6000819050919050565b600061469d6146986146938461466e565b614678565b6133bc565b9050919050565b6146ad81614682565b82525050565b600060a0820190506146c860008301886135c1565b6146d560208301876146a4565b81810360408301526146e7818661447e565b90506146f660608301856136cf565b61470360808301846135c1565b9695505050505050565b6000614718826133bc565b9150614723836133bc565b92508282101561473657614735613965565b5b828203905092915050565b600060c08201905061475660008301896136cf565b61476360208301886135c1565b61477060408301876146a4565b61477d60608301866146a4565b61478a60808301856136cf565b61479760a08301846135c1565b979650505050505050565b6000806000606084860312156147bb576147ba6133b2565b5b60006147c986828701613fcc565b93505060206147da86828701613fcc565b92505060406147eb86828701613fcc565b9150509250925092565b600081905092915050565b50565b60006148106000836147f5565b915061481b82614800565b600082019050919050565b600061483182614803565b9150819050919050565b7f7472616e7366657220746f20206465762077616c6c6574206661696c65640000600082015250565b6000614871601e8361343d565b915061487c8261483b565b602082019050919050565b600060208201905081810360008301526148a081614864565b9050919050565b7f6d617857616c6c6574206c696d69742065786365656465640000000000000000600082015250565b60006148dd60188361343d565b91506148e8826148a7565b602082019050919050565b6000602082019050818103600083015261490c816148d0565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061494960148361343d565b915061495482614913565b602082019050919050565b600060208201905081810360008301526149788161493c565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006149db60218361343d565b91506149e68261497f565b604082019050919050565b60006020820190508181036000830152614a0a816149ce565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a6d60228361343d565b9150614a7882614a11565b604082019050919050565b60006020820190508181036000830152614a9c81614a60565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614ad960108361343d565b9150614ae482614aa3565b602082019050919050565b60006020820190508181036000830152614b0881614acc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b6b60258361343d565b9150614b7682614b0f565b604082019050919050565b60006020820190508181036000830152614b9a81614b5e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bfd60238361343d565b9150614c0882614ba1565b604082019050919050565b60006020820190508181036000830152614c2c81614bf0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614c8f60268361343d565b9150614c9a82614c33565b604082019050919050565b60006020820190508181036000830152614cbe81614c82565b905091905056fea2646970667358221220d1875ae65dc672c7cb22f3fe11465822726b7927f76670c9563bea8c7e0bb5d064736f6c63430008090033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000012426568696e6420546865204375727461696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024243000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c8063715018a61161010d578063cba0e996116100a0578063dd62ed3e1161006f578063dd62ed3e146106dc578063f2fde38b14610719578063f8b45b0514610742578063f9d0831a1461076d578063fe575a871461079657610204565b8063cba0e99614610636578063ced695a414610673578063cfefd79e1461068a578063d01dc84b146106b357610204565b806395d89b41116100dc57806395d89b4114610568578063a457c2d714610593578063a9059cbb146105d0578063abe4f11d1461060d57610204565b8063715018a6146104e6578063717a8651146104fd5780638456cb59146105265780638da5cb5b1461053d57610204565b8063313ce567116101905780634febf53d1161015f5780634febf53d1461041557806353eb3bcf1461043e5780635c975abb146104555780635d0044ca1461048057806370a08231146104a957610204565b8063313ce5671461036d57806339509351146103985780633f4ba83a146103d557806342966c68146103ec57610204565b806323a38a38116101cc57806323a38a38146102c557806323b872dd146102f0578063247b912d1461032d5780632c32abc21461035657610204565b806305a1f36d1461020957806306fdde0314610232578063095ea7b31461025d57806318160ddd1461029a57610204565b3661020457005b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906133f2565b6107d3565b005b34801561023e57600080fd5b50610247610895565b60405161025491906134cb565b60405180910390f35b34801561026957600080fd5b50610284600480360381019061027f919061354b565b610927565b60405161029191906135a6565b60405180910390f35b3480156102a657600080fd5b506102af610945565b6040516102bc91906135d0565b60405180910390f35b3480156102d157600080fd5b506102da61094f565b6040516102e791906135a6565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906135eb565b610962565b60405161032491906135a6565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f91906133f2565b610a5a565b005b34801561036257600080fd5b5061036b610b1c565b005b34801561037957600080fd5b50610382610bca565b60405161038f919061365a565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba919061354b565b610bd3565b6040516103cc91906135a6565b60405180910390f35b3480156103e157600080fd5b506103ea610c7f565b005b3480156103f857600080fd5b50610413600480360381019061040e9190613675565b610d4c565b005b34801561042157600080fd5b5061043c600480360381019061043791906136a2565b610dd5565b005b34801561044a57600080fd5b50610453610ef5565b005b34801561046157600080fd5b5061046a610fde565b60405161047791906135a6565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190613675565b610ff5565b005b3480156104b557600080fd5b506104d060048036038101906104cb91906136a2565b6110d2565b6040516104dd91906135d0565b60405180910390f35b3480156104f257600080fd5b506104fb61111a565b005b34801561050957600080fd5b50610524600480360381019061051f91906136a2565b6111a2565b005b34801561053257600080fd5b5061053b611306565b005b34801561054957600080fd5b506105526113d4565b60405161055f91906136de565b60405180910390f35b34801561057457600080fd5b5061057d6113fe565b60405161058a91906134cb565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b5919061354b565b611490565b6040516105c791906135a6565b60405180910390f35b3480156105dc57600080fd5b506105f760048036038101906105f2919061354b565b61157b565b60405161060491906135a6565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f91906136a2565b611599565b005b34801561064257600080fd5b5061065d600480360381019061065891906136a2565b6116b8565b60405161066a91906135a6565b60405180910390f35b34801561067f57600080fd5b5061068861170e565b005b34801561069657600080fd5b506106b160048036038101906106ac91906136a2565b6117f6565b005b3480156106bf57600080fd5b506106da60048036038101906106d591906136a2565b611959565b005b3480156106e857600080fd5b5061070360048036038101906106fe91906136f9565b611a33565b60405161071091906135d0565b60405180910390f35b34801561072557600080fd5b50610740600480360381019061073b91906136a2565b611aba565b005b34801561074e57600080fd5b50610757611bb2565b60405161076491906135d0565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f91906136a2565b611bb8565b005b3480156107a257600080fd5b506107bd60048036038101906107b891906136a2565b611de9565b6040516107ca91906135a6565b60405180910390f35b6107db611e3f565b73ffffffffffffffffffffffffffffffffffffffff166107f96113d4565b73ffffffffffffffffffffffffffffffffffffffff161461084f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084690613785565b60405180910390fd5b81601260405161085e906137fc565b90815260200160405180910390208190555080601260405161087f9061385d565b9081526020016040518091039020819055505050565b6060600380546108a4906138a1565b80601f01602080910402602001604051908101604052809291908181526020018280546108d0906138a1565b801561091d5780601f106108f25761010080835404028352916020019161091d565b820191906000526020600020905b81548152906001019060200180831161090057829003601f168201915b5050505050905090565b600061093b610934611e3f565b8484611e47565b6001905092915050565b6000600254905090565b601560009054906101000a900460ff1681565b600061096f848484612012565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109ba611e3f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3190613945565b60405180910390fd5b610a4e85610a46611e3f565b858403611e47565b60019150509392505050565b610a62611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610a806113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd90613785565b60405180910390fd5b816013604051610ae5906137fc565b908152602001604051809103902081905550806013604051610b069061385d565b9081526020016040518091039020819055505050565b610b24611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610b426113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90613785565b60405180910390fd5b610bc76000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612168565b50565b60006012905090565b6000610c75610be0611e3f565b848460016000610bee611e3f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c709190613994565b611e47565b6001905092915050565b610c87611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610ca56113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf290613785565b60405180910390fd5b610d03610fde565b610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990613a36565b60405180910390fd5b610d4a612d3b565b565b610d54611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610d726113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf90613785565b60405180910390fd5b610dd23382612ddd565b50565b610ddd611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610dfb6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4890613785565b60405180910390fd5b610e5a816116b8565b15610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9190613ac8565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610efd611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610f1b6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890613785565b60405180910390fd5b601560009054906101000a900460ff1615610fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb890613b34565b60405180910390fd5b6001601560006101000a81548160ff021916908315150217905550565b6000600560149054906101000a900460ff16905090565b610ffd611e3f565b73ffffffffffffffffffffffffffffffffffffffff1661101b6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890613785565b60405180910390fd5b61271081116110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac90613ba0565b60405180910390fd5b670de0b6b3a7640000816110c99190613bc0565b600d8190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611122611e3f565b73ffffffffffffffffffffffffffffffffffffffff166111406113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d90613785565b60405180910390fd5b6111a06000612fb4565b565b6111aa611e3f565b73ffffffffffffffffffffffffffffffffffffffff166111c86113d4565b73ffffffffffffffffffffffffffffffffffffffff161461121e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121590613785565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290613c8c565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61130e611e3f565b73ffffffffffffffffffffffffffffffffffffffff1661132c6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137990613785565b60405180910390fd5b61138a610fde565b156113ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c190613d1e565b60405180910390fd5b6113d261307a565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461140d906138a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611439906138a1565b80156114865780601f1061145b57610100808354040283529160200191611486565b820191906000526020600020905b81548152906001019060200180831161146957829003601f168201915b5050505050905090565b6000806001600061149f611e3f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561155c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155390613db0565b60405180910390fd5b611570611567611e3f565b85858403611e47565b600191505092915050565b600061158f611588611e3f565b8484612012565b6001905092915050565b6115a1611e3f565b73ffffffffffffffffffffffffffffffffffffffff166115bf6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90613785565b60405180910390fd5b61161e816116b8565b61165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490613e1c565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611716611e3f565b73ffffffffffffffffffffffffffffffffffffffff166117346113d4565b73ffffffffffffffffffffffffffffffffffffffff161461178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190613785565b60405180910390fd5b601560009054906101000a900460ff166117d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d090613e88565b60405180910390fd5b6000601560006101000a81548160ff021916908315150217905550565b6117fe611e3f565b73ffffffffffffffffffffffffffffffffffffffff1661181c6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186990613785565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f590613f1a565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611961611e3f565b73ffffffffffffffffffffffffffffffffffffffff1661197f6113d4565b73ffffffffffffffffffffffffffffffffffffffff16146119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc90613785565b60405180910390fd5b8060146040516119e4906137fc565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ac2611e3f565b73ffffffffffffffffffffffffffffffffffffffff16611ae06113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d90613785565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9d90613fac565b60405180910390fd5b611baf81612fb4565b50565b600d5481565b611bc0611e3f565b73ffffffffffffffffffffffffffffffffffffffff16611bde6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2b90613785565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cbc57611c716113d4565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611cb6573d6000803e3d6000fd5b50611de6565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cfc91906136de565b60206040518083038186803b158015611d1457600080fd5b505afa158015611d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4c9190613fe1565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611d726113d4565b836040518363ffffffff1660e01b8152600401611d9092919061400e565b602060405180830381600087803b158015611daa57600080fd5b505af1158015611dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de29190614063565b5050505b50565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eae90614102565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90614194565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161200591906135d0565b60405180910390a3505050565b61201a610fde565b1561205a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205190614226565b60405180910390fd5b61206333611de9565b156120a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209a90614292565b60405180910390fd5b6120ac82611de9565b156120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e3906142fe565b60405180910390fd5b6120f532611de9565b15612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212c90614292565b60405180910390fd5b601560009054906101000a900460ff161561215857612155838383612168565b90505b61216383838361311d565b505050565b600080600267ffffffffffffffff8111156121865761218561431e565b5b6040519080825280602002602001820160405280156121b45781602001602082028036833780820191505090505b50905030816000815181106121cc576121cb61434d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561226e57600080fd5b505afa158015612282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a69190614391565b816001815181106122ba576122b961434d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506122fd856116b8565b158015612310575061230e846116b8565b155b15612d2f576000806007548561232691906143ed565b9050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141561248257601260405161238c906137fc565b908152602001604051809103902054816123a69190613bc0565b826123b19190613994565b915060126040516123c19061385d565b908152602001604051809103902054816123db9190613bc0565b826123e69190613994565b915060008211156123fd576123fc873084612012565b5b601260405161240b906137fc565b908152602001604051809103902054816124259190613bc0565b601860008282546124369190613994565b92505081905550601260405161244b9061385d565b908152602001604051809103902054816124659190613bc0565b601960008282546124769190613994565b92505081905550612c70565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415612c6f5760136040516124e6906137fc565b908152602001604051809103902054816125009190613bc0565b8261250b9190613994565b9150601360405161251b9061385d565b908152602001604051809103902054816125359190613bc0565b826125409190613994565b9150600082111561255757612556873084612012565b5b6013604051612565906137fc565b9081526020016040518091039020548161257f9190613bc0565b601860008282546125909190613994565b9250508190555060136040516125a59061385d565b908152602001604051809103902054816125bf9190613bc0565b601960008282546125d09190613994565b9250508190555060006019546018546125e99190613994565b905060008114156126005785945050505050612d34565b6000601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f6019546018546126509190613994565b876040518363ffffffff1660e01b815260040161266e9291906144dc565b60006040518083038186803b15801561268657600080fd5b505afa15801561269a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906126c39190614625565b6001815181106126d6576126d561434d565b5b602002602001015190506008548110612c6c576000479050600060026019546126ff91906143ed565b60185461270c9190613994565b905061273b30601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611e47565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58260008a30426040518663ffffffff1660e01b815260040161279f9594939291906146b3565b600060405180830381600087803b1580156127b957600080fd5b505af11580156127cd573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906127f69190614625565b5060008247612805919061470d565b90506000600260195461281891906143ed565b90506000670de0b6b3a764000087670de0b6b3a7640000600260195461283e91906143ed565b6128489190613bc0565b61285291906143ed565b8461285d9190613bc0565b61286791906143ed565b90506000670de0b6b3a764000088670de0b6b3a764000060185461288b9190613bc0565b61289591906143ed565b856128a09190613bc0565b6128aa91906143ed565b90506128d930601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611e47565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719833086600080601460405161292b9061385d565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161297c96959493929190614741565b6060604051808303818588803b15801561299557600080fd5b505af11580156129a9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129ce91906147a2565b505050600083866129df9190613994565b6019546018546129ef9190613994565b6129f9919061470d565b90506000811115612a4c57612a4b306014604051612a16906137fc565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612012565b5b60006014604051612a5c906137fc565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051612aae90614826565b60006040518083038185875af1925050503d8060008114612aeb576040519150601f19603f3d011682016040523d82523d6000602084013e612af0565b606091505b5050905080612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90614887565b60405180910390fd5b60008484612b429190613994565b87612b4d919061470d565b1115612c535760006014604051612b63906137fc565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585612bb49190613994565b88612bbf919061470d565b604051612bcb90614826565b60006040518083038185875af1925050503d8060008114612c08576040519150601f19603f3d011682016040523d82523d6000602084013e612c0d565b606091505b5050905080612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890614887565b60405180910390fd5b505b6000601881905550600060198190555050505050505050505b50505b5b8185612c7c919061470d565b9450601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614612d2c57600d5485612ce0886110d2565b612cea9190613994565b1115612d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d22906148f3565b60405180910390fd5b5b50505b829150505b9392505050565b612d43610fde565b612d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d799061495f565b60405180910390fd5b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612dc6611e3f565b604051612dd391906136de565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e44906149f1565b60405180910390fd5b612e598260008361339e565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed690614a83565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612f36919061470d565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f9b91906135d0565b60405180910390a3612faf836000846133a3565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613082610fde565b156130c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b990614aef565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613106611e3f565b60405161311391906136de565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561318d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318490614b81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f490614c13565b60405180910390fd5b61320883838361339e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561328e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328590614ca5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133219190613994565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161338591906135d0565b60405180910390a36133988484846133a3565b50505050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6133cf816133bc565b81146133da57600080fd5b50565b6000813590506133ec816133c6565b92915050565b60008060408385031215613409576134086133b2565b5b6000613417858286016133dd565b9250506020613428858286016133dd565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561346c578082015181840152602081019050613451565b8381111561347b576000848401525b50505050565b6000601f19601f8301169050919050565b600061349d82613432565b6134a7818561343d565b93506134b781856020860161344e565b6134c081613481565b840191505092915050565b600060208201905081810360008301526134e58184613492565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613518826134ed565b9050919050565b6135288161350d565b811461353357600080fd5b50565b6000813590506135458161351f565b92915050565b60008060408385031215613562576135616133b2565b5b600061357085828601613536565b9250506020613581858286016133dd565b9150509250929050565b60008115159050919050565b6135a08161358b565b82525050565b60006020820190506135bb6000830184613597565b92915050565b6135ca816133bc565b82525050565b60006020820190506135e560008301846135c1565b92915050565b600080600060608486031215613604576136036133b2565b5b600061361286828701613536565b935050602061362386828701613536565b9250506040613634868287016133dd565b9150509250925092565b600060ff82169050919050565b6136548161363e565b82525050565b600060208201905061366f600083018461364b565b92915050565b60006020828403121561368b5761368a6133b2565b5b6000613699848285016133dd565b91505092915050565b6000602082840312156136b8576136b76133b2565b5b60006136c684828501613536565b91505092915050565b6136d88161350d565b82525050565b60006020820190506136f360008301846136cf565b92915050565b600080604083850312156137105761370f6133b2565b5b600061371e85828601613536565b925050602061372f85828601613536565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061376f60208361343d565b915061377a82613739565b602082019050919050565b6000602082019050818103600083015261379e81613762565b9050919050565b600081905092915050565b7f6465760000000000000000000000000000000000000000000000000000000000600082015250565b60006137e66003836137a5565b91506137f1826137b0565b600382019050919050565b6000613807826137d9565b9150819050919050565b7f6c69717569646974790000000000000000000000000000000000000000000000600082015250565b60006138476009836137a5565b915061385282613811565b600982019050919050565b60006138688261383a565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138b957607f821691505b602082108114156138cd576138cc613872565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061392f60288361343d565b915061393a826138d3565b604082019050919050565b6000602082019050818103600083015261395e81613922565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061399f826133bc565b91506139aa836133bc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139df576139de613965565b5b828201905092915050565b7f45524332303a20436f6e7472616374206973206e6f7420706175736564000000600082015250565b6000613a20601d8361343d565b9150613a2b826139ea565b602082019050919050565b60006020820190508181036000830152613a4f81613a13565b9050919050565b7f45524332303a204163636f756e7420697320616c7265616479206578636c756460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ab260228361343d565b9150613abd82613a56565b604082019050919050565b60006020820190508181036000830152613ae181613aa5565b9050919050565b7f45524332303a2054617820697320616c726561647920656e61626c6564000000600082015250565b6000613b1e601d8361343d565b9150613b2982613ae8565b602082019050919050565b60006020820190508181036000830152613b4d81613b11565b9050919050565b7f4e4f207275672070756c6c000000000000000000000000000000000000000000600082015250565b6000613b8a600b8361343d565b9150613b9582613b54565b602082019050919050565b60006020820190508181036000830152613bb981613b7d565b9050919050565b6000613bcb826133bc565b9150613bd6836133bc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c0f57613c0e613965565b5b828202905092915050565b7f45524332303a204163636f756e7420697320616c726561647920626c61636b6c60008201527f6973746564000000000000000000000000000000000000000000000000000000602082015250565b6000613c7660258361343d565b9150613c8182613c1a565b604082019050919050565b60006020820190508181036000830152613ca581613c69565b9050919050565b7f45524332303a20436f6e747261637420697320616c726561647920706175736560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d0860218361343d565b9150613d1382613cac565b604082019050919050565b60006020820190508181036000830152613d3781613cfb565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613d9a60258361343d565b9150613da582613d3e565b604082019050919050565b60006020820190508181036000830152613dc981613d8d565b9050919050565b7f45524332303a204163636f756e74206973206e6f74206578636c756465640000600082015250565b6000613e06601e8361343d565b9150613e1182613dd0565b602082019050919050565b60006020820190508181036000830152613e3581613df9565b9050919050565b7f45524332303a2054617820697320616c72656164792064697361626c65640000600082015250565b6000613e72601e8361343d565b9150613e7d82613e3c565b602082019050919050565b60006020820190508181036000830152613ea181613e65565b9050919050565b7f45524332303a204163636f756e74206973206e6f7420626c61636b6c6973746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f0460218361343d565b9150613f0f82613ea8565b604082019050919050565b60006020820190508181036000830152613f3381613ef7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f9660268361343d565b9150613fa182613f3a565b604082019050919050565b60006020820190508181036000830152613fc581613f89565b9050919050565b600081519050613fdb816133c6565b92915050565b600060208284031215613ff757613ff66133b2565b5b600061400584828501613fcc565b91505092915050565b600060408201905061402360008301856136cf565b61403060208301846135c1565b9392505050565b6140408161358b565b811461404b57600080fd5b50565b60008151905061405d81614037565b92915050565b600060208284031215614079576140786133b2565b5b60006140878482850161404e565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140ec60248361343d565b91506140f782614090565b604082019050919050565b6000602082019050818103600083015261411b816140df565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061417e60228361343d565b915061418982614122565b604082019050919050565b600060208201905081810360008301526141ad81614171565b9050919050565b7f45524332303a20746f6b656e207472616e73666572207768696c65207061757360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061421060228361343d565b915061421b826141b4565b604082019050919050565b6000602082019050818103600083015261423f81614203565b9050919050565b7f45524332303a2073656e64657220626c61636b6c697374656400000000000000600082015250565b600061427c60198361343d565b915061428782614246565b602082019050919050565b600060208201905081810360008301526142ab8161426f565b9050919050565b7f45524332303a20726563697069656e7420626c61636b6c697374656400000000600082015250565b60006142e8601c8361343d565b91506142f3826142b2565b602082019050919050565b60006020820190508181036000830152614317816142db565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061438b8161351f565b92915050565b6000602082840312156143a7576143a66133b2565b5b60006143b58482850161437c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143f8826133bc565b9150614403836133bc565b925082614413576144126143be565b5b828204905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144538161350d565b82525050565b6000614465838361444a565b60208301905092915050565b6000602082019050919050565b60006144898261441e565b6144938185614429565b935061449e8361443a565b8060005b838110156144cf5781516144b68882614459565b97506144c183614471565b9250506001810190506144a2565b5085935050505092915050565b60006040820190506144f160008301856135c1565b8181036020830152614503818461447e565b90509392505050565b600080fd5b61451a82613481565b810181811067ffffffffffffffff821117156145395761453861431e565b5b80604052505050565b600061454c6133a8565b90506145588282614511565b919050565b600067ffffffffffffffff8211156145785761457761431e565b5b602082029050602081019050919050565b600080fd5b60006145a161459c8461455d565b614542565b905080838252602082019050602084028301858111156145c4576145c3614589565b5b835b818110156145ed57806145d98882613fcc565b8452602084019350506020810190506145c6565b5050509392505050565b600082601f83011261460c5761460b61450c565b5b815161461c84826020860161458e565b91505092915050565b60006020828403121561463b5761463a6133b2565b5b600082015167ffffffffffffffff811115614659576146586133b7565b5b614665848285016145f7565b91505092915050565b6000819050919050565b6000819050919050565b600061469d6146986146938461466e565b614678565b6133bc565b9050919050565b6146ad81614682565b82525050565b600060a0820190506146c860008301886135c1565b6146d560208301876146a4565b81810360408301526146e7818661447e565b90506146f660608301856136cf565b61470360808301846135c1565b9695505050505050565b6000614718826133bc565b9150614723836133bc565b92508282101561473657614735613965565b5b828203905092915050565b600060c08201905061475660008301896136cf565b61476360208301886135c1565b61477060408301876146a4565b61477d60608301866146a4565b61478a60808301856136cf565b61479760a08301846135c1565b979650505050505050565b6000806000606084860312156147bb576147ba6133b2565b5b60006147c986828701613fcc565b93505060206147da86828701613fcc565b92505060406147eb86828701613fcc565b9150509250925092565b600081905092915050565b50565b60006148106000836147f5565b915061481b82614800565b600082019050919050565b600061483182614803565b9150819050919050565b7f7472616e7366657220746f20206465762077616c6c6574206661696c65640000600082015250565b6000614871601e8361343d565b915061487c8261483b565b602082019050919050565b600060208201905081810360008301526148a081614864565b9050919050565b7f6d617857616c6c6574206c696d69742065786365656465640000000000000000600082015250565b60006148dd60188361343d565b91506148e8826148a7565b602082019050919050565b6000602082019050818103600083015261490c816148d0565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061494960148361343d565b915061495482614913565b602082019050919050565b600060208201905081810360008301526149788161493c565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006149db60218361343d565b91506149e68261497f565b604082019050919050565b60006020820190508181036000830152614a0a816149ce565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a6d60228361343d565b9150614a7882614a11565b604082019050919050565b60006020820190508181036000830152614a9c81614a60565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614ad960108361343d565b9150614ae482614aa3565b602082019050919050565b60006020820190508181036000830152614b0881614acc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b6b60258361343d565b9150614b7682614b0f565b604082019050919050565b60006020820190508181036000830152614b9a81614b5e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bfd60238361343d565b9150614c0882614ba1565b604082019050919050565b60006020820190508181036000830152614c2c81614bf0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614c8f60268361343d565b9150614c9a82614c33565b604082019050919050565b60006020820190508181036000830152614cbe81614c82565b905091905056fea2646970667358221220d1875ae65dc672c7cb22f3fe11465822726b7927f76670c9563bea8c7e0bb5d064736f6c63430008090033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000012426568696e6420546865204375727461696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024243000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _tokenName (string): Behind The Curtain
Arg [1] : _tokenSymbol (string): BC
Arg [2] : _supply (uint256): 1000000

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 426568696e6420546865204375727461696e0000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 4243000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

24713:11238:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34135:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3088:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4630:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3583:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25584:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5281:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34358:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32073:106;;;;;;;;;;;;;:::i;:::-;;3425:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6182:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32452:126;;;;;;;;;;;;;:::i;:::-;;32885:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33637:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35133:136;;;;;;;;;;;;;:::i;:::-;;15564:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32654:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3754:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13951:94;;;;;;;;;;;;;:::i;:::-;;33098:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32253:127;;;;;;;;;;;;;:::i;:::-;;13300:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3307:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6900:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4094:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33896:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35797:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35335:138;;;;;;;;;;;;;:::i;:::-;;33373:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34592:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4332:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14200:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25173:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34705:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35581:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34135:160;13531:12;:10;:12::i;:::-;13520:23;;:7;:5;:7::i;:::-;:23;;;13512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34231:3:::1;34213:8;:15;;;;;:::i;:::-;;;;;;;;;;;;;:21;;;;34269:9;34245:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;:33;;;;34135:160:::0;;:::o;3088:100::-;3142:13;3175:5;3168:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3088:100;:::o;4630:169::-;4713:4;4730:39;4739:12;:10;:12::i;:::-;4753:7;4762:6;4730:8;:39::i;:::-;4787:4;4780:11;;4630:169;;;;:::o;3583:108::-;3644:7;3671:12;;3664:19;;3583:108;:::o;25584:28::-;;;;;;;;;;;;;:::o;5281:492::-;5421:4;5438:36;5448:6;5456:9;5467:6;5438:9;:36::i;:::-;5487:24;5514:11;:19;5526:6;5514:19;;;;;;;;;;;;;;;:33;5534:12;:10;:12::i;:::-;5514:33;;;;;;;;;;;;;;;;5487:60;;5586:6;5566:16;:26;;5558:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5673:57;5682:6;5690:12;:10;:12::i;:::-;5723:6;5704:16;:25;5673:8;:57::i;:::-;5761:4;5754:11;;;5281:492;;;;;:::o;34358:167::-;13531:12;:10;:12::i;:::-;13520:23;;:7;:5;:7::i;:::-;:23;;;13512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34459:3:::1;34440:9;:16;;;;;:::i;:::-;;;;;;;;;;;;;:22;;;;34498:9;34473;:22;;;;;:::i;:::-;;;;;;;;;;;;;:34;;;;34358:167:::0;;:::o;32073:106::-;13531:12;:10;:12::i;:::-;13520:23;;:7;:5;:7::i;:::-;:23;;;13512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32123:48:::1;32141:1;32153:13;;;;;;;;;;;32169:1;32123:9;:48::i;:::-;;32073:106::o:0;3425:93::-;3483:5;3508:2;3501:9;;3425:93;:::o;6182:215::-;6270:4;6287:80;6296:12;:10;:12::i;:::-;6310:7;6356:10;6319:11;:25;6331:12;:10;:12::i;:::-;6319:25;;;;;;;;;;;;;;;:34;6345:7;6319:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;6287:8;:80::i;:::-;6385:4;6378:11;;6182:215;;;;:::o;32452:126::-;13531:12;:10;:12::i;:::-;13520:23;;:7;:5;:7::i;:::-;:23;;;13512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32507:8:::1;:6;:8::i;:::-;32499:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;32560:10;:8;:10::i;:::-;32452:126::o:0;32885:91::-;13531:12;:10;:12::i;:::-;13520:23;;:7;:5;:7::i;:::-;:23;;;13512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32943:25:::1;32949:10;32961:6;32943:5;:25::i;:::-;32885:91:::0;:::o;33637:175::-;13531:12;:10;:12::i;:::-;13520:23;;:7;:5;:7::i;:::-;:23;;;13512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33708:19:::1;33719:7;33708:10;:19::i;:::-;33707:20;33699:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33800:4;33777:11;:20;33789:7;33777:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;33637:175:::0;:::o;35133:136::-;13531:12;:10;:12::i;:::-;13520:23;;:7;:5;:7::i;:::-;:23;;;13512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35191:9:::1;;;;;;;;;;;35190:10;35182:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;35257:4;35245:9;;:16;;;;;;;;;;;;;;;;;;35133:136::o:0;15564:86::-;15611:4;15635:7;;;;;;;;;;;15628:14;;15564:86;:::o;32654:154::-;13531:12;:10;:12::i;:::-;13520:23;;:7;:5;:7::i;:::-;:23;;;13512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32741:5:::1;32732:6;:14;32723:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;32794:6;32785;:15;;;;:::i;:::-;32773:9;:27;;;;32654:154:::0;:::o;3754:127::-;3828:7;3855:9;:18;3865:7;3855:18;;;;;;;;;;;;;;;;3848:25;;3754:127;;;:::o;13951:94::-;13531:12;:10;:12::i;:::-;13520:23;;:7;:5;:7::i;:::-;:23;;;13512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14016:21:::1;14034:1;14016:9;:21::i;:::-;13951:94::o:0;33098:183::-;13531:12;:10;:12::i;:::-;13520:23;;:7;:5;:7::i;:::-;:23;;;13512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33177:9:::1;:18;33187:7;33177:18;;;;;;;;;;;;;;;;;;;;;;;;;33176:19;33168:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;33269:4;33248:9;:18;33258:7;33248:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;33098:183:::0;:::o;32253:127::-;13531:12;:10;:12::i;:::-;13520:23;;:7;:5;:7::i;:::-;:23;;;13512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32307:8:::1;:6;:8::i;:::-;32306:9;32298:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32364:8;:6;:8::i;:::-;32253:127::o:0;13300:87::-;13346:7;13373:6;;;;;;;;;;;13366:13;;13300:87;:::o;3307:104::-;3363:13;3396:7;3389:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3307:104;:::o;6900:413::-;6993:4;7010:24;7037:11;:25;7049:12;:10;:12::i;:::-;7037:25;;;;;;;;;;;;;;;:34;7063:7;7037:34;;;;;;;;;;;;;;;;7010:61;;7110:15;7090:16;:35;;7082:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;7203:67;7212:12;:10;:12::i;:::-;7226:7;7254:15;7235:16;:34;7203:8;:67::i;:::-;7301:4;7294:11;;;6900:413;;;;:::o;4094:175::-;4180:4;4197:42;4207:12;:10;:12::i;:::-;4221:9;4232:6;4197:9;:42::i;:::-;4257:4;4250:11;;4094:175;;;;:::o;33896:177::-;13531:12;:10;:12::i;:::-;13520:23;;:7;:5;:7::i;:::-;:23;;;13512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33972:19:::1;33983:7;33972:10;:19::i;:::-;33964:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34060:5;34037:11;:20;34049:7;34037:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;33896:177:::0;:::o;35797:110::-;35855:4;35879:11;:20;35891:7;35879:20;;;;;;;;;;;;;;;;;;;;;;;;;35872:27;;35797:110;;;:::o;35335:138::-;13531:12;:10;:12::i;:::-;13520:23;;:7;:5;:7::i;:::-;:23;;;13512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35393:9:::1;;;;;;;;;;;35385:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;35460:5;35448:9;;:17;;;;;;;;;;;;;;;;;;35335:138::o:0;33373:180::-;13531:12;:10;:12::i;:::-;13520:23;;:7;:5;:7::i;:::-;:23;;;13512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33452:9:::1;:18;33462:7;33452:18;;;;;;;;;;;;;;;;;;;;;;;;;33444:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33540:5;33519:9;:18;33529:7;33519:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;33373:180:::0;:::o;34592:105::-;13531:12;:10;:12::i;:::-;13520:23;;:7;:5;:7::i;:::-;:23;;;13512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34676:3:::1;34656:10;:17;;;;;:::i;:::-;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;34592:105:::0;:::o;4332:151::-;4421:7;4448:11;:18;4460:5;4448:18;;;;;;;;;;;;;;;:27;4467:7;4448:27;;;;;;;;;;;;;;;;4441:34;;4332:151;;;;:::o;14200:192::-;13531:12;:10;:12::i;:::-;13520:23;;:7;:5;:7::i;:::-;:23;;;13512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14309:1:::1;14289:22;;:8;:22;;;;14281:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14365:19;14375:8;14365:9;:19::i;:::-;14200:192:::0;:::o;25173:24::-;;;;:::o;34705:363::-;13531:12;:10;:12::i;:::-;13520:23;;:7;:5;:7::i;:::-;:23;;;13512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34802:3:::1;34784:22;;:6;:22;;;34780:124;;;34831:7;:5;:7::i;:::-;34823:25;;:48;34849:21;34823:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;34886:7;;34780:124;34914:17;34941:6;34914:34;;34959:15;34977:10;:20;;;35006:4;34977:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34959:53;;35023:10;:19;;;35043:7;:5;:7::i;:::-;35052;35023:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34766:302;;13591:1;34705:363:::0;:::o;35581:111::-;35642:4;35666:9;:18;35676:7;35666:18;;;;;;;;;;;;;;;;;;;;;;;;;35659:25;;35581:111;;;:::o;2092:98::-;2145:7;2172:10;2165:17;;2092:98;:::o;10584:380::-;10737:1;10720:19;;:5;:19;;;;10712:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10818:1;10799:21;;:7;:21;;;;10791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10902:6;10872:11;:18;10884:5;10872:18;;;;;;;;;;;;;;;:27;10891:7;10872:27;;;;;;;;;;;;;;;:36;;;;10940:7;10924:32;;10933:5;10924:32;;;10949:6;10924:32;;;;;;:::i;:::-;;;;;;;;10584:380;;;:::o;31395:595::-;31545:8;:6;:8::i;:::-;31544:9;31536:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;31612:25;31626:10;31612:13;:25::i;:::-;31611:26;31603:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31687:24;31701:9;31687:13;:24::i;:::-;31686:25;31678:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31764:24;31778:9;31764:13;:24::i;:::-;31763:25;31755:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31842:9;;;;;;;;;;;31839:89;;;31877:36;31887:6;31895:9;31906:6;31877:9;:36::i;:::-;31868:45;;31839:89;31940:42;31956:6;31964:9;31975:6;31940:15;:42::i;:::-;31395:595;;;:::o;26922:4461::-;27000:7;27020:25;27062:1;27048:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27020:44;;27097:4;27075:8;27084:1;27075:11;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;;;27127:17;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27113:8;27122:1;27113:11;;;;;;;;:::i;:::-;;;;;;;:38;;;;;;;;;;;27176:16;27187:4;27176:10;:16::i;:::-;27175:17;:36;;;;;27197:14;27208:2;27197:10;:14::i;:::-;27196:15;27175:36;27172:4170;;;27228:11;27254:16;27282:11;;27273:6;:20;;;;:::i;:::-;27254:39;;27327:13;;;;;;;;;;;27311:30;;:4;:30;;;27308:3814;;;27380:8;:15;;;;;:::i;:::-;;;;;;;;;;;;;;27369:8;:26;;;;:::i;:::-;27362:33;;;;;:::i;:::-;;;27432:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;;27421:8;:32;;;;:::i;:::-;27414:39;;;;;:::i;:::-;;;27516:1;27510:3;:7;27507:93;;;27542:35;27552:4;27566;27573:3;27542:9;:35::i;:::-;27507:93;27678:8;:15;;;;;:::i;:::-;;;;;;;;;;;;;;27667:8;:26;;;;:::i;:::-;27654:9;;:39;;;;;;;:::i;:::-;;;;;;;;27742:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;;27731:8;:32;;;;:::i;:::-;27712:15;;:51;;;;;;;:::i;:::-;;;;;;;;27308:3814;;;27804:13;;;;;;;;;;;27790:28;;:2;:28;;;27787:3335;;;27875:9;:16;;;;;:::i;:::-;;;;;;;;;;;;;;27864:8;:27;;;;:::i;:::-;27857:34;;;;;:::i;:::-;;;27928:9;:22;;;;;:::i;:::-;;;;;;;;;;;;;;27917:8;:33;;;;:::i;:::-;27910:40;;;;;:::i;:::-;;;28014:1;28008:3;:7;28005:93;;;28040:35;28050:4;28064;28071:3;28040:9;:35::i;:::-;28005:93;28175:9;:16;;;;;:::i;:::-;;;;;;;;;;;;;;28164:8;:27;;;;:::i;:::-;28151:9;;:40;;;;;;;:::i;:::-;;;;;;;;28240:9;:22;;;;;:::i;:::-;;;;;;;;;;;;;;28229:8;:33;;;;:::i;:::-;28210:15;;:52;;;;;;;:::i;:::-;;;;;;;;28317:14;28347:15;;28335:9;;:27;;;;:::i;:::-;28317:45;;28412:1;28402:6;:11;28399:29;;;28422:6;28415:13;;;;;;;;28399:29;28465:16;28484:17;;;;;;;;;;;:31;;;28529:15;;28517:9;;:27;;;;:::i;:::-;28546:8;28484:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28556:1;28484:74;;;;;;;;:::i;:::-;;;;;;;;28465:93;;28610:13;;28598:8;:25;28595:2494;;28648:20;28671:21;28648:44;;28717:14;28764:1;28746:15;;:19;;;;:::i;:::-;28734:9;;:31;;;;:::i;:::-;28717:48;;28811:59;28828:4;28843:17;;;;;;;;;;;28863:6;28811:8;:59::i;:::-;28907:17;;;;;;;;;;;:39;;;28973:6;29006:1;29034:8;29077:4;29109:15;28907:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29192:17;29236:12;29212:21;:36;;;;:::i;:::-;29192:56;;29293:22;29336:1;29318:15;;:19;;;;:::i;:::-;29293:44;;29360:20;29441:6;29430;29420;29416:1;29398:15;;:19;;;;:::i;:::-;:28;;;;:::i;:::-;29397:39;;;;:::i;:::-;29384:9;:53;;;;:::i;:::-;29383:64;;;;:::i;:::-;29360:87;;29514:14;29579:6;29568;29558;29546:9;;:18;;;;:::i;:::-;29545:29;;;;:::i;:::-;29532:9;:43;;;;:::i;:::-;29531:54;;;;:::i;:::-;29514:71;;29651:67;29668:4;29683:17;;;;;;;;;;;29703:14;29651:8;:67::i;:::-;29763:17;;;;;;;;;;;:33;;;29804:12;29852:4;29884:14;29925:1;29953;29981:10;:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;30031:15;29763:306;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30114:23;30182:14;30173:6;:23;;;;:::i;:::-;30153:15;;30141:9;;:27;;;;:::i;:::-;30140:57;;;;:::i;:::-;30114:83;;30263:1;30245:15;:19;30242:135;;;30293:60;30311:4;30318:10;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;30337:15;30293:9;:60::i;:::-;30242:135;30443:12;30460:10;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:22;;30490:6;30460:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30442:59;;;30531:7;30523:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;30682:1;30666:12;30657:6;:21;;;;:::i;:::-;30643:9;:36;;;;:::i;:::-;:40;30640:262;;;30712:13;30730:10;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:22;;30782:12;30773:6;:21;;;;:::i;:::-;30760:9;:35;;;;:::i;:::-;30730:70;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30711:89;;;30835:8;30827:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;30685:217;30640:262;31004:1;30992:9;:13;;;;31046:1;31028:15;:19;;;;28625:2464;;;;;;;;28595:2494;27820:3302;;27787:3335;27308:3814;31160:3;31150:13;;;;;:::i;:::-;;;31196;;;;;;;;;;;31182:28;;:2;:28;;;31178:140;;31264:9;;31254:6;31238:13;31248:2;31238:9;:13::i;:::-;:22;;;;:::i;:::-;:35;;31230:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;31178:140;27213:4129;;27172:4170;31369:6;31362:13;;;26922:4461;;;;;;:::o;16623:120::-;16167:8;:6;:8::i;:::-;16159:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;16692:5:::1;16682:7;;:15;;;;;;;;;;;;;;;;;;16713:22;16722:12;:10;:12::i;:::-;16713:22;;;;;;:::i;:::-;;;;;;;;16623:120::o:0;9555:591::-;9658:1;9639:21;;:7;:21;;;;9631:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9711:49;9732:7;9749:1;9753:6;9711:20;:49::i;:::-;9773:22;9798:9;:18;9808:7;9798:18;;;;;;;;;;;;;;;;9773:43;;9853:6;9835:14;:24;;9827:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9972:6;9955:14;:23;9934:9;:18;9944:7;9934:18;;;;;;;;;;;;;;;:44;;;;10016:6;10000:12;;:22;;;;;;;:::i;:::-;;;;;;;;10066:1;10040:37;;10049:7;10040:37;;;10070:6;10040:37;;;;;;:::i;:::-;;;;;;;;10090:48;10110:7;10127:1;10131:6;10090:19;:48::i;:::-;9620:526;9555:591;;:::o;14400:174::-;14457:16;14476:6;;;;;;;;;;;14457:25;;14502:8;14493:6;;:17;;;;;;;;;;;;;;;;;;14557:8;14526:40;;14547:8;14526:40;;;;;;;;;;;;14446:128;14400:174;:::o;16364:118::-;15890:8;:6;:8::i;:::-;15889:9;15881:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16434:4:::1;16424:7;;:14;;;;;;;;;;;;;;;;;;16454:20;16461:12;:10;:12::i;:::-;16454:20;;;;;;:::i;:::-;;;;;;;;16364:118::o:0;7803:733::-;7961:1;7943:20;;:6;:20;;;;7935:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8045:1;8024:23;;:9;:23;;;;8016:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8100:47;8121:6;8129:9;8140:6;8100:20;:47::i;:::-;8160:21;8184:9;:17;8194:6;8184:17;;;;;;;;;;;;;;;;8160:41;;8237:6;8220:13;:23;;8212:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;8358:6;8342:13;:22;8322:9;:17;8332:6;8322:17;;;;;;;;;;;;;;;:42;;;;8410:6;8386:9;:20;8396:9;8386:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8451:9;8434:35;;8443:6;8434:35;;;8462:6;8434:35;;;;;;:::i;:::-;;;;;;;;8482:46;8502:6;8510:9;8521:6;8482:19;:46::i;:::-;7924:612;7803:733;;;:::o;11564:125::-;;;;:::o;12293:124::-;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:118::-;4061:24;4079:5;4061:24;:::i;:::-;4056:3;4049:37;3974:118;;:::o;4098:222::-;4191:4;4229:2;4218:9;4214:18;4206:26;;4242:71;4310:1;4299:9;4295:17;4286:6;4242:71;:::i;:::-;4098:222;;;;:::o;4326:619::-;4403:6;4411;4419;4468:2;4456:9;4447:7;4443:23;4439:32;4436:119;;;4474:79;;:::i;:::-;4436:119;4594:1;4619:53;4664:7;4655:6;4644:9;4640:22;4619:53;:::i;:::-;4609:63;;4565:117;4721:2;4747:53;4792:7;4783:6;4772:9;4768:22;4747:53;:::i;:::-;4737:63;;4692:118;4849:2;4875:53;4920:7;4911:6;4900:9;4896:22;4875:53;:::i;:::-;4865:63;;4820:118;4326:619;;;;;:::o;4951:86::-;4986:7;5026:4;5019:5;5015:16;5004:27;;4951:86;;;:::o;5043:112::-;5126:22;5142:5;5126:22;:::i;:::-;5121:3;5114:35;5043:112;;:::o;5161:214::-;5250:4;5288:2;5277:9;5273:18;5265:26;;5301:67;5365:1;5354:9;5350:17;5341:6;5301:67;:::i;:::-;5161:214;;;;:::o;5381:329::-;5440:6;5489:2;5477:9;5468:7;5464:23;5460:32;5457:119;;;5495:79;;:::i;:::-;5457:119;5615:1;5640:53;5685:7;5676:6;5665:9;5661:22;5640:53;:::i;:::-;5630:63;;5586:117;5381:329;;;;:::o;5716:::-;5775:6;5824:2;5812:9;5803:7;5799:23;5795:32;5792:119;;;5830:79;;:::i;:::-;5792:119;5950:1;5975:53;6020:7;6011:6;6000:9;5996:22;5975:53;:::i;:::-;5965:63;;5921:117;5716:329;;;;:::o;6051:118::-;6138:24;6156:5;6138:24;:::i;:::-;6133:3;6126:37;6051:118;;:::o;6175:222::-;6268:4;6306:2;6295:9;6291:18;6283:26;;6319:71;6387:1;6376:9;6372:17;6363:6;6319:71;:::i;:::-;6175:222;;;;:::o;6403:474::-;6471:6;6479;6528:2;6516:9;6507:7;6503:23;6499:32;6496:119;;;6534:79;;:::i;:::-;6496:119;6654:1;6679:53;6724:7;6715:6;6704:9;6700:22;6679:53;:::i;:::-;6669:63;;6625:117;6781:2;6807:53;6852:7;6843:6;6832:9;6828:22;6807:53;:::i;:::-;6797:63;;6752:118;6403:474;;;;;:::o;6883:182::-;7023:34;7019:1;7011:6;7007:14;7000:58;6883:182;:::o;7071:366::-;7213:3;7234:67;7298:2;7293:3;7234:67;:::i;:::-;7227:74;;7310:93;7399:3;7310:93;:::i;:::-;7428:2;7423:3;7419:12;7412:19;;7071:366;;;:::o;7443:419::-;7609:4;7647:2;7636:9;7632:18;7624:26;;7696:9;7690:4;7686:20;7682:1;7671:9;7667:17;7660:47;7724:131;7850:4;7724:131;:::i;:::-;7716:139;;7443:419;;;:::o;7868:148::-;7970:11;8007:3;7992:18;;7868:148;;;;:::o;8022:153::-;8162:5;8158:1;8150:6;8146:14;8139:29;8022:153;:::o;8181:400::-;8341:3;8362:84;8444:1;8439:3;8362:84;:::i;:::-;8355:91;;8455:93;8544:3;8455:93;:::i;:::-;8573:1;8568:3;8564:11;8557:18;;8181:400;;;:::o;8587:381::-;8772:3;8794:148;8938:3;8794:148;:::i;:::-;8787:155;;8959:3;8952:10;;8587:381;;;:::o;8974:159::-;9114:11;9110:1;9102:6;9098:14;9091:35;8974:159;:::o;9139:400::-;9299:3;9320:84;9402:1;9397:3;9320:84;:::i;:::-;9313:91;;9413:93;9502:3;9413:93;:::i;:::-;9531:1;9526:3;9522:11;9515:18;;9139:400;;;:::o;9545:381::-;9730:3;9752:148;9896:3;9752:148;:::i;:::-;9745:155;;9917:3;9910:10;;9545:381;;;:::o;9932:180::-;9980:77;9977:1;9970:88;10077:4;10074:1;10067:15;10101:4;10098:1;10091:15;10118:320;10162:6;10199:1;10193:4;10189:12;10179:22;;10246:1;10240:4;10236:12;10267:18;10257:81;;10323:4;10315:6;10311:17;10301:27;;10257:81;10385:2;10377:6;10374:14;10354:18;10351:38;10348:84;;;10404:18;;:::i;:::-;10348:84;10169:269;10118:320;;;:::o;10444:227::-;10584:34;10580:1;10572:6;10568:14;10561:58;10653:10;10648:2;10640:6;10636:15;10629:35;10444:227;:::o;10677:366::-;10819:3;10840:67;10904:2;10899:3;10840:67;:::i;:::-;10833:74;;10916:93;11005:3;10916:93;:::i;:::-;11034:2;11029:3;11025:12;11018:19;;10677:366;;;:::o;11049:419::-;11215:4;11253:2;11242:9;11238:18;11230:26;;11302:9;11296:4;11292:20;11288:1;11277:9;11273:17;11266:47;11330:131;11456:4;11330:131;:::i;:::-;11322:139;;11049:419;;;:::o;11474:180::-;11522:77;11519:1;11512:88;11619:4;11616:1;11609:15;11643:4;11640:1;11633:15;11660:305;11700:3;11719:20;11737:1;11719:20;:::i;:::-;11714:25;;11753:20;11771:1;11753:20;:::i;:::-;11748:25;;11907:1;11839:66;11835:74;11832:1;11829:81;11826:107;;;11913:18;;:::i;:::-;11826:107;11957:1;11954;11950:9;11943:16;;11660:305;;;;:::o;11971:179::-;12111:31;12107:1;12099:6;12095:14;12088:55;11971:179;:::o;12156:366::-;12298:3;12319:67;12383:2;12378:3;12319:67;:::i;:::-;12312:74;;12395:93;12484:3;12395:93;:::i;:::-;12513:2;12508:3;12504:12;12497:19;;12156:366;;;:::o;12528:419::-;12694:4;12732:2;12721:9;12717:18;12709:26;;12781:9;12775:4;12771:20;12767:1;12756:9;12752:17;12745:47;12809:131;12935:4;12809:131;:::i;:::-;12801:139;;12528:419;;;:::o;12953:221::-;13093:34;13089:1;13081:6;13077:14;13070:58;13162:4;13157:2;13149:6;13145:15;13138:29;12953:221;:::o;13180:366::-;13322:3;13343:67;13407:2;13402:3;13343:67;:::i;:::-;13336:74;;13419:93;13508:3;13419:93;:::i;:::-;13537:2;13532:3;13528:12;13521:19;;13180:366;;;:::o;13552:419::-;13718:4;13756:2;13745:9;13741:18;13733:26;;13805:9;13799:4;13795:20;13791:1;13780:9;13776:17;13769:47;13833:131;13959:4;13833:131;:::i;:::-;13825:139;;13552:419;;;:::o;13977:179::-;14117:31;14113:1;14105:6;14101:14;14094:55;13977:179;:::o;14162:366::-;14304:3;14325:67;14389:2;14384:3;14325:67;:::i;:::-;14318:74;;14401:93;14490:3;14401:93;:::i;:::-;14519:2;14514:3;14510:12;14503:19;;14162:366;;;:::o;14534:419::-;14700:4;14738:2;14727:9;14723:18;14715:26;;14787:9;14781:4;14777:20;14773:1;14762:9;14758:17;14751:47;14815:131;14941:4;14815:131;:::i;:::-;14807:139;;14534:419;;;:::o;14959:161::-;15099:13;15095:1;15087:6;15083:14;15076:37;14959:161;:::o;15126:366::-;15268:3;15289:67;15353:2;15348:3;15289:67;:::i;:::-;15282:74;;15365:93;15454:3;15365:93;:::i;:::-;15483:2;15478:3;15474:12;15467:19;;15126:366;;;:::o;15498:419::-;15664:4;15702:2;15691:9;15687:18;15679:26;;15751:9;15745:4;15741:20;15737:1;15726:9;15722:17;15715:47;15779:131;15905:4;15779:131;:::i;:::-;15771:139;;15498:419;;;:::o;15923:348::-;15963:7;15986:20;16004:1;15986:20;:::i;:::-;15981:25;;16020:20;16038:1;16020:20;:::i;:::-;16015:25;;16208:1;16140:66;16136:74;16133:1;16130:81;16125:1;16118:9;16111:17;16107:105;16104:131;;;16215:18;;:::i;:::-;16104:131;16263:1;16260;16256:9;16245:20;;15923:348;;;;:::o;16277:224::-;16417:34;16413:1;16405:6;16401:14;16394:58;16486:7;16481:2;16473:6;16469:15;16462:32;16277:224;:::o;16507:366::-;16649:3;16670:67;16734:2;16729:3;16670:67;:::i;:::-;16663:74;;16746:93;16835:3;16746:93;:::i;:::-;16864:2;16859:3;16855:12;16848:19;;16507:366;;;:::o;16879:419::-;17045:4;17083:2;17072:9;17068:18;17060:26;;17132:9;17126:4;17122:20;17118:1;17107:9;17103:17;17096:47;17160:131;17286:4;17160:131;:::i;:::-;17152:139;;16879:419;;;:::o;17304:220::-;17444:34;17440:1;17432:6;17428:14;17421:58;17513:3;17508:2;17500:6;17496:15;17489:28;17304:220;:::o;17530:366::-;17672:3;17693:67;17757:2;17752:3;17693:67;:::i;:::-;17686:74;;17769:93;17858:3;17769:93;:::i;:::-;17887:2;17882:3;17878:12;17871:19;;17530:366;;;:::o;17902:419::-;18068:4;18106:2;18095:9;18091:18;18083:26;;18155:9;18149:4;18145:20;18141:1;18130:9;18126:17;18119:47;18183:131;18309:4;18183:131;:::i;:::-;18175:139;;17902:419;;;:::o;18327:224::-;18467:34;18463:1;18455:6;18451:14;18444:58;18536:7;18531:2;18523:6;18519:15;18512:32;18327:224;:::o;18557:366::-;18699:3;18720:67;18784:2;18779:3;18720:67;:::i;:::-;18713:74;;18796:93;18885:3;18796:93;:::i;:::-;18914:2;18909:3;18905:12;18898:19;;18557:366;;;:::o;18929:419::-;19095:4;19133:2;19122:9;19118:18;19110:26;;19182:9;19176:4;19172:20;19168:1;19157:9;19153:17;19146:47;19210:131;19336:4;19210:131;:::i;:::-;19202:139;;18929:419;;;:::o;19354:180::-;19494:32;19490:1;19482:6;19478:14;19471:56;19354:180;:::o;19540:366::-;19682:3;19703:67;19767:2;19762:3;19703:67;:::i;:::-;19696:74;;19779:93;19868:3;19779:93;:::i;:::-;19897:2;19892:3;19888:12;19881:19;;19540:366;;;:::o;19912:419::-;20078:4;20116:2;20105:9;20101:18;20093:26;;20165:9;20159:4;20155:20;20151:1;20140:9;20136:17;20129:47;20193:131;20319:4;20193:131;:::i;:::-;20185:139;;19912:419;;;:::o;20337:180::-;20477:32;20473:1;20465:6;20461:14;20454:56;20337:180;:::o;20523:366::-;20665:3;20686:67;20750:2;20745:3;20686:67;:::i;:::-;20679:74;;20762:93;20851:3;20762:93;:::i;:::-;20880:2;20875:3;20871:12;20864:19;;20523:366;;;:::o;20895:419::-;21061:4;21099:2;21088:9;21084:18;21076:26;;21148:9;21142:4;21138:20;21134:1;21123:9;21119:17;21112:47;21176:131;21302:4;21176:131;:::i;:::-;21168:139;;20895:419;;;:::o;21320:220::-;21460:34;21456:1;21448:6;21444:14;21437:58;21529:3;21524:2;21516:6;21512:15;21505:28;21320:220;:::o;21546:366::-;21688:3;21709:67;21773:2;21768:3;21709:67;:::i;:::-;21702:74;;21785:93;21874:3;21785:93;:::i;:::-;21903:2;21898:3;21894:12;21887:19;;21546:366;;;:::o;21918:419::-;22084:4;22122:2;22111:9;22107:18;22099:26;;22171:9;22165:4;22161:20;22157:1;22146:9;22142:17;22135:47;22199:131;22325:4;22199:131;:::i;:::-;22191:139;;21918:419;;;:::o;22343:225::-;22483:34;22479:1;22471:6;22467:14;22460:58;22552:8;22547:2;22539:6;22535:15;22528:33;22343:225;:::o;22574:366::-;22716:3;22737:67;22801:2;22796:3;22737:67;:::i;:::-;22730:74;;22813:93;22902:3;22813:93;:::i;:::-;22931:2;22926:3;22922:12;22915:19;;22574:366;;;:::o;22946:419::-;23112:4;23150:2;23139:9;23135:18;23127:26;;23199:9;23193:4;23189:20;23185:1;23174:9;23170:17;23163:47;23227:131;23353:4;23227:131;:::i;:::-;23219:139;;22946:419;;;:::o;23371:143::-;23428:5;23459:6;23453:13;23444:22;;23475:33;23502:5;23475:33;:::i;:::-;23371:143;;;;:::o;23520:351::-;23590:6;23639:2;23627:9;23618:7;23614:23;23610:32;23607:119;;;23645:79;;:::i;:::-;23607:119;23765:1;23790:64;23846:7;23837:6;23826:9;23822:22;23790:64;:::i;:::-;23780:74;;23736:128;23520:351;;;;:::o;23877:332::-;23998:4;24036:2;24025:9;24021:18;24013:26;;24049:71;24117:1;24106:9;24102:17;24093:6;24049:71;:::i;:::-;24130:72;24198:2;24187:9;24183:18;24174:6;24130:72;:::i;:::-;23877:332;;;;;:::o;24215:116::-;24285:21;24300:5;24285:21;:::i;:::-;24278:5;24275:32;24265:60;;24321:1;24318;24311:12;24265:60;24215:116;:::o;24337:137::-;24391:5;24422:6;24416:13;24407:22;;24438:30;24462:5;24438:30;:::i;:::-;24337:137;;;;:::o;24480:345::-;24547:6;24596:2;24584:9;24575:7;24571:23;24567:32;24564:119;;;24602:79;;:::i;:::-;24564:119;24722:1;24747:61;24800:7;24791:6;24780:9;24776:22;24747:61;:::i;:::-;24737:71;;24693:125;24480:345;;;;:::o;24831:223::-;24971:34;24967:1;24959:6;24955:14;24948:58;25040:6;25035:2;25027:6;25023:15;25016:31;24831:223;:::o;25060:366::-;25202:3;25223:67;25287:2;25282:3;25223:67;:::i;:::-;25216:74;;25299:93;25388:3;25299:93;:::i;:::-;25417:2;25412:3;25408:12;25401:19;;25060:366;;;:::o;25432:419::-;25598:4;25636:2;25625:9;25621:18;25613:26;;25685:9;25679:4;25675:20;25671:1;25660:9;25656:17;25649:47;25713:131;25839:4;25713:131;:::i;:::-;25705:139;;25432:419;;;:::o;25857:221::-;25997:34;25993:1;25985:6;25981:14;25974:58;26066:4;26061:2;26053:6;26049:15;26042:29;25857:221;:::o;26084:366::-;26226:3;26247:67;26311:2;26306:3;26247:67;:::i;:::-;26240:74;;26323:93;26412:3;26323:93;:::i;:::-;26441:2;26436:3;26432:12;26425:19;;26084:366;;;:::o;26456:419::-;26622:4;26660:2;26649:9;26645:18;26637:26;;26709:9;26703:4;26699:20;26695:1;26684:9;26680:17;26673:47;26737:131;26863:4;26737:131;:::i;:::-;26729:139;;26456:419;;;:::o;26881:221::-;27021:34;27017:1;27009:6;27005:14;26998:58;27090:4;27085:2;27077:6;27073:15;27066:29;26881:221;:::o;27108:366::-;27250:3;27271:67;27335:2;27330:3;27271:67;:::i;:::-;27264:74;;27347:93;27436:3;27347:93;:::i;:::-;27465:2;27460:3;27456:12;27449:19;;27108:366;;;:::o;27480:419::-;27646:4;27684:2;27673:9;27669:18;27661:26;;27733:9;27727:4;27723:20;27719:1;27708:9;27704:17;27697:47;27761:131;27887:4;27761:131;:::i;:::-;27753:139;;27480:419;;;:::o;27905:175::-;28045:27;28041:1;28033:6;28029:14;28022:51;27905:175;:::o;28086:366::-;28228:3;28249:67;28313:2;28308:3;28249:67;:::i;:::-;28242:74;;28325:93;28414:3;28325:93;:::i;:::-;28443:2;28438:3;28434:12;28427:19;;28086:366;;;:::o;28458:419::-;28624:4;28662:2;28651:9;28647:18;28639:26;;28711:9;28705:4;28701:20;28697:1;28686:9;28682:17;28675:47;28739:131;28865:4;28739:131;:::i;:::-;28731:139;;28458:419;;;:::o;28883:178::-;29023:30;29019:1;29011:6;29007:14;29000:54;28883:178;:::o;29067:366::-;29209:3;29230:67;29294:2;29289:3;29230:67;:::i;:::-;29223:74;;29306:93;29395:3;29306:93;:::i;:::-;29424:2;29419:3;29415:12;29408:19;;29067:366;;;:::o;29439:419::-;29605:4;29643:2;29632:9;29628:18;29620:26;;29692:9;29686:4;29682:20;29678:1;29667:9;29663:17;29656:47;29720:131;29846:4;29720:131;:::i;:::-;29712:139;;29439:419;;;:::o;29864:180::-;29912:77;29909:1;29902:88;30009:4;30006:1;29999:15;30033:4;30030:1;30023:15;30050:180;30098:77;30095:1;30088:88;30195:4;30192:1;30185:15;30219:4;30216:1;30209:15;30236:143;30293:5;30324:6;30318:13;30309:22;;30340:33;30367:5;30340:33;:::i;:::-;30236:143;;;;:::o;30385:351::-;30455:6;30504:2;30492:9;30483:7;30479:23;30475:32;30472:119;;;30510:79;;:::i;:::-;30472:119;30630:1;30655:64;30711:7;30702:6;30691:9;30687:22;30655:64;:::i;:::-;30645:74;;30601:128;30385:351;;;;:::o;30742:180::-;30790:77;30787:1;30780:88;30887:4;30884:1;30877:15;30911:4;30908:1;30901:15;30928:185;30968:1;30985:20;31003:1;30985:20;:::i;:::-;30980:25;;31019:20;31037:1;31019:20;:::i;:::-;31014:25;;31058:1;31048:35;;31063:18;;:::i;:::-;31048:35;31105:1;31102;31098:9;31093:14;;30928:185;;;;:::o;31119:114::-;31186:6;31220:5;31214:12;31204:22;;31119:114;;;:::o;31239:184::-;31338:11;31372:6;31367:3;31360:19;31412:4;31407:3;31403:14;31388:29;;31239:184;;;;:::o;31429:132::-;31496:4;31519:3;31511:11;;31549:4;31544:3;31540:14;31532:22;;31429:132;;;:::o;31567:108::-;31644:24;31662:5;31644:24;:::i;:::-;31639:3;31632:37;31567:108;;:::o;31681:179::-;31750:10;31771:46;31813:3;31805:6;31771:46;:::i;:::-;31849:4;31844:3;31840:14;31826:28;;31681:179;;;;:::o;31866:113::-;31936:4;31968;31963:3;31959:14;31951:22;;31866:113;;;:::o;32015:732::-;32134:3;32163:54;32211:5;32163:54;:::i;:::-;32233:86;32312:6;32307:3;32233:86;:::i;:::-;32226:93;;32343:56;32393:5;32343:56;:::i;:::-;32422:7;32453:1;32438:284;32463:6;32460:1;32457:13;32438:284;;;32539:6;32533:13;32566:63;32625:3;32610:13;32566:63;:::i;:::-;32559:70;;32652:60;32705:6;32652:60;:::i;:::-;32642:70;;32498:224;32485:1;32482;32478:9;32473:14;;32438:284;;;32442:14;32738:3;32731:10;;32139:608;;;32015:732;;;;:::o;32753:483::-;32924:4;32962:2;32951:9;32947:18;32939:26;;32975:71;33043:1;33032:9;33028:17;33019:6;32975:71;:::i;:::-;33093:9;33087:4;33083:20;33078:2;33067:9;33063:18;33056:48;33121:108;33224:4;33215:6;33121:108;:::i;:::-;33113:116;;32753:483;;;;;:::o;33242:117::-;33351:1;33348;33341:12;33365:281;33448:27;33470:4;33448:27;:::i;:::-;33440:6;33436:40;33578:6;33566:10;33563:22;33542:18;33530:10;33527:34;33524:62;33521:88;;;33589:18;;:::i;:::-;33521:88;33629:10;33625:2;33618:22;33408:238;33365:281;;:::o;33652:129::-;33686:6;33713:20;;:::i;:::-;33703:30;;33742:33;33770:4;33762:6;33742:33;:::i;:::-;33652:129;;;:::o;33787:311::-;33864:4;33954:18;33946:6;33943:30;33940:56;;;33976:18;;:::i;:::-;33940:56;34026:4;34018:6;34014:17;34006:25;;34086:4;34080;34076:15;34068:23;;33787:311;;;:::o;34104:117::-;34213:1;34210;34203:12;34244:732;34351:5;34376:81;34392:64;34449:6;34392:64;:::i;:::-;34376:81;:::i;:::-;34367:90;;34477:5;34506:6;34499:5;34492:21;34540:4;34533:5;34529:16;34522:23;;34593:4;34585:6;34581:17;34573:6;34569:30;34622:3;34614:6;34611:15;34608:122;;;34641:79;;:::i;:::-;34608:122;34756:6;34739:231;34773:6;34768:3;34765:15;34739:231;;;34848:3;34877:48;34921:3;34909:10;34877:48;:::i;:::-;34872:3;34865:61;34955:4;34950:3;34946:14;34939:21;;34815:155;34799:4;34794:3;34790:14;34783:21;;34739:231;;;34743:21;34357:619;;34244:732;;;;;:::o;34999:385::-;35081:5;35130:3;35123:4;35115:6;35111:17;35107:27;35097:122;;35138:79;;:::i;:::-;35097:122;35248:6;35242:13;35273:105;35374:3;35366:6;35359:4;35351:6;35347:17;35273:105;:::i;:::-;35264:114;;35087:297;34999:385;;;;:::o;35390:554::-;35485:6;35534:2;35522:9;35513:7;35509:23;35505:32;35502:119;;;35540:79;;:::i;:::-;35502:119;35681:1;35670:9;35666:17;35660:24;35711:18;35703:6;35700:30;35697:117;;;35733:79;;:::i;:::-;35697:117;35838:89;35919:7;35910:6;35899:9;35895:22;35838:89;:::i;:::-;35828:99;;35631:306;35390:554;;;;:::o;35950:85::-;35995:7;36024:5;36013:16;;35950:85;;;:::o;36041:60::-;36069:3;36090:5;36083:12;;36041:60;;;:::o;36107:158::-;36165:9;36198:61;36216:42;36225:32;36251:5;36225:32;:::i;:::-;36216:42;:::i;:::-;36198:61;:::i;:::-;36185:74;;36107:158;;;:::o;36271:147::-;36366:45;36405:5;36366:45;:::i;:::-;36361:3;36354:58;36271:147;;:::o;36424:831::-;36687:4;36725:3;36714:9;36710:19;36702:27;;36739:71;36807:1;36796:9;36792:17;36783:6;36739:71;:::i;:::-;36820:80;36896:2;36885:9;36881:18;36872:6;36820:80;:::i;:::-;36947:9;36941:4;36937:20;36932:2;36921:9;36917:18;36910:48;36975:108;37078:4;37069:6;36975:108;:::i;:::-;36967:116;;37093:72;37161:2;37150:9;37146:18;37137:6;37093:72;:::i;:::-;37175:73;37243:3;37232:9;37228:19;37219:6;37175:73;:::i;:::-;36424:831;;;;;;;;:::o;37261:191::-;37301:4;37321:20;37339:1;37321:20;:::i;:::-;37316:25;;37355:20;37373:1;37355:20;:::i;:::-;37350:25;;37394:1;37391;37388:8;37385:34;;;37399:18;;:::i;:::-;37385:34;37444:1;37441;37437:9;37429:17;;37261:191;;;;:::o;37458:807::-;37707:4;37745:3;37734:9;37730:19;37722:27;;37759:71;37827:1;37816:9;37812:17;37803:6;37759:71;:::i;:::-;37840:72;37908:2;37897:9;37893:18;37884:6;37840:72;:::i;:::-;37922:80;37998:2;37987:9;37983:18;37974:6;37922:80;:::i;:::-;38012;38088:2;38077:9;38073:18;38064:6;38012:80;:::i;:::-;38102:73;38170:3;38159:9;38155:19;38146:6;38102:73;:::i;:::-;38185;38253:3;38242:9;38238:19;38229:6;38185:73;:::i;:::-;37458:807;;;;;;;;;:::o;38271:663::-;38359:6;38367;38375;38424:2;38412:9;38403:7;38399:23;38395:32;38392:119;;;38430:79;;:::i;:::-;38392:119;38550:1;38575:64;38631:7;38622:6;38611:9;38607:22;38575:64;:::i;:::-;38565:74;;38521:128;38688:2;38714:64;38770:7;38761:6;38750:9;38746:22;38714:64;:::i;:::-;38704:74;;38659:129;38827:2;38853:64;38909:7;38900:6;38889:9;38885:22;38853:64;:::i;:::-;38843:74;;38798:129;38271:663;;;;;:::o;38940:147::-;39041:11;39078:3;39063:18;;38940:147;;;;:::o;39093:114::-;;:::o;39213:398::-;39372:3;39393:83;39474:1;39469:3;39393:83;:::i;:::-;39386:90;;39485:93;39574:3;39485:93;:::i;:::-;39603:1;39598:3;39594:11;39587:18;;39213:398;;;:::o;39617:379::-;39801:3;39823:147;39966:3;39823:147;:::i;:::-;39816:154;;39987:3;39980:10;;39617:379;;;:::o;40002:180::-;40142:32;40138:1;40130:6;40126:14;40119:56;40002:180;:::o;40188:366::-;40330:3;40351:67;40415:2;40410:3;40351:67;:::i;:::-;40344:74;;40427:93;40516:3;40427:93;:::i;:::-;40545:2;40540:3;40536:12;40529:19;;40188:366;;;:::o;40560:419::-;40726:4;40764:2;40753:9;40749:18;40741:26;;40813:9;40807:4;40803:20;40799:1;40788:9;40784:17;40777:47;40841:131;40967:4;40841:131;:::i;:::-;40833:139;;40560:419;;;:::o;40985:174::-;41125:26;41121:1;41113:6;41109:14;41102:50;40985:174;:::o;41165:366::-;41307:3;41328:67;41392:2;41387:3;41328:67;:::i;:::-;41321:74;;41404:93;41493:3;41404:93;:::i;:::-;41522:2;41517:3;41513:12;41506:19;;41165:366;;;:::o;41537:419::-;41703:4;41741:2;41730:9;41726:18;41718:26;;41790:9;41784:4;41780:20;41776:1;41765:9;41761:17;41754:47;41818:131;41944:4;41818:131;:::i;:::-;41810:139;;41537:419;;;:::o;41962:170::-;42102:22;42098:1;42090:6;42086:14;42079:46;41962:170;:::o;42138:366::-;42280:3;42301:67;42365:2;42360:3;42301:67;:::i;:::-;42294:74;;42377:93;42466:3;42377:93;:::i;:::-;42495:2;42490:3;42486:12;42479:19;;42138:366;;;:::o;42510:419::-;42676:4;42714:2;42703:9;42699:18;42691:26;;42763:9;42757:4;42753:20;42749:1;42738:9;42734:17;42727:47;42791:131;42917:4;42791:131;:::i;:::-;42783:139;;42510:419;;;:::o;42935:220::-;43075:34;43071:1;43063:6;43059:14;43052:58;43144:3;43139:2;43131:6;43127:15;43120:28;42935:220;:::o;43161:366::-;43303:3;43324:67;43388:2;43383:3;43324:67;:::i;:::-;43317:74;;43400:93;43489:3;43400:93;:::i;:::-;43518:2;43513:3;43509:12;43502:19;;43161:366;;;:::o;43533:419::-;43699:4;43737:2;43726:9;43722:18;43714:26;;43786:9;43780:4;43776:20;43772:1;43761:9;43757:17;43750:47;43814:131;43940:4;43814:131;:::i;:::-;43806:139;;43533:419;;;:::o;43958:221::-;44098:34;44094:1;44086:6;44082:14;44075:58;44167:4;44162:2;44154:6;44150:15;44143:29;43958:221;:::o;44185:366::-;44327:3;44348:67;44412:2;44407:3;44348:67;:::i;:::-;44341:74;;44424:93;44513:3;44424:93;:::i;:::-;44542:2;44537:3;44533:12;44526:19;;44185:366;;;:::o;44557:419::-;44723:4;44761:2;44750:9;44746:18;44738:26;;44810:9;44804:4;44800:20;44796:1;44785:9;44781:17;44774:47;44838:131;44964:4;44838:131;:::i;:::-;44830:139;;44557:419;;;:::o;44982:166::-;45122:18;45118:1;45110:6;45106:14;45099:42;44982:166;:::o;45154:366::-;45296:3;45317:67;45381:2;45376:3;45317:67;:::i;:::-;45310:74;;45393:93;45482:3;45393:93;:::i;:::-;45511:2;45506:3;45502:12;45495:19;;45154:366;;;:::o;45526:419::-;45692:4;45730:2;45719:9;45715:18;45707:26;;45779:9;45773:4;45769:20;45765:1;45754:9;45750:17;45743:47;45807:131;45933:4;45807:131;:::i;:::-;45799:139;;45526:419;;;:::o;45951:224::-;46091:34;46087:1;46079:6;46075:14;46068:58;46160:7;46155:2;46147:6;46143:15;46136:32;45951:224;:::o;46181:366::-;46323:3;46344:67;46408:2;46403:3;46344:67;:::i;:::-;46337:74;;46420:93;46509:3;46420:93;:::i;:::-;46538:2;46533:3;46529:12;46522:19;;46181:366;;;:::o;46553:419::-;46719:4;46757:2;46746:9;46742:18;46734:26;;46806:9;46800:4;46796:20;46792:1;46781:9;46777:17;46770:47;46834:131;46960:4;46834:131;:::i;:::-;46826:139;;46553:419;;;:::o;46978:222::-;47118:34;47114:1;47106:6;47102:14;47095:58;47187:5;47182:2;47174:6;47170:15;47163:30;46978:222;:::o;47206:366::-;47348:3;47369:67;47433:2;47428:3;47369:67;:::i;:::-;47362:74;;47445:93;47534:3;47445:93;:::i;:::-;47563:2;47558:3;47554:12;47547:19;;47206:366;;;:::o;47578:419::-;47744:4;47782:2;47771:9;47767:18;47759:26;;47831:9;47825:4;47821:20;47817:1;47806:9;47802:17;47795:47;47859:131;47985:4;47859:131;:::i;:::-;47851:139;;47578:419;;;:::o;48003:225::-;48143:34;48139:1;48131:6;48127:14;48120:58;48212:8;48207:2;48199:6;48195:15;48188:33;48003:225;:::o;48234:366::-;48376:3;48397:67;48461:2;48456:3;48397:67;:::i;:::-;48390:74;;48473:93;48562:3;48473:93;:::i;:::-;48591:2;48586:3;48582:12;48575:19;;48234:366;;;:::o;48606:419::-;48772:4;48810:2;48799:9;48795:18;48787:26;;48859:9;48853:4;48849:20;48845:1;48834:9;48830:17;48823:47;48887:131;49013:4;48887:131;:::i;:::-;48879:139;;48606:419;;;:::o

Swarm Source

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