ETH Price: $2,237.87 (-1.63%)
 

Overview

Max Total Supply

1,000,000,000 Brutalik

Holders

7

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
Brutalik

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: Brutalik.sol
/**

██████  ██████  ██    ██ ████████  █████  ██      ██ ██   ██ 
██   ██ ██   ██ ██    ██    ██    ██   ██ ██      ██ ██  ██  
██████  ██████  ██    ██    ██    ███████ ██      ██ █████   
██   ██ ██   ██ ██    ██    ██    ██   ██ ██      ██ ██  ██  
██████  ██   ██  ██████     ██    ██   ██ ███████ ██ ██   ██ 
                                                                     
                                             
Twitter (X): https://x.com/BrutalikETH

Website: https://www.brutalik.xyz/

Telegram:  https://t.me/brutaliketh
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.20;

import {Context} from "./Context.sol";
import {IERC20} from "./IERC20.sol";
import {Ownable} from "./Ownable.sol";
import {SafeMath} from "./SafeMath.sol";
import {IUniswapV2Router02} from "./IUniswapV2Router02.sol";
import {IUniswapV2Factory} from "./IUniswapV2Factory.sol";

contract Brutalik is Context, IERC20, Ownable {
    using SafeMath for uint256;

    string private constant _name = unicode"Brutalik";
    string private constant _symbol = unicode"Brutalik";
    uint8 private constant _decimals = 18;

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

    mapping(address => bool) private ignoreTax;
    uint256 private constant _totalSupply = 1_000_000_000 * 10**_decimals;

    uint8 private _buyFee = 0;
    uint8 private _sellFee = 0;

    IUniswapV2Router02 constant uniswapV2Router =
        IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public uniswapV2Pair;

    bool private tradingOpen;
    bool private swapping = false;

    uint256 private _swapAmount = _totalSupply / 100;

    constructor() {
        ignoreTax[owner()] = true;
        ignoreTax[address(this)] = true;
        _balances[owner()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

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

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

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

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

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(tradingOpen || from == owner() || to == owner());

        _balances[from] -= amount;

        if (
            to == uniswapV2Pair &&
            !swapping &&
            balanceOf(address(this)) >= _swapAmount &&
            from != owner() &&
            !ignoreTax[from] &&
            !ignoreTax[to]
        ) {
            swapping = true;
            swapTokensForEth(_swapAmount);
            payable(owner()).transfer(address(this).balance);
            swapping = false;
        }

        if (from != address(this) && tradingOpen == true) {
            uint256 tax = (amount *
                (to == uniswapV2Pair ? _sellFee : _buyFee)) / 100;
            amount -= tax;
            _balances[address(this)] += tax;
        }
        _balances[to] += amount;
        emit Transfer(from, to, amount);
        return true;
    }

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

    function OpenTrading() external onlyOwner {
        require(!tradingOpen);
        address _factory = uniswapV2Router.factory();
        address _weth = uniswapV2Router.WETH();
        address _pair = IUniswapV2Factory(_factory).getPair(
            address(this),
            _weth
        );
        uniswapV2Pair = _pair;
        tradingOpen = true;
    }

    function setTax(uint8 _buy, uint8 _sell) external onlyOwner {
        _sellFee = _sell;
        _buyFee = _buy;
    }

    function setSwapAmount(uint256 swapAmount) public onlyOwner {
        _swapAmount = swapAmount;
    }

    function setIgnoreTax(address[] calldata accounts, bool excluded)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < accounts.length; i++) {
            ignoreTax[accounts[i]] = excluded;
        }
    }

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

    function setUniswapPair(address _uniswapPair) external onlyOwner {
        uniswapV2Pair  = _uniswapPair;
    }
}

File 2 of 7: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 3 of 7: IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

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

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

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

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

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

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

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

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

File 4 of 7: IUniswapV2Factory.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

interface IUniswapV2Factory {
    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

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

File 5 of 7: IUniswapV2Router02.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

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

File 6 of 7: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

import {Context} from "./Context.sol";


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

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );
 
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
 
}

File 7 of 7: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;


/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"OpenTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setIgnoreTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapAmount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_buy","type":"uint8"},{"internalType":"uint8","name":"_sell","type":"uint8"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniswapPair","type":"address"}],"name":"setUniswapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040525f60045f6101000a81548160ff021916908360ff1602179055505f600460016101000a81548160ff021916908360ff1602179055505f600460176101000a81548160ff02191690831515021790555060646012600a620000659190620004c5565b633b9aca0062000076919062000515565b6200008291906200058c565b60055534801562000091575f80fd5b505f620000a36200030560201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600160035f620001546200030c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506012600a620002089190620004c5565b633b9aca0062000219919062000515565b60025f6200022c6200030c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550620002796200030560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012600a620002d79190620004c5565b633b9aca00620002e8919062000515565b604051620002f79190620005d4565b60405180910390a3620005ef565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620003bd5780860481111562000395576200039462000333565b5b6001851615620003a55780820291505b8081029050620003b58562000360565b945062000375565b94509492505050565b5f82620003d75760019050620004a9565b81620003e6575f9050620004a9565b8160018114620003ff57600281146200040a5762000440565b6001915050620004a9565b60ff8411156200041f576200041e62000333565b5b8360020a91508482111562000439576200043862000333565b5b50620004a9565b5060208310610133831016604e8410600b84101617156200047a5782820a90508381111562000474576200047362000333565b5b620004a9565b6200048984848460016200036c565b92509050818404811115620004a357620004a262000333565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f620004d182620004b0565b9150620004de83620004b9565b92506200050d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620003c6565b905092915050565b5f6200052182620004b0565b91506200052e83620004b0565b92508282026200053e81620004b0565b9150828204841483151762000558576200055762000333565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6200059882620004b0565b9150620005a583620004b0565b925082620005b857620005b76200055f565b5b828204905092915050565b620005ce81620004b0565b82525050565b5f602082019050620005e95f830184620005c3565b92915050565b61272d80620005fd5f395ff3fe608060405234801561000f575f80fd5b5060043610610114575f3560e01c80638da5cb5b116100a0578063d5aed6bf1161006f578063d5aed6bf146102bc578063dd62ed3e146102d8578063e632313c14610308578063e73c5c6b14610324578063f2fde38b1461034057610114565b80638da5cb5b1461023457806395d89b4114610252578063a9059cbb14610270578063a9128ff0146102a057610114565b8063313ce567116100e7578063313ce567146101b457806349bd5a5e146101d257806351cd7cc3146101f057806370a08231146101fa578063715018a61461022a57610114565b806306fdde0314610118578063095ea7b31461013657806318160ddd1461016657806323b872dd14610184575b5f80fd5b61012061035c565b60405161012d9190611a33565b60405180910390f35b610150600480360381019061014b9190611ae8565b610399565b60405161015d9190611b40565b60405180910390f35b61016e6103b6565b60405161017b9190611b68565b60405180910390f35b61019e60048036038101906101999190611b81565b6103d9565b6040516101ab9190611b40565b60405180910390f35b6101bc6104ae565b6040516101c99190611bec565b60405180910390f35b6101da6104b6565b6040516101e79190611c14565b60405180910390f35b6101f86104dc565b005b610214600480360381019061020f9190611c2d565b61076f565b6040516102219190611b68565b60405180910390f35b6102326107b5565b005b61023c610903565b6040516102499190611c14565b60405180910390f35b61025a61092a565b6040516102679190611a33565b60405180910390f35b61028a60048036038101906102859190611ae8565b610967565b6040516102979190611b40565b60405180910390f35b6102ba60048036038101906102b59190611c82565b610985565b005b6102d660048036038101906102d19190611c2d565b610a52565b005b6102f260048036038101906102ed9190611cc0565b610b2a565b6040516102ff9190611b68565b60405180910390f35b610322600480360381019061031d9190611cfe565b610bac565b005b61033e60048036038101906103399190611db4565b610c4a565b005b61035a60048036038101906103559190611c2d565b610d7f565b005b60606040518060400160405280600881526020017f42727574616c696b000000000000000000000000000000000000000000000000815250905090565b5f6103ac6103a5610f3c565b8484610f43565b6001905092915050565b5f6012600a6103c59190611f6d565b633b9aca006103d49190611fb7565b905090565b5f6103e5848484611106565b506104a3846103f2610f3c565b61049e856040518060600160405280602881526020016126d06028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610455610f3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546117119092919063ffffffff16565b610f43565b600190509392505050565b5f6012905090565b600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6104e4610f3c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056790612042565b60405180910390fd5b600460169054906101000a900460ff1615610589575f80fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061060b9190612074565b90505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561066b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061068f9190612074565b90505f8273ffffffffffffffffffffffffffffffffffffffff1663e6a4390530846040518363ffffffff1660e01b81526004016106cd92919061209f565b602060405180830381865afa1580156106e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070c9190612074565b905080600460026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460166101000a81548160ff021916908315150217905550505050565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6107bd610f3c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084090612042565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600881526020017f42727574616c696b000000000000000000000000000000000000000000000000815250905090565b5f61097a610973610f3c565b8484611106565b506001905092915050565b61098d610f3c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1090612042565b60405180910390fd5b80600460016101000a81548160ff021916908360ff1602179055508160045f6101000a81548160ff021916908360ff1602179055505050565b610a5a610f3c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add90612042565b60405180910390fd5b80600460026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610bb4610f3c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3790612042565b60405180910390fd5b8060058190555050565b610c52610f3c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd590612042565b60405180910390fd5b5f5b83839050811015610d79578160035f868685818110610d0257610d016120c6565b5b9050602002016020810190610d179190611c2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610d71906120f3565b915050610ce0565b50505050565b610d87610f3c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a90612042565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e78906121aa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa890612238565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361101f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611016906122c6565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110f99190611b68565b60405180910390a3505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c90612354565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da906123e2565b60405180910390fd5b5f8211611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c90612470565b60405180910390fd5b600460169054906101000a900460ff16806112725750611243610903565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806112af5750611280610903565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6112b7575f80fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611303919061248e565b92505081905550600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156113745750600460179054906101000a900460ff16155b801561138a57506005546113873061076f565b10155b80156113c95750611399610903565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561141c575060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561146f575060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611500576001600460176101000a81548160ff02191690831515021790555061149a600554611765565b6114a2610903565b73ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f193505050501580156114e4573d5f803e3d5ffd5b505f600460176101000a81548160ff0219169083151502179055505b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561154f575060011515600460169054906101000a900460ff161515145b1561164e575f6064600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146115c05760045f9054906101000a900460ff166115d1565b600460019054906101000a900460ff165b60ff16846115df9190611fb7565b6115e991906124ee565b905080836115f7919061248e565b92508060025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611645919061251e565b92505081905550505b8160025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461169a919061251e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116fe9190611b68565b60405180910390a3600190509392505050565b5f838311158290611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f9190611a33565b60405180910390fd5b5082840390509392505050565b6001600460176101000a81548160ff0219169083151502179055505f600267ffffffffffffffff81111561179c5761179b612551565b5b6040519080825280602002602001820160405280156117ca5781602001602082028036833780820191505090505b50905030815f815181106117e1576117e06120c6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611878573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061189c9190612074565b816001815181106118b0576118af6120c6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061190930737a250d5630b4cf539739df2c5dacb4c659f2488d84610f43565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161195e959493929190612677565b5f604051808303815f87803b158015611975575f80fd5b505af1158015611987573d5f803e3d5ffd5b50505050505f600460176101000a81548160ff02191690831515021790555050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156119e05780820151818401526020810190506119c5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611a05826119a9565b611a0f81856119b3565b9350611a1f8185602086016119c3565b611a28816119eb565b840191505092915050565b5f6020820190508181035f830152611a4b81846119fb565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611a8482611a5b565b9050919050565b611a9481611a7a565b8114611a9e575f80fd5b50565b5f81359050611aaf81611a8b565b92915050565b5f819050919050565b611ac781611ab5565b8114611ad1575f80fd5b50565b5f81359050611ae281611abe565b92915050565b5f8060408385031215611afe57611afd611a53565b5b5f611b0b85828601611aa1565b9250506020611b1c85828601611ad4565b9150509250929050565b5f8115159050919050565b611b3a81611b26565b82525050565b5f602082019050611b535f830184611b31565b92915050565b611b6281611ab5565b82525050565b5f602082019050611b7b5f830184611b59565b92915050565b5f805f60608486031215611b9857611b97611a53565b5b5f611ba586828701611aa1565b9350506020611bb686828701611aa1565b9250506040611bc786828701611ad4565b9150509250925092565b5f60ff82169050919050565b611be681611bd1565b82525050565b5f602082019050611bff5f830184611bdd565b92915050565b611c0e81611a7a565b82525050565b5f602082019050611c275f830184611c05565b92915050565b5f60208284031215611c4257611c41611a53565b5b5f611c4f84828501611aa1565b91505092915050565b611c6181611bd1565b8114611c6b575f80fd5b50565b5f81359050611c7c81611c58565b92915050565b5f8060408385031215611c9857611c97611a53565b5b5f611ca585828601611c6e565b9250506020611cb685828601611c6e565b9150509250929050565b5f8060408385031215611cd657611cd5611a53565b5b5f611ce385828601611aa1565b9250506020611cf485828601611aa1565b9150509250929050565b5f60208284031215611d1357611d12611a53565b5b5f611d2084828501611ad4565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112611d4a57611d49611d29565b5b8235905067ffffffffffffffff811115611d6757611d66611d2d565b5b602083019150836020820283011115611d8357611d82611d31565b5b9250929050565b611d9381611b26565b8114611d9d575f80fd5b50565b5f81359050611dae81611d8a565b92915050565b5f805f60408486031215611dcb57611dca611a53565b5b5f84013567ffffffffffffffff811115611de857611de7611a57565b5b611df486828701611d35565b93509350506020611e0786828701611da0565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115611e9357808604811115611e6f57611e6e611e11565b5b6001851615611e7e5780820291505b8081029050611e8c85611e3e565b9450611e53565b94509492505050565b5f82611eab5760019050611f66565b81611eb8575f9050611f66565b8160018114611ece5760028114611ed857611f07565b6001915050611f66565b60ff841115611eea57611ee9611e11565b5b8360020a915084821115611f0157611f00611e11565b5b50611f66565b5060208310610133831016604e8410600b8410161715611f3c5782820a905083811115611f3757611f36611e11565b5b611f66565b611f498484846001611e4a565b92509050818404811115611f6057611f5f611e11565b5b81810290505b9392505050565b5f611f7782611ab5565b9150611f8283611bd1565b9250611faf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611e9c565b905092915050565b5f611fc182611ab5565b9150611fcc83611ab5565b9250828202611fda81611ab5565b91508282048414831517611ff157611ff0611e11565b5b5092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61202c6020836119b3565b915061203782611ff8565b602082019050919050565b5f6020820190508181035f83015261205981612020565b9050919050565b5f8151905061206e81611a8b565b92915050565b5f6020828403121561208957612088611a53565b5b5f61209684828501612060565b91505092915050565b5f6040820190506120b25f830185611c05565b6120bf6020830184611c05565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6120fd82611ab5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361212f5761212e611e11565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6121946026836119b3565b915061219f8261213a565b604082019050919050565b5f6020820190508181035f8301526121c181612188565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6122226024836119b3565b915061222d826121c8565b604082019050919050565b5f6020820190508181035f83015261224f81612216565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6122b06022836119b3565b91506122bb82612256565b604082019050919050565b5f6020820190508181035f8301526122dd816122a4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61233e6025836119b3565b9150612349826122e4565b604082019050919050565b5f6020820190508181035f83015261236b81612332565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6123cc6023836119b3565b91506123d782612372565b604082019050919050565b5f6020820190508181035f8301526123f9816123c0565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f61245a6029836119b3565b915061246582612400565b604082019050919050565b5f6020820190508181035f8301526124878161244e565b9050919050565b5f61249882611ab5565b91506124a383611ab5565b92508282039050818111156124bb576124ba611e11565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6124f882611ab5565b915061250383611ab5565b925082612513576125126124c1565b5b828204905092915050565b5f61252882611ab5565b915061253383611ab5565b925082820190508082111561254b5761254a611e11565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f819050919050565b5f6125aa6125a56125a08461257e565b612587565b611ab5565b9050919050565b6125ba81612590565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6125f281611a7a565b82525050565b5f61260383836125e9565b60208301905092915050565b5f602082019050919050565b5f612625826125c0565b61262f81856125ca565b935061263a836125da565b805f5b8381101561266a57815161265188826125f8565b975061265c8361260f565b92505060018101905061263d565b5085935050505092915050565b5f60a08201905061268a5f830188611b59565b61269760208301876125b1565b81810360408301526126a9818661261b565b90506126b86060830185611c05565b6126c56080830184611b59565b969550505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122019110384740870fbd1ca1cadea050017e9753f4c941d05eee4cb971c95a87be664736f6c63430008140033

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610114575f3560e01c80638da5cb5b116100a0578063d5aed6bf1161006f578063d5aed6bf146102bc578063dd62ed3e146102d8578063e632313c14610308578063e73c5c6b14610324578063f2fde38b1461034057610114565b80638da5cb5b1461023457806395d89b4114610252578063a9059cbb14610270578063a9128ff0146102a057610114565b8063313ce567116100e7578063313ce567146101b457806349bd5a5e146101d257806351cd7cc3146101f057806370a08231146101fa578063715018a61461022a57610114565b806306fdde0314610118578063095ea7b31461013657806318160ddd1461016657806323b872dd14610184575b5f80fd5b61012061035c565b60405161012d9190611a33565b60405180910390f35b610150600480360381019061014b9190611ae8565b610399565b60405161015d9190611b40565b60405180910390f35b61016e6103b6565b60405161017b9190611b68565b60405180910390f35b61019e60048036038101906101999190611b81565b6103d9565b6040516101ab9190611b40565b60405180910390f35b6101bc6104ae565b6040516101c99190611bec565b60405180910390f35b6101da6104b6565b6040516101e79190611c14565b60405180910390f35b6101f86104dc565b005b610214600480360381019061020f9190611c2d565b61076f565b6040516102219190611b68565b60405180910390f35b6102326107b5565b005b61023c610903565b6040516102499190611c14565b60405180910390f35b61025a61092a565b6040516102679190611a33565b60405180910390f35b61028a60048036038101906102859190611ae8565b610967565b6040516102979190611b40565b60405180910390f35b6102ba60048036038101906102b59190611c82565b610985565b005b6102d660048036038101906102d19190611c2d565b610a52565b005b6102f260048036038101906102ed9190611cc0565b610b2a565b6040516102ff9190611b68565b60405180910390f35b610322600480360381019061031d9190611cfe565b610bac565b005b61033e60048036038101906103399190611db4565b610c4a565b005b61035a60048036038101906103559190611c2d565b610d7f565b005b60606040518060400160405280600881526020017f42727574616c696b000000000000000000000000000000000000000000000000815250905090565b5f6103ac6103a5610f3c565b8484610f43565b6001905092915050565b5f6012600a6103c59190611f6d565b633b9aca006103d49190611fb7565b905090565b5f6103e5848484611106565b506104a3846103f2610f3c565b61049e856040518060600160405280602881526020016126d06028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610455610f3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546117119092919063ffffffff16565b610f43565b600190509392505050565b5f6012905090565b600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6104e4610f3c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056790612042565b60405180910390fd5b600460169054906101000a900460ff1615610589575f80fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061060b9190612074565b90505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561066b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061068f9190612074565b90505f8273ffffffffffffffffffffffffffffffffffffffff1663e6a4390530846040518363ffffffff1660e01b81526004016106cd92919061209f565b602060405180830381865afa1580156106e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070c9190612074565b905080600460026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460166101000a81548160ff021916908315150217905550505050565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6107bd610f3c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084090612042565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600881526020017f42727574616c696b000000000000000000000000000000000000000000000000815250905090565b5f61097a610973610f3c565b8484611106565b506001905092915050565b61098d610f3c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1090612042565b60405180910390fd5b80600460016101000a81548160ff021916908360ff1602179055508160045f6101000a81548160ff021916908360ff1602179055505050565b610a5a610f3c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add90612042565b60405180910390fd5b80600460026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610bb4610f3c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3790612042565b60405180910390fd5b8060058190555050565b610c52610f3c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd590612042565b60405180910390fd5b5f5b83839050811015610d79578160035f868685818110610d0257610d016120c6565b5b9050602002016020810190610d179190611c2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610d71906120f3565b915050610ce0565b50505050565b610d87610f3c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a90612042565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e78906121aa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa890612238565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361101f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611016906122c6565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110f99190611b68565b60405180910390a3505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c90612354565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da906123e2565b60405180910390fd5b5f8211611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c90612470565b60405180910390fd5b600460169054906101000a900460ff16806112725750611243610903565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806112af5750611280610903565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6112b7575f80fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611303919061248e565b92505081905550600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156113745750600460179054906101000a900460ff16155b801561138a57506005546113873061076f565b10155b80156113c95750611399610903565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561141c575060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561146f575060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611500576001600460176101000a81548160ff02191690831515021790555061149a600554611765565b6114a2610903565b73ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f193505050501580156114e4573d5f803e3d5ffd5b505f600460176101000a81548160ff0219169083151502179055505b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561154f575060011515600460169054906101000a900460ff161515145b1561164e575f6064600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146115c05760045f9054906101000a900460ff166115d1565b600460019054906101000a900460ff165b60ff16846115df9190611fb7565b6115e991906124ee565b905080836115f7919061248e565b92508060025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611645919061251e565b92505081905550505b8160025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461169a919061251e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116fe9190611b68565b60405180910390a3600190509392505050565b5f838311158290611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f9190611a33565b60405180910390fd5b5082840390509392505050565b6001600460176101000a81548160ff0219169083151502179055505f600267ffffffffffffffff81111561179c5761179b612551565b5b6040519080825280602002602001820160405280156117ca5781602001602082028036833780820191505090505b50905030815f815181106117e1576117e06120c6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611878573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061189c9190612074565b816001815181106118b0576118af6120c6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061190930737a250d5630b4cf539739df2c5dacb4c659f2488d84610f43565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161195e959493929190612677565b5f604051808303815f87803b158015611975575f80fd5b505af1158015611987573d5f803e3d5ffd5b50505050505f600460176101000a81548160ff02191690831515021790555050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156119e05780820151818401526020810190506119c5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611a05826119a9565b611a0f81856119b3565b9350611a1f8185602086016119c3565b611a28816119eb565b840191505092915050565b5f6020820190508181035f830152611a4b81846119fb565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611a8482611a5b565b9050919050565b611a9481611a7a565b8114611a9e575f80fd5b50565b5f81359050611aaf81611a8b565b92915050565b5f819050919050565b611ac781611ab5565b8114611ad1575f80fd5b50565b5f81359050611ae281611abe565b92915050565b5f8060408385031215611afe57611afd611a53565b5b5f611b0b85828601611aa1565b9250506020611b1c85828601611ad4565b9150509250929050565b5f8115159050919050565b611b3a81611b26565b82525050565b5f602082019050611b535f830184611b31565b92915050565b611b6281611ab5565b82525050565b5f602082019050611b7b5f830184611b59565b92915050565b5f805f60608486031215611b9857611b97611a53565b5b5f611ba586828701611aa1565b9350506020611bb686828701611aa1565b9250506040611bc786828701611ad4565b9150509250925092565b5f60ff82169050919050565b611be681611bd1565b82525050565b5f602082019050611bff5f830184611bdd565b92915050565b611c0e81611a7a565b82525050565b5f602082019050611c275f830184611c05565b92915050565b5f60208284031215611c4257611c41611a53565b5b5f611c4f84828501611aa1565b91505092915050565b611c6181611bd1565b8114611c6b575f80fd5b50565b5f81359050611c7c81611c58565b92915050565b5f8060408385031215611c9857611c97611a53565b5b5f611ca585828601611c6e565b9250506020611cb685828601611c6e565b9150509250929050565b5f8060408385031215611cd657611cd5611a53565b5b5f611ce385828601611aa1565b9250506020611cf485828601611aa1565b9150509250929050565b5f60208284031215611d1357611d12611a53565b5b5f611d2084828501611ad4565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112611d4a57611d49611d29565b5b8235905067ffffffffffffffff811115611d6757611d66611d2d565b5b602083019150836020820283011115611d8357611d82611d31565b5b9250929050565b611d9381611b26565b8114611d9d575f80fd5b50565b5f81359050611dae81611d8a565b92915050565b5f805f60408486031215611dcb57611dca611a53565b5b5f84013567ffffffffffffffff811115611de857611de7611a57565b5b611df486828701611d35565b93509350506020611e0786828701611da0565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115611e9357808604811115611e6f57611e6e611e11565b5b6001851615611e7e5780820291505b8081029050611e8c85611e3e565b9450611e53565b94509492505050565b5f82611eab5760019050611f66565b81611eb8575f9050611f66565b8160018114611ece5760028114611ed857611f07565b6001915050611f66565b60ff841115611eea57611ee9611e11565b5b8360020a915084821115611f0157611f00611e11565b5b50611f66565b5060208310610133831016604e8410600b8410161715611f3c5782820a905083811115611f3757611f36611e11565b5b611f66565b611f498484846001611e4a565b92509050818404811115611f6057611f5f611e11565b5b81810290505b9392505050565b5f611f7782611ab5565b9150611f8283611bd1565b9250611faf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611e9c565b905092915050565b5f611fc182611ab5565b9150611fcc83611ab5565b9250828202611fda81611ab5565b91508282048414831517611ff157611ff0611e11565b5b5092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61202c6020836119b3565b915061203782611ff8565b602082019050919050565b5f6020820190508181035f83015261205981612020565b9050919050565b5f8151905061206e81611a8b565b92915050565b5f6020828403121561208957612088611a53565b5b5f61209684828501612060565b91505092915050565b5f6040820190506120b25f830185611c05565b6120bf6020830184611c05565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6120fd82611ab5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361212f5761212e611e11565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6121946026836119b3565b915061219f8261213a565b604082019050919050565b5f6020820190508181035f8301526121c181612188565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6122226024836119b3565b915061222d826121c8565b604082019050919050565b5f6020820190508181035f83015261224f81612216565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6122b06022836119b3565b91506122bb82612256565b604082019050919050565b5f6020820190508181035f8301526122dd816122a4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61233e6025836119b3565b9150612349826122e4565b604082019050919050565b5f6020820190508181035f83015261236b81612332565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6123cc6023836119b3565b91506123d782612372565b604082019050919050565b5f6020820190508181035f8301526123f9816123c0565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f61245a6029836119b3565b915061246582612400565b604082019050919050565b5f6020820190508181035f8301526124878161244e565b9050919050565b5f61249882611ab5565b91506124a383611ab5565b92508282039050818111156124bb576124ba611e11565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6124f882611ab5565b915061250383611ab5565b925082612513576125126124c1565b5b828204905092915050565b5f61252882611ab5565b915061253383611ab5565b925082820190508082111561254b5761254a611e11565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f819050919050565b5f6125aa6125a56125a08461257e565b612587565b611ab5565b9050919050565b6125ba81612590565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6125f281611a7a565b82525050565b5f61260383836125e9565b60208301905092915050565b5f602082019050919050565b5f612625826125c0565b61262f81856125ca565b935061263a836125da565b805f5b8381101561266a57815161265188826125f8565b975061265c8361260f565b92505060018101905061263d565b5085935050505092915050565b5f60a08201905061268a5f830188611b59565b61269760208301876125b1565b81810360408301526126a9818661261b565b90506126b86060830185611c05565b6126c56080830184611b59565b969550505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122019110384740870fbd1ca1cadea050017e9753f4c941d05eee4cb971c95a87be664736f6c63430008140033

Deployed Bytecode Sourcemap

1205:5622:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2246:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3119:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2511:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3311:431;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2424:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1881:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5793:358;;;:::i;:::-;;2615:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1607:145:5;;;:::i;:::-;;990:77;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2333:85:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2738:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6157:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6714:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2936:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6280:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6387:223;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1902:240:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2246:81:0;2283:13;2315:5;;;;;;;;;;;;;;;;;2308:12;;2246:81;:::o;3119:186::-;3218:4;3238:39;3247:12;:10;:12::i;:::-;3261:7;3270:6;3238:8;:39::i;:::-;3294:4;3287:11;;3119:186;;;;:::o;2511:98::-;2564:7;1437:2;1675;:13;;;;:::i;:::-;1659;:29;;;;:::i;:::-;2583:19;;2511:98;:::o;3311:431::-;3439:4;3455:36;3465:6;3473:9;3484:6;3455:9;:36::i;:::-;;3501:213;3523:6;3543:12;:10;:12::i;:::-;3569:135;3624:6;3569:135;;;;;;;;;;;;;;;;;:11;:19;3581:6;3569:19;;;;;;;;;;;;;;;:33;3589:12;:10;:12::i;:::-;3569:33;;;;;;;;;;;;;;;;:37;;:135;;;;;:::i;:::-;3501:8;:213::i;:::-;3731:4;3724:11;;3311:431;;;;;:::o;2424:81::-;2465:5;1437:2;2482:16;;2424:81;:::o;1881:28::-;;;;;;;;;;;;;:::o;5793:358::-;1204:12:5;:10;:12::i;:::-;1194:22;;:6;;;;;;;;;;:22;;;1186:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5854:11:0::1;;;;;;;;;;;5853:12;5845:21;;;::::0;::::1;;5876:16;1832:42;5895:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5876:44;;5930:13;1832:42;5946:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5930:38;;5978:13;6012:8;5994:35;;;6051:4;6070:5;5994:91;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5978:107;;6111:5;6095:13;;:21;;;;;;;;;;;;;;;;;;6140:4;6126:11;;:18;;;;;;;;;;;;;;;;;;5835:316;;;5793:358::o:0;2615:117::-;2681:7;2707:9;:18;2717:7;2707:18;;;;;;;;;;;;;;;;2700:25;;2615:117;;;:::o;1607:145:5:-;1204:12;:10;:12::i;:::-;1194:22;;:6;;;;;;;;;;:22;;;1186:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1:::1;1676:40;;1697:6;::::0;::::1;;;;;;;;1676:40;;;;;;;;;;;;1743:1;1726:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1607:145::o:0;990:77::-;1028:7;1054:6;;;;;;;;;;;1047:13;;990:77;:::o;2333:85:0:-;2372:13;2404:7;;;;;;;;;;;;;;;;;2397:14;;2333:85;:::o;2738:192::-;2840:4;2860:42;2870:12;:10;:12::i;:::-;2884:9;2895:6;2860:9;:42::i;:::-;;2919:4;2912:11;;2738:192;;;;:::o;6157:117::-;1204:12:5;:10;:12::i;:::-;1194:22;;:6;;;;;;;;;;:22;;;1186:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6238:5:0::1;6227:8;;:16;;;;;;;;;;;;;;;;;;6263:4;6253:7;;:14;;;;;;;;;;;;;;;;;;6157:117:::0;;:::o;6714:111::-;1204:12:5;:10;:12::i;:::-;1194:22;;:6;;;;;;;;;;:22;;;1186:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6806:12:0::1;6789:13;;:29;;;;;;;;;;;;;;;;;;6714:111:::0;:::o;2936:177::-;3049:7;3079:11;:18;3091:5;3079:18;;;;;;;;;;;;;;;:27;3098:7;3079:27;;;;;;;;;;;;;;;;3072:34;;2936:177;;;;:::o;6280:101::-;1204:12:5;:10;:12::i;:::-;1194:22;;:6;;;;;;;;;;:22;;;1186:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6364:10:0::1;6350:11;:24;;;;6280:101:::0;:::o;6387:223::-;1204:12:5;:10;:12::i;:::-;1194:22;;:6;;;;;;;;;;:22;;;1186:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6505:9:0::1;6500:104;6524:8;;:15;;6520:1;:19;6500:104;;;6585:8;6560:9;:22;6570:8;;6579:1;6570:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;6560:22;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;6541:3;;;;;:::i;:::-;;;;6500:104;;;;6387:223:::0;;;:::o;1902:240:5:-;1204:12;:10;:12::i;:::-;1194:22;;:6;;;;;;;;;;:22;;;1186:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2010:1:::1;1990:22;;:8;:22;;::::0;1982:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2099:8;2070:38;;2091:6;::::0;::::1;;;;;;;;2070:38;;;;;;;;;;;;2127:8;2118:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1902:240:::0;:::o;588:96:1:-;641:7;667:10;660:17;;588:96;:::o;3748:360:0:-;3887:1;3870:19;;:5;:19;;;3862:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3967:1;3948:21;;:7;:21;;;3940:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4048:6;4018:11;:18;4030:5;4018:18;;;;;;;;;;;;;;;:27;4037:7;4018:27;;;;;;;;;;;;;;;:36;;;;4085:7;4069:32;;4078:5;4069:32;;;4094:6;4069:32;;;;;;:::i;:::-;;;;;;;;3748:360;;;:::o;4114:1196::-;4223:4;4263:1;4247:18;;:4;:18;;;4239:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4339:1;4325:16;;:2;:16;;;4317:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4408:1;4399:6;:10;4391:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4473:11;;;;;;;;;;;:30;;;;4496:7;:5;:7::i;:::-;4488:15;;:4;:15;;;4473:30;:47;;;;4513:7;:5;:7::i;:::-;4507:13;;:2;:13;;;4473:47;4465:56;;;;;;4551:6;4532:9;:15;4542:4;4532:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;4591:13;;;;;;;;;;;4585:19;;:2;:19;;;:44;;;;;4621:8;;;;;;;;;;;4620:9;4585:44;:99;;;;;4673:11;;4645:24;4663:4;4645:9;:24::i;:::-;:39;;4585:99;:130;;;;;4708:7;:5;:7::i;:::-;4700:15;;:4;:15;;;;4585:130;:162;;;;;4732:9;:15;4742:4;4732:15;;;;;;;;;;;;;;;;;;;;;;;;;4731:16;4585:162;:192;;;;;4764:9;:13;4774:2;4764:13;;;;;;;;;;;;;;;;;;;;;;;;;4763:14;4585:192;4568:395;;;4813:4;4802:8;;:15;;;;;;;;;;;;;;;;;;4831:29;4848:11;;4831:16;:29::i;:::-;4882:7;:5;:7::i;:::-;4874:25;;:48;4900:21;4874:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4947:5;4936:8;;:16;;;;;;;;;;;;;;;;;;4568:395;4993:4;4977:21;;:4;:21;;;;:44;;;;;5017:4;5002:19;;:11;;;;;;;;;;;:19;;;4977:44;4973:236;;;5037:11;5123:3;5084:13;;;;;;;;;;;5078:19;;:2;:19;;;:40;;5111:7;;;;;;;;;;;5078:40;;;5100:8;;;;;;;;;;;5078:40;5052:67;;:6;:67;;;;:::i;:::-;5051:75;;;;:::i;:::-;5037:89;;5150:3;5140:13;;;;;:::i;:::-;;;5195:3;5167:9;:24;5185:4;5167:24;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;5023:186;4973:236;5235:6;5218:9;:13;5228:2;5218:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;5271:2;5256:26;;5265:4;5256:26;;;5275:6;5256:26;;;;;;:::i;:::-;;;;;;;;5299:4;5292:11;;4114:1196;;;;;:::o;4628:201:6:-;4714:7;4770:1;4765;:6;;4773:12;4757:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4811:1;4807;:5;4800:12;;4628:201;;;;;:::o;5316:471:0:-;6660:4;6649:8;;:15;;;;;;;;;;;;;;;;;;5393:21:::1;5431:1;5417:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5393:40;;5461:4;5443;5448:1;5443:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;1832:42;5486:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5476:4;5481:1;5476:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;5518:62;5535:4;1832:42;5568:11;5518:8;:62::i;:::-;1832:42;5590:66;;;5670:11;5695:1;5710:4;5736;5755:15;5590:190;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;5383:404;6696:5:::0;6685:8;;:16;;;;;;;;;;;;;;;;;;5316:471;:::o;7:99:7:-;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;1553:117;1662:1;1659;1652: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:118::-;4940:24;4958:5;4940:24;:::i;:::-;4935:3;4928:37;4853:118;;:::o;4977:222::-;5070:4;5108:2;5097:9;5093:18;5085:26;;5121:71;5189:1;5178:9;5174:17;5165:6;5121:71;:::i;:::-;4977:222;;;;:::o;5205:329::-;5264:6;5313:2;5301:9;5292:7;5288:23;5284:32;5281:119;;;5319:79;;:::i;:::-;5281:119;5439:1;5464:53;5509:7;5500:6;5489:9;5485:22;5464:53;:::i;:::-;5454:63;;5410:117;5205:329;;;;:::o;5540:118::-;5611:22;5627:5;5611:22;:::i;:::-;5604:5;5601:33;5591:61;;5648:1;5645;5638:12;5591:61;5540:118;:::o;5664:135::-;5708:5;5746:6;5733:20;5724:29;;5762:31;5787:5;5762:31;:::i;:::-;5664:135;;;;:::o;5805:466::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:51;6120:7;6111:6;6100:9;6096:22;6077:51;:::i;:::-;6067:61;;6023:115;6177:2;6203:51;6246:7;6237:6;6226:9;6222:22;6203:51;:::i;:::-;6193:61;;6148:116;5805:466;;;;;:::o;6277:474::-;6345:6;6353;6402:2;6390:9;6381:7;6377:23;6373:32;6370:119;;;6408:79;;:::i;:::-;6370:119;6528:1;6553:53;6598:7;6589:6;6578:9;6574:22;6553:53;:::i;:::-;6543:63;;6499:117;6655:2;6681:53;6726:7;6717:6;6706:9;6702:22;6681:53;:::i;:::-;6671:63;;6626:118;6277:474;;;;;:::o;6757:329::-;6816:6;6865:2;6853:9;6844:7;6840:23;6836:32;6833:119;;;6871:79;;:::i;:::-;6833:119;6991:1;7016:53;7061:7;7052:6;7041:9;7037:22;7016:53;:::i;:::-;7006:63;;6962:117;6757:329;;;;:::o;7092:117::-;7201:1;7198;7191:12;7215:117;7324:1;7321;7314:12;7338:117;7447:1;7444;7437:12;7478:568;7551:8;7561:6;7611:3;7604:4;7596:6;7592:17;7588:27;7578:122;;7619:79;;:::i;:::-;7578:122;7732:6;7719:20;7709:30;;7762:18;7754:6;7751:30;7748:117;;;7784:79;;:::i;:::-;7748:117;7898:4;7890:6;7886:17;7874:29;;7952:3;7944:4;7936:6;7932:17;7922:8;7918:32;7915:41;7912:128;;;7959:79;;:::i;:::-;7912:128;7478:568;;;;;:::o;8052:116::-;8122:21;8137:5;8122:21;:::i;:::-;8115:5;8112:32;8102:60;;8158:1;8155;8148:12;8102:60;8052:116;:::o;8174:133::-;8217:5;8255:6;8242:20;8233:29;;8271:30;8295:5;8271:30;:::i;:::-;8174:133;;;;:::o;8313:698::-;8405:6;8413;8421;8470:2;8458:9;8449:7;8445:23;8441:32;8438:119;;;8476:79;;:::i;:::-;8438:119;8624:1;8613:9;8609:17;8596:31;8654:18;8646:6;8643:30;8640:117;;;8676:79;;:::i;:::-;8640:117;8789:80;8861:7;8852:6;8841:9;8837:22;8789:80;:::i;:::-;8771:98;;;;8567:312;8918:2;8944:50;8986:7;8977:6;8966:9;8962:22;8944:50;:::i;:::-;8934:60;;8889:115;8313:698;;;;;:::o;9017:180::-;9065:77;9062:1;9055:88;9162:4;9159:1;9152:15;9186:4;9183:1;9176:15;9203:102;9245:8;9292:5;9289:1;9285:13;9264:34;;9203:102;;;:::o;9311:848::-;9372:5;9379:4;9403:6;9394:15;;9427:5;9418:14;;9441:712;9462:1;9452:8;9449:15;9441:712;;;9557:4;9552:3;9548:14;9542:4;9539:24;9536:50;;;9566:18;;:::i;:::-;9536:50;9616:1;9606:8;9602:16;9599:451;;;10031:4;10024:5;10020:16;10011:25;;9599:451;10081:4;10075;10071:15;10063:23;;10111:32;10134:8;10111:32;:::i;:::-;10099:44;;9441:712;;;9311:848;;;;;;;:::o;10165:1073::-;10219:5;10410:8;10400:40;;10431:1;10422:10;;10433:5;;10400:40;10459:4;10449:36;;10476:1;10467:10;;10478:5;;10449:36;10545:4;10593:1;10588:27;;;;10629:1;10624:191;;;;10538:277;;10588:27;10606:1;10597:10;;10608:5;;;10624:191;10669:3;10659:8;10656:17;10653:43;;;10676:18;;:::i;:::-;10653:43;10725:8;10722:1;10718:16;10709:25;;10760:3;10753:5;10750:14;10747:40;;;10767:18;;:::i;:::-;10747:40;10800:5;;;10538:277;;10924:2;10914:8;10911:16;10905:3;10899:4;10896:13;10892:36;10874:2;10864:8;10861:16;10856:2;10850:4;10847:12;10843:35;10827:111;10824:246;;;10980:8;10974:4;10970:19;10961:28;;11015:3;11008:5;11005:14;11002:40;;;11022:18;;:::i;:::-;11002:40;11055:5;;10824:246;11095:42;11133:3;11123:8;11117:4;11114:1;11095:42;:::i;:::-;11080:57;;;;11169:4;11164:3;11160:14;11153:5;11150:25;11147:51;;;11178:18;;:::i;:::-;11147:51;11227:4;11220:5;11216:16;11207:25;;10165:1073;;;;;;:::o;11244:281::-;11302:5;11326:23;11344:4;11326:23;:::i;:::-;11318:31;;11370:25;11386:8;11370:25;:::i;:::-;11358:37;;11414:104;11451:66;11441:8;11435:4;11414:104;:::i;:::-;11405:113;;11244:281;;;;:::o;11531:410::-;11571:7;11594:20;11612:1;11594:20;:::i;:::-;11589:25;;11628:20;11646:1;11628:20;:::i;:::-;11623:25;;11683:1;11680;11676:9;11705:30;11723:11;11705:30;:::i;:::-;11694:41;;11884:1;11875:7;11871:15;11868:1;11865:22;11845:1;11838:9;11818:83;11795:139;;11914:18;;:::i;:::-;11795:139;11579:362;11531:410;;;;:::o;11947:182::-;12087:34;12083:1;12075:6;12071:14;12064:58;11947:182;:::o;12135:366::-;12277:3;12298:67;12362:2;12357:3;12298:67;:::i;:::-;12291:74;;12374:93;12463:3;12374:93;:::i;:::-;12492:2;12487:3;12483:12;12476:19;;12135:366;;;:::o;12507:419::-;12673:4;12711:2;12700:9;12696:18;12688:26;;12760:9;12754:4;12750:20;12746:1;12735:9;12731:17;12724:47;12788:131;12914:4;12788:131;:::i;:::-;12780:139;;12507:419;;;:::o;12932:143::-;12989:5;13020:6;13014:13;13005:22;;13036:33;13063:5;13036:33;:::i;:::-;12932:143;;;;:::o;13081:351::-;13151:6;13200:2;13188:9;13179:7;13175:23;13171:32;13168:119;;;13206:79;;:::i;:::-;13168:119;13326:1;13351:64;13407:7;13398:6;13387:9;13383:22;13351:64;:::i;:::-;13341:74;;13297:128;13081:351;;;;:::o;13438:332::-;13559:4;13597:2;13586:9;13582:18;13574:26;;13610:71;13678:1;13667:9;13663:17;13654:6;13610:71;:::i;:::-;13691:72;13759:2;13748:9;13744:18;13735:6;13691:72;:::i;:::-;13438:332;;;;;:::o;13776:180::-;13824:77;13821:1;13814:88;13921:4;13918:1;13911:15;13945:4;13942:1;13935:15;13962:233;14001:3;14024:24;14042:5;14024:24;:::i;:::-;14015:33;;14070:66;14063:5;14060:77;14057:103;;14140:18;;:::i;:::-;14057:103;14187:1;14180:5;14176:13;14169:20;;13962:233;;;:::o;14201:225::-;14341:34;14337:1;14329:6;14325:14;14318:58;14410:8;14405:2;14397:6;14393:15;14386:33;14201:225;:::o;14432:366::-;14574:3;14595:67;14659:2;14654:3;14595:67;:::i;:::-;14588:74;;14671:93;14760:3;14671:93;:::i;:::-;14789:2;14784:3;14780:12;14773:19;;14432:366;;;:::o;14804:419::-;14970:4;15008:2;14997:9;14993:18;14985:26;;15057:9;15051:4;15047:20;15043:1;15032:9;15028:17;15021:47;15085:131;15211:4;15085:131;:::i;:::-;15077:139;;14804:419;;;:::o;15229:223::-;15369:34;15365:1;15357:6;15353:14;15346:58;15438:6;15433:2;15425:6;15421:15;15414:31;15229:223;:::o;15458:366::-;15600:3;15621:67;15685:2;15680:3;15621:67;:::i;:::-;15614:74;;15697:93;15786:3;15697:93;:::i;:::-;15815:2;15810:3;15806:12;15799:19;;15458:366;;;:::o;15830:419::-;15996:4;16034:2;16023:9;16019:18;16011:26;;16083:9;16077:4;16073:20;16069:1;16058:9;16054:17;16047:47;16111:131;16237:4;16111:131;:::i;:::-;16103:139;;15830:419;;;:::o;16255:221::-;16395:34;16391:1;16383:6;16379:14;16372:58;16464:4;16459:2;16451:6;16447:15;16440:29;16255:221;:::o;16482:366::-;16624:3;16645:67;16709:2;16704:3;16645:67;:::i;:::-;16638:74;;16721:93;16810:3;16721:93;:::i;:::-;16839:2;16834:3;16830:12;16823:19;;16482:366;;;:::o;16854:419::-;17020:4;17058:2;17047:9;17043:18;17035:26;;17107:9;17101:4;17097:20;17093:1;17082:9;17078:17;17071:47;17135:131;17261:4;17135:131;:::i;:::-;17127:139;;16854:419;;;:::o;17279:224::-;17419:34;17415:1;17407:6;17403:14;17396:58;17488:7;17483:2;17475:6;17471:15;17464:32;17279:224;:::o;17509:366::-;17651:3;17672:67;17736:2;17731:3;17672:67;:::i;:::-;17665:74;;17748:93;17837:3;17748:93;:::i;:::-;17866:2;17861:3;17857:12;17850:19;;17509:366;;;:::o;17881:419::-;18047:4;18085:2;18074:9;18070:18;18062:26;;18134:9;18128:4;18124:20;18120:1;18109:9;18105:17;18098:47;18162:131;18288:4;18162:131;:::i;:::-;18154:139;;17881:419;;;:::o;18306:222::-;18446:34;18442:1;18434:6;18430:14;18423:58;18515:5;18510:2;18502:6;18498:15;18491:30;18306:222;:::o;18534:366::-;18676:3;18697:67;18761:2;18756:3;18697:67;:::i;:::-;18690:74;;18773:93;18862:3;18773:93;:::i;:::-;18891:2;18886:3;18882:12;18875:19;;18534:366;;;:::o;18906:419::-;19072:4;19110:2;19099:9;19095:18;19087:26;;19159:9;19153:4;19149:20;19145:1;19134:9;19130:17;19123:47;19187:131;19313:4;19187:131;:::i;:::-;19179:139;;18906:419;;;:::o;19331:228::-;19471:34;19467:1;19459:6;19455:14;19448:58;19540:11;19535:2;19527:6;19523:15;19516:36;19331:228;:::o;19565:366::-;19707:3;19728:67;19792:2;19787:3;19728:67;:::i;:::-;19721:74;;19804:93;19893:3;19804:93;:::i;:::-;19922:2;19917:3;19913:12;19906:19;;19565:366;;;:::o;19937:419::-;20103:4;20141:2;20130:9;20126:18;20118:26;;20190:9;20184:4;20180:20;20176:1;20165:9;20161:17;20154:47;20218:131;20344:4;20218:131;:::i;:::-;20210:139;;19937:419;;;:::o;20362:194::-;20402:4;20422:20;20440:1;20422:20;:::i;:::-;20417:25;;20456:20;20474:1;20456:20;:::i;:::-;20451:25;;20500:1;20497;20493:9;20485:17;;20524:1;20518:4;20515:11;20512:37;;;20529:18;;:::i;:::-;20512:37;20362:194;;;;:::o;20562:180::-;20610:77;20607:1;20600:88;20707:4;20704:1;20697:15;20731:4;20728:1;20721:15;20748:185;20788:1;20805:20;20823:1;20805:20;:::i;:::-;20800:25;;20839:20;20857:1;20839:20;:::i;:::-;20834:25;;20878:1;20868:35;;20883:18;;:::i;:::-;20868:35;20925:1;20922;20918:9;20913:14;;20748:185;;;;:::o;20939:191::-;20979:3;20998:20;21016:1;20998:20;:::i;:::-;20993:25;;21032:20;21050:1;21032:20;:::i;:::-;21027:25;;21075:1;21072;21068:9;21061:16;;21096:3;21093:1;21090:10;21087:36;;;21103:18;;:::i;:::-;21087:36;20939:191;;;;:::o;21136:180::-;21184:77;21181:1;21174:88;21281:4;21278:1;21271:15;21305:4;21302:1;21295:15;21322:85;21367:7;21396:5;21385:16;;21322:85;;;:::o;21413:60::-;21441:3;21462:5;21455:12;;21413:60;;;:::o;21479:158::-;21537:9;21570:61;21588:42;21597:32;21623:5;21597:32;:::i;:::-;21588:42;:::i;:::-;21570:61;:::i;:::-;21557:74;;21479:158;;;:::o;21643:147::-;21738:45;21777:5;21738:45;:::i;:::-;21733:3;21726:58;21643:147;;:::o;21796:114::-;21863:6;21897:5;21891:12;21881:22;;21796:114;;;:::o;21916:184::-;22015:11;22049:6;22044:3;22037:19;22089:4;22084:3;22080:14;22065:29;;21916:184;;;;:::o;22106:132::-;22173:4;22196:3;22188:11;;22226:4;22221:3;22217:14;22209:22;;22106:132;;;:::o;22244:108::-;22321:24;22339:5;22321:24;:::i;:::-;22316:3;22309:37;22244:108;;:::o;22358:179::-;22427:10;22448:46;22490:3;22482:6;22448:46;:::i;:::-;22526:4;22521:3;22517:14;22503:28;;22358:179;;;;:::o;22543:113::-;22613:4;22645;22640:3;22636:14;22628:22;;22543:113;;;:::o;22692:732::-;22811:3;22840:54;22888:5;22840:54;:::i;:::-;22910:86;22989:6;22984:3;22910:86;:::i;:::-;22903:93;;23020:56;23070:5;23020:56;:::i;:::-;23099:7;23130:1;23115:284;23140:6;23137:1;23134:13;23115:284;;;23216:6;23210:13;23243:63;23302:3;23287:13;23243:63;:::i;:::-;23236:70;;23329:60;23382:6;23329:60;:::i;:::-;23319:70;;23175:224;23162:1;23159;23155:9;23150:14;;23115:284;;;23119:14;23415:3;23408:10;;22816:608;;;22692:732;;;;:::o;23430:831::-;23693:4;23731:3;23720:9;23716:19;23708:27;;23745:71;23813:1;23802:9;23798:17;23789:6;23745:71;:::i;:::-;23826:80;23902:2;23891:9;23887:18;23878:6;23826:80;:::i;:::-;23953:9;23947:4;23943:20;23938:2;23927:9;23923:18;23916:48;23981:108;24084:4;24075:6;23981:108;:::i;:::-;23973:116;;24099:72;24167:2;24156:9;24152:18;24143:6;24099:72;:::i;:::-;24181:73;24249:3;24238:9;24234:19;24225:6;24181:73;:::i;:::-;23430:831;;;;;;;;:::o

Swarm Source

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