ETH Price: $3,881.99 (-1.25%)

Token

Mirage Gallery Curated (MGC)
 

Overview

Max Total Supply

5,547 MGC

Holders

1,099

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
cryptom-nft.eth
Balance
9 MGC
0xb688f02b24accd0dc7dfcc604aad18e79f5db2c2
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The destination for beautiful and innovative AI art.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
mirageCurated

Compiler Version
v0.5.0+commit.1d4f565a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2022-01-23
*/

/*
       M                                                 M
     M   M                                             M   M
    M  M  M                                           M  M  M
   M  M  M  M                                       M  M  M  M
  M  M  M  M  M                                    M  M  M  M  M
 M  M M  M  M  M                                 M  M  M  M  M  M
 M  M   M  M  M  M                              M  M     M  M  M  M
 M  M     M  M  M  M                           M  M      M  M   M  M
 M  M       M  M  M  M                        M  M       M  M   M  M     ​​
 M  M         M  M  M  M                     M  M        M  M   M  M
 M  M           M  M  M  M                  M  M         M  M   M  M
 M  M             M  M  M  M               M  M          M  M   M  M   M  M  M  M  M  M  M
 M  M               M  M  M  M            M  M        M  M  M   M  M   M  M  M  M  M  M  M
 M  M                 M  M  M  M         M  M      M  M  M  M   M  M                  M  M
 M  M                   M  M  M  M      M  M    M  M  M  M  M   M  M                     M
 M  M                     M  M  M  M   M  M  M  M  M  M  M  M   M  M
 M  M                       M  M  M  M  M   M  M  M  M   M  M   M  M
 M  M                         M  M  M  M   M  M  M  M    M  M   M  M
 M  M                           M  M  M   M  M  M  M     M  M   M  M
 M  M                             M  M   M  M  M  M      M  M   M  M
M  M  M  M  M  M                         M   M  M  M  M   M  M  M  M  M  M  M
                                        M  M  M  M
                                        M  M  M  M
                                        M  M  M  M
                                         M  M  M  M                        M  M  M  M  M  M
                                          M  M  M  M                          M  M  M  M
                                           M  M  M  M                         M  M  M  M
                                             M  M  M  M                       M  M  M  M
                                               M  M  M  M                     M  M  M  M
                                                 M  M  M  M                   M  M  M  M
                                                    M  M  M  M                M  M  M  M
                                                       M  M  M  M             M  M  M  M
                                                           M  M  M  M   M  M  M  M  M  M
                                                               M  M  M  M  M  M  M  M  M
                                                                                                                                                
*/
// based off of the beautiful work done by Erick Calderon with the smart contracts for Artblocks.
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 contracts/libs/ERC165.sol
// 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 contracts/libs/IERC721.sol
// 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 contracts/libs/SafeMath.sol
// 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;
}
}
// File contracts/libs/Address.sol
// 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 contracts/libs/Counters.sol
// 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 contracts/libs/IERC721Receiver.sol
// 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 {
function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data)
public returns (bytes4);
}
// File contracts/libs/ERC721.sol
// 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 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;
constructor () public {
    // register the supported interfaces to conform to ERC721 via ERC165
    _registerInterface(_INTERFACE_ID_ERC721);
}
function balanceOf(address owner) public view returns (uint256) {
    require(owner != address(0), "ERC721: balance query for the zero address");
    return _ownedTokensCount[owner].current();
}
function ownerOf(uint256 tokenId) public view returns (address) {
    address owner = _tokenOwner[tokenId];
    require(owner != address(0), "ERC721: owner query for nonexistent token");
    return owner;
}
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);
}
function getApproved(uint256 tokenId) public view returns (address) {
    require(_exists(tokenId), "ERC721: approved query for nonexistent token");
    return _tokenApprovals[tokenId];
}
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);
}
function isApprovedForAll(address owner, address operator) public view returns (bool) {
    return _operatorApprovals[owner][operator];
}
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);
}
function safeTransferFrom(address from, address to, uint256 tokenId) public {
    safeTransferFrom(from, to, tokenId, "");
}
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");
}
function _exists(uint256 tokenId) internal view returns (bool) {
    address owner = _tokenOwner[tokenId];
    return owner != address(0);
}
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));
}
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);
}
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);
}
function _burn(uint256 tokenId) internal {
    _burn(ownerOf(tokenId), tokenId);
}
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);
}
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);
}
function _clearApproval(uint256 tokenId) private {
    if (_tokenApprovals[tokenId] != address(0)) {
        _tokenApprovals[tokenId] = address(0);
    }
}
}
// File contracts/libs/IERC721Enumerable.sol
// 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 contracts/libs/ERC721Enumerable.sol
// 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 contracts/libs/CustomERC721Metadata.sol
// 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;
/**
 * @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;
}
}
// File contracts/libs/Strings.sol
// 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);
}
}

pragma solidity ^0.5.0;
interface mirageContracts {
function balanceOf(address owner, uint256 _id) external view returns (uint256);
}
contract mirageCurated is CustomERC721Metadata {
using SafeMath for uint256;
event Mint(
    address indexed _to,
    uint256 indexed _tokenId,
    uint256 indexed _projectId
);
struct Project {
    string name;
    string artist;
    string description;
    string website;
    string license;
    string projectBaseURI;
    uint256 artworks;
    uint256 maxArtworks;
    uint256 maxEarly;
    bool publicActive;
    bool locked;
    bool paused;
    bool earlyActive;
}
uint256 constant TEN_THOUSAND = 10_000;
mapping(uint256 => Project) projects;
//All financial functions are stripped from struct for visibility
mapping(uint256 => address) public projectIdToArtistAddress;
mapping(uint256 => string) public projectIdToCurrencySymbol;
mapping(uint256 => address) public projectIdToCurrencyAddress;
mapping(uint256 => uint256) public projectIdToPricePerTokenInWei;
mapping(uint256 => address) public projectIdToAdditionalPayee;
mapping(uint256 => uint256) public projectIdToAdditionalPayeePercentage;
address public mirageAddress;
mirageContracts public membershipContract;
uint256 public miragePercentage = 10;
mapping(uint256 => uint256) public tokenIdToProjectId;
mapping(uint256 => uint256[]) internal projectIdToTokenIds;
mapping(uint256 => bytes32) public tokenIdToHash;
mapping(bytes32 => uint256) public hashToTokenId;
address public admin;
mapping(address => bool) public isWhitelisted;
mapping(address => bool) public isMintWhitelisted;
uint256 public nextProjectId = 1;
modifier onlyValidTokenId(uint256 _tokenId) {
    require(_exists(_tokenId), "Token ID does not exist");
    _;
}
modifier onlyUnlocked(uint256 _projectId) {
    require(!projects[_projectId].locked, "Only if unlocked");
    _;
}
modifier onlyArtist(uint256 _projectId) {
    require(msg.sender == projectIdToArtistAddress[_projectId], "Only artist");
    _;
}
modifier onlyAdmin() {
    require(msg.sender == admin, "Only admin");
    _;
}
modifier onlyWhitelisted() {
    require(isWhitelisted[msg.sender], "Only whitelisted");
    _;
}
modifier onlyArtistOrWhitelisted(uint256 _projectId) {
    require(isWhitelisted[msg.sender] || msg.sender == projectIdToArtistAddress[_projectId], "Only artist or whitelisted");
    _;
}
constructor(string memory _tokenName, string memory _tokenSymbol, address membershipAddress) CustomERC721Metadata(_tokenName, _tokenSymbol) public {
    admin = msg.sender;
    isWhitelisted[msg.sender] = true;
    mirageAddress = msg.sender;
    membershipContract = mirageContracts(membershipAddress);
}
function mint(address _to, uint256 _projectId, address _by) external returns (uint256 _tokenId) {
    require(isMintWhitelisted[msg.sender], "Must mint from whitelisted minter contract.");
    require(projects[_projectId].artworks.add(51) <= projects[_projectId].maxArtworks, "Must not exceed max artworks");
    require(projects[_projectId].publicActive || _by == projectIdToArtistAddress[_projectId], "Project must exist and be active");
    require(!projects[_projectId].paused || _by == projectIdToArtistAddress[_projectId], "Purchases are paused.");
    uint256 tokenId = _mintToken(_to, _projectId);
    return tokenId;
}
 function earlyMint(address _to, uint256 _projectId, address _by) external returns (uint256 _tokenId) {
    require(isMintWhitelisted[msg.sender], "Must mint from whitelisted minter contract.");
    require(projects[_projectId].earlyActive || _by == projectIdToArtistAddress[_projectId], "Project not in early mint phase");
    require(!projects[_projectId].paused || _by == projectIdToArtistAddress[_projectId], "Purchases are paused.");
    require(projects[_projectId].artworks < projects[_projectId].maxEarly, "Must not exceed early mint allowance");
    uint256 tokenId = _mintToken(_to, _projectId);
    return tokenId;
}
function _mintToken(address _to, uint256 _projectId) internal returns (uint256 _tokenId) {
    uint256 tokenIdToBe = (_projectId * TEN_THOUSAND) + projects[_projectId].artworks + 50; //adding 50 in order to skip pieces claimable by sentient members
    projects[_projectId].artworks = projects[_projectId].artworks.add(1);
    _mint(_to, tokenIdToBe);
    tokenIdToProjectId[tokenIdToBe] = _projectId;
    projectIdToTokenIds[_projectId].push(tokenIdToBe);
    emit Mint(_to, tokenIdToBe, _projectId);
    return tokenIdToBe;
}
 function claimSentient(uint256 _projectId, uint256 membershipId) public {
    require(projects[_projectId].publicActive || projects[_projectId].earlyActive, "Project must exist, and be active or in early mint state");
    require(membershipId < 50, "Must be a Sentient Membership ID (0-49)");
    require(membershipContract.balanceOf(msg.sender, membershipId) == 1, "Wallet does not have this membership ID");
    sentientMint(msg.sender, _projectId, membershipId);
}
function sentientMint(address _to, uint256 _projectId, uint256 _membershipId) internal returns (uint256 _tokenId) {
    uint256 tokenIdToBe = (_projectId * TEN_THOUSAND) + _membershipId;
    _mint(_to, tokenIdToBe);
    tokenIdToProjectId[tokenIdToBe] = _projectId;
    projectIdToTokenIds[_projectId].push(tokenIdToBe);
    emit Mint(_to, tokenIdToBe, _projectId);
    return tokenIdToBe;
}
 function updateMembershipContract(address newAddress) public onlyAdmin {
    membershipContract = mirageContracts(newAddress);
}
 function updateMirageAddress(address _mirageAddress) public onlyAdmin {
    mirageAddress = _mirageAddress;
}
function updateMiragePercentage(uint256 _miragePercentage) public onlyAdmin {
    require(_miragePercentage <= 25, "Max of 25%");
    miragePercentage = _miragePercentage;
}
function addWhitelisted(address _address) public onlyAdmin {
    isWhitelisted[_address] = true;
}
function removeWhitelisted(address _address) public onlyAdmin {
    isWhitelisted[_address] = false;
}
function addMintWhitelisted(address _address) public onlyAdmin {
    isMintWhitelisted[_address] = true;
}
function removeMintWhitelisted(address _address) public onlyAdmin {
    isMintWhitelisted[_address] = false;
}
function toggleProjectIsLocked(uint256 _projectId) public onlyWhitelisted onlyUnlocked(_projectId) {
    projects[_projectId].locked = true;
}
function toggleProjectPublicMint(uint256 _projectId) public onlyWhitelisted {
    projects[_projectId].publicActive = !projects[_projectId].publicActive;
    projects[_projectId].earlyActive = false;
}
 function toggleEarlyMint(uint256 _projectId) public onlyWhitelisted {
    projects[_projectId].earlyActive = !projects[_projectId].earlyActive;
}
function updateProjectArtistAddress(uint256 _projectId, address _artistAddress) public onlyArtistOrWhitelisted(_projectId) {
    projectIdToArtistAddress[_projectId] = _artistAddress;
}
function toggleProjectIsPaused(uint256 _projectId) public onlyWhitelisted {
    projects[_projectId].paused = !projects[_projectId].paused;
}
function addProject(string memory _projectName, string memory tokenURI, string memory description, string memory artistName, string memory projectWebsite, string memory projectLicense, address _artistAddress, uint256 _pricePerTokenInWei, uint256 _maxArtworks, uint256 _maxEarly) public onlyWhitelisted {
    uint256 projectId = nextProjectId;
    projectIdToArtistAddress[projectId] = _artistAddress;
    projects[projectId].name = _projectName;
    projects[projectId].artist = artistName;
    projects[projectId].description = description;
    projects[projectId].website = projectWebsite;
    projects[projectId].license = projectLicense;
    projectIdToCurrencySymbol[projectId] = "ETH";
    projectIdToPricePerTokenInWei[projectId] = _pricePerTokenInWei;
    projects[projectId].paused=false;
    projects[projectId].earlyActive = false;
    projects[projectId].publicActive = false;
    projects[projectId].maxArtworks = _maxArtworks;
    projects[projectId].maxEarly = _maxEarly;
    projects[projectId].projectBaseURI = tokenURI;
    nextProjectId = nextProjectId.add(1);
}
function updateProjectCurrencyInfo(uint256 _projectId, string memory _currencySymbol, address _currencyAddress) onlyAdmin() public {
    projectIdToCurrencySymbol[_projectId] = _currencySymbol;
    projectIdToCurrencyAddress[_projectId] = _currencyAddress;
}
function updateProjectPricePerTokenInWei(uint256 _projectId, uint256 _pricePerTokenInWei) onlyWhitelisted public {
    projectIdToPricePerTokenInWei[_projectId] = _pricePerTokenInWei;
}
function updateProjectName(uint256 _projectId, string memory _projectName) onlyUnlocked(_projectId) onlyAdmin() public {
    projects[_projectId].name = _projectName;
}
function updateProjectArtistName(uint256 _projectId, string memory _projectArtistName) onlyUnlocked(_projectId) onlyArtistOrWhitelisted(_projectId) public {
    projects[_projectId].artist = _projectArtistName;
}
function updateProjectAdditionalPayeeInfo(uint256 _projectId, address _additionalPayee, uint256 _additionalPayeePercentage) onlyArtist(_projectId) public {
    require(_additionalPayeePercentage <= 100, "Max of 100%");
    projectIdToAdditionalPayee[_projectId] = _additionalPayee;
    projectIdToAdditionalPayeePercentage[_projectId] = _additionalPayeePercentage;
}
function updateProjectDescription(uint256 _projectId, string memory _projectDescription) onlyArtist(_projectId) public {
    projects[_projectId].description = _projectDescription;
}
function updateProjectWebsite(uint256 _projectId, string memory _projectWebsite) onlyArtist(_projectId) public {
    projects[_projectId].website = _projectWebsite;
}
function updateProjectLicense(uint256 _projectId, string memory _projectLicense) onlyUnlocked(_projectId) onlyArtistOrWhitelisted(_projectId) public {
    projects[_projectId].license = _projectLicense;
}
function updateProjectMaxArtworks(uint256 _projectId, uint256 _maxArtworks) onlyUnlocked(_projectId) onlyWhitelisted public {
    require(_maxArtworks > projects[_projectId].artworks.add(50), "You must set max artworks greater than current artworks");
    require(_maxArtworks <= 5000, "Cannot exceed 5000");
    projects[_projectId].maxArtworks = _maxArtworks;
}
 function updateProjectMaxEarly(uint256 _projectId, uint256 _maxEarly) onlyUnlocked(_projectId) onlyWhitelisted public {
    require(_maxEarly < projects[_projectId].maxArtworks, "Early mint amount must be less than total number of artworks");
    require(_maxEarly <= 2500, "Cannot exceed 2500");
    projects[_projectId].maxEarly = _maxEarly;
}
function updateProjectBaseURI(uint256 _projectId, string memory _newBaseURI) onlyWhitelisted public {
    projects[_projectId].projectBaseURI = _newBaseURI;
}
function projectDetails(uint256 _projectId) view public returns (string memory projectName, string memory artist, string memory description, string memory website, string memory license) {
    projectName = projects[_projectId].name;
    artist = projects[_projectId].artist;
    description = projects[_projectId].description;
    website = projects[_projectId].website;
    license = projects[_projectId].license;
}
function projectTokenInfo(uint256 _projectId) view public returns (address artistAddress, uint256 pricePerTokenInWei, uint256 artworks, uint256 maxArtworks, uint256 maxEarly, address additionalPayee, uint256 additionalPayeePercentage, bool publicActive, bool earlyActive, string memory currency) {
    artistAddress = projectIdToArtistAddress[_projectId];
    pricePerTokenInWei = projectIdToPricePerTokenInWei[_projectId];
    artworks = projects[_projectId].artworks.add(50); //add 50 to account for claimable pieces for sentient members
    maxArtworks = projects[_projectId].maxArtworks;
    maxEarly = projects[_projectId].maxEarly;
    publicActive = projects[_projectId].publicActive;
    earlyActive = projects[_projectId].earlyActive;
    additionalPayee = projectIdToAdditionalPayee[_projectId];
    additionalPayeePercentage = projectIdToAdditionalPayeePercentage[_projectId];
    currency = projectIdToCurrencySymbol[_projectId];
}
function projectURIInfo(uint256 _projectId) view public returns (string memory projectBaseURI) {
    projectBaseURI = projects[_projectId].projectBaseURI;
}
function projectShowAllTokens(uint _projectId) public view returns (uint256[] memory){
    return projectIdToTokenIds[_projectId];
}
function tokensOfOwner(address owner) external view returns (uint256[] memory) {
    return _tokensOfOwner(owner);
}
function getRoyaltyData(uint256 _tokenId) public view returns (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage) {
    artistAddress = projectIdToArtistAddress[tokenIdToProjectId[_tokenId]];
    additionalPayee = projectIdToAdditionalPayee[tokenIdToProjectId[_tokenId]];
    additionalPayeePercentage = projectIdToAdditionalPayeePercentage[tokenIdToProjectId[_tokenId]];
}
function tokenURI(uint256 _tokenId) external view onlyValidTokenId(_tokenId) returns (string memory) {
    return Strings.strConcat(projects[tokenIdToProjectId[_tokenId]].projectBaseURI, 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":false,"inputs":[{"name":"_projectId","type":"uint256"},{"name":"_projectName","type":"string"}],"name":"updateProjectName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_projectId","type":"uint256"},{"name":"_by","type":"address"}],"name":"mint","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_projectId","type":"uint256"}],"name":"toggleProjectPublicMint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","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":"_mirageAddress","type":"address"}],"name":"updateMirageAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokenIdToProjectId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_projectName","type":"string"},{"name":"tokenURI","type":"string"},{"name":"description","type":"string"},{"name":"artistName","type":"string"},{"name":"projectWebsite","type":"string"},{"name":"projectLicense","type":"string"},{"name":"_artistAddress","type":"address"},{"name":"_pricePerTokenInWei","type":"uint256"},{"name":"_maxArtworks","type":"uint256"},{"name":"_maxEarly","type":"uint256"}],"name":"addProject","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"projectIdToCurrencySymbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","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":false,"inputs":[{"name":"_projectId","type":"uint256"},{"name":"_projectLicense","type":"string"}],"name":"updateProjectLicense","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"removeWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_projectId","type":"uint256"}],"name":"projectURIInfo","outputs":[{"name":"projectBaseURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_miragePercentage","type":"uint256"}],"name":"updateMiragePercentage","outputs":[],"payable":false,"stateMutability":"nonpayable","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":false,"inputs":[{"name":"_projectId","type":"uint256"},{"name":"_projectWebsite","type":"string"}],"name":"updateProjectWebsite","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_projectId","type":"uint256"},{"name":"_maxArtworks","type":"uint256"}],"name":"updateProjectMaxArtworks","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_projectId","type":"uint256"},{"name":"_newBaseURI","type":"string"}],"name":"updateProjectBaseURI","outputs":[],"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":true,"inputs":[{"name":"","type":"uint256"}],"name":"projectIdToCurrencyAddress","outputs":[{"name":"","type":"address"}],"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":"membershipContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"miragePercentage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokenIdToHash","outputs":[{"name":"","type":"bytes32"}],"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":false,"inputs":[{"name":"_projectId","type":"uint256"},{"name":"_artistAddress","type":"address"}],"name":"updateProjectArtistAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":"_address","type":"address"}],"name":"removeMintWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_projectId","type":"uint256"}],"name":"toggleProjectIsLocked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"addMintWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_projectId","type":"uint256"}],"name":"projectTokenInfo","outputs":[{"name":"artistAddress","type":"address"},{"name":"pricePerTokenInWei","type":"uint256"},{"name":"artworks","type":"uint256"},{"name":"maxArtworks","type":"uint256"},{"name":"maxEarly","type":"uint256"},{"name":"additionalPayee","type":"address"},{"name":"additionalPayeePercentage","type":"uint256"},{"name":"publicActive","type":"bool"},{"name":"earlyActive","type":"bool"},{"name":"currency","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_projectId","type":"uint256"}],"name":"projectDetails","outputs":[{"name":"projectName","type":"string"},{"name":"artist","type":"string"},{"name":"description","type":"string"},{"name":"website","type":"string"},{"name":"license","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_projectId","type":"uint256"},{"name":"_pricePerTokenInWei","type":"uint256"}],"name":"updateProjectPricePerTokenInWei","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_projectId","type":"uint256"},{"name":"_maxEarly","type":"uint256"}],"name":"updateProjectMaxEarly","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_projectId","type":"uint256"}],"name":"toggleProjectIsPaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_projectId","type":"uint256"},{"name":"_projectDescription","type":"string"}],"name":"updateProjectDescription","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"mirageAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"projectIdToArtistAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getRoyaltyData","outputs":[{"name":"artistAddress","type":"address"},{"name":"additionalPayee","type":"address"},{"name":"additionalPayeePercentage","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_projectId","type":"uint256"},{"name":"membershipId","type":"uint256"}],"name":"claimSentient","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isMintWhitelisted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_projectId","type":"uint256"},{"name":"_projectArtistName","type":"string"}],"name":"updateProjectArtistName","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"_projectId","type":"uint256"}],"name":"projectShowAllTokens","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_projectId","type":"uint256"}],"name":"toggleEarlyMint","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"projectIdToAdditionalPayeePercentage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAddress","type":"address"}],"name":"updateMembershipContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_projectId","type":"uint256"},{"name":"_currencySymbol","type":"string"},{"name":"_currencyAddress","type":"address"}],"name":"updateProjectCurrencyInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"projectIdToAdditionalPayee","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_projectId","type":"uint256"},{"name":"_additionalPayee","type":"address"},{"name":"_additionalPayeePercentage","type":"uint256"}],"name":"updateProjectAdditionalPayeeInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_projectId","type":"uint256"},{"name":"_by","type":"address"}],"name":"earlyMint","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"nextProjectId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":true,"inputs":[{"name":"","type":"bytes32"}],"name":"hashToTokenId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"projectIdToPricePerTokenInWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_tokenName","type":"string"},{"name":"_tokenSymbol","type":"string"},{"name":"membershipAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_to","type":"address"},{"indexed":true,"name":"_tokenId","type":"uint256"},{"indexed":true,"name":"_projectId","type":"uint256"}],"name":"Mint","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"}]

6080604052600a6014556001601c553480156200001b57600080fd5b50604051620057c2380380620057c2833981018060405260608110156200004157600080fd5b8101908080516401000000008111156200005a57600080fd5b820160208101848111156200006e57600080fd5b81516401000000008111828201871017156200008957600080fd5b50509291906020018051640100000000811115620000a657600080fd5b82016020810184811115620000ba57600080fd5b8151640100000000811182820187101715620000d557600080fd5b505060209091015190925090508282620001187f01ffc9a7000000000000000000000000000000000000000000000000000000006401000000006200023f810204565b6200014c7f80ac58cd000000000000000000000000000000000000000000000000000000006401000000006200023f810204565b620001807f780e9d63000000000000000000000000000000000000000000000000000000006401000000006200023f810204565b8151620001959060099060208501906200030e565b508051620001ab90600a9060208401906200030e565b50620001e07f5b5e139f000000000000000000000000000000000000000000000000000000006401000000006200023f810204565b50506019805433600160a060020a031991821681179092556000828152601a60205260409020805460ff1916600117905560128054821690921790915560138054909116600160a060020a039290921691909117905550620003b39050565b7fffffffff000000000000000000000000000000000000000000000000000000008082161415620002d157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200035157805160ff191683800117855562000381565b8280016001018555821562000381579182015b828111156200038157825182559160200191906001019062000364565b506200038f92915062000393565b5090565b620003b091905b808211156200038f57600081556001016200039a565b90565b6153ff80620003c36000396000f3fe6080604052600436106103005763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a7811461030557806306fdde0314610362578063081812fc146103ec578063095ea7b3146104325780630d1706731461046d5780630d4d1513146105275780630ef890b51461057c57806310154bad146105a657806318160ddd146105d95780631b3bf407146105ee5780631b689c0b146106215780631c1c80461461064b57806320927ec9146109bc57806323b872dd146109e657806325b75d6814610a29578063291d954914610ae35780632d9c020514610b165780632df73ce614610b405780632f745c5914610b6a5780633785996314610ba357806337c749b914610c5d5780633af32abf14610c8d5780633e48e84814610cc057806342842e0e14610d7a578063498dd0c114610dbd5780634f6ccce714610de757806351ec8d1e14610e11578063573886f414610e26578063621a1f7414610e3b5780636352211e14610e6557806369d14faf14610e8f57806370a0823114610ec85780638462151c14610efb578063867f1a3b14610f7e5780638ba8f14d14610fb15780638bddb0a614610fdb5780638c2c36221461100e5780638dd91a561461111b57806395d89b411461135557806397dc86cf1461136a57806397f41b1a1461139a578063a11ec70a146113ca578063a22cb465146113f4578063a3b2cca61461142f578063a3fd3a8e146114e9578063a47d29cb146114fe578063a65ff74c14611528578063a874258d1461157c578063ad0305ce146115ac578063b7b04fae146115df578063b88d4fde14611699578063bee04f9c1461176c578063c370d39014611796578063c87b56dd146117c0578063cc74234b146117ea578063ccc4894014611814578063d195b36514611847578063d7b044b61461190c578063e13208b414611936578063e21a82f214611975578063e935b7b1146119b8578063e985e9c5146119cd578063f51f74a914611a08578063f70c0f0414611a32578063f851a44014611a5c575b600080fd5b34801561031157600080fd5b5061034e6004803603602081101561032857600080fd5b50357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916611a71565b604080519115158252519081900360200190f35b34801561036e57600080fd5b50610377611aa9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103b1578181015183820152602001610399565b50505050905090810190601f1680156103de5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103f857600080fd5b506104166004803603602081101561040f57600080fd5b5035611b40565b60408051600160a060020a039092168252519081900360200190f35b34801561043e57600080fd5b5061046b6004803603604081101561045557600080fd5b50600160a060020a038135169060200135611be3565b005b34801561047957600080fd5b5061046b6004803603604081101561049057600080fd5b813591908101906040810160208201356401000000008111156104b257600080fd5b8201836020820111156104c457600080fd5b803590602001918460018302840111640100000000831117156104e657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d6e945050505050565b34801561053357600080fd5b5061056a6004803603606081101561054a57600080fd5b50600160a060020a03813581169160208101359160409091013516611e42565b60408051918252519081900360200190f35b34801561058857600080fd5b5061046b6004803603602081101561059f57600080fd5b503561208b565b3480156105b257600080fd5b5061046b600480360360208110156105c957600080fd5b5035600160a060020a031661210c565b3480156105e557600080fd5b5061056a612180565b3480156105fa57600080fd5b5061046b6004803603602081101561061157600080fd5b5035600160a060020a0316612186565b34801561062d57600080fd5b5061056a6004803603602081101561064457600080fd5b50356121f8565b34801561065757600080fd5b5061046b600480360361014081101561066f57600080fd5b81019060208101813564010000000081111561068a57600080fd5b82018360208201111561069c57600080fd5b803590602001918460018302840111640100000000831117156106be57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561071157600080fd5b82018360208201111561072357600080fd5b8035906020019184600183028401116401000000008311171561074557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561079857600080fd5b8201836020820111156107aa57600080fd5b803590602001918460018302840111640100000000831117156107cc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561081f57600080fd5b82018360208201111561083157600080fd5b8035906020019184600183028401116401000000008311171561085357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156108a657600080fd5b8201836020820111156108b857600080fd5b803590602001918460018302840111640100000000831117156108da57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561092d57600080fd5b82018360208201111561093f57600080fd5b8035906020019184600183028401116401000000008311171561096157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050600160a060020a03833516935050506020810135906040810135906060013561220a565b3480156109c857600080fd5b50610377600480360360208110156109df57600080fd5b50356123fe565b3480156109f257600080fd5b5061046b60048036036060811015610a0957600080fd5b50600160a060020a03813581169160208101359091169060400135612499565b348015610a3557600080fd5b5061046b60048036036040811015610a4c57600080fd5b81359190810190604081016020820135640100000000811115610a6e57600080fd5b820183602082011115610a8057600080fd5b80359060200191846001830284011164010000000083111715610aa257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061252f945050505050565b348015610aef57600080fd5b5061046b60048036036020811015610b0657600080fd5b5035600160a060020a0316612646565b348015610b2257600080fd5b5061037760048036036020811015610b3957600080fd5b50356126b7565b348015610b4c57600080fd5b5061046b60048036036020811015610b6357600080fd5b503561275b565b348015610b7657600080fd5b5061056a60048036036040811015610b8d57600080fd5b50600160a060020a038135169060200135612809565b348015610baf57600080fd5b5061046b60048036036040811015610bc657600080fd5b81359190810190604081016020820135640100000000811115610be857600080fd5b820183602082011115610bfa57600080fd5b80359060200191846001830284011164010000000083111715610c1c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506128c7945050505050565b348015610c6957600080fd5b5061046b60048036036040811015610c8057600080fd5b508035906020013561295c565b348015610c9957600080fd5b5061034e60048036036020811015610cb057600080fd5b5035600160a060020a0316612b21565b348015610ccc57600080fd5b5061046b60048036036040811015610ce357600080fd5b81359190810190604081016020820135640100000000811115610d0557600080fd5b820183602082011115610d1757600080fd5b80359060200191846001830284011164010000000083111715610d3957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612b36945050505050565b348015610d8657600080fd5b5061046b60048036036060811015610d9d57600080fd5b50600160a060020a03813581169160208101359091169060400135612bb2565b348015610dc957600080fd5b5061041660048036036020811015610de057600080fd5b5035612bce565b348015610df357600080fd5b5061056a60048036036020811015610e0a57600080fd5b5035612be9565b348015610e1d57600080fd5b50610416612c8f565b348015610e3257600080fd5b5061056a612c9e565b348015610e4757600080fd5b5061056a60048036036020811015610e5e57600080fd5b5035612ca4565b348015610e7157600080fd5b5061041660048036036020811015610e8857600080fd5b5035612cb6565b348015610e9b57600080fd5b5061046b60048036036040811015610eb257600080fd5b5080359060200135600160a060020a0316612d51565b348015610ed457600080fd5b5061056a60048036036020811015610eeb57600080fd5b5035600160a060020a0316612e0c565b348015610f0757600080fd5b50610f2e60048036036020811015610f1e57600080fd5b5035600160a060020a0316612eb5565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610f6a578181015183820152602001610f52565b505050509050019250505060405180910390f35b348015610f8a57600080fd5b5061046b60048036036020811015610fa157600080fd5b5035600160a060020a0316612f15565b348015610fbd57600080fd5b5061046b60048036036020811015610fd457600080fd5b5035612f86565b348015610fe757600080fd5b5061046b60048036036020811015610ffe57600080fd5b5035600160a060020a031661305d565b34801561101a57600080fd5b506110386004803603602081101561103157600080fd5b50356130d1565b604051808b600160a060020a0316600160a060020a031681526020018a815260200189815260200188815260200187815260200186600160a060020a0316600160a060020a03168152602001858152602001841515151581526020018315151515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156110d75781810151838201526020016110bf565b50505050905090810190601f1680156111045780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390f35b34801561112757600080fd5b506111456004803603602081101561113e57600080fd5b503561329e565b60405180806020018060200180602001806020018060200186810386528b818151815260200191508051906020019080838360005b8381101561119257818101518382015260200161117a565b50505050905090810190601f1680156111bf5780820380516001836020036101000a031916815260200191505b5086810385528a5181528a516020918201918c019080838360005b838110156111f25781810151838201526020016111da565b50505050905090810190601f16801561121f5780820380516001836020036101000a031916815260200191505b5086810384528951815289516020918201918b019080838360005b8381101561125257818101518382015260200161123a565b50505050905090810190601f16801561127f5780820380516001836020036101000a031916815260200191505b5086810383528851815288516020918201918a019080838360005b838110156112b257818101518382015260200161129a565b50505050905090810190601f1680156112df5780820380516001836020036101000a031916815260200191505b50868103825287518152875160209182019189019080838360005b838110156113125781810151838201526020016112fa565b50505050905090810190601f16801561133f5780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b34801561136157600080fd5b506103776135d7565b34801561137657600080fd5b5061046b6004803603604081101561138d57600080fd5b5080359060200135613638565b3480156113a657600080fd5b5061046b600480360360408110156113bd57600080fd5b50803590602001356136a1565b3480156113d657600080fd5b5061046b600480360360208110156113ed57600080fd5b5035613855565b34801561140057600080fd5b5061046b6004803603604081101561141757600080fd5b50600160a060020a03813516906020013515156138da565b34801561143b57600080fd5b5061046b6004803603604081101561145257600080fd5b8135919081019060408101602082013564010000000081111561147457600080fd5b82018360208201111561148657600080fd5b803590602001918460018302840111640100000000831117156114a857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506139a9945050505050565b3480156114f557600080fd5b50610416613a3e565b34801561150a57600080fd5b506104166004803603602081101561152157600080fd5b5035613a4d565b34801561153457600080fd5b506115526004803603602081101561154b57600080fd5b5035613a68565b60408051600160a060020a0394851681529290931660208301528183015290519081900360600190f35b34801561158857600080fd5b5061046b6004803603604081101561159f57600080fd5b5080359060200135613aa7565b3480156115b857600080fd5b5061034e600480360360208110156115cf57600080fd5b5035600160a060020a0316613cf6565b3480156115eb57600080fd5b5061046b6004803603604081101561160257600080fd5b8135919081019060408101602082013564010000000081111561162457600080fd5b82018360208201111561163657600080fd5b8035906020019184600183028401116401000000008311171561165857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613d0b945050505050565b3480156116a557600080fd5b5061046b600480360360808110156116bc57600080fd5b600160a060020a038235811692602081013590911691604082013591908101906080810160608201356401000000008111156116f757600080fd5b82018360208201111561170957600080fd5b8035906020019184600183028401116401000000008311171561172b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613e1b945050505050565b34801561177857600080fd5b50610f2e6004803603602081101561178f57600080fd5b5035613eae565b3480156117a257600080fd5b5061046b600480360360208110156117b957600080fd5b5035613f0e565b3480156117cc57600080fd5b50610377600480360360208110156117e357600080fd5b5035613f95565b3480156117f657600080fd5b5061056a6004803603602081101561180d57600080fd5b50356140b4565b34801561182057600080fd5b5061046b6004803603602081101561183757600080fd5b5035600160a060020a03166140c6565b34801561185357600080fd5b5061046b6004803603606081101561186a57600080fd5b8135919081019060408101602082013564010000000081111561188c57600080fd5b82018360208201111561189e57600080fd5b803590602001918460018302840111640100000000831117156118c057600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050509035600160a060020a031691506141389050565b34801561191857600080fd5b506104166004803603602081101561192f57600080fd5b50356141d8565b34801561194257600080fd5b5061046b6004803603606081101561195957600080fd5b50803590600160a060020a0360208201351690604001356141f3565b34801561198157600080fd5b5061056a6004803603606081101561199857600080fd5b50600160a060020a038135811691602081013591604090910135166142f6565b3480156119c457600080fd5b5061056a614544565b3480156119d957600080fd5b5061034e600480360360408110156119f057600080fd5b50600160a060020a038135811691602001351661454a565b348015611a1457600080fd5b5061056a60048036036020811015611a2b57600080fd5b5035614578565b348015611a3e57600080fd5b5061056a60048036036020811015611a5557600080fd5b503561458a565b348015611a6857600080fd5b5061041661459c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19811660009081526020819052604090205460ff165b919050565b60098054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015611b355780601f10611b0a57610100808354040283529160200191611b35565b820191906000526020600020905b815481529060010190602001808311611b1857829003601f168201915b505050505090505b90565b6000611b4b826145ab565b1515611bc7576040805160e560020a62461bcd02815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606482015290519081900360840190fd5b50600090815260026020526040902054600160a060020a031690565b6000611bee82612cb6565b9050600160a060020a038381169082161415611c7a576040805160e560020a62461bcd02815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b33600160a060020a0382161480611c965750611c96813361454a565b1515611d12576040805160e560020a62461bcd02815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015290519081900360840190fd5b6000828152600260205260408082208054600160a060020a031916600160a060020a0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000828152600b60205260409020600901548290610100900460ff1615611dcd576040805160e560020a62461bcd02815260206004820152601060248201526000805160206153b4833981519152604482015290519081900360640190fd5b601954600160a060020a03163314611e1d576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b6000838152600b602090815260409091208351611e3c928501906152bb565b50505050565b336000908152601b602052604081205460ff161515611ed1576040805160e560020a62461bcd02815260206004820152602b60248201527f4d757374206d696e742066726f6d2077686974656c6973746564206d696e746560448201527f7220636f6e74726163742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000838152600b602052604090206007810154600690910154611efb90603363ffffffff6145c816565b1115611f51576040805160e560020a62461bcd02815260206004820152601c60248201527f4d757374206e6f7420657863656564206d617820617274776f726b7300000000604482015290519081900360640190fd5b6000838152600b602052604090206009015460ff1680611f8a57506000838152600c6020526040902054600160a060020a038381169116145b1515611fe0576040805160e560020a62461bcd02815260206004820181905260248201527f50726f6a656374206d75737420657869737420616e6420626520616374697665604482015290519081900360640190fd5b6000838152600b602052604090206009015462010000900460ff16158061202057506000838152600c6020526040902054600160a060020a038381169116145b1515612076576040805160e560020a62461bcd02815260206004820152601560248201527f50757263686173657320617265207061757365642e0000000000000000000000604482015290519081900360640190fd5b60006120828585614625565b95945050505050565b336000908152601a602052604090205460ff1615156120e2576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b6000908152600b60205260409020600901805460ff81161560ff199091161763ff00000019169055565b601954600160a060020a0316331461215c576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b600160a060020a03166000908152601a60205260409020805460ff19166001179055565b60075490565b601954600160a060020a031633146121d6576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b60128054600160a060020a031916600160a060020a0392909216919091179055565b60156020526000908152604090205481565b336000908152601a602052604090205460ff161515612261576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b601c546000818152600c602090815260408083208054600160a060020a031916600160a060020a038a16179055600b82529091208c516122a3928e01906152bb565b506000818152600b6020908152604090912089516122c9926001909201918b01906152bb565b506000818152600b602090815260409091208a516122ef926002909201918c01906152bb565b506000818152600b602090815260409091208851612315926003909201918a01906152bb565b506000818152600b60209081526040909120875161233b926004909201918901906152bb565b50604080518082018252600381527f455448000000000000000000000000000000000000000000000000000000000060208083019182526000858152600d90915292909220905161238c92906152bb565b506000818152600f60209081526040808320879055600b825290912060098101805463ffff00ff1916905560078101859055600881018490558b516123d9926005909201918d01906152bb565b50601c546123ee90600163ffffffff6145c816565b601c555050505050505050505050565b600d6020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156124915780601f1061246657610100808354040283529160200191612491565b820191906000526020600020905b81548152906001019060200180831161247457829003601f168201915b505050505081565b6124a333826146db565b151561251f576040805160e560020a62461bcd02815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606482015290519081900360840190fd5b61252a8383836147c0565b505050565b6000828152600b60205260409020600901548290610100900460ff161561258e576040805160e560020a62461bcd02815260206004820152601060248201526000805160206153b4833981519152604482015290519081900360640190fd5b336000908152601a6020526040902054839060ff16806125c457506000818152600c6020526040902054600160a060020a031633145b151561261a576040805160e560020a62461bcd02815260206004820152601a60248201527f4f6e6c7920617274697374206f722077686974656c6973746564000000000000604482015290519081900360640190fd5b6000848152600b60209081526040909120845161263f926004909201918601906152bb565b5050505050565b601954600160a060020a03163314612696576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b600160a060020a03166000908152601a60205260409020805460ff19169055565b6000818152600b602090815260409182902060050180548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526060939283018282801561274f5780601f106127245761010080835404028352916020019161274f565b820191906000526020600020905b81548152906001019060200180831161273257829003601f168201915b50505050509050919050565b601954600160a060020a031633146127ab576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b6019811115612804576040805160e560020a62461bcd02815260206004820152600a60248201527f4d6178206f662032352500000000000000000000000000000000000000000000604482015290519081900360640190fd5b601455565b600061281483612e0c565b8210612890576040805160e560020a62461bcd02815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e6473000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03831660009081526005602052604090208054839081106128b457fe5b9060005260206000200154905092915050565b6000828152600c60205260409020548290600160a060020a03163314612937576040805160e560020a62461bcd02815260206004820152600b60248201527f4f6e6c7920617274697374000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000838152600b602090815260409091208351611e3c926003909201918501906152bb565b6000828152600b60205260409020600901548290610100900460ff16156129bb576040805160e560020a62461bcd02815260206004820152601060248201526000805160206153b4833981519152604482015290519081900360640190fd5b336000908152601a602052604090205460ff161515612a12576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b6000838152600b6020526040902060060154612a3590603263ffffffff6145c816565b8211612ab1576040805160e560020a62461bcd02815260206004820152603760248201527f596f75206d75737420736574206d617820617274776f726b732067726561746560448201527f72207468616e2063757272656e7420617274776f726b73000000000000000000606482015290519081900360840190fd5b611388821115612b0b576040805160e560020a62461bcd02815260206004820152601260248201527f43616e6e6f742065786365656420353030300000000000000000000000000000604482015290519081900360640190fd5b506000918252600b602052604090912060070155565b601a6020526000908152604090205460ff1681565b336000908152601a602052604090205460ff161515612b8d576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b6000828152600b60209081526040909120825161252a926005909201918401906152bb565b61252a8383836020604051908101604052806000815250613e1b565b600e60205260009081526040902054600160a060020a031681565b6000612bf3612180565b8210612c6f576040805160e560020a62461bcd02815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e64730000000000000000000000000000000000000000606482015290519081900360840190fd5b6007805483908110612c7d57fe5b90600052602060002001549050919050565b601354600160a060020a031681565b60145481565b60176020526000908152604090205481565b600081815260016020526040812054600160a060020a0316801515612d4b576040805160e560020a62461bcd02815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b92915050565b336000908152601a6020526040902054829060ff1680612d8757506000818152600c6020526040902054600160a060020a031633145b1515612ddd576040805160e560020a62461bcd02815260206004820152601a60248201527f4f6e6c7920617274697374206f722077686974656c6973746564000000000000604482015290519081900360640190fd5b506000918252600c60205260409091208054600160a060020a031916600160a060020a03909216919091179055565b6000600160a060020a0382161515612e94576040805160e560020a62461bcd02815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f206164647265737300000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0382166000908152600360205260409020612d4b906147df565b6060612ec0826147e3565b80548060200260200160405190810160405280929190818152602001828054801561274f57602002820191906000526020600020905b815481526020019060010190808311612ef65750505050509050919050565b601954600160a060020a03163314612f65576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b600160a060020a03166000908152601b60205260409020805460ff19169055565b336000908152601a602052604090205460ff161515612fdd576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b6000818152600b60205260409020600901548190610100900460ff161561303c576040805160e560020a62461bcd02815260206004820152601060248201526000805160206153b4833981519152604482015290519081900360640190fd5b506000908152600b60205260409020600901805461ff001916610100179055565b601954600160a060020a031633146130ad576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b600160a060020a03166000908152601b60205260409020805460ff19166001179055565b6000818152600c6020908152604080832054600f835281842054600b90935290832060060154600160a060020a03909116929081908190819081908190819060609061312490603263ffffffff6145c816565b9750600b60008c8152602001908152602001600020600701549650600b60008c8152602001908152602001600020600801549550600b60008c815260200190815260200160002060090160009054906101000a900460ff169250600b60008c815260200190815260200160002060090160039054906101000a900460ff169150601060008c815260200190815260200160002060009054906101000a9004600160a060020a03169450601160008c8152602001908152602001600020549350600d60008c81526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561328a5780601f1061325f5761010080835404028352916020019161328a565b820191906000526020600020905b81548152906001019060200180831161326d57829003601f168201915b505050505090509193959799509193959799565b6000818152600b602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845260609384938493849384939283018282801561333b5780601f106133105761010080835404028352916020019161333b565b820191906000526020600020905b81548152906001019060200180831161331e57829003601f168201915b50505050509450600b60008781526020019081526020016000206001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156133ec5780601f106133c1576101008083540402835291602001916133ec565b820191906000526020600020905b8154815290600101906020018083116133cf57829003601f168201915b5050506000898152600b60209081526040918290206002908101805484516001821615610100026000190190911692909204601f810184900484028301840190945283825295995094935090915083018282801561348b5780601f106134605761010080835404028352916020019161348b565b820191906000526020600020905b81548152906001019060200180831161346e57829003601f168201915b5050506000898152600b60209081526040918290206003018054835160026001831615610100026000190190921691909104601f810184900484028201840190945283815295985093509091508301828280156135295780601f106134fe57610100808354040283529160200191613529565b820191906000526020600020905b81548152906001019060200180831161350c57829003601f168201915b5050506000898152600b60209081526040918290206004018054835160026001831615610100026000190190921691909104601f810184900484028201840190945283815295975093509091508301828280156135c75780601f1061359c576101008083540402835291602001916135c7565b820191906000526020600020905b8154815290600101906020018083116135aa57829003601f168201915b5050505050905091939590929450565b600a8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015611b355780601f10611b0a57610100808354040283529160200191611b35565b336000908152601a602052604090205460ff16151561368f576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b6000918252600f602052604090912055565b6000828152600b60205260409020600901548290610100900460ff1615613700576040805160e560020a62461bcd02815260206004820152601060248201526000805160206153b4833981519152604482015290519081900360640190fd5b336000908152601a602052604090205460ff161515613757576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b6000838152600b602052604090206007015482106137e5576040805160e560020a62461bcd02815260206004820152603c60248201527f4561726c79206d696e7420616d6f756e74206d757374206265206c657373207460448201527f68616e20746f74616c206e756d626572206f6620617274776f726b7300000000606482015290519081900360840190fd5b6109c482111561383f576040805160e560020a62461bcd02815260206004820152601260248201527f43616e6e6f742065786365656420323530300000000000000000000000000000604482015290519081900360640190fd5b506000918252600b602052604090912060080155565b336000908152601a602052604090205460ff1615156138ac576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b6000908152600b60205260409020600901805462ff0000198116620100009182900460ff1615909102179055565b600160a060020a03821633141561393b576040805160e560020a62461bcd02815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b336000818152600460209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6000828152600c60205260409020548290600160a060020a03163314613a19576040805160e560020a62461bcd02815260206004820152600b60248201527f4f6e6c7920617274697374000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000838152600b602090815260409091208351611e3c926002909201918501906152bb565b601254600160a060020a031681565b600c60205260009081526040902054600160a060020a031681565b6000908152601560209081526040808320548352600c82528083205460108352818420546011909352922054600160a060020a03928316939290911691565b6000828152600b602052604090206009015460ff1680613adf57506000828152600b60205260409020600901546301000000900460ff165b1515613b5b576040805160e560020a62461bcd02815260206004820152603860248201527f50726f6a656374206d7573742065786973742c20616e6420626520616374697660448201527f65206f7220696e206561726c79206d696e742073746174650000000000000000606482015290519081900360840190fd5b60328110613bd9576040805160e560020a62461bcd02815260206004820152602760248201527f4d75737420626520612053656e7469656e74204d656d6265727368697020494460448201527f2028302d34392900000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b601354604080517efdd58e000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051600160a060020a039092169162fdd58e91604480820192602092909190829003018186803b158015613c4257600080fd5b505afa158015613c56573d6000803e3d6000fd5b505050506040513d6020811015613c6c57600080fd5b5051600114613ceb576040805160e560020a62461bcd02815260206004820152602760248201527f57616c6c657420646f6573206e6f7420686176652074686973206d656d62657260448201527f7368697020494400000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61252a3383836147fd565b601b6020526000908152604090205460ff1681565b6000828152600b60205260409020600901548290610100900460ff1615613d6a576040805160e560020a62461bcd02815260206004820152601060248201526000805160206153b4833981519152604482015290519081900360640190fd5b336000908152601a6020526040902054839060ff1680613da057506000818152600c6020526040902054600160a060020a031633145b1515613df6576040805160e560020a62461bcd02815260206004820152601a60248201527f4f6e6c7920617274697374206f722077686974656c6973746564000000000000604482015290519081900360640190fd5b6000848152600b60209081526040909120845161263f926001909201918601906152bb565b613e26848484612499565b613e328484848461487d565b1515611e3c576040805160e560020a62461bcd02815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015290519081900360840190fd5b60008181526016602090815260409182902080548351818402810184019094528084526060939283018282801561274f5760200282019190600052602060002090815481526020019060010190808311612ef65750505050509050919050565b336000908152601a602052604090205460ff161515613f65576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b6000908152600b60205260409020600901805463ff00000019811663010000009182900460ff1615909102179055565b606081613fa1816145ab565b1515613ff7576040805160e560020a62461bcd02815260206004820152601760248201527f546f6b656e20494420646f6573206e6f74206578697374000000000000000000604482015290519081900360640190fd5b6000838152601560209081526040808320548352600b82529182902060050180548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526140ad939283018282801561409a5780601f1061406f5761010080835404028352916020019161409a565b820191906000526020600020905b81548152906001019060200180831161407d57829003601f168201915b50505050506140a8856149f9565b614add565b9392505050565b60116020526000908152604090205481565b601954600160a060020a03163314614116576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b60138054600160a060020a031916600160a060020a0392909216919091179055565b601954600160a060020a03163314614188576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b6000838152600d6020908152604090912083516141a7928501906152bb565b506000928352600e60205260409092208054600160a060020a031916600160a060020a039093169290921790915550565b601060205260009081526040902054600160a060020a031681565b6000838152600c60205260409020548390600160a060020a03163314614263576040805160e560020a62461bcd02815260206004820152600b60248201527f4f6e6c7920617274697374000000000000000000000000000000000000000000604482015290519081900360640190fd5b60648211156142bc576040805160e560020a62461bcd02815260206004820152600b60248201527f4d6178206f662031303025000000000000000000000000000000000000000000604482015290519081900360640190fd5b5060009283526010602090815260408085208054600160a060020a031916600160a060020a03959095169490941790935560119052912055565b336000908152601b602052604081205460ff161515614385576040805160e560020a62461bcd02815260206004820152602b60248201527f4d757374206d696e742066726f6d2077686974656c6973746564206d696e746560448201527f7220636f6e74726163742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000838152600b60205260409020600901546301000000900460ff16806143c557506000838152600c6020526040902054600160a060020a038381169116145b151561441b576040805160e560020a62461bcd02815260206004820152601f60248201527f50726f6a656374206e6f7420696e206561726c79206d696e7420706861736500604482015290519081900360640190fd5b6000838152600b602052604090206009015462010000900460ff16158061445b57506000838152600c6020526040902054600160a060020a038381169116145b15156144b1576040805160e560020a62461bcd02815260206004820152601560248201527f50757263686173657320617265207061757365642e0000000000000000000000604482015290519081900360640190fd5b6000838152600b60205260409020600881015460069091015410612076576040805160e560020a62461bcd028152602060048201526024808201527f4d757374206e6f7420657863656564206561726c79206d696e7420616c6c6f7760448201527f616e636500000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b601c5481565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205460ff1690565b60186020526000908152604090205481565b600f6020526000908152604090205481565b601954600160a060020a031681565b600090815260016020526040902054600160a060020a0316151590565b6000828201838110156140ad576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000818152600b6020526040812060060154603261271084028201019061465390600163ffffffff6145c816565b6000848152600b602052604090206006015561466f8482614b12565b60008181526015602090815260408083208690558583526016825280832080546001810182559084529183209091018390555184918391600160a060020a038816917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f91a49392505050565b60006146e6826145ab565b1515614762576040805160e560020a62461bcd02815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606482015290519081900360840190fd5b600061476d83612cb6565b905080600160a060020a031684600160a060020a031614806147a8575083600160a060020a031661479d84611b40565b600160a060020a0316145b806147b857506147b8818561454a565b949350505050565b6147cb838383614b33565b6147d58382614cf6565b61252a8282614de6565b5490565b600160a060020a0316600090815260056020526040902090565b6000612710830282016148108582614b12565b60008181526015602090815260408083208790558683526016825280832080546001810182559084529183209091018390555185918391600160a060020a038916917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f91a4949350505050565b600061489184600160a060020a0316614e24565b151561489f575060016147b8565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b8381101561493257818101518382015260200161491a565b50505050905090810190601f16801561495f5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561498157600080fd5b505af1158015614995573d6000803e3d6000fd5b505050506040513d60208110156149ab57600080fd5b50517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f150b7a020000000000000000000000000000000000000000000000000000000014915050949350505050565b6060811515614a3c575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152611aa4565b8160005b8115614a5457600101600a82049150614a40565b6060816040519080825280601f01601f191660200182016040528015614a81576020820181803883390190505b50905060001982015b8515614ad457815160001982019160f860020a6030600a8a060102918491908110614ab157fe5b906020010190600160f860020a031916908160001a905350600a86049550614a8a565b50949350505050565b6040805160208181018352600080835283518083018552818152845192830190945281526060926140ad928692869290614e2c565b614b1c8282615081565b614b268282614de6565b614b2f816151ba565b5050565b82600160a060020a0316614b4682612cb6565b600160a060020a031614614bca576040805160e560020a62461bcd02815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0382161515614c4f576040805160e560020a62461bcd028152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b614c58816151fe565b600160a060020a0383166000908152600360205260409020614c799061523b565b600160a060020a0382166000908152600360205260409020614c9a90615252565b6000818152600160205260408082208054600160a060020a031916600160a060020a0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600160a060020a038216600090815260056020526040812054614d2090600163ffffffff61525b16565b600083815260066020526040902054909150808214614dbd57600160a060020a0384166000908152600560205260408120805484908110614d5d57fe5b90600052602060002001549050806005600087600160a060020a0316600160a060020a0316815260200190815260200160002083815481101515614d9d57fe5b600091825260208083209091019290925591825260069052604090208190555b600160a060020a038416600090815260056020526040902080549061263f906000198301615339565b600160a060020a0390911660009081526005602081815260408084208054868652600684529185208290559282526001810183559183529091200155565b6000903b1190565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f191660200182016040528015614e80576020820181803883390190505b509050806000805b8851811015614ee6578881815181101515614e9f57fe5b90602001015160f860020a900460f860020a028383806001019450815181101515614ec657fe5b906020010190600160f860020a031916908160001a905350600101614e88565b5060005b8751811015614f48578781815181101515614f0157fe5b90602001015160f860020a900460f860020a028383806001019450815181101515614f2857fe5b906020010190600160f860020a031916908160001a905350600101614eea565b5060005b8651811015614faa578681815181101515614f6357fe5b90602001015160f860020a900460f860020a028383806001019450815181101515614f8a57fe5b906020010190600160f860020a031916908160001a905350600101614f4c565b5060005b855181101561500c578581815181101515614fc557fe5b90602001015160f860020a900460f860020a028383806001019450815181101515614fec57fe5b906020010190600160f860020a031916908160001a905350600101614fae565b5060005b845181101561506e57848181518110151561502757fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561504e57fe5b906020010190600160f860020a031916908160001a905350600101615010565b50909d9c50505050505050505050505050565b600160a060020a03821615156150e1576040805160e560020a62461bcd02815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6150ea816145ab565b1561513f576040805160e560020a62461bcd02815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b60008181526001602090815260408083208054600160a060020a031916600160a060020a03871690811790915583526003909152902061517e90615252565b6040518190600160a060020a038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600780546000838152600860205260408120829055600182018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880155565b600081815260026020526040902054600160a060020a0316156152385760008181526002602052604090208054600160a060020a03191690555b50565b805461524e90600163ffffffff61525b16565b9055565b80546001019055565b6000828211156152b5576040805160e560020a62461bcd02815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106152fc57805160ff1916838001178555615329565b82800160010185558215615329579182015b8281111561532957825182559160200191906001019061530e565b50615335929150615359565b5090565b81548183558181111561252a5760008381526020902061252a9181019083015b611b3d91905b80821115615335576000815560010161535f56fe4f6e6c792061646d696e000000000000000000000000000000000000000000004f6e6c792077686974656c6973746564000000000000000000000000000000004f6e6c7920696620756e6c6f636b656400000000000000000000000000000000a165627a7a723058209d128aba971e5c6a6322ce1ccb783eb22f6532b25dd55b689412f21f3e0365470029000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000170227514a274826685bf81aed06e421817557200000000000000000000000000000000000000000000000000000000000000164d69726167652047616c6c65727920437572617465640000000000000000000000000000000000000000000000000000000000000000000000000000000000034d47430000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106103005763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a7811461030557806306fdde0314610362578063081812fc146103ec578063095ea7b3146104325780630d1706731461046d5780630d4d1513146105275780630ef890b51461057c57806310154bad146105a657806318160ddd146105d95780631b3bf407146105ee5780631b689c0b146106215780631c1c80461461064b57806320927ec9146109bc57806323b872dd146109e657806325b75d6814610a29578063291d954914610ae35780632d9c020514610b165780632df73ce614610b405780632f745c5914610b6a5780633785996314610ba357806337c749b914610c5d5780633af32abf14610c8d5780633e48e84814610cc057806342842e0e14610d7a578063498dd0c114610dbd5780634f6ccce714610de757806351ec8d1e14610e11578063573886f414610e26578063621a1f7414610e3b5780636352211e14610e6557806369d14faf14610e8f57806370a0823114610ec85780638462151c14610efb578063867f1a3b14610f7e5780638ba8f14d14610fb15780638bddb0a614610fdb5780638c2c36221461100e5780638dd91a561461111b57806395d89b411461135557806397dc86cf1461136a57806397f41b1a1461139a578063a11ec70a146113ca578063a22cb465146113f4578063a3b2cca61461142f578063a3fd3a8e146114e9578063a47d29cb146114fe578063a65ff74c14611528578063a874258d1461157c578063ad0305ce146115ac578063b7b04fae146115df578063b88d4fde14611699578063bee04f9c1461176c578063c370d39014611796578063c87b56dd146117c0578063cc74234b146117ea578063ccc4894014611814578063d195b36514611847578063d7b044b61461190c578063e13208b414611936578063e21a82f214611975578063e935b7b1146119b8578063e985e9c5146119cd578063f51f74a914611a08578063f70c0f0414611a32578063f851a44014611a5c575b600080fd5b34801561031157600080fd5b5061034e6004803603602081101561032857600080fd5b50357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916611a71565b604080519115158252519081900360200190f35b34801561036e57600080fd5b50610377611aa9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103b1578181015183820152602001610399565b50505050905090810190601f1680156103de5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103f857600080fd5b506104166004803603602081101561040f57600080fd5b5035611b40565b60408051600160a060020a039092168252519081900360200190f35b34801561043e57600080fd5b5061046b6004803603604081101561045557600080fd5b50600160a060020a038135169060200135611be3565b005b34801561047957600080fd5b5061046b6004803603604081101561049057600080fd5b813591908101906040810160208201356401000000008111156104b257600080fd5b8201836020820111156104c457600080fd5b803590602001918460018302840111640100000000831117156104e657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d6e945050505050565b34801561053357600080fd5b5061056a6004803603606081101561054a57600080fd5b50600160a060020a03813581169160208101359160409091013516611e42565b60408051918252519081900360200190f35b34801561058857600080fd5b5061046b6004803603602081101561059f57600080fd5b503561208b565b3480156105b257600080fd5b5061046b600480360360208110156105c957600080fd5b5035600160a060020a031661210c565b3480156105e557600080fd5b5061056a612180565b3480156105fa57600080fd5b5061046b6004803603602081101561061157600080fd5b5035600160a060020a0316612186565b34801561062d57600080fd5b5061056a6004803603602081101561064457600080fd5b50356121f8565b34801561065757600080fd5b5061046b600480360361014081101561066f57600080fd5b81019060208101813564010000000081111561068a57600080fd5b82018360208201111561069c57600080fd5b803590602001918460018302840111640100000000831117156106be57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561071157600080fd5b82018360208201111561072357600080fd5b8035906020019184600183028401116401000000008311171561074557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561079857600080fd5b8201836020820111156107aa57600080fd5b803590602001918460018302840111640100000000831117156107cc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561081f57600080fd5b82018360208201111561083157600080fd5b8035906020019184600183028401116401000000008311171561085357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156108a657600080fd5b8201836020820111156108b857600080fd5b803590602001918460018302840111640100000000831117156108da57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561092d57600080fd5b82018360208201111561093f57600080fd5b8035906020019184600183028401116401000000008311171561096157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050600160a060020a03833516935050506020810135906040810135906060013561220a565b3480156109c857600080fd5b50610377600480360360208110156109df57600080fd5b50356123fe565b3480156109f257600080fd5b5061046b60048036036060811015610a0957600080fd5b50600160a060020a03813581169160208101359091169060400135612499565b348015610a3557600080fd5b5061046b60048036036040811015610a4c57600080fd5b81359190810190604081016020820135640100000000811115610a6e57600080fd5b820183602082011115610a8057600080fd5b80359060200191846001830284011164010000000083111715610aa257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061252f945050505050565b348015610aef57600080fd5b5061046b60048036036020811015610b0657600080fd5b5035600160a060020a0316612646565b348015610b2257600080fd5b5061037760048036036020811015610b3957600080fd5b50356126b7565b348015610b4c57600080fd5b5061046b60048036036020811015610b6357600080fd5b503561275b565b348015610b7657600080fd5b5061056a60048036036040811015610b8d57600080fd5b50600160a060020a038135169060200135612809565b348015610baf57600080fd5b5061046b60048036036040811015610bc657600080fd5b81359190810190604081016020820135640100000000811115610be857600080fd5b820183602082011115610bfa57600080fd5b80359060200191846001830284011164010000000083111715610c1c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506128c7945050505050565b348015610c6957600080fd5b5061046b60048036036040811015610c8057600080fd5b508035906020013561295c565b348015610c9957600080fd5b5061034e60048036036020811015610cb057600080fd5b5035600160a060020a0316612b21565b348015610ccc57600080fd5b5061046b60048036036040811015610ce357600080fd5b81359190810190604081016020820135640100000000811115610d0557600080fd5b820183602082011115610d1757600080fd5b80359060200191846001830284011164010000000083111715610d3957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612b36945050505050565b348015610d8657600080fd5b5061046b60048036036060811015610d9d57600080fd5b50600160a060020a03813581169160208101359091169060400135612bb2565b348015610dc957600080fd5b5061041660048036036020811015610de057600080fd5b5035612bce565b348015610df357600080fd5b5061056a60048036036020811015610e0a57600080fd5b5035612be9565b348015610e1d57600080fd5b50610416612c8f565b348015610e3257600080fd5b5061056a612c9e565b348015610e4757600080fd5b5061056a60048036036020811015610e5e57600080fd5b5035612ca4565b348015610e7157600080fd5b5061041660048036036020811015610e8857600080fd5b5035612cb6565b348015610e9b57600080fd5b5061046b60048036036040811015610eb257600080fd5b5080359060200135600160a060020a0316612d51565b348015610ed457600080fd5b5061056a60048036036020811015610eeb57600080fd5b5035600160a060020a0316612e0c565b348015610f0757600080fd5b50610f2e60048036036020811015610f1e57600080fd5b5035600160a060020a0316612eb5565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610f6a578181015183820152602001610f52565b505050509050019250505060405180910390f35b348015610f8a57600080fd5b5061046b60048036036020811015610fa157600080fd5b5035600160a060020a0316612f15565b348015610fbd57600080fd5b5061046b60048036036020811015610fd457600080fd5b5035612f86565b348015610fe757600080fd5b5061046b60048036036020811015610ffe57600080fd5b5035600160a060020a031661305d565b34801561101a57600080fd5b506110386004803603602081101561103157600080fd5b50356130d1565b604051808b600160a060020a0316600160a060020a031681526020018a815260200189815260200188815260200187815260200186600160a060020a0316600160a060020a03168152602001858152602001841515151581526020018315151515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156110d75781810151838201526020016110bf565b50505050905090810190601f1680156111045780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390f35b34801561112757600080fd5b506111456004803603602081101561113e57600080fd5b503561329e565b60405180806020018060200180602001806020018060200186810386528b818151815260200191508051906020019080838360005b8381101561119257818101518382015260200161117a565b50505050905090810190601f1680156111bf5780820380516001836020036101000a031916815260200191505b5086810385528a5181528a516020918201918c019080838360005b838110156111f25781810151838201526020016111da565b50505050905090810190601f16801561121f5780820380516001836020036101000a031916815260200191505b5086810384528951815289516020918201918b019080838360005b8381101561125257818101518382015260200161123a565b50505050905090810190601f16801561127f5780820380516001836020036101000a031916815260200191505b5086810383528851815288516020918201918a019080838360005b838110156112b257818101518382015260200161129a565b50505050905090810190601f1680156112df5780820380516001836020036101000a031916815260200191505b50868103825287518152875160209182019189019080838360005b838110156113125781810151838201526020016112fa565b50505050905090810190601f16801561133f5780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b34801561136157600080fd5b506103776135d7565b34801561137657600080fd5b5061046b6004803603604081101561138d57600080fd5b5080359060200135613638565b3480156113a657600080fd5b5061046b600480360360408110156113bd57600080fd5b50803590602001356136a1565b3480156113d657600080fd5b5061046b600480360360208110156113ed57600080fd5b5035613855565b34801561140057600080fd5b5061046b6004803603604081101561141757600080fd5b50600160a060020a03813516906020013515156138da565b34801561143b57600080fd5b5061046b6004803603604081101561145257600080fd5b8135919081019060408101602082013564010000000081111561147457600080fd5b82018360208201111561148657600080fd5b803590602001918460018302840111640100000000831117156114a857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506139a9945050505050565b3480156114f557600080fd5b50610416613a3e565b34801561150a57600080fd5b506104166004803603602081101561152157600080fd5b5035613a4d565b34801561153457600080fd5b506115526004803603602081101561154b57600080fd5b5035613a68565b60408051600160a060020a0394851681529290931660208301528183015290519081900360600190f35b34801561158857600080fd5b5061046b6004803603604081101561159f57600080fd5b5080359060200135613aa7565b3480156115b857600080fd5b5061034e600480360360208110156115cf57600080fd5b5035600160a060020a0316613cf6565b3480156115eb57600080fd5b5061046b6004803603604081101561160257600080fd5b8135919081019060408101602082013564010000000081111561162457600080fd5b82018360208201111561163657600080fd5b8035906020019184600183028401116401000000008311171561165857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613d0b945050505050565b3480156116a557600080fd5b5061046b600480360360808110156116bc57600080fd5b600160a060020a038235811692602081013590911691604082013591908101906080810160608201356401000000008111156116f757600080fd5b82018360208201111561170957600080fd5b8035906020019184600183028401116401000000008311171561172b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613e1b945050505050565b34801561177857600080fd5b50610f2e6004803603602081101561178f57600080fd5b5035613eae565b3480156117a257600080fd5b5061046b600480360360208110156117b957600080fd5b5035613f0e565b3480156117cc57600080fd5b50610377600480360360208110156117e357600080fd5b5035613f95565b3480156117f657600080fd5b5061056a6004803603602081101561180d57600080fd5b50356140b4565b34801561182057600080fd5b5061046b6004803603602081101561183757600080fd5b5035600160a060020a03166140c6565b34801561185357600080fd5b5061046b6004803603606081101561186a57600080fd5b8135919081019060408101602082013564010000000081111561188c57600080fd5b82018360208201111561189e57600080fd5b803590602001918460018302840111640100000000831117156118c057600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050509035600160a060020a031691506141389050565b34801561191857600080fd5b506104166004803603602081101561192f57600080fd5b50356141d8565b34801561194257600080fd5b5061046b6004803603606081101561195957600080fd5b50803590600160a060020a0360208201351690604001356141f3565b34801561198157600080fd5b5061056a6004803603606081101561199857600080fd5b50600160a060020a038135811691602081013591604090910135166142f6565b3480156119c457600080fd5b5061056a614544565b3480156119d957600080fd5b5061034e600480360360408110156119f057600080fd5b50600160a060020a038135811691602001351661454a565b348015611a1457600080fd5b5061056a60048036036020811015611a2b57600080fd5b5035614578565b348015611a3e57600080fd5b5061056a60048036036020811015611a5557600080fd5b503561458a565b348015611a6857600080fd5b5061041661459c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19811660009081526020819052604090205460ff165b919050565b60098054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015611b355780601f10611b0a57610100808354040283529160200191611b35565b820191906000526020600020905b815481529060010190602001808311611b1857829003601f168201915b505050505090505b90565b6000611b4b826145ab565b1515611bc7576040805160e560020a62461bcd02815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606482015290519081900360840190fd5b50600090815260026020526040902054600160a060020a031690565b6000611bee82612cb6565b9050600160a060020a038381169082161415611c7a576040805160e560020a62461bcd02815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b33600160a060020a0382161480611c965750611c96813361454a565b1515611d12576040805160e560020a62461bcd02815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015290519081900360840190fd5b6000828152600260205260408082208054600160a060020a031916600160a060020a0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000828152600b60205260409020600901548290610100900460ff1615611dcd576040805160e560020a62461bcd02815260206004820152601060248201526000805160206153b4833981519152604482015290519081900360640190fd5b601954600160a060020a03163314611e1d576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b6000838152600b602090815260409091208351611e3c928501906152bb565b50505050565b336000908152601b602052604081205460ff161515611ed1576040805160e560020a62461bcd02815260206004820152602b60248201527f4d757374206d696e742066726f6d2077686974656c6973746564206d696e746560448201527f7220636f6e74726163742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000838152600b602052604090206007810154600690910154611efb90603363ffffffff6145c816565b1115611f51576040805160e560020a62461bcd02815260206004820152601c60248201527f4d757374206e6f7420657863656564206d617820617274776f726b7300000000604482015290519081900360640190fd5b6000838152600b602052604090206009015460ff1680611f8a57506000838152600c6020526040902054600160a060020a038381169116145b1515611fe0576040805160e560020a62461bcd02815260206004820181905260248201527f50726f6a656374206d75737420657869737420616e6420626520616374697665604482015290519081900360640190fd5b6000838152600b602052604090206009015462010000900460ff16158061202057506000838152600c6020526040902054600160a060020a038381169116145b1515612076576040805160e560020a62461bcd02815260206004820152601560248201527f50757263686173657320617265207061757365642e0000000000000000000000604482015290519081900360640190fd5b60006120828585614625565b95945050505050565b336000908152601a602052604090205460ff1615156120e2576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b6000908152600b60205260409020600901805460ff81161560ff199091161763ff00000019169055565b601954600160a060020a0316331461215c576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b600160a060020a03166000908152601a60205260409020805460ff19166001179055565b60075490565b601954600160a060020a031633146121d6576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b60128054600160a060020a031916600160a060020a0392909216919091179055565b60156020526000908152604090205481565b336000908152601a602052604090205460ff161515612261576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b601c546000818152600c602090815260408083208054600160a060020a031916600160a060020a038a16179055600b82529091208c516122a3928e01906152bb565b506000818152600b6020908152604090912089516122c9926001909201918b01906152bb565b506000818152600b602090815260409091208a516122ef926002909201918c01906152bb565b506000818152600b602090815260409091208851612315926003909201918a01906152bb565b506000818152600b60209081526040909120875161233b926004909201918901906152bb565b50604080518082018252600381527f455448000000000000000000000000000000000000000000000000000000000060208083019182526000858152600d90915292909220905161238c92906152bb565b506000818152600f60209081526040808320879055600b825290912060098101805463ffff00ff1916905560078101859055600881018490558b516123d9926005909201918d01906152bb565b50601c546123ee90600163ffffffff6145c816565b601c555050505050505050505050565b600d6020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156124915780601f1061246657610100808354040283529160200191612491565b820191906000526020600020905b81548152906001019060200180831161247457829003601f168201915b505050505081565b6124a333826146db565b151561251f576040805160e560020a62461bcd02815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606482015290519081900360840190fd5b61252a8383836147c0565b505050565b6000828152600b60205260409020600901548290610100900460ff161561258e576040805160e560020a62461bcd02815260206004820152601060248201526000805160206153b4833981519152604482015290519081900360640190fd5b336000908152601a6020526040902054839060ff16806125c457506000818152600c6020526040902054600160a060020a031633145b151561261a576040805160e560020a62461bcd02815260206004820152601a60248201527f4f6e6c7920617274697374206f722077686974656c6973746564000000000000604482015290519081900360640190fd5b6000848152600b60209081526040909120845161263f926004909201918601906152bb565b5050505050565b601954600160a060020a03163314612696576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b600160a060020a03166000908152601a60205260409020805460ff19169055565b6000818152600b602090815260409182902060050180548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526060939283018282801561274f5780601f106127245761010080835404028352916020019161274f565b820191906000526020600020905b81548152906001019060200180831161273257829003601f168201915b50505050509050919050565b601954600160a060020a031633146127ab576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b6019811115612804576040805160e560020a62461bcd02815260206004820152600a60248201527f4d6178206f662032352500000000000000000000000000000000000000000000604482015290519081900360640190fd5b601455565b600061281483612e0c565b8210612890576040805160e560020a62461bcd02815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e6473000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03831660009081526005602052604090208054839081106128b457fe5b9060005260206000200154905092915050565b6000828152600c60205260409020548290600160a060020a03163314612937576040805160e560020a62461bcd02815260206004820152600b60248201527f4f6e6c7920617274697374000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000838152600b602090815260409091208351611e3c926003909201918501906152bb565b6000828152600b60205260409020600901548290610100900460ff16156129bb576040805160e560020a62461bcd02815260206004820152601060248201526000805160206153b4833981519152604482015290519081900360640190fd5b336000908152601a602052604090205460ff161515612a12576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b6000838152600b6020526040902060060154612a3590603263ffffffff6145c816565b8211612ab1576040805160e560020a62461bcd02815260206004820152603760248201527f596f75206d75737420736574206d617820617274776f726b732067726561746560448201527f72207468616e2063757272656e7420617274776f726b73000000000000000000606482015290519081900360840190fd5b611388821115612b0b576040805160e560020a62461bcd02815260206004820152601260248201527f43616e6e6f742065786365656420353030300000000000000000000000000000604482015290519081900360640190fd5b506000918252600b602052604090912060070155565b601a6020526000908152604090205460ff1681565b336000908152601a602052604090205460ff161515612b8d576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b6000828152600b60209081526040909120825161252a926005909201918401906152bb565b61252a8383836020604051908101604052806000815250613e1b565b600e60205260009081526040902054600160a060020a031681565b6000612bf3612180565b8210612c6f576040805160e560020a62461bcd02815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e64730000000000000000000000000000000000000000606482015290519081900360840190fd5b6007805483908110612c7d57fe5b90600052602060002001549050919050565b601354600160a060020a031681565b60145481565b60176020526000908152604090205481565b600081815260016020526040812054600160a060020a0316801515612d4b576040805160e560020a62461bcd02815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b92915050565b336000908152601a6020526040902054829060ff1680612d8757506000818152600c6020526040902054600160a060020a031633145b1515612ddd576040805160e560020a62461bcd02815260206004820152601a60248201527f4f6e6c7920617274697374206f722077686974656c6973746564000000000000604482015290519081900360640190fd5b506000918252600c60205260409091208054600160a060020a031916600160a060020a03909216919091179055565b6000600160a060020a0382161515612e94576040805160e560020a62461bcd02815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f206164647265737300000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0382166000908152600360205260409020612d4b906147df565b6060612ec0826147e3565b80548060200260200160405190810160405280929190818152602001828054801561274f57602002820191906000526020600020905b815481526020019060010190808311612ef65750505050509050919050565b601954600160a060020a03163314612f65576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b600160a060020a03166000908152601b60205260409020805460ff19169055565b336000908152601a602052604090205460ff161515612fdd576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b6000818152600b60205260409020600901548190610100900460ff161561303c576040805160e560020a62461bcd02815260206004820152601060248201526000805160206153b4833981519152604482015290519081900360640190fd5b506000908152600b60205260409020600901805461ff001916610100179055565b601954600160a060020a031633146130ad576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b600160a060020a03166000908152601b60205260409020805460ff19166001179055565b6000818152600c6020908152604080832054600f835281842054600b90935290832060060154600160a060020a03909116929081908190819081908190819060609061312490603263ffffffff6145c816565b9750600b60008c8152602001908152602001600020600701549650600b60008c8152602001908152602001600020600801549550600b60008c815260200190815260200160002060090160009054906101000a900460ff169250600b60008c815260200190815260200160002060090160039054906101000a900460ff169150601060008c815260200190815260200160002060009054906101000a9004600160a060020a03169450601160008c8152602001908152602001600020549350600d60008c81526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561328a5780601f1061325f5761010080835404028352916020019161328a565b820191906000526020600020905b81548152906001019060200180831161326d57829003601f168201915b505050505090509193959799509193959799565b6000818152600b602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845260609384938493849384939283018282801561333b5780601f106133105761010080835404028352916020019161333b565b820191906000526020600020905b81548152906001019060200180831161331e57829003601f168201915b50505050509450600b60008781526020019081526020016000206001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156133ec5780601f106133c1576101008083540402835291602001916133ec565b820191906000526020600020905b8154815290600101906020018083116133cf57829003601f168201915b5050506000898152600b60209081526040918290206002908101805484516001821615610100026000190190911692909204601f810184900484028301840190945283825295995094935090915083018282801561348b5780601f106134605761010080835404028352916020019161348b565b820191906000526020600020905b81548152906001019060200180831161346e57829003601f168201915b5050506000898152600b60209081526040918290206003018054835160026001831615610100026000190190921691909104601f810184900484028201840190945283815295985093509091508301828280156135295780601f106134fe57610100808354040283529160200191613529565b820191906000526020600020905b81548152906001019060200180831161350c57829003601f168201915b5050506000898152600b60209081526040918290206004018054835160026001831615610100026000190190921691909104601f810184900484028201840190945283815295975093509091508301828280156135c75780601f1061359c576101008083540402835291602001916135c7565b820191906000526020600020905b8154815290600101906020018083116135aa57829003601f168201915b5050505050905091939590929450565b600a8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015611b355780601f10611b0a57610100808354040283529160200191611b35565b336000908152601a602052604090205460ff16151561368f576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b6000918252600f602052604090912055565b6000828152600b60205260409020600901548290610100900460ff1615613700576040805160e560020a62461bcd02815260206004820152601060248201526000805160206153b4833981519152604482015290519081900360640190fd5b336000908152601a602052604090205460ff161515613757576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b6000838152600b602052604090206007015482106137e5576040805160e560020a62461bcd02815260206004820152603c60248201527f4561726c79206d696e7420616d6f756e74206d757374206265206c657373207460448201527f68616e20746f74616c206e756d626572206f6620617274776f726b7300000000606482015290519081900360840190fd5b6109c482111561383f576040805160e560020a62461bcd02815260206004820152601260248201527f43616e6e6f742065786365656420323530300000000000000000000000000000604482015290519081900360640190fd5b506000918252600b602052604090912060080155565b336000908152601a602052604090205460ff1615156138ac576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b6000908152600b60205260409020600901805462ff0000198116620100009182900460ff1615909102179055565b600160a060020a03821633141561393b576040805160e560020a62461bcd02815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b336000818152600460209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6000828152600c60205260409020548290600160a060020a03163314613a19576040805160e560020a62461bcd02815260206004820152600b60248201527f4f6e6c7920617274697374000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000838152600b602090815260409091208351611e3c926002909201918501906152bb565b601254600160a060020a031681565b600c60205260009081526040902054600160a060020a031681565b6000908152601560209081526040808320548352600c82528083205460108352818420546011909352922054600160a060020a03928316939290911691565b6000828152600b602052604090206009015460ff1680613adf57506000828152600b60205260409020600901546301000000900460ff165b1515613b5b576040805160e560020a62461bcd02815260206004820152603860248201527f50726f6a656374206d7573742065786973742c20616e6420626520616374697660448201527f65206f7220696e206561726c79206d696e742073746174650000000000000000606482015290519081900360840190fd5b60328110613bd9576040805160e560020a62461bcd02815260206004820152602760248201527f4d75737420626520612053656e7469656e74204d656d6265727368697020494460448201527f2028302d34392900000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b601354604080517efdd58e000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051600160a060020a039092169162fdd58e91604480820192602092909190829003018186803b158015613c4257600080fd5b505afa158015613c56573d6000803e3d6000fd5b505050506040513d6020811015613c6c57600080fd5b5051600114613ceb576040805160e560020a62461bcd02815260206004820152602760248201527f57616c6c657420646f6573206e6f7420686176652074686973206d656d62657260448201527f7368697020494400000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61252a3383836147fd565b601b6020526000908152604090205460ff1681565b6000828152600b60205260409020600901548290610100900460ff1615613d6a576040805160e560020a62461bcd02815260206004820152601060248201526000805160206153b4833981519152604482015290519081900360640190fd5b336000908152601a6020526040902054839060ff1680613da057506000818152600c6020526040902054600160a060020a031633145b1515613df6576040805160e560020a62461bcd02815260206004820152601a60248201527f4f6e6c7920617274697374206f722077686974656c6973746564000000000000604482015290519081900360640190fd5b6000848152600b60209081526040909120845161263f926001909201918601906152bb565b613e26848484612499565b613e328484848461487d565b1515611e3c576040805160e560020a62461bcd02815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015290519081900360840190fd5b60008181526016602090815260409182902080548351818402810184019094528084526060939283018282801561274f5760200282019190600052602060002090815481526020019060010190808311612ef65750505050509050919050565b336000908152601a602052604090205460ff161515613f65576040805160e560020a62461bcd0281526020600482015260106024820152600080516020615394833981519152604482015290519081900360640190fd5b6000908152600b60205260409020600901805463ff00000019811663010000009182900460ff1615909102179055565b606081613fa1816145ab565b1515613ff7576040805160e560020a62461bcd02815260206004820152601760248201527f546f6b656e20494420646f6573206e6f74206578697374000000000000000000604482015290519081900360640190fd5b6000838152601560209081526040808320548352600b82529182902060050180548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526140ad939283018282801561409a5780601f1061406f5761010080835404028352916020019161409a565b820191906000526020600020905b81548152906001019060200180831161407d57829003601f168201915b50505050506140a8856149f9565b614add565b9392505050565b60116020526000908152604090205481565b601954600160a060020a03163314614116576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b60138054600160a060020a031916600160a060020a0392909216919091179055565b601954600160a060020a03163314614188576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615374833981519152604482015290519081900360640190fd5b6000838152600d6020908152604090912083516141a7928501906152bb565b506000928352600e60205260409092208054600160a060020a031916600160a060020a039093169290921790915550565b601060205260009081526040902054600160a060020a031681565b6000838152600c60205260409020548390600160a060020a03163314614263576040805160e560020a62461bcd02815260206004820152600b60248201527f4f6e6c7920617274697374000000000000000000000000000000000000000000604482015290519081900360640190fd5b60648211156142bc576040805160e560020a62461bcd02815260206004820152600b60248201527f4d6178206f662031303025000000000000000000000000000000000000000000604482015290519081900360640190fd5b5060009283526010602090815260408085208054600160a060020a031916600160a060020a03959095169490941790935560119052912055565b336000908152601b602052604081205460ff161515614385576040805160e560020a62461bcd02815260206004820152602b60248201527f4d757374206d696e742066726f6d2077686974656c6973746564206d696e746560448201527f7220636f6e74726163742e000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000838152600b60205260409020600901546301000000900460ff16806143c557506000838152600c6020526040902054600160a060020a038381169116145b151561441b576040805160e560020a62461bcd02815260206004820152601f60248201527f50726f6a656374206e6f7420696e206561726c79206d696e7420706861736500604482015290519081900360640190fd5b6000838152600b602052604090206009015462010000900460ff16158061445b57506000838152600c6020526040902054600160a060020a038381169116145b15156144b1576040805160e560020a62461bcd02815260206004820152601560248201527f50757263686173657320617265207061757365642e0000000000000000000000604482015290519081900360640190fd5b6000838152600b60205260409020600881015460069091015410612076576040805160e560020a62461bcd028152602060048201526024808201527f4d757374206e6f7420657863656564206561726c79206d696e7420616c6c6f7760448201527f616e636500000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b601c5481565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205460ff1690565b60186020526000908152604090205481565b600f6020526000908152604090205481565b601954600160a060020a031681565b600090815260016020526040902054600160a060020a0316151590565b6000828201838110156140ad576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000818152600b6020526040812060060154603261271084028201019061465390600163ffffffff6145c816565b6000848152600b602052604090206006015561466f8482614b12565b60008181526015602090815260408083208690558583526016825280832080546001810182559084529183209091018390555184918391600160a060020a038816917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f91a49392505050565b60006146e6826145ab565b1515614762576040805160e560020a62461bcd02815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606482015290519081900360840190fd5b600061476d83612cb6565b905080600160a060020a031684600160a060020a031614806147a8575083600160a060020a031661479d84611b40565b600160a060020a0316145b806147b857506147b8818561454a565b949350505050565b6147cb838383614b33565b6147d58382614cf6565b61252a8282614de6565b5490565b600160a060020a0316600090815260056020526040902090565b6000612710830282016148108582614b12565b60008181526015602090815260408083208790558683526016825280832080546001810182559084529183209091018390555185918391600160a060020a038916917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f91a4949350505050565b600061489184600160a060020a0316614e24565b151561489f575060016147b8565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b8381101561493257818101518382015260200161491a565b50505050905090810190601f16801561495f5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561498157600080fd5b505af1158015614995573d6000803e3d6000fd5b505050506040513d60208110156149ab57600080fd5b50517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f150b7a020000000000000000000000000000000000000000000000000000000014915050949350505050565b6060811515614a3c575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152611aa4565b8160005b8115614a5457600101600a82049150614a40565b6060816040519080825280601f01601f191660200182016040528015614a81576020820181803883390190505b50905060001982015b8515614ad457815160001982019160f860020a6030600a8a060102918491908110614ab157fe5b906020010190600160f860020a031916908160001a905350600a86049550614a8a565b50949350505050565b6040805160208181018352600080835283518083018552818152845192830190945281526060926140ad928692869290614e2c565b614b1c8282615081565b614b268282614de6565b614b2f816151ba565b5050565b82600160a060020a0316614b4682612cb6565b600160a060020a031614614bca576040805160e560020a62461bcd02815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0382161515614c4f576040805160e560020a62461bcd028152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b614c58816151fe565b600160a060020a0383166000908152600360205260409020614c799061523b565b600160a060020a0382166000908152600360205260409020614c9a90615252565b6000818152600160205260408082208054600160a060020a031916600160a060020a0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600160a060020a038216600090815260056020526040812054614d2090600163ffffffff61525b16565b600083815260066020526040902054909150808214614dbd57600160a060020a0384166000908152600560205260408120805484908110614d5d57fe5b90600052602060002001549050806005600087600160a060020a0316600160a060020a0316815260200190815260200160002083815481101515614d9d57fe5b600091825260208083209091019290925591825260069052604090208190555b600160a060020a038416600090815260056020526040902080549061263f906000198301615339565b600160a060020a0390911660009081526005602081815260408084208054868652600684529185208290559282526001810183559183529091200155565b6000903b1190565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f191660200182016040528015614e80576020820181803883390190505b509050806000805b8851811015614ee6578881815181101515614e9f57fe5b90602001015160f860020a900460f860020a028383806001019450815181101515614ec657fe5b906020010190600160f860020a031916908160001a905350600101614e88565b5060005b8751811015614f48578781815181101515614f0157fe5b90602001015160f860020a900460f860020a028383806001019450815181101515614f2857fe5b906020010190600160f860020a031916908160001a905350600101614eea565b5060005b8651811015614faa578681815181101515614f6357fe5b90602001015160f860020a900460f860020a028383806001019450815181101515614f8a57fe5b906020010190600160f860020a031916908160001a905350600101614f4c565b5060005b855181101561500c578581815181101515614fc557fe5b90602001015160f860020a900460f860020a028383806001019450815181101515614fec57fe5b906020010190600160f860020a031916908160001a905350600101614fae565b5060005b845181101561506e57848181518110151561502757fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561504e57fe5b906020010190600160f860020a031916908160001a905350600101615010565b50909d9c50505050505050505050505050565b600160a060020a03821615156150e1576040805160e560020a62461bcd02815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6150ea816145ab565b1561513f576040805160e560020a62461bcd02815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b60008181526001602090815260408083208054600160a060020a031916600160a060020a03871690811790915583526003909152902061517e90615252565b6040518190600160a060020a038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600780546000838152600860205260408120829055600182018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880155565b600081815260026020526040902054600160a060020a0316156152385760008181526002602052604090208054600160a060020a03191690555b50565b805461524e90600163ffffffff61525b16565b9055565b80546001019055565b6000828211156152b5576040805160e560020a62461bcd02815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106152fc57805160ff1916838001178555615329565b82800160010185558215615329579182015b8281111561532957825182559160200191906001019061530e565b50615335929150615359565b5090565b81548183558181111561252a5760008381526020902061252a9181019083015b611b3d91905b80821115615335576000815560010161535f56fe4f6e6c792061646d696e000000000000000000000000000000000000000000004f6e6c792077686974656c6973746564000000000000000000000000000000004f6e6c7920696620756e6c6f636b656400000000000000000000000000000000a165627a7a723058209d128aba971e5c6a6322ce1ccb783eb22f6532b25dd55b689412f21f3e0365470029

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000170227514a274826685bf81aed06e421817557200000000000000000000000000000000000000000000000000000000000000164d69726167652047616c6c65727920437572617465640000000000000000000000000000000000000000000000000000000000000000000000000000000000034d47430000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _tokenName (string): Mirage Gallery Curated
Arg [1] : _tokenSymbol (string): MGC
Arg [2] : membershipAddress (address): 0x0170227514A274826685BF81AED06e4218175572

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000170227514a274826685bf81aed06e4218175572
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000016
Arg [4] : 4d69726167652047616c6c657279204375726174656400000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4d47430000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

30196:13154:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4517:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4517:127:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4517:127:0;-1:-1:-1;;4517:127:0;;;;;;;;;;;;;;;;;;;;;27710:77;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27710:77: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;27710:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14812:190;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14812:190:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14812:190:0;;;;;;;-1:-1:-1;;;;;14812:190:0;;;;;;;;;;;;;;14425:385;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14425:385:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14425:385:0;;;;;;;;;;;38713:170;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38713:170:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38713:170:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;38713:170:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;38713:170: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;38713:170:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;38713:170:0;;-1:-1:-1;38713:170:0;;-1:-1:-1;;;;;38713:170:0;32784:634;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32784:634:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;32784:634:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36471:204;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36471:204:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36471:204:0;;;35893:100;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35893:100:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35893:100:0;-1:-1:-1;;;;;35893:100:0;;;20691:88;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20691:88:0;;;;35602:111;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35602:111:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35602:111:0;-1:-1:-1;;;;;35602:111:0;;;31344:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31344:53:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31344:53:0;;;37161:1098;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37161:1098:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;37161:1098:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;37161:1098:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37161:1098: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;37161:1098:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37161:1098:0;;;;;;;;-1:-1:-1;37161:1098:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;37161:1098:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37161:1098: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;37161:1098:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37161:1098:0;;;;;;;;-1:-1:-1;37161:1098:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;37161:1098:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37161:1098: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;37161:1098:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37161:1098:0;;;;;;;;-1:-1:-1;37161:1098:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;37161:1098:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37161:1098: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;37161:1098:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37161:1098:0;;;;;;;;-1:-1:-1;37161:1098:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;37161:1098:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37161:1098: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;37161:1098:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37161:1098:0;;;;;;;;-1:-1:-1;37161:1098:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;37161:1098:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37161:1098: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;37161:1098:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37161:1098:0;;-1:-1:-1;;;;;;;37161:1098:0;;;;-1:-1:-1;;;37161:1098:0;;;;;;;;;;;;;;;30899:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30899:59:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30899:59:0;;;15377:272;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15377:272:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15377:272:0;;;;;;;;;;;;;;;;;;39829:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39829:206:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;39829:206:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;39829:206:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;39829:206: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;39829:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39829:206:0;;-1:-1:-1;39829:206:0;;-1:-1:-1;;;;;39829:206:0;35995:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35995:104:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35995:104:0;-1:-1:-1;;;;;35995:104:0;;;42301:158;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42301:158:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42301:158:0;;;35715:176;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35715:176:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35715:176:0;;;20334:220;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20334:220:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20334:220:0;;;;;;;;;39659:168;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39659:168:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;39659:168:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;39659:168:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;39659:168: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;39659:168:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39659:168:0;;-1:-1:-1;39659:168:0;;-1:-1:-1;;;;;39659:168:0;40037:367;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40037:367:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40037:367:0;;;;;;;;31586:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31586:45:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31586:45:0;-1:-1:-1;;;;;31586:45:0;;;40758:160;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40758:160:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;40758:160:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;40758:160:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;40758: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;40758:160:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;40758:160:0;;-1:-1:-1;40758:160:0;;-1:-1:-1;;;;;40758:160:0;15651:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15651:126:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15651:126:0;;;;;;;;;;;;;;;;;;30961:61;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30961:61:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30961:61:0;;;21095:187;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21095:187:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21095:187:0;;;31261:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31261:41:0;;;;31305:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31305:36:0;;;;31461:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31461:48:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31461:48:0;;;14213:210;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14213:210:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14213:210:0;;;36827:187;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36827:187:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36827:187:0;;;;;;-1:-1:-1;;;;;36827:187:0;;;14014:197;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14014:197:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14014:197:0;-1:-1:-1;;;;;14014:197:0;;;42597:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42597:118:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42597:118:0;-1:-1:-1;;;;;42597:118: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;42597:118:0;;;;;;;;;;;;;;;;;36211:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36211:112:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36211:112:0;-1:-1:-1;;;;;36211:112:0;;;36325:144;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36325:144:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36325:144:0;;;36101:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36101:108:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36101:108:0;-1:-1:-1;;;;;36101:108:0;;;41345:954;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41345:954:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41345:954:0;;;;;;;;-1:-1:-1;;;;;41345:954:0;-1:-1:-1;;;;;41345:954:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41345:954:0;-1:-1:-1;;;;;41345:954:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;41345:954:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40920:423;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40920:423:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40920:423:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;40920:423:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40920:423:0;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;40920:423:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40920:423:0;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;40920:423:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40920:423:0;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;40920:423:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40920:423:0;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;40920:423:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27879:81;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27879:81:0;;;;38524:187;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38524:187:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38524:187:0;;;;;;;;40407:349;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40407:349:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40407:349:0;;;;;;;;37016:143;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37016:143:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37016:143:0;;;15004:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15004:230:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15004:230:0;;;;;;;;;;;39473:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39473:184:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;39473:184:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;39473:184:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;39473:184: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;39473:184:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39473:184:0;;-1:-1:-1;39473:184:0;;-1:-1:-1;;;;;39473:184:0;31230:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31230:28:0;;;;30837:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30837:59:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30837:59:0;;;42717:409;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42717:409:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42717:409:0;;;;;;;-1:-1:-1;;;;;42717:409:0;;;;;;;;;;;;;;;;;;;;;;;;;;;34594:472;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34594:472:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34594:472:0;;;;;;;;31634:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31634:49:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31634:49:0;-1:-1:-1;;;;;31634:49:0;;;38885:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38885:214:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38885:214:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;38885:214:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;38885:214: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;38885:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;38885:214:0;;-1:-1:-1;38885:214:0;;-1:-1:-1;;;;;38885:214:0;15779:256;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15779:256:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;15779:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;15779:256:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;15779:256: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;15779:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;15779:256:0;;-1:-1:-1;15779:256:0;;-1:-1:-1;;;;;15779:256:0;42461:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42461:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42461:134:0;;;36678:147;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36678:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36678:147:0;;;43128:219;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43128:219:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43128:219:0;;;31156:71;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31156:71:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31156:71:0;;;35469:130;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35469:130:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35469:130:0;-1:-1:-1;;;;;35469:130:0;;;38261:261;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38261:261:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38261:261:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;38261:261:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;38261:261: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;38261:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;38261:261:0;;-1:-1:-1;;;38261:261:0;;-1:-1:-1;;;;;38261:261:0;;-1:-1:-1;38261:261:0;;-1:-1:-1;38261:261:0;31092:61;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31092:61:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31092:61:0;;;39101:370;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39101:370:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39101:370:0;;;-1:-1:-1;;;;;39101:370:0;;;;;;;;;;;33421:633;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33421:633:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;33421:633:0;;;;;;;;;;;;;;;;;;31686:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31686:32:0;;;;15236:139;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15236:139:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15236:139:0;;;;;;;;;;;31512:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31512:48:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31512:48:0;;;31025:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31025:64:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31025:64:0;;;31563:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31563:20:0;;;;4517:127;-1:-1:-1;;4607:33:0;;4587:4;4607:33;;;;;;;;;;;;;4517:127;;;;:::o;27710:77::-;27778:5;27771:12;;;;;;;;-1:-1:-1;;27771:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27749:13;;27771:12;;27778:5;;27771:12;;27778:5;27771:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27710:77;;:::o;14812:190::-;14871:7;14895:16;14903:7;14895;:16::i;:::-;14887:73;;;;;;;-1:-1:-1;;;;;14887:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14974:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;14974:24:0;;14812:190::o;14425:385::-;14485:13;14501:16;14509:7;14501;:16::i;:::-;14485:32;-1:-1:-1;;;;;;14532:11:0;;;;;;;;14524:57;;;;;-1:-1:-1;;;;;14524:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14596:10;-1:-1:-1;;;;;14596:19:0;;;;:58;;;14619:35;14636:5;14643:10;14619:16;:35::i;:::-;14588:142;;;;;;;-1:-1:-1;;;;;14588:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14737:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;14737:29:0;-1:-1:-1;;;;;14737:29:0;;;;;;;;;14778:28;;14737:24;;14778:28;;;;;;;14425:385;;;:::o;38713:170::-;31897:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;31896:28;31888:57;;;;;-1:-1:-1;;;;;31888:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31888:57:0;;;;;;;;;;;;;;;32144:5;;-1:-1:-1;;;;;32144:5:0;32130:10;:19;32122:42;;;;;-1:-1:-1;;;;;32122:42:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32122:42:0;;;;;;;;;;;;;;;38839:20;;;;:8;:20;;;;;;;;:40;;;;;;;;:::i;:::-;;38713:170;;;:::o;32784:634::-;32913:10;32862:16;32895:29;;;:17;:29;;;;;;;;32887:85;;;;;;;-1:-1:-1;;;;;32887:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33028:20;;;;:8;:20;;;;;:32;;;;32987:29;;;;;:37;;33021:2;32987:37;:33;:37;:::i;:::-;:73;;32979:114;;;;;-1:-1:-1;;;;;32979:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33108:20;;;;:8;:20;;;;;:33;;;;;;:80;;-1:-1:-1;33152:36:0;;;;:24;:36;;;;;;-1:-1:-1;;;;;33145:43:0;;;33152:36;;33145:43;33108:80;33100:125;;;;;;;-1:-1:-1;;;;;33100:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33241:20;;;;:8;:20;;;;;:27;;;;;;;;33240:28;;:75;;-1:-1:-1;33279:36:0;;;;:24;:36;;;;;;-1:-1:-1;;;;;33272:43:0;;;33279:36;;33272:43;33240:75;33232:109;;;;;;;-1:-1:-1;;;;;33232:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33348:15;33366:27;33377:3;33382:10;33366;:27::i;:::-;33348:45;32784:634;-1:-1:-1;;;;;32784:634:0:o;36471:204::-;32234:10;32220:25;;;;:13;:25;;;;;;;;32212:54;;;;;;;-1:-1:-1;;;;;32212:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32212:54:0;;;;;;;;;;;;;;;36591:20;;;;:8;:20;;;;;:33;;;;;;;36590:34;-1:-1:-1;;36554:70:0;;;;-1:-1:-1;;36631:40:0;;;36471:204::o;35893:100::-;32144:5;;-1:-1:-1;;;;;32144:5:0;32130:10;:19;32122:42;;;;;-1:-1:-1;;;;;32122:42:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32122:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35959:23:0;;;;;:13;:23;;;;;:30;;-1:-1:-1;;35959:30:0;35985:4;35959:30;;;35893:100::o;20691:88::-;20758:10;:17;20691:88;:::o;35602:111::-;32144:5;;-1:-1:-1;;;;;32144:5:0;32130:10;:19;32122:42;;;;;-1:-1:-1;;;;;32122:42:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32122:42:0;;;;;;;;;;;;;;;35679:13;:30;;-1:-1:-1;;;;;;35679:30:0;-1:-1:-1;;;;;35679:30:0;;;;;;;;;;35602:111::o;31344:53::-;;;;;;;;;;;;;:::o;37161:1098::-;32234:10;32220:25;;;;:13;:25;;;;;;;;32212:54;;;;;;;-1:-1:-1;;;;;32212:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32212:54:0;;;;;;;;;;;;;;;37490:13;;37470:17;37510:35;;;:24;:35;;;;;;;;:52;;-1:-1:-1;;;;;;37510:52:0;-1:-1:-1;;;;;37510:52:0;;;;;37569:8;:19;;;;;:39;;;;;;;;:::i;:::-;-1:-1:-1;37615:19:0;;;;:8;:19;;;;;;;;:39;;;;:26;;;;;:39;;;;:::i;:::-;-1:-1:-1;37661:19:0;;;;:8;:19;;;;;;;;:45;;;;:31;;;;;:45;;;;:::i;:::-;-1:-1:-1;37713:19:0;;;;:8;:19;;;;;;;;:44;;;;:27;;;;;:44;;;;:::i;:::-;-1:-1:-1;37764:19:0;;;;:8;:19;;;;;;;;:44;;;;:27;;;;;:44;;;;:::i;:::-;-1:-1:-1;37815:44:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;37815:36:0;;;:25;:36;;;;;;;:44;;;;;;:::i;:::-;-1:-1:-1;37866:40:0;;;;:29;:40;;;;;;;;:62;;;37935:8;:19;;;;;:26;;;:32;;-1:-1:-1;;38020:40:0;;;38067:31;;;:46;;;38120:28;;;:40;;;38167:45;;;;:34;;;;;:45;;;;:::i;:::-;-1:-1:-1;38235:13:0;;:20;;38253:1;38235:20;:17;:20;:::i;:::-;38219:13;:36;-1:-1:-1;;;;;;;;;;;37161:1098:0:o;30899:59::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30899:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15377:272::-;15513:39;15532:10;15544:7;15513:18;:39::i;:::-;15505:101;;;;;;;-1:-1:-1;;;;;15505:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15613:32;15627:4;15633:2;15637:7;15613:13;:32::i;:::-;15377:272;;;:::o;39829:206::-;31897:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;31896:28;31888:57;;;;;-1:-1:-1;;;;;31888:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31888:57:0;;;;;;;;;;;;;;;32362:10;32348:25;;;;:13;:25;;;;;;39959:10;;32348:25;;;:79;;-1:-1:-1;32391:36:0;;;;:24;:36;;;;;;-1:-1:-1;;;;;32391:36:0;32377:10;:50;32348:79;32340:118;;;;;;;-1:-1:-1;;;;;32340:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39985:20;;;;:8;:20;;;;;;;;:46;;;;:28;;;;;:46;;;;:::i;:::-;;31952:1;39829:206;;;:::o;35995:104::-;32144:5;;-1:-1:-1;;;;;32144:5:0;32130:10;:19;32122:42;;;;;-1:-1:-1;;;;;32122:42:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32122:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36064:23:0;36090:5;36064:23;;;:13;:23;;;;;:31;;-1:-1:-1;;36064:31:0;;;35995:104::o;42301:158::-;42420:20;;;;:8;:20;;;;;;;;;:35;;42403:52;;;;;;-1:-1:-1;;42403:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42366:28;;42403:52;;;42420:35;42403:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42301:158;;;:::o;35715:176::-;32144:5;;-1:-1:-1;;;;;32144:5:0;32130:10;:19;32122:42;;;;;-1:-1:-1;;;;;32122:42:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32122:42:0;;;;;;;;;;;;;;;35827:2;35806:23;;;35798:46;;;;;-1:-1:-1;;;;;35798:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35851:16;:36;35715:176::o;20334:220::-;20414:7;20446:16;20456:5;20446:9;:16::i;:::-;20438:24;;20430:80;;;;;-1:-1:-1;;;;;20430:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20524:19:0;;;;;;:12;:19;;;;;:26;;20544:5;;20524:26;;;;;;;;;;;;;;20517:33;;20334:220;;;;:::o;39659:168::-;32028:36;;;;:24;:36;;;;;;;;-1:-1:-1;;;;;32028:36:0;32014:10;:50;32006:74;;;;;-1:-1:-1;;;;;32006:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39777:20;;;;:8;:20;;;;;;;;:46;;;;:28;;;;;:46;;;;:::i;40037:367::-;31897:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;31896:28;31888:57;;;;;-1:-1:-1;;;;;31888:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31888:57:0;;;;;;;;;;;;;;;32234:10;32220:25;;;;:13;:25;;;;;;;;32212:54;;;;;;;-1:-1:-1;;;;;32212:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32212:54:0;;;;;;;;;;;;;;;40191:20;;;;:8;:20;;;;;:29;;;:37;;40225:2;40191:37;:33;:37;:::i;:::-;40176:52;;40168:120;;;;;-1:-1:-1;;;;;40168:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40319:4;40303:20;;;40295:51;;;;;-1:-1:-1;;;;;40295:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40353:20:0;;;;:8;:20;;;;;;:32;;:47;40037:367::o;31586:45::-;;;;;;;;;;;;;;;:::o;40758:160::-;32234:10;32220:25;;;;:13;:25;;;;;;;;32212:54;;;;;;;-1:-1:-1;;;;;32212:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32212:54:0;;;;;;;;;;;;;;;40865:20;;;;:8;:20;;;;;;;;:49;;;;:35;;;;;:49;;;;:::i;15651:126::-;15734:39;15751:4;15757:2;15761:7;15734:39;;;;;;;;;;;;;:16;:39::i;30961:61::-;;;;;;;;;;;;-1:-1:-1;;;;;30961:61:0;;:::o;21095:187::-;21153:7;21185:13;:11;:13::i;:::-;21177:21;;21169:78;;;;;-1:-1:-1;;;;;21169:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21261:10;:17;;21272:5;;21261:17;;;;;;;;;;;;;;21254:24;;21095:187;;;:::o;31261:41::-;;;-1:-1:-1;;;;;31261:41:0;;:::o;31305:36::-;;;;:::o;31461:48::-;;;;;;;;;;;;;:::o;14213:210::-;14268:7;14300:20;;;:11;:20;;;;;;-1:-1:-1;;;;;14300:20:0;14335:19;;;14327:73;;;;;-1:-1:-1;;;;;14327:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14414:5;14213:210;-1:-1:-1;;14213:210:0:o;36827:187::-;32362:10;32348:25;;;;:13;:25;;;;;;36938:10;;32348:25;;;:79;;-1:-1:-1;32391:36:0;;;;:24;:36;;;;;;-1:-1:-1;;;;;32391:36:0;32377:10;:50;32348:79;32340:118;;;;;;;-1:-1:-1;;;;;32340:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36957:36:0;;;;:24;:36;;;;;;:53;;-1:-1:-1;;;;;;36957:53:0;-1:-1:-1;;;;;36957:53:0;;;;;;;;;36827:187::o;14014:197::-;14069:7;-1:-1:-1;;;;;14093:19:0;;;;14085:74;;;;;-1:-1:-1;;;;;14085:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14173:24:0;;;;;;:17;:24;;;;;:34;;:32;:34::i;42597:118::-;42658:16;42690:21;42705:5;42690:14;:21::i;:::-;42683:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42597:118;;;:::o;36211:112::-;32144:5;;-1:-1:-1;;;;;32144:5:0;32130:10;:19;32122:42;;;;;-1:-1:-1;;;;;32122:42:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32122:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36284:27:0;36314:5;36284:27;;;:17;:27;;;;;:35;;-1:-1:-1;;36284:35:0;;;36211:112::o;36325:144::-;32234:10;32220:25;;;;:13;:25;;;;;;;;32212:54;;;;;;;-1:-1:-1;;;;;32212:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32212:54:0;;;;;;;;;;;;;;;31897:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;31896:28;31888:57;;;;;-1:-1:-1;;;;;31888:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31888:57:0;;;;;;;;;;;;;;;-1:-1:-1;36431:20:0;;;;:8;:20;;;;;:27;;:34;;-1:-1:-1;;36431:34:0;;;;;36325:144::o;36101:108::-;32144:5;;-1:-1:-1;;;;;32144:5:0;32130:10;:19;32122:42;;;;;-1:-1:-1;;;;;32122:42:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32122:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36171:27:0;;;;;:17;:27;;;;;:34;;-1:-1:-1;;36171:34:0;36201:4;36171:34;;;36101:108::o;41345:954::-;41412:21;41664:36;;;:24;:36;;;;;;;;;41728:29;:41;;;;;;41787:8;:20;;;;;;:29;;;-1:-1:-1;;;;;41664:36:0;;;;41412:21;;;;;;;;;;;;;41617:22;;41787:37;;41821:2;41787:37;:33;:37;:::i;:::-;41776:48;;41907:8;:20;41916:10;41907:20;;;;;;;;;;;:32;;;41893:46;;41957:8;:20;41966:10;41957:20;;;;;;;;;;;:29;;;41946:40;;42008:8;:20;42017:10;42008:20;;;;;;;;;;;:33;;;;;;;;;;;;41993:48;;42062:8;:20;42071:10;42062:20;;;;;;;;;;;:32;;;;;;;;;;;;42048:46;;42119:26;:38;42146:10;42119:38;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42119:38:0;42101:56;;42192:36;:48;42229:10;42192:48;;;;;;;;;;;;42164:76;;42258:25;:37;42284:10;42258:37;;;;;;;;;;;42247:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41345:954;;;;;;;;;;;:::o;40920:423::-;41128:20;;;;:8;:20;;;;;;;;;41114:39;;;;;;-1:-1:-1;;41114:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40985:25;;;;;;;;;;41114:39;;;41128:20;41114:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41169:8;:20;41178:10;41169:20;;;;;;;;;;;:27;;41160:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;41217:20:0;;;;:8;:20;;;;;;;;;:32;;;;41203:46;;;;;;;;;;-1:-1:-1;;41203:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;41160:36;;-1:-1:-1;41203:46:0;41217:32;-1:-1:-1;41203:46:0;;-1:-1:-1;41203:46:0;;41217:32;41203:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;41266:20:0;;;;:8;:20;;;;;;;;;:28;;41256:38;;;;;;;;;;;-1:-1:-1;;41256:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;41203:46;;-1:-1:-1;41266:28:0;-1:-1:-1;41256:38:0;;-1:-1:-1;41256:38:0;;41266:28;41256:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;41311:20:0;;;;:8;:20;;;;;;;;;:28;;41301:38;;;;;;;;;;;-1:-1:-1;;41301:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;41256;;-1:-1:-1;41311:28:0;-1:-1:-1;41301:38:0;;-1:-1:-1;41301:38:0;;41311:28;41301:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40920:423;;;;;;;:::o;27879:81::-;27949:7;27942:14;;;;;;;;-1:-1:-1;;27942:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27920:13;;27942:14;;27949:7;;27942:14;;27949:7;27942:14;;;;;;;;;;;;;;;;;;;;;;;;38524:187;32234:10;32220:25;;;;:13;:25;;;;;;;;32212:54;;;;;;;-1:-1:-1;;;;;32212:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32212:54:0;;;;;;;;;;;;;;;38644:41;;;;:29;:41;;;;;;:63;38524:187::o;40407:349::-;31897:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;31896:28;31888:57;;;;;-1:-1:-1;;;;;31888:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31888:57:0;;;;;;;;;;;;;;;32234:10;32220:25;;;;:13;:25;;;;;;;;32212:54;;;;;;;-1:-1:-1;;;;;32212:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32212:54:0;;;;;;;;;;;;;;;40552:20;;;;:8;:20;;;;;:32;;;40540:44;;40532:117;;;;;-1:-1:-1;;;;;40532:117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40677:4;40664:17;;;40656:48;;;;;-1:-1:-1;;;;;40656:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40711:20:0;;;;:8;:20;;;;;;:29;;:41;40407:349::o;37016:143::-;32234:10;32220:25;;;;:13;:25;;;;;;;;32212:54;;;;;;;-1:-1:-1;;;;;32212:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32212:54:0;;;;;;;;;;;;;;;37128:20;;;;:8;:20;;;;;:27;;;;-1:-1:-1;;37097:58:0;;37128:27;;;;;;;37127:28;37097:58;;;;;;37016:143::o;15004:230::-;-1:-1:-1;;;;;15080:16:0;;15086:10;15080:16;;15072:54;;;;;-1:-1:-1;;;;;15072:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15152:10;15133:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;15133:34:0;;;;;;;;;;;;:45;;-1:-1:-1;;15133:45:0;;;;;;;;;;15190:40;;;;;;;15133:34;;15152:10;15190:40;;;;;;;;;;;15004:230;;:::o;39473:184::-;32028:36;;;;:24;:36;;;;;;;;-1:-1:-1;;;;;32028:36:0;32014:10;:50;32006:74;;;;;-1:-1:-1;;;;;32006:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39599:20;;;;:8;:20;;;;;;;;:54;;;;:32;;;;;:54;;;;:::i;31230:28::-;;;-1:-1:-1;;;;;31230:28:0;;:::o;30837:59::-;;;;;;;;;;;;-1:-1:-1;;;;;30837:59:0;;:::o;42717:409::-;42780:21;42911:28;;;:18;:28;;;;;;;;;42886:54;;:24;:54;;;;;;42965:26;:56;;;;;;43056:36;:66;;;;;;-1:-1:-1;;;;;42886:54:0;;;;42965:56;;;;;42717:409::o;34594:472::-;34681:20;;;;:8;:20;;;;;:33;;;;;;:69;;-1:-1:-1;34718:20:0;;;;:8;:20;;;;;:32;;;;;;;;34681:69;34673:138;;;;;;;-1:-1:-1;;;;;34673:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34841:2;34826:17;;34818:69;;;;;-1:-1:-1;;;;;34818:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34902:18;;:54;;;;;;34931:10;34902:54;;;;;;;;;;;;-1:-1:-1;;;;;34902:18:0;;;;:28;;:54;;;;;;;;;;;;;;;:18;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;34902:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34902:54:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34902:54:0;34960:1;34902:59;34894:111;;;;;-1:-1:-1;;;;;34894:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35012:50;35025:10;35037;35049:12;35012;:50::i;31634:49::-;;;;;;;;;;;;;;;:::o;38885:214::-;31897:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;31896:28;31888:57;;;;;-1:-1:-1;;;;;31888:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31888:57:0;;;;;;;;;;;;;;;32362:10;32348:25;;;;:13;:25;;;;;;39021:10;;32348:25;;;:79;;-1:-1:-1;32391:36:0;;;;:24;:36;;;;;;-1:-1:-1;;;;;32391:36:0;32377:10;:50;32348:79;32340:118;;;;;;;-1:-1:-1;;;;;32340:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39047:20;;;;:8;:20;;;;;;;;:48;;;;:27;;;;;:48;;;;:::i;15779:256::-;15882:31;15895:4;15901:2;15905:7;15882:12;:31::i;:::-;15928:48;15951:4;15957:2;15961:7;15970:5;15928:22;:48::i;:::-;15920:111;;;;;;;-1:-1:-1;;;;;15920:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42461:134;42560:31;;;;:19;:31;;;;;;;;;42553:38;;;;;;;;;;;;;;;;;42529:16;;42553:38;;;42560:31;42553:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42461:134;;;:::o;36678:147::-;32234:10;32220:25;;;;:13;:25;;;;;;;;32212:54;;;;;;;-1:-1:-1;;;;;32212:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32212:54:0;;;;;;;;;;;;;;;36789:20;;;;:8;:20;;;;;:32;;;;-1:-1:-1;;36753:68:0;;36789:32;;;;;;;36788:33;36753:68;;;;;;36678:147::o;43128:219::-;43214:13;43195:8;31780:17;31788:8;31780:7;:17::i;:::-;31772:53;;;;;;;-1:-1:-1;;;;;31772:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43261:38;43270:28;;;:18;:28;;;;;;;;;43261:38;;:8;:38;;;;;;:53;;43243:100;;;;;;-1:-1:-1;;43243:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43261:53;43243:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43316:26;43333:8;43316:16;:26::i;:::-;43243:17;:100::i;:::-;43236:107;43128:219;-1:-1:-1;;;43128:219:0:o;31156:71::-;;;;;;;;;;;;;:::o;35469:130::-;32144:5;;-1:-1:-1;;;;;32144:5:0;32130:10;:19;32122:42;;;;;-1:-1:-1;;;;;32122:42:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32122:42:0;;;;;;;;;;;;;;;35547:18;:48;;-1:-1:-1;;;;;;35547:48:0;-1:-1:-1;;;;;35547:48:0;;;;;;;;;;35469:130::o;38261:261::-;32144:5;;-1:-1:-1;;;;;32144:5:0;32130:10;:19;32122:42;;;;;-1:-1:-1;;;;;32122:42:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32122:42:0;;;;;;;;;;;;;;;38399:37;;;;:25;:37;;;;;;;;:55;;;;;;;;:::i;:::-;-1:-1:-1;38461:38:0;;;;:26;:38;;;;;;:57;;-1:-1:-1;;;;;;38461:57:0;-1:-1:-1;;;;;38461:57:0;;;;;;;;;;-1:-1:-1;38261:261:0:o;31092:61::-;;;;;;;;;;;;-1:-1:-1;;;;;31092:61:0;;:::o;39101:370::-;32028:36;;;;:24;:36;;;;;;;;-1:-1:-1;;;;;32028:36:0;32014:10;:50;32006:74;;;;;-1:-1:-1;;;;;32006:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39300:3;39270:33;;;39262:57;;;;;-1:-1:-1;;;;;39262:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39326:38:0;;;;:26;:38;;;;;;;;:57;;-1:-1:-1;;;;;;39326:57:0;-1:-1:-1;;;;;39326:57:0;;;;;;;;;;;39390:36;:48;;;;:77;39101:370::o;33421:633::-;33555:10;33504:16;33537:29;;;:17;:29;;;;;;;;33529:85;;;;;;;-1:-1:-1;;;;;33529:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33629:20;;;;:8;:20;;;;;:32;;;;;;;;;:79;;-1:-1:-1;33672:36:0;;;;:24;:36;;;;;;-1:-1:-1;;;;;33665:43:0;;;33672:36;;33665:43;33629:79;33621:123;;;;;;;-1:-1:-1;;;;;33621:123:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33760:20;;;;:8;:20;;;;;:27;;;;;;;;33759:28;;:75;;-1:-1:-1;33798:36:0;;;;:24;:36;;;;;;-1:-1:-1;;;;;33791:43:0;;;33798:36;;33791:43;33759:75;33751:109;;;;;;;-1:-1:-1;;;;;33751:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33907:20;;;;:8;:20;;;;;:29;;;;33875;;;;;:61;33867:110;;;;;-1:-1:-1;;;;;33867:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31686:32;;;;:::o;15236:139::-;-1:-1:-1;;;;;15336:25:0;;;15316:4;15336:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;15236:139::o;31512:48::-;;;;;;;;;;;;;:::o;31025:64::-;;;;;;;;;;;;;:::o;31563:20::-;;;-1:-1:-1;;;;;31563:20:0;;:::o;16037:143::-;16094:4;16123:20;;;:11;:20;;;;;;-1:-1:-1;;;;;16123:20:0;16157:19;;;16037:143::o;7994:163::-;8052:7;8080:5;;;8100:6;;;;8092:46;;;;;-1:-1:-1;;;;;8092:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;34056:535;34127:16;34204:20;;;:8;:20;;;;;:29;;;34236:2;30722:6;34175:25;;34174:59;;:64;;34343:36;;34377:1;34343:36;:33;:36;:::i;:::-;34311:20;;;;:8;:20;;;;;:29;;:68;34386:23;34392:3;34397:11;34386:5;:23::i;:::-;34416:31;;;;:18;:31;;;;;;;;:44;;;34467:31;;;:19;:31;;;;;27:10:-1;;39:1;23:18;;45:23;;34467:49:0;;;;;;;;;;;;34528:34;34450:10;;34435:11;;-1:-1:-1;;;;;34528:34:0;;;;;;34576:11;34056:535;-1:-1:-1;;;34056:535:0:o;16182:317::-;16267:4;16288:16;16296:7;16288;:16::i;:::-;16280:73;;;;;;;-1:-1:-1;;;;;16280:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16360:13;16376:16;16384:7;16376;:16::i;:::-;16360:32;;16418:5;-1:-1:-1;;;;;16407:16:0;:7;-1:-1:-1;;;;;16407:16:0;;:51;;;;16451:7;-1:-1:-1;;;;;16427:31:0;:20;16439:7;16427:11;:20::i;:::-;-1:-1:-1;;;;;16427:31:0;;16407:51;:87;;;;16462:32;16479:5;16486:7;16462:16;:32::i;:::-;16399:96;16182:317;-1:-1:-1;;;;16182:317:0:o;21632:225::-;21714:38;21734:4;21740:2;21744:7;21714:19;:38::i;:::-;21759:47;21792:4;21798:7;21759:32;:47::i;:::-;21813:40;21841:2;21845:7;21813:27;:40::i;12025:106::-;12113:14;;12025:106::o;23054:118::-;-1:-1:-1;;;;;23149:19:0;23116:17;23149:19;;;:12;:19;;;;;;23054:118::o;35068:398::-;35164:16;30722:6;35212:25;;35211:43;;35261:23;35267:3;35211:43;35261:5;:23::i;:::-;35291:31;;;;:18;:31;;;;;;;;:44;;;35342:31;;;:19;:31;;;;;27:10:-1;;39:1;23:18;;45:23;;35342:49:0;;;;;;;;;;;;35403:34;35325:10;;35310:11;;-1:-1:-1;;;;;35403:34:0;;;;;;35451:11;35068:398;-1:-1:-1;;;;35068:398:0:o;17622:318::-;17736:4;17755:15;:2;-1:-1:-1;;;;;17755:13:0;;:15::i;:::-;17754:16;17750:52;;;-1:-1:-1;17790:4:0;17783:11;;17750:52;17824:70;;;;;17861:10;17824:70;;;;;;-1:-1:-1;;;;;17824:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17808:13;;17824:36;;;;;;17861:10;;17873:4;;17879:7;;17888:5;;17824:70;;;;;;;;;;;17808: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;17824:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17824:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17824:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17824:70:0;-1:-1:-1;;17909:26:0;17919:16;17909:26;;-1:-1:-1;;17622:318:0;;;;;;:::o;29637:414::-;29687:27;29727:7;;29723:42;;;-1:-1:-1;29747:10:0;;;;;;;;;;;;;;;;;;;29723:42;29780:2;29771:6;29804:57;29811:6;;29804:57;;29830:5;;29851:2;29846:7;;;;29804:57;;;29867:17;29897:3;29887:14;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;29887:14:0;87:34:-1;135:17;;-1:-1;29887:14:0;-1:-1:-1;29867:34:0;-1:-1:-1;;;29917:7:0;;29931:91;29938:7;;29931:91;;29958:9;;-1:-1:-1;;29963:3:0;;;-1:-1:-1;;;29981:2:0;29991;29986:7;;29981:12;29970:25;;29958:4;;29963:3;29958:9;;;;;;;;;;:37;-1:-1:-1;;;;;29958:37:0;;;;;;;;-1:-1:-1;30012:2:0;30006:8;;;;29931:91;;;-1:-1:-1;30042:4:0;29637:414;-1:-1:-1;;;;29637:414:0:o;28153:160::-;28280:29;;;;;;;;;-1:-1:-1;28280:29:0;;;;;;;;;;;;;;;;;;;;;;;28231:33;;28280:29;;28290:2;;28294;;28280:29;:9;:29::i;22092:182::-;22152:24;22164:2;22168:7;22152:11;:24::i;:::-;22183:40;22211:2;22215:7;22183:27;:40::i;:::-;22230;22262:7;22230:31;:40::i;:::-;22092:182;;:::o;17201:419::-;17311:4;-1:-1:-1;;;;;17291:24:0;:16;17299:7;17291;:16::i;:::-;-1:-1:-1;;;;;17291:24:0;;17283:78;;;;;-1:-1:-1;;;;;17283:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17376:16:0;;;;17368:65;;;;;-1:-1:-1;;;;;17368:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17440:23;17455:7;17440:14;:23::i;:::-;-1:-1:-1;;;;;17470:23:0;;;;;;:17;:23;;;;;:35;;:33;:35::i;:::-;-1:-1:-1;;;;;17512:21:0;;;;;;:17;:21;;;;;:33;;:31;:33::i;:::-;17552:20;;;;:11;:20;;;;;;:25;;-1:-1:-1;;;;;;17552:25:0;-1:-1:-1;;;;;17552:25:0;;;;;;;;;17589:27;;17552:20;;17589:27;;;;;;;17201:419;;;:::o;24539:1078::-;-1:-1:-1;;;;;24816:18:0;;24791:22;24816:18;;;:12;:18;;;;;:25;:32;;24846:1;24816:32;:29;:32;:::i;:::-;24855:18;24876:26;;;:17;:26;;;;;;24791:57;;-1:-1:-1;24999:28:0;;;24995:310;;-1:-1:-1;;;;;25062:18:0;;25040:19;25062:18;;;:12;:18;;;;;:34;;25081:14;;25062:34;;;;;;;;;;;;;;25040:56;;25140:11;25107:12;:18;25120:4;-1:-1:-1;;;;;25107:18:0;-1:-1:-1;;;;;25107:18:0;;;;;;;;;;;;25126:10;25107:30;;;;;;;;;;;;;;;;;;;;;:44;;;;25220:30;;;:17;:30;;;;;:43;;;24995:310;-1:-1:-1;;;;;25384:18:0;;;;;;:12;:18;;;;;:27;;;;;-1:-1:-1;;25384:27:0;;;:::i;23447:174::-;-1:-1:-1;;;;;23557:16:0;;;;;;;:12;:16;;;;;;;;:23;;23528:26;;;:17;:26;;;;;:52;;;23587:16;;;39:1:-1;23:18;;45:23;;23587:30:0;;;;;;;;23447:174::o;10527:388::-;10587:4;10868:20;;10903:8;;10527:388::o;28693:942::-;28825:33;28867:16;28892:2;28867:28;;28902:16;28927:2;28902:28;;28937:16;28962:2;28937:28;;28972:16;28997:2;28972:28;;29007:16;29032:2;29007:28;;29042:19;29127:3;:10;29114:3;:10;29101:3;:10;29088:3;:10;29075:3;:10;:23;:36;:49;:62;29064:74;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;29064:74:0;87:34:-1;135:17;;-1:-1;29064:74:0;-1:-1:-1;29042:96:0;-1:-1:-1;29042:96:0;29186:6;;29220:72;29236:3;:10;29232:1;:14;29220:72;;;29278:3;29282:1;29278:6;;;;;;;;;;;;;;;-1:-1:-1;;;29278:6:0;;-1:-1:-1;;;29278:6:0;29264;29271:3;;;;;;29264:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;29264:20:0;;;;;;;;-1:-1:-1;29248:3:0;;29220:72;;;-1:-1:-1;29307:1:0;29298:72;29314:3;:10;29310:1;:14;29298:72;;;29356:3;29360:1;29356:6;;;;;;;;;;;;;;;-1:-1:-1;;;29356:6:0;;-1:-1:-1;;;29356:6:0;29342;29349:3;;;;;;29342:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;29342:20:0;;;;;;;;-1:-1:-1;29326:3:0;;29298:72;;;-1:-1:-1;29385:1:0;29376:72;29392:3;:10;29388:1;:14;29376:72;;;29434:3;29438:1;29434:6;;;;;;;;;;;;;;;-1:-1:-1;;;29434:6:0;;-1:-1:-1;;;29434:6:0;29420;29427:3;;;;;;29420:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;29420:20:0;;;;;;;;-1:-1:-1;29404:3:0;;29376:72;;;-1:-1:-1;29463:1:0;29454:72;29470:3;:10;29466:1;:14;29454:72;;;29512:3;29516:1;29512:6;;;;;;;;;;;;;;;-1:-1:-1;;;29512:6:0;;-1:-1:-1;;;29512:6:0;29498;29505:3;;;;;;29498:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;29498:20:0;;;;;;;;-1:-1:-1;29482:3:0;;29454:72;;;-1:-1:-1;29541:1:0;29532:72;29548:3;:10;29544:1;:14;29532:72;;;29590:3;29594:1;29590:6;;;;;;;;;;;;;;;-1:-1:-1;;;29590:6:0;;-1:-1:-1;;;29590:6:0;29576;29583:3;;;;;;29576:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;29576:20:0;;;;;;;;-1:-1:-1;29560:3:0;;29532:72;;;-1:-1:-1;29624:6:0;;28693:942;-1:-1:-1;;;;;;;;;;;;;28693:942:0:o;16501:307::-;-1:-1:-1;;;;;16569:16:0;;;;16561:61;;;;;-1:-1:-1;;;;;16561:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16638:16;16646:7;16638;:16::i;:::-;16637:17;16629:58;;;;;-1:-1:-1;;;;;16629:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16694:20;;;;:11;:20;;;;;;;;:25;;-1:-1:-1;;;;;;16694:25:0;-1:-1:-1;;;;;16694:25:0;;;;;;;;16726:21;;:17;:21;;;;;:33;;:31;:33::i;:::-;16771;;16796:7;;-1:-1:-1;;;;;16771:33:0;;;16788:1;;16771:33;;16788:1;;16771:33;16501:307;;:::o;23800:152::-;23900:10;:17;;23873:24;;;;:15;:24;;;;;:44;;;39:1:-1;23:18;;45:23;;23924:24:0;;;;;;;23800:152::o;17942:159::-;18038:1;18002:24;;;:15;:24;;;;;;-1:-1:-1;;;;;18002:24:0;:38;17998:100;;18088:1;18053:24;;;:15;:24;;;;;:37;;-1:-1:-1;;;;;;18053:37:0;;;17998:100;17942:159;:::o;12218:102::-;12295:14;;:21;;12314:1;12295:21;:18;:21;:::i;:::-;12278:38;;12218:102::o;12133:83::-;12193:19;;12211:1;12193:19;;;12133:83::o;8390:166::-;8448:7;8472:6;;;;8464:49;;;;;-1:-1:-1;;;;;8464:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8532:5:0;;;8390:166::o;30196:13154::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30196:13154:0;;;-1:-1:-1;30196:13154:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://9d128aba971e5c6a6322ce1ccb783eb22f6532b25dd55b689412f21f3e036547
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.