Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 76,811 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Buy | 20404836 | 488 days ago | IN | 0.00000102 ETH | 0.00017698 | ||||
| Buy | 15699625 | 1147 days ago | IN | 0.025625 ETH | 0.00234716 | ||||
| Buy | 15699625 | 1147 days ago | IN | 0.01023975 ETH | 0.00224695 | ||||
| Buy | 15291910 | 1209 days ago | IN | 0.00001025 ETH | 0.00037239 | ||||
| Transfer Ownersh... | 14937428 | 1267 days ago | IN | 0 ETH | 0.00260217 | ||||
| Buy | 12574014 | 1637 days ago | IN | 0.00001025 ETH | 0.00317441 | ||||
| Buy | 12297881 | 1680 days ago | IN | 0.001025 ETH | 0.01980387 | ||||
| Transfer | 11727678 | 1767 days ago | IN | 0 ETH | 0.00266116 | ||||
| Buy | 11705639 | 1771 days ago | IN | 0.3075 ETH | 0.01826219 | ||||
| Buy | 11705539 | 1771 days ago | IN | 0.05125 ETH | 0.02043783 | ||||
| Buy | 11705093 | 1771 days ago | IN | 1.051281 ETH | 0.02499611 | ||||
| Buy | 11703993 | 1771 days ago | IN | 0.1025 ETH | 0.01461885 | ||||
| Buy | 11703851 | 1771 days ago | IN | 0.03075 ETH | 0.01632354 | ||||
| Buy | 11703842 | 1771 days ago | IN | 0.05125 ETH | 0.01988571 | ||||
| Cancel | 11703717 | 1771 days ago | IN | 0 ETH | 0.0035541 | ||||
| Buy | 11703396 | 1771 days ago | IN | 0.041 ETH | 0.01773331 | ||||
| Buy | 11703386 | 1771 days ago | IN | 0.01942375 ETH | 0.01974908 | ||||
| Cancel | 11703338 | 1771 days ago | IN | 0 ETH | 0.0034464 | ||||
| Buy | 11703046 | 1771 days ago | IN | 0.05125 ETH | 0.02574875 | ||||
| Buy | 11701139 | 1771 days ago | IN | 0.0001025 ETH | 0.01316754 | ||||
| Buy | 11701131 | 1771 days ago | IN | 0.1025 ETH | 0.01812678 | ||||
| Buy | 11701008 | 1771 days ago | IN | 0.015375 ETH | 0.0137591 | ||||
| Cancel | 11700807 | 1771 days ago | IN | 0 ETH | 0.00363359 | ||||
| Buy | 11700751 | 1771 days ago | IN | 0.1435 ETH | 0.0246969 | ||||
| Cancel | 11700501 | 1771 days ago | IN | 0 ETH | 0.004308 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 12574014 | 1637 days ago | 0.00000775 ETH | ||||
| - | 12574014 | 1637 days ago | 0.000002 ETH | ||||
| - | 12574014 | 1637 days ago | 0.0000005 ETH | ||||
| - | 11705639 | 1771 days ago | 0.2625 ETH | ||||
| - | 11705639 | 1771 days ago | 0.03 ETH | ||||
| - | 11705639 | 1771 days ago | 0.015 ETH | ||||
| - | 11705539 | 1771 days ago | 0.04125 ETH | ||||
| - | 11705539 | 1771 days ago | 0.0075 ETH | ||||
| - | 11705539 | 1771 days ago | 0.0025 ETH | ||||
| - | 11705093 | 1771 days ago | 0.897435 ETH | ||||
| - | 11705093 | 1771 days ago | 0.102564 ETH | ||||
| - | 11705093 | 1771 days ago | 0.051282 ETH | ||||
| - | 11703993 | 1771 days ago | 0.0875 ETH | ||||
| - | 11703993 | 1771 days ago | 0.01 ETH | ||||
| - | 11703993 | 1771 days ago | 0.005 ETH | ||||
| - | 11703851 | 1771 days ago | 0.02625 ETH | ||||
| - | 11703851 | 1771 days ago | 0.003 ETH | ||||
| - | 11703851 | 1771 days ago | 0.0015 ETH | ||||
| - | 11703842 | 1771 days ago | 0.04375 ETH | ||||
| - | 11703842 | 1771 days ago | 0.005 ETH | ||||
| - | 11703842 | 1771 days ago | 0.0025 ETH | ||||
| - | 11703396 | 1771 days ago | 0.035 ETH | ||||
| - | 11703396 | 1771 days ago | 0.004 ETH | ||||
| - | 11703396 | 1771 days ago | 0.002 ETH | ||||
| - | 11703386 | 1771 days ago | 0.01373875 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ERC1155Sale
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-09-03
*/
pragma solidity ^0.5.0;
pragma experimental ABIEncoderV2;
/**
* @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);
}
/**
@title ERC-1155 Multi Token Standard
@dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1155.md
Note: The ERC-165 identifier for this interface is 0xd9b67a26.
*/
contract IERC1155 is IERC165 {
/**
@dev Either `TransferSingle` or `TransferBatch` MUST emit when tokens are transferred, including zero value transfers as well as minting or burning (see "Safe Transfer Rules" section of the standard).
The `_operator` argument MUST be msg.sender.
The `_from` argument MUST be the address of the holder whose balance is decreased.
The `_to` argument MUST be the address of the recipient whose balance is increased.
The `_id` argument MUST be the token type being transferred.
The `_value` argument MUST be the number of tokens the holder balance is decreased by and match what the recipient balance is increased by.
When minting/creating tokens, the `_from` argument MUST be set to `0x0` (i.e. zero address).
When burning/destroying tokens, the `_to` argument MUST be set to `0x0` (i.e. zero address).
*/
event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _value);
/**
@dev Either `TransferSingle` or `TransferBatch` MUST emit when tokens are transferred, including zero value transfers as well as minting or burning (see "Safe Transfer Rules" section of the standard).
The `_operator` argument MUST be msg.sender.
The `_from` argument MUST be the address of the holder whose balance is decreased.
The `_to` argument MUST be the address of the recipient whose balance is increased.
The `_ids` argument MUST be the list of tokens being transferred.
The `_values` argument MUST be the list of number of tokens (matching the list and order of tokens specified in _ids) the holder balance is decreased by and match what the recipient balance is increased by.
When minting/creating tokens, the `_from` argument MUST be set to `0x0` (i.e. zero address).
When burning/destroying tokens, the `_to` argument MUST be set to `0x0` (i.e. zero address).
*/
event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _values);
/**
@dev MUST emit when approval for a second party/operator address to manage all tokens for an owner address is enabled or disabled (absense of an event assumes disabled).
*/
event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
/**
@dev MUST emit when the URI is updated for a token ID.
URIs are defined in RFC 3986.
The URI MUST point a JSON file that conforms to the "ERC-1155 Metadata URI JSON Schema".
*/
event URI(string _value, uint256 indexed _id);
/**
@notice Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call).
@dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
MUST revert if `_to` is the zero address.
MUST revert if balance of holder for token `_id` is lower than the `_value` sent.
MUST revert on any other error.
MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard).
After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
@param _from Source address
@param _to Target address
@param _id ID of the token type
@param _value Transfer amount
@param _data Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `_to`
*/
function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data) external;
/**
@notice Transfers `_values` amount(s) of `_ids` from the `_from` address to the `_to` address specified (with safety call).
@dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
MUST revert if `_to` is the zero address.
MUST revert if length of `_ids` is not the same as length of `_values`.
MUST revert if any of the balance(s) of the holder(s) for token(s) in `_ids` is lower than the respective amount(s) in `_values` sent to the recipient.
MUST revert on any other error.
MUST emit `TransferSingle` or `TransferBatch` event(s) such that all the balance changes are reflected (see "Safe Transfer Rules" section of the standard).
Balance changes and events MUST follow the ordering of the arrays (_ids[0]/_values[0] before _ids[1]/_values[1], etc).
After the above conditions for the transfer(s) in the batch are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call the relevant `ERC1155TokenReceiver` hook(s) on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
@param _from Source address
@param _to Target address
@param _ids IDs of each token type (order and length must match _values array)
@param _values Transfer amounts per token type (order and length must match _ids array)
@param _data Additional data with no specified format, MUST be sent unaltered in call to the `ERC1155TokenReceiver` hook(s) on `_to`
*/
function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data) external;
/**
@notice Get the balance of an account's Tokens.
@param _owner The address of the token holder
@param _id ID of the Token
@return The _owner's balance of the Token type requested
*/
function balanceOf(address _owner, uint256 _id) external view returns (uint256);
/**
@notice Get the balance of multiple account/token pairs
@param _owners The addresses of the token holders
@param _ids ID of the Tokens
@return The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
*/
function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory);
/**
@notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens.
@dev MUST emit the ApprovalForAll event on success.
@param _operator Address to add to the set of authorized operators
@param _approved True if the operator is approved, false to revoke approval
*/
function setApprovalForAll(address _operator, bool _approved) external;
/**
@notice Queries the approval status of an operator for a given owner.
@param _owner The owner of the Tokens
@param _operator Address of authorized operator
@return True if the operator is approved, false if not
*/
function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}
library UintLibrary {
function toString(uint256 _i) internal pure returns (string memory) {
if (_i == 0) {
return "0";
}
uint j = _i;
uint len;
while (j != 0) {
len++;
j /= 10;
}
bytes memory bstr = new bytes(len);
uint k = len - 1;
while (_i != 0) {
bstr[k--] = byte(uint8(48 + _i % 10));
_i /= 10;
}
return string(bstr);
}
}
library StringLibrary {
using UintLibrary for uint256;
function append(string memory _a, string memory _b) internal pure returns (string memory) {
bytes memory _ba = bytes(_a);
bytes memory _bb = bytes(_b);
bytes memory bab = new bytes(_ba.length + _bb.length);
uint k = 0;
for (uint i = 0; i < _ba.length; i++) bab[k++] = _ba[i];
for (uint i = 0; i < _bb.length; i++) bab[k++] = _bb[i];
return string(bab);
}
function append(string memory _a, string memory _b, string memory _c) internal pure returns (string memory) {
bytes memory _ba = bytes(_a);
bytes memory _bb = bytes(_b);
bytes memory _bc = bytes(_c);
bytes memory bbb = new bytes(_ba.length + _bb.length + _bc.length);
uint k = 0;
for (uint i = 0; i < _ba.length; i++) bbb[k++] = _ba[i];
for (uint i = 0; i < _bb.length; i++) bbb[k++] = _bb[i];
for (uint i = 0; i < _bc.length; i++) bbb[k++] = _bc[i];
return string(bbb);
}
function recover(string memory message, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
bytes memory msgBytes = bytes(message);
bytes memory fullMessage = concat(
bytes("\x19Ethereum Signed Message:\n"),
bytes(msgBytes.length.toString()),
msgBytes,
new bytes(0), new bytes(0), new bytes(0), new bytes(0)
);
return ecrecover(keccak256(fullMessage), v, r, s);
}
function concat(bytes memory _ba, bytes memory _bb, bytes memory _bc, bytes memory _bd, bytes memory _be, bytes memory _bf, bytes memory _bg) internal pure returns (bytes memory) {
bytes memory resultBytes = new bytes(_ba.length + _bb.length + _bc.length + _bd.length + _be.length + _bf.length + _bg.length);
uint k = 0;
for (uint i = 0; i < _ba.length; i++) resultBytes[k++] = _ba[i];
for (uint i = 0; i < _bb.length; i++) resultBytes[k++] = _bb[i];
for (uint i = 0; i < _bc.length; i++) resultBytes[k++] = _bc[i];
for (uint i = 0; i < _bd.length; i++) resultBytes[k++] = _bd[i];
for (uint i = 0; i < _be.length; i++) resultBytes[k++] = _be[i];
for (uint i = 0; i < _bf.length; i++) resultBytes[k++] = _bf[i];
for (uint i = 0; i < _bg.length; i++) resultBytes[k++] = _bg[i];
return resultBytes;
}
}
library AddressLibrary {
function toString(address _addr) internal pure returns (string memory) {
bytes32 value = bytes32(uint256(_addr));
bytes memory alphabet = "0123456789abcdef";
bytes memory str = new bytes(42);
str[0] = '0';
str[1] = 'x';
for (uint256 i = 0; i < 20; i++) {
str[2+i*2] = alphabet[uint8(value[i + 12] >> 4)];
str[3+i*2] = alphabet[uint8(value[i + 12] & 0x0f)];
}
return string(str);
}
}
/*
* @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.
*/
contract Context {
// Empty internal constructor, to prevent people from mistakenly deploying
// an instance of this contract, which should be used via inheritance.
constructor () internal { }
// solhint-disable-previous-line no-empty-blocks
function _msgSender() internal view returns (address payable) {
return msg.sender;
}
function _msgData() internal view returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(isOwner(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Returns true if the caller is the current owner.
*/
function isOwner() public view returns (bool) {
return _msgSender() == _owner;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public onlyOwner {
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
*/
function _transferOwnership(address newOwner) internal {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
/**
* @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.
*
* _Available since v2.4.0._
*/
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.
*
* _Available since v2.4.0._
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
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.
*
* _Available since v2.4.0._
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts may inherit from this and call {_registerInterface} to declare
* their support of an interface.
*/
contract ERC165 is IERC165 {
/*
* bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7
*/
bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
/**
* @dev Mapping of interface ids to whether or not it's supported.
*/
mapping(bytes4 => bool) private _supportedInterfaces;
constructor () internal {
// Derived contracts need only register support for their own interfaces,
// we register support for ERC165 itself here
_registerInterface(_INTERFACE_ID_ERC165);
}
/**
* @dev See {IERC165-supportsInterface}.
*
* Time complexity O(1), guaranteed to always use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool) {
return _supportedInterfaces[interfaceId];
}
/**
* @dev Registers the contract as an implementer of the interface defined by
* `interfaceId`. Support of the actual ERC165 interface is automatic and
* registering its interface id is not required.
*
* See {IERC165-supportsInterface}.
*
* Requirements:
*
* - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).
*/
function _registerInterface(bytes4 interfaceId) internal {
require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
_supportedInterfaces[interfaceId] = true;
}
}
contract HasSecondarySaleFees is ERC165 {
event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);
/*
* bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f
* bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb
*
* => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584
*/
bytes4 private constant _INTERFACE_ID_FEES = 0xb7799584;
constructor() public {
_registerInterface(_INTERFACE_ID_FEES);
}
function getFeeRecipients(uint256 id) public view returns (address payable[] memory);
function getFeeBps(uint256 id) public view returns (uint[] memory);
}
contract AbstractSale is Ownable {
using UintLibrary for uint256;
using AddressLibrary for address;
using StringLibrary for string;
using SafeMath for uint256;
bytes4 private constant _INTERFACE_ID_FEES = 0xb7799584;
uint public buyerFee = 0;
address payable public beneficiary;
/* An ECDSA signature. */
struct Sig {
/* v parameter */
uint8 v;
/* r parameter */
bytes32 r;
/* s parameter */
bytes32 s;
}
constructor(address payable _beneficiary) public {
beneficiary = _beneficiary;
}
function setBuyerFee(uint256 _buyerFee) public onlyOwner {
buyerFee = _buyerFee;
}
function setBeneficiary(address payable _beneficiary) public onlyOwner {
beneficiary = _beneficiary;
}
function prepareMessage(address token, uint256 tokenId, uint256 price, uint256 fee, uint256 nonce) internal pure returns (string memory) {
string memory result = string(strConcat(
bytes(token.toString()),
bytes(". tokenId: "),
bytes(tokenId.toString()),
bytes(". price: "),
bytes(price.toString()),
bytes(". nonce: "),
bytes(nonce.toString())
));
if (fee != 0) {
return result.append(". fee: ", fee.toString());
} else {
return result;
}
}
function strConcat(bytes memory _ba, bytes memory _bb, bytes memory _bc, bytes memory _bd, bytes memory _be, bytes memory _bf, bytes memory _bg) internal pure returns (bytes memory) {
bytes memory resultBytes = new bytes(_ba.length + _bb.length + _bc.length + _bd.length + _be.length + _bf.length + _bg.length);
uint k = 0;
for (uint i = 0; i < _ba.length; i++) resultBytes[k++] = _ba[i];
for (uint i = 0; i < _bb.length; i++) resultBytes[k++] = _bb[i];
for (uint i = 0; i < _bc.length; i++) resultBytes[k++] = _bc[i];
for (uint i = 0; i < _bd.length; i++) resultBytes[k++] = _bd[i];
for (uint i = 0; i < _be.length; i++) resultBytes[k++] = _be[i];
for (uint i = 0; i < _bf.length; i++) resultBytes[k++] = _bf[i];
for (uint i = 0; i < _bg.length; i++) resultBytes[k++] = _bg[i];
return resultBytes;
}
function transferEther(IERC165 token, uint256 tokenId, address payable owner, uint256 total, uint256 sellerFee) internal {
uint value = transferFeeToBeneficiary(total, sellerFee);
if (token.supportsInterface(_INTERFACE_ID_FEES)) {
HasSecondarySaleFees withFees = HasSecondarySaleFees(address(token));
address payable[] memory recipients = withFees.getFeeRecipients(tokenId);
uint[] memory fees = withFees.getFeeBps(tokenId);
require(fees.length == recipients.length);
for (uint256 i = 0; i < fees.length; i++) {
(uint newValue, uint current) = subFee(value, total.mul(fees[i]).div(10000));
value = newValue;
recipients[i].transfer(current);
}
}
owner.transfer(value);
}
function transferFeeToBeneficiary(uint total, uint sellerFee) internal returns (uint) {
(uint value, uint sellerFeeValue) = subFee(total, total.mul(sellerFee).div(10000));
uint buyerFeeValue = total.mul(buyerFee).div(10000);
uint beneficiaryFee = buyerFeeValue.add(sellerFeeValue);
if (beneficiaryFee > 0) {
beneficiary.transfer(beneficiaryFee);
}
return value;
}
function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {
if (value > fee) {
newValue = value - fee;
realFee = fee;
} else {
newValue = 0;
realFee = value;
}
}
}
/**
* @dev Required interface of an ERC721 compliant contract.
*/
contract IERC721 is IERC165 {
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of NFTs in `owner`'s account.
*/
function balanceOf(address owner) public view returns (uint256 balance);
/**
* @dev Returns the owner of the NFT specified by `tokenId`.
*/
function ownerOf(uint256 tokenId) public view returns (address owner);
/**
* @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to
* another (`to`).
*
*
*
* Requirements:
* - `from`, `to` cannot be zero.
* - `tokenId` must be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this
* NFT by either {approve} or {setApprovalForAll}.
*/
function safeTransferFrom(address from, address to, uint256 tokenId) public;
/**
* @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to
* another (`to`).
*
* Requirements:
* - If the caller is not `from`, it must be approved to move this NFT by
* either {approve} or {setApprovalForAll}.
*/
function transferFrom(address from, address to, uint256 tokenId) public;
function approve(address to, uint256 tokenId) public;
function getApproved(uint256 tokenId) public view returns (address operator);
function setApprovalForAll(address operator, bool _approved) public;
function isApprovedForAll(address owner, address operator) public view returns (bool);
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public;
}
/**
* @title Roles
* @dev Library for managing addresses assigned to a Role.
*/
library Roles {
struct Role {
mapping (address => bool) bearer;
}
/**
* @dev Give an account access to this role.
*/
function add(Role storage role, address account) internal {
require(!has(role, account), "Roles: account already has role");
role.bearer[account] = true;
}
/**
* @dev Remove an account's access to this role.
*/
function remove(Role storage role, address account) internal {
require(has(role, account), "Roles: account does not have role");
role.bearer[account] = false;
}
/**
* @dev Check if an account has this role.
* @return bool
*/
function has(Role storage role, address account) internal view returns (bool) {
require(account != address(0), "Roles: account is the zero address");
return role.bearer[account];
}
}
contract OperatorRole is Context {
using Roles for Roles.Role;
event OperatorAdded(address indexed account);
event OperatorRemoved(address indexed account);
Roles.Role private _operators;
constructor () internal {
}
modifier onlyOperator() {
require(isOperator(_msgSender()), "OperatorRole: caller does not have the Operator role");
_;
}
function isOperator(address account) public view returns (bool) {
return _operators.has(account);
}
function _addOperator(address account) internal {
_operators.add(account);
emit OperatorAdded(account);
}
function _removeOperator(address account) internal {
_operators.remove(account);
emit OperatorRemoved(account);
}
}
contract OwnableOperatorRole is Ownable, OperatorRole {
function addOperator(address account) public onlyOwner {
_addOperator(account);
}
function removeOperator(address account) public onlyOwner {
_removeOperator(account);
}
}
contract TransferProxy is OwnableOperatorRole {
function erc721safeTransferFrom(IERC721 token, address from, address to, uint256 tokenId) external onlyOperator {
token.safeTransferFrom(from, to, tokenId);
}
function erc1155safeTransferFrom(IERC1155 token, address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data) external onlyOperator {
token.safeTransferFrom(_from, _to, _id, _value, _data);
}
}
contract ERC1155SaleNonceHolder is OwnableOperatorRole {
// keccak256(token, owner, tokenId) => nonce
mapping(bytes32 => uint256) public nonces;
// keccak256(token, owner, tokenId, nonce) => completed amount
mapping(bytes32 => uint256) public completed;
function getNonce(address token, uint256 tokenId, address owner) view public returns (uint256) {
return nonces[getNonceKey(token, tokenId, owner)];
}
function setNonce(address token, uint256 tokenId, address owner, uint256 nonce) public onlyOperator {
nonces[getNonceKey(token, tokenId, owner)] = nonce;
}
function getNonceKey(address token, uint256 tokenId, address owner) pure public returns (bytes32) {
return keccak256(abi.encodePacked(token, tokenId, owner));
}
function getCompleted(address token, uint256 tokenId, address owner, uint256 nonce) view public returns (uint256) {
return completed[getCompletedKey(token, tokenId, owner, nonce)];
}
function setCompleted(address token, uint256 tokenId, address owner, uint256 nonce, uint256 _completed) public onlyOperator {
completed[getCompletedKey(token, tokenId, owner, nonce)] = _completed;
}
function getCompletedKey(address token, uint256 tokenId, address owner, uint256 nonce) pure public returns (bytes32) {
return keccak256(abi.encodePacked(token, tokenId, owner, nonce));
}
}
contract ERC1155Sale is Ownable, AbstractSale {
using StringLibrary for string;
event CloseOrder(address indexed token, uint256 indexed tokenId, address owner, uint256 nonce);
event Buy(address indexed token, uint256 indexed tokenId, address owner, uint256 price, address buyer, uint256 value);
bytes constant EMPTY = "";
TransferProxy public transferProxy;
ERC1155SaleNonceHolder public nonceHolder;
constructor(TransferProxy _transferProxy, ERC1155SaleNonceHolder _nonceHolder, address payable beneficiary) AbstractSale(beneficiary) public {
transferProxy = _transferProxy;
nonceHolder = _nonceHolder;
}
function buy(IERC1155 token, uint256 tokenId, address payable owner, uint256 selling, uint256 buying, uint256 price, uint256 sellerFee, Sig memory signature) public payable {
uint256 nonce = verifySignature(address(token), tokenId, owner, selling, price, sellerFee, signature);
uint256 total = price.mul(buying);
uint256 buyerFeeValue = total.mul(buyerFee).div(10000);
require(total + buyerFeeValue == msg.value, "msg.value is incorrect");
bool closed = verifyOpenAndModifyState(address(token), tokenId, owner, nonce, selling, buying);
transferProxy.erc1155safeTransferFrom(token, owner, msg.sender, tokenId, buying, EMPTY);
transferEther(token, tokenId, owner, total, sellerFee);
emit Buy(address(token), tokenId, owner, price, msg.sender, buying);
if (closed) {
emit CloseOrder(address(token), tokenId, owner, nonce + 1);
}
}
function cancel(address token, uint256 tokenId) public payable {
uint nonce = nonceHolder.getNonce(token, tokenId, msg.sender);
nonceHolder.setNonce(token, tokenId, msg.sender, nonce + 1);
emit CloseOrder(token, tokenId, msg.sender, nonce + 1);
}
function verifySignature(address token, uint256 tokenId, address payable owner, uint256 selling, uint256 price, uint256 sellerFee, Sig memory signature) view internal returns (uint256 nonce) {
nonce = nonceHolder.getNonce(token, tokenId, owner);
require(prepareMessage(token, tokenId, price, selling, sellerFee, nonce).recover(signature.v, signature.r, signature.s) == owner, "incorrect signature");
}
function verifyOpenAndModifyState(address token, uint256 tokenId, address payable owner, uint256 nonce, uint256 selling, uint256 buying) internal returns (bool) {
uint comp = nonceHolder.getCompleted(token, tokenId, owner, nonce).add(buying);
require(comp <= selling);
nonceHolder.setCompleted(token, tokenId, owner, nonce, comp);
if (comp == selling) {
nonceHolder.setNonce(token, tokenId, owner, nonce + 1);
return true;
}
return false;
}
function prepareMessage(address token, uint256 tokenId, uint256 price, uint256 value, uint256 fee, uint256 nonce) internal pure returns (string memory) {
return prepareMessage(token, tokenId, price, fee, nonce).append(". value: ", value.toString());
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract TransferProxy","name":"_transferProxy","type":"address"},{"internalType":"contract ERC1155SaleNonceHolder","name":"_nonceHolder","type":"address"},{"internalType":"address payable","name":"beneficiary","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"CloseOrder","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"constant":true,"inputs":[],"name":"beneficiary","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC1155","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address payable","name":"owner","type":"address"},{"internalType":"uint256","name":"selling","type":"uint256"},{"internalType":"uint256","name":"buying","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"sellerFee","type":"uint256"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct AbstractSale.Sig","name":"signature","type":"tuple"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"buyerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"cancel","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nonceHolder","outputs":[{"internalType":"contract ERC1155SaleNonceHolder","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"_beneficiary","type":"address"}],"name":"setBeneficiary","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_buyerFee","type":"uint256"}],"name":"setBuyerFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"transferProxy","outputs":[{"internalType":"contract TransferProxy","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]Contract Creation Code
608060405260006001553480156200001657600080fd5b506040516200230238038062002302833981016040819052620000399162000103565b8060006200004f6001600160e01b03620000df16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600280546001600160a01b03199081166001600160a01b0393841617909155600380548216958316959095179094556004805490941692169190911790915550620001a2565b3390565b8051620000f0816200017d565b92915050565b8051620000f08162000197565b6000806000606084860312156200011957600080fd5b6000620001278686620000f6565b93505060206200013a86828701620000f6565b92505060406200014d86828701620000e3565b9150509250925092565b6000620000f08262000171565b6000620000f08262000157565b6001600160a01b031690565b620001888162000157565b81146200019457600080fd5b50565b620001888162000164565b61215080620001b26000396000f3fe6080604052600436106100a75760003560e01c80638da5cb5b116100645780638da5cb5b146101675780638f32d59b1461017c57806398590ef91461019e578063f2fde38b146101b1578063fa7da19d146101d1578063fd453a85146101f1576100a7565b80631c31f710146100ac57806338af3eed146100ce57806341a259a6146100f95780635de6c42f1461011b5780636e667db31461013d578063715018a614610152575b600080fd5b3480156100b857600080fd5b506100cc6100c7366004611a50565b610204565b005b3480156100da57600080fd5b506100e3610253565b6040516100f09190611df7565b60405180910390f35b34801561010557600080fd5b5061010e610262565b6040516100f09190611f11565b34801561012757600080fd5b50610130610271565b6040516100f09190611ff0565b34801561014957600080fd5b5061010e610277565b34801561015e57600080fd5b506100cc610286565b34801561017357600080fd5b506100e36102f4565b34801561018857600080fd5b50610191610303565b6040516100f09190611ecd565b6100cc6101ac366004611a6e565b610327565b3480156101bd57600080fd5b506100cc6101cc366004611a50565b610464565b3480156101dd57600080fd5b506100cc6101ec366004611be0565b610494565b6100cc6101ff366004611b30565b6104bd565b61020c610303565b6102315760405162461bcd60e51b815260040161022890611fd0565b60405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031681565b6004546001600160a01b031681565b60015481565b6003546001600160a01b031681565b61028e610303565b6102aa5760405162461bcd60e51b815260040161022890611fd0565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b600080546001600160a01b031661031861067f565b6001600160a01b031614905090565b6004805460405163250adb3160e11b81526000926001600160a01b0390921691634a15b6629161035d9187918791339101611e55565b60206040518083038186803b15801561037557600080fd5b505afa158015610389573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506103ad9190810190611bfe565b600480546040516308345fbf60e01b81529293506001600160a01b0316916308345fbf916103e691879187913391600189019101611e7d565b600060405180830381600087803b15801561040057600080fd5b505af1158015610414573d6000803e3d6000fd5b5050505081836001600160a01b03167f1910cc041d39d8d4ddb31ea5990a0b170e2b585057bfac4853f3c2929b276ee23384600101604051610457929190611e05565b60405180910390a3505050565b61046c610303565b6104885760405162461bcd60e51b815260040161022890611fd0565b61049181610683565b50565b61049c610303565b6104b85760405162461bcd60e51b815260040161022890611fd0565b600155565b60006104ce89898989888888610704565b905060006104e2858763ffffffff6107f516565b9050600061050d612710610501600154856107f590919063ffffffff16565b9063ffffffff61083816565b905034818301146105305760405162461bcd60e51b815260040161022890611fe0565b60006105408c8c8c878d8d61087a565b9050600360009054906101000a90046001600160a01b03166001600160a01b0316639c1c2ee98d8c338f8d604051806020016040528060008152506040518763ffffffff1660e01b815260040161059c96959493929190611f1f565b600060405180830381600087803b1580156105b657600080fd5b505af11580156105ca573d6000803e3d6000fd5b505050506105db8c8c8c868a610a1a565b8a8c6001600160a01b03167f710791c544fdcb0c8c5b17f5bfa5b6721dfff68224047778e2d64e426ded61c68c8a338d60405161061b9493929190611e20565b60405180910390a38015610671578a8c6001600160a01b03167f1910cc041d39d8d4ddb31ea5990a0b170e2b585057bfac4853f3c2929b276ee28c87600101604051610668929190611e05565b60405180910390a35b505050505050505050505050565b3390565b6001600160a01b0381166106a95760405162461bcd60e51b815260040161022890611f90565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6004805460405163250adb3160e11b81526000926001600160a01b0390921691634a15b6629161073a918c918c918c9101611e55565b60206040518083038186803b15801561075257600080fd5b505afa158015610766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061078a9190810190611bfe565b9050856001600160a01b03166107c48360000151846020015185604001516107b68d8d8b8d8c8b610cb0565b92919063ffffffff610cfa16565b6001600160a01b0316146107ea5760405162461bcd60e51b815260040161022890611fb0565b979650505050505050565b60008261080457506000610832565b8282028284828161081157fe5b041461082f5760405162461bcd60e51b815260040161022890611fc0565b90505b92915050565b600061082f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610dd8565b60048054604051637ad2ec8560e01b815260009283926109169286926001600160a01b0390921691637ad2ec85916108ba918e918e918e918e9101611e7d565b60206040518083038186803b1580156108d257600080fd5b505afa1580156108e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061090a9190810190611bfe565b9063ffffffff610e1116565b90508381111561092557600080fd5b60048054604051634bd49ccb60e01b81526001600160a01b0390911691634bd49ccb9161095c918c918c918c918c91899101611e8b565b600060405180830381600087803b15801561097657600080fd5b505af115801561098a573d6000803e3d6000fd5b5050505083811415610a0a57600480546040516308345fbf60e01b81526001600160a01b03909116916308345fbf916109ce918c918c918c9160018d019101611e7d565b600060405180830381600087803b1580156109e857600080fd5b505af11580156109fc573d6000803e3d6000fd5b505050506001915050610a10565b60009150505b9695505050505050565b6000610a268383610e36565b6040516301ffc9a760e01b81529091506001600160a01b038716906301ffc9a790610a5c90632dde656160e21b90600401611f03565b60206040518083038186803b158015610a7457600080fd5b505afa158015610a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610aac9190810190611b12565b15610c715760405163b9c4d9fb60e01b815286906060906001600160a01b0383169063b9c4d9fb90610ae2908a90600401611ff0565b60006040518083038186803b158015610afa57600080fd5b505afa158015610b0e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b369190810190611aa8565b90506060826001600160a01b0316630ebd4c7f896040518263ffffffff1660e01b8152600401610b669190611ff0565b60006040518083038186803b158015610b7e57600080fd5b505afa158015610b92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bba9190810190611add565b90508151815114610bca57600080fd5b60005b8151811015610c6c57600080610c0e87610c09612710610501888881518110610bf257fe5b60200260200101518e6107f590919063ffffffff16565b610ed8565b91509150819650848381518110610c2157fe5b60200260200101516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015610c61573d6000803e3d6000fd5b505050600101610bcd565b505050505b6040516001600160a01b0385169082156108fc029083906000818181858888f19350505050158015610ca7573d6000803e3d6000fd5b50505050505050565b60606107ea60405180604001604052806009815260200168017103b30b63ab29d160bd1b815250610ce086610efc565b610ced8a8a8a8989610fbf565b919063ffffffff6110b516565b600060608590506060610d736040518060400160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250610d468451610efc565b60408051600080825260208201818152828401828152606084019283526080840190945288939091611209565b90506001818051906020012087878760405160008152602001604052604051610d9f9493929190611edb565b6020604051602081039080840390855afa158015610dc1573d6000803e3d6000fd5b50505060206040510351925050505b949350505050565b60008183610df95760405162461bcd60e51b81526004016102289190611f7f565b506000838581610e0557fe5b049150505b9392505050565b60008282018381101561082f5760405162461bcd60e51b815260040161022890611fa0565b60008080610e5485610c09612710610501838963ffffffff6107f516565b915091506000610e75612710610501600154896107f590919063ffffffff16565b90506000610e89828463ffffffff610e1116565b90508015610ecd576002546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610ecb573d6000803e3d6000fd5b505b509195945050505050565b60008082841115610eee57505080820381610ef5565b5060009050825b9250929050565b606081610f2157506040805180820190915260018152600360fc1b6020820152610fba565b8160005b8115610f3957600101600a82049150610f25565b6060816040519080825280601f01601f191660200182016040528015610f66576020820181803883390190505b50905060001982015b8515610fb457600a860660300160f81b82828060019003935081518110610f9257fe5b60200101906001600160f81b031916908160001a905350600a86049550610f6f565b50925050505b919050565b60608061105f610fd7886001600160a01b03166114af565b6040518060400160405280600b81526020016a017103a37b5b2b724b21d160ad1b81525061100489610efc565b6040518060400160405280600981526020016801710383934b1b29d160bd1b81525061102f8a610efc565b60405180604001604052806009815260200168017103737b731b29d160bd1b81525061105a8a610efc565b611622565b905083156110a9576110a160405180604001604052806007815260200166017103332b29d160cd1b81525061109386610efc565b83919063ffffffff6110b516565b9150506110ac565b90505b95945050505050565b60608084905060608490506060849050606081518351855101016040519080825280601f01601f1916602001820160405280156110f9576020820181803883390190505b5090506000805b85518110156111515785818151811061111557fe5b602001015160f81c60f81b83838060010194508151811061113257fe5b60200101906001600160f81b031916908160001a905350600101611100565b5060005b84518110156111a65784818151811061116a57fe5b602001015160f81c60f81b83838060010194508151811061118757fe5b60200101906001600160f81b031916908160001a905350600101611155565b5060005b83518110156111fb578381815181106111bf57fe5b602001015160f81c60f81b8383806001019450815181106111dc57fe5b60200101906001600160f81b031916908160001a9053506001016111aa565b509098975050505050505050565b60608082518451865188518a518c518e510101010101016040519080825280601f01601f19166020018201604052801561124a576020820181803883390190505b5090506000805b8a518110156112a2578a818151811061126657fe5b602001015160f81c60f81b83838060010194508151811061128357fe5b60200101906001600160f81b031916908160001a905350600101611251565b5060005b89518110156112f7578981815181106112bb57fe5b602001015160f81c60f81b8383806001019450815181106112d857fe5b60200101906001600160f81b031916908160001a9053506001016112a6565b5060005b885181101561134c5788818151811061131057fe5b602001015160f81c60f81b83838060010194508151811061132d57fe5b60200101906001600160f81b031916908160001a9053506001016112fb565b5060005b87518110156113a15787818151811061136557fe5b602001015160f81c60f81b83838060010194508151811061138257fe5b60200101906001600160f81b031916908160001a905350600101611350565b5060005b86518110156113f6578681815181106113ba57fe5b602001015160f81c60f81b8383806001019450815181106113d757fe5b60200101906001600160f81b031916908160001a9053506001016113a5565b5060005b855181101561144b5785818151811061140f57fe5b602001015160f81c60f81b83838060010194508151811061142c57fe5b60200101906001600160f81b031916908160001a9053506001016113fa565b5060005b84518110156114a05784818151811061146457fe5b602001015160f81c60f81b83838060010194508151811061148157fe5b60200101906001600160f81b031916908160001a90535060010161144f565b50909998505050505050505050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b03851692918491602082018180388339019050509050600360fc1b8160008151811061151357fe5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061153c57fe5b60200101906001600160f81b031916908160001a90535060005b6014811015610fb4578260048583600c016020811061157157fe5b1a60f81b6001600160f81b031916901c60f81c60ff168151811061159157fe5b602001015160f81c60f81b8282600202600201815181106115ae57fe5b60200101906001600160f81b031916908160001a905350828482600c01602081106115d557fe5b825191901a600f169081106115e657fe5b602001015160f81c60f81b82826002026003018151811061160357fe5b60200101906001600160f81b031916908160001a905350600101611556565b60608082518451865188518a518c518e510101010101016040519080825280601f01601f191660200182016040528015611663576020820181803883390190505b5090506000805b8a518110156116bb578a818151811061167f57fe5b602001015160f81c60f81b83838060010194508151811061169c57fe5b60200101906001600160f81b031916908160001a90535060010161166a565b5060005b8951811015611710578981815181106116d457fe5b602001015160f81c60f81b8383806001019450815181106116f157fe5b60200101906001600160f81b031916908160001a9053506001016116bf565b5060005b88518110156117655788818151811061172957fe5b602001015160f81c60f81b83838060010194508151811061174657fe5b60200101906001600160f81b031916908160001a905350600101611714565b5060005b87518110156117ba5787818151811061177e57fe5b602001015160f81c60f81b83838060010194508151811061179b57fe5b60200101906001600160f81b031916908160001a905350600101611769565b5060005b865181101561180f578681815181106117d357fe5b602001015160f81c60f81b8383806001019450815181106117f057fe5b60200101906001600160f81b031916908160001a9053506001016117be565b5060005b85518110156118645785818151811061182857fe5b602001015160f81c60f81b83838060010194508151811061184557fe5b60200101906001600160f81b031916908160001a905350600101611813565b5060005b84518110156114a05784818151811061187d57fe5b602001015160f81c60f81b83838060010194508151811061189a57fe5b60200101906001600160f81b031916908160001a905350600101611868565b8035610832816120d5565b8051610832816120d5565b600082601f8301126118e057600080fd5b81516118f36118ee82612025565b611ffe565b9150818183526020840193506020810190508385602084028201111561191857600080fd5b60005b83811015611944578161192e88826118c4565b845250602092830192919091019060010161191b565b5050505092915050565b600082601f83011261195f57600080fd5b815161196d6118ee82612025565b9150818183526020840193506020810190508385602084028201111561199257600080fd5b60005b8381101561194457816119a88882611a3a565b8452506020928301929190910190600101611995565b8051610832816120e9565b8035610832816120f2565b8035610832816120fb565b6000606082840312156119f157600080fd5b6119fb6060611ffe565b90506000611a098484611a45565b8252506020611a1a848483016119c9565b6020830152506040611a2e848285016119c9565b60408301525092915050565b8051610832816120f2565b803561083281612104565b600060208284031215611a6257600080fd5b6000610dd084846118b9565b60008060408385031215611a8157600080fd5b6000611a8d85856118b9565b9250506020611a9e858286016119c9565b9150509250929050565b600060208284031215611aba57600080fd5b815167ffffffffffffffff811115611ad157600080fd5b610dd0848285016118cf565b600060208284031215611aef57600080fd5b815167ffffffffffffffff811115611b0657600080fd5b610dd08482850161194e565b600060208284031215611b2457600080fd5b6000610dd084846119be565b600080600080600080600080610140898b031215611b4d57600080fd5b6000611b598b8b6119d4565b9850506020611b6a8b828c016119c9565b9750506040611b7b8b828c016118b9565b9650506060611b8c8b828c016119c9565b9550506080611b9d8b828c016119c9565b94505060a0611bae8b828c016119c9565b93505060c0611bbf8b828c016119c9565b92505060e0611bd08b828c016119df565b9150509295985092959890939650565b600060208284031215611bf257600080fd5b6000610dd084846119c9565b600060208284031215611c1057600080fd5b6000610dd08484611a3a565b611c2581612090565b82525050565b611c2581612053565b611c258161205e565b611c2581612063565b611c2581612066565b6000611c5a82612046565b611c64818561204a565b9350611c7481856020860161209b565b611c7d816120cb565b9093019392505050565b611c2581612073565b6000611c9d60268361204a565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000611ce5601b8361204a565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000611d1e60138361204a565b72696e636f7272656374207369676e617475726560681b815260200192915050565b6000611d4d60218361204a565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000611d9060208361204a565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000611dc960168361204a565b751b5cd9cb9d985b1d59481a5cc81a5b98dbdc9c9958dd60521b815260200192915050565b611c258161208a565b602081016108328284611c2b565b60408101611e138285611c1c565b610e0a6020830184611c3d565b60808101611e2e8287611c1c565b611e3b6020830186611c3d565b611e486040830185611c1c565b6110ac6060830184611c3d565b60608101611e638286611c2b565b611e706020830185611c3d565b610dd06040830184611c1c565b60808101611e2e8287611c2b565b60a08101611e998288611c2b565b611ea66020830187611c3d565b611eb36040830186611c1c565b611ec06060830185611c3d565b610a106080830184611c3d565b602081016108328284611c34565b60808101611ee98287611c3d565b611ef66020830186611dee565b611e486040830185611c3d565b602081016108328284611c46565b602081016108328284611c87565b60c08101611f2d8289611c87565b611f3a6020830188611c1c565b611f476040830187611c1c565b611f546060830186611c3d565b611f616080830185611c3d565b81810360a0830152611f738184611c4f565b98975050505050505050565b6020808252810161082f8184611c4f565b6020808252810161083281611c90565b6020808252810161083281611cd8565b6020808252810161083281611d11565b6020808252810161083281611d40565b6020808252810161083281611d83565b6020808252810161083281611dbc565b602081016108328284611c3d565b60405181810167ffffffffffffffff8111828210171561201d57600080fd5b604052919050565b600067ffffffffffffffff82111561203c57600080fd5b5060209081020190565b5190565b90815260200190565b60006108328261207e565b151590565b90565b6001600160e01b03191690565b600061083282612053565b6001600160a01b031690565b60ff1690565b600061083282612073565b60005b838110156120b657818101518382015260200161209e565b838111156120c5576000848401525b50505050565b601f01601f191690565b6120de81612053565b811461049157600080fd5b6120de8161205e565b6120de81612063565b6120de81612073565b6120de8161208a56fea365627a7a72315820a435fdac4192d9edd75cdf1caf6711785aca4139081c88b9aabc10b9f91be4186c6578706572696d656e74616cf564736f6c634300051100400000000000000000000000004fee7b061c97c9c496b01dbce9cdb10c02f0a0be000000000000000000000000295fe6bc5ad4bdb770d416c066626e4207e10339000000000000000000000000256effcea2ab308d31e318728d2615545171d85b
Deployed Bytecode
0x6080604052600436106100a75760003560e01c80638da5cb5b116100645780638da5cb5b146101675780638f32d59b1461017c57806398590ef91461019e578063f2fde38b146101b1578063fa7da19d146101d1578063fd453a85146101f1576100a7565b80631c31f710146100ac57806338af3eed146100ce57806341a259a6146100f95780635de6c42f1461011b5780636e667db31461013d578063715018a614610152575b600080fd5b3480156100b857600080fd5b506100cc6100c7366004611a50565b610204565b005b3480156100da57600080fd5b506100e3610253565b6040516100f09190611df7565b60405180910390f35b34801561010557600080fd5b5061010e610262565b6040516100f09190611f11565b34801561012757600080fd5b50610130610271565b6040516100f09190611ff0565b34801561014957600080fd5b5061010e610277565b34801561015e57600080fd5b506100cc610286565b34801561017357600080fd5b506100e36102f4565b34801561018857600080fd5b50610191610303565b6040516100f09190611ecd565b6100cc6101ac366004611a6e565b610327565b3480156101bd57600080fd5b506100cc6101cc366004611a50565b610464565b3480156101dd57600080fd5b506100cc6101ec366004611be0565b610494565b6100cc6101ff366004611b30565b6104bd565b61020c610303565b6102315760405162461bcd60e51b815260040161022890611fd0565b60405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031681565b6004546001600160a01b031681565b60015481565b6003546001600160a01b031681565b61028e610303565b6102aa5760405162461bcd60e51b815260040161022890611fd0565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b600080546001600160a01b031661031861067f565b6001600160a01b031614905090565b6004805460405163250adb3160e11b81526000926001600160a01b0390921691634a15b6629161035d9187918791339101611e55565b60206040518083038186803b15801561037557600080fd5b505afa158015610389573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506103ad9190810190611bfe565b600480546040516308345fbf60e01b81529293506001600160a01b0316916308345fbf916103e691879187913391600189019101611e7d565b600060405180830381600087803b15801561040057600080fd5b505af1158015610414573d6000803e3d6000fd5b5050505081836001600160a01b03167f1910cc041d39d8d4ddb31ea5990a0b170e2b585057bfac4853f3c2929b276ee23384600101604051610457929190611e05565b60405180910390a3505050565b61046c610303565b6104885760405162461bcd60e51b815260040161022890611fd0565b61049181610683565b50565b61049c610303565b6104b85760405162461bcd60e51b815260040161022890611fd0565b600155565b60006104ce89898989888888610704565b905060006104e2858763ffffffff6107f516565b9050600061050d612710610501600154856107f590919063ffffffff16565b9063ffffffff61083816565b905034818301146105305760405162461bcd60e51b815260040161022890611fe0565b60006105408c8c8c878d8d61087a565b9050600360009054906101000a90046001600160a01b03166001600160a01b0316639c1c2ee98d8c338f8d604051806020016040528060008152506040518763ffffffff1660e01b815260040161059c96959493929190611f1f565b600060405180830381600087803b1580156105b657600080fd5b505af11580156105ca573d6000803e3d6000fd5b505050506105db8c8c8c868a610a1a565b8a8c6001600160a01b03167f710791c544fdcb0c8c5b17f5bfa5b6721dfff68224047778e2d64e426ded61c68c8a338d60405161061b9493929190611e20565b60405180910390a38015610671578a8c6001600160a01b03167f1910cc041d39d8d4ddb31ea5990a0b170e2b585057bfac4853f3c2929b276ee28c87600101604051610668929190611e05565b60405180910390a35b505050505050505050505050565b3390565b6001600160a01b0381166106a95760405162461bcd60e51b815260040161022890611f90565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6004805460405163250adb3160e11b81526000926001600160a01b0390921691634a15b6629161073a918c918c918c9101611e55565b60206040518083038186803b15801561075257600080fd5b505afa158015610766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061078a9190810190611bfe565b9050856001600160a01b03166107c48360000151846020015185604001516107b68d8d8b8d8c8b610cb0565b92919063ffffffff610cfa16565b6001600160a01b0316146107ea5760405162461bcd60e51b815260040161022890611fb0565b979650505050505050565b60008261080457506000610832565b8282028284828161081157fe5b041461082f5760405162461bcd60e51b815260040161022890611fc0565b90505b92915050565b600061082f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610dd8565b60048054604051637ad2ec8560e01b815260009283926109169286926001600160a01b0390921691637ad2ec85916108ba918e918e918e918e9101611e7d565b60206040518083038186803b1580156108d257600080fd5b505afa1580156108e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061090a9190810190611bfe565b9063ffffffff610e1116565b90508381111561092557600080fd5b60048054604051634bd49ccb60e01b81526001600160a01b0390911691634bd49ccb9161095c918c918c918c918c91899101611e8b565b600060405180830381600087803b15801561097657600080fd5b505af115801561098a573d6000803e3d6000fd5b5050505083811415610a0a57600480546040516308345fbf60e01b81526001600160a01b03909116916308345fbf916109ce918c918c918c9160018d019101611e7d565b600060405180830381600087803b1580156109e857600080fd5b505af11580156109fc573d6000803e3d6000fd5b505050506001915050610a10565b60009150505b9695505050505050565b6000610a268383610e36565b6040516301ffc9a760e01b81529091506001600160a01b038716906301ffc9a790610a5c90632dde656160e21b90600401611f03565b60206040518083038186803b158015610a7457600080fd5b505afa158015610a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610aac9190810190611b12565b15610c715760405163b9c4d9fb60e01b815286906060906001600160a01b0383169063b9c4d9fb90610ae2908a90600401611ff0565b60006040518083038186803b158015610afa57600080fd5b505afa158015610b0e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b369190810190611aa8565b90506060826001600160a01b0316630ebd4c7f896040518263ffffffff1660e01b8152600401610b669190611ff0565b60006040518083038186803b158015610b7e57600080fd5b505afa158015610b92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bba9190810190611add565b90508151815114610bca57600080fd5b60005b8151811015610c6c57600080610c0e87610c09612710610501888881518110610bf257fe5b60200260200101518e6107f590919063ffffffff16565b610ed8565b91509150819650848381518110610c2157fe5b60200260200101516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015610c61573d6000803e3d6000fd5b505050600101610bcd565b505050505b6040516001600160a01b0385169082156108fc029083906000818181858888f19350505050158015610ca7573d6000803e3d6000fd5b50505050505050565b60606107ea60405180604001604052806009815260200168017103b30b63ab29d160bd1b815250610ce086610efc565b610ced8a8a8a8989610fbf565b919063ffffffff6110b516565b600060608590506060610d736040518060400160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250610d468451610efc565b60408051600080825260208201818152828401828152606084019283526080840190945288939091611209565b90506001818051906020012087878760405160008152602001604052604051610d9f9493929190611edb565b6020604051602081039080840390855afa158015610dc1573d6000803e3d6000fd5b50505060206040510351925050505b949350505050565b60008183610df95760405162461bcd60e51b81526004016102289190611f7f565b506000838581610e0557fe5b049150505b9392505050565b60008282018381101561082f5760405162461bcd60e51b815260040161022890611fa0565b60008080610e5485610c09612710610501838963ffffffff6107f516565b915091506000610e75612710610501600154896107f590919063ffffffff16565b90506000610e89828463ffffffff610e1116565b90508015610ecd576002546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610ecb573d6000803e3d6000fd5b505b509195945050505050565b60008082841115610eee57505080820381610ef5565b5060009050825b9250929050565b606081610f2157506040805180820190915260018152600360fc1b6020820152610fba565b8160005b8115610f3957600101600a82049150610f25565b6060816040519080825280601f01601f191660200182016040528015610f66576020820181803883390190505b50905060001982015b8515610fb457600a860660300160f81b82828060019003935081518110610f9257fe5b60200101906001600160f81b031916908160001a905350600a86049550610f6f565b50925050505b919050565b60608061105f610fd7886001600160a01b03166114af565b6040518060400160405280600b81526020016a017103a37b5b2b724b21d160ad1b81525061100489610efc565b6040518060400160405280600981526020016801710383934b1b29d160bd1b81525061102f8a610efc565b60405180604001604052806009815260200168017103737b731b29d160bd1b81525061105a8a610efc565b611622565b905083156110a9576110a160405180604001604052806007815260200166017103332b29d160cd1b81525061109386610efc565b83919063ffffffff6110b516565b9150506110ac565b90505b95945050505050565b60608084905060608490506060849050606081518351855101016040519080825280601f01601f1916602001820160405280156110f9576020820181803883390190505b5090506000805b85518110156111515785818151811061111557fe5b602001015160f81c60f81b83838060010194508151811061113257fe5b60200101906001600160f81b031916908160001a905350600101611100565b5060005b84518110156111a65784818151811061116a57fe5b602001015160f81c60f81b83838060010194508151811061118757fe5b60200101906001600160f81b031916908160001a905350600101611155565b5060005b83518110156111fb578381815181106111bf57fe5b602001015160f81c60f81b8383806001019450815181106111dc57fe5b60200101906001600160f81b031916908160001a9053506001016111aa565b509098975050505050505050565b60608082518451865188518a518c518e510101010101016040519080825280601f01601f19166020018201604052801561124a576020820181803883390190505b5090506000805b8a518110156112a2578a818151811061126657fe5b602001015160f81c60f81b83838060010194508151811061128357fe5b60200101906001600160f81b031916908160001a905350600101611251565b5060005b89518110156112f7578981815181106112bb57fe5b602001015160f81c60f81b8383806001019450815181106112d857fe5b60200101906001600160f81b031916908160001a9053506001016112a6565b5060005b885181101561134c5788818151811061131057fe5b602001015160f81c60f81b83838060010194508151811061132d57fe5b60200101906001600160f81b031916908160001a9053506001016112fb565b5060005b87518110156113a15787818151811061136557fe5b602001015160f81c60f81b83838060010194508151811061138257fe5b60200101906001600160f81b031916908160001a905350600101611350565b5060005b86518110156113f6578681815181106113ba57fe5b602001015160f81c60f81b8383806001019450815181106113d757fe5b60200101906001600160f81b031916908160001a9053506001016113a5565b5060005b855181101561144b5785818151811061140f57fe5b602001015160f81c60f81b83838060010194508151811061142c57fe5b60200101906001600160f81b031916908160001a9053506001016113fa565b5060005b84518110156114a05784818151811061146457fe5b602001015160f81c60f81b83838060010194508151811061148157fe5b60200101906001600160f81b031916908160001a90535060010161144f565b50909998505050505050505050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b03851692918491602082018180388339019050509050600360fc1b8160008151811061151357fe5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061153c57fe5b60200101906001600160f81b031916908160001a90535060005b6014811015610fb4578260048583600c016020811061157157fe5b1a60f81b6001600160f81b031916901c60f81c60ff168151811061159157fe5b602001015160f81c60f81b8282600202600201815181106115ae57fe5b60200101906001600160f81b031916908160001a905350828482600c01602081106115d557fe5b825191901a600f169081106115e657fe5b602001015160f81c60f81b82826002026003018151811061160357fe5b60200101906001600160f81b031916908160001a905350600101611556565b60608082518451865188518a518c518e510101010101016040519080825280601f01601f191660200182016040528015611663576020820181803883390190505b5090506000805b8a518110156116bb578a818151811061167f57fe5b602001015160f81c60f81b83838060010194508151811061169c57fe5b60200101906001600160f81b031916908160001a90535060010161166a565b5060005b8951811015611710578981815181106116d457fe5b602001015160f81c60f81b8383806001019450815181106116f157fe5b60200101906001600160f81b031916908160001a9053506001016116bf565b5060005b88518110156117655788818151811061172957fe5b602001015160f81c60f81b83838060010194508151811061174657fe5b60200101906001600160f81b031916908160001a905350600101611714565b5060005b87518110156117ba5787818151811061177e57fe5b602001015160f81c60f81b83838060010194508151811061179b57fe5b60200101906001600160f81b031916908160001a905350600101611769565b5060005b865181101561180f578681815181106117d357fe5b602001015160f81c60f81b8383806001019450815181106117f057fe5b60200101906001600160f81b031916908160001a9053506001016117be565b5060005b85518110156118645785818151811061182857fe5b602001015160f81c60f81b83838060010194508151811061184557fe5b60200101906001600160f81b031916908160001a905350600101611813565b5060005b84518110156114a05784818151811061187d57fe5b602001015160f81c60f81b83838060010194508151811061189a57fe5b60200101906001600160f81b031916908160001a905350600101611868565b8035610832816120d5565b8051610832816120d5565b600082601f8301126118e057600080fd5b81516118f36118ee82612025565b611ffe565b9150818183526020840193506020810190508385602084028201111561191857600080fd5b60005b83811015611944578161192e88826118c4565b845250602092830192919091019060010161191b565b5050505092915050565b600082601f83011261195f57600080fd5b815161196d6118ee82612025565b9150818183526020840193506020810190508385602084028201111561199257600080fd5b60005b8381101561194457816119a88882611a3a565b8452506020928301929190910190600101611995565b8051610832816120e9565b8035610832816120f2565b8035610832816120fb565b6000606082840312156119f157600080fd5b6119fb6060611ffe565b90506000611a098484611a45565b8252506020611a1a848483016119c9565b6020830152506040611a2e848285016119c9565b60408301525092915050565b8051610832816120f2565b803561083281612104565b600060208284031215611a6257600080fd5b6000610dd084846118b9565b60008060408385031215611a8157600080fd5b6000611a8d85856118b9565b9250506020611a9e858286016119c9565b9150509250929050565b600060208284031215611aba57600080fd5b815167ffffffffffffffff811115611ad157600080fd5b610dd0848285016118cf565b600060208284031215611aef57600080fd5b815167ffffffffffffffff811115611b0657600080fd5b610dd08482850161194e565b600060208284031215611b2457600080fd5b6000610dd084846119be565b600080600080600080600080610140898b031215611b4d57600080fd5b6000611b598b8b6119d4565b9850506020611b6a8b828c016119c9565b9750506040611b7b8b828c016118b9565b9650506060611b8c8b828c016119c9565b9550506080611b9d8b828c016119c9565b94505060a0611bae8b828c016119c9565b93505060c0611bbf8b828c016119c9565b92505060e0611bd08b828c016119df565b9150509295985092959890939650565b600060208284031215611bf257600080fd5b6000610dd084846119c9565b600060208284031215611c1057600080fd5b6000610dd08484611a3a565b611c2581612090565b82525050565b611c2581612053565b611c258161205e565b611c2581612063565b611c2581612066565b6000611c5a82612046565b611c64818561204a565b9350611c7481856020860161209b565b611c7d816120cb565b9093019392505050565b611c2581612073565b6000611c9d60268361204a565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000611ce5601b8361204a565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000611d1e60138361204a565b72696e636f7272656374207369676e617475726560681b815260200192915050565b6000611d4d60218361204a565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000611d9060208361204a565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000611dc960168361204a565b751b5cd9cb9d985b1d59481a5cc81a5b98dbdc9c9958dd60521b815260200192915050565b611c258161208a565b602081016108328284611c2b565b60408101611e138285611c1c565b610e0a6020830184611c3d565b60808101611e2e8287611c1c565b611e3b6020830186611c3d565b611e486040830185611c1c565b6110ac6060830184611c3d565b60608101611e638286611c2b565b611e706020830185611c3d565b610dd06040830184611c1c565b60808101611e2e8287611c2b565b60a08101611e998288611c2b565b611ea66020830187611c3d565b611eb36040830186611c1c565b611ec06060830185611c3d565b610a106080830184611c3d565b602081016108328284611c34565b60808101611ee98287611c3d565b611ef66020830186611dee565b611e486040830185611c3d565b602081016108328284611c46565b602081016108328284611c87565b60c08101611f2d8289611c87565b611f3a6020830188611c1c565b611f476040830187611c1c565b611f546060830186611c3d565b611f616080830185611c3d565b81810360a0830152611f738184611c4f565b98975050505050505050565b6020808252810161082f8184611c4f565b6020808252810161083281611c90565b6020808252810161083281611cd8565b6020808252810161083281611d11565b6020808252810161083281611d40565b6020808252810161083281611d83565b6020808252810161083281611dbc565b602081016108328284611c3d565b60405181810167ffffffffffffffff8111828210171561201d57600080fd5b604052919050565b600067ffffffffffffffff82111561203c57600080fd5b5060209081020190565b5190565b90815260200190565b60006108328261207e565b151590565b90565b6001600160e01b03191690565b600061083282612053565b6001600160a01b031690565b60ff1690565b600061083282612073565b60005b838110156120b657818101518382015260200161209e565b838111156120c5576000848401525b50505050565b601f01601f191690565b6120de81612053565b811461049157600080fd5b6120de8161205e565b6120de81612063565b6120de81612073565b6120de8161208a56fea365627a7a72315820a435fdac4192d9edd75cdf1caf6711785aca4139081c88b9aabc10b9f91be4186c6578706572696d656e74616cf564736f6c63430005110040
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004fee7b061c97c9c496b01dbce9cdb10c02f0a0be000000000000000000000000295fe6bc5ad4bdb770d416c066626e4207e10339000000000000000000000000256effcea2ab308d31e318728d2615545171d85b
-----Decoded View---------------
Arg [0] : _transferProxy (address): 0x4feE7B061C97C9c496b01DbcE9CDb10c02f0a0Be
Arg [1] : _nonceHolder (address): 0x295fE6bC5AD4BDb770D416C066626E4207E10339
Arg [2] : beneficiary (address): 0x256eFfCeA2ab308D31e318728D2615545171d85B
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000004fee7b061c97c9c496b01dbce9cdb10c02f0a0be
Arg [1] : 000000000000000000000000295fe6bc5ad4bdb770d416c066626e4207e10339
Arg [2] : 000000000000000000000000256effcea2ab308d31e318728d2615545171d85b
Deployed Bytecode Sourcemap
33001:3149:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23800:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23800:116:0;;;;;;;;:::i;:::-;;23354:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23354:34:0;;;:::i;:::-;;;;;;;;;;;;;;;;33395:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33395:41:0;;;:::i;:::-;;;;;;;;23323:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23323:24:0;;;:::i;:::-;;;;;;;;33354:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33354:34:0;;;:::i;14610:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14610:140:0;;;:::i;13799:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13799:79:0;;;:::i;14165:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14165:94:0;;;:::i;:::-;;;;;;;;34627:280;;;;;;;;;:::i;14905:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14905:109:0;;;;;;;;:::i;23696:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23696:96:0;;;;;;;;:::i;33680:939::-;;;;;;;;;:::i;23800:116::-;14011:9;:7;:9::i;:::-;14003:54;;;;-1:-1:-1;;;14003:54:0;;;;;;;;;;;;;;;;;23882:11;:26;;-1:-1:-1;;;;;;23882:26:0;-1:-1:-1;;;;;23882:26:0;;;;;;;;;;23800:116::o;23354:34::-;;;-1:-1:-1;;;;;23354:34:0;;:::o;33395:41::-;;;-1:-1:-1;;;;;33395:41:0;;:::o;23323:24::-;;;;:::o;33354:34::-;;;-1:-1:-1;;;;;33354:34:0;;:::o;14610:140::-;14011:9;:7;:9::i;:::-;14003:54;;;;-1:-1:-1;;;14003:54:0;;;;;;;;;14709:1;14693:6;;14672:40;;-1:-1:-1;;;;;14693:6:0;;;;14672:40;;14709:1;;14672:40;14740:1;14723:19;;-1:-1:-1;;;;;;14723:19:0;;;14610:140::o;13799:79::-;13837:7;13864:6;-1:-1:-1;;;;;13864:6:0;13799:79;:::o;14165:94::-;14205:4;14245:6;;-1:-1:-1;;;;;14245:6:0;14229:12;:10;:12::i;:::-;-1:-1:-1;;;;;14229:22:0;;14222:29;;14165:94;:::o;34627:280::-;34714:11;;;:48;;-1:-1:-1;;;34714:48:0;;34701:10;;-1:-1:-1;;;;;34714:11:0;;;;:20;;:48;;34735:5;;34742:7;;34751:10;;34714:48;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34714:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34714:48:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;34714:48:0;;;;;;;;;34773:11;;;:59;;-1:-1:-1;;;34773:59:0;;34701:61;;-1:-1:-1;;;;;;34773:11:0;;:20;;:59;;34794:5;;34801:7;;34810:10;;34773:11;34822:9;;;34773:59;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34773:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34773:59:0;;;;34868:7;34861:5;-1:-1:-1;;;;;34850:49:0;;34877:10;34889:5;34897:1;34889:9;34850:49;;;;;;;;;;;;;;;;34627:280;;;:::o;14905:109::-;14011:9;:7;:9::i;:::-;14003:54;;;;-1:-1:-1;;;14003:54:0;;;;;;;;;14978:28;14997:8;14978:18;:28::i;:::-;14905:109;:::o;23696:96::-;14011:9;:7;:9::i;:::-;14003:54;;;;-1:-1:-1;;;14003:54:0;;;;;;;;;23764:8;:20;23696:96::o;33680:939::-;33864:13;33880:85;33904:5;33912:7;33921:5;33928:7;33937:5;33944:9;33955;33880:15;:85::i;:::-;33864:101;-1:-1:-1;33976:13:0;33992:17;:5;34002:6;33992:17;:9;:17;:::i;:::-;33976:33;;34020:21;34044:30;34068:5;34044:19;34054:8;;34044:5;:9;;:19;;;;:::i;:::-;:23;:30;:23;:30;:::i;:::-;34020:54;;34118:9;34101:13;34093:5;:21;:34;34085:69;;;;-1:-1:-1;;;34085:69:0;;;;;;;;;34165:11;34179:80;34212:5;34220:7;34229:5;34236;34243:7;34252:6;34179:24;:80::i;:::-;34165:94;;34272:13;;;;;;;;;-1:-1:-1;;;;;34272:13:0;-1:-1:-1;;;;;34272:37:0;;34310:5;34317;34324:10;34336:7;34345:6;34353:5;;;;;;;;;;;;34272:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34272:87:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34272:87:0;;;;34372:54;34386:5;34393:7;34402:5;34409;34416:9;34372:13;:54::i;:::-;34462:7;34454:5;-1:-1:-1;;;;;34442:62:0;;34471:5;34478;34485:10;34497:6;34442:62;;;;;;;;;;;;;;;;;;34519:6;34515:97;;;34574:7;34566:5;-1:-1:-1;;;;;34547:53:0;;34583:5;34590;34598:1;34590:9;34547:53;;;;;;;;;;;;;;;;34515:97;33680:939;;;;;;;;;;;;:::o;12590:98::-;12670:10;12590:98;:::o;15120:229::-;-1:-1:-1;;;;;15194:22:0;;15186:73;;;;-1:-1:-1;;;15186:73:0;;;;;;;;;15296:6;;;15275:38;;-1:-1:-1;;;;;15275:38:0;;;;15296:6;;;15275:38;;;15324:6;:17;;-1:-1:-1;;;;;;15324:17:0;-1:-1:-1;;;;;15324:17:0;;;;;;;;;;15120:229::o;34915:424::-;35125:11;;;:43;;-1:-1:-1;;;35125:43:0;;35091:13;;-1:-1:-1;;;;;35125:11:0;;;;:20;;:43;;35146:5;;35153:7;;35162:5;;35125:43;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35125:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35125:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;35125:43:0;;;;;;;;;35117:51;;35302:5;-1:-1:-1;;;;;35187:120:0;:111;35260:9;:11;;;35273:9;:11;;;35286:9;:11;;;35187:64;35202:5;35209:7;35218:5;35225:7;35234:9;35245:5;35187:14;:64::i;:::-;:72;:111;;;:72;:111;:::i;:::-;-1:-1:-1;;;;;35187:120:0;;35179:152;;;;-1:-1:-1;;;35179:152:0;;;;;;;;;34915:424;;;;;;;;;:::o;17560:471::-;17618:7;17863:6;17859:47;;-1:-1:-1;17893:1:0;17886:8;;17859:47;17930:5;;;17934:1;17930;:5;:1;17954:5;;;;;:10;17946:56;;;;-1:-1:-1;;;17946:56:0;;;;;;;;;18022:1;-1:-1:-1;17560:471:0;;;;;:::o;18499:132::-;18557:7;18584:39;18588:1;18591;18584:39;;;;;;;;;;;;;;;;;:3;:39::i;35347:527::-;35531:11;;;:54;;-1:-1:-1;;;35531:54:0;;35502:4;;;;35531:66;;35590:6;;-1:-1:-1;;;;;35531:11:0;;;;:24;;:54;;35556:5;;35563:7;;35572:5;;35579;;35531:54;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35531:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35531:54:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;35531:54:0;;;;;;;;;:58;:66;:58;:66;:::i;:::-;35519:78;;35624:7;35616:4;:15;;35608:24;;;;;;35643:11;;;:60;;-1:-1:-1;;;35643:60:0;;-1:-1:-1;;;;;35643:11:0;;;;:24;;:60;;35668:5;;35675:7;;35684:5;;35691;;35698:4;;35643:60;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35643:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35643:60:0;;;;35728:7;35720:4;:15;35716:128;;;35752:11;;;:54;;-1:-1:-1;;;35752:54:0;;-1:-1:-1;;;;;35752:11:0;;;;:20;;:54;;35773:5;;35780:7;;35789:5;;35752:11;35796:9;;;35752:54;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35752:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35752:54:0;;;;35828:4;35821:11;;;;;35716:128;35861:5;35854:12;;;35347:527;;;;;;;;;:::o;25473:839::-;25605:10;25618:42;25643:5;25650:9;25618:24;:42::i;:::-;25675:43;;-1:-1:-1;;;25675:43:0;;25605:55;;-1:-1:-1;;;;;;25675:23:0;;;;;:43;;-1:-1:-1;;;25699:18:0;25675:43;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25675:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25675:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25675:43:0;;;;;;;;;25671:602;;;25856:34;;-1:-1:-1;;;25856:34:0;;25796:5;;25818:35;;-1:-1:-1;;;;;25856:25:0;;;;;:34;;25882:7;;25856:34;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25856:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25856:34:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;25856:34:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;25856:34:0;;;;;;;;;25818:72;;25905:18;25926:8;-1:-1:-1;;;;;25926:18:0;;25945:7;25926:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25926:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25926:27:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;25926:27:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;25926:27:0;;;;;;;;;25905:48;;25991:10;:17;25976:4;:11;:32;25968:41;;;;;;26029:9;26024:238;26048:4;:11;26044:1;:15;26024:238;;;26086:13;26101:12;26117:44;26124:5;26131:29;26154:5;26131:18;26141:4;26146:1;26141:7;;;;;;;;;;;;;;26131:5;:9;;:18;;;;:::i;:29::-;26117:6;:44::i;:::-;26085:76;;;;26188:8;26180:16;;26215:10;26226:1;26215:13;;;;;;;;;;;;;;-1:-1:-1;;;;;26215:22:0;:31;26238:7;26215:31;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;26061:3:0;;26024:238;;;;25671:602;;;;26283:21;;-1:-1:-1;;;;;26283:14:0;;;:21;;;;;26298:5;;26283:21;;;;26298:5;26283:14;:21;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26283:21:0;25473:839;;;;;;:::o;35882:265::-;36019:13;36052:87;;;;;;;;;;;;;;-1:-1:-1;;;36052:87:0;;;36122:16;:5;:14;:16::i;:::-;36052:49;36067:5;36074:7;36083:5;36090:3;36095:5;36052:14;:49::i;:::-;:56;:87;;:56;:87;:::i;9915:469::-;10009:7;10029:21;10059:7;10029:38;;10078:24;10105:211;10126:39;;;;;;;;;;;;;;;;;10186:26;:8;:15;:24;:26::i;:::-;10251:12;;;10261:1;10251:12;;;;;;10265;;;;;;10279;;;;;;10293;;;;;;;;;10228:8;;10251:12;;10105:6;:211::i;:::-;10078:238;;10334:42;10354:11;10344:22;;;;;;10368:1;10371;10374;10334:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10334:42:0;;;;;;;;10327:49;;;;9915:469;;;;;;;:::o;19161:345::-;19247:7;19349:12;19342:5;19334:28;;;;-1:-1:-1;;;19334:28:0;;;;;;;;;;;19373:9;19389:1;19385;:5;;;;;;;-1:-1:-1;;19161:345:0;;;;;;:::o;16188:181::-;16246:7;16278:5;;;16302:6;;;;16294:46;;;;-1:-1:-1;;;16294:46:0;;;;;;;;26320:435;26400:4;;;26453:46;26460:5;26467:31;26492:5;26467:20;26460:5;26477:9;26467:20;:9;:20;:::i;26453:46::-;26417:82;;;;26510:18;26531:30;26555:5;26531:19;26541:8;;26531:5;:9;;:19;;;;:::i;:30::-;26510:51;-1:-1:-1;26572:19:0;26594:33;26510:51;26612:14;26594:33;:17;:33;:::i;:::-;26572:55;-1:-1:-1;26642:18:0;;26638:87;;26677:11;;:36;;-1:-1:-1;;;;;26677:11:0;;;;:36;;;;;26698:14;;26677:11;:36;:11;:36;26698:14;26677:11;:36;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26677:36:0;26638:87;-1:-1:-1;26742:5:0;;26320:435;-1:-1:-1;;;;;26320:435:0:o;26763:277::-;26824:13;26839:12;26876:3;26868:5;:11;26864:169;;;-1:-1:-1;;26907:11:0;;;26915:3;26864:169;;;-1:-1:-1;26990:1:0;;-1:-1:-1;27016:5:0;26864:169;26763:277;;;;;:::o;8374:471::-;8427:13;8457:7;8453:50;;-1:-1:-1;8481:10:0;;;;;;;;;;;;-1:-1:-1;;;8481:10:0;;;;;;8453:50;8522:2;8513:6;8554:69;8561:6;;8554:69;;8584:5;;8609:2;8604:7;;;;8554:69;;;8633:17;8663:3;8653:14;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;8653:14:0;87:34:-1;135:17;;-1:-1;8653:14:0;-1:-1:-1;8633:34:0;-1:-1:-1;;;8687:7:0;;8705:103;8712:7;;8705:103;;8769:2;8764;:7;8759:2;:12;8748:25;;8736:4;8741:3;;;;;;;8736:9;;;;;;;;;;;:37;-1:-1:-1;;;;;8736:37:0;;;;;;;;-1:-1:-1;8794:2:0;8788:8;;;;8705:103;;;-1:-1:-1;8832:4:0;-1:-1:-1;;;8374:471:0;;;;:::o;23924:638::-;24046:13;24072:20;24102:307;24136:16;:5;-1:-1:-1;;;;;24136:14:0;;:16::i;:::-;24172:20;;;;;;;;;;;;;-1:-1:-1;;;24172:20:0;;;24217:18;:7;:16;:18::i;:::-;24255;;;;;;;;;;;;;-1:-1:-1;;;24255:18:0;;;24298:16;:5;:14;:16::i;:::-;24334:18;;;;;;;;;;;;;-1:-1:-1;;;24334:18:0;;;24377:16;:5;:14;:16::i;:::-;24102:9;:307::i;:::-;24072:338;-1:-1:-1;24425:8:0;;24421:134;;24457:40;;;;;;;;;;;;;;-1:-1:-1;;;24457:40:0;;;24482:14;:3;:12;:14::i;:::-;24457:6;;:40;;:13;:40;:::i;:::-;24450:47;;;;;24421:134;24537:6;-1:-1:-1;23924:638:0;;;;;;;;:::o;9349:558::-;9442:13;9468:16;9493:2;9468:28;;9507:16;9532:2;9507:28;;9546:16;9571:2;9546:28;;9585:16;9640:3;:10;9627:3;:10;9614:3;:10;:23;:36;9604:47;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;9604:47:0;87:34:-1;135:17;;-1:-1;9604:47:0;-1:-1:-1;9585:66:0;-1:-1:-1;9662:6:0;;9683:55;9704:3;:10;9700:1;:14;9683:55;;;9732:3;9736:1;9732:6;;;;;;;;;;;;;;;;9721:3;9725;;;;;;9721:8;;;;;;;;;;;:17;-1:-1:-1;;;;;9721:17:0;;;;;;;;-1:-1:-1;9716:3:0;;9683:55;;;-1:-1:-1;9754:6:0;9749:55;9770:3;:10;9766:1;:14;9749:55;;;9798:3;9802:1;9798:6;;;;;;;;;;;;;;;;9787:3;9791;;;;;;9787:8;;;;;;;;;;;:17;-1:-1:-1;;;;;9787:17:0;;;;;;;;-1:-1:-1;9782:3:0;;9749:55;;;-1:-1:-1;9820:6:0;9815:55;9836:3;:10;9832:1;:14;9815:55;;;9864:3;9868:1;9864:6;;;;;;;;;;;;;;;;9853:3;9857;;;;;;9853:8;;;;;;;;;;;:17;-1:-1:-1;;;;;9853:17:0;;;;;;;;-1:-1:-1;9848:3:0;;9815:55;;;-1:-1:-1;9895:3:0;;9349:558;-1:-1:-1;;;;;;;;9349:558:0:o;10392:892::-;10557:12;10582:24;10697:3;:10;10684:3;:10;10671:3;:10;10658:3;:10;10645:3;:10;10632:3;:10;10619:3;:10;:23;:36;:49;:62;:75;:88;10609:99;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;10609:99:0;87:34:-1;135:17;;-1:-1;10609:99:0;-1:-1:-1;10582:126:0;-1:-1:-1;10719:6:0;;10740:63;10761:3;:10;10757:1;:14;10740:63;;;10797:3;10801:1;10797:6;;;;;;;;;;;;;;;;10778:11;10790:3;;;;;;10778:16;;;;;;;;;;;:25;-1:-1:-1;;;;;10778:25:0;;;;;;;;-1:-1:-1;10773:3:0;;10740:63;;;-1:-1:-1;10819:6:0;10814:63;10835:3;:10;10831:1;:14;10814:63;;;10871:3;10875:1;10871:6;;;;;;;;;;;;;;;;10852:11;10864:3;;;;;;10852:16;;;;;;;;;;;:25;-1:-1:-1;;;;;10852:25:0;;;;;;;;-1:-1:-1;10847:3:0;;10814:63;;;-1:-1:-1;10893:6:0;10888:63;10909:3;:10;10905:1;:14;10888:63;;;10945:3;10949:1;10945:6;;;;;;;;;;;;;;;;10926:11;10938:3;;;;;;10926:16;;;;;;;;;;;:25;-1:-1:-1;;;;;10926:25:0;;;;;;;;-1:-1:-1;10921:3:0;;10888:63;;;-1:-1:-1;10967:6:0;10962:63;10983:3;:10;10979:1;:14;10962:63;;;11019:3;11023:1;11019:6;;;;;;;;;;;;;;;;11000:11;11012:3;;;;;;11000:16;;;;;;;;;;;:25;-1:-1:-1;;;;;11000:25:0;;;;;;;;-1:-1:-1;10995:3:0;;10962:63;;;-1:-1:-1;11041:6:0;11036:63;11057:3;:10;11053:1;:14;11036:63;;;11093:3;11097:1;11093:6;;;;;;;;;;;;;;;;11074:11;11086:3;;;;;;11074:16;;;;;;;;;;;:25;-1:-1:-1;;;;;11074:25:0;;;;;;;;-1:-1:-1;11069:3:0;;11036:63;;;-1:-1:-1;11115:6:0;11110:63;11131:3;:10;11127:1;:14;11110:63;;;11167:3;11171:1;11167:6;;;;;;;;;;;;;;;;11148:11;11160:3;;;;;;11148:16;;;;;;;;;;;:25;-1:-1:-1;;;;;11148:25:0;;;;;;;;-1:-1:-1;11143:3:0;;11110:63;;;-1:-1:-1;11189:6:0;11184:63;11205:3;:10;11201:1;:14;11184:63;;;11241:3;11245:1;11241:6;;;;;;;;;;;;;;;;11222:11;11234:3;;;;;;11222:16;;;;;;;;;;;:25;-1:-1:-1;;;;;11222:25:0;;;;;;;;-1:-1:-1;11217:3:0;;11184:63;;;-1:-1:-1;11265:11:0;;10392:892;-1:-1:-1;;;;;;;;;10392:892:0:o;11321:483::-;11453:42;;;;;;;;;;;-1:-1:-1;;;11453:42:0;;;;11525:13;;11535:2;11525:13;;;11377;11525;;;;;;-1:-1:-1;;;;;11427:14:0;;;11453:42;11377:13;;11525;;;21:6:-1;;104:10;11525:13:0;87:34:-1;135:17;;-1:-1;11525:13:0;11506:32;;-1:-1:-1;;;11549:3:0;11553:1;11549:6;;;;;;;;;;;:12;-1:-1:-1;;;;;11549:12:0;;;;;;;;;-1:-1:-1;;;11572:3:0;11576:1;11572:6;;;;;;;;;;;:12;-1:-1:-1;;;;;11572:12:0;;;;;;;;-1:-1:-1;11600:9:0;11595:173;11619:2;11615:1;:6;11595:173;;;11656:8;11688:1;11671:5;11677:1;11681:2;11677:6;11671:13;;;;;;;;;;-1:-1:-1;;;;;11671:18:0;;;;11665:25;;11656:35;;;;;;;;;;;;;;;;;;11643:3;11649:1;11651;11649:3;11647:1;:5;11643:10;;;;;;;;;;;:48;-1:-1:-1;;;;;11643:48:0;;;;;;;;;11719:8;11734:5;11740:1;11744:2;11740:6;11734:13;;;;;;;11719:37;;11734:13;;;11750:4;11728:27;;11719:37;;;;;;;;;;;;;;11706:3;11712:1;11714;11712:3;11710:1;:5;11706:10;;;;;;;;;;;:50;-1:-1:-1;;;;;11706:50:0;;;;;;;;-1:-1:-1;11623:3:0;;11595:173;;24570:895;24738:12;24763:24;24878:3;:10;24865:3;:10;24852:3;:10;24839:3;:10;24826:3;:10;24813:3;:10;24800:3;:10;:23;:36;:49;:62;:75;:88;24790:99;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;24790:99:0;87:34:-1;135:17;;-1:-1;24790:99:0;-1:-1:-1;24763:126:0;-1:-1:-1;24900:6:0;;24921:63;24942:3;:10;24938:1;:14;24921:63;;;24978:3;24982:1;24978:6;;;;;;;;;;;;;;;;24959:11;24971:3;;;;;;24959:16;;;;;;;;;;;:25;-1:-1:-1;;;;;24959:25:0;;;;;;;;-1:-1:-1;24954:3:0;;24921:63;;;-1:-1:-1;25000:6:0;24995:63;25016:3;:10;25012:1;:14;24995:63;;;25052:3;25056:1;25052:6;;;;;;;;;;;;;;;;25033:11;25045:3;;;;;;25033:16;;;;;;;;;;;:25;-1:-1:-1;;;;;25033:25:0;;;;;;;;-1:-1:-1;25028:3:0;;24995:63;;;-1:-1:-1;25074:6:0;25069:63;25090:3;:10;25086:1;:14;25069:63;;;25126:3;25130:1;25126:6;;;;;;;;;;;;;;;;25107:11;25119:3;;;;;;25107:16;;;;;;;;;;;:25;-1:-1:-1;;;;;25107:25:0;;;;;;;;-1:-1:-1;25102:3:0;;25069:63;;;-1:-1:-1;25148:6:0;25143:63;25164:3;:10;25160:1;:14;25143:63;;;25200:3;25204:1;25200:6;;;;;;;;;;;;;;;;25181:11;25193:3;;;;;;25181:16;;;;;;;;;;;:25;-1:-1:-1;;;;;25181:25:0;;;;;;;;-1:-1:-1;25176:3:0;;25143:63;;;-1:-1:-1;25222:6:0;25217:63;25238:3;:10;25234:1;:14;25217:63;;;25274:3;25278:1;25274:6;;;;;;;;;;;;;;;;25255:11;25267:3;;;;;;25255:16;;;;;;;;;;;:25;-1:-1:-1;;;;;25255:25:0;;;;;;;;-1:-1:-1;25250:3:0;;25217:63;;;-1:-1:-1;25296:6:0;25291:63;25312:3;:10;25308:1;:14;25291:63;;;25348:3;25352:1;25348:6;;;;;;;;;;;;;;;;25329:11;25341:3;;;;;;25329:16;;;;;;;;;;;:25;-1:-1:-1;;;;;25329:25:0;;;;;;;;-1:-1:-1;25324:3:0;;25291:63;;;-1:-1:-1;25370:6:0;25365:63;25386:3;:10;25382:1;:14;25365:63;;;25422:3;25426:1;25422:6;;;;;;;;;;;;;;;;25403:11;25415:3;;;;;;25403:16;;;;;;;;;;;:25;-1:-1:-1;;;;;25403:25:0;;;;;;;;-1:-1:-1;25398:3:0;;25365:63;;5:130:-1;72:20;;97:33;72:20;97:33;;295:150;381:13;;399:41;381:13;399:41;;478:746;;614:3;607:4;599:6;595:17;591:27;581:2;;632:1;629;622:12;581:2;662:6;656:13;684:88;699:72;764:6;699:72;;;684:88;;;675:97;;789:5;814:6;807:5;800:21;844:4;836:6;832:17;822:27;;866:4;861:3;857:14;850:21;;919:6;966:3;958:4;950:6;946:17;941:3;937:27;934:36;931:2;;;983:1;980;973:12;931:2;1008:1;993:225;1018:6;1015:1;1012:13;993:225;;;1076:3;1098:56;1150:3;1138:10;1098:56;;;1086:69;;-1:-1;1178:4;1169:14;;;;1197;;;;;1040:1;1033:9;993:225;;;997:14;574:650;;;;;;;;1250:722;;1378:3;1371:4;1363:6;1359:17;1355:27;1345:2;;1396:1;1393;1386:12;1345:2;1426:6;1420:13;1448:80;1463:64;1520:6;1463:64;;1448:80;1439:89;;1545:5;1570:6;1563:5;1556:21;1600:4;1592:6;1588:17;1578:27;;1622:4;1617:3;1613:14;1606:21;;1675:6;1722:3;1714:4;1706:6;1702:17;1697:3;1693:27;1690:36;1687:2;;;1739:1;1736;1729:12;1687:2;1764:1;1749:217;1774:6;1771:1;1768:13;1749:217;;;1832:3;1854:48;1898:3;1886:10;1854:48;;;1842:61;;-1:-1;1926:4;1917:14;;;;1945;;;;;1796:1;1789:9;1749:217;;1980:128;2055:13;;2073:30;2055:13;2073:30;;2115:130;2182:20;;2207:33;2182:20;2207:33;;2252:162;2335:20;;2360:49;2335:20;2360:49;;2451:596;;2561:4;2549:9;2544:3;2540:19;2536:30;2533:2;;;2579:1;2576;2569:12;2533:2;2597:20;2612:4;2597:20;;;2588:29;-1:-1;2664:1;2696:47;2739:3;2719:9;2696:47;;;2671:73;;-1:-1;2802:2;2835:49;2880:3;2856:22;;;2835:49;;;2828:4;2821:5;2817:16;2810:75;2765:131;2943:2;2976:49;3021:3;3012:6;3001:9;2997:22;2976:49;;;2969:4;2962:5;2958:16;2951:75;2906:131;2527:520;;;;;3191:134;3269:13;;3287:33;3269:13;3287:33;;3332:126;3397:20;;3422:31;3397:20;3422:31;;3465:241;;3569:2;3557:9;3548:7;3544:23;3540:32;3537:2;;;3585:1;3582;3575:12;3537:2;3620:1;3637:53;3682:7;3662:9;3637:53;;3977:366;;;4098:2;4086:9;4077:7;4073:23;4069:32;4066:2;;;4114:1;4111;4104:12;4066:2;4149:1;4166:53;4211:7;4191:9;4166:53;;;4156:63;;4128:97;4256:2;4274:53;4319:7;4310:6;4299:9;4295:22;4274:53;;;4264:63;;4235:98;4060:283;;;;;;4350:408;;4498:2;4486:9;4477:7;4473:23;4469:32;4466:2;;;4514:1;4511;4504:12;4466:2;4549:24;;4593:18;4582:30;;4579:2;;;4625:1;4622;4615:12;4579:2;4645:97;4734:7;4725:6;4714:9;4710:22;4645:97;;4765:392;;4905:2;4893:9;4884:7;4880:23;4876:32;4873:2;;;4921:1;4918;4911:12;4873:2;4956:24;;5000:18;4989:30;;4986:2;;;5032:1;5029;5022:12;4986:2;5052:89;5133:7;5124:6;5113:9;5109:22;5052:89;;5164:257;;5276:2;5264:9;5255:7;5251:23;5247:32;5244:2;;;5292:1;5289;5282:12;5244:2;5327:1;5344:61;5397:7;5377:9;5344:61;;5428:1211;;;;;;;;;5696:3;5684:9;5675:7;5671:23;5667:33;5664:2;;;5713:1;5710;5703:12;5664:2;5748:1;5765:69;5826:7;5806:9;5765:69;;;5755:79;;5727:113;5871:2;5889:53;5934:7;5925:6;5914:9;5910:22;5889:53;;;5879:63;;5850:98;5979:2;5997:61;6050:7;6041:6;6030:9;6026:22;5997:61;;;5987:71;;5958:106;6095:2;6113:53;6158:7;6149:6;6138:9;6134:22;6113:53;;;6103:63;;6074:98;6203:3;6222:53;6267:7;6258:6;6247:9;6243:22;6222:53;;;6212:63;;6182:99;6312:3;6331:53;6376:7;6367:6;6356:9;6352:22;6331:53;;;6321:63;;6291:99;6421:3;6440:53;6485:7;6476:6;6465:9;6461:22;6440:53;;;6430:63;;6400:99;6530:3;6549:74;6615:7;6606:6;6595:9;6591:22;6549:74;;;6539:84;;6509:120;5658:981;;;;;;;;;;;;6646:241;;6750:2;6738:9;6729:7;6725:23;6721:32;6718:2;;;6766:1;6763;6756:12;6718:2;6801:1;6818:53;6863:7;6843:9;6818:53;;6894:263;;7009:2;6997:9;6988:7;6984:23;6980:32;6977:2;;;7025:1;7022;7015:12;6977:2;7060:1;7077:64;7133:7;7113:9;7077:64;;7164:142;7255:45;7294:5;7255:45;;;7250:3;7243:58;7237:69;;;7313:137;7412:32;7438:5;7412:32;;7577:104;7654:21;7669:5;7654:21;;7688:113;7771:24;7789:5;7771:24;;7808:110;7889:23;7906:5;7889:23;;7925:335;;8031:34;8059:5;8031:34;;;8077:70;8140:6;8135:3;8077:70;;;8070:77;;8152:52;8197:6;8192:3;8185:4;8178:5;8174:16;8152:52;;;8225:29;8247:6;8225:29;;;8216:39;;;;8011:249;-1:-1;;;8011:249;8267:188;8381:68;8443:5;8381:68;;9159:375;;9319:67;9383:2;9378:3;9319:67;;;9419:34;9399:55;;-1:-1;;;9483:2;9474:12;;9467:30;9525:2;9516:12;;9305:229;-1:-1;;9305:229;9543:327;;9703:67;9767:2;9762:3;9703:67;;;9803:29;9783:50;;9861:2;9852:12;;9689:181;-1:-1;;9689:181;9879:319;;10039:67;10103:2;10098:3;10039:67;;;-1:-1;;;10119:42;;10189:2;10180:12;;10025:173;-1:-1;;10025:173;10207:370;;10367:67;10431:2;10426:3;10367:67;;;10467:34;10447:55;;-1:-1;;;10531:2;10522:12;;10515:25;10568:2;10559:12;;10353:224;-1:-1;;10353:224;10586:332;;10746:67;10810:2;10805:3;10746:67;;;10846:34;10826:55;;10909:2;10900:12;;10732:186;-1:-1;;10732:186;10927:322;;11087:67;11151:2;11146:3;11087:67;;;-1:-1;;;11167:45;;11240:2;11231:12;;11073:176;-1:-1;;11073:176;11377:107;11456:22;11472:5;11456:22;;11491:213;11609:2;11594:18;;11623:71;11598:9;11667:6;11623:71;;11963:340;12117:2;12102:18;;12131:79;12106:9;12183:6;12131:79;;;12221:72;12289:2;12278:9;12274:18;12265:6;12221:72;;12310:579;12528:3;12513:19;;12543:79;12517:9;12595:6;12543:79;;;12633:72;12701:2;12690:9;12686:18;12677:6;12633:72;;;12716:80;12792:2;12781:9;12777:18;12768:6;12716:80;;;12807:72;12875:2;12864:9;12860:18;12851:6;12807:72;;12896:451;13078:2;13063:18;;13092:71;13067:9;13136:6;13092:71;;;13174:72;13242:2;13231:9;13227:18;13218:6;13174:72;;;13257:80;13333:2;13322:9;13318:18;13309:6;13257:80;;13354:563;13564:3;13549:19;;13579:71;13553:9;13623:6;13579:71;;13924:675;14162:3;14147:19;;14177:71;14151:9;14221:6;14177:71;;;14259:72;14327:2;14316:9;14312:18;14303:6;14259:72;;;14342:80;14418:2;14407:9;14403:18;14394:6;14342:80;;;14433:72;14501:2;14490:9;14486:18;14477:6;14433:72;;;14516:73;14584:3;14573:9;14569:19;14560:6;14516:73;;14606:201;14718:2;14703:18;;14732:65;14707:9;14770:6;14732:65;;14814:539;15012:3;14997:19;;15027:71;15001:9;15071:6;15027:71;;;15109:68;15173:2;15162:9;15158:18;15149:6;15109:68;;;15188:72;15256:2;15245:9;15241:18;15232:6;15188:72;;15360:209;15476:2;15461:18;;15490:69;15465:9;15532:6;15490:69;;15576:275;15725:2;15710:18;;15739:102;15714:9;15814:6;15739:102;;15858:911;16162:3;16147:19;;16177:87;16151:9;16237:6;16177:87;;;16275:80;16351:2;16340:9;16336:18;16327:6;16275:80;;;16366;16442:2;16431:9;16427:18;16418:6;16366:80;;;16457:72;16525:2;16514:9;16510:18;16501:6;16457:72;;;16540:73;16608:3;16597:9;16593:19;16584:6;16540:73;;;16662:9;16656:4;16652:20;16646:3;16635:9;16631:19;16624:49;16687:72;16754:4;16745:6;16687:72;;;16679:80;16133:636;-1:-1;;;;;;;;16133:636;17040:301;17178:2;17192:47;;;17163:18;;17253:78;17163:18;17317:6;17253:78;;17348:407;17539:2;17553:47;;;17524:18;;17614:131;17524:18;17614:131;;17762:407;17953:2;17967:47;;;17938:18;;18028:131;17938:18;18028:131;;18176:407;18367:2;18381:47;;;18352:18;;18442:131;18352:18;18442:131;;18590:407;18781:2;18795:47;;;18766:18;;18856:131;18766:18;18856:131;;19004:407;19195:2;19209:47;;;19180:18;;19270:131;19180:18;19270:131;;19418:407;19609:2;19623:47;;;19594:18;;19684:131;19594:18;19684:131;;19832:213;19950:2;19935:18;;19964:71;19939:9;20008:6;19964:71;;20052:256;20114:2;20108:9;20140:17;;;20215:18;20200:34;;20236:22;;;20197:62;20194:2;;;20272:1;20269;20262:12;20194:2;20288;20281:22;20092:216;;-1:-1;20092:216;20315:312;;20482:18;20474:6;20471:30;20468:2;;;20514:1;20511;20504:12;20468:2;-1:-1;20549:4;20537:17;;;20602:15;;20405:222;20945:117;21028:12;;20999:63;21199:162;21301:19;;;21350:4;21341:14;;21294:67;21541:91;;21603:24;21621:5;21603:24;;21745:85;21811:13;21804:21;;21787:43;21837:72;21899:5;21882:27;21916:144;-1:-1;;;;;;21977:78;;21960:100;22067:107;;22145:24;22163:5;22145:24;;22181:121;-1:-1;;;;;22243:54;;22226:76;22388:81;22459:4;22448:16;;22431:38;22476:129;;22563:37;22594:5;22563:37;;23792:268;23857:1;23864:101;23878:6;23875:1;23872:13;23864:101;;;23945:11;;;23939:18;23926:11;;;23919:39;23900:2;23893:10;23864:101;;;23980:6;23977:1;23974:13;23971:2;;;24045:1;24036:6;24031:3;24027:16;24020:27;23971:2;23841:219;;;;;24068:97;24156:2;24136:14;-1:-1;;24132:28;;24116:49;24173:117;24242:24;24260:5;24242:24;;;24235:5;24232:35;24222:2;;24281:1;24278;24271:12;24437:111;24503:21;24518:5;24503:21;;24555:117;24624:24;24642:5;24624:24;;24679:149;24764:40;24798:5;24764:40;;24959:113;25026:22;25042:5;25026:22;
Swarm Source
bzzr://a435fdac4192d9edd75cdf1caf6711785aca4139081c88b9aabc10b9f91be418
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.