ETH Price: $3,424.85 (-0.45%)
Gas: 2 Gwei

Token

Avastars Print Registry (APR)
 

Overview

Max Total Supply

28 APR

Holders

17

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
scaly2018.eth
Balance
1 APR
0x51ec5e1b8B3C4C6baE49619e657F94C4AD577b45
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:
AvastarPrintRegistry

Compiler Version
v0.5.0+commit.1d4f565a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-02-14
*/

/**************
 * A registry of provably authentic physical prints and authentication NFCs of the Avastars
 * (https://avastars.io) project.
 *
 * In order to purchase a print or NFC you must be able to prove ownership of the
 * Avastar. This is done by sending payment for the print or NFC from the account address that
 * holds the Avastar itself. There are three types of purchases. One is a high quality digital
 * print of your Avastar accompanied by an authentication NFC. You may also
 * purchase the NFC by itself if you want to print your own Avastar. There is a Misc purchase
 * option as well for a potential future item added to the store.
 *
 * To purchase, confirm the price (in wei) of the item you would like to purchase by
 * calling the pricePer* function in the contract. Next, execute the purchase
 * function for the corresponding item sending the necessary amount in ETH. If you are in
 * the USA the item price includes shipping. There is a price for items shipped
 * internationally so if you are purchasing from outside the USA make sure you send
 * the higher value noted with "IntlShip" in the item's variable name.
 *
 * Please also include a contact method in your purchase transaction. You will have to
 * contact us with your mailing address so we know where to send your print! That information
 * must come from the contact method indicated at time of purchase.
 *
 * Prices subject to change without notice. No returns or exchanges.
 *
 * Prints produced by Art Blocks LLC, Houston TX. For information or to send
 * your mailing address after a purchase please contact us at [email protected].
 *
 * Copyright Art Blocks LLC 2020. www.artblocks.io.
 *************/



// File: openzeppelin-solidity/contracts/introspection/IERC165.sol

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * [EIP](https://eips.ethereum.org/EIPS/eip-165).
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others (`ERC165Checker`).
 *
 * For an implementation, see `ERC165`.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified)
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721.sol

pragma solidity ^0.5.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
contract IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of NFTs in `owner`'s account.
     */
    function balanceOf(address owner) public view returns (uint256 balance);

    /**
     * @dev Returns the owner of the NFT specified by `tokenId`.
     */
    function ownerOf(uint256 tokenId) public view returns (address owner);

    /**
     * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to
     * another (`to`).
     *
     *
     *
     * Requirements:
     * - `from`, `to` cannot be zero.
     * - `tokenId` must be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this
     * NFT by either `approve` or `setApproveForAll`.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) public;
    /**
     * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to
     * another (`to`).
     *
     * Requirements:
     * - If the caller is not `from`, it must be approved to move this NFT by
     * either `approve` or `setApproveForAll`.
     */
    function transferFrom(address from, address to, uint256 tokenId) public;
    function approve(address to, uint256 tokenId) public;
    function getApproved(uint256 tokenId) public view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) public;
    function isApprovedForAll(address owner, address operator) public view returns (bool);


    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public;
}

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol

pragma solidity ^0.5.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
contract IERC721Receiver {
    /**
     * @notice Handle the receipt of an NFT
     * @dev The ERC721 smart contract calls this function on the recipient
     * after a `safeTransfer`. This function MUST return the function selector,
     * otherwise the caller will revert the transaction. The selector to be
     * returned can be obtained as `this.onERC721Received.selector`. This
     * function MAY throw to revert and reject the transfer.
     * Note: the ERC721 contract address is always the message sender.
     * @param operator The address which called `safeTransferFrom` function
     * @param from The address which previously owned the token
     * @param tokenId The NFT identifier which is being transferred
     * @param data Additional data with no specified format
     * @return bytes4 `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data)
    public returns (bytes4);
}

// File: openzeppelin-solidity/contracts/math/SafeMath.sol



pragma solidity ^0.5.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, "SafeMath: division by zero");
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

// File: openzeppelin-solidity/contracts/utils/Address.sol

pragma solidity ^0.5.0;

/**
 * @dev Collection of functions related to the address type,
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * This test is non-exhaustive, and there may be false-negatives: during the
     * execution of a contract's constructor, its address will be reported as
     * not containing a contract.
     *
     * > It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}

// File: openzeppelin-solidity/contracts/drafts/Counters.sol

pragma solidity ^0.5.0;


/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 * Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the SafeMath
 * overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never
 * directly accessed.
 */
library Counters {
    using SafeMath for uint256;

    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        counter._value += 1;
    }

    function decrement(Counter storage counter) internal {
        counter._value = counter._value.sub(1);
    }
}

// File: openzeppelin-solidity/contracts/introspection/ERC165.sol

pragma solidity ^0.5.0;


/**
 * @dev Implementation of the `IERC165` interface.
 *
 * Contracts may inherit from this and call `_registerInterface` to declare
 * their support of an interface.
 */
