ETH Price: $2,526.57 (+0.61%)

Token

Super Saiya-jin token (SSJ)
 

Overview

Max Total Supply

0 SSJ

Holders

590

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x2DeAb169b20e8E6696362345072F56183948eb2B
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DFOSuperSaiyanToken

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-09-19
*/

// File: node_modules\@openzeppelin\contracts\introspection\IERC165.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * 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
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin\contracts\token\ERC1155\IERC1155.sol

// SPDX_License_Identifier: MIT

pragma solidity ^0.6.2;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transfered from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}

// File: @openzeppelin\contracts\token\ERC1155\IERC1155Receiver.sol

// SPDX_License_Identifier: MIT

pragma solidity ^0.6.0;


/**
 * _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {

    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    )
        external
        returns(bytes4);

    /**
        @dev Handles the receipt of a multiple ERC1155 token types. This function
        is called at the end of a `safeBatchTransferFrom` after the balances have
        been updated. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    )
        external
        returns(bytes4);
}

// File: contracts\standalone\IERC1155Views.sol

// SPDX_License_Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @title IERC1155Views - An optional utility interface to improve the ERC-1155 Standard.
 * @dev This interface introduces some additional capabilities for ERC-1155 Tokens.
 */
interface IERC1155Views {

    /**
     * @dev Returns the total supply of the given token id
     * @param objectId the id of the token whose availability you want to know 
     */
    function totalSupply(uint256 objectId) external view returns (uint256);

    /**
     * @dev Returns the name of the given token id
     * @param objectId the id of the token whose name you want to know 
     */
    function name(uint256 objectId) external view returns (string memory);

    /**
     * @dev Returns the symbol of the given token id
     * @param objectId the id of the token whose symbol you want to know 
     */
    function symbol(uint256 objectId) external view returns (string memory);

    /**
     * @dev Returns the decimals of the given token id
     * @param objectId the id of the token whose decimals you want to know 
     */
    function decimals(uint256 objectId) external view returns (uint256);

    /**
     * @dev Returns the uri of the given token id
     * @param objectId the id of the token whose uri you want to know 
     */
    function uri(uint256 objectId) external view returns (string memory);
}

// File: @openzeppelin\contracts\token\ERC20\IERC20.sol

// SPDX_License_Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

// File: contracts\standalone\IERC20NFTWrapper.sol

// SPDX_License_Identifier: MIT

pragma solidity ^0.6.0;


interface IERC20NFTWrapper is IERC20 {
    function init(uint256 objectId) external;

    function mainWrapper() external view returns (address);

    function objectId() external view returns (uint256);

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

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

    function decimals() external view returns (uint256);

    function mint(address owner, uint256 amount) external;

    function burn(address owner, uint256 amount) external;
}

// File: contracts\standalone\IERC1155Data.sol

// SPDX_License_Identifier: MIT

pragma solidity ^0.6.0;

interface IERC1155Data {
    function name() external view returns (string memory);

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

// File: contracts\standalone\ISuperSaiyanToken.sol

// SPDX_License_Identifier: MIT

pragma solidity ^0.6.0;






interface ISuperSaiyanToken is IERC1155, IERC1155Receiver, IERC1155Views, IERC1155Data {
    function init(
        address model,
        address source,
        string calldata name,
        string calldata symbol
    ) external;

    function fromDecimals(uint256 objectId, uint256 amount)
        external
        view
        returns (uint256);

    function toDecimals(uint256 objectId, uint256 amount)
        external
        view
        returns (uint256);

    function getMintData(uint256 objectId)
        external
        view
        returns (
            string memory,
            string memory,
            uint256
        );

    function getModel() external view returns (address);

    function source() external view returns (address);

    function asERC20(uint256 objectId) external view returns (IERC20NFTWrapper);

    function emitTransferSingleEvent(address sender, address from, address to, uint256 objectId, uint256 amount) external;

    function mint(uint256 amount, string calldata partialUri)
        external
        returns (uint256, address);

    function burn(
        uint256 objectId,
        uint256 amount,
        bytes calldata data
    ) external;

    function burnBatch(
        uint256[] calldata objectIds,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;

    event Mint(uint256 objectId, address tokenAddress);
}

// File: contracts\standalone\voting\IDFOSuperSaiyanToken.sol

// SPDX_License_Identifier: MIT

pragma solidity ^0.6.0;


interface IDFOSuperSaiyanToken is ISuperSaiyanToken {

    function doubleProxy() external view returns(address);
    function setDoubleProxy(address newDoubleProxy) external;
    function setUri(uint256 objectId, string calldata uri) external;

    event UriChanged(uint256 indexed objectId, string oldUri, string newUri);
}

interface IDoubleProxy {
    function proxy() external view returns(address);
}

interface IMVDProxy {
    function getToken() external view returns(address);
    function getStateHolderAddress() external view returns(address);
    function getMVDWalletAddress() external view returns(address);
    function getMVDFunctionalitiesManagerAddress() external view returns(address);
    function getMVDFunctionalityProposalManagerAddress() external view returns(address);
    function submit(string calldata codeName, bytes calldata data) external payable returns(bytes memory returnData);
}

interface IStateHolder {
    function setUint256(string calldata name, uint256 value) external returns(uint256);
    function getUint256(string calldata name) external view returns(uint256);
    function getBool(string calldata varName) external view returns (bool);
    function clear(string calldata varName) external returns(string memory oldDataType, bytes memory oldVal);
}

interface IMVDFunctionalitiesManager {
    function isAuthorizedFunctionality(address functionality) external view returns(bool);
}

// File: @openzeppelin\contracts\GSN\Context.sol

// SPDX_License_Identifier: MIT

pragma solidity ^0.6.0;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin\contracts\math\SafeMath.sol

// SPDX_License_Identifier: MIT

pragma solidity ^0.6.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) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        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-contracts/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) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

// File: @openzeppelin\contracts\utils\Address.sol

// SPDX_License_Identifier: MIT

pragma solidity ^0.6.2;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin\contracts\introspection\ERC165.sol

// SPDX_License_Identifier: MIT

