ETH Price: $3,666.00 (-1.75%)

Token

ERC-20: OnChain Pepe 404 (OCP404)
 

Overview

Max Total Supply

88 OCP404

Holders

320

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 OCP404

Value
$0.00
0xc7c4ef31de2aa97cc06d0ca0243f0fa0a04af2cf
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:
OnChainPepe

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 4 of 6: OCP404.sol
// SPDX-License-Identifier: MIT

/**
 * The first collection of 88 Pixel Pepes generated entirely on-chain and minted as ERC404 tokens
 * The rarest of rare Pepes
 * Telegram: https://t.me/onchainpepe404
 */
pragma solidity ^0.8.10;
import "./ERC404.sol";
import "./Base64.sol";

contract OnChainPepe is ERC404 {
    constructor(address _owner, uint256 _totalSupply)
        ERC404("OnChain Pepe 404", "OCP404", 18, _totalSupply, _owner)
    {
        balanceOf[_owner] = _totalSupply * 10**18;
        setWhitelist(_owner, true);
    }

    string[] private skinColors = [
        "#e6904e",
        "#fbb954",
        "#68934A",
        "#00ff33",
        "#a2a947",
        "#d5e04b",
        "#fbff86",
        "#165a4c",
        "#239063",
        "#1ebc73",
        "#91db69",
        "#cddf6c",
        "#007722",
        "#22eeff",
        "#547e64",
        "#92a984",
        "#b2ba90",
        "#0b5e65",
        "#0b8a8f",
        "#0eaf9b",
        "#30e1b9",
        "#8ff8e2"
    ];

    string[] private lipColors = [
        "#b33831",
        "#ea4f36",
        "#f57d4a",
        "#ae2334",
        "#e83b3b",
        "#a24b6f",
        "#cf657f",
        "#ed8099",
        "#831c5d",
        "#c32454",
        "#f04f78",
        "#f68181"
    ];
    string[] private shirtColors = [
        "#2147F5",
        "#ffdf31",
        "#3c4965",
        "#0a0829",
        "#646fd1",
        "#5F574F",
        "#83769C"
    ];

    function random(string memory input) internal pure returns (uint256) {
        return uint256(keccak256(abi.encodePacked(input)));
    }

    function getSkinColor(uint256 tokenId) public view returns (string memory) {
        uint256 rand = random(
            string(abi.encodePacked("SKINCOLOR", toString(tokenId)))
        );
        return skinColors[rand % skinColors.length];
    }

    function getLipColor(uint256 tokenId) public view returns (string memory) {
        uint256 rand = random(
            string(abi.encodePacked("LIPCOLOR", toString(tokenId)))
        );
        return lipColors[rand % lipColors.length];
    }

    function getShirtColor(uint256 tokenId)
        public
        view
        returns (string memory)
    {
        uint256 rand = random(
            string(abi.encodePacked("SHIRTCOLOR", toString(tokenId)))
        );
        return shirtColors[rand % shirtColors.length];
    }

    function pluck(
        uint256 tokenId,
        string memory keyPrefix,
        string[] memory sourceArray
    ) internal pure returns (string memory) {
        uint256 rand = random(
            string(abi.encodePacked(keyPrefix, toString(tokenId)))
        );
        return sourceArray[rand % sourceArray.length];
    }

    function tokenURI(uint256 tokenId)
        public
        view
        override
        returns (string memory)
    {
        string memory skinColor = getSkinColor(tokenId);
        string memory shirtColor = getShirtColor(tokenId);
        string memory lipColor = getLipColor(tokenId);

        string memory svg = string(
            abi.encodePacked(
                '<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 400 400" fill="none">',
                '<rect width="80" height="40" x="150" y="77" fill="',
                skinColor,
                '"/>',
                '<rect width="80" height="40" x="270" y="77" fill="',
                skinColor,
                '"/>',
                '<rect width="280" height="41" x="110" y="116" fill="',
                skinColor,
                '"/>',
                '<rect width="80" height="41" x="70" y="156" fill="',
                skinColor,
                '"/>',
                '<rect width="40" height="41" x="150" y="156" fill="#ffffff"/>',
                '<rect width="40" height="41" x="190" y="156" fill="#000000"/>',
                '<rect width="80" height="41" x="230" y="156" fill="#ffffff"/>',
                '<rect width="40" height="41" x="310" y="156" fill="#000000"/>',
                '<rect width="40" height="41" x="350" y="156" fill="',
                skinColor,
                '"/>',
                '<rect width="280" height="41" x="70" y="196" fill="',
                skinColor,
                '"/>',
                '<rect width="160" height="41" x="29" y="236" fill="',
                skinColor,
                '"/>',
                '<rect width="161" height="41" x="189" y="236" fill="',
                lipColor,
                '"/>',
                '<rect width="280" height="41" x="29" y="276" fill="',
                skinColor,
                '"/>',
                '<rect width="280" height="41" x="29" y="316" fill="',
                shirtColor,
                '"/>',
                "</svg>"
            )
        );

        string memory json = Base64.encode(
            bytes(
                string(
                    abi.encodePacked(
                        '{"name": "On Chain Pepe #',
                        toString(tokenId),
                        '", "description": "88 randomly generated Pixel Pepes stored entirely on chain.", "image": "data:image/svg+xml;base64,',
                        Base64.encode(bytes(svg)),
                        '"}'
                    )
                )
            )
        );

        return string(abi.encodePacked("data:application/json;base64,", json));
    }

    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
}

File 1 of 6: Base64.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Base64.sol)

pragma solidity ^0.8.20;

/**
 * @dev Provides a set of functions to operate with Base64 strings.
 */
library Base64 {
    /**
     * @dev Base64 Encoding/Decoding Table
     */
    string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /**
     * @dev Converts a `bytes` to its Bytes64 `string` representation.
     */
    function encode(bytes memory data) internal pure returns (string memory) {
        /**
         * Inspired by Brecht Devos (Brechtpd) implementation - MIT licence
         * https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol
         */
        if (data.length == 0) return "";

        // Loads the table into memory
        string memory table = _TABLE;

        // Encoding takes 3 bytes chunks of binary data from `bytes` data parameter
        // and split into 4 numbers of 6 bits.
        // The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up
        // - `data.length + 2`  -> Round up
        // - `/ 3`              -> Number of 3-bytes chunks
        // - `4 *`              -> 4 characters for each chunk
        string memory result = new string(4 * ((data.length + 2) / 3));

        /// @solidity memory-safe-assembly
        assembly {
            // Prepare the lookup table (skip the first "length" byte)
            let tablePtr := add(table, 1)

            // Prepare result pointer, jump over length
            let resultPtr := add(result, 32)

            // Run over the input, 3 bytes at a time
            for {
                let dataPtr := data
                let endPtr := add(data, mload(data))
            } lt(dataPtr, endPtr) {

            } {
                // Advance 3 bytes
                dataPtr := add(dataPtr, 3)
                let input := mload(dataPtr)

                // To write each character, shift the 3 bytes (18 bits) chunk
                // 4 times in blocks of 6 bits for each character (18, 12, 6, 0)
                // and apply logical AND with 0x3F which is the number of
                // the previous character in the ASCII table prior to the Base64 Table
                // The result is then added to the table to get the character to write,
                // and finally write it in the result pointer but with a left shift
                // of 256 (1 byte) - 8 (1 ASCII char) = 248 bits

                mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance
            }

            // When data `bytes` is not exactly 3 bytes long
            // it is padded with `=` characters at the end
            switch mod(mload(data), 3)
            case 1 {
                mstore8(sub(resultPtr, 1), 0x3d)
                mstore8(sub(resultPtr, 2), 0x3d)
            }
            case 2 {
                mstore8(sub(resultPtr, 1), 0x3d)
            }
        }

        return result;
    }
}

File 2 of 6: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

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

import "./Ownable2Step.sol";
import "./Ownable.sol";
pragma solidity ^0.8.0;

abstract contract ERC721Receiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721Receiver.onERC721Received.selector;
    }
}

abstract contract ERC404 is Ownable2Step {


    event ERC20Transfer(bytes32 indexed topic0, address indexed from, address indexed to, uint256 tokens) anonymous;
    event Approval(address indexed owner, address indexed spender, uint256 amount);
    event Transfer( address indexed from, address indexed to, uint256 indexed id);
    event ERC721Approval(address indexed owner, address indexed spender, uint256 indexed id );
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved );
    bytes32 constant private TRANSFER_TOPIC = keccak256(bytes("Transfer(address,address,uint256)"));

    error NotFound();
    error AlreadyExists();
    error InvalidRecipient();
    error InvalidSender();
    error UnsafeRecipient();
    error Unauthorized();
    error InvalidOwner();

    // Metadata
    /// @dev Token name
    string public name;

    /// @dev Token symbol
    string public symbol;

    /// @dev Decimals for fractional representation
    uint8 public immutable decimals;

    /// @dev Total supply in fractionalized representation
    uint256 public immutable totalSupply;

    /// @dev Current mint counter, monotonically increasing to ensure accurate ownership
    uint256 public minted;

    // Mappings
    /// @dev Balance of user in fractional representation
    mapping(address => uint256) public balanceOf;

    /// @dev Allowance of user in fractional representation
    mapping(address => mapping(address => uint256)) public allowance;

    /// @dev Approval in native representaion
    mapping(uint256 => address) public getApproved;

    /// @dev Approval for all in native representation
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /// @dev Owner of id in native representation
    mapping(uint256 => address) internal _ownerOf;

    /// @dev Array of owned ids in native representation
    mapping(address => uint256[]) internal _owned;

    /// @dev Tracks indices for the _owned mapping
    mapping(uint256 => uint256) internal _ownedIndex;

    /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc)
    mapping(address => bool) public whitelist;

    // Constructor
    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals,
        uint256 _totalNativeSupply,
        address _owner
    ) Ownable(_owner) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        totalSupply = _totalNativeSupply * (10 ** decimals);
    }

    /// @notice Initialization function to set pairs / etc
    ///         saving gas by avoiding mint / burn on unnecessary targets
    function setWhitelist(address target, bool state) public onlyOwner {
        whitelist[target] = state;
    }

    /// @notice Function to find owner of a given native token
    function ownerOf(uint256 id) public view virtual returns (address owner) {
        owner = _ownerOf[id];

        if (owner == address(0)) {
            revert NotFound();
        }
    }

    /// @notice tokenURI must be implemented by child contract
    function tokenURI(uint256 id) public view virtual returns (string memory);

    /// @notice Function for token approvals
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function approve(
        address spender,
        uint256 amountOrId
    ) public virtual returns (bool) {
        if (amountOrId <= minted && amountOrId > 0) {
            address owner = _ownerOf[amountOrId];

            if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) {
                revert Unauthorized();
            }

            getApproved[amountOrId] = spender;

            emit Approval(owner, spender, amountOrId);
        } else {
            allowance[msg.sender][spender] = amountOrId;

            emit Approval(msg.sender, spender, amountOrId);
        }

        return true;
    }

    /// @notice Function native approvals
    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /// @notice Function for mixed transfers
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function transferFrom(
        address from,
        address to,
        uint256 amountOrId
    ) public virtual {
        if (amountOrId <= minted) {
            if (from != _ownerOf[amountOrId]) {
                revert InvalidSender();
            }

            if (to == address(0)) {
                revert InvalidRecipient();
            }

            if (
                msg.sender != from &&
                !isApprovedForAll[from][msg.sender] &&
                msg.sender != getApproved[amountOrId]
            ) {
                revert Unauthorized();
            }

            balanceOf[from] -= _getUnit();

            unchecked {
                balanceOf[to] += _getUnit();
            }

            _ownerOf[amountOrId] = to;
            delete getApproved[amountOrId];

            // update _owned for sender
            uint256 updatedId = _owned[from][_owned[from].length - 1];
            _owned[from][_ownedIndex[amountOrId]] = updatedId;
            // pop
            _owned[from].pop();
            // update index for the moved id
            _ownedIndex[updatedId] = _ownedIndex[amountOrId];
            // push token to to owned
            _owned[to].push(amountOrId);
            // update index for to owned
            _ownedIndex[amountOrId] = _owned[to].length - 1;

            emit Transfer(from, to, amountOrId);
            emit ERC20Transfer(TRANSFER_TOPIC, from, to, _getUnit());
        } else {
            uint256 allowed = allowance[from][msg.sender];

            if (allowed != type(uint256).max)
                allowance[from][msg.sender] = allowed - amountOrId;

            _transfer(from, to, amountOrId);
        }
    }

    /// @notice Function for fractional transfers
    function transfer(
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        return _transfer(msg.sender, to, amount);
    }

    /// @notice Function for native transfers with contract support
    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Function for native transfers with contract support and callback data
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Internal function for fractional transfers
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual returns (bool) {
        uint256 unit = _getUnit();
        uint256 balanceBeforeSender = balanceOf[from];
        uint256 balanceBeforeReceiver = balanceOf[to];

        balanceOf[from] -= amount;

        unchecked {
            balanceOf[to] += amount;
        }

        // Skip burn for certain addresses to save gas
        if (!whitelist[from]) {
            uint256 tokens_to_burn = (balanceBeforeSender / unit) -
                (balanceOf[from] / unit);
            for (uint256 i = 0; i < tokens_to_burn; i++) {
                _burn(from);
            }
        }

        // Skip minting for certain addresses to save gas
        if (!whitelist[to]) {
            uint256 tokens_to_mint = (balanceOf[to] / unit) -
                (balanceBeforeReceiver / unit);
            for (uint256 i = 0; i < tokens_to_mint; i++) {
                _mint(to);
            }
        }

        emit ERC20Transfer(TRANSFER_TOPIC, from, to, amount);
        return true;
    }

    // Internal utility logic
    function _getUnit() internal view returns (uint256) {
        return 10 ** decimals;
    }

    function _mint(address to) internal virtual {
        if (to == address(0)) {
            revert InvalidRecipient();
        }

        unchecked {
            minted++;
        }

        uint256 id = minted;

        if (_ownerOf[id] != address(0)) {
            revert AlreadyExists();
        }

        _ownerOf[id] = to;
        _owned[to].push(id);
        _ownedIndex[id] = _owned[to].length - 1;

        emit Transfer(address(0), to, id);
    }

    function _burn(address from) internal virtual {
        if (from == address(0)) {
            revert InvalidSender();
        }

        uint256 id = _owned[from][_owned[from].length - 1];
        _owned[from].pop();
        delete _ownedIndex[id];
        delete _ownerOf[id];
        delete getApproved[id];

        emit Transfer(from, address(0), id);
    }

    function _setNameSymbol(
        string memory _name,
        string memory _symbol
    ) internal {
        name = _name;
        symbol = _symbol;
    }
}