contract ERC165 is IERC165 {
    /*
     * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7
     */
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;

    /**
     * @dev Mapping of interface ids to whether or not it's supported.
     */
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () internal {
        // Derived contracts need only register support for their own interfaces,
        // we register support for ERC165 itself here
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    /**
     * @dev See `IERC165.supportsInterface`.
     *
     * Time complexity O(1), guaranteed to always use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    /**
     * @dev Registers the contract as an implementer of the interface defined by
     * `interfaceId`. Support of the actual ERC165 interface is automatic and
     * registering its interface id is not required.
     *
     * See `IERC165.supportsInterface`.
     *
     * Requirements:
     *
     * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).
     */
    function _registerInterface(bytes4 interfaceId) internal {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

// File: openzeppelin-solidity/contracts/token/ERC721/ERC721.sol

pragma solidity ^0.5.0;







/**
 * @title ERC721 Non-Fungible Token Standard basic implementation
 * @dev see https://eips.ethereum.org/EIPS/eip-721
 */
contract ERC721 is ERC165, IERC721 {
    using SafeMath for uint256;
    using Address for address;
    using Counters for Counters.Counter;

    // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`
    bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;

    // Mapping from token ID to owner
    mapping (uint256 => address) private _tokenOwner;

    // Mapping from token ID to approved address
    mapping (uint256 => address) private _tokenApprovals;

    // Mapping from owner to number of owned token
    mapping (address => Counters.Counter) private _ownedTokensCount;

    // Mapping from owner to operator approvals
    mapping (address => mapping (address => bool)) private _operatorApprovals;

    /*
     *     bytes4(keccak256('balanceOf(address)')) == 0x70a08231
     *     bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e
     *     bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3
     *     bytes4(keccak256('getApproved(uint256)')) == 0x081812fc
     *     bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465
     *     bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c
     *     bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd
     *     bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e
     *     bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde
     *
     *     => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^
     *        0xa22cb465 ^ 0xe985e9c ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd
     */
    bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;

    constructor () public {
        // register the supported interfaces to conform to ERC721 via ERC165
        _registerInterface(_INTERFACE_ID_ERC721);
    }

    /**
     * @dev Gets the balance of the specified address.
     * @param owner address to query the balance of
     * @return uint256 representing the amount owned by the passed address
     */
    function balanceOf(address owner) public view returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");

        return _ownedTokensCount[owner].current();
    }

    /**
     * @dev Gets the owner of the specified token ID.
     * @param tokenId uint256 ID of the token to query the owner of
     * @return address currently marked as the owner of the given token ID
     */
    function ownerOf(uint256 tokenId) public view returns (address) {
        address owner = _tokenOwner[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");

        return owner;
    }

    /**
     * @dev Approves another address to transfer the given token ID
     * The zero address indicates there is no approved address.
     * There can only be one approved address per token at a given time.
     * Can only be called by the token owner or an approved operator.
     * @param to address to be approved for the given token ID
     * @param tokenId uint256 ID of the token to be approved
     */
    function approve(address to, uint256 tokenId) public {
        address owner = ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(msg.sender == owner || isApprovedForAll(owner, msg.sender),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev Gets the approved address for a token ID, or zero if no address set
     * Reverts if the token ID does not exist.
     * @param tokenId uint256 ID of the token to query the approval of
     * @return address currently approved for the given token ID
     */
    function getApproved(uint256 tokenId) public view returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev Sets or unsets the approval of a given operator
     * An operator is allowed to transfer all tokens of the sender on their behalf.
     * @param to operator address to set the approval
     * @param approved representing the status of the approval to be set
     */
    function setApprovalForAll(address to, bool approved) public {
        require(to != msg.sender, "ERC721: approve to caller");

        _operatorApprovals[msg.sender][to] = approved;
        emit ApprovalForAll(msg.sender, to, approved);
    }

    /**
     * @dev Tells whether an operator is approved by a given owner.
     * @param owner owner address which you want to query the approval of
     * @param operator operator address which you want to query the approval of
     * @return bool whether the given operator is approved by the given owner
     */
    function isApprovedForAll(address owner, address operator) public view returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev Transfers the ownership of a given token ID to another address.
     * Usage of this method is discouraged, use `safeTransferFrom` whenever possible.
     * Requires the msg.sender to be the owner, approved, or operator.
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function transferFrom(address from, address to, uint256 tokenId) public {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved");

        _transferFrom(from, to, tokenId);
    }

    /**
     * @dev Safely transfers the ownership of a given token ID to another address
     * If the target address is a contract, it must implement `onERC721Received`,
     * which is called upon a safe transfer, and return the magic value
     * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
     * the transfer is reverted.
     * Requires the msg.sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) public {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev Safely transfers the ownership of a given token ID to another address
     * If the target address is a contract, it must implement `onERC721Received`,
     * which is called upon a safe transfer, and return the magic value
     * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
     * the transfer is reverted.
     * Requires the msg.sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes data to send along with a safe transfer check
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public {
        transferFrom(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether the specified token exists.
     * @param tokenId uint256 ID of the token to query the existence of
     * @return bool whether the token exists
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        address owner = _tokenOwner[tokenId];
        return owner != address(0);
    }

    /**
     * @dev Returns whether the given spender can transfer a given token ID.
     * @param spender address of the spender to query
     * @param tokenId uint256 ID of the token to be transferred
     * @return bool whether the msg.sender is approved for the given token ID,
     * is an operator of the owner, or is the owner of the token
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Internal function to mint a new token.
     * Reverts if the given token ID already exists.
     * @param to The address that will own the minted token
     * @param tokenId uint256 ID of the token to be minted
     */
    function _mint(address to, uint256 tokenId) internal {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _tokenOwner[tokenId] = to;
        _ownedTokensCount[to].increment();

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

    /**
     * @dev Internal function to burn a specific token.
     * Reverts if the token does not exist.
     * Deprecated, use _burn(uint256) instead.
     * @param owner owner of the token to burn
     * @param tokenId uint256 ID of the token being burned
     */
    function _burn(address owner, uint256 tokenId) internal {
        require(ownerOf(tokenId) == owner, "ERC721: burn of token that is not own");

        _clearApproval(tokenId);

        _ownedTokensCount[owner].decrement();
        _tokenOwner[tokenId] = address(0);

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Internal function to burn a specific token.
     * Reverts if the token does not exist.
     * @param tokenId uint256 ID of the token being burned
     */
    function _burn(uint256 tokenId) internal {
        _burn(ownerOf(tokenId), tokenId);
    }

    /**
     * @dev Internal function to transfer ownership of a given token ID to another address.
     * As opposed to transferFrom, this imposes no restrictions on msg.sender.
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function _transferFrom(address from, address to, uint256 tokenId) internal {
        require(ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _clearApproval(tokenId);

        _ownedTokensCount[from].decrement();
        _ownedTokensCount[to].increment();

        _tokenOwner[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Internal function to invoke `onERC721Received` on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * This function is deprecated.
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        internal returns (bool)
    {
        if (!to.isContract()) {
            return true;
        }

        bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data);
        return (retval == _ERC721_RECEIVED);
    }

    /**
     * @dev Private function to clear current approval of a given token ID.
     * @param tokenId uint256 ID of the token to be transferred
     */
    function _clearApproval(uint256 tokenId) private {
        if (_tokenApprovals[tokenId] != address(0)) {
            _tokenApprovals[tokenId] = address(0);
        }
    }
}

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Enumerable.sol

pragma solidity ^0.5.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
contract IERC721Enumerable is IERC721 {
    function totalSupply() public view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId);

    function tokenByIndex(uint256 index) public view returns (uint256);
}

// File: openzeppelin-solidity/contracts/token/ERC721/ERC721Enumerable.sol

pragma solidity ^0.5.0;




/**
 * @title ERC-721 Non-Fungible Token with optional enumeration extension logic
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
contract ERC721Enumerable is ERC165, ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => uint256[]) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    /*
     *     bytes4(keccak256('totalSupply()')) == 0x18160ddd
     *     bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59
     *     bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7
     *
     *     => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63
     */
    bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;

    /**
     * @dev Constructor function.
     */
    constructor () public {
        // register the supported interface to conform to ERC721Enumerable via ERC165
        _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);
    }

    /**
     * @dev Gets the token ID at a given index of the tokens list of the requested owner.
     * @param owner address owning the tokens list to be accessed
     * @param index uint256 representing the index to be accessed of the requested tokens list
     * @return uint256 token ID at the given index of the tokens list owned by the requested address
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) {
        require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev Gets the total amount of tokens stored by the contract.
     * @return uint256 representing the total amount of tokens
     */
    function totalSupply() public view returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev Gets the token ID at a given index of all the tokens in this contract
     * Reverts if the index is greater or equal to the total number of tokens.
     * @param index uint256 representing the index to be accessed of the tokens list
     * @return uint256 token ID at the given index of the tokens list
     */
    function tokenByIndex(uint256 index) public view returns (uint256) {
        require(index < totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Internal function to transfer ownership of a given token ID to another address.
     * As opposed to transferFrom, this imposes no restrictions on msg.sender.
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function _transferFrom(address from, address to, uint256 tokenId) internal {
        super._transferFrom(from, to, tokenId);

        _removeTokenFromOwnerEnumeration(from, tokenId);

        _addTokenToOwnerEnumeration(to, tokenId);
    }

    /**
     * @dev Internal function to mint a new token.
     * Reverts if the given token ID already exists.
     * @param to address the beneficiary that will own the minted token
     * @param tokenId uint256 ID of the token to be minted
     */
    function _mint(address to, uint256 tokenId) internal {
        super._mint(to, tokenId);

        _addTokenToOwnerEnumeration(to, tokenId);

        _addTokenToAllTokensEnumeration(tokenId);
    }

    /**
     * @dev Internal function to burn a specific token.
     * Reverts if the token does not exist.
     * Deprecated, use _burn(uint256) instead.
     * @param owner owner of the token to burn
     * @param tokenId uint256 ID of the token being burned
     */
    function _burn(address owner, uint256 tokenId) internal {
        super._burn(owner, tokenId);

        _removeTokenFromOwnerEnumeration(owner, tokenId);
        // Since tokenId will be deleted, we can clear its slot in _ownedTokensIndex to trigger a gas refund
        _ownedTokensIndex[tokenId] = 0;

        _removeTokenFromAllTokensEnumeration(tokenId);
    }

    /**
     * @dev Gets the list of token IDs of the requested owner.
     * @param owner address owning the tokens
     * @return uint256[] List of token IDs owned by the requested address
     */
    function _tokensOfOwner(address owner) internal view returns (uint256[] storage) {
        return _ownedTokens[owner];
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        _ownedTokensIndex[tokenId] = _ownedTokens[to].length;
        _ownedTokens[to].push(tokenId);
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the _ownedTokensIndex mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _ownedTokens[from].length.sub(1);
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        _ownedTokens[from].length--;

        // Note that _ownedTokensIndex[tokenId] hasn't been cleared: it still points to the old slot (now occupied by
        // lastTokenId, or just over the end of the array if the token was the last one).
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length.sub(1);
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        _allTokens.length--;
        _allTokensIndex[tokenId] = 0;
    }
}

// File: openzeppelin-solidity/contracts/access/Roles.sol

pragma solidity ^0.5.0;

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev Give an account access to this role.
     */
    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
    }

    /**
     * @dev Remove an account's access to this role.
     */
    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

    /**
     * @dev Check if an account has this role.
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0), "Roles: account is the zero address");
        return role.bearer[account];
    }
}

// File: openzeppelin-solidity/contracts/access/roles/WhitelistAdminRole.sol

pragma solidity ^0.5.0;


/**
 * @title WhitelistAdminRole
 * @dev WhitelistAdmins are responsible for assigning and removing Whitelisted accounts.
 */
contract WhitelistAdminRole {
    using Roles for Roles.Role;

    event WhitelistAdminAdded(address indexed account);
    event WhitelistAdminRemoved(address indexed account);

    Roles.Role private _whitelistAdmins;

    constructor () internal {
        _addWhitelistAdmin(msg.sender);
    }

    modifier onlyWhitelistAdmin() {
        require(isWhitelistAdmin(msg.sender), "WhitelistAdminRole: caller does not have the WhitelistAdmin role");
        _;
    }

    function isWhitelistAdmin(address account) public view returns (bool) {
        return _whitelistAdmins.has(account);
    }

    function addWhitelistAdmin(address account) public onlyWhitelistAdmin {
        _addWhitelistAdmin(account);
    }

    function renounceWhitelistAdmin() public {
        _removeWhitelistAdmin(msg.sender);
    }

    function _addWhitelistAdmin(address account) internal {
        _whitelistAdmins.add(account);
        emit WhitelistAdminAdded(account);
    }

    function _removeWhitelistAdmin(address account) internal {
        _whitelistAdmins.remove(account);
        emit WhitelistAdminRemoved(account);
    }
}

// File: openzeppelin-solidity/contracts/access/roles/WhitelistedRole.sol

pragma solidity ^0.5.0;



/**
 * @title WhitelistedRole
 * @dev Whitelisted accounts have been approved by a WhitelistAdmin to perform certain actions (e.g. participate in a
 * crowdsale). This role is special in that the only accounts that can add it are WhitelistAdmins (who can also remove
 * it), and not Whitelisteds themselves.
 */
contract WhitelistedRole is WhitelistAdminRole {
    using Roles for Roles.Role;

    event WhitelistedAdded(address indexed account);
    event WhitelistedRemoved(address indexed account);

    Roles.Role private _whitelisteds;

    modifier onlyWhitelisted() {
        require(isWhitelisted(msg.sender), "WhitelistedRole: caller does not have the Whitelisted role");
        _;
    }

    function isWhitelisted(address account) public view returns (bool) {
        return _whitelisteds.has(account);
    }

    function addWhitelisted(address account) public onlyWhitelistAdmin {
        _addWhitelisted(account);
    }

    function removeWhitelisted(address account) public onlyWhitelistAdmin {
        _removeWhitelisted(account);
    }

    function renounceWhitelisted() public {
        _removeWhitelisted(msg.sender);
    }

    function _addWhitelisted(address account) internal {
        _whitelisteds.add(account);
        emit WhitelistedAdded(account);
    }

    function _removeWhitelisted(address account) internal {
        _whitelisteds.remove(account);
        emit WhitelistedRemoved(account);
    }
}

// File: contracts/Strings.sol

pragma solidity ^0.5.0;

//https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol
library Strings {

    function strConcat(string memory _a, string memory _b) internal pure returns (string memory _concatenatedString) {
        return strConcat(_a, _b, "", "", "");
    }

    function strConcat(string memory _a, string memory _b, string memory _c) internal pure returns (string memory _concatenatedString) {
        return strConcat(_a, _b, _c, "", "");
    }

    function strConcat(string memory _a, string memory _b, string memory _c, string memory _d) internal pure returns (string memory _concatenatedString) {
        return strConcat(_a, _b, _c, _d, "");
    }

    function strConcat(string memory _a, string memory _b, string memory _c, string memory _d, string memory _e) internal pure returns (string memory _concatenatedString) {
        bytes memory _ba = bytes(_a);
        bytes memory _bb = bytes(_b);
        bytes memory _bc = bytes(_c);
        bytes memory _bd = bytes(_d);
        bytes memory _be = bytes(_e);
        string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length);
        bytes memory babcde = bytes(abcde);
        uint k = 0;
        uint i = 0;
        for (i = 0; i < _ba.length; i++) {
            babcde[k++] = _ba[i];
        }
        for (i = 0; i < _bb.length; i++) {
            babcde[k++] = _bb[i];
        }
        for (i = 0; i < _bc.length; i++) {
            babcde[k++] = _bc[i];
        }
        for (i = 0; i < _bd.length; i++) {
            babcde[k++] = _bd[i];
        }
        for (i = 0; i < _be.length; i++) {
            babcde[k++] = _be[i];
        }
        return string(babcde);
    }

    function uint2str(uint _i) internal pure returns (string memory _uintAsString) {
        if (_i == 0) {
            return "0";
        }
        uint j = _i;
        uint len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len - 1;
        while (_i != 0) {
            bstr[k--] = byte(uint8(48 + _i % 10));
            _i /= 10;
        }
        return string(bstr);
    }
}

// File: contracts/CustomERC721Metadata.sol

pragma solidity ^0.5.0;



/**
 * ERC721 base contract without the concept of tokenUri as this is managed by the parent
 */

contract CustomERC721Metadata is ERC165, ERC721, ERC721Enumerable {

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;
    /**
     * 0x5b5e139f ===
     *     bytes4(keccak256('name()')) ^
     *     bytes4(keccak256('symbol()')) ^
     *     bytes4(keccak256('tokenURI(uint256)'))
     */

    /**
     * @dev Constructor function
     */
    constructor (string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;

        // register the supported interfaces to conform to ERC721 via ERC165
        _registerInterface(_INTERFACE_ID_ERC721_METADATA);
    }

    /**
     * @dev Gets the token name
     * @return string representing the token name
     */
    function name() external view returns (string memory) {
        return _name;
    }

    /**
     * @dev Gets the token symbol
     * @return string representing the token symbol
     */
    function symbol() external view returns (string memory) {
        return _symbol;
    }

}


pragma solidity ^0.5.0;

interface AvastarsInterface {

    function ownerOf (uint256 _avastarId) external view returns (address);
    function renderAvastar(uint256 _avastarId) external view returns (string memory);
}

// File: contracts/AvastarPrintRegistry.sol

pragma solidity ^0.5.0;

contract AvastarPrintRegistry is CustomERC721Metadata, WhitelistedRole {
    using SafeMath for uint256;

    ///////////////
    // Variables //
    ///////////////


    AvastarsInterface public avastarsContract;

    string public tokenBaseURI;
    string public tokenBaseIpfsURI = "https://ipfs.infura.io/ipfs/";

    address payable public printerAddress;
    uint256 public pricePerPrintInWei;
    uint256 public pricePerNFCInWei;
    uint256 public pricePerMiscInWei;
    uint256 public pricePerPrintIntlShipInWei;
    uint256 public pricePerNFCIntlShipInWei;
    uint256 public pricePerMiscIntlShipInWei;

    string public descriptionMiscItem;

    uint256 public invocations = 0;

    mapping(bytes32 => uint256) public serialToTokenId;
    mapping(uint256 => bytes32) public tokenIdToSerial;
    mapping(uint256 => uint256) public tokenIdToAvastarId;
    mapping(uint256 => string) public tokenIdToNFC;
    mapping(uint256 => string) public tokenIdToContactMethod;

    mapping(uint256 => string) public staticIpfsImageLink;


    ///////////////
    // Modifiers //
    ///////////////

    modifier onlyValidTokenId(uint256 _tokenId) {
        require(_exists(_tokenId), "Token ID does not exist");
        _;
    }

    /////////////////
    // Constructor //
    /////////////////

    constructor(address payable _printerAddress, uint256 _pricePerPrintInWei, uint256 _pricePerNFCInWei, uint256 _pricePerMiscInWei, uint256 _pricePerPrintIntlShipInWei, uint256 _pricePerNFCIntlShipInWei, uint256 _pricePerMiscIntlShipInWei, string memory _tokenBaseURI, string memory _tokenName, string memory _tokenSymbol) CustomERC721Metadata(_tokenName, _tokenSymbol) public {
        super.addWhitelisted(msg.sender);
        super.addWhitelisted(_printerAddress);

        printerAddress = _printerAddress;

        pricePerPrintInWei = _pricePerPrintInWei;
        pricePerNFCInWei = _pricePerNFCInWei;
        pricePerMiscInWei = _pricePerMiscInWei;

        pricePerPrintIntlShipInWei = _pricePerPrintIntlShipInWei;
        pricePerNFCIntlShipInWei = _pricePerNFCIntlShipInWei;
        pricePerMiscIntlShipInWei = _pricePerMiscIntlShipInWei;


        tokenBaseURI = _tokenBaseURI;
        avastarsContract = AvastarsInterface(0xF3E778F839934fC819cFA1040AabaCeCBA01e049);

    }



    //////////////////////////////
    // Token Creation Functions //
    //////////////////////////////



    function purchasePrint(uint256 _avastarId, string memory _contactMethod) public payable returns (uint256 _tokenId) {
        require(msg.value == pricePerPrintInWei || msg.value == pricePerPrintIntlShipInWei, "Must send correct amount for a print. Please check price @ pricePerPrintInWei or pricePerPrintIntlShipInWei for international shipments.");
        require(msg.sender == avastarsContract.ownerOf(_avastarId), "You must own Avastar.");

        uint256 tokenId = _mintToken(msg.sender);

        tokenIdToAvastarId[tokenId] = _avastarId;
        tokenIdToContactMethod[tokenId] = _contactMethod;
        printerAddress.transfer(msg.value);

        return tokenId;
    }


    function purchaseNFCOnly(uint256 _avastarId, string memory _contactMethod) public payable returns (uint256 _tokenId) {
        require(msg.value == pricePerNFCInWei || msg.value == pricePerNFCIntlShipInWei, "Must send correct amount for an NFC. Please check price @ pricePerNFCInWei or pricePerNFCIntlShipInWei for international shipments.");
        require(msg.sender == avastarsContract.ownerOf(_avastarId), "You must own Avastar");

        uint256 tokenId = _mintToken(msg.sender);

        tokenIdToAvastarId[tokenId] = _avastarId;
        tokenIdToContactMethod[tokenId] = _contactMethod;
        printerAddress.transfer(msg.value);

        return tokenId;
    }

    function purchaseMisc(uint256 _avastarId, string memory _contactMethod) public payable returns (uint256 _tokenId) {
        bytes memory tempDescriptionMiscItem = bytes(descriptionMiscItem); // Uses memory
        require(msg.value == pricePerMiscInWei || msg.value == pricePerMiscIntlShipInWei, "Must send correct amount. Please check price @ pricePerMiscInWei or pricePerMiscIntlShipInWei for international shipments.");
        require(tempDescriptionMiscItem.length > 0, "Misc item not available.");
        require(msg.sender == avastarsContract.ownerOf(_avastarId), "You must own Avastar");

        uint256 tokenId = _mintToken(msg.sender);

        tokenIdToAvastarId[tokenId] = _avastarId;
        tokenIdToContactMethod[tokenId] = _contactMethod;
        printerAddress.transfer(msg.value);

        return tokenId;
    }

    function mint(uint256 _avastarId, string memory _nfc) public onlyWhitelisted returns (uint256 _tokenId) {
        uint256 tokenId = _mintToken(avastarsContract.ownerOf(_avastarId));
        tokenIdToAvastarId[tokenId] = _avastarId;
        tokenIdToNFC[tokenId]= _nfc;

        return tokenId;
    }

    function _mintToken(address _to) internal returns (uint256 _tokenId) {

        invocations = invocations.add(1); // next token ID
        bytes32 serial = keccak256(abi.encodePacked(invocations, block.number, msg.sender));

        _mint(_to, invocations);

        serialToTokenId[serial] = invocations;
        tokenIdToSerial[invocations] = serial;

        return invocations;
    }


     function renderAvastarTokenSVG(uint _avastarId) public view returns (string memory) {

        string memory avastarTokenSVG = avastarsContract.renderAvastar(_avastarId);

        return avastarTokenSVG;
    }

    //////////////////////////
    // Management functions //
    //////////////////////////


    function updatePrinterAddress(address payable _printerAddress) public onlyWhitelisted returns (bool) {
        printerAddress = _printerAddress;
        return true;
    }


    function updatePricePerPrintInWei(uint256 _pricePerPrintInWei) public onlyWhitelisted returns (bool) {
        pricePerPrintInWei = _pricePerPrintInWei;
        return true;
    }

    function updatePricePerNFCInWei(uint256 _pricePerNFCInWei) public onlyWhitelisted returns (bool) {
        pricePerNFCInWei = _pricePerNFCInWei;
        return true;
    }

    function updatePricePerMiscInWei(uint256 _pricePerMiscInWei) public onlyWhitelisted returns (bool) {
        pricePerMiscInWei = _pricePerMiscInWei;
        return true;
    }

    function updatePricePerPrintIntlShipInWei(uint256 _pricePerPrintIntlShipInWei) public onlyWhitelisted returns (bool) {
        pricePerPrintIntlShipInWei = _pricePerPrintIntlShipInWei;
        return true;
    }

    function updatePricePerNFCIntlShipInWei(uint256 _pricePerNFCIntlShipInWei) public onlyWhitelisted returns (bool) {
        pricePerNFCIntlShipInWei = _pricePerNFCIntlShipInWei;
        return true;
    }

    function updatePricePerMiscIntlShipInWei(uint256 _pricePerMiscIntlShipInWei) public onlyWhitelisted returns (bool) {
        pricePerMiscIntlShipInWei = _pricePerMiscIntlShipInWei;
        return true;
    }

    function updateDescriptionMiscItem(string memory _descriptionMiscItem) public onlyWhitelisted returns (bool) {
        descriptionMiscItem = _descriptionMiscItem;
        return true;
    }

    function updateTokenBaseURI(string memory _newBaseURI) public onlyWhitelisted returns (bool) {
        tokenBaseURI = _newBaseURI;
        return true;
    }

    function updateTokenBaseIpfsURI(string memory _tokenBaseIpfsURI) public onlyWhitelisted returns (bool) {
        tokenBaseIpfsURI = _tokenBaseIpfsURI;
        return true;
    }

    function overrideDynamicImageWithIpfsLink(uint256 _tokenId, string memory _ipfsHash) public onlyWhitelisted returns (bool) {
        staticIpfsImageLink[_tokenId] = _ipfsHash;
        return true;
    }

    function clearIpfsImageUri(uint256 _tokenId) public onlyWhitelisted returns (bool) {
        delete staticIpfsImageLink[_tokenId];
        return true;
    }

    ////////////////////////
    // Accessor functions //
    ////////////////////////

    function updateTokenAvastarId(uint256 _tokenId, uint256 _avastarId) public onlyWhitelisted returns (bool) {
        require(_exists(_tokenId), "Token must exist");

        tokenIdToAvastarId[_tokenId] = _avastarId;
        return true;
    }

    function updateTokenContactMethod(uint256 _tokenId, string memory _contactMethod) public returns (bool) {
        require(_exists(_tokenId), "Token must exist");
        require(msg.sender == ownerOf(_tokenId) || isWhitelisted(msg.sender), "You must have permission.");
        tokenIdToContactMethod[_tokenId] = _contactMethod;
        return true;
    }

    function updateTokenNFC(uint256 _tokenId, string memory _NFCUID) public onlyWhitelisted returns (bool) {
        require(_exists(_tokenId), "Token must exist");
        tokenIdToNFC[_tokenId] = _NFCUID;
        return true;
    }



    function tokensOfOwner(address owner) external view returns (uint256[] memory) {
        return _tokensOfOwner(owner);
    }


    function tokenURI(uint256 _tokenId) external view onlyValidTokenId(_tokenId) returns (string memory) {
        // If we have an override then use it
        if (bytes(staticIpfsImageLink[_tokenId]).length > 0) {
            return Strings.strConcat(tokenBaseIpfsURI, staticIpfsImageLink[_tokenId]);
        }

        return Strings.strConcat(tokenBaseURI, Strings.uint2str(_tokenId));
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokenIdToSerial","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newBaseURI","type":"string"}],"name":"updateTokenBaseURI","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"staticIpfsImageLink","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"removeWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"descriptionMiscItem","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"avastarsContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pricePerPrintIntlShipInWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_descriptionMiscItem","type":"string"}],"name":"updateDescriptionMiscItem","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isWhitelisted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenBaseIpfsURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_ipfsHash","type":"string"}],"name":"overrideDynamicImageWithIpfsLink","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_contactMethod","type":"string"}],"name":"updateTokenContactMethod","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_avastarId","type":"uint256"},{"name":"_contactMethod","type":"string"}],"name":"purchaseMisc","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenBaseURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_avastarId","type":"uint256"}],"name":"renderAvastarTokenSVG","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_avastarId","type":"uint256"},{"name":"_nfc","type":"string"}],"name":"mint","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenBaseIpfsURI","type":"string"}],"name":"updateTokenBaseIpfsURI","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pricePerNFCInWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokenIdToNFC","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pricePerMiscIntlShipInWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_avastarId","type":"uint256"}],"name":"updateTokenAvastarId","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pricePerPrintInWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isWhitelistAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"invocations","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"clearIpfsImageUri","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_avastarId","type":"uint256"},{"name":"_contactMethod","type":"string"}],"name":"purchaseNFCOnly","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokenIdToAvastarId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_pricePerPrintInWei","type":"uint256"}],"name":"updatePricePerPrintInWei","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pricePerMiscInWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_pricePerNFCInWei","type":"uint256"}],"name":"updatePricePerNFCInWei","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_printerAddress","type":"address"}],"name":"updatePrinterAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_avastarId","type":"uint256"},{"name":"_contactMethod","type":"string"}],"name":"purchasePrint","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_pricePerMiscInWei","type":"uint256"}],"name":"updatePricePerMiscInWei","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_NFCUID","type":"string"}],"name":"updateTokenNFC","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_pricePerPrintIntlShipInWei","type":"uint256"}],"name":"updatePricePerPrintIntlShipInWei","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pricePerNFCIntlShipInWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_pricePerMiscIntlShipInWei","type":"uint256"}],"name":"updatePricePerMiscIntlShipInWei","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"printerAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"serialToTokenId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokenIdToContactMethod","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_pricePerNFCIntlShipInWei","type":"uint256"}],"name":"updatePricePerNFCIntlShipInWei","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_printerAddress","type":"address"},{"name":"_pricePerPrintInWei","type":"uint256"},{"name":"_pricePerNFCInWei","type":"uint256"},{"name":"_pricePerMiscInWei","type":"uint256"},{"name":"_pricePerPrintIntlShipInWei","type":"uint256"},{"name":"_pricePerNFCIntlShipInWei","type":"uint256"},{"name":"_pricePerMiscIntlShipInWei","type":"uint256"},{"name":"_tokenBaseURI","type":"string"},{"name":"_tokenName","type":"string"},{"name":"_tokenSymbol","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistedAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistedRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistAdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]

60c0604052601c60808190527f68747470733a2f2f697066732e696e667572612e696f2f697066732f0000000060a09081526200004091600f919062000725565b5060006018553480156200005357600080fd5b5060405162004dd438038062004dd483398101806040526101408110156200007a57600080fd5b8151602083015160408401516060850151608086015160a087015160c088015160e08901805197999698959794969395929491939283019291640100000000811115620000c657600080fd5b82016020810184811115620000da57600080fd5b8151640100000000811182820187101715620000f557600080fd5b505092919060200180516401000000008111156200011257600080fd5b820160208101848111156200012657600080fd5b81516401000000008111828201871017156200014157600080fd5b505092919060200180516401000000008111156200015e57600080fd5b820160208101848111156200017257600080fd5b81516401000000008111828201871017156200018d57600080fd5b50909350849250839150620001cd90507f01ffc9a70000000000000000000000000000000000000000000000000000000064010000000062000369810204565b620002017f80ac58cd0000000000000000000000000000000000000000000000000000000064010000000062000369810204565b620002357f780e9d630000000000000000000000000000000000000000000000000000000064010000000062000369810204565b81516200024a90600990602085019062000725565b5080516200026090600a90602084019062000725565b50620002957f5b5e139f0000000000000000000000000000000000000000000000000000000064010000000062000369810204565b5050620002b13362000438640100000000026401000000009004565b620002ca33640100000000620016bc6200048a82021704565b620002e38a640100000000620016bc6200048a82021704565b60108054600160a060020a031916600160a060020a038c1617905560118990556012889055601387905560148690556015859055601684905582516200033190600e90602086019062000725565b5050600d8054600160a060020a03191673f3e778f839934fc819cfa1040aabacecba01e04917905550620007ca975050505050505050565b7fffffffff000000000000000000000000000000000000000000000000000000008082161415620003fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152602081905260409020805460ff19166001179055565b62000453600b8264010000000062003a296200054982021704565b604051600160a060020a038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b6200049e33640100000000620005f0810204565b15156200053257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602481018290527f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060448201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65606482015290519081900360840190fd5b620005468164010000000062000613810204565b50565b6200055e828264010000000062000665810204565b15620005cb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b60006200060d600b83640100000000620035b06200066582021704565b92915050565b6200062e600c8264010000000062003a296200054982021704565b604051600160a060020a038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b6000600160a060020a03821615156200070557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200076857805160ff191683800117855562000798565b8280016001018555821562000798579182015b82811115620007985782518255916020019190600101906200077b565b50620007a6929150620007aa565b5090565b620007c791905b80821115620007a65760008155600101620007b1565b90565b6145fa80620007da6000396000f3fe6080604052600436106102df5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146102e457806306fdde0314610341578063081812fc146103cb578063095ea7b3146104115780630cc136011461044c57806310154bad1461048857806318160ddd146104bb5780632295ee5b146104d057806323b872dd14610583578063261eb4e5146105c6578063291d9549146105f05780632967316f146106235780632f745c59146106385780633176c29914610671578063346f151d1461068657806337e8fa251461069b5780633af32abf1461074e5780633e10169f14610781578063427849d61461079657806342842e0e1461085057806342b6142a1461089357806343152b1f1461094d5780634c5a628c146109fa5780634e99b80014610a0f5780634f6ccce714610a245780636352211e14610a4e578063645af89214610a7857806370a0823114610aa25780637362d9c814610ad557806377097fc814610b085780638462151c14610bc2578063893bc90414610c4557806395d89b4114610cf85780639c3612cf14610d0d5780639dcce5d114610d22578063a22cb46514610d4c578063a592be5014610d87578063a810744f14610d9c578063aebed6ee14610dcc578063b88d4fde14610de1578063bb5f747b14610eb4578063bdaaf5fa14610ee7578063bf40527414610efc578063c728c8c414610f26578063c87b56dd14610fd3578063cbc9bc0414610ffd578063d03f548f14611027578063d08399d114611051578063d3532f1d14611066578063d39e546c14611090578063d6cd9473146110c3578063d84cd48a146110d8578063da25120a14611185578063e985e9c5146111af578063ecf89aab146111ea578063ed10fbc6146112a4578063f0743491146112ce578063f1aafae1146112e3578063f27f25d11461130d578063f39c08b614611322578063f465d6f51461134c578063fce7653b14611376575b600080fd5b3480156102f057600080fd5b5061032d6004803603602081101561030757600080fd5b50357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166113a0565b604080519115158252519081900360200190f35b34801561034d57600080fd5b506103566113d8565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610390578181015183820152602001610378565b50505050905090810190601f1680156103bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103d757600080fd5b506103f5600480360360208110156103ee57600080fd5b503561146f565b60408051600160a060020a039092168252519081900360200190f35b34801561041d57600080fd5b5061044a6004803603604081101561043457600080fd5b50600160a060020a038135169060200135611512565b005b34801561045857600080fd5b506104766004803603602081101561046f57600080fd5b50356116aa565b60408051918252519081900360200190f35b34801561049457600080fd5b5061044a600480360360208110156104ab57600080fd5b5035600160a060020a03166116bc565b3480156104c757600080fd5b5061047661174d565b3480156104dc57600080fd5b5061032d600480360360208110156104f357600080fd5b81019060208101813564010000000081111561050e57600080fd5b82018360208201111561052057600080fd5b8035906020019184600183028401116401000000008311171561054257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611753945050505050565b34801561058f57600080fd5b5061044a600480360360608110156105a657600080fd5b50600160a060020a038135811691602081013590911690604001356117d2565b3480156105d257600080fd5b50610356600480360360208110156105e957600080fd5b5035611868565b3480156105fc57600080fd5b5061044a6004803603602081101561061357600080fd5b5035600160a060020a0316611903565b34801561062f57600080fd5b50610356611991565b34801561064457600080fd5b506104766004803603604081101561065b57600080fd5b50600160a060020a0381351690602001356119ec565b34801561067d57600080fd5b506103f5611aaa565b34801561069257600080fd5b50610476611ab9565b3480156106a757600080fd5b5061032d600480360360208110156106be57600080fd5b8101906020810181356401000000008111156106d957600080fd5b8201836020820111156106eb57600080fd5b8035906020019184600183028401116401000000008311171561070d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611abf945050505050565b34801561075a57600080fd5b5061032d6004803603602081101561077157600080fd5b5035600160a060020a0316611b35565b34801561078d57600080fd5b50610356611b4e565b3480156107a257600080fd5b5061032d600480360360408110156107b957600080fd5b813591908101906040810160208201356401000000008111156107db57600080fd5b8201836020820111156107ed57600080fd5b8035906020019184600183028401116401000000008311171561080f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ba9945050505050565b34801561085c57600080fd5b5061044a6004803603606081101561087357600080fd5b50600160a060020a03813581169160208101359091169060400135611c35565b34801561089f57600080fd5b5061032d600480360360408110156108b657600080fd5b813591908101906040810160208201356401000000008111156108d857600080fd5b8201836020820111156108ea57600080fd5b8035906020019184600183028401116401000000008311171561090c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611c51945050505050565b6104766004803603604081101561096357600080fd5b8135919081019060408101602082013564010000000081111561098557600080fd5b82018360208201111561099757600080fd5b803590602001918460018302840111640100000000831117156109b957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d53945050505050565b348015610a0657600080fd5b5061044a612070565b348015610a1b57600080fd5b5061035661207b565b348015610a3057600080fd5b5061047660048036036020811015610a4757600080fd5b50356120d6565b348015610a5a57600080fd5b506103f560048036036020811015610a7157600080fd5b503561217c565b348015610a8457600080fd5b5061035660048036036020811015610a9b57600080fd5b5035612211565b348015610aae57600080fd5b5061047660048036036020811015610ac557600080fd5b5035600160a060020a031661230a565b348015610ae157600080fd5b5061044a60048036036020811015610af857600080fd5b5035600160a060020a03166123b3565b348015610b1457600080fd5b5061047660048036036040811015610b2b57600080fd5b81359190810190604081016020820135640100000000811115610b4d57600080fd5b820183602082011115610b5f57600080fd5b80359060200191846001830284011164010000000083111715610b8157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612441945050505050565b348015610bce57600080fd5b50610bf560048036036020811015610be557600080fd5b5035600160a060020a0316612561565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610c31578181015183820152602001610c19565b505050509050019250505060405180910390f35b348015610c5157600080fd5b5061032d60048036036020811015610c6857600080fd5b810190602081018135640100000000811115610c8357600080fd5b820183602082011115610c9557600080fd5b80359060200191846001830284011164010000000083111715610cb757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506125c2945050505050565b348015610d0457600080fd5b50610356612638565b348015610d1957600080fd5b50610476612699565b348015610d2e57600080fd5b5061035660048036036020811015610d4557600080fd5b503561269f565b348015610d5857600080fd5b5061044a60048036036040811015610d6f57600080fd5b50600160a060020a0381351690602001351515612707565b348015610d9357600080fd5b506104766127d6565b348015610da857600080fd5b5061032d60048036036040811015610dbf57600080fd5b50803590602001356127dc565b348015610dd857600080fd5b506104766128b4565b348015610ded57600080fd5b5061044a60048036036080811015610e0457600080fd5b600160a060020a03823581169260208101359091169160408201359190810190608081016060820135640100000000811115610e3f57600080fd5b820183602082011115610e5157600080fd5b80359060200191846001830284011164010000000083111715610e7357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506128ba945050505050565b348015610ec057600080fd5b5061032d60048036036020811015610ed757600080fd5b5035600160a060020a0316612953565b348015610ef357600080fd5b50610476612966565b348015610f0857600080fd5b5061032d60048036036020811015610f1f57600080fd5b503561296c565b61047660048036036040811015610f3c57600080fd5b81359190810190604081016020820135640100000000811115610f5e57600080fd5b820183602082011115610f7057600080fd5b80359060200191846001830284011164010000000083111715610f9257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506129ee945050505050565b348015610fdf57600080fd5b5061035660048036036020811015610ff657600080fd5b5035612b8e565b34801561100957600080fd5b506104766004803603602081101561102057600080fd5b5035612df6565b34801561103357600080fd5b5061032d6004803603602081101561104a57600080fd5b5035612e08565b34801561105d57600080fd5b50610476612e74565b34801561107257600080fd5b5061032d6004803603602081101561108957600080fd5b5035612e7a565b34801561109c57600080fd5b5061032d600480360360208110156110b357600080fd5b5035600160a060020a0316612ee6565b3480156110cf57600080fd5b5061044a612f7b565b610476600480360360408110156110ee57600080fd5b8135919081019060408101602082013564010000000081111561111057600080fd5b82018360208201111561112257600080fd5b8035906020019184600183028401116401000000008311171561114457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612f84945050505050565b34801561119157600080fd5b5061032d600480360360208110156111a857600080fd5b50356130b1565b3480156111bb57600080fd5b5061032d600480360360408110156111d257600080fd5b50600160a060020a038135811691602001351661311d565b3480156111f657600080fd5b5061032d6004803603604081101561120d57600080fd5b8135919081019060408101602082013564010000000081111561122f57600080fd5b82018360208201111561124157600080fd5b8035906020019184600183028401116401000000008311171561126357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061314b945050505050565b3480156112b057600080fd5b5061032d600480360360208110156112c757600080fd5b503561322c565b3480156112da57600080fd5b50610476613298565b3480156112ef57600080fd5b5061032d6004803603602081101561130657600080fd5b503561329e565b34801561131957600080fd5b506103f561330a565b34801561132e57600080fd5b506104766004803603602081101561134557600080fd5b5035613319565b34801561135857600080fd5b506103566004803603602081101561136f57600080fd5b503561332b565b34801561138257600080fd5b5061032d6004803603602081101561139957600080fd5b5035613393565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19811660009081526020819052604090205460ff165b919050565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156114645780601f1061143957610100808354040283529160200191611464565b820191906000526020600020905b81548152906001019060200180831161144757829003601f168201915b505050505090505b90565b600061147a826133ff565b15156114f6576040805160e560020a62461bcd02815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606482015290519081900360840190fd5b50600090815260026020526040902054600160a060020a031690565b600061151d8261217c565b9050600160a060020a0383811690821614156115a9576040805160e560020a62461bcd02815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b33600160a060020a03821614806115c557506115c5813361311d565b1515611641576040805160e560020a62461bcd02815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015290519081900360840190fd5b600082815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b601a6020526000908152604090205481565b6116c533612953565b1515611741576040805160e560020a62461bcd02815260206004820152602481018290527f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060448201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65606482015290519081900360840190fd5b61174a8161341c565b50565b60075490565b600061175e33611b35565b15156117b6576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b81516117c990600e906020850190614387565b50600192915050565b6117dc3382613464565b1515611858576040805160e560020a62461bcd02815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606482015290519081900360840190fd5b611863838383613549565b505050565b601e6020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156118fb5780601f106118d0576101008083540402835291602001916118fb565b820191906000526020600020905b8154815290600101906020018083116118de57829003601f168201915b505050505081565b61190c33612953565b1515611988576040805160e560020a62461bcd02815260206004820152602481018290527f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060448201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65606482015290519081900360840190fd5b61174a81613568565b6017805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156118fb5780601f106118d0576101008083540402835291602001916118fb565b60006119f78361230a565b8210611a73576040805160e560020a62461bcd02815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e6473000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0383166000908152600560205260409020805483908110611a9757fe5b9060005260206000200154905092915050565b600d54600160a060020a031681565b60145481565b6000611aca33611b35565b1515611b22576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b81516117c9906017906020850190614387565b6000611b48600c8363ffffffff6135b016565b92915050565b600f805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156118fb5780601f106118d0576101008083540402835291602001916118fb565b6000611bb433611b35565b1515611c0c576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b6000838152601e602090815260409091208351611c2b92850190614387565b5060019392505050565b61186383838360206040519081016040528060008152506128ba565b6000611c5c836133ff565b1515611cb2576040805160e560020a62461bcd02815260206004820152601060248201527f546f6b656e206d75737420657869737400000000000000000000000000000000604482015290519081900360640190fd5b611cbb8361217c565b600160a060020a031633600160a060020a03161480611cde5750611cde33611b35565b1515611d34576040805160e560020a62461bcd02815260206004820152601960248201527f596f75206d7573742068617665207065726d697373696f6e2e00000000000000604482015290519081900360640190fd5b6000838152601d602090815260409091208351611c2b92850190614387565b6017805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815260009360609391929091830182828015611de15780601f10611db657610100808354040283529160200191611de1565b820191906000526020600020905b815481529060010190602001808311611dc457829003601f168201915b50505050509050601354341480611df9575060165434145b1515611ec1576040805160e560020a62461bcd02815260206004820152607a60248201527f4d7573742073656e6420636f727265637420616d6f756e742e20506c6561736560448201527f20636865636b20707269636520402070726963655065724d697363496e57656960648201527f206f722070726963655065724d697363496e746c53686970496e57656920666f60848201527f7220696e7465726e6174696f6e616c20736869706d656e74732e00000000000060a482015290519081900360c40190fd5b8051600010611f1a576040805160e560020a62461bcd02815260206004820152601860248201527f4d697363206974656d206e6f7420617661696c61626c652e0000000000000000604482015290519081900360640190fd5b600d546040805160e160020a6331a9108f028152600481018790529051600160a060020a0390921691636352211e91602480820192602092909190829003018186803b158015611f6957600080fd5b505afa158015611f7d573d6000803e3d6000fd5b505050506040513d6020811015611f9357600080fd5b5051600160a060020a03163314611ff4576040805160e560020a62461bcd02815260206004820152601460248201527f596f75206d757374206f776e2041766173746172000000000000000000000000604482015290519081900360640190fd5b6000611fff33613658565b6000818152601b60209081526040808320899055601d8252909120865192935061202d929091870190614387565b50601054604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015612067573d6000803e3d6000fd5b50949350505050565b612079336136e8565b565b600e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156118fb5780601f106118d0576101008083540402835291602001916118fb565b60006120e061174d565b821061215c576040805160e560020a62461bcd02815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e64730000000000000000000000000000000000000000606482015290519081900360840190fd5b600780548390811061216a57fe5b90600052602060002001549050919050565b600081815260016020526040812054600160a060020a0316801515611b48576040805160e560020a62461bcd02815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600d54604080517f2ff640b50000000000000000000000000000000000000000000000000000000081526004810184905290516060928392600160a060020a0390911691632ff640b591602480820192600092909190829003018186803b15801561227b57600080fd5b505afa15801561228f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156122b857600080fd5b8101908080516401000000008111156122d057600080fd5b820160208101848111156122e357600080fd5b81516401000000008111828201871017156122fd57600080fd5b5090979650505050505050565b6000600160a060020a0382161515612392576040805160e560020a62461bcd02815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f206164647265737300000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0382166000908152600360205260409020611b4890613730565b6123bc33612953565b1515612438576040805160e560020a62461bcd02815260206004820152602481018290527f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060448201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65606482015290519081900360840190fd5b61174a81613734565b600061244c33611b35565b15156124a4576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b600d546040805160e160020a6331a9108f02815260048101869052905160009261252b92600160a060020a0390911691636352211e91602480820192602092909190829003018186803b1580156124fa57600080fd5b505afa15801561250e573d6000803e3d6000fd5b505050506040513d602081101561252457600080fd5b5051613658565b6000818152601b60209081526040808320889055601c82529091208551929350612559929091860190614387565b509392505050565b606061256c8261377c565b8054806020026020016040519081016040528092919081815260200182805480156125b657602002820191906000526020600020905b8154815260200190600101908083116125a2575b50505050509050919050565b60006125cd33611b35565b1515612625576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b81516117c990600f906020850190614387565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156114645780601f1061143957610100808354040283529160200191611464565b60125481565b601c6020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156118fb5780601f106118d0576101008083540402835291602001916118fb565b600160a060020a038216331415612768576040805160e560020a62461bcd02815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b336000818152600460209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b60165481565b60006127e733611b35565b151561283f576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b612848836133ff565b151561289e576040805160e560020a62461bcd02815260206004820152601060248201527f546f6b656e206d75737420657869737400000000000000000000000000000000604482015290519081900360640190fd5b506000918252601b602052604090912055600190565b60115481565b6128c58484846117d2565b6128d184848484613796565b151561294d576040805160e560020a62461bcd02815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015290519081900360840190fd5b50505050565b6000611b48600b8363ffffffff6135b016565b60185481565b600061297733611b35565b15156129cf576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b6000828152601e602052604081206129e691614405565b506001919050565b6000601254341480612a01575060155434145b1515612a415760405160e560020a62461bcd02815260040180806020018281038252608381526020018061452c6083913960a00191505060405180910390fd5b600d546040805160e160020a6331a9108f028152600481018690529051600160a060020a0390921691636352211e91602480820192602092909190829003018186803b158015612a9057600080fd5b505afa158015612aa4573d6000803e3d6000fd5b505050506040513d6020811015612aba57600080fd5b5051600160a060020a03163314612b1b576040805160e560020a62461bcd02815260206004820152601460248201527f596f75206d757374206f776e2041766173746172000000000000000000000000604482015290519081900360640190fd5b6000612b2633613658565b6000818152601b60209081526040808320889055601d82529091208551929350612b54929091860190614387565b50601054604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015612559573d6000803e3d6000fd5b606081612b9a816133ff565b1515612bf0576040805160e560020a62461bcd02815260206004820152601760248201527f546f6b656e20494420646f6573206e6f74206578697374000000000000000000604482015290519081900360640190fd5b6000838152601e6020526040812054600260001961010060018416150201909116041115612d4d57600f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152612d469390929091830182828015612ca55780601f10612c7a57610100808354040283529160200191612ca5565b820191906000526020600020905b815481529060010190602001808311612c8857829003601f168201915b5050506000878152601e60209081526040918290208054835160026001831615610100026000190190921691909104601f810184900484028201840190945283815294509250830182828015612d3c5780601f10612d1157610100808354040283529160200191612d3c565b820191906000526020600020905b815481529060010190602001808311612d1f57829003601f168201915b5050505050613912565b9150612df0565b600e8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152612ded9390929091830182828015612dda5780601f10612daf57610100808354040283529160200191612dda565b820191906000526020600020905b815481529060010190602001808311612dbd57829003601f168201915b5050505050612de88561394e565b613912565b91505b50919050565b601b6020526000908152604090205481565b6000612e1333611b35565b1515612e6b576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b50601155600190565b60135481565b6000612e8533611b35565b1515612edd576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b50601255600190565b6000612ef133611b35565b1515612f49576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b5060108054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556001919050565b61207933613568565b6000601154341480612f97575060145434145b1515612fd75760405160e560020a62461bcd0281526004018080602001828103825260888152602001806144846088913960a00191505060405180910390fd5b600d546040805160e160020a6331a9108f028152600481018690529051600160a060020a0390921691636352211e91602480820192602092909190829003018186803b15801561302657600080fd5b505afa15801561303a573d6000803e3d6000fd5b505050506040513d602081101561305057600080fd5b5051600160a060020a03163314612b1b576040805160e560020a62461bcd02815260206004820152601560248201527f596f75206d757374206f776e20417661737461722e0000000000000000000000604482015290519081900360640190fd5b60006130bc33611b35565b1515613114576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b50601355600190565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205460ff1690565b600061315633611b35565b15156131ae576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b6131b7836133ff565b151561320d576040805160e560020a62461bcd02815260206004820152601060248201527f546f6b656e206d75737420657869737400000000000000000000000000000000604482015290519081900360640190fd5b6000838152601c602090815260409091208351611c2b92850190614387565b600061323733611b35565b151561328f576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b50601455600190565b60155481565b60006132a933611b35565b1515613301576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b50601655600190565b601054600160a060020a031681565b60196020526000908152604090205481565b601d6020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156118fb5780601f106118d0576101008083540402835291602001916118fb565b600061339e33611b35565b15156133f6576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b50601555600190565b600090815260016020526040902054600160a060020a0316151590565b61342d600c8263ffffffff613a2916565b604051600160a060020a038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b600061346f826133ff565b15156134eb576040805160e560020a62461bcd02815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606482015290519081900360840190fd5b60006134f68361217c565b905080600160a060020a031684600160a060020a03161480613531575083600160a060020a03166135268461146f565b600160a060020a0316145b806135415750613541818561311d565b949350505050565b613554838383613aad565b61355e8382613c7d565b6118638282613d74565b613579600c8263ffffffff613db216565b604051600160a060020a038216907f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b690600090a250565b6000600160a060020a0382161515613638576040805160e560020a62461bcd02815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b60185460009061366f90600163ffffffff613e5a16565b601881905560408051602080820184905243828401526c01000000000000000000000000330260608301528251605481840301815260749092019092528051910120906136bd908490613eb7565b601880546000838152601960209081526040808320849055928252601a905220919091555492915050565b6136f9600b8263ffffffff613db216565b604051600160a060020a038216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b5490565b613745600b8263ffffffff613a2916565b604051600160a060020a038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b600160a060020a0316600090815260056020526040902090565b60006137aa84600160a060020a0316613ed8565b15156137b857506001613541565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b8381101561384b578181015183820152602001613833565b50505050905090810190601f1680156138785780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561389a57600080fd5b505af11580156138ae573d6000803e3d6000fd5b505050506040513d60208110156138c457600080fd5b50517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f150b7a020000000000000000000000000000000000000000000000000000000014915050949350505050565b604080516020818101835260008083528351808301855281815284519283019094528152606092613947928692869290613ee0565b9392505050565b6060811515613991575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526113d3565b8160005b81156139a957600101600a82049150613995565b6060816040519080825280601f01601f1916602001820160405280156139d6576020820181803883390190505b50905060001982015b851561206757815160001982019160f860020a6030600a8a060102918491908110613a0657fe5b906020010190600160f860020a031916908160001a905350600a860495506139df565b613a3382826135b0565b15613a88576040805160e560020a62461bcd02815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b82600160a060020a0316613ac08261217c565b600160a060020a031614613b44576040805160e560020a62461bcd02815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0382161515613bc9576040805160e560020a62461bcd028152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b613bd281614135565b600160a060020a0383166000908152600360205260409020613bf39061417d565b600160a060020a0382166000908152600360205260409020613c1490614194565b600081815260016020526040808220805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600160a060020a038216600090815260056020526040812054613ca790600163ffffffff61419d16565b600083815260066020526040902054909150808214613d4457600160a060020a0384166000908152600560205260408120805484908110613ce457fe5b90600052602060002001549050806005600087600160a060020a0316600160a060020a0316815260200190815260200160002083815481101515613d2457fe5b600091825260208083209091019290925591825260069052604090208190555b600160a060020a0384166000908152600560205260409020805490613d6d906000198301614449565b5050505050565b600160a060020a0390911660009081526005602081815260408084208054868652600684529185208290559282526001810183559183529091200155565b613dbc82826135b0565b1515613e38576040805160e560020a62461bcd02815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60448201527f6500000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b600082820183811015613947576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b613ec182826141fd565b613ecb8282613d74565b613ed481614343565b5050565b6000903b1190565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f191660200182016040528015613f34576020820181803883390190505b509050806000805b8851811015613f9a578881815181101515613f5357fe5b90602001015160f860020a900460f860020a028383806001019450815181101515613f7a57fe5b906020010190600160f860020a031916908160001a905350600101613f3c565b5060005b8751811015613ffc578781815181101515613fb557fe5b90602001015160f860020a900460f860020a028383806001019450815181101515613fdc57fe5b906020010190600160f860020a031916908160001a905350600101613f9e565b5060005b865181101561405e57868181518110151561401757fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561403e57fe5b906020010190600160f860020a031916908160001a905350600101614000565b5060005b85518110156140c057858181518110151561407957fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156140a057fe5b906020010190600160f860020a031916908160001a905350600101614062565b5060005b84518110156141225784818151811015156140db57fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561410257fe5b906020010190600160f860020a031916908160001a9053506001016140c4565b50909d9c50505050505050505050505050565b600081815260026020526040902054600160a060020a03161561174a576000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b805461419090600163ffffffff61419d16565b9055565b80546001019055565b6000828211156141f7576040805160e560020a62461bcd02815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600160a060020a038216151561425d576040805160e560020a62461bcd02815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b614266816133ff565b156142bb576040805160e560020a62461bcd02815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b6000818152600160209081526040808320805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03871690811790915583526003909152902061430790614194565b6040518190600160a060020a038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600780546000838152600860205260408120829055600182018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880155565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106143c857805160ff19168380011785556143f5565b828001600101855582156143f5579182015b828111156143f55782518255916020019190600101906143da565b50614401929150614469565b5090565b50805460018160011615610100020316600290046000825580601f1061442b575061174a565b601f01602090049060005260206000209081019061174a9190614469565b815481835581811115611863576000838152602090206118639181019083015b61146c91905b80821115614401576000815560010161446f56fe4d7573742073656e6420636f727265637420616d6f756e7420666f722061207072696e742e20506c6561736520636865636b20707269636520402070726963655065725072696e74496e576569206f722070726963655065725072696e74496e746c53686970496e57656920666f7220696e7465726e6174696f6e616c20736869706d656e74732e57686974656c6973746564526f6c653a2063616c6c657220646f6573206e6f744d7573742073656e6420636f727265637420616d6f756e7420666f7220616e204e46432e20506c6561736520636865636b20707269636520402070726963655065724e4643496e576569206f722070726963655065724e4643496e746c53686970496e57656920666f7220696e7465726e6174696f6e616c20736869706d656e74732e2068617665207468652057686974656c697374656420726f6c65000000000000a165627a7a7230582033154e16c411a5faa6c79a397a7b1e8f1e982f84e12f26432ea345f3463cc213002900000000000000000000000089447f2ca722481d1399ae08b4d7e9471883f6c800000000000000000000000000000000000000000000000002c68af0bb140000000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000003782dace9d900000000000000000000000000000000000000000000000000000186cc6acd4b00000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000020687474703a2f2f6170722e617274626c6f636b732e696f2f64657461696c732f00000000000000000000000000000000000000000000000000000000000000174176617374617273205072696e7420526567697374727900000000000000000000000000000000000000000000000000000000000000000000000000000000034150520000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102df5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146102e457806306fdde0314610341578063081812fc146103cb578063095ea7b3146104115780630cc136011461044c57806310154bad1461048857806318160ddd146104bb5780632295ee5b146104d057806323b872dd14610583578063261eb4e5146105c6578063291d9549146105f05780632967316f146106235780632f745c59146106385780633176c29914610671578063346f151d1461068657806337e8fa251461069b5780633af32abf1461074e5780633e10169f14610781578063427849d61461079657806342842e0e1461085057806342b6142a1461089357806343152b1f1461094d5780634c5a628c146109fa5780634e99b80014610a0f5780634f6ccce714610a245780636352211e14610a4e578063645af89214610a7857806370a0823114610aa25780637362d9c814610ad557806377097fc814610b085780638462151c14610bc2578063893bc90414610c4557806395d89b4114610cf85780639c3612cf14610d0d5780639dcce5d114610d22578063a22cb46514610d4c578063a592be5014610d87578063a810744f14610d9c578063aebed6ee14610dcc578063b88d4fde14610de1578063bb5f747b14610eb4578063bdaaf5fa14610ee7578063bf40527414610efc578063c728c8c414610f26578063c87b56dd14610fd3578063cbc9bc0414610ffd578063d03f548f14611027578063d08399d114611051578063d3532f1d14611066578063d39e546c14611090578063d6cd9473146110c3578063d84cd48a146110d8578063da25120a14611185578063e985e9c5146111af578063ecf89aab146111ea578063ed10fbc6146112a4578063f0743491146112ce578063f1aafae1146112e3578063f27f25d11461130d578063f39c08b614611322578063f465d6f51461134c578063fce7653b14611376575b600080fd5b3480156102f057600080fd5b5061032d6004803603602081101561030757600080fd5b50357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166113a0565b604080519115158252519081900360200190f35b34801561034d57600080fd5b506103566113d8565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610390578181015183820152602001610378565b50505050905090810190601f1680156103bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103d757600080fd5b506103f5600480360360208110156103ee57600080fd5b503561146f565b60408051600160a060020a039092168252519081900360200190f35b34801561041d57600080fd5b5061044a6004803603604081101561043457600080fd5b50600160a060020a038135169060200135611512565b005b34801561045857600080fd5b506104766004803603602081101561046f57600080fd5b50356116aa565b60408051918252519081900360200190f35b34801561049457600080fd5b5061044a600480360360208110156104ab57600080fd5b5035600160a060020a03166116bc565b3480156104c757600080fd5b5061047661174d565b3480156104dc57600080fd5b5061032d600480360360208110156104f357600080fd5b81019060208101813564010000000081111561050e57600080fd5b82018360208201111561052057600080fd5b8035906020019184600183028401116401000000008311171561054257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611753945050505050565b34801561058f57600080fd5b5061044a600480360360608110156105a657600080fd5b50600160a060020a038135811691602081013590911690604001356117d2565b3480156105d257600080fd5b50610356600480360360208110156105e957600080fd5b5035611868565b3480156105fc57600080fd5b5061044a6004803603602081101561061357600080fd5b5035600160a060020a0316611903565b34801561062f57600080fd5b50610356611991565b34801561064457600080fd5b506104766004803603604081101561065b57600080fd5b50600160a060020a0381351690602001356119ec565b34801561067d57600080fd5b506103f5611aaa565b34801561069257600080fd5b50610476611ab9565b3480156106a757600080fd5b5061032d600480360360208110156106be57600080fd5b8101906020810181356401000000008111156106d957600080fd5b8201836020820111156106eb57600080fd5b8035906020019184600183028401116401000000008311171561070d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611abf945050505050565b34801561075a57600080fd5b5061032d6004803603602081101561077157600080fd5b5035600160a060020a0316611b35565b34801561078d57600080fd5b50610356611b4e565b3480156107a257600080fd5b5061032d600480360360408110156107b957600080fd5b813591908101906040810160208201356401000000008111156107db57600080fd5b8201836020820111156107ed57600080fd5b8035906020019184600183028401116401000000008311171561080f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ba9945050505050565b34801561085c57600080fd5b5061044a6004803603606081101561087357600080fd5b50600160a060020a03813581169160208101359091169060400135611c35565b34801561089f57600080fd5b5061032d600480360360408110156108b657600080fd5b813591908101906040810160208201356401000000008111156108d857600080fd5b8201836020820111156108ea57600080fd5b8035906020019184600183028401116401000000008311171561090c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611c51945050505050565b6104766004803603604081101561096357600080fd5b8135919081019060408101602082013564010000000081111561098557600080fd5b82018360208201111561099757600080fd5b803590602001918460018302840111640100000000831117156109b957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d53945050505050565b348015610a0657600080fd5b5061044a612070565b348015610a1b57600080fd5b5061035661207b565b348015610a3057600080fd5b5061047660048036036020811015610a4757600080fd5b50356120d6565b348015610a5a57600080fd5b506103f560048036036020811015610a7157600080fd5b503561217c565b348015610a8457600080fd5b5061035660048036036020811015610a9b57600080fd5b5035612211565b348015610aae57600080fd5b5061047660048036036020811015610ac557600080fd5b5035600160a060020a031661230a565b348015610ae157600080fd5b5061044a60048036036020811015610af857600080fd5b5035600160a060020a03166123b3565b348015610b1457600080fd5b5061047660048036036040811015610b2b57600080fd5b81359190810190604081016020820135640100000000811115610b4d57600080fd5b820183602082011115610b5f57600080fd5b80359060200191846001830284011164010000000083111715610b8157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612441945050505050565b348015610bce57600080fd5b50610bf560048036036020811015610be557600080fd5b5035600160a060020a0316612561565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610c31578181015183820152602001610c19565b505050509050019250505060405180910390f35b348015610c5157600080fd5b5061032d60048036036020811015610c6857600080fd5b810190602081018135640100000000811115610c8357600080fd5b820183602082011115610c9557600080fd5b80359060200191846001830284011164010000000083111715610cb757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506125c2945050505050565b348015610d0457600080fd5b50610356612638565b348015610d1957600080fd5b50610476612699565b348015610d2e57600080fd5b5061035660048036036020811015610d4557600080fd5b503561269f565b348015610d5857600080fd5b5061044a60048036036040811015610d6f57600080fd5b50600160a060020a0381351690602001351515612707565b348015610d9357600080fd5b506104766127d6565b348015610da857600080fd5b5061032d60048036036040811015610dbf57600080fd5b50803590602001356127dc565b348015610dd857600080fd5b506104766128b4565b348015610ded57600080fd5b5061044a60048036036080811015610e0457600080fd5b600160a060020a03823581169260208101359091169160408201359190810190608081016060820135640100000000811115610e3f57600080fd5b820183602082011115610e5157600080fd5b80359060200191846001830284011164010000000083111715610e7357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506128ba945050505050565b348015610ec057600080fd5b5061032d60048036036020811015610ed757600080fd5b5035600160a060020a0316612953565b348015610ef357600080fd5b50610476612966565b348015610f0857600080fd5b5061032d60048036036020811015610f1f57600080fd5b503561296c565b61047660048036036040811015610f3c57600080fd5b81359190810190604081016020820135640100000000811115610f5e57600080fd5b820183602082011115610f7057600080fd5b80359060200191846001830284011164010000000083111715610f9257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506129ee945050505050565b348015610fdf57600080fd5b5061035660048036036020811015610ff657600080fd5b5035612b8e565b34801561100957600080fd5b506104766004803603602081101561102057600080fd5b5035612df6565b34801561103357600080fd5b5061032d6004803603602081101561104a57600080fd5b5035612e08565b34801561105d57600080fd5b50610476612e74565b34801561107257600080fd5b5061032d6004803603602081101561108957600080fd5b5035612e7a565b34801561109c57600080fd5b5061032d600480360360208110156110b357600080fd5b5035600160a060020a0316612ee6565b3480156110cf57600080fd5b5061044a612f7b565b610476600480360360408110156110ee57600080fd5b8135919081019060408101602082013564010000000081111561111057600080fd5b82018360208201111561112257600080fd5b8035906020019184600183028401116401000000008311171561114457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612f84945050505050565b34801561119157600080fd5b5061032d600480360360208110156111a857600080fd5b50356130b1565b3480156111bb57600080fd5b5061032d600480360360408110156111d257600080fd5b50600160a060020a038135811691602001351661311d565b3480156111f657600080fd5b5061032d6004803603604081101561120d57600080fd5b8135919081019060408101602082013564010000000081111561122f57600080fd5b82018360208201111561124157600080fd5b8035906020019184600183028401116401000000008311171561126357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061314b945050505050565b3480156112b057600080fd5b5061032d600480360360208110156112c757600080fd5b503561322c565b3480156112da57600080fd5b50610476613298565b3480156112ef57600080fd5b5061032d6004803603602081101561130657600080fd5b503561329e565b34801561131957600080fd5b506103f561330a565b34801561132e57600080fd5b506104766004803603602081101561134557600080fd5b5035613319565b34801561135857600080fd5b506103566004803603602081101561136f57600080fd5b503561332b565b34801561138257600080fd5b5061032d6004803603602081101561139957600080fd5b5035613393565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19811660009081526020819052604090205460ff165b919050565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156114645780601f1061143957610100808354040283529160200191611464565b820191906000526020600020905b81548152906001019060200180831161144757829003601f168201915b505050505090505b90565b600061147a826133ff565b15156114f6576040805160e560020a62461bcd02815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606482015290519081900360840190fd5b50600090815260026020526040902054600160a060020a031690565b600061151d8261217c565b9050600160a060020a0383811690821614156115a9576040805160e560020a62461bcd02815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b33600160a060020a03821614806115c557506115c5813361311d565b1515611641576040805160e560020a62461bcd02815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015290519081900360840190fd5b600082815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b601a6020526000908152604090205481565b6116c533612953565b1515611741576040805160e560020a62461bcd02815260206004820152602481018290527f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060448201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65606482015290519081900360840190fd5b61174a8161341c565b50565b60075490565b600061175e33611b35565b15156117b6576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b81516117c990600e906020850190614387565b50600192915050565b6117dc3382613464565b1515611858576040805160e560020a62461bcd02815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606482015290519081900360840190fd5b611863838383613549565b505050565b601e6020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156118fb5780601f106118d0576101008083540402835291602001916118fb565b820191906000526020600020905b8154815290600101906020018083116118de57829003601f168201915b505050505081565b61190c33612953565b1515611988576040805160e560020a62461bcd02815260206004820152602481018290527f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060448201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65606482015290519081900360840190fd5b61174a81613568565b6017805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156118fb5780601f106118d0576101008083540402835291602001916118fb565b60006119f78361230a565b8210611a73576040805160e560020a62461bcd02815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e6473000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0383166000908152600560205260409020805483908110611a9757fe5b9060005260206000200154905092915050565b600d54600160a060020a031681565b60145481565b6000611aca33611b35565b1515611b22576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b81516117c9906017906020850190614387565b6000611b48600c8363ffffffff6135b016565b92915050565b600f805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156118fb5780601f106118d0576101008083540402835291602001916118fb565b6000611bb433611b35565b1515611c0c576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b6000838152601e602090815260409091208351611c2b92850190614387565b5060019392505050565b61186383838360206040519081016040528060008152506128ba565b6000611c5c836133ff565b1515611cb2576040805160e560020a62461bcd02815260206004820152601060248201527f546f6b656e206d75737420657869737400000000000000000000000000000000604482015290519081900360640190fd5b611cbb8361217c565b600160a060020a031633600160a060020a03161480611cde5750611cde33611b35565b1515611d34576040805160e560020a62461bcd02815260206004820152601960248201527f596f75206d7573742068617665207065726d697373696f6e2e00000000000000604482015290519081900360640190fd5b6000838152601d602090815260409091208351611c2b92850190614387565b6017805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815260009360609391929091830182828015611de15780601f10611db657610100808354040283529160200191611de1565b820191906000526020600020905b815481529060010190602001808311611dc457829003601f168201915b50505050509050601354341480611df9575060165434145b1515611ec1576040805160e560020a62461bcd02815260206004820152607a60248201527f4d7573742073656e6420636f727265637420616d6f756e742e20506c6561736560448201527f20636865636b20707269636520402070726963655065724d697363496e57656960648201527f206f722070726963655065724d697363496e746c53686970496e57656920666f60848201527f7220696e7465726e6174696f6e616c20736869706d656e74732e00000000000060a482015290519081900360c40190fd5b8051600010611f1a576040805160e560020a62461bcd02815260206004820152601860248201527f4d697363206974656d206e6f7420617661696c61626c652e0000000000000000604482015290519081900360640190fd5b600d546040805160e160020a6331a9108f028152600481018790529051600160a060020a0390921691636352211e91602480820192602092909190829003018186803b158015611f6957600080fd5b505afa158015611f7d573d6000803e3d6000fd5b505050506040513d6020811015611f9357600080fd5b5051600160a060020a03163314611ff4576040805160e560020a62461bcd02815260206004820152601460248201527f596f75206d757374206f776e2041766173746172000000000000000000000000604482015290519081900360640190fd5b6000611fff33613658565b6000818152601b60209081526040808320899055601d8252909120865192935061202d929091870190614387565b50601054604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015612067573d6000803e3d6000fd5b50949350505050565b612079336136e8565b565b600e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156118fb5780601f106118d0576101008083540402835291602001916118fb565b60006120e061174d565b821061215c576040805160e560020a62461bcd02815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e64730000000000000000000000000000000000000000606482015290519081900360840190fd5b600780548390811061216a57fe5b90600052602060002001549050919050565b600081815260016020526040812054600160a060020a0316801515611b48576040805160e560020a62461bcd02815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600d54604080517f2ff640b50000000000000000000000000000000000000000000000000000000081526004810184905290516060928392600160a060020a0390911691632ff640b591602480820192600092909190829003018186803b15801561227b57600080fd5b505afa15801561228f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156122b857600080fd5b8101908080516401000000008111156122d057600080fd5b820160208101848111156122e357600080fd5b81516401000000008111828201871017156122fd57600080fd5b5090979650505050505050565b6000600160a060020a0382161515612392576040805160e560020a62461bcd02815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f206164647265737300000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0382166000908152600360205260409020611b4890613730565b6123bc33612953565b1515612438576040805160e560020a62461bcd02815260206004820152602481018290527f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060448201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65606482015290519081900360840190fd5b61174a81613734565b600061244c33611b35565b15156124a4576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b600d546040805160e160020a6331a9108f02815260048101869052905160009261252b92600160a060020a0390911691636352211e91602480820192602092909190829003018186803b1580156124fa57600080fd5b505afa15801561250e573d6000803e3d6000fd5b505050506040513d602081101561252457600080fd5b5051613658565b6000818152601b60209081526040808320889055601c82529091208551929350612559929091860190614387565b509392505050565b606061256c8261377c565b8054806020026020016040519081016040528092919081815260200182805480156125b657602002820191906000526020600020905b8154815260200190600101908083116125a2575b50505050509050919050565b60006125cd33611b35565b1515612625576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b81516117c990600f906020850190614387565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156114645780601f1061143957610100808354040283529160200191611464565b60125481565b601c6020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156118fb5780601f106118d0576101008083540402835291602001916118fb565b600160a060020a038216331415612768576040805160e560020a62461bcd02815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b336000818152600460209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b60165481565b60006127e733611b35565b151561283f576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b612848836133ff565b151561289e576040805160e560020a62461bcd02815260206004820152601060248201527f546f6b656e206d75737420657869737400000000000000000000000000000000604482015290519081900360640190fd5b506000918252601b602052604090912055600190565b60115481565b6128c58484846117d2565b6128d184848484613796565b151561294d576040805160e560020a62461bcd02815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015290519081900360840190fd5b50505050565b6000611b48600b8363ffffffff6135b016565b60185481565b600061297733611b35565b15156129cf576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b6000828152601e602052604081206129e691614405565b506001919050565b6000601254341480612a01575060155434145b1515612a415760405160e560020a62461bcd02815260040180806020018281038252608381526020018061452c6083913960a00191505060405180910390fd5b600d546040805160e160020a6331a9108f028152600481018690529051600160a060020a0390921691636352211e91602480820192602092909190829003018186803b158015612a9057600080fd5b505afa158015612aa4573d6000803e3d6000fd5b505050506040513d6020811015612aba57600080fd5b5051600160a060020a03163314612b1b576040805160e560020a62461bcd02815260206004820152601460248201527f596f75206d757374206f776e2041766173746172000000000000000000000000604482015290519081900360640190fd5b6000612b2633613658565b6000818152601b60209081526040808320889055601d82529091208551929350612b54929091860190614387565b50601054604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015612559573d6000803e3d6000fd5b606081612b9a816133ff565b1515612bf0576040805160e560020a62461bcd02815260206004820152601760248201527f546f6b656e20494420646f6573206e6f74206578697374000000000000000000604482015290519081900360640190fd5b6000838152601e6020526040812054600260001961010060018416150201909116041115612d4d57600f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152612d469390929091830182828015612ca55780601f10612c7a57610100808354040283529160200191612ca5565b820191906000526020600020905b815481529060010190602001808311612c8857829003601f168201915b5050506000878152601e60209081526040918290208054835160026001831615610100026000190190921691909104601f810184900484028201840190945283815294509250830182828015612d3c5780601f10612d1157610100808354040283529160200191612d3c565b820191906000526020600020905b815481529060010190602001808311612d1f57829003601f168201915b5050505050613912565b9150612df0565b600e8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152612ded9390929091830182828015612dda5780601f10612daf57610100808354040283529160200191612dda565b820191906000526020600020905b815481529060010190602001808311612dbd57829003601f168201915b5050505050612de88561394e565b613912565b91505b50919050565b601b6020526000908152604090205481565b6000612e1333611b35565b1515612e6b576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b50601155600190565b60135481565b6000612e8533611b35565b1515612edd576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b50601255600190565b6000612ef133611b35565b1515612f49576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b5060108054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556001919050565b61207933613568565b6000601154341480612f97575060145434145b1515612fd75760405160e560020a62461bcd0281526004018080602001828103825260888152602001806144846088913960a00191505060405180910390fd5b600d546040805160e160020a6331a9108f028152600481018690529051600160a060020a0390921691636352211e91602480820192602092909190829003018186803b15801561302657600080fd5b505afa15801561303a573d6000803e3d6000fd5b505050506040513d602081101561305057600080fd5b5051600160a060020a03163314612b1b576040805160e560020a62461bcd02815260206004820152601560248201527f596f75206d757374206f776e20417661737461722e0000000000000000000000604482015290519081900360640190fd5b60006130bc33611b35565b1515613114576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b50601355600190565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205460ff1690565b600061315633611b35565b15156131ae576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b6131b7836133ff565b151561320d576040805160e560020a62461bcd02815260206004820152601060248201527f546f6b656e206d75737420657869737400000000000000000000000000000000604482015290519081900360640190fd5b6000838152601c602090815260409091208351611c2b92850190614387565b600061323733611b35565b151561328f576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b50601455600190565b60155481565b60006132a933611b35565b1515613301576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b50601655600190565b601054600160a060020a031681565b60196020526000908152604090205481565b601d6020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156118fb5780601f106118d0576101008083540402835291602001916118fb565b600061339e33611b35565b15156133f6576040805160e560020a62461bcd02815260206004820152603a602482015260008051602061450c83398151915260448201526000805160206145af833981519152606482015290519081900360840190fd5b50601555600190565b600090815260016020526040902054600160a060020a0316151590565b61342d600c8263ffffffff613a2916565b604051600160a060020a038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b600061346f826133ff565b15156134eb576040805160e560020a62461bcd02815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606482015290519081900360840190fd5b60006134f68361217c565b905080600160a060020a031684600160a060020a03161480613531575083600160a060020a03166135268461146f565b600160a060020a0316145b806135415750613541818561311d565b949350505050565b613554838383613aad565b61355e8382613c7d565b6118638282613d74565b613579600c8263ffffffff613db216565b604051600160a060020a038216907f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b690600090a250565b6000600160a060020a0382161515613638576040805160e560020a62461bcd02815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b60185460009061366f90600163ffffffff613e5a16565b601881905560408051602080820184905243828401526c01000000000000000000000000330260608301528251605481840301815260749092019092528051910120906136bd908490613eb7565b601880546000838152601960209081526040808320849055928252601a905220919091555492915050565b6136f9600b8263ffffffff613db216565b604051600160a060020a038216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b5490565b613745600b8263ffffffff613a2916565b604051600160a060020a038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b600160a060020a0316600090815260056020526040902090565b60006137aa84600160a060020a0316613ed8565b15156137b857506001613541565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b8381101561384b578181015183820152602001613833565b50505050905090810190601f1680156138785780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561389a57600080fd5b505af11580156138ae573d6000803e3d6000fd5b505050506040513d60208110156138c457600080fd5b50517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f150b7a020000000000000000000000000000000000000000000000000000000014915050949350505050565b604080516020818101835260008083528351808301855281815284519283019094528152606092613947928692869290613ee0565b9392505050565b6060811515613991575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526113d3565b8160005b81156139a957600101600a82049150613995565b6060816040519080825280601f01601f1916602001820160405280156139d6576020820181803883390190505b50905060001982015b851561206757815160001982019160f860020a6030600a8a060102918491908110613a0657fe5b906020010190600160f860020a031916908160001a905350600a860495506139df565b613a3382826135b0565b15613a88576040805160e560020a62461bcd02815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b82600160a060020a0316613ac08261217c565b600160a060020a031614613b44576040805160e560020a62461bcd02815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0382161515613bc9576040805160e560020a62461bcd028152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b613bd281614135565b600160a060020a0383166000908152600360205260409020613bf39061417d565b600160a060020a0382166000908152600360205260409020613c1490614194565b600081815260016020526040808220805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600160a060020a038216600090815260056020526040812054613ca790600163ffffffff61419d16565b600083815260066020526040902054909150808214613d4457600160a060020a0384166000908152600560205260408120805484908110613ce457fe5b90600052602060002001549050806005600087600160a060020a0316600160a060020a0316815260200190815260200160002083815481101515613d2457fe5b600091825260208083209091019290925591825260069052604090208190555b600160a060020a0384166000908152600560205260409020805490613d6d906000198301614449565b5050505050565b600160a060020a0390911660009081526005602081815260408084208054868652600684529185208290559282526001810183559183529091200155565b613dbc82826135b0565b1515613e38576040805160e560020a62461bcd02815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60448201527f6500000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b600082820183811015613947576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b613ec182826141fd565b613ecb8282613d74565b613ed481614343565b5050565b6000903b1190565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f191660200182016040528015613f34576020820181803883390190505b509050806000805b8851811015613f9a578881815181101515613f5357fe5b90602001015160f860020a900460f860020a028383806001019450815181101515613f7a57fe5b906020010190600160f860020a031916908160001a905350600101613f3c565b5060005b8751811015613ffc578781815181101515613fb557fe5b90602001015160f860020a900460f860020a028383806001019450815181101515613fdc57fe5b906020010190600160f860020a031916908160001a905350600101613f9e565b5060005b865181101561405e57868181518110151561401757fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561403e57fe5b906020010190600160f860020a031916908160001a905350600101614000565b5060005b85518110156140c057858181518110151561407957fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156140a057fe5b906020010190600160f860020a031916908160001a905350600101614062565b5060005b84518110156141225784818151811015156140db57fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561410257fe5b906020010190600160f860020a031916908160001a9053506001016140c4565b50909d9c50505050505050505050505050565b600081815260026020526040902054600160a060020a03161561174a576000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b805461419090600163ffffffff61419d16565b9055565b80546001019055565b6000828211156141f7576040805160e560020a62461bcd02815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600160a060020a038216151561425d576040805160e560020a62461bcd02815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b614266816133ff565b156142bb576040805160e560020a62461bcd02815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b6000818152600160209081526040808320805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03871690811790915583526003909152902061430790614194565b6040518190600160a060020a038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600780546000838152600860205260408120829055600182018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880155565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106143c857805160ff19168380011785556143f5565b828001600101855582156143f5579182015b828111156143f55782518255916020019190600101906143da565b50614401929150614469565b5090565b50805460018160011615610100020316600290046000825580601f1061442b575061174a565b601f01602090049060005260206000209081019061174a9190614469565b815481835581811115611863576000838152602090206118639181019083015b61146c91905b80821115614401576000815560010161446f56fe4d7573742073656e6420636f727265637420616d6f756e7420666f722061207072696e742e20506c6561736520636865636b20707269636520402070726963655065725072696e74496e576569206f722070726963655065725072696e74496e746c53686970496e57656920666f7220696e7465726e6174696f6e616c20736869706d656e74732e57686974656c6973746564526f6c653a2063616c6c657220646f6573206e6f744d7573742073656e6420636f727265637420616d6f756e7420666f7220616e204e46432e20506c6561736520636865636b20707269636520402070726963655065724e4643496e576569206f722070726963655065724e4643496e746c53686970496e57656920666f7220696e7465726e6174696f6e616c20736869706d656e74732e2068617665207468652057686974656c697374656420726f6c65000000000000a165627a7a7230582033154e16c411a5faa6c79a397a7b1e8f1e982f84e12f26432ea345f3463cc2130029

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

00000000000000000000000089447f2ca722481d1399ae08b4d7e9471883f6c800000000000000000000000000000000000000000000000002c68af0bb140000000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000003782dace9d900000000000000000000000000000000000000000000000000000186cc6acd4b00000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000020687474703a2f2f6170722e617274626c6f636b732e696f2f64657461696c732f00000000000000000000000000000000000000000000000000000000000000174176617374617273205072696e7420526567697374727900000000000000000000000000000000000000000000000000000000000000000000000000000000034150520000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _printerAddress (address): 0x89447f2Ca722481d1399ae08b4d7E9471883F6c8
Arg [1] : _pricePerPrintInWei (uint256): 200000000000000000
Arg [2] : _pricePerNFCInWei (uint256): 100000000000000000
Arg [3] : _pricePerMiscInWei (uint256): 1000000000000000000
Arg [4] : _pricePerPrintIntlShipInWei (uint256): 250000000000000000
Arg [5] : _pricePerNFCIntlShipInWei (uint256): 110000000000000000
Arg [6] : _pricePerMiscIntlShipInWei (uint256): 1000000000000000000
Arg [7] : _tokenBaseURI (string): http://apr.artblocks.io/details/
Arg [8] : _tokenName (string): Avastars Print Registry
Arg [9] : _tokenSymbol (string): APR

-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 00000000000000000000000089447f2ca722481d1399ae08b4d7e9471883f6c8
Arg [1] : 00000000000000000000000000000000000000000000000002c68af0bb140000
Arg [2] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [3] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [4] : 00000000000000000000000000000000000000000000000003782dace9d90000
Arg [5] : 0000000000000000000000000000000000000000000000000186cc6acd4b0000
Arg [6] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [9] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [11] : 687474703a2f2f6170722e617274626c6f636b732e696f2f64657461696c732f
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [13] : 4176617374617273205072696e74205265676973747279000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [15] : 4150520000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

43921:9588:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13126:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13126:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13126:135:0;-1:-1:-1;;13126:135:0;;;;;;;;;;;;;;;;;;;;;43320:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43320:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;43320:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18080:204;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18080:204:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18080:204:0;;;;;;;-1:-1:-1;;;;;18080:204:0;;;;;;;;;;;;;;17366:421;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17366:421:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;17366:421:0;;;;;;;;;;;44698:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44698:50:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;44698:50:0;;;;;;;;;;;;;;;;;;;39369:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39369:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39369:110:0;-1:-1:-1;;;;;39369:110:0;;;29192:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29192:96:0;;;;51275:160;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51275:160:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;51275:160:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;51275:160:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;51275:160:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;51275:160:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;51275:160:0;;-1:-1:-1;51275:160:0;;-1:-1:-1;;;;;51275:160:0;19757:290;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19757:290:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19757:290:0;;;;;;;;;;;;;;;;;;44933:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44933:53:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;44933:53:0;;;39487:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39487:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39487:116:0;-1:-1:-1;;;;;39487:116:0;;;44560:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44560:33:0;;;;28801:232;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28801:232:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;28801:232:0;;;;;;;;;44101:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44101:41:0;;;;44417;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44417:41:0;;;;51075:192;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51075:192:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;51075:192:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;51075:192:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;51075:192:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;51075:192:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;51075:192:0;;-1:-1:-1;51075:192:0;;-1:-1:-1;;;;;51075:192:0;39242:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39242:119:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39242:119:0;-1:-1:-1;;;;;39242:119:0;;;44184:63;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44184:63:0;;;;51631:205;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51631:205:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;51631:205:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;51631:205:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;51631:205:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;51631:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;51631:205:0;;-1:-1:-1;51631:205:0;;-1:-1:-1;;;;;51631:205:0;20693:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20693:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20693:134:0;;;;;;;;;;;;;;;;;;52359:360;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52359:360:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;52359:360:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;52359:360:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;52359:360:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;52359:360:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;52359:360:0;;-1:-1:-1;52359:360:0;;-1:-1:-1;;;;;52359:360:0;47783:844;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;47783:844:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;47783:844:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;47783:844:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;47783:844:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;47783:844:0;;-1:-1:-1;47783:844:0;;-1:-1:-1;;;;;47783:844:0;37996:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37996:93:0;;;;44151:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44151:26:0;;;;29634:199;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29634:199:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29634:199:0;;;16707:228;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16707:228:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16707:228:0;;;49357:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49357:214:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49357:214:0;;;16270:211;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16270:211:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16270:211:0;-1:-1:-1;;;;;16270:211:0;;;37872:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37872:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37872:116:0;-1:-1:-1;;;;;37872:116:0;;;48635:305;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48635:305:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;48635:305:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;48635:305:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;48635:305:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;48635:305:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;48635:305:0;;-1:-1:-1;48635:305:0;;-1:-1:-1;;;;;48635:305:0;52972:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52972:126:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;52972:126:0;-1:-1:-1;;;;;52972:126:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;52972:126:0;;;;;;;;;;;;;;;;;51443:180;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51443:180:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;51443:180:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;51443:180:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;51443:180:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;51443:180:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;51443:180:0;;-1:-1:-1;51443:180:0;;-1:-1:-1;;;;;51443:180:0;43519:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43519:89:0;;;;44340:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44340:31:0;;;;44815:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44815:46:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;44815:46:0;;;18585:248;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18585:248:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;18585:248:0;;;;;;;;;;;44511:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44511:40:0;;;;52104:247;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52104:247:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;52104:247:0;;;;;;;;44300:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44300:33:0;;;;21546:268;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21546:268:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;21546:268:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;21546:268:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;21546:268:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;21546:268:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;21546:268:0;;-1:-1:-1;21546:268:0;;-1:-1:-1;;;;;21546:268:0;37739:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37739:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37739:125:0;-1:-1:-1;;;;;37739:125:0;;;44602:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44602:30:0;;;;51844:160;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51844:160:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;51844:160:0;;;47094:681;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;47094:681:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;47094:681:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;47094:681:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;47094:681:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;47094:681:0;;-1:-1:-1;47094:681:0;;-1:-1:-1;;;;;47094:681:0;53108:398;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53108:398:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;53108:398:0;;;44755:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44755:53:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;44755:53:0;;;49863:182;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49863:182:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49863:182:0;;;44378:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44378:32:0;;;;50053:174;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50053:174:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50053:174:0;;;49679;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49679:174:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49679:174:0;-1:-1:-1;;;;;49679:174:0;;;39611:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39611:87:0;;;;46395:689;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46395:689:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;46395:689:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46395:689:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;46395:689:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;46395:689:0;;-1:-1:-1;46395:689:0;;-1:-1:-1;;;;;46395:689:0;50235:178;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50235:178:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50235:178:0;;;19163:147;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19163:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19163:147:0;;;;;;;;;;;52727:233;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52727:233:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;52727:233:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;52727:233:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;52727:233:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;52727:233:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;52727:233:0;;-1:-1:-1;52727:233:0;;-1:-1:-1;;;;;52727:233:0;50421:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50421:214:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50421:214:0;;;44465:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44465:39:0;;;;50857:210;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50857:210:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50857:210:0;;;44256:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44256:37:0;;;;44641:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44641:50:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;44641:50:0;;;44868:56;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44868:56:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;44868:56:0;;;50643:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50643:206:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50643:206:0;;;13126:135;-1:-1:-1;;13220:33:0;;13196:4;13220:33;;;;;;;;;;;;;13126:135;;;;:::o;43320:85::-;43392:5;43385:12;;;;;;;;-1:-1:-1;;43385:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43359:13;;43385:12;;43392:5;;43385:12;;43392:5;43385:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43320:85;;:::o;18080:204::-;18139:7;18167:16;18175:7;18167;:16::i;:::-;18159:73;;;;;;;-1:-1:-1;;;;;18159:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18252:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;18252:24:0;;18080:204::o;17366:421::-;17430:13;17446:16;17454:7;17446;:16::i;:::-;17430:32;-1:-1:-1;;;;;;17481:11:0;;;;;;;;17473:57;;;;;-1:-1:-1;;;;;17473:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17551:10;-1:-1:-1;;;;;17551:19:0;;;;:58;;;17574:35;17591:5;17598:10;17574:16;:35::i;:::-;17543:150;;;;;;;-1:-1:-1;;;;;17543:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17706:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;17706:29:0;-1:-1:-1;;;;;17706:29:0;;;;;;;;;17751:28;;17706:24;;17751:28;;;;;;;17366:421;;;:::o;44698:50::-;;;;;;;;;;;;;:::o;39369:110::-;37614:28;37631:10;37614:16;:28::i;:::-;37606:105;;;;;;;-1:-1:-1;;;;;37606:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39447:24;39463:7;39447:15;:24::i;:::-;39369:110;:::o;29192:96::-;29263:10;:17;29192:96;:::o;51275:160::-;51362:4;39126:25;39140:10;39126:13;:25::i;:::-;39118:96;;;;;;;-1:-1:-1;;;;;39118:96:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;;;;;;;;;;;;51379:26;;;;:12;;:26;;;;;:::i;:::-;-1:-1:-1;51423:4:0;;51275:160;-1:-1:-1;;51275:160:0:o;19757:290::-;19901:39;19920:10;19932:7;19901:18;:39::i;:::-;19893:101;;;;;;;-1:-1:-1;;;;;19893:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20007:32;20021:4;20027:2;20031:7;20007:13;:32::i;:::-;19757:290;;;:::o;44933:53::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44933:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39487:116::-;37614:28;37631:10;37614:16;:28::i;:::-;37606:105;;;;;;;-1:-1:-1;;;;;37606:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39568:27;39587:7;39568:18;:27::i;44560:33::-;;;;;;;;;;;;;;;-1:-1:-1;;44560:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28801:232;28881:7;28917:16;28927:5;28917:9;:16::i;:::-;28909:24;;28901:80;;;;;-1:-1:-1;;;;;28901:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28999:19:0;;;;;;:12;:19;;;;;:26;;29019:5;;28999:26;;;;;;;;;;;;;;28992:33;;28801:232;;;;:::o;44101:41::-;;;-1:-1:-1;;;;;44101:41:0;;:::o;44417:::-;;;;:::o;51075:192::-;51178:4;39126:25;39140:10;39126:13;:25::i;:::-;39118:96;;;;;;;-1:-1:-1;;;;;39118:96:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;;;;;;;;;;;;51195:42;;;;:19;;:42;;;;;:::i;39242:119::-;39303:4;39327:26;:13;39345:7;39327:26;:17;:26;:::i;:::-;39320:33;39242:119;-1:-1:-1;;39242:119:0:o;44184:63::-;;;;;;;;;;;;;;;-1:-1:-1;;44184:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51631:205;51748:4;39126:25;39140:10;39126:13;:25::i;:::-;39118:96;;;;;;;-1:-1:-1;;;;;39118:96:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;;;;;;;;;;;;51765:29;;;;:19;:29;;;;;;;;:41;;;;;;;;:::i;:::-;-1:-1:-1;51824:4:0;;51631:205;-1:-1:-1;;;51631:205:0:o;20693:134::-;20780:39;20797:4;20803:2;20807:7;20780:39;;;;;;;;;;;;;:16;:39::i;52359:360::-;52457:4;52482:17;52490:8;52482:7;:17::i;:::-;52474:46;;;;;;;-1:-1:-1;;;;;52474:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;52553:17;52561:8;52553:7;:17::i;:::-;-1:-1:-1;;;;;52539:31:0;:10;-1:-1:-1;;;;;52539:31:0;;:60;;;;52574:25;52588:10;52574:13;:25::i;:::-;52531:98;;;;;;;-1:-1:-1;;;;;52531:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;52640:32;;;;:22;:32;;;;;;;;:49;;;;;;;;:::i;47783:844::-;47953:19;47908:65;;;;;;;;;;;;;-1:-1:-1;;47908:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;47908:36:0;;:65;;47953:19;;47908:65;;47953:19;47908:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48020:17;;48007:9;:30;:72;;;;48054:25;;48041:9;:38;48007:72;47999:207;;;;;;;-1:-1:-1;;;;;47999:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48225:30;;48258:1;-1:-1:-1;48217:71:0;;;;;-1:-1:-1;;;;;48217:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;48321:16;;:36;;;-1:-1:-1;;;;;48321:36:0;;;;;;;;;;-1:-1:-1;;;;;48321:16:0;;;;:24;;:36;;;;;;;;;;;;;;;:16;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;48321:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48321:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48321:36:0;-1:-1:-1;;;;;48307:50:0;:10;:50;48299:83;;;;;-1:-1:-1;;;;;48299:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;48395:15;48413:22;48424:10;48413;:22::i;:::-;48448:27;;;;:18;:27;;;;;;;;:40;;;48499:22;:31;;;;;:48;;48395:40;;-1:-1:-1;48499:48:0;;:31;;:48;;;;:::i;:::-;-1:-1:-1;48558:14:0;;:34;;-1:-1:-1;;;;;48558:14:0;;;;48582:9;48558:34;;;;;:14;:34;:14;:34;48582:9;48558:14;:34;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;48612:7:0;47783:844;-1:-1:-1;;;;47783:844:0:o;37996:93::-;38048:33;38070:10;38048:21;:33::i;:::-;37996:93::o;44151:26::-;;;;;;;;;;;;;;;-1:-1:-1;;44151:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29634:199;29692:7;29728:13;:11;:13::i;:::-;29720:21;;29712:78;;;;;-1:-1:-1;;;;;29712:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29808:10;:17;;29819:5;;29808:17;;;;;;;;;;;;;;29801:24;;29634:199;;;:::o;16707:228::-;16762:7;16798:20;;;:11;:20;;;;;;-1:-1:-1;;;;;16798:20:0;16837:19;;;16829:73;;;;;-1:-1:-1;;;;;16829:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49357:214;49486:16;;:42;;;;;;;;;;;;;;49426:13;;;;-1:-1:-1;;;;;49486:16:0;;;;:30;;:42;;;;;:16;;:42;;;;;;;;:16;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;49486:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;49486:42:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;49486:42:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;49486:42:0;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;-1:-1;49486:42:0;;49357:214;-1:-1:-1;;;;;;;49357:214:0:o;16270:211::-;16325:7;-1:-1:-1;;;;;16353:19:0;;;;16345:74;;;;;-1:-1:-1;;;;;16345:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16439:24:0;;;;;;:17;:24;;;;;:34;;:32;:34::i;37872:116::-;37614:28;37631:10;37614:16;:28::i;:::-;37606:105;;;;;;;-1:-1:-1;;;;;37606:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37953:27;37972:7;37953:18;:27::i;48635:305::-;48721:16;39126:25;39140:10;39126:13;:25::i;:::-;39118:96;;;;;;;-1:-1:-1;;;;;39118:96:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;;;;;;;;;;;;48779:16;;:36;;;-1:-1:-1;;;;;48779:36:0;;;;;;;;;;48750:15;;48768:48;;-1:-1:-1;;;;;48779:16:0;;;;:24;;:36;;;;;;;;;;;;;;;:16;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;48779:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48779:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48779:36:0;48768:10;:48::i;:::-;48827:27;;;;:18;:27;;;;;;;;:40;;;48878:12;:21;;;;;:27;;48750:66;;-1:-1:-1;48878:27:0;;:21;;:27;;;;:::i;:::-;-1:-1:-1;48925:7:0;48635:305;-1:-1:-1;;;48635:305:0:o;52972:126::-;53033:16;53069:21;53084:5;53069:14;:21::i;:::-;53062:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52972:126;;;:::o;51443:180::-;51540:4;39126:25;39140:10;39126:13;:25::i;:::-;39118:96;;;;;;;-1:-1:-1;;;;;39118:96:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;;;;;;;;;;;;51557:36;;;;:16;;:36;;;;;:::i;43519:89::-;43593:7;43586:14;;;;;;;;-1:-1:-1;;43586:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43560:13;;43586:14;;43593:7;;43586:14;;43593:7;43586:14;;;;;;;;;;;;;;;;;;;;;;;;44340:31;;;;:::o;44815:46::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44815:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18585:248;-1:-1:-1;;;;;18665:16:0;;18671:10;18665:16;;18657:54;;;;;-1:-1:-1;;;;;18657:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18743:10;18724:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;18724:34:0;;;;;;;;;;;;:45;;-1:-1:-1;;18724:45:0;;;;;;;;;;18785:40;;;;;;;18724:34;;18743:10;18785:40;;;;;;;;;;;18585:248;;:::o;44511:40::-;;;;:::o;52104:247::-;52204:4;39126:25;39140:10;39126:13;:25::i;:::-;39118:96;;;;;;;-1:-1:-1;;;;;39118:96:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;;;;;;;;;;;;52229:17;52237:8;52229:7;:17::i;:::-;52221:46;;;;;;;-1:-1:-1;;;;;52221:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52280:28:0;;;;:18;:28;;;;;;:41;52339:4;;52104:247::o;44300:33::-;;;;:::o;21546:268::-;21653:31;21666:4;21672:2;21676:7;21653:12;:31::i;:::-;21703:48;21726:4;21732:2;21736:7;21745:5;21703:22;:48::i;:::-;21695:111;;;;;;;-1:-1:-1;;;;;21695:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21546:268;;;;:::o;37739:125::-;37803:4;37827:29;:16;37848:7;37827:29;:20;:29;:::i;44602:30::-;;;;:::o;51844:160::-;51921:4;39126:25;39140:10;39126:13;:25::i;:::-;39118:96;;;;;;;-1:-1:-1;;;;;39118:96:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;;;;;;;;;;;;51945:29;;;;:19;:29;;;;;51938:36;;;:::i;:::-;-1:-1:-1;51992:4:0;51844:160;;;:::o;47094:681::-;47193:16;47243;;47230:9;:29;:70;;;;47276:24;;47263:9;:37;47230:70;47222:214;;;;;;-1:-1:-1;;;;;47222:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47469:16;;:36;;;-1:-1:-1;;;;;47469:36:0;;;;;;;;;;-1:-1:-1;;;;;47469:16:0;;;;:24;;:36;;;;;;;;;;;;;;;:16;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;47469:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47469:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47469:36:0;-1:-1:-1;;;;;47455:50:0;:10;:50;47447:83;;;;;-1:-1:-1;;;;;47447:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;47543:15;47561:22;47572:10;47561;:22::i;:::-;47596:27;;;;:18;:27;;;;;;;;:40;;;47647:22;:31;;;;;:48;;47543:40;;-1:-1:-1;47647:48:0;;:31;;:48;;;;:::i;:::-;-1:-1:-1;47706:14:0;;:34;;-1:-1:-1;;;;;47706:14:0;;;;47730:9;47706:34;;;;;:14;:34;:14;:34;47730:9;47706:14;:34;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;53108:398:0;53194:13;53175:8;45125:17;45133:8;45125:7;:17::i;:::-;45117:53;;;;;;;-1:-1:-1;;;;;45117:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;53317:1;53277:29;;;:19;:29;;;;;53271:43;;-1:-1:-1;;53271:43:0;;;;;;;;;;;:47;53267:153;;;53360:16;53342:66;;;;;;;;-1:-1:-1;;53342:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53360:16;;53342:66;;53360:16;53342:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53378:29:0;;;;:19;:29;;;;;;;;;53342:66;;;;;;;;;;;-1:-1:-1;;53342:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53378:29:0;-1:-1:-1;53342:66:0;;53378:29;53342:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:66::i;:::-;53335:73;;;;53267:153;53457:12;53439:59;;;;;;;;-1:-1:-1;;53439:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53457:12;;53439:59;;53457:12;53439:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53471:26;53488:8;53471:16;:26::i;:::-;53439:17;:59::i;:::-;53432:66;;45181:1;53108:398;;;;:::o;44755:53::-;;;;;;;;;;;;;:::o;49863:182::-;49958:4;39126:25;39140:10;39126:13;:25::i;:::-;39118:96;;;;;;;-1:-1:-1;;;;;39118:96:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;;;;;;;;;;;;-1:-1:-1;49975:18:0;:40;50033:4;;49863:182::o;44378:32::-;;;;:::o;50053:174::-;50144:4;39126:25;39140:10;39126:13;:25::i;:::-;39118:96;;;;;;;-1:-1:-1;;;;;39118:96:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;;;;;;;;;;;;-1:-1:-1;50161:16:0;:36;50215:4;;50053:174::o;49679:::-;49774:4;39126:25;39140:10;39126:13;:25::i;:::-;39118:96;;;;;;;-1:-1:-1;;;;;39118:96:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;;;;;;;;;;;;-1:-1:-1;49791:14:0;:32;;-1:-1:-1;;;;;49791:32:0;;-1:-1:-1;;49791:32:0;;;;;;;49679:174;;;:::o;39611:87::-;39660:30;39679:10;39660:18;:30::i;46395:689::-;46492:16;46542:18;;46529:9;:31;:74;;;;46577:26;;46564:9;:39;46529:74;46521:223;;;;;;-1:-1:-1;;;;;46521:223:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46777:16;;:36;;;-1:-1:-1;;;;;46777:36:0;;;;;;;;;;-1:-1:-1;;;;;46777:16:0;;;;:24;;:36;;;;;;;;;;;;;;;:16;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;46777:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46777:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46777:36:0;-1:-1:-1;;;;;46763:50:0;:10;:50;46755:84;;;;;-1:-1:-1;;;;;46755:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;50235:178;50328:4;39126:25;39140:10;39126:13;:25::i;:::-;39118:96;;;;;;;-1:-1:-1;;;;;39118:96:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;;;;;;;;;;;;-1:-1:-1;50345:17:0;:38;50401:4;;50235:178::o;19163:147::-;-1:-1:-1;;;;;19267:25:0;;;19243:4;19267:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;19163:147::o;52727:233::-;52824:4;39126:25;39140:10;39126:13;:25::i;:::-;39118:96;;;;;;;-1:-1:-1;;;;;39118:96:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;;;;;;;;;;;;52849:17;52857:8;52849:7;:17::i;:::-;52841:46;;;;;;;-1:-1:-1;;;;;52841:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;52898:22;;;;:12;:22;;;;;;;;:32;;;;;;;;:::i;50421:214::-;50532:4;39126:25;39140:10;39126:13;:25::i;:::-;39118:96;;;;;;;-1:-1:-1;;;;;39118:96:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;;;;;;;;;;;;-1:-1:-1;50549:26:0;:56;50623:4;;50421:214::o;44465:39::-;;;;:::o;50857:210::-;50966:4;39126:25;39140:10;39126:13;:25::i;:::-;39118:96;;;;;;;-1:-1:-1;;;;;39118:96:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;;;;;;;;;;;;-1:-1:-1;50983:25:0;:54;51055:4;;50857:210::o;44256:37::-;;;-1:-1:-1;;;;;44256:37:0;;:::o;44641:50::-;;;;;;;;;;;;;:::o;44868:56::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44868:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50643:206;50750:4;39126:25;39140:10;39126:13;:25::i;:::-;39118:96;;;;;;;-1:-1:-1;;;;;39118:96:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;-1:-1:-1;;;;;;;;;;;39118:96:0;;;;;;;;;;;;;;;-1:-1:-1;50767:24:0;:52;50837:4;;50643:206::o;22016:155::-;22073:4;22106:20;;;:11;:20;;;;;;-1:-1:-1;;;;;22106:20:0;22144:19;;;22016:155::o;39706:137::-;39768:26;:13;39786:7;39768:26;:17;:26;:::i;:::-;39810:25;;-1:-1:-1;;;;;39810:25:0;;;;;;;;39706:137;:::o;22541:333::-;22626:4;22651:16;22659:7;22651;:16::i;:::-;22643:73;;;;;;;-1:-1:-1;;;;;22643:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22727:13;22743:16;22751:7;22743;:16::i;:::-;22727:32;;22789:5;-1:-1:-1;;;;;22778:16:0;:7;-1:-1:-1;;;;;22778:16:0;;:51;;;;22822:7;-1:-1:-1;;;;;22798:31:0;:20;22810:7;22798:11;:20::i;:::-;-1:-1:-1;;;;;22798:31:0;;22778:51;:87;;;;22833:32;22850:5;22857:7;22833:16;:32::i;:::-;22770:96;22541:333;-1:-1:-1;;;;22541:333:0:o;30217:245::-;30303:38;30323:4;30329:2;30333:7;30303:19;:38::i;:::-;30354:47;30387:4;30393:7;30354:32;:47::i;:::-;30414:40;30442:2;30446:7;30414:27;:40::i;39851:145::-;39916:29;:13;39937:7;39916:29;:20;:29;:::i;:::-;39961:27;;-1:-1:-1;;;;;39961:27:0;;;;;;;;39851:145;:::o;36803:203::-;36875:4;-1:-1:-1;;;;;36900:21:0;;;;36892:68;;;;;-1:-1:-1;;;;;36892:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36978:20:0;:11;:20;;;;;;;;;;;;;;;36803:203::o;48948:398::-;49044:11;;48999:16;;49044:18;;49060:1;49044:18;:15;:18;:::i;:::-;49030:11;:32;;;49117:55;;;;;;;;;;49147:12;49117:55;;;;;49161:10;49117:55;;;;;;;22:32:-1;26:21;;;22:32;6:49;;49117:55:0;;;;;;;49107:66;;;;;;49186:23;;49192:3;;49186:5;:23::i;:::-;49248:11;;;49222:23;;;;:15;:23;;;;;;;;:37;;;49270:28;;;:15;:28;;;:37;;;;49327:11;;48948:398;-1:-1:-1;;48948:398:0:o;38251:154::-;38319:32;:16;38343:7;38319:32;:23;:32;:::i;:::-;38367:30;;-1:-1:-1;;;;;38367:30:0;;;;;;;;38251:154;:::o;11797:114::-;11889:14;;11797:114::o;38097:146::-;38162:29;:16;38183:7;38162:29;:20;:29;:::i;:::-;38207:28;;-1:-1:-1;;;;;38207:28:0;;;;;;;;38097:146;:::o;31797:126::-;-1:-1:-1;;;;;31896:19:0;31859:17;31896:19;;;:12;:19;;;;;;31797:126::o;25788:356::-;25910:4;25937:15;:2;-1:-1:-1;;;;;25937:13:0;;:15::i;:::-;25936:16;25932:60;;;-1:-1:-1;25976:4:0;25969:11;;25932:60;26020:70;;;;;26057:10;26020:70;;;;;;-1:-1:-1;;;;;26020:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26004:13;;26020:36;;;;;;26057:10;;26069:4;;26075:7;;26084:5;;26020:70;;;;;;;;;;;26004:13;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;26020:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26020:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26020:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26020:70:0;-1:-1:-1;;26109:26:0;26119:16;26109:26;;-1:-1:-1;;25788:356:0;;;;;;:::o;40165:168::-;40296:29;;;;;;;;;-1:-1:-1;40296:29:0;;;;;;;;;;;;;;;;;;;;;;;40243:33;;40296:29;;40306:2;;40310;;40296:29;:9;:29::i;:::-;40289:36;40165:168;-1:-1:-1;;;40165:168:0:o;41801:482::-;41851:27;41895:7;;41891:50;;;-1:-1:-1;41919:10:0;;;;;;;;;;;;;;;;;;;41891:50;41960:2;41951:6;41992:69;41999:6;;41992:69;;42022:5;;42047:2;42042:7;;;;41992:69;;;42071:17;42101:3;42091:14;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;42091:14:0;87:34:-1;135:17;;-1:-1;42091:14:0;-1:-1:-1;42071:34:0;-1:-1:-1;;;42125:7:0;;42143:103;42150:7;;42143:103;;42174:9;;-1:-1:-1;;42179:3:0;;;-1:-1:-1;;;42197:2:0;42207;42202:7;;42197:12;42186:25;;42174:4;;42179:3;42174:9;;;;;;;;;;:37;-1:-1:-1;;;;;42174:37:0;;;;;;;;-1:-1:-1;42232:2:0;42226:8;;;;42143:103;;36267:178;36345:18;36349:4;36355:7;36345:3;:18::i;:::-;36344:19;36336:63;;;;;-1:-1:-1;;;;;36336:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36410:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;36410:27:0;36433:4;36410:27;;;36267:178::o;24743:459::-;24857:4;-1:-1:-1;;;;;24837:24:0;:16;24845:7;24837;:16::i;:::-;-1:-1:-1;;;;;24837:24:0;;24829:78;;;;;-1:-1:-1;;;;;24829:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24926:16:0;;;;24918:65;;;;;-1:-1:-1;;;;;24918:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24996:23;25011:7;24996:14;:23::i;:::-;-1:-1:-1;;;;;25032:23:0;;;;;;:17;:23;;;;;:35;;:33;:35::i;:::-;-1:-1:-1;;;;;25078:21:0;;;;;;:17;:21;;;;;:33;;:31;:33::i;:::-;25124:20;;;;:11;:20;;;;;;:25;;-1:-1:-1;;25124:25:0;-1:-1:-1;;;;;25124:25:0;;;;;;;;;25167:27;;25124:20;;25167:27;;;;;;;24743:459;;;:::o;33400:1148::-;-1:-1:-1;;;;;33691:18:0;;33666:22;33691:18;;;:12;:18;;;;;:25;:32;;33721:1;33691:32;:29;:32;:::i;:::-;33734:18;33755:26;;;:17;:26;;;;;;33666:57;;-1:-1:-1;33888:28:0;;;33884:328;;-1:-1:-1;;;;;33955:18:0;;33933:19;33955:18;;;:12;:18;;;;;:34;;33974:14;;33955:34;;;;;;;;;;;;;;33933:56;;34039:11;34006:12;:18;34019:4;-1:-1:-1;;;;;34006:18:0;-1:-1:-1;;;;;34006:18:0;;;;;;;;;;;;34025:10;34006:30;;;;;;;;;;;;;;;;;;;;;:44;;;;34123:30;;;:17;:30;;;;;:43;;;33884:328;-1:-1:-1;;;;;34301:18:0;;;;;;:12;:18;;;;;:27;;;;;-1:-1:-1;;34301:27:0;;;:::i;:::-;;33400:1148;;;;:::o;32224:186::-;-1:-1:-1;;;;;32338:16:0;;;;;;;:12;:16;;;;;;;;:23;;32309:26;;;:17;:26;;;;;:52;;;32372:16;;;39:1:-1;23:18;;45:23;;32372:30:0;;;;;;;;32224:186::o;36525:183::-;36605:18;36609:4;36615:7;36605:3;:18::i;:::-;36597:64;;;;;;;-1:-1:-1;;;;;36597:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36672:20:0;36695:5;36672:20;;;;;;;;;;;:28;;-1:-1:-1;;36672:28:0;;;36525:183::o;6850:181::-;6908:7;6940:5;;;6964:6;;;;6956:46;;;;;-1:-1:-1;;;;;6956:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;30727:202;30791:24;30803:2;30807:7;30791:11;:24::i;:::-;30828:40;30856:2;30860:7;30828:27;:40::i;:::-;30881;30913:7;30881:31;:40::i;:::-;30727:202;;:::o;10248:422::-;10308:4;10615:20;;10654:8;;10248:422::o;40747:1046::-;40879:33;40925:16;40950:2;40925:28;;40964:16;40989:2;40964:28;;41003:16;41028:2;41003:28;;41042:16;41067:2;41042:28;;41081:16;41106:2;41081:28;;41120:19;41205:3;:10;41192:3;:10;41179:3;:10;41166:3;:10;41153:3;:10;:23;:36;:49;:62;41142:74;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;41142:74:0;87:34:-1;135:17;;-1:-1;41142:74:0;-1:-1:-1;41120:96:0;-1:-1:-1;41120:96:0;41272:6;;41314:80;41330:3;:10;41326:1;:14;41314:80;;;41376:3;41380:1;41376:6;;;;;;;;;;;;;;;-1:-1:-1;;;41376:6:0;;-1:-1:-1;;;41376:6:0;41362;41369:3;;;;;;41362:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;41362:20:0;;;;;;;;-1:-1:-1;41342:3:0;;41314:80;;;-1:-1:-1;41413:1:0;41404:80;41420:3;:10;41416:1;:14;41404:80;;;41466:3;41470:1;41466:6;;;;;;;;;;;;;;;-1:-1:-1;;;41466:6:0;;-1:-1:-1;;;41466:6:0;41452;41459:3;;;;;;41452:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;41452:20:0;;;;;;;;-1:-1:-1;41432:3:0;;41404:80;;;-1:-1:-1;41503:1:0;41494:80;41510:3;:10;41506:1;:14;41494:80;;;41556:3;41560:1;41556:6;;;;;;;;;;;;;;;-1:-1:-1;;;41556:6:0;;-1:-1:-1;;;41556:6:0;41542;41549:3;;;;;;41542:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;41542:20:0;;;;;;;;-1:-1:-1;41522:3:0;;41494:80;;;-1:-1:-1;41593:1:0;41584:80;41600:3;:10;41596:1;:14;41584:80;;;41646:3;41650:1;41646:6;;;;;;;;;;;;;;;-1:-1:-1;;;41646:6:0;;-1:-1:-1;;;41646:6:0;41632;41639:3;;;;;;41632:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;41632:20:0;;;;;;;;-1:-1:-1;41612:3:0;;41584:80;;;-1:-1:-1;41683:1:0;41674:80;41690:3;:10;41686:1;:14;41674:80;;;41736:3;41740:1;41736:6;;;;;;;;;;;;;;;-1:-1:-1;;;41736:6:0;;-1:-1:-1;;;41736:6:0;41722;41729:3;;;;;;41722:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;41722:20:0;;;;;;;;-1:-1:-1;41702:3:0;;41674:80;;;-1:-1:-1;41778:6:0;;40747:1046;-1:-1:-1;;;;;;;;;;;;;40747:1046:0:o;26312:175::-;26412:1;26376:24;;;:15;:24;;;;;;-1:-1:-1;;;;;26376:24:0;:38;26372:108;;26466:1;26431:24;;;:15;:24;;;;;:37;;-1:-1:-1;;26431:37:0;;;26312:175::o;12018:110::-;12099:14;;:21;;12118:1;12099:21;:18;:21;:::i;:::-;12082:38;;12018:110::o;11919:91::-;11983:19;;12001:1;11983:19;;;11919:91::o;7306:184::-;7364:7;7392:6;;;;7384:49;;;;;-1:-1:-1;;;;;7384:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7456:5:0;;;7306:184::o;23127:335::-;-1:-1:-1;;;;;23199:16:0;;;;23191:61;;;;;-1:-1:-1;;;;;23191:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23272:16;23280:7;23272;:16::i;:::-;23271:17;23263:58;;;;;-1:-1:-1;;;;;23263:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23334:20;;;;:11;:20;;;;;;;;:25;;-1:-1:-1;;23334:25:0;-1:-1:-1;;;;;23334:25:0;;;;;;;;23370:21;;:17;:21;;;;;:33;;:31;:33::i;:::-;23421;;23446:7;;-1:-1:-1;;;;;23421:33:0;;;23438:1;;23421:33;;23438:1;;23421:33;23127:335;;:::o;32611:164::-;32715:10;:17;;32688:24;;;;:15;:24;;;;;:44;;;39:1:-1;23:18;;45:23;;32743:24:0;;;;;;;32611:164::o;43921:9588::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43921:9588:0;;;-1:-1:-1;43921:9588:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://33154e16c411a5faa6c79a397a7b1e8f1e982f84e12f26432ea345f3463cc213
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.