pragma solidity ^0.6.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) public view override 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 virtual {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

// File: contracts\standalone\SuperSaiyanToken.sol

// SPDX_License_Identifier: MIT

pragma solidity ^0.6.0;








/**
 * @title SuperSaiyanToken - An improved ERC1155 token with ERC20 trading capabilities.
 * @dev In the SuperSaiyanToken standard, there is no a centralized storage where to save every objectId info.
 * In fact every NFT data is saved in a specific ERC20 token that can also work as a standalone one, and let transfer parts of an atomic object.
 * The ERC20 represents a unique Token Id, and its supply represents the entire supply of that Token Id.
 * You can instantiate a SuperSaiyanToken as a brand-new one, or as a wrapper for pre-existent classic ERC1155 NFT.
 * In the first case, you can introduce some particular permissions to mint new tokens.
 * In the second case, you need to send your NFTs to the Wrapped SuperSaiyanToken (using the classic safeTransferFrom or safeBatchTransferFrom methods)
 * and it will create a brand new ERC20 Token or mint new supply (in the case some tokens with the same id were transfered before yours).
 */
contract SuperSaiyanToken is ISuperSaiyanToken, Context, ERC165 {
    using SafeMath for uint256;
    using Address for address;

    bytes4 internal constant _INTERFACEobjectId_ERC1155 = 0xd9b67a26;

    address private _source;

    string internal _name;
    string internal _symbol;

    mapping(uint256 => string) internal _objectUris;

    bool private _supportsName;
    bool private _supportsSymbol;
    bool private _supportsDecimals;

    mapping(uint256 => address) internal _dest;
    mapping(address => bool) internal _isMine;

    mapping(address => mapping(address => bool)) internal _operatorApprovals;

    address internal _model;

    /**
     * @dev Constructor
     * When you create a SuperSaiyanToken, you can specify if you want to create a brand new one, passing the classic data like name, symbol, amd URI,
     * or wrap a pre-existent ERC1155 NFT, passing its contract address.
     * You can use just one of the two modes at the same time.
     * In both cases, a ERC20 token address is mandatory. It will be used as a model to be cloned for every minted NFT.
     * @param model the address of the ERC20 pre-deployed model. I will not be used in the procedure, but just cloned as a brand-new one every time a new NFT is minted.
     * @param source the address of the ERC1155 NFT to be wrapped. If you want to create a brand new NFT, this value must be address(0).
     * @param name the name of the brand new SuperSaiyanToken to be created. If you are wrapping a pre-existing ERC1155 NFT, this must be blank.
     * @param symbol the symbol of the brand new SuperSaiyanToken to be created. If you are wrapping a pre-existing ERC1155 NFT, this must be blank.
     */
    constructor(
        address model,
        address source,
        string memory name,
        string memory symbol
    ) public {
        if(model != address(0)) {
            init(model, source, name, symbol);
        }
    }

    /**
     * @dev Utility method which contains the logic of the constructor.
     * This is a useful trick to instantiate a contract when it is cloned.
     */
    function init(
        address model,
        address source,
        string memory name,
        string memory symbol
    ) public virtual override {
        require(
            _model == address(0),
            "Init already called!"
        );

        require(
            model != address(0),
            "Model should be a valid ethereum address"
        );
        _model = model;

        _source = source;

        require(
            _source != address(0) || keccak256(bytes(name)) != keccak256(""),
            "At least a source contract or a name must be set"
        );
        require(
            _source != address(0) || keccak256(bytes(symbol)) != keccak256(""),
            "At least a source contract or a symbol must be set"
        );

        _registerInterface(this.onERC1155Received.selector);
        _registerInterface(this.onERC1155BatchReceived.selector);
        bool safeBatchTransferFrom = _checkAndInsertSelector(
            this.safeBatchTransferFrom.selector
        );
        bool cumulativeInterface = _checkAndInsertSelector(
            _INTERFACEobjectId_ERC1155
        );
        require(
            _source == address(0) ||
                safeBatchTransferFrom ||
                cumulativeInterface,
            "Looks like you're not wrapping a correct ERC1155 Token"
        );
        _checkAndInsertSelector(this.balanceOf.selector);
        _checkAndInsertSelector(this.balanceOfBatch.selector);
        _checkAndInsertSelector(this.setApprovalForAll.selector);
        _checkAndInsertSelector(this.isApprovedForAll.selector);
        _checkAndInsertSelector(this.safeTransferFrom.selector);
        _checkAndInsertSelector(this.uri.selector);
        _checkAndInsertSelector(this.totalSupply.selector);
        _supportsName = _checkAndInsertSelector(0x00ad800c); //name(uint256)
        _supportsSymbol = _checkAndInsertSelector(0x4e41a1fb); //symbol(uint256)
        _supportsDecimals = _checkAndInsertSelector(this.decimals.selector);
        _supportsDecimals = _source == address(0) ? false : _supportsDecimals;
        _setAndCheckNameAndSymbol(name, symbol);
    }

    /**
     * @dev Mint
     * If the SuperSaiyanToken does not wrap a pre-existent NFT, this call is used to mint new NFTs, according to the permission rules provided by the Token creator.
     * @param amount The amount of tokens to be created. It must be greater than 1 unity.
     * @param objectUri The Uri to locate this new token's metadata.
     */
    function mint(uint256 amount, string memory objectUri)
        public
        virtual
        override
        returns (uint256 objectId, address tokenAddress)
    {
        require(_source == address(0), "Cannot mint unexisting tokens");
        require(
            keccak256(bytes(objectUri)) != keccak256(""),
            "Uri cannot be empty"
        );
        (objectId, tokenAddress) = _mint(msg.sender, 0, amount, true);
        _objectUris[objectId] = objectUri;
    }

    /**
     * @dev Burn
     * You can choose to burn your NFTs.
     * In case this Token wraps a pre-existent ERC1155 NFT, you will receive the wrapped NFTs.
     */
    function burn(
        uint256 objectId,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        asERC20(objectId).burn(msg.sender, toDecimals(objectId, amount));
        if (_source != address(0)) {
            IERC1155(_source).safeTransferFrom(
                address(this),
                msg.sender,
                objectId,
                amount,
                data
            );
        }
    }

    /**
     * @dev Burn Batch
     * Same as burn, but for multiple NFTs at the same time
     */
    function burnBatch(
        uint256[] memory objectIds,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        for (uint256 i = 0; i < objectIds.length; i++) {
            asERC20(objectIds[i]).burn(
                msg.sender,
                toDecimals(objectIds[i], amounts[i])
            );
        }
        if (_source != address(0)) {
            IERC1155(_source).safeBatchTransferFrom(
                address(this),
                msg.sender,
                objectIds,
                amounts,
                data
            );
        }
    }

    /**
     * @dev classic ERC-1155 onERC1155Received hook.
     * This method can be called only by the wrapped classic ERC1155 NFT, if it exists.
     * Call this method means that someone transfer original NFTs to receive wrapped ones.
     * So this method will provide brand new NFTs
     */
    function onERC1155Received(
        address,
        address owner,
        uint256 objectId,
        uint256 amount,
        bytes memory
    ) public virtual override returns (bytes4) {
        require(msg.sender == _source, "Unauthorized action!");
        _mint(owner, objectId, amount, false);
        return this.onERC1155Received.selector;
    }

    /**
     * @dev classic ERC-1155 onERC1155BatchReceived hook.
     * Same as onERC1155Received, but for multiple tokens at the same time
     */
    function onERC1155BatchReceived(
        address,
        address owner,
        uint256[] memory objectIds,
        uint256[] memory amounts,
        bytes memory
    ) public virtual override returns (bytes4) {
        require(msg.sender == _source, "Unauthorized action!");
        for (uint256 i = 0; i < objectIds.length; i++) {
            _mint(owner, objectIds[i], amounts[i], false);
        }
        return this.onERC1155BatchReceived.selector;
    }

    /**
     * @dev this method sends the correct creation parameters for the new ERC-20 to be minted.
     * It takes thata from the wrapped ERC1155 NFT or from the parameters passed at construction time.
     */
    function getMintData(uint256 objectId)
        public
        virtual
        override
        view
        returns (
            string memory name,
            string memory symbol,
            uint256 decimals
        )
    {
        name = _name;
        symbol = _symbol;
        decimals = 18;
        if (
            _source != address(0) &&
            (_supportsName || _supportsSymbol || _supportsDecimals)
        ) {
            IERC1155Views views = IERC1155Views(_source);
            name = _supportsName ? views.name(objectId) : name;
            symbol = _supportsSymbol ? views.symbol(objectId) : symbol;
            decimals = _supportsDecimals ? views.decimals(objectId) : decimals;
        }
    }

    /**
     * @dev get the address of the ERC20 Contract used as a model
     */
    function getModel() public virtual override view returns (address) {
        return _model;
    }

    /**
     * @dev Utility method to convert from decimals notation the original NFT (if any) to the ERC20 ones.
     */
    function fromDecimals(uint256 objectId, uint256 amount)
        public
        virtual
        override
        view
        returns (uint256)
    {
        return _supportsDecimals ? amount : (amount / (10**decimals(objectId)));
    }

    /**
     * @dev Utility method to convert to decimals notation the original NFT (if any) to the ERC20 ones.
     */
    function toDecimals(uint256 objectId, uint256 amount)
        public
        virtual
        override
        view
        returns (uint256)
    {
        return _supportsDecimals ? amount : (amount * (10**decimals(objectId)));
    }

    /**
     * @dev Returns the address of the wrapped ERC1155 NFT (if any)
     */
    function source() public virtual override view returns (address) {
        return _source;
    }

    /**
     * @dev Gives back the address of the ERC20 Token representing this Token Id
     */
    function asERC20(uint256 objectId)
        public
        virtual
        override
        view
        returns (IERC20NFTWrapper)
    {
        return IERC20NFTWrapper(_dest[objectId]);
    }

    /**
     * @dev Returns the total supply of the given token id
     * @param objectId the id of the token whose availability you want to know
     */
    function totalSupply(uint256 objectId)
        public
        virtual
        override
        view
        returns (uint256)
    {
        return fromDecimals(objectId, asERC20(objectId).totalSupply());
    }

    /**
     * @dev Returns the name of the given token id
     * @param objectId the id of the token whose name you want to know
     */
    function name(uint256 objectId)
        public
        virtual
        override
        view
        returns (string memory)
    {
        return asERC20(objectId).name();
    }

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

    /**
     * @dev Returns the symbol of the given token id
     * @param objectId the id of the token whose symbol you want to know
     */
    function symbol(uint256 objectId)
        public
        virtual
        override
        view
        returns (string memory)
    {
        return asERC20(objectId).symbol();
    }

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

    /**
     * @dev Returns the decimals of the given token id
     * @param objectId the id of the token whose decimals you want to know
     */
    function decimals(uint256 objectId)
        public
        virtual
        override
        view
        returns (uint256)
    {
        return asERC20(objectId).decimals();
    }

    /**
     * @dev Returns the uri of the given token id
     * @param objectId the id of the token whose uri you want to know
     */
    function uri(uint256 objectId)
        public
        virtual
        override
        view
        returns (string memory)
    {
        return
            _source == address(0)
                ? _objectUris[objectId]
                : IERC1155Views(_source).uri(objectId);
    }

    /**
     * @dev Classic ERC1155 Standard Method
     */
    function balanceOf(address account, uint256 objectId)
        public
        virtual
        override
        view
        returns (uint256)
    {
        return fromDecimals(objectId, asERC20(objectId).balanceOf(account));
    }

    /**
     * @dev Classic ERC1155 Standard Method
     */
    function balanceOfBatch(
        address[] memory accounts,
        uint256[] memory objectIds
    ) public virtual override view returns (uint256[] memory) {
        uint256[] memory balances = new uint256[](accounts.length);
        for (uint256 i = 0; i < accounts.length; i++) {
            balances[i] = balanceOf(accounts[i], objectIds[i]);
        }
    }

    /**
     * @dev Classic ERC1155 Standard Method
     */
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        address sender = _msgSender();
        require(
            sender != operator,
            "ERC1155: setting approval status for self"
        );

        _operatorApprovals[sender][operator] = approved;
        emit ApprovalForAll(sender, operator, approved);
    }

    /**
     * @dev Classic ERC1155 Standard Method
     */
    function isApprovedForAll(address account, address operator)
        public
        virtual
        override
        view
        returns (bool)
    {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev Classic ERC1155 Standard Method
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 objectId,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        address operator = _msgSender();

        asERC20(objectId).transferFrom(from, to, toDecimals(objectId, amount));

        emit TransferSingle(operator, from, to, objectId, amount);

        _doSafeTransferAcceptanceCheck(
            operator,
            from,
            to,
            objectId,
            amount,
            data
        );
    }

    /**
     * @dev Classic ERC1155 Standard Method
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory objectIds,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        for (uint256 i = 0; i < objectIds.length; i++) {
            asERC20(objectIds[i]).transferFrom(
                from,
                to,
                toDecimals(objectIds[i], amounts[i])
            );
        }

        address operator = _msgSender();

        emit TransferBatch(operator, from, to, objectIds, amounts);

        _doSafeBatchTransferAcceptanceCheck(
            operator,
            from,
            to,
            objectIds,
            amounts,
            data
        );
    }

    function emitTransferSingleEvent(address sender, address from, address to, uint256 objectId, uint256 amount) public override {
        require(_dest[objectId] == msg.sender, "Unauthorized Action!");
        uint256 entireAmount = fromDecimals(objectId, amount);
        if(entireAmount == 0) {
            return;
        }
        emit TransferSingle(sender, from, to, objectId, entireAmount);
    }

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        if (to.isContract()) {
            try
                IERC1155Receiver(to).onERC1155Received(
                    operator,
                    from,
                    id,
                    amount,
                    data
                )
            returns (bytes4 response) {
                if (
                    response != IERC1155Receiver(to).onERC1155Received.selector
                ) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        if (to.isContract()) {
            try
                IERC1155Receiver(to).onERC1155BatchReceived(
                    operator,
                    from,
                    ids,
                    amounts,
                    data
                )
            returns (bytes4 response) {
                if (
                    response !=
                    IERC1155Receiver(to).onERC1155BatchReceived.selector
                ) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _checkAndInsertSelector(bytes4 selector)
        internal
        virtual
        returns (bool response)
    {
        if (_source == address(0)) {
            _registerInterface(selector);
            return true;
        }
        try ERC165(_source).supportsInterface(selector) returns (bool res) {
            if (response = res) {
                _registerInterface(selector);
            }
        } catch {}
    }

    function _clone(address original) internal returns (address copy) {
        assembly {
            mstore(
                0,
                or(
                    0x5880730000000000000000000000000000000000000000803b80938091923cF3,
                    mul(original, 0x1000000000000000000)
                )
            )
            copy := create(0, 0, 32)
            switch extcodesize(copy)
                case 0 {
                    invalid()
                }
        }
    }

    function _mint(
        address from,
        uint256 oldObjectId,
        uint256 amount,
        bool generateObjectId
    ) internal virtual returns (uint256, address) {
        uint256 objectId = oldObjectId;
        IERC20NFTWrapper wrapper = IERC20NFTWrapper(_dest[objectId]);
        if (_dest[objectId] == address(0) || generateObjectId) {
            require(
                amount > _getTokenUnity(objectId),
                "You need to pass more than a token"
            );
            wrapper = IERC20NFTWrapper(_clone(getModel()));
            if(generateObjectId) {
                objectId = uint256(address(wrapper));
            }
            wrapper.init(objectId);
            _isMine[_dest[objectId] = address(wrapper)] = true;
            emit Mint(objectId, address(wrapper));
        }
        wrapper.mint(from, _convertForMint(objectId, amount));
        emit TransferSingle(address(this), address(0), from, objectId, amount);
        return (objectId, address(wrapper));
    }

    function _getTokenUnity(uint256 objectId)
        internal
        virtual
        view
        returns (uint256)
    {
        if (_source == address(0)) {
            return (10**18);
        }
        if (_supportsDecimals) {
            return (10**IERC1155Views(_source).decimals(objectId));
        }
        return 1;
    }

    function _convertForMint(uint256 objectId, uint256 amount)
        internal
        virtual
        view
        returns (uint256)
    {
        if (_source != address(0) && _supportsDecimals) {
            return amount * (10**IERC1155Views(_source).decimals(objectId));
        }
        return amount;
    }

    function _setAndCheckNameAndSymbol(
        string memory inputName,
        string memory inputSymbol
    ) internal virtual {
        _name = inputName;
        _symbol = inputSymbol;
        if (_source != address(0)) {
            IERC1155Data data = IERC1155Data(_source);
            try data.name() returns (string memory n) {
                _name = n;
            } catch {}
            try data.symbol() returns (string memory s) {
                _symbol = s;
            } catch {}
        }
        require(keccak256(bytes(_name)) != keccak256(""), "Name is mandatory");
        require(
            keccak256(bytes(_symbol)) != keccak256(""),
            "Symbol is mandatory"
        );
    }
}

// File: contracts\standalone\voting\DFOSuperSaiyanToken.sol

// SPDX_License_Identifier: MIT

pragma solidity ^0.6.0;



/**
 * @title DFOSuperSaiyanToken
 */
contract DFOSuperSaiyanToken is IDFOSuperSaiyanToken, SuperSaiyanToken(address(0), address(0), "", "") {

    address private _doubleProxy;

    constructor(
        address model,
        address doubleProxy,
        string memory name,
        string memory symbol
    ) public {
        if(model != address(0)) {
            init(model, doubleProxy, name, symbol);
        }
    }

    function init(
        address model,
        address doubleProxy,
        string memory name,
        string memory symbol
    ) public override(ISuperSaiyanToken, SuperSaiyanToken) {
        super.init(model, address(0), name, symbol);
        _doubleProxy = doubleProxy;
    }

    modifier byDFO {
        if(_doubleProxy != address(0)) {
            require(IMVDFunctionalitiesManager(IMVDProxy(IDoubleProxy(_doubleProxy).proxy()).getMVDFunctionalitiesManagerAddress()).isAuthorizedFunctionality(msg.sender), "Unauthorized Action!");
        }
        _;
    }

    function doubleProxy() public override view returns(address) {
        return _doubleProxy;
    }

    function setDoubleProxy(address newDoubleProxy) public override byDFO {
        _doubleProxy = newDoubleProxy;
    }

    function mint(uint256 amount, string memory objectUri)
        public
        virtual
        override(ISuperSaiyanToken, SuperSaiyanToken)
        byDFO
        returns (uint256 objectId, address tokenAddress)
    {
        (objectId, tokenAddress) = super.mint(amount, objectUri);
        emit UriChanged(objectId, "", objectUri);
    }

    function setUri(uint256 objectId, string memory newUri) public byDFO override {
        emit UriChanged(objectId, _objectUris[objectId], newUri);
        _objectUris[objectId] = newUri;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"model","type":"address"},{"internalType":"address","name":"doubleProxy","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"objectId","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"objectId","type":"uint256"},{"indexed":false,"internalType":"string","name":"oldUri","type":"string"},{"indexed":false,"internalType":"string","name":"newUri","type":"string"}],"name":"UriChanged","type":"event"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"asERC20","outputs":[{"internalType":"contract IERC20NFTWrapper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"objectIds","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"objectIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"doubleProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitTransferSingleEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"fromDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"getMintData","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getModel","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"model","type":"address"},{"internalType":"address","name":"doubleProxy","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"objectUri","type":"string"}],"name":"mint","outputs":[{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256[]","name":"objectIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"objectIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDoubleProxy","type":"address"}],"name":"setDoubleProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"string","name":"newUri","type":"string"}],"name":"setUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"source","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"toDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040516200527438038062005274833981810160405260808110156200003757600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200006357600080fd5b9083019060208201858111156200007957600080fd5b82516401000000008111828201881017156200009457600080fd5b82525081516020918201929091019080838360005b83811015620000c3578181015183820152602001620000a9565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b9083019060208201858111156200012b57600080fd5b82516401000000008111828201881017156200014657600080fd5b82525081516020918201929091019080838360005b83811015620001755781810151838201526020016200015b565b50505050905090810190601f168015620001a35780820380516001836020036101000a031916815260200191505b5060208082016040908152600080845281519283019091528082529450849350909150620001d86301ffc9a760e01b62000222565b6001600160a01b03841615620001f657620001f684848484620002a7565b505050506001600160a01b0384161562000218576200021884848484620002a7565b5050505062000c6e565b6001600160e01b0319808216141562000282576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b620002c18460008484620002e660201b62002fb31760201c565b5050600a80546001600160a01b0319166001600160a01b039290921691909117905550565b6009546001600160a01b03161562000345576040805162461bcd60e51b815260206004820152601460248201527f496e697420616c72656164792063616c6c656421000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0384166200038c5760405162461bcd60e51b8152600401808060200182810382526028815260200180620051946028913960400191505060405180910390fd5b600980546001600160a01b038087166001600160a01b031992831617909255600180548684169216919091179081905516151580620003e0575081516020830120600080516020620051bc83398151915214155b6200041d5760405162461bcd60e51b8152600401808060200182810382526030815260200180620052446030913960400191505060405180910390fd5b6001546001600160a01b03161515806200044c575080516020820120600080516020620051bc83398151915214155b620004895760405162461bcd60e51b8152600401808060200182810382526032815260200180620052126032913960400191505060405180910390fd5b6200049b63f23a6e6160e01b62000222565b620004ad63bc197c8160e01b62000222565b6000620004c1631759616b60e11b62000687565b90506000620004d7636cdb3d1360e11b62000687565b6001549091506001600160a01b03161580620004f05750815b80620004f95750805b620005365760405162461bcd60e51b8152600401808060200182810382526036815260200180620051dc6036913960400191505060405180910390fd5b62000547627eeac760e11b62000687565b506200055a6313849cfd60e21b62000687565b506200056d63a22cb46560e01b62000687565b506200058063e985e9c560e01b62000687565b5062000593637921219560e11b62000687565b50620005a66303a24d0760e21b62000687565b50620005b963bd85b03960e01b62000687565b50620005cb622b600360e21b62000687565b6005805460ff1916911515919091179055620005ee634e41a1fb60e01b62000687565b600580549115156101000261ff001990921691909117905562000618631fa3f33160e11b62000687565b60058054911515620100000262ff0000199092169190911790556001546001600160a01b031615620006565760055462010000900460ff1662000659565b60005b60058054911515620100000262ff0000199092169190911790556200067f848462000753565b505050505050565b6001546000906001600160a01b0316620006af57620006a68262000222565b5060016200074e565b600154604080516301ffc9a760e01b81526001600160e01b03198516600482015290516001600160a01b03909216916301ffc9a791602480820192602092909190829003018186803b1580156200070557600080fd5b505afa9250505080156200072c57506040513d60208110156200072757600080fd5b505160015b62000737576200074e565b80915081156200074c576200074c8362000222565b505b919050565b81516200076890600290602085019062000bd2565b5080516200077e90600390602084019062000bd2565b506001546001600160a01b03161562000a3657600154604080516306fdde0360e01b815290516001600160a01b039092169182916306fdde03916004808301926000929190829003018186803b158015620007d857600080fd5b505afa925050508015620008c657506040513d6000823e601f3d908101601f1916820160405260208110156200080d57600080fd5b81019080805160405193929190846401000000008211156200082e57600080fd5b9083019060208201858111156200084457600080fd5b82516401000000008111828201881017156200085f57600080fd5b82525081516020918201929091019080838360005b838110156200088e57818101518382015260200162000874565b50505050905090810190601f168015620008bc5780820380516001836020036101000a031916815260200191505b5060405250505060015b620008d157620008e9565b8051620008e690600290602084019062000bd2565b50505b806001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200092357600080fd5b505afa92505050801562000a1157506040513d6000823e601f3d908101601f1916820160405260208110156200095857600080fd5b81019080805160405193929190846401000000008211156200097957600080fd5b9083019060208201858111156200098f57600080fd5b8251640100000000811182820188101715620009aa57600080fd5b82525081516020918201929091019080838360005b83811015620009d9578181015183820152602001620009bf565b50505050905090810190601f16801562000a075780820380516001836020036101000a031916815260200191505b5060405250505060015b62000a1c5762000a34565b805162000a3190600390602084019062000bd2565b50505b505b600080516020620051bc8339815191526002604051808280546001816001161561010002031660029004801562000aa75780601f1062000a8457610100808354040283529182019162000aa7565b820191906000526020600020905b81548152906001019060200180831162000a92575b50509150506040518091039020141562000afc576040805162461bcd60e51b81526020600482015260116024820152704e616d65206973206d616e6461746f727960781b604482015290519081900360640190fd5b600080516020620051bc8339815191526003604051808280546001816001161561010002031660029004801562000b6d5780601f1062000b4a57610100808354040283529182019162000b6d565b820191906000526020600020905b81548152906001019060200180831162000b58575b50509150506040518091039020141562000bce576040805162461bcd60e51b815260206004820152601360248201527f53796d626f6c206973206d616e6461746f727900000000000000000000000000604482015290519081900360640190fd5b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000c1557805160ff191683800117855562000c45565b8280016001018555821562000c45579182015b8281111562000c4557825182559160200191906001019062000c28565b5062000c5392915062000c57565b5090565b5b8082111562000c53576000815560010162000c58565b6145168062000c7e6000396000f3fe608060405234801561001057600080fd5b50600436106101d85760003560e01c806377097fc811610104578063bc197c81116100a2578063e82b15f411610071578063e82b15f414610f7e578063e985e9c514610fc0578063f23a6e6114610fee578063f242432a146110b7576101d8565b8063bc197c8114610bb5578063bd85b03914610d93578063cbd99d0314610db0578063e090fa3c14610dd6576101d8565b806395d89b41116100de57806395d89b4114610b5a578063a0bfa1e014610b62578063a22cb46514610b6a578063a728ca8314610b98576101d8565b806377097fc814610933578063782f08ae146109ff57806380a5a37114610aaa576101d8565b80633f47e6621161017c5780634eb9b5921161014b5780634eb9b592146107e257806367e828bf1461080657806372f71b221461080e57806373f1642514610831576101d8565b80633f47e662146104f35780634d91d7d9146105105780634e1273f4146106525780634e41a1fb146107c5576101d8565b806306fdde03116101b857806306fdde03146102e85780630e89341c146102f0578063174e20e61461030d5780632eb2c2d614610330576101d8565b8062ad800c146101dd578062fdd58e1461026f57806301ffc9a7146102ad575b600080fd5b6101fa600480360360208110156101f357600080fd5b5035611180565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023457818101518382015260200161021c565b50505050905090810190601f1680156102615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61029b6004803603604081101561028557600080fd5b506001600160a01b0381351690602001356112b6565b60408051918252519081900360200190f35b6102d4600480360360208110156102c357600080fd5b50356001600160e01b03191661134b565b604080519115158252519081900360200190f35b6101fa61136a565b6101fa6004803603602081101561030657600080fd5b50356113fe565b61029b6004803603604081101561032357600080fd5b50803590602001356115ec565b6104f1600480360360a081101561034657600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561037957600080fd5b82018360208201111561038b57600080fd5b803590602001918460208302840111600160201b831117156103ac57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103fb57600080fd5b82018360208201111561040d57600080fd5b803590602001918460208302840111600160201b8311171561042e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561047d57600080fd5b82018360208201111561048f57600080fd5b803590602001918460018302840111600160201b831117156104b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611618945050505050565b005b61029b6004803603602081101561050957600080fd5b50356118b9565b6104f16004803603608081101561052657600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561055957600080fd5b82018360208201111561056b57600080fd5b803590602001918460018302840111600160201b8311171561058c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156105de57600080fd5b8201836020820111156105f057600080fd5b803590602001918460018302840111600160201b8311171561061157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061192e945050505050565b6107756004803603604081101561066857600080fd5b810190602081018135600160201b81111561068257600080fd5b82018360208201111561069457600080fd5b803590602001918460208302840111600160201b831117156106b557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561070457600080fd5b82018360208201111561071657600080fd5b803590602001918460208302840111600160201b8311171561073757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611960945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156107b1578181015183820152602001610799565b505050509050019250505060405180910390f35b6101fa600480360360208110156107db57600080fd5b5035611a0b565b6107ea611a4e565b604080516001600160a01b039092168252519081900360200190f35b6107ea611a5d565b61029b6004803603604081101561082457600080fd5b5080359060200135611a6c565b61084e6004803603602081101561084757600080fd5b5035611a99565b604051808060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561089557818101518382015260200161087d565b50505050905090810190601f1680156108c25780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156108f55781810151838201526020016108dd565b50505050905090810190601f1680156109225780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b6109de6004803603604081101561094957600080fd5b81359190810190604081016020820135600160201b81111561096a57600080fd5b82018360208201111561097c57600080fd5b803590602001918460018302840111600160201b8311171561099d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f30945050505050565b604080519283526001600160a01b0390911660208301528051918290030190f35b6104f160048036036040811015610a1557600080fd5b81359190810190604081016020820135600160201b811115610a3657600080fd5b820183602082011115610a4857600080fd5b803590602001918460018302840111600160201b83111715610a6957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506121b1945050505050565b6104f160048036036060811015610ac057600080fd5b813591602081013591810190606081016040820135600160201b811115610ae657600080fd5b820183602082011115610af857600080fd5b803590602001918460018302840111600160201b83111715610b1957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506124ac945050505050565b6101fa61262f565b6107ea612690565b6104f160048036036040811015610b8057600080fd5b506001600160a01b038135169060200135151561269f565b6107ea60048036036020811015610bae57600080fd5b503561276a565b610d76600480360360a0811015610bcb57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b811115610bfe57600080fd5b820183602082011115610c1057600080fd5b803590602001918460208302840111600160201b83111715610c3157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610c8057600080fd5b820183602082011115610c9257600080fd5b803590602001918460208302840111600160201b83111715610cb357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610d0257600080fd5b820183602082011115610d1457600080fd5b803590602001918460018302840111600160201b83111715610d3557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612785945050505050565b604080516001600160e01b03199092168252519081900360200190f35b61029b60048036036020811015610da957600080fd5b503561283a565b6104f160048036036020811015610dc657600080fd5b50356001600160a01b0316612881565b6104f160048036036060811015610dec57600080fd5b810190602081018135600160201b811115610e0657600080fd5b820183602082011115610e1857600080fd5b803590602001918460208302840111600160201b83111715610e3957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610e8857600080fd5b820183602082011115610e9a57600080fd5b803590602001918460208302840111600160201b83111715610ebb57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610f0a57600080fd5b820183602082011115610f1c57600080fd5b803590602001918460018302840111600160201b83111715610f3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612a58945050505050565b6104f1600480360360a0811015610f9457600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135612c6f565b6102d460048036036040811015610fd657600080fd5b506001600160a01b0381358116916020013516612d50565b610d76600480360360a081101561100457600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561104357600080fd5b82018360208201111561105557600080fd5b803590602001918460018302840111600160201b8311171561107657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612d7e945050505050565b6104f1600480360360a08110156110cd57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561110c57600080fd5b82018360208201111561111e57600080fd5b803590602001918460018302840111600160201b8311171561113f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612df8945050505050565b606061118b8261276a565b6001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156111c357600080fd5b505afa1580156111d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561120057600080fd5b8101908080516040519392919084600160201b82111561121f57600080fd5b90830190602082018581111561123457600080fd5b8251600160201b81118282018810171561124d57600080fd5b82525081516020918201929091019080838360005b8381101561127a578181015183820152602001611262565b50505050905090810190601f1680156112a75780820380516001836020036101000a031916815260200191505b5060405250505090505b919050565b6000611342826112c58461276a565b6001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561131157600080fd5b505afa158015611325573d6000803e3d6000fd5b505050506040513d602081101561133b57600080fd5b5051611a6c565b90505b92915050565b6001600160e01b03191660009081526020819052604090205460ff1690565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156113f35780601f106113c8576101008083540402835291602001916113f3565b820191906000526020600020905b8154815290600101906020018083116113d657829003601f168201915b505050505090505b90565b6001546060906001600160a01b03161561154e57600154604080516303a24d0760e21b81526004810185905290516001600160a01b0390921691630e89341c91602480820192600092909190829003018186803b15801561145e57600080fd5b505afa158015611472573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561149b57600080fd5b8101908080516040519392919084600160201b8211156114ba57600080fd5b9083019060208201858111156114cf57600080fd5b8251600160201b8111828201881017156114e857600080fd5b82525081516020918201929091019080838360005b838110156115155781810151838201526020016114fd565b50505050905090810190601f1680156115425780820380516001836020036101000a031916815260200191505b50604052505050611345565b60008281526004602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156115e15780601f106115b6576101008083540402835291602001916115e1565b820191906000526020600020905b8154815290600101906020018083116115c457829003601f168201915b505050505092915050565b60055460009062010000900460ff1661161257611608836118b9565b600a0a8202611342565b50919050565b6001600160a01b03841661165d5760405162461bcd60e51b81526004018080602001828103825260258152602001806144716025913960400191505060405180910390fd5b611665613314565b6001600160a01b0316856001600160a01b0316148061169057506116908561168b613314565b612d50565b6116cb5760405162461bcd60e51b81526004018080602001828103825260298152602001806143b06029913960400191505060405180910390fd5b60005b83518110156117bd576116f38482815181106116e657fe5b602002602001015161276a565b6001600160a01b03166323b872dd878761173388868151811061171257fe5b602002602001015188878151811061172657fe5b60200260200101516115ec565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b505050506040513d60208110156117b357600080fd5b50506001016116ce565b5060006117c8613314565b9050846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561184f578181015183820152602001611837565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561188e578181015183820152602001611876565b5050505090500194505050505060405180910390a46118b1818787878787613318565b505050505050565b60006118c48261276a565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156118fc57600080fd5b505afa158015611910573d6000803e3d6000fd5b505050506040513d602081101561192657600080fd5b505192915050565b61193b8460008484612fb3565b5050600a80546001600160a01b0319166001600160a01b039290921691909117905550565b606080835167ffffffffffffffff8111801561197b57600080fd5b506040519080825280602002602001820160405280156119a5578160200160208202803683370190505b50905060005b8451811015611a03576119e48582815181106119c357fe5b60200260200101518583815181106119d757fe5b60200260200101516112b6565b8282815181106119f057fe5b60209081029190910101526001016119ab565b505092915050565b6060611a168261276a565b6001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156111c357600080fd5b600a546001600160a01b031690565b6001546001600160a01b031690565b60055460009062010000900460ff1661161257611a88836118b9565b600a0a8281611a9357fe5b04611342565b60028054604080516020601f600019610100600187161502019094168590049384018190048102820181019092528281526060938493600093830182828015611b235780601f10611af857610100808354040283529160200191611b23565b820191906000526020600020905b815481529060010190602001808311611b0657829003601f168201915b505060038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815296995091945092508401905082828015611bb45780601f10611b8957610100808354040283529160200191611bb4565b820191906000526020600020905b815481529060010190602001808311611b9757829003601f168201915b5050600154939550601294505050506001600160a01b031615801590611c00575060055460ff1680611bed5750600554610100900460ff165b80611c00575060055462010000900460ff165b15611f29576001546005546001600160a01b039091169060ff16611c245783611d53565b806001600160a01b031662ad800c866040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611c6757600080fd5b505afa158015611c7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611ca457600080fd5b8101908080516040519392919084600160201b821115611cc357600080fd5b908301906020820185811115611cd857600080fd5b8251600160201b811182820188101715611cf157600080fd5b82525081516020918201929091019080838360005b83811015611d1e578181015183820152602001611d06565b50505050905090810190601f168015611d4b5780820380516001836020036101000a031916815260200191505b506040525050505b600554909450610100900460ff16611d6b5782611e9b565b806001600160a01b0316634e41a1fb866040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611daf57600080fd5b505afa158015611dc3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611dec57600080fd5b8101908080516040519392919084600160201b821115611e0b57600080fd5b908301906020820185811115611e2057600080fd5b8251600160201b811182820188101715611e3957600080fd5b82525081516020918201929091019080838360005b83811015611e66578181015183820152602001611e4e565b50505050905090810190601f168015611e935780820380516001836020036101000a031916815260200191505b506040525050505b60055490935062010000900460ff16611eb45781611f25565b806001600160a01b0316633f47e662866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611ef857600080fd5b505afa158015611f0c573d6000803e3d6000fd5b505050506040513d6020811015611f2257600080fd5b50515b9150505b9193909250565b600a5460009081906001600160a01b0316156120ea57600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b158015611f9457600080fd5b505afa158015611fa8573d6000803e3d6000fd5b505050506040513d6020811015611fbe57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561200257600080fd5b505afa158015612016573d6000803e3d6000fd5b505050506040513d602081101561202c57600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b15801561207657600080fd5b505afa15801561208a573d6000803e3d6000fd5b505050506040513d60208110156120a057600080fd5b50516120ea576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b6120f484846135cc565b8092508193505050817ff1396a8c166fbd80c99871753dbc42e202aa19cb3c6f4bb476abb4a239f7703484604051808060200180602001838103835260008152602001602001838103825284818151815260200191508051906020019080838360005b8381101561216f578181015183820152602001612157565b50505050905090810190601f16801561219c5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a29250929050565b600a546001600160a01b03161561236657600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b15801561221057600080fd5b505afa158015612224573d6000803e3d6000fd5b505050506040513d602081101561223a57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561227e57600080fd5b505afa158015612292573d6000803e3d6000fd5b505050506040513d60208110156122a857600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b1580156122f257600080fd5b505afa158015612306573d6000803e3d6000fd5b505050506040513d602081101561231c57600080fd5b5051612366576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600082815260046020908152604091829020825183815281546002600019610100600184161502019091160493810184905285937ff1396a8c166fbd80c99871753dbc42e202aa19cb3c6f4bb476abb4a239f770349386929182918201906060830190869080156124185780601f106123ed57610100808354040283529160200191612418565b820191906000526020600020905b8154815290600101906020018083116123fb57829003601f168201915b5050838103825284518152845160209182019186019080838360005b8381101561244c578181015183820152602001612434565b50505050905090810190601f1680156124795780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2600082815260046020908152604090912082516124a7928401906141cd565b505050565b6124b58361276a565b6001600160a01b0316639dc29fac336124ce86866115ec565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561251457600080fd5b505af1158015612528573d6000803e3d6000fd5b50506001546001600160a01b03161591506124a7905057600154604051637921219560e11b815230600482018181523360248401819052604484018890526064840187905260a060848501908152865160a486015286516001600160a01b039096169563f242432a9592938a938a938a93909160c40190602085019080838360005b838110156125c25781810151838201526020016125aa565b50505050905090810190601f1680156125ef5780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15801561261257600080fd5b505af1158015612626573d6000803e3d6000fd5b50505050505050565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156113f35780601f106113c8576101008083540402835291602001916113f3565b6009546001600160a01b031690565b60006126a9613314565b9050826001600160a01b0316816001600160a01b031614156126fc5760405162461bcd60e51b81526004018080602001828103825260298152602001806144b86029913960400191505060405180910390fd5b6001600160a01b03818116600081815260086020908152604080832094881680845294825291829020805460ff1916871515908117909155825190815291517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319281900390910190a3505050565b6000908152600660205260409020546001600160a01b031690565b6001546000906001600160a01b031633146127de576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b60005b84518110156128275761281d868683815181106127fa57fe5b602002602001015186848151811061280e57fe5b602002602001015160006136ca565b50506001016127e1565b5063bc197c8160e01b9695505050505050565b6000611345826128498461276a565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561131157600080fd5b600a546001600160a01b031615612a3657600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156128e057600080fd5b505afa1580156128f4573d6000803e3d6000fd5b505050506040513d602081101561290a57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561294e57600080fd5b505afa158015612962573d6000803e3d6000fd5b505050506040513d602081101561297857600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b1580156129c257600080fd5b505afa1580156129d6573d6000803e3d6000fd5b505050506040513d60208110156129ec57600080fd5b5051612a36576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8351811015612b0f57612a738482815181106116e657fe5b6001600160a01b0316639dc29fac33612aa5878581518110612a9157fe5b602002602001015187868151811061172657fe5b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612aeb57600080fd5b505af1158015612aff573d6000803e3d6000fd5b505060019092019150612a5b9050565b506001546001600160a01b0316156124a757600154604051631759616b60e11b81523060048201818152336024840181905260a060448501908152885160a486015288516001600160a01b0390961695632eb2c2d69592938a938a938a9390916064810191608482019160c401906020808a01910280838360005b83811015612ba2578181015183820152602001612b8a565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015612be1578181015183820152602001612bc9565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015612c1d578181015183820152602001612c05565b50505050905090810190601f168015612c4a5780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561261257600080fd5b6000828152600660205260409020546001600160a01b03163314612cd1576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b6000612cdd8383611a6c565b905080612cea5750612d49565b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628685604051808381526020018281526020019250505060405180910390a4505b5050505050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6001546000906001600160a01b03163314612dd7576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b612de485858560006136ca565b5063f23a6e6160e01b979650505050505050565b6001600160a01b038416612e3d5760405162461bcd60e51b81526004018080602001828103825260258152602001806144716025913960400191505060405180910390fd5b612e45613314565b6001600160a01b0316856001600160a01b03161480612e6b5750612e6b8561168b613314565b612ea65760405162461bcd60e51b81526004018080602001828103825260298152602001806143b06029913960400191505060405180910390fd5b6000612eb0613314565b9050612ebb8461276a565b6001600160a01b03166323b872dd8787612ed588886115ec565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015612f2b57600080fd5b505af1158015612f3f573d6000803e3d6000fd5b505050506040513d6020811015612f5557600080fd5b5050604080518581526020810185905281516001600160a01b03808916938a821693918616927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629281900390910190a46118b1818787878787613908565b6009546001600160a01b031615613008576040805162461bcd60e51b8152602060048201526014602482015273496e697420616c72656164792063616c6c65642160601b604482015290519081900360640190fd5b6001600160a01b03841661304d5760405162461bcd60e51b81526004018080602001828103825260288152602001806143686028913960400191505060405180910390fd5b600980546001600160a01b038087166001600160a01b03199283161790925560018054868416921691909117908190551615158061309f57508151602083012060008051602061439083398151915214155b6130da5760405162461bcd60e51b81526004018080602001828103825260308152602001806144416030913960400191505060405180910390fd5b6001546001600160a01b031615158061310757508051602082012060008051602061439083398151915214155b6131425760405162461bcd60e51b815260040180806020018281038252603281526020018061440f6032913960400191505060405180910390fd5b61315263f23a6e6160e01b613a79565b61316263bc197c8160e01b613a79565b6000613174631759616b60e11b613afd565b90506000613188636cdb3d1360e11b613afd565b6001549091506001600160a01b031615806131a05750815b806131a85750805b6131e35760405162461bcd60e51b81526004018080602001828103825260368152602001806143d96036913960400191505060405180910390fd5b6131f2627eeac760e11b613afd565b506132036313849cfd60e21b613afd565b5061321463a22cb46560e01b613afd565b5061322563e985e9c560e01b613afd565b50613236637921219560e11b613afd565b506132476303a24d0760e21b613afd565b5061325863bd85b03960e01b613afd565b50613268622b600360e21b613afd565b6005805460ff1916911515919091179055613289634e41a1fb60e01b613afd565b600580549115156101000261ff00199092169190911790556132b1631fa3f33160e11b613afd565b60058054911515620100000262ff0000199092169190911790556001546001600160a01b0316156132ed5760055462010000900460ff166132f0565b60005b60058054911515620100000262ff0000199092169190911790556118b18484613bb6565b3390565b61332a846001600160a01b0316613ffc565b156118b157836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156133b85781810151838201526020016133a0565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156133f75781810151838201526020016133df565b50505050905001848103825285818151815260200191508051906020019080838360005b8381101561343357818101518382015260200161341b565b50505050905090810190601f1680156134605780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561348557600080fd5b505af19250505080156134aa57506040513d60208110156134a557600080fd5b505160015b61357d576134b6614266565b806134c15750613546565b8060405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561350b5781810151838201526020016134f3565b50505050905090810190601f1680156135385780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60405162461bcd60e51b815260040180806020018281038252603481526020018061430c6034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b146126265760405162461bcd60e51b81526004018080602001828103825260288152602001806143406028913960400191505060405180910390fd5b60015460009081906001600160a01b03161561362f576040805162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74206d696e7420756e6578697374696e6720746f6b656e73000000604482015290519081900360640190fd5b82516020840120600080516020614390833981519152141561368e576040805162461bcd60e51b81526020600482015260136024820152725572692063616e6e6f7420626520656d70747960681b604482015290519081900360640190fd5b61369c3360008660016136ca565b600082815260046020908152604090912086519395509193506136c292908601906141cd565b509250929050565b600083815260066020526040812054819085906001600160a01b03168015806136f05750845b1561383b576136fe82614026565b861161373b5760405162461bcd60e51b81526004018080602001828103825260228152602001806144966022913960400191505060405180910390fd5b61374b613746612690565b6140e3565b9050841561376057806001600160a01b031691505b806001600160a01b031663b7b0422d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156137a657600080fd5b505af11580156137ba573d6000803e3d6000fd5b505050600083815260066020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558084526007835292819020805460ff1916600117905580518681529182019290925281517ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010293509081900390910190a15b806001600160a01b03166340c10f1989613855858a61411f565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561389b57600080fd5b505af11580156138af573d6000803e3d6000fd5b505060408051858152602081018a905281516001600160a01b038d1694506000935030927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a49097909650945050505050565b61391a846001600160a01b0316613ffc565b156118b157836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156139a9578181015183820152602001613991565b50505050905090810190601f1680156139d65780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b1580156139f957600080fd5b505af1925050508015613a1e57506040513d6020811015613a1957600080fd5b505160015b613a2a576134b6614266565b6001600160e01b0319811663f23a6e6160e01b146126265760405162461bcd60e51b81526004018080602001828103825260288152602001806143406028913960400191505060405180910390fd5b6001600160e01b03198082161415613ad8576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b6001546000906001600160a01b0316613b2157613b1982613a79565b5060016112b1565b600154604080516301ffc9a760e01b81526001600160e01b03198516600482015290516001600160a01b03909216916301ffc9a791602480820192602092909190829003018186803b158015613b7657600080fd5b505afa925050508015613b9b57506040513d6020811015613b9657600080fd5b505160015b613ba4576112b1565b80915081156116125761161283613a79565b8151613bc99060029060208501906141cd565b508051613bdd9060039060208401906141cd565b506001546001600160a01b031615613e7657600154604080516306fdde0360e01b815290516001600160a01b039092169182916306fdde03916004808301926000929190829003018186803b158015613c3557600080fd5b505afa925050508015613d1957506040513d6000823e601f3d908101601f191682016040526020811015613c6857600080fd5b8101908080516040519392919084600160201b821115613c8757600080fd5b908301906020820185811115613c9c57600080fd5b8251600160201b811182820188101715613cb557600080fd5b82525081516020918201929091019080838360005b83811015613ce2578181015183820152602001613cca565b50505050905090810190601f168015613d0f5780820380516001836020036101000a031916815260200191505b5060405250505060015b613d2257613d38565b8051613d359060029060208401906141cd565b50505b806001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015613d7157600080fd5b505afa925050508015613e5557506040513d6000823e601f3d908101601f191682016040526020811015613da457600080fd5b8101908080516040519392919084600160201b821115613dc357600080fd5b908301906020820185811115613dd857600080fd5b8251600160201b811182820188101715613df157600080fd5b82525081516020918201929091019080838360005b83811015613e1e578181015183820152602001613e06565b50505050905090810190601f168015613e4b5780820380516001836020036101000a031916815260200191505b5060405250505060015b613e5e57613e74565b8051613e719060039060208401906141cd565b50505b505b60008051602061439083398151915260026040518082805460018160011615610100020316600290048015613ee25780601f10613ec0576101008083540402835291820191613ee2565b820191906000526020600020905b815481529060010190602001808311613ece575b505091505060405180910390201415613f36576040805162461bcd60e51b81526020600482015260116024820152704e616d65206973206d616e6461746f727960781b604482015290519081900360640190fd5b60008051602061439083398151915260036040518082805460018160011615610100020316600290048015613fa25780601f10613f80576101008083540402835291820191613fa2565b820191906000526020600020905b815481529060010190602001808311613f8e575b505091505060405180910390201415613ff8576040805162461bcd60e51b815260206004820152601360248201527253796d626f6c206973206d616e6461746f727960681b604482015290519081900360640190fd5b5050565b6000813f60008051602061439083398151915281811480159061401e57508115155b949350505050565b6001546000906001600160a01b03166140485750670de0b6b3a76400006112b1565b60055462010000900460ff16156140db5760015460408051631fa3f33160e11b81526004810185905290516001600160a01b0390921691633f47e66291602480820192602092909190829003018186803b1580156140a557600080fd5b505afa1580156140b9573d6000803e3d6000fd5b505050506040513d60208110156140cf57600080fd5b5051600a0a90506112b1565b506001919050565b60006901000000000000000000820268803b80938091923cf36258807360e81b01176000526020600080f09050803b801561411d57611612565bfe5b6001546000906001600160a01b031615801590614144575060055462010000900460ff165b156116125760015460408051631fa3f33160e11b81526004810186905290516001600160a01b0390921691633f47e66291602480820192602092909190829003018186803b15801561419557600080fd5b505afa1580156141a9573d6000803e3d6000fd5b505050506040513d60208110156141bf57600080fd5b5051600a0a82029050611345565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061420e57805160ff191683800117855561423b565b8280016001018555821561423b579182015b8281111561423b578251825591602001919060010190614220565b5061424792915061424b565b5090565b5b80821115614247576000815560010161424c565b60e01c90565b600060443d1015614276576113fb565b600481823e6308c379a061428a8251614260565b14614294576113fb565b6040513d600319016004823e80513d67ffffffffffffffff81602484011181841117156142c457505050506113fb565b828401925082519150808211156142de57505050506113fb565b503d830160208284010111156142f6575050506113fb565b601f01601f191681016020016040529150509056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e734d6f64656c2073686f756c6420626520612076616c696420657468657265756d2061646472657373c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644c6f6f6b73206c696b6520796f75277265206e6f74207772617070696e67206120636f7272656374204552433131353520546f6b656e4174206c65617374206120736f7572636520636f6e7472616374206f7220612073796d626f6c206d757374206265207365744174206c65617374206120736f7572636520636f6e7472616374206f722061206e616d65206d75737420626520736574455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373596f75206e65656420746f2070617373206d6f7265207468616e206120746f6b656e455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66a26469706673582212206129495e80a4eb8f411641e2b3eb9acb50fae6eccbe2338faa1ce27e9994ada664736f6c634300060c00334d6f64656c2073686f756c6420626520612076616c696420657468657265756d2061646472657373c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4704c6f6f6b73206c696b6520796f75277265206e6f74207772617070696e67206120636f7272656374204552433131353520546f6b656e4174206c65617374206120736f7572636520636f6e7472616374206f7220612073796d626f6c206d757374206265207365744174206c65617374206120736f7572636520636f6e7472616374206f722061206e616d65206d75737420626520736574000000000000000000000000ac4a31555059a286e899422c2eeb2b5b55b5a579000000000000000000000000faf23b66314e1bef6581ee76a78ac7434989e3a6000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000001553757065722053616979612d6a696e20746f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000353534a0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101d85760003560e01c806377097fc811610104578063bc197c81116100a2578063e82b15f411610071578063e82b15f414610f7e578063e985e9c514610fc0578063f23a6e6114610fee578063f242432a146110b7576101d8565b8063bc197c8114610bb5578063bd85b03914610d93578063cbd99d0314610db0578063e090fa3c14610dd6576101d8565b806395d89b41116100de57806395d89b4114610b5a578063a0bfa1e014610b62578063a22cb46514610b6a578063a728ca8314610b98576101d8565b806377097fc814610933578063782f08ae146109ff57806380a5a37114610aaa576101d8565b80633f47e6621161017c5780634eb9b5921161014b5780634eb9b592146107e257806367e828bf1461080657806372f71b221461080e57806373f1642514610831576101d8565b80633f47e662146104f35780634d91d7d9146105105780634e1273f4146106525780634e41a1fb146107c5576101d8565b806306fdde03116101b857806306fdde03146102e85780630e89341c146102f0578063174e20e61461030d5780632eb2c2d614610330576101d8565b8062ad800c146101dd578062fdd58e1461026f57806301ffc9a7146102ad575b600080fd5b6101fa600480360360208110156101f357600080fd5b5035611180565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023457818101518382015260200161021c565b50505050905090810190601f1680156102615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61029b6004803603604081101561028557600080fd5b506001600160a01b0381351690602001356112b6565b60408051918252519081900360200190f35b6102d4600480360360208110156102c357600080fd5b50356001600160e01b03191661134b565b604080519115158252519081900360200190f35b6101fa61136a565b6101fa6004803603602081101561030657600080fd5b50356113fe565b61029b6004803603604081101561032357600080fd5b50803590602001356115ec565b6104f1600480360360a081101561034657600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561037957600080fd5b82018360208201111561038b57600080fd5b803590602001918460208302840111600160201b831117156103ac57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103fb57600080fd5b82018360208201111561040d57600080fd5b803590602001918460208302840111600160201b8311171561042e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561047d57600080fd5b82018360208201111561048f57600080fd5b803590602001918460018302840111600160201b831117156104b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611618945050505050565b005b61029b6004803603602081101561050957600080fd5b50356118b9565b6104f16004803603608081101561052657600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561055957600080fd5b82018360208201111561056b57600080fd5b803590602001918460018302840111600160201b8311171561058c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156105de57600080fd5b8201836020820111156105f057600080fd5b803590602001918460018302840111600160201b8311171561061157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061192e945050505050565b6107756004803603604081101561066857600080fd5b810190602081018135600160201b81111561068257600080fd5b82018360208201111561069457600080fd5b803590602001918460208302840111600160201b831117156106b557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561070457600080fd5b82018360208201111561071657600080fd5b803590602001918460208302840111600160201b8311171561073757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611960945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156107b1578181015183820152602001610799565b505050509050019250505060405180910390f35b6101fa600480360360208110156107db57600080fd5b5035611a0b565b6107ea611a4e565b604080516001600160a01b039092168252519081900360200190f35b6107ea611a5d565b61029b6004803603604081101561082457600080fd5b5080359060200135611a6c565b61084e6004803603602081101561084757600080fd5b5035611a99565b604051808060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561089557818101518382015260200161087d565b50505050905090810190601f1680156108c25780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156108f55781810151838201526020016108dd565b50505050905090810190601f1680156109225780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b6109de6004803603604081101561094957600080fd5b81359190810190604081016020820135600160201b81111561096a57600080fd5b82018360208201111561097c57600080fd5b803590602001918460018302840111600160201b8311171561099d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f30945050505050565b604080519283526001600160a01b0390911660208301528051918290030190f35b6104f160048036036040811015610a1557600080fd5b81359190810190604081016020820135600160201b811115610a3657600080fd5b820183602082011115610a4857600080fd5b803590602001918460018302840111600160201b83111715610a6957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506121b1945050505050565b6104f160048036036060811015610ac057600080fd5b813591602081013591810190606081016040820135600160201b811115610ae657600080fd5b820183602082011115610af857600080fd5b803590602001918460018302840111600160201b83111715610b1957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506124ac945050505050565b6101fa61262f565b6107ea612690565b6104f160048036036040811015610b8057600080fd5b506001600160a01b038135169060200135151561269f565b6107ea60048036036020811015610bae57600080fd5b503561276a565b610d76600480360360a0811015610bcb57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b811115610bfe57600080fd5b820183602082011115610c1057600080fd5b803590602001918460208302840111600160201b83111715610c3157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610c8057600080fd5b820183602082011115610c9257600080fd5b803590602001918460208302840111600160201b83111715610cb357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610d0257600080fd5b820183602082011115610d1457600080fd5b803590602001918460018302840111600160201b83111715610d3557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612785945050505050565b604080516001600160e01b03199092168252519081900360200190f35b61029b60048036036020811015610da957600080fd5b503561283a565b6104f160048036036020811015610dc657600080fd5b50356001600160a01b0316612881565b6104f160048036036060811015610dec57600080fd5b810190602081018135600160201b811115610e0657600080fd5b820183602082011115610e1857600080fd5b803590602001918460208302840111600160201b83111715610e3957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610e8857600080fd5b820183602082011115610e9a57600080fd5b803590602001918460208302840111600160201b83111715610ebb57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610f0a57600080fd5b820183602082011115610f1c57600080fd5b803590602001918460018302840111600160201b83111715610f3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612a58945050505050565b6104f1600480360360a0811015610f9457600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135612c6f565b6102d460048036036040811015610fd657600080fd5b506001600160a01b0381358116916020013516612d50565b610d76600480360360a081101561100457600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561104357600080fd5b82018360208201111561105557600080fd5b803590602001918460018302840111600160201b8311171561107657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612d7e945050505050565b6104f1600480360360a08110156110cd57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561110c57600080fd5b82018360208201111561111e57600080fd5b803590602001918460018302840111600160201b8311171561113f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612df8945050505050565b606061118b8261276a565b6001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156111c357600080fd5b505afa1580156111d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561120057600080fd5b8101908080516040519392919084600160201b82111561121f57600080fd5b90830190602082018581111561123457600080fd5b8251600160201b81118282018810171561124d57600080fd5b82525081516020918201929091019080838360005b8381101561127a578181015183820152602001611262565b50505050905090810190601f1680156112a75780820380516001836020036101000a031916815260200191505b5060405250505090505b919050565b6000611342826112c58461276a565b6001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561131157600080fd5b505afa158015611325573d6000803e3d6000fd5b505050506040513d602081101561133b57600080fd5b5051611a6c565b90505b92915050565b6001600160e01b03191660009081526020819052604090205460ff1690565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156113f35780601f106113c8576101008083540402835291602001916113f3565b820191906000526020600020905b8154815290600101906020018083116113d657829003601f168201915b505050505090505b90565b6001546060906001600160a01b03161561154e57600154604080516303a24d0760e21b81526004810185905290516001600160a01b0390921691630e89341c91602480820192600092909190829003018186803b15801561145e57600080fd5b505afa158015611472573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561149b57600080fd5b8101908080516040519392919084600160201b8211156114ba57600080fd5b9083019060208201858111156114cf57600080fd5b8251600160201b8111828201881017156114e857600080fd5b82525081516020918201929091019080838360005b838110156115155781810151838201526020016114fd565b50505050905090810190601f1680156115425780820380516001836020036101000a031916815260200191505b50604052505050611345565b60008281526004602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156115e15780601f106115b6576101008083540402835291602001916115e1565b820191906000526020600020905b8154815290600101906020018083116115c457829003601f168201915b505050505092915050565b60055460009062010000900460ff1661161257611608836118b9565b600a0a8202611342565b50919050565b6001600160a01b03841661165d5760405162461bcd60e51b81526004018080602001828103825260258152602001806144716025913960400191505060405180910390fd5b611665613314565b6001600160a01b0316856001600160a01b0316148061169057506116908561168b613314565b612d50565b6116cb5760405162461bcd60e51b81526004018080602001828103825260298152602001806143b06029913960400191505060405180910390fd5b60005b83518110156117bd576116f38482815181106116e657fe5b602002602001015161276a565b6001600160a01b03166323b872dd878761173388868151811061171257fe5b602002602001015188878151811061172657fe5b60200260200101516115ec565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b505050506040513d60208110156117b357600080fd5b50506001016116ce565b5060006117c8613314565b9050846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561184f578181015183820152602001611837565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561188e578181015183820152602001611876565b5050505090500194505050505060405180910390a46118b1818787878787613318565b505050505050565b60006118c48261276a565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156118fc57600080fd5b505afa158015611910573d6000803e3d6000fd5b505050506040513d602081101561192657600080fd5b505192915050565b61193b8460008484612fb3565b5050600a80546001600160a01b0319166001600160a01b039290921691909117905550565b606080835167ffffffffffffffff8111801561197b57600080fd5b506040519080825280602002602001820160405280156119a5578160200160208202803683370190505b50905060005b8451811015611a03576119e48582815181106119c357fe5b60200260200101518583815181106119d757fe5b60200260200101516112b6565b8282815181106119f057fe5b60209081029190910101526001016119ab565b505092915050565b6060611a168261276a565b6001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156111c357600080fd5b600a546001600160a01b031690565b6001546001600160a01b031690565b60055460009062010000900460ff1661161257611a88836118b9565b600a0a8281611a9357fe5b04611342565b60028054604080516020601f600019610100600187161502019094168590049384018190048102820181019092528281526060938493600093830182828015611b235780601f10611af857610100808354040283529160200191611b23565b820191906000526020600020905b815481529060010190602001808311611b0657829003601f168201915b505060038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815296995091945092508401905082828015611bb45780601f10611b8957610100808354040283529160200191611bb4565b820191906000526020600020905b815481529060010190602001808311611b9757829003601f168201915b5050600154939550601294505050506001600160a01b031615801590611c00575060055460ff1680611bed5750600554610100900460ff165b80611c00575060055462010000900460ff165b15611f29576001546005546001600160a01b039091169060ff16611c245783611d53565b806001600160a01b031662ad800c866040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611c6757600080fd5b505afa158015611c7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611ca457600080fd5b8101908080516040519392919084600160201b821115611cc357600080fd5b908301906020820185811115611cd857600080fd5b8251600160201b811182820188101715611cf157600080fd5b82525081516020918201929091019080838360005b83811015611d1e578181015183820152602001611d06565b50505050905090810190601f168015611d4b5780820380516001836020036101000a031916815260200191505b506040525050505b600554909450610100900460ff16611d6b5782611e9b565b806001600160a01b0316634e41a1fb866040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611daf57600080fd5b505afa158015611dc3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611dec57600080fd5b8101908080516040519392919084600160201b821115611e0b57600080fd5b908301906020820185811115611e2057600080fd5b8251600160201b811182820188101715611e3957600080fd5b82525081516020918201929091019080838360005b83811015611e66578181015183820152602001611e4e565b50505050905090810190601f168015611e935780820380516001836020036101000a031916815260200191505b506040525050505b60055490935062010000900460ff16611eb45781611f25565b806001600160a01b0316633f47e662866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611ef857600080fd5b505afa158015611f0c573d6000803e3d6000fd5b505050506040513d6020811015611f2257600080fd5b50515b9150505b9193909250565b600a5460009081906001600160a01b0316156120ea57600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b158015611f9457600080fd5b505afa158015611fa8573d6000803e3d6000fd5b505050506040513d6020811015611fbe57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561200257600080fd5b505afa158015612016573d6000803e3d6000fd5b505050506040513d602081101561202c57600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b15801561207657600080fd5b505afa15801561208a573d6000803e3d6000fd5b505050506040513d60208110156120a057600080fd5b50516120ea576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b6120f484846135cc565b8092508193505050817ff1396a8c166fbd80c99871753dbc42e202aa19cb3c6f4bb476abb4a239f7703484604051808060200180602001838103835260008152602001602001838103825284818151815260200191508051906020019080838360005b8381101561216f578181015183820152602001612157565b50505050905090810190601f16801561219c5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a29250929050565b600a546001600160a01b03161561236657600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b15801561221057600080fd5b505afa158015612224573d6000803e3d6000fd5b505050506040513d602081101561223a57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561227e57600080fd5b505afa158015612292573d6000803e3d6000fd5b505050506040513d60208110156122a857600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b1580156122f257600080fd5b505afa158015612306573d6000803e3d6000fd5b505050506040513d602081101561231c57600080fd5b5051612366576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600082815260046020908152604091829020825183815281546002600019610100600184161502019091160493810184905285937ff1396a8c166fbd80c99871753dbc42e202aa19cb3c6f4bb476abb4a239f770349386929182918201906060830190869080156124185780601f106123ed57610100808354040283529160200191612418565b820191906000526020600020905b8154815290600101906020018083116123fb57829003601f168201915b5050838103825284518152845160209182019186019080838360005b8381101561244c578181015183820152602001612434565b50505050905090810190601f1680156124795780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2600082815260046020908152604090912082516124a7928401906141cd565b505050565b6124b58361276a565b6001600160a01b0316639dc29fac336124ce86866115ec565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561251457600080fd5b505af1158015612528573d6000803e3d6000fd5b50506001546001600160a01b03161591506124a7905057600154604051637921219560e11b815230600482018181523360248401819052604484018890526064840187905260a060848501908152865160a486015286516001600160a01b039096169563f242432a9592938a938a938a93909160c40190602085019080838360005b838110156125c25781810151838201526020016125aa565b50505050905090810190601f1680156125ef5780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15801561261257600080fd5b505af1158015612626573d6000803e3d6000fd5b50505050505050565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156113f35780601f106113c8576101008083540402835291602001916113f3565b6009546001600160a01b031690565b60006126a9613314565b9050826001600160a01b0316816001600160a01b031614156126fc5760405162461bcd60e51b81526004018080602001828103825260298152602001806144b86029913960400191505060405180910390fd5b6001600160a01b03818116600081815260086020908152604080832094881680845294825291829020805460ff1916871515908117909155825190815291517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319281900390910190a3505050565b6000908152600660205260409020546001600160a01b031690565b6001546000906001600160a01b031633146127de576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b60005b84518110156128275761281d868683815181106127fa57fe5b602002602001015186848151811061280e57fe5b602002602001015160006136ca565b50506001016127e1565b5063bc197c8160e01b9695505050505050565b6000611345826128498461276a565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561131157600080fd5b600a546001600160a01b031615612a3657600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156128e057600080fd5b505afa1580156128f4573d6000803e3d6000fd5b505050506040513d602081101561290a57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561294e57600080fd5b505afa158015612962573d6000803e3d6000fd5b505050506040513d602081101561297857600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b1580156129c257600080fd5b505afa1580156129d6573d6000803e3d6000fd5b505050506040513d60208110156129ec57600080fd5b5051612a36576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8351811015612b0f57612a738482815181106116e657fe5b6001600160a01b0316639dc29fac33612aa5878581518110612a9157fe5b602002602001015187868151811061172657fe5b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612aeb57600080fd5b505af1158015612aff573d6000803e3d6000fd5b505060019092019150612a5b9050565b506001546001600160a01b0316156124a757600154604051631759616b60e11b81523060048201818152336024840181905260a060448501908152885160a486015288516001600160a01b0390961695632eb2c2d69592938a938a938a9390916064810191608482019160c401906020808a01910280838360005b83811015612ba2578181015183820152602001612b8a565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015612be1578181015183820152602001612bc9565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015612c1d578181015183820152602001612c05565b50505050905090810190601f168015612c4a5780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561261257600080fd5b6000828152600660205260409020546001600160a01b03163314612cd1576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b6000612cdd8383611a6c565b905080612cea5750612d49565b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628685604051808381526020018281526020019250505060405180910390a4505b5050505050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6001546000906001600160a01b03163314612dd7576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b612de485858560006136ca565b5063f23a6e6160e01b979650505050505050565b6001600160a01b038416612e3d5760405162461bcd60e51b81526004018080602001828103825260258152602001806144716025913960400191505060405180910390fd5b612e45613314565b6001600160a01b0316856001600160a01b03161480612e6b5750612e6b8561168b613314565b612ea65760405162461bcd60e51b81526004018080602001828103825260298152602001806143b06029913960400191505060405180910390fd5b6000612eb0613314565b9050612ebb8461276a565b6001600160a01b03166323b872dd8787612ed588886115ec565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015612f2b57600080fd5b505af1158015612f3f573d6000803e3d6000fd5b505050506040513d6020811015612f5557600080fd5b5050604080518581526020810185905281516001600160a01b03808916938a821693918616927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629281900390910190a46118b1818787878787613908565b6009546001600160a01b031615613008576040805162461bcd60e51b8152602060048201526014602482015273496e697420616c72656164792063616c6c65642160601b604482015290519081900360640190fd5b6001600160a01b03841661304d5760405162461bcd60e51b81526004018080602001828103825260288152602001806143686028913960400191505060405180910390fd5b600980546001600160a01b038087166001600160a01b03199283161790925560018054868416921691909117908190551615158061309f57508151602083012060008051602061439083398151915214155b6130da5760405162461bcd60e51b81526004018080602001828103825260308152602001806144416030913960400191505060405180910390fd5b6001546001600160a01b031615158061310757508051602082012060008051602061439083398151915214155b6131425760405162461bcd60e51b815260040180806020018281038252603281526020018061440f6032913960400191505060405180910390fd5b61315263f23a6e6160e01b613a79565b61316263bc197c8160e01b613a79565b6000613174631759616b60e11b613afd565b90506000613188636cdb3d1360e11b613afd565b6001549091506001600160a01b031615806131a05750815b806131a85750805b6131e35760405162461bcd60e51b81526004018080602001828103825260368152602001806143d96036913960400191505060405180910390fd5b6131f2627eeac760e11b613afd565b506132036313849cfd60e21b613afd565b5061321463a22cb46560e01b613afd565b5061322563e985e9c560e01b613afd565b50613236637921219560e11b613afd565b506132476303a24d0760e21b613afd565b5061325863bd85b03960e01b613afd565b50613268622b600360e21b613afd565b6005805460ff1916911515919091179055613289634e41a1fb60e01b613afd565b600580549115156101000261ff00199092169190911790556132b1631fa3f33160e11b613afd565b60058054911515620100000262ff0000199092169190911790556001546001600160a01b0316156132ed5760055462010000900460ff166132f0565b60005b60058054911515620100000262ff0000199092169190911790556118b18484613bb6565b3390565b61332a846001600160a01b0316613ffc565b156118b157836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156133b85781810151838201526020016133a0565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156133f75781810151838201526020016133df565b50505050905001848103825285818151815260200191508051906020019080838360005b8381101561343357818101518382015260200161341b565b50505050905090810190601f1680156134605780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561348557600080fd5b505af19250505080156134aa57506040513d60208110156134a557600080fd5b505160015b61357d576134b6614266565b806134c15750613546565b8060405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561350b5781810151838201526020016134f3565b50505050905090810190601f1680156135385780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60405162461bcd60e51b815260040180806020018281038252603481526020018061430c6034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b146126265760405162461bcd60e51b81526004018080602001828103825260288152602001806143406028913960400191505060405180910390fd5b60015460009081906001600160a01b03161561362f576040805162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74206d696e7420756e6578697374696e6720746f6b656e73000000604482015290519081900360640190fd5b82516020840120600080516020614390833981519152141561368e576040805162461bcd60e51b81526020600482015260136024820152725572692063616e6e6f7420626520656d70747960681b604482015290519081900360640190fd5b61369c3360008660016136ca565b600082815260046020908152604090912086519395509193506136c292908601906141cd565b509250929050565b600083815260066020526040812054819085906001600160a01b03168015806136f05750845b1561383b576136fe82614026565b861161373b5760405162461bcd60e51b81526004018080602001828103825260228152602001806144966022913960400191505060405180910390fd5b61374b613746612690565b6140e3565b9050841561376057806001600160a01b031691505b806001600160a01b031663b7b0422d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156137a657600080fd5b505af11580156137ba573d6000803e3d6000fd5b505050600083815260066020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558084526007835292819020805460ff1916600117905580518681529182019290925281517ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010293509081900390910190a15b806001600160a01b03166340c10f1989613855858a61411f565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561389b57600080fd5b505af11580156138af573d6000803e3d6000fd5b505060408051858152602081018a905281516001600160a01b038d1694506000935030927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a49097909650945050505050565b61391a846001600160a01b0316613ffc565b156118b157836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156139a9578181015183820152602001613991565b50505050905090810190601f1680156139d65780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b1580156139f957600080fd5b505af1925050508015613a1e57506040513d6020811015613a1957600080fd5b505160015b613a2a576134b6614266565b6001600160e01b0319811663f23a6e6160e01b146126265760405162461bcd60e51b81526004018080602001828103825260288152602001806143406028913960400191505060405180910390fd5b6001600160e01b03198082161415613ad8576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b6001546000906001600160a01b0316613b2157613b1982613a79565b5060016112b1565b600154604080516301ffc9a760e01b81526001600160e01b03198516600482015290516001600160a01b03909216916301ffc9a791602480820192602092909190829003018186803b158015613b7657600080fd5b505afa925050508015613b9b57506040513d6020811015613b9657600080fd5b505160015b613ba4576112b1565b80915081156116125761161283613a79565b8151613bc99060029060208501906141cd565b508051613bdd9060039060208401906141cd565b506001546001600160a01b031615613e7657600154604080516306fdde0360e01b815290516001600160a01b039092169182916306fdde03916004808301926000929190829003018186803b158015613c3557600080fd5b505afa925050508015613d1957506040513d6000823e601f3d908101601f191682016040526020811015613c6857600080fd5b8101908080516040519392919084600160201b821115613c8757600080fd5b908301906020820185811115613c9c57600080fd5b8251600160201b811182820188101715613cb557600080fd5b82525081516020918201929091019080838360005b83811015613ce2578181015183820152602001613cca565b50505050905090810190601f168015613d0f5780820380516001836020036101000a031916815260200191505b5060405250505060015b613d2257613d38565b8051613d359060029060208401906141cd565b50505b806001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015613d7157600080fd5b505afa925050508015613e5557506040513d6000823e601f3d908101601f191682016040526020811015613da457600080fd5b8101908080516040519392919084600160201b821115613dc357600080fd5b908301906020820185811115613dd857600080fd5b8251600160201b811182820188101715613df157600080fd5b82525081516020918201929091019080838360005b83811015613e1e578181015183820152602001613e06565b50505050905090810190601f168015613e4b5780820380516001836020036101000a031916815260200191505b5060405250505060015b613e5e57613e74565b8051613e719060039060208401906141cd565b50505b505b60008051602061439083398151915260026040518082805460018160011615610100020316600290048015613ee25780601f10613ec0576101008083540402835291820191613ee2565b820191906000526020600020905b815481529060010190602001808311613ece575b505091505060405180910390201415613f36576040805162461bcd60e51b81526020600482015260116024820152704e616d65206973206d616e6461746f727960781b604482015290519081900360640190fd5b60008051602061439083398151915260036040518082805460018160011615610100020316600290048015613fa25780601f10613f80576101008083540402835291820191613fa2565b820191906000526020600020905b815481529060010190602001808311613f8e575b505091505060405180910390201415613ff8576040805162461bcd60e51b815260206004820152601360248201527253796d626f6c206973206d616e6461746f727960681b604482015290519081900360640190fd5b5050565b6000813f60008051602061439083398151915281811480159061401e57508115155b949350505050565b6001546000906001600160a01b03166140485750670de0b6b3a76400006112b1565b60055462010000900460ff16156140db5760015460408051631fa3f33160e11b81526004810185905290516001600160a01b0390921691633f47e66291602480820192602092909190829003018186803b1580156140a557600080fd5b505afa1580156140b9573d6000803e3d6000fd5b505050506040513d60208110156140cf57600080fd5b5051600a0a90506112b1565b506001919050565b60006901000000000000000000820268803b80938091923cf36258807360e81b01176000526020600080f09050803b801561411d57611612565bfe5b6001546000906001600160a01b031615801590614144575060055462010000900460ff165b156116125760015460408051631fa3f33160e11b81526004810186905290516001600160a01b0390921691633f47e66291602480820192602092909190829003018186803b15801561419557600080fd5b505afa1580156141a9573d6000803e3d6000fd5b505050506040513d60208110156141bf57600080fd5b5051600a0a82029050611345565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061420e57805160ff191683800117855561423b565b8280016001018555821561423b579182015b8281111561423b578251825591602001919060010190614220565b5061424792915061424b565b5090565b5b80821115614247576000815560010161424c565b60e01c90565b600060443d1015614276576113fb565b600481823e6308c379a061428a8251614260565b14614294576113fb565b6040513d600319016004823e80513d67ffffffffffffffff81602484011181841117156142c457505050506113fb565b828401925082519150808211156142de57505050506113fb565b503d830160208284010111156142f6575050506113fb565b601f01601f191681016020016040529150509056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e734d6f64656c2073686f756c6420626520612076616c696420657468657265756d2061646472657373c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644c6f6f6b73206c696b6520796f75277265206e6f74207772617070696e67206120636f7272656374204552433131353520546f6b656e4174206c65617374206120736f7572636520636f6e7472616374206f7220612073796d626f6c206d757374206265207365744174206c65617374206120736f7572636520636f6e7472616374206f722061206e616d65206d75737420626520736574455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373596f75206e65656420746f2070617373206d6f7265207468616e206120746f6b656e455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66a26469706673582212206129495e80a4eb8f411641e2b3eb9acb50fae6eccbe2338faa1ce27e9994ada664736f6c634300060c0033

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

000000000000000000000000ac4a31555059a286e899422c2eeb2b5b55b5a579000000000000000000000000faf23b66314e1bef6581ee76a78ac7434989e3a6000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000001553757065722053616979612d6a696e20746f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000353534a0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : model (address): 0xAC4a31555059a286e899422c2eeB2b5B55b5a579
Arg [1] : doubleProxy (address): 0xFAF23B66314E1BEF6581Ee76a78AC7434989E3a6
Arg [2] : name (string): Super Saiya-jin token
Arg [3] : symbol (string): SSJ

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000ac4a31555059a286e899422c2eeb2b5b55b5a579
Arg [1] : 000000000000000000000000faf23b66314e1bef6581ee76a78ac7434989e3a6
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [5] : 53757065722053616979612d6a696e20746f6b656e0000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 53534a0000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

53047:1777:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42096:185;;;;;;;;;;;;;;;;-1:-1:-1;42096:185:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43699:237;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;43699:237:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29433:142;;;;;;;;;;;;;;;;-1:-1:-1;29433:142:0;-1:-1:-1;;;;;;29433:142:0;;:::i;:::-;;;;;;;;;;;;;;;;;;42289:100;;;:::i;43337:291::-;;;;;;;;;;;;;;;;-1:-1:-1;43337:291:0;;:::i;40821:241::-;;;;;;;;;;;;;;;;-1:-1:-1;40821:241:0;;;;;;;:::i;46082:985::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46082:985:0;;;;;;;;-1:-1:-1;46082:985:0;;-1:-1:-1;;;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46082:985:0;;;;;;;;-1:-1:-1;46082:985:0;;-1:-1:-1;;;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46082:985:0;;-1:-1:-1;46082:985:0;;-1:-1:-1;;;;;46082:985:0:i;:::-;;43002:187;;;;;;;;;;;;;;;;-1:-1:-1;43002:187:0;;:::i;53451:287::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;53451:287:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53451:287:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53451:287:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53451:287:0;;;;;;;;-1:-1:-1;53451:287:0;;-1:-1:-1;;;;;53451:287:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53451:287:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53451:287:0;;-1:-1:-1;53451:287:0;;-1:-1:-1;;;;;53451:287:0:i;44007:370::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;44007:370:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;44007:370:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44007:370:0;;;;;;;;-1:-1:-1;44007:370:0;;-1:-1:-1;;;;;44007:370:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;44007:370:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44007:370:0;;-1:-1:-1;44007:370:0;;-1:-1:-1;;;;;44007:370:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42543:189;;;;;;;;;;;;;;;;-1:-1:-1;42543:189:0;;:::i;54039:99::-;;;:::i;:::-;;;;-1:-1:-1;;;;;54039:99:0;;;;;;;;;;;;;;41157:98;;;:::i;40447:243::-;;;;;;;;;;;;;;;;-1:-1:-1;40447:243:0;;;;;;;:::i;39380:742::-;;;;;;;;;;;;;;;;-1:-1:-1;39380:742:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39380:742:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54272:347;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54272:347:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54272:347:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54272:347:0;;-1:-1:-1;54272:347:0;;-1:-1:-1;;;;;54272:347:0:i;:::-;;;;;;;-1:-1:-1;;;;;54272:347:0;;;;;;;;;;;;;;;;54627:194;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54627:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54627:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54627:194:0;;-1:-1:-1;54627:194:0;;-1:-1:-1;;;;;54627:194:0:i;36655:457::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36655:457:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36655:457:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36655:457:0;;-1:-1:-1;36655:457:0;;-1:-1:-1;;;;;36655:457:0:i;42740:104::-;;;:::i;40215:99::-;;;:::i;44448:402::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;44448:402:0;;;;;;;;;;:::i;41363:200::-;;;;;;;;;;;;;;;;-1:-1:-1;41363:200:0;;:::i;38681:473::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38681:473:0;;;;;;;;-1:-1:-1;38681:473:0;;-1:-1:-1;;;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38681:473:0;;;;;;;;-1:-1:-1;38681:473:0;;-1:-1:-1;;;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38681:473:0;;-1:-1:-1;38681:473:0;;-1:-1:-1;;;;;38681:473:0:i;:::-;;;;-1:-1:-1;;;;;;38681:473:0;;;;;;;;;;;;;;41729:217;;;;;;;;;;;;;;;;-1:-1:-1;41729:217:0;;:::i;54146:118::-;;;;;;;;;;;;;;;;-1:-1:-1;54146:118:0;-1:-1:-1;;;;;54146:118:0;;:::i;37223:623::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37223:623:0;;;;;;;;-1:-1:-1;37223:623:0;;-1:-1:-1;;;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37223:623:0;;;;;;;;-1:-1:-1;37223:623:0;;-1:-1:-1;;;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37223:623:0;;-1:-1:-1;37223:623:0;;-1:-1:-1;;;;;37223:623:0:i;47075:407::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;47075:407:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;44921:218::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;44921:218:0;;;;;;;;;;:::i;38158:362::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38158:362:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38158:362:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38158:362:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38158:362:0;;-1:-1:-1;38158:362:0;;-1:-1:-1;;;;;38158:362:0:i;45210:801::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45210:801:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;45210:801:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;45210:801:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45210:801:0;;-1:-1:-1;45210:801:0;;-1:-1:-1;;;;;45210:801:0:i;42096:185::-;42211:13;42249:17;42257:8;42249:7;:17::i;:::-;-1:-1:-1;;;;;42249:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42249:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;42249:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;42249:24:0;;;;;;-1:-1:-1;42249:24:0;;;;;;;;;;-1:-1:-1;42249:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42242:31;;42096:185;;;;:::o;43699:237::-;43836:7;43868:60;43881:8;43891:17;43899:8;43891:7;:17::i;:::-;-1:-1:-1;;;;;43891:27:0;;43919:7;43891:36;;;;;;;;;;;;;-1:-1:-1;;;;;43891:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43891:36:0;43868:12;:60::i;:::-;43861:67;;43699:237;;;;;:::o;29433:142::-;-1:-1:-1;;;;;;29534:33:0;29510:4;29534:33;;;;;;;;;;;;;;29433:142::o;42289:100::-;42376:5;42369:12;;;;;;;-1:-1:-1;;42369:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42343:13;;42369:12;;42376:5;;42369:12;;42376:5;42369:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42289:100;;:::o;43337:291::-;43502:7;;43451:13;;-1:-1:-1;;;;;43502:7:0;:21;:118;;43598:7;;43584:36;;;-1:-1:-1;;;43584:36:0;;;;;;;;;;-1:-1:-1;;;;;43598:7:0;;;;43584:26;;:36;;;;;43598:7;;43584:36;;;;;;;;43598:7;43584:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43584:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;43584:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;43584:36:0;;;;;;-1:-1:-1;43584:36:0;;;;;;;;;;-1:-1:-1;43584:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43502:118;;;43543:21;;;;:11;:21;;;;;;;;;43502:118;;;;;;-1:-1:-1;;43502:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43543:21;;43502:118;;43543:21;43502:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43482:138;43337:291;-1:-1:-1;;43337:291:0:o;40821:241::-;40990:17;;40958:7;;40990:17;;;;;:64;;41034:18;41043:8;41034;:18::i;:::-;41030:2;:22;41020:6;:33;40990:64;;;-1:-1:-1;41010:6:0;40821:241;-1:-1:-1;40821:241:0:o;46082:985::-;-1:-1:-1;;;;;46307:16:0;;46299:66;;;;-1:-1:-1;;;46299:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46406:12;:10;:12::i;:::-;-1:-1:-1;;;;;46398:20:0;:4;-1:-1:-1;;;;;46398:20:0;;:60;;;;46422:36;46439:4;46445:12;:10;:12::i;:::-;46422:16;:36::i;:::-;46376:151;;;;-1:-1:-1;;;46376:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46545:9;46540:222;46564:9;:16;46560:1;:20;46540:222;;;46602:21;46610:9;46620:1;46610:12;;;;;;;;;;;;;;46602:7;:21::i;:::-;-1:-1:-1;;;;;46602:34:0;;46655:4;46678:2;46699:36;46710:9;46720:1;46710:12;;;;;;;;;;;;;;46724:7;46732:1;46724:10;;;;;;;;;;;;;;46699;:36::i;:::-;46602:148;;;;;;;;;;;;;-1:-1:-1;;;;;46602:148:0;;;;;;-1:-1:-1;;;;;46602:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;46582:3:0;;46540:222;;;;46774:16;46793:12;:10;:12::i;:::-;46774:31;;46853:2;-1:-1:-1;;;;;46823:53:0;46847:4;-1:-1:-1;;;;;46823:53:0;46837:8;-1:-1:-1;;;;;46823:53:0;;46857:9;46868:7;46823:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46889:170;46939:8;46962:4;46981:2;46998:9;47022:7;47044:4;46889:35;:170::i;:::-;46082:985;;;;;;:::o;43002:187::-;43121:7;43153:17;43161:8;43153:7;:17::i;:::-;-1:-1:-1;;;;;43153:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43153:28:0;;43002:187;-1:-1:-1;;43002:187:0:o;53451:287::-;53650:43;53661:5;53676:1;53680:4;53686:6;53650:10;:43::i;:::-;-1:-1:-1;;53704:12:0;:26;;-1:-1:-1;;;;;;53704:26:0;-1:-1:-1;;;;;53704:26:0;;;;;;;;;;-1:-1:-1;53451:287:0:o;44007:370::-;44149:16;44178:25;44220:8;:15;44206:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44206:30:0;;44178:58;;44252:9;44247:123;44271:8;:15;44267:1;:19;44247:123;;;44322:36;44332:8;44341:1;44332:11;;;;;;;;;;;;;;44345:9;44355:1;44345:12;;;;;;;;;;;;;;44322:9;:36::i;:::-;44308:8;44317:1;44308:11;;;;;;;;;;;;;;;;;:50;44288:3;;44247:123;;;;44007:370;;;;;:::o;42543:189::-;42660:13;42698:17;42706:8;42698:7;:17::i;:::-;-1:-1:-1;;;;;42698:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54039:99;54118:12;;-1:-1:-1;;;;;54118:12:0;54039:99;:::o;41157:98::-;41240:7;;-1:-1:-1;;;;;41240:7:0;41157:98;:::o;40447:243::-;40618:17;;40586:7;;40618:17;;;;;:64;;40662:18;40671:8;40662;:18::i;:::-;40658:2;:22;40648:6;:33;;;;;;40618:64;;39380:742;39635:5;39628:12;;;;;;;-1:-1:-1;;39628:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39516:18;;;;39584:16;;39628:12;;39635:5;39628:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39660:7:0;39651:16;;;;;;;;-1:-1:-1;;39651:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39628:12;;-1:-1:-1;39660:7:0;;-1:-1:-1;39651:16:0;-1:-1:-1;39651:16:0;;;-1:-1:-1;39660:7:0;39651:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39720:7:0;;39651:16;;-1:-1:-1;39689:2:0;;-1:-1:-1;;;;;;;;;39720:7:0;:21;;;;:93;;-1:-1:-1;39759:13:0;;;;;:32;;-1:-1:-1;39776:15:0;;;;;;;39759:32;:53;;;-1:-1:-1;39795:17:0;;;;;;;39759:53;39702:413;;;39876:7;;39906:13;;-1:-1:-1;;;;;39876:7:0;;;;39906:13;;:43;;39945:4;39906:43;;;39922:5;-1:-1:-1;;;;;39922:10:0;;39933:8;39922:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39922:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39922:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39922:20:0;;;;;;-1:-1:-1;39922:20:0;;;;;;;;;;-1:-1:-1;39922:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39906:43;39973:15;;39899:50;;-1:-1:-1;39973:15:0;;;;;:49;;40016:6;39973:49;;;39991:5;-1:-1:-1;;;;;39991:12:0;;40004:8;39991:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39991:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39991:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39991:22:0;;;;;;-1:-1:-1;39991:22:0;;;;;;;;;;-1:-1:-1;39991:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39973:49;40048:17;;39964:58;;-1:-1:-1;40048:17:0;;;;;:55;;40095:8;40048:55;;;40068:5;-1:-1:-1;;;;;40068:14:0;;40083:8;40068:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40068:24:0;40048:55;40037:66;;39702:413;;39380:742;;;;;:::o;54272:347::-;53775:12;;54448:16;;;;-1:-1:-1;;;;;53775:12:0;:26;53772:240;;53876:12;;;;;;;;;-1:-1:-1;;;;;53876:12:0;-1:-1:-1;;;;;53863:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53863:34:0;53853:83;;;-1:-1:-1;;;53853:83:0;;;;-1:-1:-1;;;;;53853:81:0;;;;;;:83;;;;;53863:34;;53853:83;;;;;;;;:81;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53853:83:0;53826:149;;;-1:-1:-1;;;53826:149:0;;53964:10;53826:149;;;;;;-1:-1:-1;;;;;53826:137:0;;;;;;:149;;;;;53853:83;;53826:149;;;;;;;;:137;:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53826:149:0;53818:182;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;;;;54531:29:::1;54542:6;54550:9;54531:10;:29::i;:::-;54504:56;;;;;;;;54587:8;54576:35;54601:9;54576:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54272:347:::0;;;;;:::o;54627:194::-;53775:12;;-1:-1:-1;;;;;53775:12:0;:26;53772:240;;53876:12;;;;;;;;;-1:-1:-1;;;;;53876:12:0;-1:-1:-1;;;;;53863:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53863:34:0;53853:83;;;-1:-1:-1;;;53853:83:0;;;;-1:-1:-1;;;;;53853:81:0;;;;;;:83;;;;;53863:34;;53853:83;;;;;;;;:81;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53853:83:0;53826:149;;;-1:-1:-1;;;53826:149:0;;53964:10;53826:149;;;;;;-1:-1:-1;;;;;53826:137:0;;;;;;:149;;;;;53853:83;;53826:149;;;;;;;;:137;:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53826:149:0;53818:182;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;;;;54742:21:::1;::::0;;;:11:::1;:21;::::0;;;;;;;;54721:51;;;;;;;::::1;-1:-1:-1::0;;54721:51:0::1;;::::0;::::1;;;::::0;;;::::1;;::::0;;;;;;54732:8;;54721:51:::1;::::0;54765:6;;54721:51;;;;::::1;::::0;;;;;54742:21;;54721:51;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;54721:51:0;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54783:21;::::0;;;:11:::1;:21;::::0;;;;;;;:30;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;54627:194:::0;;:::o;36655:457::-;36791:17;36799:8;36791:7;:17::i;:::-;-1:-1:-1;;;;;36791:22:0;;36814:10;36826:28;36837:8;36847:6;36826:10;:28::i;:::-;36791:64;;;;;;;;;;;;;-1:-1:-1;;;;;36791:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36870:7:0;;-1:-1:-1;;;;;36870:7:0;:21;;-1:-1:-1;36866:239:0;;-1:-1:-1;36866:239:0;36917:7;;36908:185;;-1:-1:-1;;;36908:185:0;;36969:4;36908:185;;;;;;36993:10;36908:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36917:7:0;;;;36908:34;;36993:10;;37022:8;;37049:6;;37074:4;;36908:185;;;;;;;;;;;;36917:7;36908:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36655:457;;;:::o;42740:104::-;42829:7;42822:14;;;;;;;;-1:-1:-1;;42822:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42796:13;;42822:14;;42829:7;;42822:14;;42829:7;42822:14;;;;;;;;;;;;;;;;;;;;;;;;40215:99;40300:6;;-1:-1:-1;;;;;40300:6:0;40215:99;:::o;44448:402::-;44575:14;44592:12;:10;:12::i;:::-;44575:29;;44647:8;-1:-1:-1;;;;;44637:18:0;:6;-1:-1:-1;;;;;44637:18:0;;;44615:109;;;;-1:-1:-1;;;44615:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44737:26:0;;;;;;;:18;:26;;;;;;;;:36;;;;;;;;;;;;;:47;;-1:-1:-1;;44737:47:0;;;;;;;;;;44800:42;;;;;;;;;;;;;;;;;44448:402;;;:::o;41363:200::-;41481:16;41539:15;;;:5;:15;;;;;;-1:-1:-1;;;;;41539:15:0;;41363:200::o;38681:473::-;38931:7;;38890:6;;-1:-1:-1;;;;;38931:7:0;38917:10;:21;38909:54;;;;;-1:-1:-1;;;38909:54:0;;;;;;;;;;;;-1:-1:-1;;;38909:54:0;;;;;;;;;;;;;;;38979:9;38974:119;38998:9;:16;38994:1;:20;38974:119;;;39036:45;39042:5;39049:9;39059:1;39049:12;;;;;;;;;;;;;;39063:7;39071:1;39063:10;;;;;;;;;;;;;;39075:5;39036;:45::i;:::-;-1:-1:-1;;39016:3:0;;38974:119;;;-1:-1:-1;;;;39110:36:0;38681:473;-1:-1:-1;;;;;;38681:473:0:o;41729:217::-;41851:7;41883:55;41896:8;41906:17;41914:8;41906:7;:17::i;:::-;-1:-1:-1;;;;;41906:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54146:118;53775:12;;-1:-1:-1;;;;;53775:12:0;:26;53772:240;;53876:12;;;;;;;;;-1:-1:-1;;;;;53876:12:0;-1:-1:-1;;;;;53863:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53863:34:0;53853:83;;;-1:-1:-1;;;53853:83:0;;;;-1:-1:-1;;;;;53853:81:0;;;;;;:83;;;;;53863:34;;53853:83;;;;;;;;:81;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53853:83:0;53826:149;;;-1:-1:-1;;;53826:149:0;;53964:10;53826:149;;;;;;-1:-1:-1;;;;;53826:137:0;;;;;;:149;;;;;53853:83;;53826:149;;;;;;;;:137;:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53826:149:0;53818:182;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;;;;54227:12:::1;:29:::0;;-1:-1:-1;;;;;;54227:29:0::1;-1:-1:-1::0;;;;;54227:29:0;;;::::1;::::0;;;::::1;::::0;;54146:118::o;37223:623::-;37389:9;37384:199;37408:9;:16;37404:1;:20;37384:199;;;37446:21;37454:9;37464:1;37454:12;;;;;;;37446:21;-1:-1:-1;;;;;37446:26:0;;37491:10;37520:36;37531:9;37541:1;37531:12;;;;;;;;;;;;;;37545:7;37553:1;37545:10;;;;;;;37520:36;37446:125;;;;;;;;;;;;;-1:-1:-1;;;;;37446:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37426:3:0;;;;;-1:-1:-1;37384:199:0;;-1:-1:-1;37384:199:0;;-1:-1:-1;37597:7:0;;-1:-1:-1;;;;;37597:7:0;:21;37593:246;;37644:7;;37635:192;;-1:-1:-1;;;37635:192:0;;37701:4;37635:192;;;;;;37725:10;37635:192;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37644:7:0;;;;37635:39;;37725:10;;37754:9;;37782:7;;37808:4;;37635:192;;;;;;;;;;;;;;;;;;;;;;37644:7;37635:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47075:407;47219:15;;;;:5;:15;;;;;;-1:-1:-1;;;;;47219:15:0;47238:10;47219:29;47211:62;;;;;-1:-1:-1;;;47211:62:0;;;;;;;;;;;;-1:-1:-1;;;47211:62:0;;;;;;;;;;;;;;;47284:20;47307:30;47320:8;47330:6;47307:12;:30::i;:::-;47284:53;-1:-1:-1;47351:17:0;47348:55;;47385:7;;;47348:55;47447:2;-1:-1:-1;;;;;47418:56:0;47441:4;-1:-1:-1;;;;;47418:56:0;47433:6;-1:-1:-1;;;;;47418:56:0;;47451:8;47461:12;47418:56;;;;;;;;;;;;;;;;;;;;;;;;47075:407;;;;;;;:::o;44921:218::-;-1:-1:-1;;;;;45094:27:0;;;45065:4;45094:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;44921:218::o;38158:362::-;38383:7;;38342:6;;-1:-1:-1;;;;;38383:7:0;38369:10;:21;38361:54;;;;;-1:-1:-1;;;38361:54:0;;;;;;;;;;;;-1:-1:-1;;;38361:54:0;;;;;;;;;;;;;;;38426:37;38432:5;38439:8;38449:6;38457:5;38426;:37::i;:::-;-1:-1:-1;;;;38481:31:0;38158:362;-1:-1:-1;;;;;;;38158:362:0:o;45210:801::-;-1:-1:-1;;;;;45410:16:0;;45402:66;;;;-1:-1:-1;;;45402:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45509:12;:10;:12::i;:::-;-1:-1:-1;;;;;45501:20:0;:4;-1:-1:-1;;;;;45501:20:0;;:60;;;;45525:36;45542:4;45548:12;:10;:12::i;45525:36::-;45479:151;;;;-1:-1:-1;;;45479:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45643:16;45662:12;:10;:12::i;:::-;45643:31;;45687:17;45695:8;45687:7;:17::i;:::-;-1:-1:-1;;;;;45687:30:0;;45718:4;45724:2;45728:28;45739:8;45749:6;45728:10;:28::i;:::-;45687:70;;;;;;;;;;;;;-1:-1:-1;;;;;45687:70:0;;;;;;-1:-1:-1;;;;;45687:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;45775:52:0;;;;;;45687:70;45775:52;;;;;;;-1:-1:-1;;;;;45775:52:0;;;;;;;;;;;;;;;;;;;;;;45840:163;45885:8;45908:4;45927:2;45944:8;45967:6;45988:4;45840:30;:163::i;33429:2181::-;33616:6;;-1:-1:-1;;;;;33616:6:0;:20;33594:90;;;;;-1:-1:-1;;;33594:90:0;;;;;;;;;;;;-1:-1:-1;;;33594:90:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33719:19:0;;33697:109;;;;-1:-1:-1;;;33697:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33817:6;:14;;-1:-1:-1;;;;;33817:14:0;;;-1:-1:-1;;;;;;33817:14:0;;;;;;;;33844:16;;;;;;;;;;;;;;;33895:7;:21;;;:64;;-1:-1:-1;33920:22:0;;;;;;-1:-1:-1;;;;;;;;;;;33920:39:0;;33895:64;33873:162;;;;-1:-1:-1;;;33873:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34068:7;;-1:-1:-1;;;;;34068:7:0;:21;;;:66;;-1:-1:-1;34093:24:0;;;;;;-1:-1:-1;;;;;;;;;;;34093:41:0;;34068:66;34046:166;;;;-1:-1:-1;;;34046:166:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34225:51;-1:-1:-1;;;34225:18:0;:51::i;:::-;34287:56;-1:-1:-1;;;34287:18:0;:56::i;:::-;34354:26;34383:84;-1:-1:-1;;;34383:23:0;:84::i;:::-;34354:113;-1:-1:-1;34478:24:0;34505:75;-1:-1:-1;;;34505:23:0;:75::i;:::-;34613:7;;34478:102;;-1:-1:-1;;;;;;34613:7:0;:21;;:63;;;34655:21;34613:63;:103;;;;34697:19;34613:103;34591:207;;;;-1:-1:-1;;;34591:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34809:48;-1:-1:-1;;;34809:23:0;:48::i;:::-;-1:-1:-1;34868:53:0;-1:-1:-1;;;34868:23:0;:53::i;:::-;-1:-1:-1;34932:56:0;-1:-1:-1;;;34932:23:0;:56::i;:::-;-1:-1:-1;34999:55:0;-1:-1:-1;;;34999:23:0;:55::i;:::-;-1:-1:-1;35065:55:0;-1:-1:-1;;;35065:23:0;:55::i;:::-;-1:-1:-1;35131:42:0;-1:-1:-1;;;35131:23:0;:42::i;:::-;-1:-1:-1;35184:50:0;-1:-1:-1;;;35184:23:0;:50::i;:::-;-1:-1:-1;35261:35:0;-1:-1:-1;;;35261:23:0;:35::i;:::-;35245:13;:51;;-1:-1:-1;;35245:51:0;;;;;;;;;;35341:35;-1:-1:-1;;;35341:23:0;:35::i;:::-;35323:15;:53;;;;;;;-1:-1:-1;;35323:53:0;;;;;;;;;35425:47;-1:-1:-1;;;35425:23:0;:47::i;:::-;35405:17;:67;;;;;;;-1:-1:-1;;35405:67:0;;;;;;;;;-1:-1:-1;35503:7:0;-1:-1:-1;;;;;35503:7:0;:21;:49;;35535:17;;;;;;;35503:49;;;35527:5;35503:49;35483:17;:69;;;;;;;-1:-1:-1;;35483:69:0;;;;;;;;;35563:39;35589:4;35595:6;35563:25;:39::i;16370:106::-;16458:10;16370:106;:::o;48449:1009::-;48698:15;:2;-1:-1:-1;;;;;48698:13:0;;:15::i;:::-;48694:757;;;48768:2;-1:-1:-1;;;;;48751:43:0;;48817:8;48848:4;48875:3;48901:7;48931:4;48751:203;;;;;;;;;;;;;-1:-1:-1;;;;;48751:203:0;;;;;;-1:-1:-1;;;;;48751:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48751:203:0;;;48730:710;;;;:::i;:::-;;;;;;;;49313:6;49306:14;;-1:-1:-1;;;49306:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48730:710;49362:62;;-1:-1:-1;;;49362:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48730:710;-1:-1:-1;;;;;;49039:85:0;;-1:-1:-1;;;49039:85:0;49013:224;;49167:50;;-1:-1:-1;;;49167:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35982:491;36170:7;;36106:16;;;;-1:-1:-1;;;;;36170:7:0;:21;36162:63;;;;;-1:-1:-1;;;36162:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36258:27;;;;;;-1:-1:-1;;;;;;;;;;;36258:44:0;;36236:113;;;;;-1:-1:-1;;;36236:113:0;;;;;;;;;;;;-1:-1:-1;;;36236:113:0;;;;;;;;;;;;;;;36387:34;36393:10;36405:1;36408:6;36416:4;36387:5;:34::i;:::-;36432:21;;;;:11;:21;;;;;;;;:33;;36360:61;;-1:-1:-1;36360:61:0;;-1:-1:-1;36432:33:0;;;;;;;:::i;:::-;;35982:491;;;;;:::o;50426:1029::-;50584:7;50698:15;;;:5;:15;;;;;;50584:7;;50632:11;;-1:-1:-1;;;;;50698:15:0;50729:29;;;:49;;;50762:16;50729:49;50725:532;;;50830:24;50845:8;50830:14;:24::i;:::-;50821:6;:33;50795:129;;;;-1:-1:-1;;;50795:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50966:18;50973:10;:8;:10::i;:::-;50966:6;:18::i;:::-;50939:46;;51003:16;51000:92;;;51067:7;-1:-1:-1;;;;;51051:25:0;51040:36;;51000:92;51106:7;-1:-1:-1;;;;;51106:12:0;;51119:8;51106:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;51143:43:0;51151:15;;;:5;:15;;;;;;;;:34;;-1:-1:-1;;;;;;51151:34:0;-1:-1:-1;;;;;51151:34:0;;;;;;;;51143:43;;;:7;:43;;;;;;:50;;-1:-1:-1;;51143:50:0;-1:-1:-1;51143:50:0;;;51213:32;;;;;;;;;;;;;;;;-1:-1:-1;51213:32:0;;;;;;;;;50725:532;51267:7;-1:-1:-1;;;;;51267:12:0;;51280:4;51286:33;51302:8;51312:6;51286:15;:33::i;:::-;51267:53;;;;;;;;;;;;;-1:-1:-1;;;;;51267:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51336:65:0;;;;;;;;;;;;;;-1:-1:-1;;;;;51336:65:0;;;-1:-1:-1;51374:1:0;;-1:-1:-1;51359:4:0;;51336:65;;;;;;;;51420:8;;;;-1:-1:-1;50426:1029:0;-1:-1:-1;;;;;50426:1029:0:o;47490:951::-;47714:15;:2;-1:-1:-1;;;;;47714:13:0;;:15::i;:::-;47710:724;;;47784:2;-1:-1:-1;;;;;47767:38:0;;47828:8;47859:4;47886:2;47911:6;47940:4;47767:196;;;;;;;;;;;;;-1:-1:-1;;;;;47767:196:0;;;;;;-1:-1:-1;;;;;47767:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47767:196:0;;;47746:677;;;;:::i;:::-;-1:-1:-1;;;;;;48048:59:0;;-1:-1:-1;;;48048:59:0;48022:198;;48150:50;;-1:-1:-1;;;48150:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29982:201;-1:-1:-1;;;;;;30066:25:0;;;;;30058:66;;;;;-1:-1:-1;;;30058:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30135:33:0;:20;:33;;;;;;;;;;:40;;-1:-1:-1;;30135:40:0;30171:4;30135:40;;;29982:201::o;49466:444::-;49604:7;;49569:13;;-1:-1:-1;;;;;49604:7:0;49600:108;;49642:28;49661:8;49642:18;:28::i;:::-;-1:-1:-1;49692:4:0;49685:11;;49600:108;49729:7;;49722:43;;;-1:-1:-1;;;49722:43:0;;-1:-1:-1;;;;;;49722:43:0;;;;;;;;-1:-1:-1;;;;;49729:7:0;;;;49722:33;;:43;;;;;;;;;;;;;;;49729:7;49722:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49722:43:0;;;49718:185;;;;;49815:3;49804:14;;;49800:83;;;49839:28;49858:8;49839:18;:28::i;52142:727::-;52282:17;;;;:5;;:17;;;;;:::i;:::-;-1:-1:-1;52310:21:0;;;;:7;;:21;;;;;:::i;:::-;-1:-1:-1;52346:7:0;;-1:-1:-1;;;;;52346:7:0;:21;52342:317;;52417:7;;52444:11;;;-1:-1:-1;;;52444:11:0;;;;-1:-1:-1;;;;;52417:7:0;;;;;;52444:9;;:11;;;;;52384:17;;52444:11;;;;;;;52417:7;52444:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52444:11:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52444:11:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52444:11:0;;;;;;-1:-1:-1;52444:11:0;;;;;;;;;;-1:-1:-1;52444:11:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52440:95;;;;;52501:9;;;;:5;;:9;;;;;:::i;:::-;;52456:70;52440:95;52553:4;-1:-1:-1;;;;;52553:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52553:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52553:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52553:13:0;;;;;;-1:-1:-1;52553:13:0;;;;;;;;;;-1:-1:-1;52553:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52549:99;;;;;52612:11;;;;:7;;:11;;;;;:::i;:::-;;52567:72;52549:99;52342:317;;-1:-1:-1;;;;;;;;;;;52693:5:0;52677:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:40;;52669:70;;;;;-1:-1:-1;;;52669:70:0;;;;;;;;;;;;-1:-1:-1;;;52669:70:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;52788:7:0;52772:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:42;;52750:111;;;;;-1:-1:-1;;;52750:111:0;;;;;;;;;;;;-1:-1:-1;;;52750:111:0;;;;;;;;;;;;;;;52142:727;;:::o;22937:619::-;22997:4;23465:20;;-1:-1:-1;;;;;;;;;;;23505:23:0;;;;;;:42;;-1:-1:-1;23532:15:0;;;23505:42;23497:51;22937:619;-1:-1:-1;;;;22937:619:0:o;51463:343::-;51601:7;;51572;;-1:-1:-1;;;;;51601:7:0;51597:69;;-1:-1:-1;51647:6:0;51639:15;;51597:69;51680:17;;;;;;;51676:104;;;51740:7;;51726:41;;;-1:-1:-1;;;51726:41:0;;;;;;;;;;-1:-1:-1;;;;;51740:7:0;;;;51726:31;;:41;;;;;;;;;;;;;;;51740:7;51726:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51726:41:0;51722:2;:45;;-1:-1:-1;51714:54:0;;51676:104;-1:-1:-1;51797:1:0;51463:343;;;:::o;49918:500::-;49970:12;50192:21;50182:8;50178:36;-1:-1:-1;;;;;50064:169:0;50044:1;50019:229;50283:2;50280:1;50277;50270:16;50262:24;-1:-1:-1;50307:17:0;;50342:58;;;;50300:100;;50342:58;50372:9;51814:320;51969:7;;51940;;-1:-1:-1;;;;;51969:7:0;:21;;;;:42;;-1:-1:-1;51994:17:0;;;;;;;51969:42;51965:138;;;52063:7;;52049:41;;;-1:-1:-1;;;52049:41:0;;;;;;;;;;-1:-1:-1;;;;;52063:7:0;;;;52049:31;;:41;;;;;;;;;;;;;;;52063:7;52049:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52049:41:0;52045:2;:45;52035:56;;;-1:-1:-1;52028:63:0;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;110:106;195:3;191:15;;163:53::o;224:739::-;;297:4;279:16;276:26;273:2;;;305:5;;273:2;339:1;-1:-1;;318:23;414:10;357:34;-1:-1;382:8;357:34;:::i;:::-;406:19;396:2;;429:5;;396:2;460;454:9;496:16;-1:-1;;492:24;339:1;454:9;468:49;543:4;537:11;624:16;576:18;624:16;617:4;609:6;605:17;602:39;576:18;568:6;565:30;556:91;553:2;;;655:5;;;;;;553:2;693:6;687:4;683:17;672:28;;725:3;719:10;705:24;;576:18;740:6;737:30;734:2;;;770:5;;;;;;734:2;;847:16;841:4;837:27;807:4;814:6;802:3;794:27;;829:36;826:2;;;868:5;;;;;826:2;89:7;73:14;-1:-1;;69:28;892:50;;807:4;892:50;460:2;881:62;900:3;-1:-1;;267:696;:::o

Swarm Source

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