File 5 of 6: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

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.
 */
abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @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 {
        _transferOwnership(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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 6 of 6: Ownable2Step.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol)

pragma solidity ^0.8.20;

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

/**
 * @dev Contract module which provides access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is specified at deployment time in the constructor for `Ownable`. This
 * can later be changed with {transferOwnership} and {acceptOwnership}.
 *
 * This module is used through inheritance. It will make available all functions
 * from parent (Ownable).
 */
abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

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

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

    /**
     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    /**
     * @dev The new owner accepts the ownership transfer.
     */
    function acceptOwnership() public virtual {
        address sender = _msgSender();
        if (pendingOwner() != sender) {
            revert OwnableUnauthorizedAccount(sender);
        }
        _transferOwnership(sender);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":true,"inputs":[{"indexed":true,"internalType":"bytes32","name":"topic0","type":"bytes32"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getLipColor","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getShirtColor","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getSkinColor","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60c0604052604051806102c001604052806040518060400160405280600781526020017f236536393034650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236662623935340000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233638393334410000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030666633330000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236132613934370000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236435653034620000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236662666638360000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233136356134630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233233393036330000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233165626337330000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233931646236390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236364646636630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030373732320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233232656566660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233534376536340000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233932613938340000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236232626139300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233062356536350000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233062386138660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233065616639620000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233330653162390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f2338666638653200000000000000000000000000000000000000000000000000815250815250600d9060166200053292919062000df4565b506040518061018001604052806040518060400160405280600781526020017f236233333833310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236561346633360000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236635376434610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236165323333340000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236538336233620000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236132346236660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236366363537660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236564383039390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233833316335640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236333323435340000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236630346637380000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f2366363831383100000000000000000000000000000000000000000000000000815250815250600e90600c6200081392919062000e52565b506040518060e001604052806040518060400160405280600781526020017f233231343746350000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666646633310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233363343936350000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233061303832390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233634366664310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233546353734460000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f2338333736394300000000000000000000000000000000000000000000000000815250815250600f906007620009cc92919062000eb0565b50348015620009d9575f80fd5b5060405162005601380380620056018339818101604052810190620009ff919062001032565b6040518060400160405280601081526020017f4f6e436861696e205065706520343034000000000000000000000000000000008152506040518060400160405280600681526020017f4f4350343034000000000000000000000000000000000000000000000000000081525060128385805f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000ae3575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000ada919062001088565b60405180910390fd5b62000af48162000bc360201b60201c565b50846002908162000b069190620012fe565b50836003908162000b189190620012fe565b508260ff1660808160ff1681525050608051600a62000b3891906200156b565b8262000b459190620015bb565b60a081815250505050505050670de0b6b3a76400008162000b679190620015bb565b60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555062000bbb82600162000bfb60201b60201c565b505062001605565b60015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905562000bf88162000c6360201b60201c565b50565b62000c0b62000d2460201b60201c565b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000d3462000dc660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000d5a62000dcd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000dc45762000d8662000dc660201b60201c565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040162000dbb919062001088565b60405180910390fd5b565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054828255905f5260205f2090810192821562000e3f579160200282015b8281111562000e3e57825182908162000e2d9190620012fe565b509160200191906001019062000e13565b5b50905062000e4e919062000f0e565b5090565b828054828255905f5260205f2090810192821562000e9d579160200282015b8281111562000e9c57825182908162000e8b9190620012fe565b509160200191906001019062000e71565b5b50905062000eac919062000f0e565b5090565b828054828255905f5260205f2090810192821562000efb579160200282015b8281111562000efa57825182908162000ee99190620012fe565b509160200191906001019062000ecf565b5b50905062000f0a919062000f0e565b5090565b5b8082111562000f31575f818162000f27919062000f35565b5060010162000f0f565b5090565b50805462000f439062001107565b5f825580601f1062000f56575062000f75565b601f0160209004905f5260205f209081019062000f74919062000f78565b5b50565b5b8082111562000f91575f815f90555060010162000f79565b5090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000fc48262000f99565b9050919050565b62000fd68162000fb8565b811462000fe1575f80fd5b50565b5f8151905062000ff48162000fcb565b92915050565b5f819050919050565b6200100e8162000ffa565b811462001019575f80fd5b50565b5f815190506200102c8162001003565b92915050565b5f80604083850312156200104b576200104a62000f95565b5b5f6200105a8582860162000fe4565b92505060206200106d858286016200101c565b9150509250929050565b620010828162000fb8565b82525050565b5f6020820190506200109d5f83018462001077565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200111f57607f821691505b602082108103620011355762001134620010da565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620011997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200115c565b620011a586836200115c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f620011e6620011e0620011da8462000ffa565b620011bd565b62000ffa565b9050919050565b5f819050919050565b6200120183620011c6565b620012196200121082620011ed565b84845462001168565b825550505050565b5f90565b6200122f62001221565b6200123c818484620011f6565b505050565b5b818110156200126357620012575f8262001225565b60018101905062001242565b5050565b601f821115620012b2576200127c816200113b565b62001287846200114d565b8101602085101562001297578190505b620012af620012a6856200114d565b83018262001241565b50505b505050565b5f82821c905092915050565b5f620012d45f1984600802620012b7565b1980831691505092915050565b5f620012ee8383620012c3565b9150826002028217905092915050565b6200130982620010a3565b67ffffffffffffffff811115620013255762001324620010ad565b5b62001331825462001107565b6200133e82828562001267565b5f60209050601f83116001811462001374575f84156200135f578287015190505b6200136b8582620012e1565b865550620013da565b601f19841662001384866200113b565b5f5b82811015620013ad5784890151825560018201915060208501945060208101905062001386565b86831015620013cd5784890151620013c9601f891682620012c3565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156200146c57808604811115620014445762001443620013e2565b5b6001851615620014545780820291505b808102905062001464856200140f565b945062001424565b94509492505050565b5f8262001486576001905062001558565b8162001495575f905062001558565b8160018114620014ae5760028114620014b957620014ef565b600191505062001558565b60ff841115620014ce57620014cd620013e2565b5b8360020a915084821115620014e857620014e7620013e2565b5b5062001558565b5060208310610133831016604e8410600b8410161715620015295782820a905083811115620015235762001522620013e2565b5b62001558565b6200153884848460016200141b565b92509050818404811115620015525762001551620013e2565b5b81810290505b9392505050565b5f60ff82169050919050565b5f620015778262000ffa565b915062001584836200155f565b9250620015b37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001475565b905092915050565b5f620015c78262000ffa565b9150620015d48362000ffa565b9250828202620015e48162000ffa565b91508282048414831517620015fe57620015fd620013e2565b5b5092915050565b60805160a051613fd36200162e5f395f61091e01525f81816111380152611c060152613fd35ff3fe608060405234801561000f575f80fd5b50600436106101a7575f3560e01c806379ba5097116100f7578063c87b56dd11610095578063dd62ed3e1161006f578063dd62ed3e146104df578063e30c39781461050f578063e985e9c51461052d578063f2fde38b1461055d576101a7565b8063c87b56dd1461044f578063d2c5f7611461047f578063dc322037146104af576101a7565b80639b19251a116100d15780639b19251a146103b7578063a22cb465146103e7578063a9059cbb14610403578063b88d4fde14610433576101a7565b806379ba5097146103715780638da5cb5b1461037b57806395d89b4114610399576101a7565b806342842e0e116101645780636352211e1161013e5780636352211e146102d757806370a0823114610307578063715018a61461033757806373075aff14610341576101a7565b806342842e0e146102815780634f02c4201461029d57806353d6fd59146102bb576101a7565b806306fdde03146101ab578063081812fc146101c9578063095ea7b3146101f957806318160ddd1461022957806323b872dd14610247578063313ce56714610263575b5f80fd5b6101b3610579565b6040516101c09190612932565b60405180910390f35b6101e360048036038101906101de919061298d565b610605565b6040516101f091906129f7565b60405180910390f35b610213600480360381019061020e9190612a3a565b610635565b6040516102209190612a92565b60405180910390f35b61023161091c565b60405161023e9190612aba565b60405180910390f35b610261600480360381019061025c9190612ad3565b610940565b005b61026b611136565b6040516102789190612b3e565b60405180910390f35b61029b60048036038101906102969190612ad3565b61115a565b005b6102a5611289565b6040516102b29190612aba565b60405180910390f35b6102d560048036038101906102d09190612b81565b61128f565b005b6102f160048036038101906102ec919061298d565b6112ef565b6040516102fe91906129f7565b60405180910390f35b610321600480360381019061031c9190612bbf565b61138d565b60405161032e9190612aba565b60405180910390f35b61033f6113a2565b005b61035b6004803603810190610356919061298d565b6113b5565b6040516103689190612932565b60405180910390f35b6103796114a4565b005b610383611532565b60405161039091906129f7565b60405180910390f35b6103a1611559565b6040516103ae9190612932565b60405180910390f35b6103d160048036038101906103cc9190612bbf565b6115e5565b6040516103de9190612a92565b60405180910390f35b61040160048036038101906103fc9190612b81565b611602565b005b61041d60048036038101906104189190612a3a565b6116fa565b60405161042a9190612a92565b60405180910390f35b61044d60048036038101906104489190612c4b565b61170e565b005b6104696004803603810190610464919061298d565b611843565b6040516104769190612932565b60405180910390f35b6104996004803603810190610494919061298d565b611907565b6040516104a69190612932565b60405180910390f35b6104c960048036038101906104c4919061298d565b6119f6565b6040516104d69190612932565b60405180910390f35b6104f960048036038101906104f49190612ccf565b611ae5565b6040516105069190612aba565b60405180910390f35b610517611b05565b60405161052491906129f7565b60405180910390f35b61054760048036038101906105429190612ccf565b611b2d565b6040516105549190612a92565b60405180910390f35b61057760048036038101906105729190612bbf565b611b57565b005b6002805461058690612d3a565b80601f01602080910402602001604051908101604052809291908181526020018280546105b290612d3a565b80156105fd5780601f106105d4576101008083540402835291602001916105fd565b820191905f5260205f20905b8154815290600101906020018083116105e057829003601f168201915b505050505081565b6007602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600454821115801561064757505f82115b1561082f575f60095f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561073e575060085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610775576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360075f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516108219190612aba565b60405180910390a350610912565b8160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109099190612aba565b60405180910390a35b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6004548111610ff75760095f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146109de576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a43576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610b01575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610b69575060075f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610ba0576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba8611c03565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610bf39190612d97565b92505081905550610c02611c03565b60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160095f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060075f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555f600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610d589190612d97565b81548110610d6957610d68612dca565b5b905f5260205f200154905080600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600b5f8581526020019081526020015f205481548110610dd557610dd4612dca565b5b905f5260205f200181905550600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480610e2e57610e2d612df7565b5b600190038181905f5260205f20015f90559055600b5f8381526020019081526020015f2054600b5f8381526020019081526020015f2081905550600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082908060018154018082558091505060019003905f5260205f20015f90919091909150556001600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610f169190612d97565b600b5f8481526020019081526020015f2081905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16604051806060016040528060218152602001613f7d6021913980519060200120610fdc611c03565b604051610fe99190612aba565b60405180910390a350611131565b5f60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111235781816110a69190612d97565b60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b61112e848484611c36565b50505b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611165838383610940565b5f8273ffffffffffffffffffffffffffffffffffffffff163b1415801561124d575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b81526004016111eb93929190612e57565b6020604051808303815f875af1158015611207573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122b9190612ef4565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611284576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60045481565b611297611f79565b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60095f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611388576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6005602052805f5260405f205f915090505481565b6113aa611f79565b6113b35f612000565b565b60605f6113e86113c484612030565b6040516020016113d49190612fa3565b604051602081830303815290604052612189565b9050600d8080549050826113fc9190612ff1565b8154811061140d5761140c612dca565b5b905f5260205f2001805461142090612d3a565b80601f016020809104026020016040519081016040528092919081815260200182805461144c90612d3a565b80156114975780601f1061146e57610100808354040283529160200191611497565b820191905f5260205f20905b81548152906001019060200180831161147a57829003601f168201915b5050505050915050919050565b5f6114ad6121ba565b90508073ffffffffffffffffffffffffffffffffffffffff166114ce611b05565b73ffffffffffffffffffffffffffffffffffffffff161461152657806040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161151d91906129f7565b60405180910390fd5b61152f81612000565b50565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003805461156690612d3a565b80601f016020809104026020016040519081016040528092919081815260200182805461159290612d3a565b80156115dd5780601f106115b4576101008083540402835291602001916115dd565b820191905f5260205f20905b8154815290600101906020018083116115c057829003601f168201915b505050505081565b600c602052805f5260405f205f915054906101000a900460ff1681565b8060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116ee9190612a92565b60405180910390a35050565b5f611706338484611c36565b905092915050565b611719858585610940565b5f8473ffffffffffffffffffffffffffffffffffffffff163b14158015611805575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b81526004016117a395949392919061305b565b6020604051808303815f875af11580156117bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e39190612ef4565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b1561183c576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60605f61184f836113b5565b90505f61185b846119f6565b90505f61186785611907565b90505f83848586878889888b8b60405160200161188d9a99989796959493929190613817565b60405160208183030381529060405290505f6118d96118ab88612030565b6118b4846121c1565b6040516020016118c5929190613b10565b6040516020818303038152906040526121c1565b9050806040516020016118ec9190613b9e565b60405160208183030381529060405295505050505050919050565b60605f61193a61191684612030565b6040516020016119269190613c09565b604051602081830303815290604052612189565b9050600e80805490508261194e9190612ff1565b8154811061195f5761195e612dca565b5b905f5260205f2001805461197290612d3a565b80601f016020809104026020016040519081016040528092919081815260200182805461199e90612d3a565b80156119e95780601f106119c0576101008083540402835291602001916119e9565b820191905f5260205f20905b8154815290600101906020018083116119cc57829003601f168201915b5050505050915050919050565b60605f611a29611a0584612030565b604051602001611a159190613c74565b604051602081830303815290604052612189565b9050600f808054905082611a3d9190612ff1565b81548110611a4e57611a4d612dca565b5b905f5260205f20018054611a6190612d3a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8d90612d3a565b8015611ad85780601f10611aaf57610100808354040283529160200191611ad8565b820191905f5260205f20905b815481529060010190602001808311611abb57829003601f168201915b5050505050915050919050565b6006602052815f5260405f20602052805f5260405f205f91509150505481565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6008602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b611b5f611f79565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16611bbe611532565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f7f0000000000000000000000000000000000000000000000000000000000000000600a611c319190613dc4565b905090565b5f80611c40611c03565b90505f60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508460055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611d109190612d97565b925050819055508460055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550600c5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611e34575f8360055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611df99190613e0e565b8484611e059190613e0e565b611e0f9190612d97565b90505f5b81811015611e3157611e2489612320565b8080600101915050611e13565b50505b600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611f07575f8382611e8f9190613e0e565b8460055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611ed89190613e0e565b611ee29190612d97565b90505f5b81811015611f0457611ef788612565565b8080600101915050611ee6565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16604051806060016040528060218152602001613f7d602191398051906020012087604051611f639190612aba565b60405180910390a3600193505050509392505050565b611f816121ba565b73ffffffffffffffffffffffffffffffffffffffff16611f9f611532565b73ffffffffffffffffffffffffffffffffffffffff1614611ffe57611fc26121ba565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611ff591906129f7565b60405180910390fd5b565b60015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561202d816127e7565b50565b60605f8203612076576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612184565b5f8290505f5b5f82146120a557808061208e90613e3e565b915050600a8261209e9190613e0e565b915061207c565b5f8167ffffffffffffffff8111156120c0576120bf613e85565b5b6040519080825280601f01601f1916602001820160405280156120f25781602001600182028036833780820191505090505b5090505b5f851461217d5760018261210a9190612d97565b9150600a856121199190612ff1565b60306121259190613eb2565b60f81b81838151811061213b5761213a612dca565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a856121769190613e0e565b94506120f6565b8093505050505b919050565b5f8160405160200161219b9190613ee5565b604051602081830303815290604052805190602001205f1c9050919050565b5f33905090565b60605f8251036121e15760405180602001604052805f815250905061231b565b5f604051806060016040528060408152602001613f3d6040913990505f60036002855161220e9190613eb2565b6122189190613e0e565b60046122249190613efb565b67ffffffffffffffff81111561223d5761223c613e85565b5b6040519080825280601f01601f19166020018201604052801561226f5781602001600182028036833780820191505090505b509050600182016020820185865187015b808210156122db576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050612280565b50506003865106600181146122f7576002811461230a57612312565b603d6001830353603d6002830353612312565b603d60018303535b50505080925050505b919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612385576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506124109190612d97565b8154811061242157612420612dca565b5b905f5260205f2001549050600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080548061247957612478612df7565b5b600190038181905f5260205f20015f90559055600b5f8281526020019081526020015f205f905560095f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560075f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055805f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125ca576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045f81548092919060010191905055505f60045490505f73ffffffffffffffffffffffffffffffffffffffff1660095f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612676576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160095f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f90919091909150556001600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506127739190612d97565b600b5f8381526020019081526020015f2081905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156128df5780820151818401526020810190506128c4565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612904826128a8565b61290e81856128b2565b935061291e8185602086016128c2565b612927816128ea565b840191505092915050565b5f6020820190508181035f83015261294a81846128fa565b905092915050565b5f80fd5b5f80fd5b5f819050919050565b61296c8161295a565b8114612976575f80fd5b50565b5f8135905061298781612963565b92915050565b5f602082840312156129a2576129a1612952565b5b5f6129af84828501612979565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6129e1826129b8565b9050919050565b6129f1816129d7565b82525050565b5f602082019050612a0a5f8301846129e8565b92915050565b612a19816129d7565b8114612a23575f80fd5b50565b5f81359050612a3481612a10565b92915050565b5f8060408385031215612a5057612a4f612952565b5b5f612a5d85828601612a26565b9250506020612a6e85828601612979565b9150509250929050565b5f8115159050919050565b612a8c81612a78565b82525050565b5f602082019050612aa55f830184612a83565b92915050565b612ab48161295a565b82525050565b5f602082019050612acd5f830184612aab565b92915050565b5f805f60608486031215612aea57612ae9612952565b5b5f612af786828701612a26565b9350506020612b0886828701612a26565b9250506040612b1986828701612979565b9150509250925092565b5f60ff82169050919050565b612b3881612b23565b82525050565b5f602082019050612b515f830184612b2f565b92915050565b612b6081612a78565b8114612b6a575f80fd5b50565b5f81359050612b7b81612b57565b92915050565b5f8060408385031215612b9757612b96612952565b5b5f612ba485828601612a26565b9250506020612bb585828601612b6d565b9150509250929050565b5f60208284031215612bd457612bd3612952565b5b5f612be184828501612a26565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612c0b57612c0a612bea565b5b8235905067ffffffffffffffff811115612c2857612c27612bee565b5b602083019150836001820283011115612c4457612c43612bf2565b5b9250929050565b5f805f805f60808688031215612c6457612c63612952565b5b5f612c7188828901612a26565b9550506020612c8288828901612a26565b9450506040612c9388828901612979565b935050606086013567ffffffffffffffff811115612cb457612cb3612956565b5b612cc088828901612bf6565b92509250509295509295909350565b5f8060408385031215612ce557612ce4612952565b5b5f612cf285828601612a26565b9250506020612d0385828601612a26565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612d5157607f821691505b602082108103612d6457612d63612d0d565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612da18261295a565b9150612dac8361295a565b9250828203905081811115612dc457612dc3612d6a565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f82825260208201905092915050565b50565b5f612e425f83612e24565b9150612e4d82612e34565b5f82019050919050565b5f608082019050612e6a5f8301866129e8565b612e7760208301856129e8565b612e846040830184612aab565b8181036060830152612e9581612e37565b9050949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ed381612e9f565b8114612edd575f80fd5b50565b5f81519050612eee81612eca565b92915050565b5f60208284031215612f0957612f08612952565b5b5f612f1684828501612ee0565b91505092915050565b5f81905092915050565b7f534b494e434f4c4f5200000000000000000000000000000000000000000000005f82015250565b5f612f5d600983612f1f565b9150612f6882612f29565b600982019050919050565b5f612f7d826128a8565b612f878185612f1f565b9350612f978185602086016128c2565b80840191505092915050565b5f612fad82612f51565b9150612fb98284612f73565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612ffb8261295a565b91506130068361295a565b92508261301657613015612fc4565b5b828206905092915050565b828183375f83830152505050565b5f61303a8385612e24565b9350613047838584613021565b613050836128ea565b840190509392505050565b5f60808201905061306e5f8301886129e8565b61307b60208301876129e8565b6130886040830186612aab565b818103606083015261309b81848661302f565b90509695505050505050565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f32305f8201527f30302f737667222077696474683d2234303022206865696768743d223430302260208201527f2076696577426f783d223020302034303020343030222066696c6c3d226e6f6e60408201527f65223e0000000000000000000000000000000000000000000000000000000000606082015250565b5f61314d606383612f1f565b9150613158826130a7565b606382019050919050565b7f3c726563742077696474683d22383022206865696768743d2234302220783d225f8201527f3135302220793d223737222066696c6c3d220000000000000000000000000000602082015250565b5f6131bd603283612f1f565b91506131c882613163565b603282019050919050565b7f222f3e00000000000000000000000000000000000000000000000000000000005f82015250565b5f613207600383612f1f565b9150613212826131d3565b600382019050919050565b7f3c726563742077696474683d22383022206865696768743d2234302220783d225f8201527f3237302220793d223737222066696c6c3d220000000000000000000000000000602082015250565b5f613277603283612f1f565b91506132828261321d565b603282019050919050565b7f3c726563742077696474683d2232383022206865696768743d2234312220783d5f8201527f223131302220793d22313136222066696c6c3d22000000000000000000000000602082015250565b5f6132e7603483612f1f565b91506132f28261328d565b603482019050919050565b7f3c726563742077696474683d22383022206865696768743d2234312220783d225f8201527f37302220793d22313536222066696c6c3d220000000000000000000000000000602082015250565b5f613357603283612f1f565b9150613362826132fd565b603282019050919050565b7f3c726563742077696474683d22343022206865696768743d2234312220783d225f8201527f3135302220793d22313536222066696c6c3d2223666666666666222f3e000000602082015250565b5f6133c7603d83612f1f565b91506133d28261336d565b603d82019050919050565b7f3c726563742077696474683d22343022206865696768743d2234312220783d225f8201527f3139302220793d22313536222066696c6c3d2223303030303030222f3e000000602082015250565b5f613437603d83612f1f565b9150613442826133dd565b603d82019050919050565b7f3c726563742077696474683d22383022206865696768743d2234312220783d225f8201527f3233302220793d22313536222066696c6c3d2223666666666666222f3e000000602082015250565b5f6134a7603d83612f1f565b91506134b28261344d565b603d82019050919050565b7f3c726563742077696474683d22343022206865696768743d2234312220783d225f8201527f3331302220793d22313536222066696c6c3d2223303030303030222f3e000000602082015250565b5f613517603d83612f1f565b9150613522826134bd565b603d82019050919050565b7f3c726563742077696474683d22343022206865696768743d2234312220783d225f8201527f3335302220793d22313536222066696c6c3d2200000000000000000000000000602082015250565b5f613587603383612f1f565b91506135928261352d565b603382019050919050565b7f3c726563742077696474683d2232383022206865696768743d2234312220783d5f8201527f2237302220793d22313936222066696c6c3d2200000000000000000000000000602082015250565b5f6135f7603383612f1f565b91506136028261359d565b603382019050919050565b7f3c726563742077696474683d2231363022206865696768743d2234312220783d5f8201527f2232392220793d22323336222066696c6c3d2200000000000000000000000000602082015250565b5f613667603383612f1f565b91506136728261360d565b603382019050919050565b7f3c726563742077696474683d2231363122206865696768743d2234312220783d5f8201527f223138392220793d22323336222066696c6c3d22000000000000000000000000602082015250565b5f6136d7603483612f1f565b91506136e28261367d565b603482019050919050565b7f3c726563742077696474683d2232383022206865696768743d2234312220783d5f8201527f2232392220793d22323736222066696c6c3d2200000000000000000000000000602082015250565b5f613747603383612f1f565b9150613752826136ed565b603382019050919050565b7f3c726563742077696474683d2232383022206865696768743d2234312220783d5f8201527f2232392220793d22333136222066696c6c3d2200000000000000000000000000602082015250565b5f6137b7603383612f1f565b91506137c28261375d565b603382019050919050565b7f3c2f7376673e00000000000000000000000000000000000000000000000000005f82015250565b5f613801600683612f1f565b915061380c826137cd565b600682019050919050565b5f61382182613141565b915061382c826131b1565b9150613838828d612f73565b9150613843826131fb565b915061384e8261326b565b915061385a828c612f73565b9150613865826131fb565b9150613870826132db565b915061387c828b612f73565b9150613887826131fb565b91506138928261334b565b915061389e828a612f73565b91506138a9826131fb565b91506138b4826133bb565b91506138bf8261342b565b91506138ca8261349b565b91506138d58261350b565b91506138e08261357b565b91506138ec8289612f73565b91506138f7826131fb565b9150613902826135eb565b915061390e8288612f73565b9150613919826131fb565b91506139248261365b565b91506139308287612f73565b915061393b826131fb565b9150613946826136cb565b91506139528286612f73565b915061395d826131fb565b91506139688261373b565b91506139748285612f73565b915061397f826131fb565b915061398a826137ab565b91506139968284612f73565b91506139a1826131fb565b91506139ac826137f5565b91508190509b9a5050505050505050505050565b7f7b226e616d65223a20224f6e20436861696e20506570652023000000000000005f82015250565b5f6139f4601983612f1f565b91506139ff826139c0565b601982019050919050565b7f222c20226465736372697074696f6e223a202238382072616e646f6d6c7920675f8201527f656e65726174656420506978656c2050657065732073746f72656420656e746960208201527f72656c79206f6e20636861696e2e222c2022696d616765223a2022646174613a60408201527f696d6167652f7376672b786d6c3b6261736536342c0000000000000000000000606082015250565b5f613ab0607583612f1f565b9150613abb82613a0a565b607582019050919050565b7f227d0000000000000000000000000000000000000000000000000000000000005f82015250565b5f613afa600283612f1f565b9150613b0582613ac6565b600282019050919050565b5f613b1a826139e8565b9150613b268285612f73565b9150613b3182613aa4565b9150613b3d8284612f73565b9150613b4882613aee565b91508190509392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000005f82015250565b5f613b88601d83612f1f565b9150613b9382613b54565b601d82019050919050565b5f613ba882613b7c565b9150613bb48284612f73565b915081905092915050565b7f4c4950434f4c4f520000000000000000000000000000000000000000000000005f82015250565b5f613bf3600883612f1f565b9150613bfe82613bbf565b600882019050919050565b5f613c1382613be7565b9150613c1f8284612f73565b915081905092915050565b7f5348495254434f4c4f52000000000000000000000000000000000000000000005f82015250565b5f613c5e600a83612f1f565b9150613c6982613c2a565b600a82019050919050565b5f613c7e82613c52565b9150613c8a8284612f73565b915081905092915050565b5f8160011c9050919050565b5f808291508390505b6001851115613cea57808604811115613cc657613cc5612d6a565b5b6001851615613cd55780820291505b8081029050613ce385613c95565b9450613caa565b94509492505050565b5f82613d025760019050613dbd565b81613d0f575f9050613dbd565b8160018114613d255760028114613d2f57613d5e565b6001915050613dbd565b60ff841115613d4157613d40612d6a565b5b8360020a915084821115613d5857613d57612d6a565b5b50613dbd565b5060208310610133831016604e8410600b8410161715613d935782820a905083811115613d8e57613d8d612d6a565b5b613dbd565b613da08484846001613ca1565b92509050818404811115613db757613db6612d6a565b5b81810290505b9392505050565b5f613dce8261295a565b9150613dd983612b23565b9250613e067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613cf3565b905092915050565b5f613e188261295a565b9150613e238361295a565b925082613e3357613e32612fc4565b5b828204905092915050565b5f613e488261295a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e7a57613e79612d6a565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f613ebc8261295a565b9150613ec78361295a565b9250828201905080821115613edf57613ede612d6a565b5b92915050565b5f613ef08284612f73565b915081905092915050565b5f613f058261295a565b9150613f108361295a565b9250828202613f1e8161295a565b91508282048414831517613f3557613f34612d6a565b5b509291505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f5472616e7366657228616464726573732c616464726573732c75696e7432353629a2646970667358221220f31a56f510a25e7a04d4561a991c75b66a80b3aa54abc62c0d27d7e5456c5c7664736f6c634300081800330000000000000000000000000fa18ed9468b9119d6ac6f0949c81fdd42a546a20000000000000000000000000000000000000000000000000000000000000058

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106101a7575f3560e01c806379ba5097116100f7578063c87b56dd11610095578063dd62ed3e1161006f578063dd62ed3e146104df578063e30c39781461050f578063e985e9c51461052d578063f2fde38b1461055d576101a7565b8063c87b56dd1461044f578063d2c5f7611461047f578063dc322037146104af576101a7565b80639b19251a116100d15780639b19251a146103b7578063a22cb465146103e7578063a9059cbb14610403578063b88d4fde14610433576101a7565b806379ba5097146103715780638da5cb5b1461037b57806395d89b4114610399576101a7565b806342842e0e116101645780636352211e1161013e5780636352211e146102d757806370a0823114610307578063715018a61461033757806373075aff14610341576101a7565b806342842e0e146102815780634f02c4201461029d57806353d6fd59146102bb576101a7565b806306fdde03146101ab578063081812fc146101c9578063095ea7b3146101f957806318160ddd1461022957806323b872dd14610247578063313ce56714610263575b5f80fd5b6101b3610579565b6040516101c09190612932565b60405180910390f35b6101e360048036038101906101de919061298d565b610605565b6040516101f091906129f7565b60405180910390f35b610213600480360381019061020e9190612a3a565b610635565b6040516102209190612a92565b60405180910390f35b61023161091c565b60405161023e9190612aba565b60405180910390f35b610261600480360381019061025c9190612ad3565b610940565b005b61026b611136565b6040516102789190612b3e565b60405180910390f35b61029b60048036038101906102969190612ad3565b61115a565b005b6102a5611289565b6040516102b29190612aba565b60405180910390f35b6102d560048036038101906102d09190612b81565b61128f565b005b6102f160048036038101906102ec919061298d565b6112ef565b6040516102fe91906129f7565b60405180910390f35b610321600480360381019061031c9190612bbf565b61138d565b60405161032e9190612aba565b60405180910390f35b61033f6113a2565b005b61035b6004803603810190610356919061298d565b6113b5565b6040516103689190612932565b60405180910390f35b6103796114a4565b005b610383611532565b60405161039091906129f7565b60405180910390f35b6103a1611559565b6040516103ae9190612932565b60405180910390f35b6103d160048036038101906103cc9190612bbf565b6115e5565b6040516103de9190612a92565b60405180910390f35b61040160048036038101906103fc9190612b81565b611602565b005b61041d60048036038101906104189190612a3a565b6116fa565b60405161042a9190612a92565b60405180910390f35b61044d60048036038101906104489190612c4b565b61170e565b005b6104696004803603810190610464919061298d565b611843565b6040516104769190612932565b60405180910390f35b6104996004803603810190610494919061298d565b611907565b6040516104a69190612932565b60405180910390f35b6104c960048036038101906104c4919061298d565b6119f6565b6040516104d69190612932565b60405180910390f35b6104f960048036038101906104f49190612ccf565b611ae5565b6040516105069190612aba565b60405180910390f35b610517611b05565b60405161052491906129f7565b60405180910390f35b61054760048036038101906105429190612ccf565b611b2d565b6040516105549190612a92565b60405180910390f35b61057760048036038101906105729190612bbf565b611b57565b005b6002805461058690612d3a565b80601f01602080910402602001604051908101604052809291908181526020018280546105b290612d3a565b80156105fd5780601f106105d4576101008083540402835291602001916105fd565b820191905f5260205f20905b8154815290600101906020018083116105e057829003601f168201915b505050505081565b6007602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600454821115801561064757505f82115b1561082f575f60095f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561073e575060085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610775576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360075f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516108219190612aba565b60405180910390a350610912565b8160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109099190612aba565b60405180910390a35b6001905092915050565b7f000000000000000000000000000000000000000000000004c53ecdc18a60000081565b6004548111610ff75760095f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146109de576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a43576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610b01575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610b69575060075f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610ba0576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba8611c03565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610bf39190612d97565b92505081905550610c02611c03565b60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160095f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060075f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555f600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610d589190612d97565b81548110610d6957610d68612dca565b5b905f5260205f200154905080600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600b5f8581526020019081526020015f205481548110610dd557610dd4612dca565b5b905f5260205f200181905550600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480610e2e57610e2d612df7565b5b600190038181905f5260205f20015f90559055600b5f8381526020019081526020015f2054600b5f8381526020019081526020015f2081905550600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082908060018154018082558091505060019003905f5260205f20015f90919091909150556001600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610f169190612d97565b600b5f8481526020019081526020015f2081905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16604051806060016040528060218152602001613f7d6021913980519060200120610fdc611c03565b604051610fe99190612aba565b60405180910390a350611131565b5f60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111235781816110a69190612d97565b60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b61112e848484611c36565b50505b505050565b7f000000000000000000000000000000000000000000000000000000000000001281565b611165838383610940565b5f8273ffffffffffffffffffffffffffffffffffffffff163b1415801561124d575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b81526004016111eb93929190612e57565b6020604051808303815f875af1158015611207573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122b9190612ef4565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611284576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60045481565b611297611f79565b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60095f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611388576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6005602052805f5260405f205f915090505481565b6113aa611f79565b6113b35f612000565b565b60605f6113e86113c484612030565b6040516020016113d49190612fa3565b604051602081830303815290604052612189565b9050600d8080549050826113fc9190612ff1565b8154811061140d5761140c612dca565b5b905f5260205f2001805461142090612d3a565b80601f016020809104026020016040519081016040528092919081815260200182805461144c90612d3a565b80156114975780601f1061146e57610100808354040283529160200191611497565b820191905f5260205f20905b81548152906001019060200180831161147a57829003601f168201915b5050505050915050919050565b5f6114ad6121ba565b90508073ffffffffffffffffffffffffffffffffffffffff166114ce611b05565b73ffffffffffffffffffffffffffffffffffffffff161461152657806040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161151d91906129f7565b60405180910390fd5b61152f81612000565b50565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003805461156690612d3a565b80601f016020809104026020016040519081016040528092919081815260200182805461159290612d3a565b80156115dd5780601f106115b4576101008083540402835291602001916115dd565b820191905f5260205f20905b8154815290600101906020018083116115c057829003601f168201915b505050505081565b600c602052805f5260405f205f915054906101000a900460ff1681565b8060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116ee9190612a92565b60405180910390a35050565b5f611706338484611c36565b905092915050565b611719858585610940565b5f8473ffffffffffffffffffffffffffffffffffffffff163b14158015611805575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b81526004016117a395949392919061305b565b6020604051808303815f875af11580156117bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e39190612ef4565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b1561183c576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60605f61184f836113b5565b90505f61185b846119f6565b90505f61186785611907565b90505f83848586878889888b8b60405160200161188d9a99989796959493929190613817565b60405160208183030381529060405290505f6118d96118ab88612030565b6118b4846121c1565b6040516020016118c5929190613b10565b6040516020818303038152906040526121c1565b9050806040516020016118ec9190613b9e565b60405160208183030381529060405295505050505050919050565b60605f61193a61191684612030565b6040516020016119269190613c09565b604051602081830303815290604052612189565b9050600e80805490508261194e9190612ff1565b8154811061195f5761195e612dca565b5b905f5260205f2001805461197290612d3a565b80601f016020809104026020016040519081016040528092919081815260200182805461199e90612d3a565b80156119e95780601f106119c0576101008083540402835291602001916119e9565b820191905f5260205f20905b8154815290600101906020018083116119cc57829003601f168201915b5050505050915050919050565b60605f611a29611a0584612030565b604051602001611a159190613c74565b604051602081830303815290604052612189565b9050600f808054905082611a3d9190612ff1565b81548110611a4e57611a4d612dca565b5b905f5260205f20018054611a6190612d3a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8d90612d3a565b8015611ad85780601f10611aaf57610100808354040283529160200191611ad8565b820191905f5260205f20905b815481529060010190602001808311611abb57829003601f168201915b5050505050915050919050565b6006602052815f5260405f20602052805f5260405f205f91509150505481565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6008602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b611b5f611f79565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16611bbe611532565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f7f0000000000000000000000000000000000000000000000000000000000000012600a611c319190613dc4565b905090565b5f80611c40611c03565b90505f60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508460055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611d109190612d97565b925050819055508460055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550600c5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611e34575f8360055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611df99190613e0e565b8484611e059190613e0e565b611e0f9190612d97565b90505f5b81811015611e3157611e2489612320565b8080600101915050611e13565b50505b600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611f07575f8382611e8f9190613e0e565b8460055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611ed89190613e0e565b611ee29190612d97565b90505f5b81811015611f0457611ef788612565565b8080600101915050611ee6565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16604051806060016040528060218152602001613f7d602191398051906020012087604051611f639190612aba565b60405180910390a3600193505050509392505050565b611f816121ba565b73ffffffffffffffffffffffffffffffffffffffff16611f9f611532565b73ffffffffffffffffffffffffffffffffffffffff1614611ffe57611fc26121ba565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611ff591906129f7565b60405180910390fd5b565b60015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561202d816127e7565b50565b60605f8203612076576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612184565b5f8290505f5b5f82146120a557808061208e90613e3e565b915050600a8261209e9190613e0e565b915061207c565b5f8167ffffffffffffffff8111156120c0576120bf613e85565b5b6040519080825280601f01601f1916602001820160405280156120f25781602001600182028036833780820191505090505b5090505b5f851461217d5760018261210a9190612d97565b9150600a856121199190612ff1565b60306121259190613eb2565b60f81b81838151811061213b5761213a612dca565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a856121769190613e0e565b94506120f6565b8093505050505b919050565b5f8160405160200161219b9190613ee5565b604051602081830303815290604052805190602001205f1c9050919050565b5f33905090565b60605f8251036121e15760405180602001604052805f815250905061231b565b5f604051806060016040528060408152602001613f3d6040913990505f60036002855161220e9190613eb2565b6122189190613e0e565b60046122249190613efb565b67ffffffffffffffff81111561223d5761223c613e85565b5b6040519080825280601f01601f19166020018201604052801561226f5781602001600182028036833780820191505090505b509050600182016020820185865187015b808210156122db576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050612280565b50506003865106600181146122f7576002811461230a57612312565b603d6001830353603d6002830353612312565b603d60018303535b50505080925050505b919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612385576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506124109190612d97565b8154811061242157612420612dca565b5b905f5260205f2001549050600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080548061247957612478612df7565b5b600190038181905f5260205f20015f90559055600b5f8281526020019081526020015f205f905560095f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560075f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055805f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125ca576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045f81548092919060010191905055505f60045490505f73ffffffffffffffffffffffffffffffffffffffff1660095f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612676576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160095f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f90919091909150556001600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506127739190612d97565b600b5f8381526020019081526020015f2081905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156128df5780820151818401526020810190506128c4565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612904826128a8565b61290e81856128b2565b935061291e8185602086016128c2565b612927816128ea565b840191505092915050565b5f6020820190508181035f83015261294a81846128fa565b905092915050565b5f80fd5b5f80fd5b5f819050919050565b61296c8161295a565b8114612976575f80fd5b50565b5f8135905061298781612963565b92915050565b5f602082840312156129a2576129a1612952565b5b5f6129af84828501612979565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6129e1826129b8565b9050919050565b6129f1816129d7565b82525050565b5f602082019050612a0a5f8301846129e8565b92915050565b612a19816129d7565b8114612a23575f80fd5b50565b5f81359050612a3481612a10565b92915050565b5f8060408385031215612a5057612a4f612952565b5b5f612a5d85828601612a26565b9250506020612a6e85828601612979565b9150509250929050565b5f8115159050919050565b612a8c81612a78565b82525050565b5f602082019050612aa55f830184612a83565b92915050565b612ab48161295a565b82525050565b5f602082019050612acd5f830184612aab565b92915050565b5f805f60608486031215612aea57612ae9612952565b5b5f612af786828701612a26565b9350506020612b0886828701612a26565b9250506040612b1986828701612979565b9150509250925092565b5f60ff82169050919050565b612b3881612b23565b82525050565b5f602082019050612b515f830184612b2f565b92915050565b612b6081612a78565b8114612b6a575f80fd5b50565b5f81359050612b7b81612b57565b92915050565b5f8060408385031215612b9757612b96612952565b5b5f612ba485828601612a26565b9250506020612bb585828601612b6d565b9150509250929050565b5f60208284031215612bd457612bd3612952565b5b5f612be184828501612a26565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612c0b57612c0a612bea565b5b8235905067ffffffffffffffff811115612c2857612c27612bee565b5b602083019150836001820283011115612c4457612c43612bf2565b5b9250929050565b5f805f805f60808688031215612c6457612c63612952565b5b5f612c7188828901612a26565b9550506020612c8288828901612a26565b9450506040612c9388828901612979565b935050606086013567ffffffffffffffff811115612cb457612cb3612956565b5b612cc088828901612bf6565b92509250509295509295909350565b5f8060408385031215612ce557612ce4612952565b5b5f612cf285828601612a26565b9250506020612d0385828601612a26565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612d5157607f821691505b602082108103612d6457612d63612d0d565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612da18261295a565b9150612dac8361295a565b9250828203905081811115612dc457612dc3612d6a565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f82825260208201905092915050565b50565b5f612e425f83612e24565b9150612e4d82612e34565b5f82019050919050565b5f608082019050612e6a5f8301866129e8565b612e7760208301856129e8565b612e846040830184612aab565b8181036060830152612e9581612e37565b9050949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ed381612e9f565b8114612edd575f80fd5b50565b5f81519050612eee81612eca565b92915050565b5f60208284031215612f0957612f08612952565b5b5f612f1684828501612ee0565b91505092915050565b5f81905092915050565b7f534b494e434f4c4f5200000000000000000000000000000000000000000000005f82015250565b5f612f5d600983612f1f565b9150612f6882612f29565b600982019050919050565b5f612f7d826128a8565b612f878185612f1f565b9350612f978185602086016128c2565b80840191505092915050565b5f612fad82612f51565b9150612fb98284612f73565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612ffb8261295a565b91506130068361295a565b92508261301657613015612fc4565b5b828206905092915050565b828183375f83830152505050565b5f61303a8385612e24565b9350613047838584613021565b613050836128ea565b840190509392505050565b5f60808201905061306e5f8301886129e8565b61307b60208301876129e8565b6130886040830186612aab565b818103606083015261309b81848661302f565b90509695505050505050565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f32305f8201527f30302f737667222077696474683d2234303022206865696768743d223430302260208201527f2076696577426f783d223020302034303020343030222066696c6c3d226e6f6e60408201527f65223e0000000000000000000000000000000000000000000000000000000000606082015250565b5f61314d606383612f1f565b9150613158826130a7565b606382019050919050565b7f3c726563742077696474683d22383022206865696768743d2234302220783d225f8201527f3135302220793d223737222066696c6c3d220000000000000000000000000000602082015250565b5f6131bd603283612f1f565b91506131c882613163565b603282019050919050565b7f222f3e00000000000000000000000000000000000000000000000000000000005f82015250565b5f613207600383612f1f565b9150613212826131d3565b600382019050919050565b7f3c726563742077696474683d22383022206865696768743d2234302220783d225f8201527f3237302220793d223737222066696c6c3d220000000000000000000000000000602082015250565b5f613277603283612f1f565b91506132828261321d565b603282019050919050565b7f3c726563742077696474683d2232383022206865696768743d2234312220783d5f8201527f223131302220793d22313136222066696c6c3d22000000000000000000000000602082015250565b5f6132e7603483612f1f565b91506132f28261328d565b603482019050919050565b7f3c726563742077696474683d22383022206865696768743d2234312220783d225f8201527f37302220793d22313536222066696c6c3d220000000000000000000000000000602082015250565b5f613357603283612f1f565b9150613362826132fd565b603282019050919050565b7f3c726563742077696474683d22343022206865696768743d2234312220783d225f8201527f3135302220793d22313536222066696c6c3d2223666666666666222f3e000000602082015250565b5f6133c7603d83612f1f565b91506133d28261336d565b603d82019050919050565b7f3c726563742077696474683d22343022206865696768743d2234312220783d225f8201527f3139302220793d22313536222066696c6c3d2223303030303030222f3e000000602082015250565b5f613437603d83612f1f565b9150613442826133dd565b603d82019050919050565b7f3c726563742077696474683d22383022206865696768743d2234312220783d225f8201527f3233302220793d22313536222066696c6c3d2223666666666666222f3e000000602082015250565b5f6134a7603d83612f1f565b91506134b28261344d565b603d82019050919050565b7f3c726563742077696474683d22343022206865696768743d2234312220783d225f8201527f3331302220793d22313536222066696c6c3d2223303030303030222f3e000000602082015250565b5f613517603d83612f1f565b9150613522826134bd565b603d82019050919050565b7f3c726563742077696474683d22343022206865696768743d2234312220783d225f8201527f3335302220793d22313536222066696c6c3d2200000000000000000000000000602082015250565b5f613587603383612f1f565b91506135928261352d565b603382019050919050565b7f3c726563742077696474683d2232383022206865696768743d2234312220783d5f8201527f2237302220793d22313936222066696c6c3d2200000000000000000000000000602082015250565b5f6135f7603383612f1f565b91506136028261359d565b603382019050919050565b7f3c726563742077696474683d2231363022206865696768743d2234312220783d5f8201527f2232392220793d22323336222066696c6c3d2200000000000000000000000000602082015250565b5f613667603383612f1f565b91506136728261360d565b603382019050919050565b7f3c726563742077696474683d2231363122206865696768743d2234312220783d5f8201527f223138392220793d22323336222066696c6c3d22000000000000000000000000602082015250565b5f6136d7603483612f1f565b91506136e28261367d565b603482019050919050565b7f3c726563742077696474683d2232383022206865696768743d2234312220783d5f8201527f2232392220793d22323736222066696c6c3d2200000000000000000000000000602082015250565b5f613747603383612f1f565b9150613752826136ed565b603382019050919050565b7f3c726563742077696474683d2232383022206865696768743d2234312220783d5f8201527f2232392220793d22333136222066696c6c3d2200000000000000000000000000602082015250565b5f6137b7603383612f1f565b91506137c28261375d565b603382019050919050565b7f3c2f7376673e00000000000000000000000000000000000000000000000000005f82015250565b5f613801600683612f1f565b915061380c826137cd565b600682019050919050565b5f61382182613141565b915061382c826131b1565b9150613838828d612f73565b9150613843826131fb565b915061384e8261326b565b915061385a828c612f73565b9150613865826131fb565b9150613870826132db565b915061387c828b612f73565b9150613887826131fb565b91506138928261334b565b915061389e828a612f73565b91506138a9826131fb565b91506138b4826133bb565b91506138bf8261342b565b91506138ca8261349b565b91506138d58261350b565b91506138e08261357b565b91506138ec8289612f73565b91506138f7826131fb565b9150613902826135eb565b915061390e8288612f73565b9150613919826131fb565b91506139248261365b565b91506139308287612f73565b915061393b826131fb565b9150613946826136cb565b91506139528286612f73565b915061395d826131fb565b91506139688261373b565b91506139748285612f73565b915061397f826131fb565b915061398a826137ab565b91506139968284612f73565b91506139a1826131fb565b91506139ac826137f5565b91508190509b9a5050505050505050505050565b7f7b226e616d65223a20224f6e20436861696e20506570652023000000000000005f82015250565b5f6139f4601983612f1f565b91506139ff826139c0565b601982019050919050565b7f222c20226465736372697074696f6e223a202238382072616e646f6d6c7920675f8201527f656e65726174656420506978656c2050657065732073746f72656420656e746960208201527f72656c79206f6e20636861696e2e222c2022696d616765223a2022646174613a60408201527f696d6167652f7376672b786d6c3b6261736536342c0000000000000000000000606082015250565b5f613ab0607583612f1f565b9150613abb82613a0a565b607582019050919050565b7f227d0000000000000000000000000000000000000000000000000000000000005f82015250565b5f613afa600283612f1f565b9150613b0582613ac6565b600282019050919050565b5f613b1a826139e8565b9150613b268285612f73565b9150613b3182613aa4565b9150613b3d8284612f73565b9150613b4882613aee565b91508190509392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000005f82015250565b5f613b88601d83612f1f565b9150613b9382613b54565b601d82019050919050565b5f613ba882613b7c565b9150613bb48284612f73565b915081905092915050565b7f4c4950434f4c4f520000000000000000000000000000000000000000000000005f82015250565b5f613bf3600883612f1f565b9150613bfe82613bbf565b600882019050919050565b5f613c1382613be7565b9150613c1f8284612f73565b915081905092915050565b7f5348495254434f4c4f52000000000000000000000000000000000000000000005f82015250565b5f613c5e600a83612f1f565b9150613c6982613c2a565b600a82019050919050565b5f613c7e82613c52565b9150613c8a8284612f73565b915081905092915050565b5f8160011c9050919050565b5f808291508390505b6001851115613cea57808604811115613cc657613cc5612d6a565b5b6001851615613cd55780820291505b8081029050613ce385613c95565b9450613caa565b94509492505050565b5f82613d025760019050613dbd565b81613d0f575f9050613dbd565b8160018114613d255760028114613d2f57613d5e565b6001915050613dbd565b60ff841115613d4157613d40612d6a565b5b8360020a915084821115613d5857613d57612d6a565b5b50613dbd565b5060208310610133831016604e8410600b8410161715613d935782820a905083811115613d8e57613d8d612d6a565b5b613dbd565b613da08484846001613ca1565b92509050818404811115613db757613db6612d6a565b5b81810290505b9392505050565b5f613dce8261295a565b9150613dd983612b23565b9250613e067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613cf3565b905092915050565b5f613e188261295a565b9150613e238361295a565b925082613e3357613e32612fc4565b5b828204905092915050565b5f613e488261295a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e7a57613e79612d6a565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f613ebc8261295a565b9150613ec78361295a565b9250828201905080821115613edf57613ede612d6a565b5b92915050565b5f613ef08284612f73565b915081905092915050565b5f613f058261295a565b9150613f108361295a565b9250828202613f1e8161295a565b91508282048414831517613f3557613f34612d6a565b5b509291505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f5472616e7366657228616464726573732c616464726573732c75696e7432353629a2646970667358221220f31a56f510a25e7a04d4561a991c75b66a80b3aa54abc62c0d27d7e5456c5c7664736f6c63430008180033

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

0000000000000000000000000fa18ed9468b9119d6ac6f0949c81fdd42a546a20000000000000000000000000000000000000000000000000000000000000058

-----Decoded View---------------
Arg [0] : _owner (address): 0x0fa18ed9468B9119d6AC6F0949c81fdD42a546a2
Arg [1] : _totalSupply (uint256): 88

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000fa18ed9468b9119d6ac6f0949c81fdd42a546a2
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000058


Deployed Bytecode Sourcemap

280:5605:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1208:18:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1897:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3677:621;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1435:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4694:1679;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1338:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6658:391;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1567:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3024:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3202:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1669:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2286:101:4;;;:::i;:::-;;1591:246:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1761:229:5;;;:::i;:::-;;1631:85:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1259:20:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2493:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4346:203;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6429:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7141:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2706:2656:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1843:242;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2091:278;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1780:64:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;874:99:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2005:68:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1166:178:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1208:18:2;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1897:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;3677:621::-;3777:4;3811:6;;3797:10;:20;;:38;;;;;3834:1;3821:10;:14;3797:38;3793:477;;;3851:13;3867:8;:20;3876:10;3867:20;;;;;;;;;;;;;;;;;;;;;3851:36;;3920:5;3906:19;;:10;:19;;;;:59;;;;;3930:16;:23;3947:5;3930:23;;;;;;;;;;;;;;;:35;3954:10;3930:35;;;;;;;;;;;;;;;;;;;;;;;;;3929:36;3906:59;3902:119;;;3992:14;;;;;;;;;;;;;;3902:119;4061:7;4035:11;:23;4047:10;4035:23;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;4104:7;4088:36;;4097:5;4088:36;;;4113:10;4088:36;;;;;;:::i;:::-;;;;;;;;3837:298;3793:477;;;4188:10;4155:9;:21;4165:10;4155:21;;;;;;;;;;;;;;;:30;4177:7;4155:30;;;;;;;;;;;;;;;:43;;;;4239:7;4218:41;;4227:10;4218:41;;;4248:10;4218:41;;;;;;:::i;:::-;;;;;;;;3793:477;4287:4;4280:11;;3677:621;;;;:::o;1435:36::-;;;:::o;4694:1679::-;4835:6;;4821:10;:20;4817:1550;;4869:8;:20;4878:10;4869:20;;;;;;;;;;;;;;;;;;;;;4861:28;;:4;:28;;;4857:89;;4916:15;;;;;;;;;;;;;;4857:89;4978:1;4964:16;;:2;:16;;;4960:80;;5007:18;;;;;;;;;;;;;;4960:80;5089:4;5075:18;;:10;:18;;;;:73;;;;;5114:16;:22;5131:4;5114:22;;;;;;;;;;;;;;;:34;5137:10;5114:34;;;;;;;;;;;;;;;;;;;;;;;;;5113:35;5075:73;:130;;;;;5182:11;:23;5194:10;5182:23;;;;;;;;;;;;;;;;;;;;;5168:37;;:10;:37;;;;5075:130;5054:220;;;5245:14;;;;;;;;;;;;;;5054:220;5307:10;:8;:10::i;:::-;5288:9;:15;5298:4;5288:15;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;5377:10;:8;:10::i;:::-;5360:9;:13;5370:2;5360:13;;;;;;;;;;;;;;;;:27;;;;;;;;;;;5439:2;5416:8;:20;5425:10;5416:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;5462:11;:23;5474:10;5462:23;;;;;;;;;;;;5455:30;;;;;;;;;;;5540:17;5560:6;:12;5567:4;5560:12;;;;;;;;;;;;;;;5595:1;5573:6;:12;5580:4;5573:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;5560:37;;;;;;;;:::i;:::-;;;;;;;;;;5540:57;;5651:9;5611:6;:12;5618:4;5611:12;;;;;;;;;;;;;;;5624:11;:23;5636:10;5624:23;;;;;;;;;;;;5611:37;;;;;;;;:::i;:::-;;;;;;;;;:49;;;;5693:6;:12;5700:4;5693:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5795:11;:23;5807:10;5795:23;;;;;;;;;;;;5770:11;:22;5782:9;5770:22;;;;;;;;;;;:48;;;;5870:6;:10;5877:2;5870:10;;;;;;;;;;;;;;;5886;5870:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5998:1;5978:6;:10;5985:2;5978:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;5952:11;:23;5964:10;5952:23;;;;;;;;;;;:47;;;;6038:10;6034:2;6019:30;;6028:4;6019:30;;;;;;;;;;;;6104:2;6068:51;;6098:4;6068:51;;930:42;;;;;;;;;;;;;;;;;920:53;;;;;;6108:10;:8;:10::i;:::-;6068:51;;;;;;:::i;:::-;;;;;;;;4843:1287;4817:1550;;;6150:15;6168:9;:15;6178:4;6168:15;;;;;;;;;;;;;;;:27;6184:10;6168:27;;;;;;;;;;;;;;;;6150:45;;6225:17;6214:7;:28;6210:100;;6300:10;6290:7;:20;;;;:::i;:::-;6260:9;:15;6270:4;6260:15;;;;;;;;;;;;;;;:27;6276:10;6260:27;;;;;;;;;;;;;;;:50;;;;6210:100;6325:31;6335:4;6341:2;6345:10;6325:9;:31::i;:::-;;6136:231;4817:1550;4694:1679;;;:::o;1338:31::-;;;:::o;6658:391::-;6777:26;6790:4;6796:2;6800;6777:12;:26::i;:::-;6849:1;6831:2;:14;;;:19;;:152;;;;;6943:40;;;6866:117;;;6881:2;6866:35;;;6902:10;6914:4;6920:2;6866:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:117;;;;;6831:152;6814:229;;;7015:17;;;;;;;;;;;;;;6814:229;6658:391;;;:::o;1567:21::-;;;;:::o;3024:109::-;1524:13:4;:11;:13::i;:::-;3121:5:2::1;3101:9;:17;3111:6;3101:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;3024:109:::0;;:::o;3202:187::-;3260:13;3293:8;:12;3302:2;3293:12;;;;;;;;;;;;;;;;;;;;;3285:20;;3337:1;3320:19;;:5;:19;;;3316:67;;3362:10;;;;;;;;;;;;;;3316:67;3202:187;;;:::o;1669:44::-;;;;;;;;;;;;;;;;;:::o;2286:101:4:-;1524:13;:11;:13::i;:::-;2350:30:::1;2377:1;2350:18;:30::i;:::-;2286:101::o:0;1591:246:3:-;1651:13;1676:12;1691:86;1748:17;1757:7;1748:8;:17::i;:::-;1718:48;;;;;;;;:::i;:::-;;;;;;;;;;;;;1691:6;:86::i;:::-;1676:101;;1794:10;1812;:17;;;;1805:4;:24;;;;:::i;:::-;1794:36;;;;;;;;:::i;:::-;;;;;;;;;1787:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1591:246;;;:::o;1761:229:5:-;1813:14;1830:12;:10;:12::i;:::-;1813:29;;1874:6;1856:24;;:14;:12;:14::i;:::-;:24;;;1852:96;;1930:6;1903:34;;;;;;;;;;;:::i;:::-;;;;;;;;1852:96;1957:26;1976:6;1957:18;:26::i;:::-;1803:187;1761:229::o;1631:85:4:-;1677:7;1703:6;;;;;;;;;;;1696:13;;1631:85;:::o;1259:20:2:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2493:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;4346:203::-;4472:8;4431:16;:28;4448:10;4431:28;;;;;;;;;;;;;;;:38;4460:8;4431:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;4523:8;4496:46;;4511:10;4496:46;;;4533:8;4496:46;;;;;;:::i;:::-;;;;;;;;4346:203;;:::o;6429:155::-;6521:4;6544:33;6554:10;6566:2;6570:6;6544:9;:33::i;:::-;6537:40;;6429:155;;;;:::o;7141:422::-;7289:26;7302:4;7308:2;7312;7289:12;:26::i;:::-;7361:1;7343:2;:14;;;:19;;:154;;;;;7457:40;;;7378:119;;;7393:2;7378:35;;;7414:10;7426:4;7432:2;7436:4;;7378:63;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:119;;;;;7343:154;7326:231;;;7529:17;;;;;;;;;;;;;;7326:231;7141:422;;;;;:::o;2706:2656:3:-;2803:13;2832:23;2858:21;2871:7;2858:12;:21::i;:::-;2832:47;;2889:24;2916:22;2930:7;2916:13;:22::i;:::-;2889:49;;2948:22;2973:20;2985:7;2973:11;:20::i;:::-;2948:45;;3004:17;3267:9;3387;3509;3629;4074;4195;4316;4438:8;4558:9;4679:10;3044:1708;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3004:1758;;4773:18;4794:480;4967:17;4976:7;4967:8;:17::i;:::-;5155:25;5175:3;5155:13;:25::i;:::-;4872:360;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4794:13;:480::i;:::-;4773:501;;5349:4;5299:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;5285:70;;;;;;;2706:2656;;;:::o;1843:242::-;1902:13;1927:12;1942:85;1998:17;2007:7;1998:8;:17::i;:::-;1969:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;1942:6;:85::i;:::-;1927:100;;2044:9;2061;:16;;;;2054:4;:23;;;;:::i;:::-;2044:34;;;;;;;;:::i;:::-;;;;;;;;;2037:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1843:242;;;:::o;2091:278::-;2176:13;2205:12;2220:87;2278:17;2287:7;2278:8;:17::i;:::-;2247:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;2220:6;:87::i;:::-;2205:102;;2324:11;2343;:18;;;;2336:4;:25;;;;:::i;:::-;2324:38;;;;;;;;:::i;:::-;;;;;;;;;2317:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2091:278;;;:::o;1780:64:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;874:99:5:-;927:7;953:13;;;;;;;;;;;946:20;;874:99;:::o;2005:68:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1166:178:5:-;1524:13:4;:11;:13::i;:::-;1271:8:5::1;1255:13;;:24;;;;;;;;;;;;;;;;;;1328:8;1294:43;;1319:7;:5;:7::i;:::-;1294:43;;;;;;;;;;;;1166:178:::0;:::o;8746:90:2:-;8789:7;8821:8;8815:2;:14;;;;:::i;:::-;8808:21;;8746:90;:::o;7628:1082::-;7745:4;7761:12;7776:10;:8;:10::i;:::-;7761:25;;7796:27;7826:9;:15;7836:4;7826:15;;;;;;;;;;;;;;;;7796:45;;7851:29;7883:9;:13;7893:2;7883:13;;;;;;;;;;;;;;;;7851:45;;7926:6;7907:9;:15;7917:4;7907:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;7984:6;7967:9;:13;7977:2;7967:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;8071:9;:15;8081:4;8071:15;;;;;;;;;;;;;;;;;;;;;;;;;8066:245;;8102:22;8193:4;8175:9;:15;8185:4;8175:15;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;8150:4;8128:19;:26;;;;:::i;:::-;8127:71;;;;:::i;:::-;8102:96;;8217:9;8212:89;8236:14;8232:1;:18;8212:89;;;8275:11;8281:4;8275:5;:11::i;:::-;8252:3;;;;;;;8212:89;;;;8088:223;8066:245;8384:9;:13;8394:2;8384:13;;;;;;;;;;;;;;;;;;;;;;;;;8379:241;;8413:22;8504:4;8480:21;:28;;;;:::i;:::-;8455:4;8439:9;:13;8449:2;8439:13;;;;;;;;;;;;;;;;:20;;;;:::i;:::-;8438:71;;;;:::i;:::-;8413:96;;8528:9;8523:87;8547:14;8543:1;:18;8523:87;;;8586:9;8592:2;8586:5;:9::i;:::-;8563:3;;;;;;;8523:87;;;;8399:221;8379:241;8671:2;8635:47;;8665:4;8635:47;;930:42;;;;;;;;;;;;;;;;;920:53;;;;;;8675:6;8635:47;;;;;;:::i;:::-;;;;;;;;8699:4;8692:11;;;;;7628:1082;;;;;:::o;1789:162:4:-;1859:12;:10;:12::i;:::-;1848:23;;:7;:5;:7::i;:::-;:23;;;1844:101;;1921:12;:10;:12::i;:::-;1894:40;;;;;;;;;;;:::i;:::-;;;;;;;;1844:101;1789:162::o;1528:153:5:-;1617:13;;1610:20;;;;;;;;;;;1640:34;1665:8;1640:24;:34::i;:::-;1528:153;:::o;5368:515:3:-;5424:13;5462:1;5453:5;:10;5449:51;;5479:10;;;;;;;;;;;;;;;;;;;;;5449:51;5509:12;5524:5;5509:20;;5539:14;5563:75;5578:1;5570:4;:9;5563:75;;5595:8;;;;;:::i;:::-;;;;5625:2;5617:10;;;;;:::i;:::-;;;5563:75;;;5647:19;5679:6;5669:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5647:39;;5696:150;5712:1;5703:5;:10;5696:150;;5739:1;5729:11;;;;;:::i;:::-;;;5805:2;5797:5;:10;;;;:::i;:::-;5784:2;:24;;;;:::i;:::-;5771:39;;5754:6;5761;5754:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5833:2;5824:11;;;;;:::i;:::-;;;5696:150;;;5869:6;5855:21;;;;;5368:515;;;;:::o;1449:136::-;1509:7;1570:5;1553:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;1543:34;;;;;;1535:43;;1528:50;;1449:136;;;:::o;656:96:1:-;709:7;735:10;728:17;;656:96;:::o;476:3026:0:-;534:13;781:1;766:4;:11;:16;762:31;;784:9;;;;;;;;;;;;;;;;762:31;843:19;865:6;;;;;;;;;;;;;;;;;843:28;;1274:20;1333:1;1328;1314:4;:11;:15;;;;:::i;:::-;1313:21;;;;:::i;:::-;1308:1;:27;;;;:::i;:::-;1297:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1274:62;;1511:1;1504:5;1500:13;1612:2;1604:6;1600:15;1719:4;1770;1764:11;1758:4;1754:22;1682:1403;1803:6;1794:7;1791:19;1682:1403;;;1905:1;1896:7;1892:15;1881:26;;1943:7;1937:14;2586:4;2578:5;2574:2;2570:14;2566:25;2556:8;2552:40;2546:47;2535:9;2527:67;2639:1;2628:9;2624:17;2611:30;;2729:4;2721:5;2717:2;2713:14;2709:25;2699:8;2695:40;2689:47;2678:9;2670:67;2782:1;2771:9;2767:17;2754:30;;2871:4;2863:5;2860:1;2856:13;2852:24;2842:8;2838:39;2832:46;2821:9;2813:66;2924:1;2913:9;2909:17;2896:30;;3005:4;2998:5;2994:16;2984:8;2980:31;2974:38;2963:9;2955:58;3058:1;3047:9;3043:17;3030:30;;1828:1257;1682:1403;;;1686:104;;3243:1;3236:4;3230:11;3226:19;3263:1;3258:120;;;;3396:1;3391:71;;;;3219:243;;3258:120;3310:4;3306:1;3295:9;3291:17;3283:32;3359:4;3355:1;3344:9;3340:17;3332:32;3258:120;;3391:71;3443:4;3439:1;3428:9;3424:17;3416:32;3219:243;;1399:2073;;3489:6;3482:13;;;;476:3026;;;;:::o;9302:361:2:-;9378:1;9362:18;;:4;:18;;;9358:71;;9403:15;;;;;;;;;;;;;;9358:71;9439:10;9452:6;:12;9459:4;9452:12;;;;;;;;;;;;;;;9487:1;9465:6;:12;9472:4;9465:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;9452:37;;;;;;;;:::i;:::-;;;;;;;;;;9439:50;;9499:6;:12;9506:4;9499:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9534:11;:15;9546:2;9534:15;;;;;;;;;;;9527:22;;;9566:8;:12;9575:2;9566:12;;;;;;;;;;;;9559:19;;;;;;;;;;;9595:11;:15;9607:2;9595:15;;;;;;;;;;;;9588:22;;;;;;;;;;;9653:2;9649:1;9626:30;;9635:4;9626:30;;;;;;;;;;;;9348:315;9302:361;:::o;8842:454::-;8914:1;8900:16;;:2;:16;;;8896:72;;8939:18;;;;;;;;;;;;;;8896:72;9002:6;;:8;;;;;;;;;;;;;9031:10;9044:6;;9031:19;;9089:1;9065:26;;:8;:12;9074:2;9065:12;;;;;;;;;;;;;;;;;;;;;:26;;;9061:79;;9114:15;;;;;;;;;;;;;;9061:79;9165:2;9150:8;:12;9159:2;9150:12;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;9177:6;:10;9184:2;9177:10;;;;;;;;;;;;;;;9193:2;9177:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9244:1;9224:6;:10;9231:2;9224:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;9206:11;:15;9218:2;9206:15;;;;;;;;;;;:39;;;;9286:2;9282;9261:28;;9278:1;9261:28;;;;;;;;;;;;8886:410;8842:454;:::o;2905:187:4:-;2978:16;2997:6;;;;;;;;;;;2978:25;;3022:8;3013:6;;:17;;;;;;;;;;;;;;;;;;3076:8;3045:40;;3066:8;3045:40;;;;;;;;;;;;2968:124;2905:187;:::o;7:99:6:-;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:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:329::-;2091:6;2140:2;2128:9;2119:7;2115:23;2111:32;2108:119;;;2146:79;;:::i;:::-;2108:119;2266:1;2291:53;2336:7;2327:6;2316:9;2312:22;2291:53;:::i;:::-;2281:63;;2237:117;2032:329;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:118::-;2688:24;2706:5;2688:24;:::i;:::-;2683:3;2676:37;2601:118;;:::o;2725:222::-;2818:4;2856:2;2845:9;2841:18;2833:26;;2869:71;2937:1;2926:9;2922:17;2913:6;2869:71;:::i;:::-;2725:222;;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:474::-;3294:6;3302;3351:2;3339:9;3330:7;3326:23;3322:32;3319:119;;;3357:79;;:::i;:::-;3319:119;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3226:474;;;;;:::o;3706:90::-;3740:7;3783:5;3776:13;3769:21;3758:32;;3706:90;;;:::o;3802:109::-;3883:21;3898:5;3883:21;:::i;:::-;3878:3;3871:34;3802:109;;:::o;3917:210::-;4004:4;4042:2;4031:9;4027:18;4019:26;;4055:65;4117:1;4106:9;4102:17;4093:6;4055:65;:::i;:::-;3917:210;;;;:::o;4133:118::-;4220:24;4238:5;4220:24;:::i;:::-;4215:3;4208:37;4133:118;;:::o;4257:222::-;4350:4;4388:2;4377:9;4373:18;4365:26;;4401:71;4469:1;4458:9;4454:17;4445:6;4401:71;:::i;:::-;4257:222;;;;:::o;4485:619::-;4562:6;4570;4578;4627:2;4615:9;4606:7;4602:23;4598:32;4595:119;;;4633:79;;:::i;:::-;4595:119;4753:1;4778:53;4823:7;4814:6;4803:9;4799:22;4778:53;:::i;:::-;4768:63;;4724:117;4880:2;4906:53;4951:7;4942:6;4931:9;4927:22;4906:53;:::i;:::-;4896:63;;4851:118;5008:2;5034:53;5079:7;5070:6;5059:9;5055:22;5034:53;:::i;:::-;5024:63;;4979:118;4485:619;;;;;:::o;5110:86::-;5145:7;5185:4;5178:5;5174:16;5163:27;;5110:86;;;:::o;5202:112::-;5285:22;5301:5;5285:22;:::i;:::-;5280:3;5273:35;5202:112;;:::o;5320:214::-;5409:4;5447:2;5436:9;5432:18;5424:26;;5460:67;5524:1;5513:9;5509:17;5500:6;5460:67;:::i;:::-;5320:214;;;;:::o;5540:116::-;5610:21;5625:5;5610:21;:::i;:::-;5603:5;5600:32;5590:60;;5646:1;5643;5636:12;5590:60;5540:116;:::o;5662:133::-;5705:5;5743:6;5730:20;5721:29;;5759:30;5783:5;5759:30;:::i;:::-;5662:133;;;;:::o;5801:468::-;5866:6;5874;5923:2;5911:9;5902:7;5898:23;5894:32;5891:119;;;5929:79;;:::i;:::-;5891:119;6049:1;6074:53;6119:7;6110:6;6099:9;6095:22;6074:53;:::i;:::-;6064:63;;6020:117;6176:2;6202:50;6244:7;6235:6;6224:9;6220:22;6202:50;:::i;:::-;6192:60;;6147:115;5801:468;;;;;:::o;6275:329::-;6334:6;6383:2;6371:9;6362:7;6358:23;6354:32;6351:119;;;6389:79;;:::i;:::-;6351:119;6509:1;6534:53;6579:7;6570:6;6559:9;6555:22;6534:53;:::i;:::-;6524:63;;6480:117;6275:329;;;;:::o;6610:117::-;6719:1;6716;6709:12;6733:117;6842:1;6839;6832:12;6856:117;6965:1;6962;6955:12;6992:552;7049:8;7059:6;7109:3;7102:4;7094:6;7090:17;7086:27;7076:122;;7117:79;;:::i;:::-;7076:122;7230:6;7217:20;7207:30;;7260:18;7252:6;7249:30;7246:117;;;7282:79;;:::i;:::-;7246:117;7396:4;7388:6;7384:17;7372:29;;7450:3;7442:4;7434:6;7430:17;7420:8;7416:32;7413:41;7410:128;;;7457:79;;:::i;:::-;7410:128;6992:552;;;;;:::o;7550:963::-;7647:6;7655;7663;7671;7679;7728:3;7716:9;7707:7;7703:23;7699:33;7696:120;;;7735:79;;:::i;:::-;7696:120;7855:1;7880:53;7925:7;7916:6;7905:9;7901:22;7880:53;:::i;:::-;7870:63;;7826:117;7982:2;8008:53;8053:7;8044:6;8033:9;8029:22;8008:53;:::i;:::-;7998:63;;7953:118;8110:2;8136:53;8181:7;8172:6;8161:9;8157:22;8136:53;:::i;:::-;8126:63;;8081:118;8266:2;8255:9;8251:18;8238:32;8297:18;8289:6;8286:30;8283:117;;;8319:79;;:::i;:::-;8283:117;8432:64;8488:7;8479:6;8468:9;8464:22;8432:64;:::i;:::-;8414:82;;;;8209:297;7550:963;;;;;;;;:::o;8519:474::-;8587:6;8595;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8897:2;8923:53;8968:7;8959:6;8948:9;8944:22;8923:53;:::i;:::-;8913:63;;8868:118;8519:474;;;;;:::o;8999:180::-;9047:77;9044:1;9037:88;9144:4;9141:1;9134:15;9168:4;9165:1;9158:15;9185:320;9229:6;9266:1;9260:4;9256:12;9246:22;;9313:1;9307:4;9303:12;9334:18;9324:81;;9390:4;9382:6;9378:17;9368:27;;9324:81;9452:2;9444:6;9441:14;9421:18;9418:38;9415:84;;9471:18;;:::i;:::-;9415:84;9236:269;9185:320;;;:::o;9511:180::-;9559:77;9556:1;9549:88;9656:4;9653:1;9646:15;9680:4;9677:1;9670:15;9697:194;9737:4;9757:20;9775:1;9757:20;:::i;:::-;9752:25;;9791:20;9809:1;9791:20;:::i;:::-;9786:25;;9835:1;9832;9828:9;9820:17;;9859:1;9853:4;9850:11;9847:37;;;9864:18;;:::i;:::-;9847:37;9697:194;;;;:::o;9897:180::-;9945:77;9942:1;9935:88;10042:4;10039:1;10032:15;10066:4;10063:1;10056:15;10083:180;10131:77;10128:1;10121:88;10228:4;10225:1;10218:15;10252:4;10249:1;10242:15;10269:168;10352:11;10386:6;10381:3;10374:19;10426:4;10421:3;10417:14;10402:29;;10269:168;;;;:::o;10443:114::-;;:::o;10563:362::-;10704:3;10725:65;10788:1;10783:3;10725:65;:::i;:::-;10718:72;;10799:93;10888:3;10799:93;:::i;:::-;10917:1;10912:3;10908:11;10901:18;;10563:362;;;:::o;10931:748::-;11180:4;11218:3;11207:9;11203:19;11195:27;;11232:71;11300:1;11289:9;11285:17;11276:6;11232:71;:::i;:::-;11313:72;11381:2;11370:9;11366:18;11357:6;11313:72;:::i;:::-;11395;11463:2;11452:9;11448:18;11439:6;11395:72;:::i;:::-;11514:9;11508:4;11504:20;11499:2;11488:9;11484:18;11477:48;11542:130;11667:4;11542:130;:::i;:::-;11534:138;;10931:748;;;;;;:::o;11685:149::-;11721:7;11761:66;11754:5;11750:78;11739:89;;11685:149;;;:::o;11840:120::-;11912:23;11929:5;11912:23;:::i;:::-;11905:5;11902:34;11892:62;;11950:1;11947;11940:12;11892:62;11840:120;:::o;11966:141::-;12022:5;12053:6;12047:13;12038:22;;12069:32;12095:5;12069:32;:::i;:::-;11966:141;;;;:::o;12113:349::-;12182:6;12231:2;12219:9;12210:7;12206:23;12202:32;12199:119;;;12237:79;;:::i;:::-;12199:119;12357:1;12382:63;12437:7;12428:6;12417:9;12413:22;12382:63;:::i;:::-;12372:73;;12328:127;12113:349;;;;:::o;12468:148::-;12570:11;12607:3;12592:18;;12468:148;;;;:::o;12622:159::-;12762:11;12758:1;12750:6;12746:14;12739:35;12622:159;:::o;12787:400::-;12947:3;12968:84;13050:1;13045:3;12968:84;:::i;:::-;12961:91;;13061:93;13150:3;13061:93;:::i;:::-;13179:1;13174:3;13170:11;13163:18;;12787:400;;;:::o;13193:390::-;13299:3;13327:39;13360:5;13327:39;:::i;:::-;13382:89;13464:6;13459:3;13382:89;:::i;:::-;13375:96;;13480:65;13538:6;13533:3;13526:4;13519:5;13515:16;13480:65;:::i;:::-;13570:6;13565:3;13561:16;13554:23;;13303:280;13193:390;;;;:::o;13589:541::-;13822:3;13844:148;13988:3;13844:148;:::i;:::-;13837:155;;14009:95;14100:3;14091:6;14009:95;:::i;:::-;14002:102;;14121:3;14114:10;;13589:541;;;;:::o;14136:180::-;14184:77;14181:1;14174:88;14281:4;14278:1;14271:15;14305:4;14302:1;14295:15;14322:176;14354:1;14371:20;14389:1;14371:20;:::i;:::-;14366:25;;14405:20;14423:1;14405:20;:::i;:::-;14400:25;;14444:1;14434:35;;14449:18;;:::i;:::-;14434:35;14490:1;14487;14483:9;14478:14;;14322:176;;;;:::o;14504:146::-;14601:6;14596:3;14591;14578:30;14642:1;14633:6;14628:3;14624:16;14617:27;14504:146;;;:::o;14678:314::-;14774:3;14795:70;14858:6;14853:3;14795:70;:::i;:::-;14788:77;;14875:56;14924:6;14919:3;14912:5;14875:56;:::i;:::-;14956:29;14978:6;14956:29;:::i;:::-;14951:3;14947:39;14940:46;;14678:314;;;;;:::o;14998:660::-;15203:4;15241:3;15230:9;15226:19;15218:27;;15255:71;15323:1;15312:9;15308:17;15299:6;15255:71;:::i;:::-;15336:72;15404:2;15393:9;15389:18;15380:6;15336:72;:::i;:::-;15418;15486:2;15475:9;15471:18;15462:6;15418:72;:::i;:::-;15537:9;15531:4;15527:20;15522:2;15511:9;15507:18;15500:48;15565:86;15646:4;15637:6;15629;15565:86;:::i;:::-;15557:94;;14998:660;;;;;;;;:::o;15664:517::-;15804:66;15800:1;15792:6;15788:14;15781:90;15905:66;15900:2;15892:6;15888:15;15881:91;16006:66;16001:2;15993:6;15989:15;15982:91;16107:66;16102:2;16094:6;16090:15;16083:91;15664:517;:::o;16187:402::-;16347:3;16368:85;16450:2;16445:3;16368:85;:::i;:::-;16361:92;;16462:93;16551:3;16462:93;:::i;:::-;16580:2;16575:3;16571:12;16564:19;;16187:402;;;:::o;16595:315::-;16735:66;16731:1;16723:6;16719:14;16712:90;16836:66;16831:2;16823:6;16819:15;16812:91;16595:315;:::o;16916:402::-;17076:3;17097:85;17179:2;17174:3;17097:85;:::i;:::-;17090:92;;17191:93;17280:3;17191:93;:::i;:::-;17309:2;17304:3;17300:12;17293:19;;16916:402;;;:::o;17324:214::-;17464:66;17460:1;17452:6;17448:14;17441:90;17324:214;:::o;17544:400::-;17704:3;17725:84;17807:1;17802:3;17725:84;:::i;:::-;17718:91;;17818:93;17907:3;17818:93;:::i;:::-;17936:1;17931:3;17927:11;17920:18;;17544:400;;;:::o;17950:315::-;18090:66;18086:1;18078:6;18074:14;18067:90;18191:66;18186:2;18178:6;18174:15;18167:91;17950:315;:::o;18271:402::-;18431:3;18452:85;18534:2;18529:3;18452:85;:::i;:::-;18445:92;;18546:93;18635:3;18546:93;:::i;:::-;18664:2;18659:3;18655:12;18648:19;;18271:402;;;:::o;18679:315::-;18819:66;18815:1;18807:6;18803:14;18796:90;18920:66;18915:2;18907:6;18903:15;18896:91;18679:315;:::o;19000:402::-;19160:3;19181:85;19263:2;19258:3;19181:85;:::i;:::-;19174:92;;19275:93;19364:3;19275:93;:::i;:::-;19393:2;19388:3;19384:12;19377:19;;19000:402;;;:::o;19408:315::-;19548:66;19544:1;19536:6;19532:14;19525:90;19649:66;19644:2;19636:6;19632:15;19625:91;19408:315;:::o;19729:402::-;19889:3;19910:85;19992:2;19987:3;19910:85;:::i;:::-;19903:92;;20004:93;20093:3;20004:93;:::i;:::-;20122:2;20117:3;20113:12;20106:19;;19729:402;;;:::o;20137:315::-;20277:66;20273:1;20265:6;20261:14;20254:90;20378:66;20373:2;20365:6;20361:15;20354:91;20137:315;:::o;20458:402::-;20618:3;20639:85;20721:2;20716:3;20639:85;:::i;:::-;20632:92;;20733:93;20822:3;20733:93;:::i;:::-;20851:2;20846:3;20842:12;20835:19;;20458:402;;;:::o;20866:315::-;21006:66;21002:1;20994:6;20990:14;20983:90;21107:66;21102:2;21094:6;21090:15;21083:91;20866:315;:::o;21187:402::-;21347:3;21368:85;21450:2;21445:3;21368:85;:::i;:::-;21361:92;;21462:93;21551:3;21462:93;:::i;:::-;21580:2;21575:3;21571:12;21564:19;;21187:402;;;:::o;21595:315::-;21735:66;21731:1;21723:6;21719:14;21712:90;21836:66;21831:2;21823:6;21819:15;21812:91;21595:315;:::o;21916:402::-;22076:3;22097:85;22179:2;22174:3;22097:85;:::i;:::-;22090:92;;22191:93;22280:3;22191:93;:::i;:::-;22309:2;22304:3;22300:12;22293:19;;21916:402;;;:::o;22324:315::-;22464:66;22460:1;22452:6;22448:14;22441:90;22565:66;22560:2;22552:6;22548:15;22541:91;22324:315;:::o;22645:402::-;22805:3;22826:85;22908:2;22903:3;22826:85;:::i;:::-;22819:92;;22920:93;23009:3;22920:93;:::i;:::-;23038:2;23033:3;23029:12;23022:19;;22645:402;;;:::o;23053:315::-;23193:66;23189:1;23181:6;23177:14;23170:90;23294:66;23289:2;23281:6;23277:15;23270:91;23053:315;:::o;23374:402::-;23534:3;23555:85;23637:2;23632:3;23555:85;:::i;:::-;23548:92;;23649:93;23738:3;23649:93;:::i;:::-;23767:2;23762:3;23758:12;23751:19;;23374:402;;;:::o;23782:315::-;23922:66;23918:1;23910:6;23906:14;23899:90;24023:66;24018:2;24010:6;24006:15;23999:91;23782:315;:::o;24103:402::-;24263:3;24284:85;24366:2;24361:3;24284:85;:::i;:::-;24277:92;;24378:93;24467:3;24378:93;:::i;:::-;24496:2;24491:3;24487:12;24480:19;;24103:402;;;:::o;24511:315::-;24651:66;24647:1;24639:6;24635:14;24628:90;24752:66;24747:2;24739:6;24735:15;24728:91;24511:315;:::o;24832:402::-;24992:3;25013:85;25095:2;25090:3;25013:85;:::i;:::-;25006:92;;25107:93;25196:3;25107:93;:::i;:::-;25225:2;25220:3;25216:12;25209:19;;24832:402;;;:::o;25240:315::-;25380:66;25376:1;25368:6;25364:14;25357:90;25481:66;25476:2;25468:6;25464:15;25457:91;25240:315;:::o;25561:402::-;25721:3;25742:85;25824:2;25819:3;25742:85;:::i;:::-;25735:92;;25836:93;25925:3;25836:93;:::i;:::-;25954:2;25949:3;25945:12;25938:19;;25561:402;;;:::o;25969:315::-;26109:66;26105:1;26097:6;26093:14;26086:90;26210:66;26205:2;26197:6;26193:15;26186:91;25969:315;:::o;26290:402::-;26450:3;26471:85;26553:2;26548:3;26471:85;:::i;:::-;26464:92;;26565:93;26654:3;26565:93;:::i;:::-;26683:2;26678:3;26674:12;26667:19;;26290:402;;;:::o;26698:315::-;26838:66;26834:1;26826:6;26822:14;26815:90;26939:66;26934:2;26926:6;26922:15;26915:91;26698:315;:::o;27019:402::-;27179:3;27200:85;27282:2;27277:3;27200:85;:::i;:::-;27193:92;;27294:93;27383:3;27294:93;:::i;:::-;27412:2;27407:3;27403:12;27396:19;;27019:402;;;:::o;27427:156::-;27567:8;27563:1;27555:6;27551:14;27544:32;27427:156;:::o;27589:400::-;27749:3;27770:84;27852:1;27847:3;27770:84;:::i;:::-;27763:91;;27863:93;27952:3;27863:93;:::i;:::-;27981:1;27976:3;27972:11;27965:18;;27589:400;;;:::o;27995:8631::-;31185:3;31207:148;31351:3;31207:148;:::i;:::-;31200:155;;31372:148;31516:3;31372:148;:::i;:::-;31365:155;;31537:95;31628:3;31619:6;31537:95;:::i;:::-;31530:102;;31649:148;31793:3;31649:148;:::i;:::-;31642:155;;31814:148;31958:3;31814:148;:::i;:::-;31807:155;;31979:95;32070:3;32061:6;31979:95;:::i;:::-;31972:102;;32091:148;32235:3;32091:148;:::i;:::-;32084:155;;32256:148;32400:3;32256:148;:::i;:::-;32249:155;;32421:95;32512:3;32503:6;32421:95;:::i;:::-;32414:102;;32533:148;32677:3;32533:148;:::i;:::-;32526:155;;32698:148;32842:3;32698:148;:::i;:::-;32691:155;;32863:95;32954:3;32945:6;32863:95;:::i;:::-;32856:102;;32975:148;33119:3;32975:148;:::i;:::-;32968:155;;33140:148;33284:3;33140:148;:::i;:::-;33133:155;;33305:148;33449:3;33305:148;:::i;:::-;33298:155;;33470:148;33614:3;33470:148;:::i;:::-;33463:155;;33635:148;33779:3;33635:148;:::i;:::-;33628:155;;33800:148;33944:3;33800:148;:::i;:::-;33793:155;;33965:95;34056:3;34047:6;33965:95;:::i;:::-;33958:102;;34077:148;34221:3;34077:148;:::i;:::-;34070:155;;34242:148;34386:3;34242:148;:::i;:::-;34235:155;;34407:95;34498:3;34489:6;34407:95;:::i;:::-;34400:102;;34519:148;34663:3;34519:148;:::i;:::-;34512:155;;34684:148;34828:3;34684:148;:::i;:::-;34677:155;;34849:95;34940:3;34931:6;34849:95;:::i;:::-;34842:102;;34961:148;35105:3;34961:148;:::i;:::-;34954:155;;35126:148;35270:3;35126:148;:::i;:::-;35119:155;;35291:95;35382:3;35373:6;35291:95;:::i;:::-;35284:102;;35403:148;35547:3;35403:148;:::i;:::-;35396:155;;35568:148;35712:3;35568:148;:::i;:::-;35561:155;;35733:95;35824:3;35815:6;35733:95;:::i;:::-;35726:102;;35845:148;35989:3;35845:148;:::i;:::-;35838:155;;36010:148;36154:3;36010:148;:::i;:::-;36003:155;;36175:95;36266:3;36257:6;36175:95;:::i;:::-;36168:102;;36287:148;36431:3;36287:148;:::i;:::-;36280:155;;36452:148;36596:3;36452:148;:::i;:::-;36445:155;;36617:3;36610:10;;27995:8631;;;;;;;;;;;;;:::o;36632:214::-;36772:66;36768:1;36760:6;36756:14;36749:90;36632:214;:::o;36852:402::-;37012:3;37033:85;37115:2;37110:3;37033:85;:::i;:::-;37026:92;;37127:93;37216:3;37127:93;:::i;:::-;37245:2;37240:3;37236:12;37229:19;;36852:402;;;:::o;37260:442::-;37400:66;37396:1;37388:6;37384:14;37377:90;37501:34;37496:2;37488:6;37484:15;37477:59;37570:66;37565:2;37557:6;37553:15;37546:91;37671:23;37666:2;37658:6;37654:15;37647:48;37260:442;:::o;37708:404::-;37868:3;37889:86;37971:3;37966;37889:86;:::i;:::-;37882:93;;37984;38073:3;37984:93;:::i;:::-;38102:3;38097;38093:13;38086:20;;37708:404;;;:::o;38118:214::-;38258:66;38254:1;38246:6;38242:14;38235:90;38118:214;:::o;38338:400::-;38498:3;38519:84;38601:1;38596:3;38519:84;:::i;:::-;38512:91;;38612:93;38701:3;38612:93;:::i;:::-;38730:1;38725:3;38721:11;38714:18;;38338:400;;;:::o;38744:1233::-;39227:3;39249:148;39393:3;39249:148;:::i;:::-;39242:155;;39414:95;39505:3;39496:6;39414:95;:::i;:::-;39407:102;;39526:148;39670:3;39526:148;:::i;:::-;39519:155;;39691:95;39782:3;39773:6;39691:95;:::i;:::-;39684:102;;39803:148;39947:3;39803:148;:::i;:::-;39796:155;;39968:3;39961:10;;38744:1233;;;;;:::o;39983:179::-;40123:31;40119:1;40111:6;40107:14;40100:55;39983:179;:::o;40168:402::-;40328:3;40349:85;40431:2;40426:3;40349:85;:::i;:::-;40342:92;;40443:93;40532:3;40443:93;:::i;:::-;40561:2;40556:3;40552:12;40545:19;;40168:402;;;:::o;40576:541::-;40809:3;40831:148;40975:3;40831:148;:::i;:::-;40824:155;;40996:95;41087:3;41078:6;40996:95;:::i;:::-;40989:102;;41108:3;41101:10;;40576:541;;;;:::o;41123:158::-;41263:10;41259:1;41251:6;41247:14;41240:34;41123:158;:::o;41287:400::-;41447:3;41468:84;41550:1;41545:3;41468:84;:::i;:::-;41461:91;;41561:93;41650:3;41561:93;:::i;:::-;41679:1;41674:3;41670:11;41663:18;;41287:400;;;:::o;41693:541::-;41926:3;41948:148;42092:3;41948:148;:::i;:::-;41941:155;;42113:95;42204:3;42195:6;42113:95;:::i;:::-;42106:102;;42225:3;42218:10;;41693:541;;;;:::o;42240:160::-;42380:12;42376:1;42368:6;42364:14;42357:36;42240:160;:::o;42406:402::-;42566:3;42587:85;42669:2;42664:3;42587:85;:::i;:::-;42580:92;;42681:93;42770:3;42681:93;:::i;:::-;42799:2;42794:3;42790:12;42783:19;;42406:402;;;:::o;42814:541::-;43047:3;43069:148;43213:3;43069:148;:::i;:::-;43062:155;;43234:95;43325:3;43316:6;43234:95;:::i;:::-;43227:102;;43346:3;43339:10;;42814:541;;;;:::o;43361:102::-;43403:8;43450:5;43447:1;43443:13;43422:34;;43361:102;;;:::o;43469:848::-;43530:5;43537:4;43561:6;43552:15;;43585:5;43576:14;;43599:712;43620:1;43610:8;43607:15;43599:712;;;43715:4;43710:3;43706:14;43700:4;43697:24;43694:50;;;43724:18;;:::i;:::-;43694:50;43774:1;43764:8;43760:16;43757:451;;;44189:4;44182:5;44178:16;44169:25;;43757:451;44239:4;44233;44229:15;44221:23;;44269:32;44292:8;44269:32;:::i;:::-;44257:44;;43599:712;;;43469:848;;;;;;;:::o;44323:1073::-;44377:5;44568:8;44558:40;;44589:1;44580:10;;44591:5;;44558:40;44617:4;44607:36;;44634:1;44625:10;;44636:5;;44607:36;44703:4;44751:1;44746:27;;;;44787:1;44782:191;;;;44696:277;;44746:27;44764:1;44755:10;;44766:5;;;44782:191;44827:3;44817:8;44814:17;44811:43;;;44834:18;;:::i;:::-;44811:43;44883:8;44880:1;44876:16;44867:25;;44918:3;44911:5;44908:14;44905:40;;;44925:18;;:::i;:::-;44905:40;44958:5;;;44696:277;;45082:2;45072:8;45069:16;45063:3;45057:4;45054:13;45050:36;45032:2;45022:8;45019:16;45014:2;45008:4;45005:12;45001:35;44985:111;44982:246;;;45138:8;45132:4;45128:19;45119:28;;45173:3;45166:5;45163:14;45160:40;;;45180:18;;:::i;:::-;45160:40;45213:5;;44982:246;45253:42;45291:3;45281:8;45275:4;45272:1;45253:42;:::i;:::-;45238:57;;;;45327:4;45322:3;45318:14;45311:5;45308:25;45305:51;;;45336:18;;:::i;:::-;45305:51;45385:4;45378:5;45374:16;45365:25;;44323:1073;;;;;;:::o;45402:281::-;45460:5;45484:23;45502:4;45484:23;:::i;:::-;45476:31;;45528:25;45544:8;45528:25;:::i;:::-;45516:37;;45572:104;45609:66;45599:8;45593:4;45572:104;:::i;:::-;45563:113;;45402:281;;;;:::o;45689:185::-;45729:1;45746:20;45764:1;45746:20;:::i;:::-;45741:25;;45780:20;45798:1;45780:20;:::i;:::-;45775:25;;45819:1;45809:35;;45824:18;;:::i;:::-;45809:35;45866:1;45863;45859:9;45854:14;;45689:185;;;;:::o;45880:233::-;45919:3;45942:24;45960:5;45942:24;:::i;:::-;45933:33;;45988:66;45981:5;45978:77;45975:103;;46058:18;;:::i;:::-;45975:103;46105:1;46098:5;46094:13;46087:20;;45880:233;;;:::o;46119:180::-;46167:77;46164:1;46157:88;46264:4;46261:1;46254:15;46288:4;46285:1;46278:15;46305:191;46345:3;46364:20;46382:1;46364:20;:::i;:::-;46359:25;;46398:20;46416:1;46398:20;:::i;:::-;46393:25;;46441:1;46438;46434:9;46427:16;;46462:3;46459:1;46456:10;46453:36;;;46469:18;;:::i;:::-;46453:36;46305:191;;;;:::o;46502:275::-;46634:3;46656:95;46747:3;46738:6;46656:95;:::i;:::-;46649:102;;46768:3;46761:10;;46502:275;;;;:::o;46783:410::-;46823:7;46846:20;46864:1;46846:20;:::i;:::-;46841:25;;46880:20;46898:1;46880:20;:::i;:::-;46875:25;;46935:1;46932;46928:9;46957:30;46975:11;46957:30;:::i;:::-;46946:41;;47136:1;47127:7;47123:15;47120:1;47117:22;47097:1;47090:9;47070:83;47047:139;;47166:18;;:::i;:::-;47047:139;46831:362;46783:410;;;;:::o

Swarm Source

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