Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,322 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Cancel Offer | 16403167 | 1136 days ago | IN | 0 ETH | 0.00074899 | ||||
| Cancel Offer | 16403136 | 1136 days ago | IN | 0 ETH | 0.00077497 | ||||
| Withdraw | 15204392 | 1309 days ago | IN | 0 ETH | 0.00029416 | ||||
| Cancel Offer | 15016168 | 1340 days ago | IN | 0 ETH | 0.00084804 | ||||
| Cancel Offer | 14957797 | 1350 days ago | IN | 0 ETH | 0.00198404 | ||||
| Cancel Offer | 14877893 | 1363 days ago | IN | 0 ETH | 0.00090708 | ||||
| Cancel Offer | 14877891 | 1363 days ago | IN | 0 ETH | 0.00090708 | ||||
| Cancel Offer | 14877884 | 1363 days ago | IN | 0 ETH | 0.0010294 | ||||
| Cancel Offer | 14781385 | 1379 days ago | IN | 0 ETH | 0.00101317 | ||||
| Cancel Offer | 14781375 | 1379 days ago | IN | 0 ETH | 0.00101317 | ||||
| Cancel Offer | 14781295 | 1379 days ago | IN | 0 ETH | 0.00122934 | ||||
| Cancel Offer | 14781295 | 1379 days ago | IN | 0 ETH | 0.0008868 | ||||
| Cancel Offer | 14781295 | 1379 days ago | IN | 0 ETH | 0.00101286 | ||||
| Cancel Offer | 14781295 | 1379 days ago | IN | 0 ETH | 0.0009644 | ||||
| Cancel Offer | 14781295 | 1379 days ago | IN | 0 ETH | 0.00075512 | ||||
| Cancel Offer | 14781210 | 1379 days ago | IN | 0 ETH | 0.00086689 | ||||
| Cancel Offer | 14781208 | 1379 days ago | IN | 0 ETH | 0.00092564 | ||||
| Cancel Offer | 14781181 | 1379 days ago | IN | 0 ETH | 0.00092354 | ||||
| Cancel Offer | 14781166 | 1379 days ago | IN | 0 ETH | 0.00111719 | ||||
| Cancel Offer | 14781162 | 1379 days ago | IN | 0 ETH | 0.00113858 | ||||
| Cancel Offer | 14780862 | 1379 days ago | IN | 0 ETH | 0.0011085 | ||||
| Cancel Offer | 14780861 | 1379 days ago | IN | 0 ETH | 0.00121664 | ||||
| Cancel Offer | 14780861 | 1379 days ago | IN | 0 ETH | 0.00106394 | ||||
| Cancel Offer | 14780818 | 1379 days ago | IN | 0 ETH | 0.00118024 | ||||
| Cancel Offer | 14780805 | 1379 days ago | IN | 0 ETH | 0.0011526 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 16403167 | 1136 days ago | 0.01 ETH | ||||
| Transfer | 16403136 | 1136 days ago | 0.02 ETH | ||||
| Transfer | 15204392 | 1309 days ago | 15.06 ETH | ||||
| Transfer | 15016168 | 1340 days ago | 0.02 ETH | ||||
| - | 14957797 | 1350 days ago | 0.02 ETH | ||||
| - | 14877893 | 1363 days ago | 0.2 ETH | ||||
| - | 14877891 | 1363 days ago | 0.2 ETH | ||||
| - | 14877884 | 1363 days ago | 0.2 ETH | ||||
| - | 14781295 | 1379 days ago | 0.01 ETH | ||||
| - | 14781295 | 1379 days ago | 0.009 ETH | ||||
| - | 14781295 | 1379 days ago | 0.01 ETH | ||||
| - | 14781295 | 1379 days ago | 0.01 ETH | ||||
| - | 14781295 | 1379 days ago | 0.009 ETH | ||||
| - | 14781210 | 1379 days ago | 0.01 ETH | ||||
| - | 14781208 | 1379 days ago | 0.01 ETH | ||||
| - | 14781181 | 1379 days ago | 0.01 ETH | ||||
| - | 14781166 | 1379 days ago | 0.014 ETH | ||||
| - | 14781162 | 1379 days ago | 0.015 ETH | ||||
| - | 14780862 | 1379 days ago | 0.015 ETH | ||||
| - | 14780861 | 1379 days ago | 0.01 ETH | ||||
| - | 14780861 | 1379 days ago | 0.01 ETH | ||||
| - | 14780818 | 1379 days ago | 0.012 ETH | ||||
| - | 14780805 | 1379 days ago | 0.012 ETH | ||||
| - | 14780805 | 1379 days ago | 0.013 ETH | ||||
| - | 14780784 | 1379 days ago | 0.01 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
RocketFactoryMarket
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
contract RocketFactoryMarket is Ownable, IERC721Receiver, ReentrancyGuard {
/*
EVENTS
*/
event ItemOnAuction(
uint256 timestamp,
uint256 indexed itemId,
uint8 indexed itemType,
Auction auction
);
event ItemClaimed(
uint256 timestamp,
uint256 indexed itemId,
uint8 indexed itemType,
Auction auction
);
event ItemBidded(
uint256 timestamp,
uint256 indexed itemId,
uint8 indexed itemType,
Auction auction
);
event ItemForSale(
uint256 timestamp,
uint256 indexed itemId,
uint8 indexed itemType,
Sale sale
);
event ItemSold(
uint256 timestamp,
uint256 indexed itemId,
uint8 indexed itemType,
address buyer,
Sale sale
);
event ItemSaleCancelled(
uint256 timestamp,
uint256 indexed itemId,
uint8 indexed itemType,
Sale sale
);
event TradeCreated(uint256 timestamp, Trade trade);
event TradeAccepted(uint256 timestamp, Trade trade);
event TradeCancelled(uint256 timestamp, Trade trade);
event TradeRejected(uint256 timestamp, Trade trade);
event OfferCreated(
uint256 timestamp,
uint256 indexed itemId,
uint8 indexed itemType,
Offer offer
);
event OfferAccepted(
uint256 timestamp,
uint256 indexed itemId,
uint8 indexed itemType,
Offer offer
);
event OfferCancelled(
uint256 timestamp,
uint256 indexed itemId,
uint8 indexed itemType,
Offer offer
);
event OfferRejected(
uint256 timestamp,
uint256 indexed itemId,
uint8 indexed itemType,
Offer offer
);
/*
STRUCTS
*/
struct Sale {
address seller;
uint16 itemId;
uint8 itemType;
uint32 endTimestamp;
address erc20;
uint256 price;
}
struct Auction {
address seller;
uint16 itemId;
uint8 itemType;
uint32 endTimestamp;
uint32 maxBidTimestamp;
address erc20;
address maxBidderAddress;
uint256 startPrice;
uint256 maxBidAmount;
}
struct Item {
uint16 itemId;
uint8 itemType;
}
struct Trade {
address offerer;
address offeree;
Item[] offering;
Item[] requesting;
}
struct Offer {
address offerer;
uint8 itemType;
uint16 itemId;
address offeree;
address erc20;
uint256 price;
}
mapping(uint8 => mapping(uint256 => Auction)) public itemsToAuction;
mapping(uint8 => mapping(uint256 => Sale)) public itemsToSale;
mapping(address => mapping(address => Trade)) public trades;
mapping(uint8 => mapping(uint256 => mapping(address => Offer))) public offers;
mapping(uint8 => address) itemTypeToTokenAddress;
mapping(address => bool) allowedErc20;
mapping(address => uint256) contractBalance;
uint256 ownerCutPercentage = 1000;
/*
MODIFIERS
*/
modifier isNotBeingTransacted(uint16 _itemId, uint8 _itemType) {
require(
IERC721(itemTypeToTokenAddress[_itemType]).ownerOf(_itemId) != address(this),
"The item is part of another transaction"
);
_;
}
modifier isOnSale(uint16 _itemId, uint8 _itemType) {
require(
itemsToSale[_itemType][_itemId].seller != address(0x0),
"The item is not for sale"
);
_;
}
modifier isNotOnSale(uint16 _itemId, uint8 _itemType) {
require(
itemsToSale[_itemType][_itemId].seller == address(0x0),
"The item is for sale"
);
_;
}
modifier isOnAuction(uint16 _itemId, uint8 _itemType) {
require(
itemsToAuction[_itemType][_itemId].seller != address(0x0),
"The item is not on auction"
);
_;
}
modifier isNotOnAuction(uint16 _itemId, uint8 _itemType) {
require(
itemsToAuction[_itemType][_itemId].seller == address(0x0),
"The item is on auction"
);
_;
}
modifier itemTypeExists(uint8 _itemType) {
require(
itemTypeToTokenAddress[_itemType] != address(0x0),
"The item type does not exist"
);
_;
}
modifier callerIsUser() {
require(tx.origin == msg.sender, "The caller is another contract");
_;
}
/*
MANAGEMENT METHODS
*/
constructor() {
allowedErc20[address(0x0)] = true;
}
function setItemTokenAddress(uint8 _itemType, address _itemTokenAddress)
external
onlyOwner
{
itemTypeToTokenAddress[_itemType] = _itemTokenAddress;
}
function setAllowedERC20(address _erc20, bool _allowed) external onlyOwner {
allowedErc20[_erc20] = _allowed;
}
function withdraw(address _erc20) external onlyOwner {
if (_erc20 == address(0x0)) {
payable(msg.sender).transfer(contractBalance[_erc20]);
contractBalance[_erc20] = 0;
} else {
IERC20(_erc20).transferFrom(address(this), msg.sender, contractBalance[_erc20]);
contractBalance[_erc20] = 0;
}
}
function returnItem(uint16 _itemId, uint8 _itemType, address _to) external onlyOwner {
IERC721(itemTypeToTokenAddress[_itemType]).safeTransferFrom(address(this), _to, _itemId);
}
function deleteAuction(uint16 _itemId, uint8 _itemType) external onlyOwner {
Auction memory auction = itemsToAuction[_itemType][_itemId];
if (auction.maxBidderAddress != address(0x0)) {
if (auction.erc20 == address(0x0)) {
payable(auction.maxBidderAddress).transfer(
auction.maxBidAmount
);
} else {
IERC20(auction.erc20).transfer(
auction.maxBidderAddress,
auction.maxBidAmount
);
}
}
IERC721(itemTypeToTokenAddress[_itemType]).safeTransferFrom(address(this), auction.seller, _itemId);
delete itemsToAuction[_itemType][_itemId];
}
function deleteSale(uint16 _itemId, uint8 _itemType) external onlyOwner {
Sale memory sale = itemsToSale[_itemType][_itemId];
IERC721(itemTypeToTokenAddress[_itemType]).safeTransferFrom(address(this), sale.seller, _itemId);
delete itemsToSale[_itemType][_itemId];
}
function checkBalance(address _erc20) external view onlyOwner returns (uint256) {
return contractBalance[_erc20];
}
function setOwnerCut(uint16 _ownerCutPercentage) external onlyOwner {
ownerCutPercentage = _ownerCutPercentage;
}
function onERC721Received(
address,
address,
uint256,
bytes memory
) external virtual override returns (bytes4) {
return this.onERC721Received.selector;
}
/*
SALES
*/
function createSale(
uint16 _itemId,
uint8 _itemType,
uint256 _price,
uint32 _endTimestamp,
address _erc20
)
external
itemTypeExists(_itemType)
isNotBeingTransacted(_itemId, _itemType)
{
IERC721 token = IERC721(itemTypeToTokenAddress[_itemType]);
require(
allowedErc20[_erc20] == true,
"The specified ERC20 token is not allowed"
);
require(
token.ownerOf(_itemId) == msg.sender,
"Only the item owner can create an auction"
);
require(_price > 0, "Minimum price must be above 0");
token.safeTransferFrom(msg.sender, address(this), _itemId);
Sale storage sale = itemsToSale[_itemType][_itemId];
sale.seller = msg.sender;
sale.erc20 = _erc20;
sale.itemId = _itemId;
sale.itemType = _itemType;
sale.price = _price;
sale.endTimestamp = _endTimestamp;
emit ItemForSale( uint32(block.timestamp % 2**32), _itemId, _itemType, sale);
}
function buy(
uint16 _itemId,
uint8 _itemType
)
external
payable
callerIsUser()
itemTypeExists(_itemType)
isOnSale(_itemId, _itemType)
{
Sale memory sale = itemsToSale[_itemType][_itemId];
require(msg.sender != sale.seller, "Can't buy on your own sale");
require( uint32(block.timestamp % 2**32) < sale.endTimestamp || sale.endTimestamp == 0, "Sale has finished already");
uint256 sellerCut = sale.price;
uint256 ownerCut = 0;
if (sale.seller != owner()) {
ownerCut = (sellerCut * ownerCutPercentage) / 10000;
sellerCut = sellerCut - ownerCut;
}
if (sale.erc20 == address(0x0)) {
require(
msg.value >= sale.price,
"Not enough Ether sent to complete the sale"
);
payable(sale.seller).transfer(sellerCut);
} else {
IERC20(sale.erc20).transferFrom(msg.sender, sale.seller, sellerCut);
IERC20(sale.erc20).transferFrom(msg.sender, address(this), ownerCut);
}
contractBalance[sale.erc20] += ownerCut;
delete itemsToSale[_itemType][_itemId];
IERC721(itemTypeToTokenAddress[_itemType]).safeTransferFrom(
address(this),
msg.sender,
_itemId
);
emit ItemSold( uint32(block.timestamp % 2**32), _itemId, _itemType, msg.sender, sale);
}
function cancelSale(uint16 _itemId, uint8 _itemType)
external
itemTypeExists(_itemType)
isOnSale(_itemId, _itemType)
{
Sale memory sale = itemsToSale[_itemType][_itemId];
require(
sale.seller == msg.sender,
"Only the creator can cancel the sale"
);
delete itemsToSale[_itemType][_itemId];
IERC721(itemTypeToTokenAddress[_itemType]).safeTransferFrom(
address(this),
msg.sender,
_itemId
);
emit ItemSaleCancelled( uint32(block.timestamp % 2**32), _itemId, _itemType, sale);
}
/*
AUCTIONS
*/
function createAuction(
uint16 _itemId,
uint8 _itemType,
uint256 _startPrice,
uint32 _endTimestamp,
address _erc20
)
external
itemTypeExists(_itemType)
isNotBeingTransacted(_itemId, _itemType)
{
IERC721 token = IERC721(itemTypeToTokenAddress[_itemType]);
require(
token.ownerOf(_itemId) == msg.sender,
"Only the item owner can create an auction"
);
require(
allowedErc20[_erc20] == true,
"The specified ERC20 token is not allowed"
);
token.safeTransferFrom(msg.sender, address(this), _itemId);
Auction storage auction = itemsToAuction[_itemType][_itemId];
auction.seller = msg.sender;
auction.itemId = _itemId;
auction.itemType = _itemType;
auction.startPrice = _startPrice;
auction.maxBidAmount = _startPrice;
auction.endTimestamp = _endTimestamp;
auction.erc20 = _erc20;
emit ItemOnAuction( uint32(block.timestamp % 2**32), _itemId, _itemType, auction);
}
function placeBid(
uint16 _itemId,
uint8 _itemType,
uint256 _bid
)
external
payable
callerIsUser()
nonReentrant()
isOnAuction(_itemId, _itemType)
{
Auction storage auction = itemsToAuction[_itemType][_itemId];
require(msg.sender != auction.seller, "Cant bid on your own auction");
require(
uint32(block.timestamp % 2**32) <= auction.endTimestamp,
"Auction has finished already"
);
uint256 bid = auction.erc20 == address(0x0) ? msg.value : _bid;
if (auction.maxBidderAddress == address(0x0)) {
require(
bid >= auction.startPrice,
"Not enough to top the current bid"
);
} else {
require(
bid > auction.maxBidAmount,
"Not enough to top the current bid"
);
}
if (auction.erc20 != address(0x0)) {
IERC20(auction.erc20).transferFrom(msg.sender, address(this), bid);
}
if (auction.maxBidderAddress != address(0x0)) {
if (auction.erc20 == address(0x0)) {
payable(auction.maxBidderAddress).transfer(
auction.maxBidAmount
);
} else {
IERC20(auction.erc20).transfer(
auction.maxBidderAddress,
auction.maxBidAmount
);
}
}
auction.maxBidderAddress = msg.sender;
auction.maxBidAmount = bid;
auction.maxBidTimestamp = uint32(block.timestamp % 2**32);
emit ItemBidded( uint32(block.timestamp % 2**32), _itemId, _itemType, auction);
}
function claim(uint16 _itemId, uint8 _itemType)
external
callerIsUser()
isOnAuction(_itemId, _itemType)
{
Auction memory auction = itemsToAuction[_itemType][_itemId];
require(
uint32(block.timestamp % 2**32) > auction.endTimestamp,
"Auction is not finished"
);
require(
auction.maxBidderAddress == msg.sender || auction.seller == msg.sender,
"Only the winner or seller can claim"
);
delete itemsToAuction[_itemType][_itemId];
if (auction.maxBidderAddress == address(0x0)) {
IERC721(itemTypeToTokenAddress[_itemType]).safeTransferFrom(
address(this),
auction.seller,
_itemId
);
return;
}
uint256 sellerCut = auction.maxBidAmount;
uint256 ownerCut = 0;
if (auction.seller != owner()) {
ownerCut = (sellerCut * ownerCutPercentage) / 10000;
sellerCut = sellerCut - ownerCut;
}
if (auction.erc20 != address(0x0)) {
IERC20(auction.erc20).transfer(auction.seller, sellerCut);
} else {
payable(auction.seller).transfer(sellerCut);
}
contractBalance[auction.erc20] += ownerCut;
IERC721(itemTypeToTokenAddress[_itemType]).safeTransferFrom(
address(this),
auction.maxBidderAddress,
_itemId
);
emit ItemClaimed( uint32(block.timestamp % 2**32), _itemId, _itemType, auction);
}
/*
TRADES
*/
function proposeTrade(
Item[] memory _offers,
Item[] memory _requests,
address _offeree
) external callerIsUser() {
Trade storage trade = trades[_offeree][msg.sender];
require(
trade.offerer == address(0x0),
"There is already a trade offering for the specified recipient"
);
for (uint256 i = 0; i < _offers.length; i++) {
require(
itemTypeToTokenAddress[_offers[i].itemType] != address(0x0),
"The item type does not exist"
);
IERC721(itemTypeToTokenAddress[_offers[i].itemType])
.safeTransferFrom(msg.sender, address(this), _offers[i].itemId);
trade.offering.push(Item(_offers[i].itemId, _offers[i].itemType));
}
for (uint256 i = 0; i < _requests.length; i++) {
require(
itemTypeToTokenAddress[_requests[i].itemType] != address(0x0),
"The item type does not exist"
);
require(
IERC721(itemTypeToTokenAddress[_requests[i].itemType]).ownerOf(
_requests[i].itemId
) == _offeree,
"A requested item does not belong to the specified wallet"
);
trade.requesting.push(
Item(_requests[i].itemId, _requests[i].itemType)
);
}
trade.offerer = msg.sender;
trade.offeree = _offeree;
emit TradeCreated( uint32(block.timestamp % 2**32), trade);
}
function acceptTrade(address _offerer) external callerIsUser() {
Trade memory trade = trades[msg.sender][_offerer];
require(
trade.offerer != address(0x0),
"No received trade offering found for the specified address"
);
delete trades[msg.sender][_offerer];
for (uint256 i = 0; i < trade.offering.length; i++) {
IERC721(itemTypeToTokenAddress[trade.offering[i].itemType])
.safeTransferFrom(
address(this),
msg.sender,
trade.offering[i].itemId
);
}
for (uint256 i = 0; i < trade.requesting.length; i++) {
delete itemsToSale[trade.requesting[i].itemType][trade.requesting[i].itemId];
IERC721(itemTypeToTokenAddress[trade.requesting[i].itemType])
.safeTransferFrom(
msg.sender,
trade.offerer,
trade.requesting[i].itemId
);
}
emit TradeAccepted( uint32(block.timestamp % 2**32), trade);
}
function cancelTrade(address _offeree) external callerIsUser() {
Trade memory trade = trades[_offeree][msg.sender];
require(
trade.offerer != address(0x0),
"No sent trade offering found for the specified address"
);
delete trades[_offeree][msg.sender];
for (uint256 i = 0; i < trade.offering.length; i++) {
IERC721(itemTypeToTokenAddress[trade.offering[i].itemType])
.safeTransferFrom(
address(this),
trade.offerer,
trade.offering[i].itemId
);
}
emit TradeCancelled( uint32(block.timestamp % 2**32), trade);
}
function rejectTrade(address _offerer) external callerIsUser() {
Trade memory trade = trades[msg.sender][_offerer];
require(
trade.offerer != address(0x0),
"No received trade offering found for the specified address"
);
delete trades[msg.sender][_offerer];
for (uint256 i = 0; i < trade.offering.length; i++) {
IERC721(itemTypeToTokenAddress[trade.offering[i].itemType])
.safeTransferFrom(
address(this),
trade.offerer,
trade.offering[i].itemId
);
}
emit TradeRejected( uint32(block.timestamp % 2**32), trade);
}
/*
OFFERS
*/
function makeAnOffer(
uint16 _itemId,
uint8 _itemType,
uint256 _price,
address _erc20
) external payable callerIsUser() nonReentrant() isNotBeingTransacted(_itemId, _itemType) {
require(
itemTypeToTokenAddress[_itemType] != address(0x0),
"The item type does not exist"
);
address tokenOwner = IERC721(itemTypeToTokenAddress[_itemType]).ownerOf(_itemId);
uint256 price = _erc20 == address(0x0) ? msg.value : _price;
Offer storage offer = offers[_itemType][_itemId][msg.sender];
require(offer.offerer == address(0x0), "There is already an offer made by you for this item.");
offer.offerer = msg.sender;
offer.offeree = tokenOwner;
offer.price = price;
offer.itemId = _itemId;
offer.itemType = _itemType;
offer.erc20 = _erc20;
if (_erc20 != address(0x0)) {
IERC20(_erc20).transferFrom(msg.sender, address(this), price);
}
emit OfferCreated( uint32(block.timestamp % 2**32), offer.itemId, offer.itemType, offer);
}
function cancelOffer(uint8 _itemType, uint16 _itemId)
external
callerIsUser()
nonReentrant()
{
Offer memory offer = offers[_itemType][_itemId][msg.sender];
delete offers[_itemType][_itemId][msg.sender];
// NOTE: Should check offer exists before
if (offer.erc20 != address(0x0)) {
IERC20(offer.erc20).transfer(msg.sender, offer.price);
} else {
payable(msg.sender).transfer(offer.price);
}
emit OfferCancelled(
uint32(block.timestamp % 2**32),
offer.itemId,
offer.itemType,
offer
);
}
function acceptOffer(address _offerer, uint8 _itemType, uint16 _itemId) external callerIsUser() isNotBeingTransacted(_itemId, _itemType) {
Offer memory offer = offers[_itemType][_itemId][_offerer];
delete offers[_itemType][_itemId][_offerer];
IERC721(itemTypeToTokenAddress[offer.itemType]).safeTransferFrom(
msg.sender,
offer.offerer,
offer.itemId
);
uint256 sellerCut = offer.price;
uint256 ownerCut = 0;
if (offer.offeree != owner()) {
ownerCut = (sellerCut * ownerCutPercentage) / 10000;
sellerCut = sellerCut - ownerCut;
}
if (offer.erc20 != address(0x0)) {
IERC20(offer.erc20).transfer(msg.sender, sellerCut);
} else {
payable(msg.sender).transfer(sellerCut);
}
contractBalance[offer.erc20] += ownerCut;
emit OfferAccepted(
uint32(block.timestamp % 2**32),
offer.itemId,
offer.itemType,
offer
);
}
function rejectOffer(address _offerer, uint8 _itemType, uint16 _itemId)
external
callerIsUser()
nonReentrant()
{
Offer memory offer = offers[_itemType][_itemId][_offerer];
delete offers[_itemType][_itemId][_offerer];
if (offer.erc20 != address(0x0)) {
IERC20(offer.erc20).transfer(offer.offerer, offer.price);
} else {
payable(offer.offerer).transfer(offer.price);
}
emit OfferRejected(
uint32(block.timestamp % 2**32),
offer.itemId,
offer.itemType,
offer
);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the 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 virtual 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 virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor () {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and make it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
*/
function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}{
"remappings": [],
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "istanbul",
"libraries": {},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":true,"internalType":"uint8","name":"itemType","type":"uint8"},{"components":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"},{"internalType":"uint32","name":"endTimestamp","type":"uint32"},{"internalType":"uint32","name":"maxBidTimestamp","type":"uint32"},{"internalType":"address","name":"erc20","type":"address"},{"internalType":"address","name":"maxBidderAddress","type":"address"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"maxBidAmount","type":"uint256"}],"indexed":false,"internalType":"struct RocketFactoryMarket.Auction","name":"auction","type":"tuple"}],"name":"ItemBidded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":true,"internalType":"uint8","name":"itemType","type":"uint8"},{"components":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"},{"internalType":"uint32","name":"endTimestamp","type":"uint32"},{"internalType":"uint32","name":"maxBidTimestamp","type":"uint32"},{"internalType":"address","name":"erc20","type":"address"},{"internalType":"address","name":"maxBidderAddress","type":"address"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"maxBidAmount","type":"uint256"}],"indexed":false,"internalType":"struct RocketFactoryMarket.Auction","name":"auction","type":"tuple"}],"name":"ItemClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":true,"internalType":"uint8","name":"itemType","type":"uint8"},{"components":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"},{"internalType":"uint32","name":"endTimestamp","type":"uint32"},{"internalType":"address","name":"erc20","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"indexed":false,"internalType":"struct RocketFactoryMarket.Sale","name":"sale","type":"tuple"}],"name":"ItemForSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":true,"internalType":"uint8","name":"itemType","type":"uint8"},{"components":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"},{"internalType":"uint32","name":"endTimestamp","type":"uint32"},{"internalType":"uint32","name":"maxBidTimestamp","type":"uint32"},{"internalType":"address","name":"erc20","type":"address"},{"internalType":"address","name":"maxBidderAddress","type":"address"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"maxBidAmount","type":"uint256"}],"indexed":false,"internalType":"struct RocketFactoryMarket.Auction","name":"auction","type":"tuple"}],"name":"ItemOnAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":true,"internalType":"uint8","name":"itemType","type":"uint8"},{"components":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"},{"internalType":"uint32","name":"endTimestamp","type":"uint32"},{"internalType":"address","name":"erc20","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"indexed":false,"internalType":"struct RocketFactoryMarket.Sale","name":"sale","type":"tuple"}],"name":"ItemSaleCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":true,"internalType":"uint8","name":"itemType","type":"uint8"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"components":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"},{"internalType":"uint32","name":"endTimestamp","type":"uint32"},{"internalType":"address","name":"erc20","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"indexed":false,"internalType":"struct RocketFactoryMarket.Sale","name":"sale","type":"tuple"}],"name":"ItemSold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":true,"internalType":"uint8","name":"itemType","type":"uint8"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"uint8","name":"itemType","type":"uint8"},{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"address","name":"offeree","type":"address"},{"internalType":"address","name":"erc20","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"indexed":false,"internalType":"struct RocketFactoryMarket.Offer","name":"offer","type":"tuple"}],"name":"OfferAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":true,"internalType":"uint8","name":"itemType","type":"uint8"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"uint8","name":"itemType","type":"uint8"},{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"address","name":"offeree","type":"address"},{"internalType":"address","name":"erc20","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"indexed":false,"internalType":"struct RocketFactoryMarket.Offer","name":"offer","type":"tuple"}],"name":"OfferCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":true,"internalType":"uint8","name":"itemType","type":"uint8"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"uint8","name":"itemType","type":"uint8"},{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"address","name":"offeree","type":"address"},{"internalType":"address","name":"erc20","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"indexed":false,"internalType":"struct RocketFactoryMarket.Offer","name":"offer","type":"tuple"}],"name":"OfferCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":true,"internalType":"uint8","name":"itemType","type":"uint8"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"uint8","name":"itemType","type":"uint8"},{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"address","name":"offeree","type":"address"},{"internalType":"address","name":"erc20","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"indexed":false,"internalType":"struct RocketFactoryMarket.Offer","name":"offer","type":"tuple"}],"name":"OfferRejected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"offeree","type":"address"},{"components":[{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"}],"internalType":"struct RocketFactoryMarket.Item[]","name":"offering","type":"tuple[]"},{"components":[{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"}],"internalType":"struct RocketFactoryMarket.Item[]","name":"requesting","type":"tuple[]"}],"indexed":false,"internalType":"struct RocketFactoryMarket.Trade","name":"trade","type":"tuple"}],"name":"TradeAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"offeree","type":"address"},{"components":[{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"}],"internalType":"struct RocketFactoryMarket.Item[]","name":"offering","type":"tuple[]"},{"components":[{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"}],"internalType":"struct RocketFactoryMarket.Item[]","name":"requesting","type":"tuple[]"}],"indexed":false,"internalType":"struct RocketFactoryMarket.Trade","name":"trade","type":"tuple"}],"name":"TradeCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"offeree","type":"address"},{"components":[{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"}],"internalType":"struct RocketFactoryMarket.Item[]","name":"offering","type":"tuple[]"},{"components":[{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"}],"internalType":"struct RocketFactoryMarket.Item[]","name":"requesting","type":"tuple[]"}],"indexed":false,"internalType":"struct RocketFactoryMarket.Trade","name":"trade","type":"tuple"}],"name":"TradeCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"offeree","type":"address"},{"components":[{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"}],"internalType":"struct RocketFactoryMarket.Item[]","name":"offering","type":"tuple[]"},{"components":[{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"}],"internalType":"struct RocketFactoryMarket.Item[]","name":"requesting","type":"tuple[]"}],"indexed":false,"internalType":"struct RocketFactoryMarket.Trade","name":"trade","type":"tuple"}],"name":"TradeRejected","type":"event"},{"inputs":[{"internalType":"address","name":"_offerer","type":"address"},{"internalType":"uint8","name":"_itemType","type":"uint8"},{"internalType":"uint16","name":"_itemId","type":"uint16"}],"name":"acceptOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_offerer","type":"address"}],"name":"acceptTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_itemId","type":"uint16"},{"internalType":"uint8","name":"_itemType","type":"uint8"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_itemType","type":"uint8"},{"internalType":"uint16","name":"_itemId","type":"uint16"}],"name":"cancelOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_itemId","type":"uint16"},{"internalType":"uint8","name":"_itemType","type":"uint8"}],"name":"cancelSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_offeree","type":"address"}],"name":"cancelTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20","type":"address"}],"name":"checkBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_itemId","type":"uint16"},{"internalType":"uint8","name":"_itemType","type":"uint8"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_itemId","type":"uint16"},{"internalType":"uint8","name":"_itemType","type":"uint8"},{"internalType":"uint256","name":"_startPrice","type":"uint256"},{"internalType":"uint32","name":"_endTimestamp","type":"uint32"},{"internalType":"address","name":"_erc20","type":"address"}],"name":"createAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_itemId","type":"uint16"},{"internalType":"uint8","name":"_itemType","type":"uint8"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint32","name":"_endTimestamp","type":"uint32"},{"internalType":"address","name":"_erc20","type":"address"}],"name":"createSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_itemId","type":"uint16"},{"internalType":"uint8","name":"_itemType","type":"uint8"}],"name":"deleteAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_itemId","type":"uint16"},{"internalType":"uint8","name":"_itemType","type":"uint8"}],"name":"deleteSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"itemsToAuction","outputs":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"},{"internalType":"uint32","name":"endTimestamp","type":"uint32"},{"internalType":"uint32","name":"maxBidTimestamp","type":"uint32"},{"internalType":"address","name":"erc20","type":"address"},{"internalType":"address","name":"maxBidderAddress","type":"address"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"maxBidAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"itemsToSale","outputs":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"},{"internalType":"uint32","name":"endTimestamp","type":"uint32"},{"internalType":"address","name":"erc20","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_itemId","type":"uint16"},{"internalType":"uint8","name":"_itemType","type":"uint8"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"address","name":"_erc20","type":"address"}],"name":"makeAnOffer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"offers","outputs":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"uint8","name":"itemType","type":"uint8"},{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"address","name":"offeree","type":"address"},{"internalType":"address","name":"erc20","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_itemId","type":"uint16"},{"internalType":"uint8","name":"_itemType","type":"uint8"},{"internalType":"uint256","name":"_bid","type":"uint256"}],"name":"placeBid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"}],"internalType":"struct RocketFactoryMarket.Item[]","name":"_offers","type":"tuple[]"},{"components":[{"internalType":"uint16","name":"itemId","type":"uint16"},{"internalType":"uint8","name":"itemType","type":"uint8"}],"internalType":"struct RocketFactoryMarket.Item[]","name":"_requests","type":"tuple[]"},{"internalType":"address","name":"_offeree","type":"address"}],"name":"proposeTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_offerer","type":"address"},{"internalType":"uint8","name":"_itemType","type":"uint8"},{"internalType":"uint16","name":"_itemId","type":"uint16"}],"name":"rejectOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_offerer","type":"address"}],"name":"rejectTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_itemId","type":"uint16"},{"internalType":"uint8","name":"_itemType","type":"uint8"},{"internalType":"address","name":"_to","type":"address"}],"name":"returnItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20","type":"address"},{"internalType":"bool","name":"_allowed","type":"bool"}],"name":"setAllowedERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_itemType","type":"uint8"},{"internalType":"address","name":"_itemTokenAddress","type":"address"}],"name":"setItemTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_ownerCutPercentage","type":"uint16"}],"name":"setOwnerCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"trades","outputs":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"offeree","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526103e860095534801561001657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060018080556000805260076020527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df805460ff19169091179055615441806100a16000396000f3fe6080604052600436106101cd5760003560e01c806387ac34b4116100f7578063d7037bab11610095578063f2fde38b11610064578063f2fde38b14610782578063f5d1dad6146107a2578063f716b3f1146107c2578063ff0400cb146107e257600080fd5b8063d7037bab14610702578063dd8ef66b14610722578063dfa02c3514610742578063e6edf9731461076257600080fd5b80639874e323116100d15780639874e3231461068f578063b7966efc146106a2578063bf31eb0b146106c2578063c0b37d65146106e257600080fd5b806387ac34b41461062757806389db9245146106475780638da5cb5b1461066757600080fd5b806352767ac31161016f578063728481bb1161013e578063728481bb146105b457806375fd7b66146105c757806378150b06146105e75780638319da071461060757600080fd5b806352767ac3146104e55780635f51522614610505578063715018a6146105335780637240976c1461054857600080fd5b8063150b7a02116101ab578063150b7a02146103b1578063205fc152146103ea57806344759726146104b257806351cff8d9146104c557600080fd5b806304f5d1a7146101d257806306df4a13146102ce5780630ed3fedf1461038f575b600080fd5b3480156101de57600080fd5b506102616101ed366004614be9565b60026020818152600093845260408085209091529183529120805460018201549282015460038301546004909301546001600160a01b038084169561ffff600160a01b8604169560ff600160b01b8704169563ffffffff600160b81b8204811696600160d81b909204169492841693169189565b604080516001600160a01b039a8b16815261ffff90991660208a015260ff9097169688019690965263ffffffff9485166060880152939092166080860152851660a08501529390931660c083015260e0820192909252610100810191909152610120015b60405180910390f35b3480156102da57600080fd5b506103466102e9366004614c12565b600560209081526000938452604080852082529284528284209052825290208054600182015460028301546003909301546001600160a01b0380841694600160a01b850460ff1694600160a81b900461ffff169382169291169086565b604080516001600160a01b03978816815260ff909616602087015261ffff90941693850193909352908416606084015292909216608082015260a081019190915260c0016102c5565b34801561039b57600080fd5b506103af6103aa366004614bc0565b610802565b005b3480156103bd57600080fd5b506103d16103cc36600461486c565b610a3d565b6040516001600160e01b031990911681526020016102c5565b3480156103f657600080fd5b50610464610405366004614be9565b60036020908152600092835260408084209091529082529020805460018201546002909201546001600160a01b0380831693600160a01b840461ffff1693600160b01b810460ff1693600160b81b90910463ffffffff16929091169086565b604080516001600160a01b03978816815261ffff909616602087015260ff9094169385019390935263ffffffff909116606084015292909216608082015260a081019190915260c0016102c5565b6103af6104c0366004614aec565b610a4e565b3480156104d157600080fd5b506103af6104e03660046147f5565b610e41565b3480156104f157600080fd5b506103af610500366004614955565b610f6a565b34801561051157600080fd5b506105256105203660046147f5565b6111af565b6040519081526020016102c5565b34801561053f57600080fd5b506103af6111fa565b34801561055457600080fd5b50610594610563366004614834565b6004602090815260009283526040808420909152908252902080546001909101546001600160a01b03918216911682565b604080516001600160a01b039384168152929091166020830152016102c5565b6103af6105c2366004614a44565b61126e565b3480156105d357600080fd5b506103af6105e23660046147f5565b6117e7565b3480156105f357600080fd5b506103af610602366004614928565b611b04565b34801561061357600080fd5b506103af610622366004614a2a565b611b59565b34801561063357600080fd5b506103af6106423660046147f5565b611b8c565b34801561065357600080fd5b506103af610662366004614a44565b612055565b34801561067357600080fd5b506000546040516001600160a01b0390911681526020016102c5565b6103af61069d366004614ab1565b6122f5565b3480156106ae57600080fd5b506103af6106bd366004614999565b612762565b3480156106ce57600080fd5b506103af6106dd366004614a44565b612d93565b3480156106ee57600080fd5b506103af6106fd366004614ba5565b61334d565b34801561070e57600080fd5b506103af61071d366004614a44565b6133aa565b34801561072e57600080fd5b506103af61073d3660046147f5565b613656565b34801561074e57600080fd5b506103af61075d366004614a44565b6139a7565b34801561076e57600080fd5b506103af61077d366004614b3a565b613b05565b34801561078e57600080fd5b506103af61079d3660046147f5565b613e85565b3480156107ae57600080fd5b506103af6107bd366004614b3a565b613f6f565b3480156107ce57600080fd5b506103af6107dd366004614955565b614295565b3480156107ee57600080fd5b506103af6107fd366004614a76565b61463f565b32331461082a5760405162461bcd60e51b815260040161082190614dba565b60405180910390fd5b6002600154141561084d5760405162461bcd60e51b815260040161082190614f42565b6002600181815560ff808516600090815260056020908152604080832061ffff808916855290835281842033808652818552838620845160c08101865281546001600160a01b038181168352600160a01b8204909a1682890152600160a81b810490951695810195909552978801805480891660608701529989018054808a166080880190815260038c01805460a08a0152948a52949097526001600160b81b03199094169098556001600160a01b03199889169097559690921690915592559151909116156109a957608081015160a082015160405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561096b57600080fd5b505af115801561097f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a39190614a0e565b506109db565b60a0810151604051339180156108fc02916000818181858888f193505050501580156109d9573d6000803e3d6000fd5b505b806020015160ff16816040015161ffff167f6d767aeadf0f1e73f966dd1ca16e6c13d6fd7d27c6da6290aae34ac360163fcc600160201b42610a1d9190615392565b84604051610a2c929190615071565b60405180910390a350506001805550565b630a85bd0160e11b5b949350505050565b323314610a6d5760405162461bcd60e51b815260040161082190614dba565b60026001541415610a905760405162461bcd60e51b815260040161082190614f42565b600260015560ff8316600090815260066020526040908190205490516331a9108f60e11b815261ffff861660048201528591859130916001600160a01b031690636352211e9060240160206040518083038186803b158015610af157600080fd5b505afa158015610b05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b299190614818565b6001600160a01b03161415610b505760405162461bcd60e51b815260040161082190614e32565b60ff85166000908152600660205260409020546001600160a01b0316610b885760405162461bcd60e51b815260040161082190614f0b565b60ff85166000908152600660205260408082205490516331a9108f60e11b815261ffff891660048201526001600160a01b0390911690636352211e9060240160206040518083038186803b158015610bdf57600080fd5b505afa158015610bf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c179190614818565b905060006001600160a01b03851615610c305785610c32565b345b60ff8816600090815260056020908152604080832061ffff8d168452825280832033845290915290208054919250906001600160a01b031615610cd45760405162461bcd60e51b815260206004820152603460248201527f546865726520697320616c726561647920616e206f66666572206d61646520626044820152733c903cb7ba903337b9103a3434b99034ba32b69760611b6064820152608401610821565b80546001820180546001600160a01b03199081166001600160a01b038781169190911790925560038401859055600162ffff0160a01b03199092163361ffff60a81b191617600160a81b61ffff8d16021760ff60a01b1916600160a01b60ff8c160217835560028301805490921690881690811790915515610dd4576040516323b872dd60e01b81526001600160a01b038716906323b872dd90610d8090339030908790600401614d4e565b602060405180830381600087803b158015610d9a57600080fd5b505af1158015610dae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd29190614a0e565b505b8054600160a01b810460ff1690600160a81b900461ffff167f539bf9e773440b9c4c2ef34e32743a189a1bd4f3276ac6dc6e54da3037cc9f71610e1b600160201b42615392565b84604051610e2a9291906150d7565b60405180910390a350506001805550505050505050565b6000546001600160a01b03163314610e6b5760405162461bcd60e51b815260040161082190614e79565b6001600160a01b038116610ed8576001600160a01b038116600090815260086020526040808220549051339282156108fc02929190818181858888f19350505050158015610ebd573d6000803e3d6000fd5b506001600160a01b0316600090815260086020526040812055565b6001600160a01b038116600081815260086020526040908190205490516323b872dd60e01b81526323b872dd91610f159130913391600401614d4e565b602060405180830381600087803b158015610f2f57600080fd5b505af1158015610f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebd9190614a0e565b50565b323314610f895760405162461bcd60e51b815260040161082190614dba565b60026001541415610fac5760405162461bcd60e51b815260040161082190614f42565b6002600181815560ff808516600090815260056020908152604080832061ffff80891685529083528184206001600160a01b03808c16808752828652848720855160c08101875281548085168252600160a01b8104909a1681890152600160a81b8a04909516958501959095529784018054808316606086015299850180548084166080870190815260038801805460a08901529b8a52949097526001600160b81b03199098169094556001600160a01b031998891690935596909216909355925591519091161561110d576080810151815160a083015160405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb90604401602060405180830381600087803b1580156110cf57600080fd5b505af11580156110e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111079190614a0e565b5061114c565b805160a08201516040516001600160a01b039092169181156108fc0291906000818181858888f1935050505015801561114a573d6000803e3d6000fd5b505b806020015160ff16816040015161ffff167f3a1a77be608eab6419f781085d374675858ad805c6f8578d9e686c34bd6f54c3600160201b4261118e9190615392565b8460405161119d929190615071565b60405180910390a35050600180555050565b600080546001600160a01b031633146111da5760405162461bcd60e51b815260040161082190614e79565b506001600160a01b0381166000908152600860205260409020545b919050565b6000546001600160a01b031633146112245760405162461bcd60e51b815260040161082190614e79565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b32331461128d5760405162461bcd60e51b815260040161082190614dba565b60ff811660009081526006602052604090205481906001600160a01b03166112c75760405162461bcd60e51b815260040161082190614f0b565b60ff8216600090815260036020908152604080832061ffff87168452909152902054839083906001600160a01b031661133d5760405162461bcd60e51b8152602060048201526018602482015277546865206974656d206973206e6f7420666f722073616c6560401b6044820152606401610821565b60ff848116600090815260036020908152604080832061ffff8a8116855290835292819020815160c08101835281546001600160a01b03808216808452600160a01b830490971695830195909552600160b01b810490961692810192909252600160b81b90940463ffffffff1660608201526001840154909116608082015260029092015460a08301523314156114165760405162461bcd60e51b815260206004820152601a60248201527f43616e277420627579206f6e20796f7572206f776e2073616c650000000000006044820152606401610821565b606081015163ffffffff1661142f600160201b42615392565b63ffffffff1610806114495750606081015163ffffffff16155b6114955760405162461bcd60e51b815260206004820152601960248201527f53616c65206861732066696e697368656420616c7265616479000000000000006044820152606401610821565b60a08101516000805483516001600160a01b039081169116146114dc57612710600954836114c39190615341565b6114cd919061532d565b90506114d98183615360565b91505b60808301516001600160a01b0316611594578260a001513410156115555760405162461bcd60e51b815260206004820152602a60248201527f4e6f7420656e6f7567682045746865722073656e7420746f20636f6d706c657460448201526965207468652073616c6560b01b6064820152608401610821565b82516040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561158e573d6000803e3d6000fd5b506116a6565b608083015183516040516323b872dd60e01b81526001600160a01b03909216916323b872dd916115cb913391908790600401614d4e565b602060405180830381600087803b1580156115e557600080fd5b505af11580156115f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161d9190614a0e565b5082608001516001600160a01b03166323b872dd3330846040518463ffffffff1660e01b815260040161165293929190614d4e565b602060405180830381600087803b15801561166c57600080fd5b505af1158015611680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a49190614a0e565b505b60808301516001600160a01b0316600090815260086020526040812080548392906116d2908490615315565b909155505060ff8716600081815260036020908152604080832061ffff8d168452825280832080546001600160d81b03191681556001810180546001600160a01b031916905560020183905592825260069052819020549051632142170760e11b81526001600160a01b03909116906342842e0e9061175990309033908d90600401614d27565b600060405180830381600087803b15801561177357600080fd5b505af1158015611787573d6000803e3d6000fd5b505060ff891691505061ffff89167fd50ac8d7416437e46d5ec60ffff44a1d231c2ce6acb0d2a1c6ef5a891be50e146117c4600160201b42615392565b33876040516117d593929190614fc2565b60405180910390a35050505050505050565b3233146118065760405162461bcd60e51b815260040161082190614dba565b3360009081526004602090815260408083206001600160a01b038581168552908352818420825160808101845281548316815260018201549092168285015260028101805484518187028101870186528181529395929486019392879084015b828210156118a9576000848152602090819020604080518082019091529084015461ffff8116825262010000900460ff1681830152825260019092019101611866565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015611919576000848152602090819020604080518082019091529084015461ffff8116825262010000900460ff16818301528252600190920191016118d6565b5050509152505080519091506001600160a01b031661194a5760405162461bcd60e51b815260040161082190614eae565b3360009081526004602090815260408083206001600160a01b0386168452909152812080546001600160a01b0319908116825560018201805490911690559061199660028301826146e5565b6119a46003830160006146e5565b505060005b816040015151811015611ab95760066000836040015183815181106119de57634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160ff1660ff16815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166342842e0e30846000015185604001518581518110611a4a57634e487b7160e01b600052603260045260246000fd5b6020026020010151600001516040518463ffffffff1660e01b8152600401611a7493929190614d27565b600060405180830381600087803b158015611a8e57600080fd5b505af1158015611aa2573d6000803e3d6000fd5b505050508080611ab190615377565b9150506119a9565b507f22c27435df9dc66ae0ee063f16c83a60d2c2cdbc57806e1df797388cd3bc3f82611ae9600160201b42615392565b82604051611af89291906151e6565b60405180910390a15050565b6000546001600160a01b03163314611b2e5760405162461bcd60e51b815260040161082190614e79565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611b835760405162461bcd60e51b815260040161082190614e79565b61ffff16600955565b323314611bab5760405162461bcd60e51b815260040161082190614dba565b3360009081526004602090815260408083206001600160a01b038581168552908352818420825160808101845281548316815260018201549092168285015260028101805484518187028101870186528181529395929486019392879084015b82821015611c4e576000848152602090819020604080518082019091529084015461ffff8116825262010000900460ff1681830152825260019092019101611c0b565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015611cbe576000848152602090819020604080518082019091529084015461ffff8116825262010000900460ff1681830152825260019092019101611c7b565b5050509152505080519091506001600160a01b0316611cef5760405162461bcd60e51b815260040161082190614eae565b3360009081526004602090815260408083206001600160a01b0386168452909152812080546001600160a01b03199081168255600182018054909116905590611d3b60028301826146e5565b611d496003830160006146e5565b505060005b816040015151811015611e5a576006600083604001518381518110611d8357634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160ff1660ff16815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166342842e0e303385604001518581518110611deb57634e487b7160e01b600052603260045260246000fd5b6020026020010151600001516040518463ffffffff1660e01b8152600401611e1593929190614d27565b600060405180830381600087803b158015611e2f57600080fd5b505af1158015611e43573d6000803e3d6000fd5b505050508080611e5290615377565b915050611d4e565b5060005b816060015151811015612025576003600083606001518381518110611e9357634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160ff1660ff168152602001908152602001600020600083606001518381518110611ed957634e487b7160e01b600052603260045260246000fd5b6020908102919091018101515161ffff168252810191909152604001600090812080546001600160d81b03191681556001810180546001600160a01b031916905560020181905560608301518051600692919084908110611f4a57634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160ff1660ff16815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166342842e0e33846000015185606001518581518110611fb657634e487b7160e01b600052603260045260246000fd5b6020026020010151600001516040518463ffffffff1660e01b8152600401611fe093929190614d27565b600060405180830381600087803b158015611ffa57600080fd5b505af115801561200e573d6000803e3d6000fd5b50505050808061201d90615377565b915050611e5e565b507f08298467cd01d6b6949cc065aa098a20468e3240ca930453f7f3067b456b7326611ae9600160201b42615392565b60ff811660009081526006602052604090205481906001600160a01b031661208f5760405162461bcd60e51b815260040161082190614f0b565b60ff8216600090815260036020908152604080832061ffff87168452909152902054839083906001600160a01b03166121055760405162461bcd60e51b8152602060048201526018602482015277546865206974656d206973206e6f7420666f722073616c6560401b6044820152606401610821565b60ff848116600090815260036020908152604080832061ffff8a8116855290835292819020815160c08101835281546001600160a01b03808216808452600160a01b830490971695830195909552600160b01b810490961692810192909252600160b81b90940463ffffffff1660608201526001840154909116608082015260029092015460a083015233146121e95760405162461bcd60e51b8152602060048201526024808201527f4f6e6c79207468652063726561746f722063616e2063616e63656c207468652060448201526373616c6560e01b6064820152608401610821565b60ff8516600081815260036020908152604080832061ffff8b168452825280832080546001600160d81b03191681556001810180546001600160a01b031916905560020183905592825260069052819020549051632142170760e11b81526001600160a01b03909116906342842e0e9061226b90309033908b90600401614d27565b600060405180830381600087803b15801561228557600080fd5b505af1158015612299573d6000803e3d6000fd5b505060ff871691505061ffff87167f390d6889e3c2d4b5e2345dc75b5443ec0d582facfbf14c54ba9a6b5c20af845d6122d6600160201b42615392565b846040516122e5929190615153565b60405180910390a3505050505050565b3233146123145760405162461bcd60e51b815260040161082190614dba565b600260015414156123375760405162461bcd60e51b815260040161082190614f42565b6002600181905560ff831660009081526020918252604080822061ffff871683529092522054839083906001600160a01b03166123b65760405162461bcd60e51b815260206004820152601a60248201527f546865206974656d206973206e6f74206f6e2061756374696f6e0000000000006044820152606401610821565b60ff8416600090815260026020908152604080832061ffff89168452909152902080546001600160a01b03163314156124315760405162461bcd60e51b815260206004820152601c60248201527f43616e7420626964206f6e20796f7572206f776e2061756374696f6e000000006044820152606401610821565b8054600160b81b900463ffffffff1661244e600160201b42615392565b63ffffffff1611156124a25760405162461bcd60e51b815260206004820152601c60248201527f41756374696f6e206861732066696e697368656420616c7265616479000000006044820152606401610821565b60018101546000906001600160a01b0316156124be57846124c0565b345b60028301549091506001600160a01b03166124fe5781600301548110156124f95760405162461bcd60e51b815260040161082190614df1565b612521565b816004015481116125215760405162461bcd60e51b815260040161082190614df1565b60018201546001600160a01b0316156125be5760018201546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061256a90339030908690600401614d4e565b602060405180830381600087803b15801561258457600080fd5b505af1158015612598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bc9190614a0e565b505b60028201546001600160a01b0316156126bd5760018201546001600160a01b031661262957600282015460048301546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612623573d6000803e3d6000fd5b506126bd565b6001820154600283015460048085015460405163a9059cbb60e01b81526001600160a01b0393841692810192909252602482015291169063a9059cbb90604401602060405180830381600087803b15801561268357600080fd5b505af1158015612697573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bb9190614a0e565b505b6002820180546001600160a01b03191633179055600482018190556126e6600160201b42615392565b825463ffffffff91909116600160d81b0263ffffffff60d81b1990911617825560ff861661ffff88167f8cdaefb1c27b6580be7fea84414c1d4516ee08a7452812e50447c147d1ad4b9b61273e600160201b42615392565b8560405161274d929190614fec565b60405180910390a35050600180555050505050565b3233146127815760405162461bcd60e51b815260040161082190614dba565b6001600160a01b038082166000908152600460209081526040808320338452909152902080549091161561281d5760405162461bcd60e51b815260206004820152603d60248201527f546865726520697320616c72656164792061207472616465206f66666572696e60448201527f6720666f72207468652073706563696669656420726563697069656e740000006064820152608401610821565b60005b8451811015612a4a5760006001600160a01b03166006600087848151811061285857634e487b7160e01b600052603260045260246000fd5b60209081029190910181015181015160ff168252810191909152604001600020546001600160a01b031614156128a05760405162461bcd60e51b815260040161082190614f0b565b600660008683815181106128c457634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160ff1660ff16815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166342842e0e333088858151811061292857634e487b7160e01b600052603260045260246000fd5b6020026020010151600001516040518463ffffffff1660e01b815260040161295293929190614d27565b600060405180830381600087803b15801561296c57600080fd5b505af1158015612980573d6000803e3d6000fd5b505050508160020160405180604001604052808784815181106129b357634e487b7160e01b600052603260045260246000fd5b60200260200101516000015161ffff1681526020018784815181106129e857634e487b7160e01b600052603260045260246000fd5b60209081029190910181015181015160ff90811690925283546001810185556000948552938190208351940180549390910151909116620100000262ffffff1990921661ffff9093169290921717905580612a4281615377565b915050612820565b5060005b8351811015612d1e5760006001600160a01b031660066000868481518110612a8657634e487b7160e01b600052603260045260246000fd5b60209081029190910181015181015160ff168252810191909152604001600020546001600160a01b03161415612ace5760405162461bcd60e51b815260040161082190614f0b565b826001600160a01b031660066000868481518110612afc57634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160ff1660ff16815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b0316636352211e868481518110612b5e57634e487b7160e01b600052603260045260246000fd5b6020908102919091010151516040516001600160e01b031960e084901b16815261ffff909116600482015260240160206040518083038186803b158015612ba457600080fd5b505afa158015612bb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bdc9190614818565b6001600160a01b031614612c585760405162461bcd60e51b815260206004820152603860248201527f4120726571756573746564206974656d20646f6573206e6f742062656c6f6e6760448201527f20746f20746865207370656369666965642077616c6c657400000000000000006064820152608401610821565b816003016040518060400160405280868481518110612c8757634e487b7160e01b600052603260045260246000fd5b60200260200101516000015161ffff168152602001868481518110612cbc57634e487b7160e01b600052603260045260246000fd5b60209081029190910181015181015160ff90811690925283546001810185556000948552938190208351940180549390910151909116620100000262ffffff1990921661ffff9093169290921717905580612d1681615377565b915050612a4e565b508054336001600160a01b03199182161782556001820180549091166001600160a01b0384161790557f78991cf873b10fa6351d7c3810220d2ac6c600249d6ede4d6fa3db2eb6175748612d76600160201b42615392565b82604051612d85929190615254565b60405180910390a150505050565b323314612db25760405162461bcd60e51b815260040161082190614dba565b60ff8116600090815260026020908152604080832061ffff86168452909152902054829082906001600160a01b0316612e2d5760405162461bcd60e51b815260206004820152601a60248201527f546865206974656d206973206e6f74206f6e2061756374696f6e0000000000006044820152606401610821565b60ff808416600090815260026020818152604080842061ffff808b1686529083529381902081516101208101835281546001600160a01b038082168352600160a01b820490971694820194909452600160b01b84049096169186019190915263ffffffff600160b81b8304811660608701819052600160d81b9093041660808601526001810154841660a08601529182015490921660c0840152600381015460e084015260040154610100830152612ee9600160201b42615392565b63ffffffff1611612f3c5760405162461bcd60e51b815260206004820152601760248201527f41756374696f6e206973206e6f742066696e69736865640000000000000000006044820152606401610821565b60c08101516001600160a01b0316331480612f60575080516001600160a01b031633145b612fb85760405162461bcd60e51b815260206004820152602360248201527f4f6e6c79207468652077696e6e6572206f722073656c6c65722063616e20636c60448201526261696d60e81b6064820152608401610821565b60ff8416600090815260026020818152604080842061ffff8a168552909152822080546001600160f81b03191681556001810180546001600160a01b03199081169091559181018054909216909155600381018290556004015560c08101516001600160a01b03166130a15760ff8416600090815260066020526040908190205482519151632142170760e11b81526001600160a01b03909116916342842e0e916130699130918a90600401614d27565b600060405180830381600087803b15801561308357600080fd5b505af1158015613097573d6000803e3d6000fd5b5050505050613347565b6101008101516000805483516001600160a01b039081169116146130e957612710600954836130d09190615341565b6130da919061532d565b90506130e68183615360565b91505b60a08301516001600160a01b03161561318b5760a0830151835160405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291169063a9059cbb90604401602060405180830381600087803b15801561314d57600080fd5b505af1158015613161573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131859190614a0e565b506131c6565b82516040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156131c4573d6000803e3d6000fd5b505b60a08301516001600160a01b0316600090815260086020526040812080548392906131f2908490615315565b909155505060ff8616600090815260066020526040908190205460c08501519151632142170760e11b81526001600160a01b03909116916342842e0e9161323f9130918c90600401614d27565b600060405180830381600087803b15801561325957600080fd5b505af115801561326d573d6000803e3d6000fd5b505060ff881691505061ffff88167f099264ce4472d95ceda17363bfeac04a0527feb76fd93e080621199e3cddf0056132aa600160201b42615392565b6040805163ffffffff928316815288516001600160a01b039081166020808401919091528a015161ffff16828401529189015160ff16606080830191909152890151831660808083019190915289015190921660a080840191909152880151811660c0808401919091528801511660e080830191909152870151610100808301919091528701516101208201526101400160405180910390a35050505b50505050565b6000546001600160a01b031633146133775760405162461bcd60e51b815260040161082190614e79565b60ff91909116600090815260066020526040902080546001600160a01b0319166001600160a01b03909216919091179055565b6000546001600160a01b031633146133d45760405162461bcd60e51b815260040161082190614e79565b60ff808216600090815260026020818152604080842061ffff80891686529083529381902081516101208101835281546001600160a01b038082168352600160a01b820490971694820194909452600160b01b84049096169186019190915263ffffffff600160b81b830481166060870152600160d81b90920490911660808501526001810154831660a08501529081015490911660c08301819052600382015460e08401526004909101546101008301521561357a5760a08101516001600160a01b03166134e5578060c001516001600160a01b03166108fc8261010001519081150290604051600060405180830381858888f193505050501580156134df573d6000803e3d6000fd5b5061357a565b60a081015160c082015161010083015160405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb90604401602060405180830381600087803b15801561354057600080fd5b505af1158015613554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135789190614a0e565b505b60ff8216600090815260066020526040908190205482519151632142170760e11b81526001600160a01b03909116916342842e0e916135bf9130918890600401614d27565b600060405180830381600087803b1580156135d957600080fd5b505af11580156135ed573d6000803e3d6000fd5b50505060ff909216600090815260026020818152604080842061ffff909716845295905293812080546001600160f81b03191681556001810180546001600160a01b03199081169091559481018054909516909455600384018190556004909301929092555050565b3233146136755760405162461bcd60e51b815260040161082190614dba565b6001600160a01b038082166000908152600460209081526040808320338452825280832081516080810183528154861681526001820154909516858401526002810180548351818602810186018552818152959695929493860193879084015b82821015613718576000848152602090819020604080518082019091529084015461ffff8116825262010000900460ff16818301528252600190920191016136d5565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015613788576000848152602090819020604080518082019091529084015461ffff8116825262010000900460ff1681830152825260019092019101613745565b5050509152505080519091506001600160a01b03166138085760405162461bcd60e51b815260206004820152603660248201527f4e6f2073656e74207472616465206f66666572696e6720666f756e6420666f726044820152752074686520737065636966696564206164647265737360501b6064820152608401610821565b6001600160a01b0382166000908152600460209081526040808320338452909152812080546001600160a01b0319908116825560018201805490911690559061385460028301826146e5565b6138626003830160006146e5565b505060005b81604001515181101561397757600660008360400151838151811061389c57634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160ff1660ff16815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166342842e0e3084600001518560400151858151811061390857634e487b7160e01b600052603260045260246000fd5b6020026020010151600001516040518463ffffffff1660e01b815260040161393293929190614d27565b600060405180830381600087803b15801561394c57600080fd5b505af1158015613960573d6000803e3d6000fd5b50505050808061396f90615377565b915050613867565b507f0fde94ccaba4cbc02c902e226a09e67896290e8b41c9f60c4f4184e9ff36d849611ae9600160201b42615392565b6000546001600160a01b031633146139d15760405162461bcd60e51b815260040161082190614e79565b60ff818116600081815260036020908152604080832061ffff8881168552908352818420825160c08101845281546001600160a01b038082168352600160a01b820490941682870152600160b01b810490981681850152600160b81b90970463ffffffff1660608801526001810154821660808801526002015460a08701529383526006909152908190205483519151632142170760e11b81529216916342842e0e91613a85913091908890600401614d27565b600060405180830381600087803b158015613a9f57600080fd5b505af1158015613ab3573d6000803e3d6000fd5b50505060ff909216600090815260036020908152604080832061ffff909616835294905292832080546001600160d81b03191681556001810180546001600160a01b0319169055600201929092555050565b60ff841660009081526006602052604090205484906001600160a01b0316613b3f5760405162461bcd60e51b815260040161082190614f0b565b60ff8516600090815260066020526040908190205490516331a9108f60e11b815261ffff881660048201528791879130916001600160a01b031690636352211e9060240160206040518083038186803b158015613b9b57600080fd5b505afa158015613baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd39190614818565b6001600160a01b03161415613bfa5760405162461bcd60e51b815260040161082190614e32565b60ff8088166000908152600660209081526040808320546001600160a01b0389811685526007909352922054911691161515600114613c4b5760405162461bcd60e51b815260040161082190614d72565b6040516331a9108f60e11b815261ffff8a16600482015233906001600160a01b03831690636352211e9060240160206040518083038186803b158015613c9057600080fd5b505afa158015613ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc89190614818565b6001600160a01b031614613cee5760405162461bcd60e51b815260040161082190614f79565b60008711613d3e5760405162461bcd60e51b815260206004820152601d60248201527f4d696e696d756d207072696365206d7573742062652061626f766520300000006044820152606401610821565b604051632142170760e11b81526001600160a01b038216906342842e0e90613d6e90339030908e90600401614d27565b600060405180830381600087803b158015613d8857600080fd5b505af1158015613d9c573d6000803e3d6000fd5b5050505060ff8816600081815260036020908152604080832061ffff8e16808552925290912080546001820180546001600160a01b0319166001600160a01b038b16179055600282018b90556001600160b01b0319163361ffff60a01b191617600160a01b83021764ffffffffff60b01b1916600160b01b840263ffffffff60b81b191617600160b81b63ffffffff8b160217815591907fe4c09ab228f1aa722971423bcaca99d166bea0fff9139b6a4ece5f887b5bbf79613e62600160201b42615392565b84604051613e7192919061516d565b60405180910390a350505050505050505050565b6000546001600160a01b03163314613eaf5760405162461bcd60e51b815260040161082190614e79565b6001600160a01b038116613f145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610821565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60ff841660009081526006602052604090205484906001600160a01b0316613fa95760405162461bcd60e51b815260040161082190614f0b565b60ff8516600090815260066020526040908190205490516331a9108f60e11b815261ffff881660048201528791879130916001600160a01b031690636352211e9060240160206040518083038186803b15801561400557600080fd5b505afa158015614019573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061403d9190614818565b6001600160a01b031614156140645760405162461bcd60e51b815260040161082190614e32565b60ff8716600090815260066020526040908190205490516331a9108f60e11b815261ffff8a1660048201526001600160a01b039091169033908290636352211e9060240160206040518083038186803b1580156140c057600080fd5b505afa1580156140d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f89190614818565b6001600160a01b03161461411e5760405162461bcd60e51b815260040161082190614f79565b6001600160a01b03851660009081526007602052604090205460ff16151560011461415b5760405162461bcd60e51b815260040161082190614d72565b604051632142170760e11b81526001600160a01b038216906342842e0e9061418b90339030908e90600401614d27565b600060405180830381600087803b1580156141a557600080fd5b505af11580156141b9573d6000803e3d6000fd5b5050505060ff8816600081815260026020908152604080832061ffff8e1680855292529091208054600382018b9055600482018b90556001600160b01b0319163361ffff60a01b191617600160a01b83021764ffffffffff60b01b1916600160b01b840263ffffffff60b81b191617600160b81b63ffffffff8b16021781556001810180546001600160a01b0319166001600160a01b038a1617905591907ff899e407f8a7a49e690722b0b81257fb1ed3fc2f7b809763c8a324f37cc75d8e614286600160201b42615392565b84604051613e71929190614fec565b3233146142b45760405162461bcd60e51b815260040161082190614dba565b60ff8216600090815260066020526040908190205490516331a9108f60e11b815261ffff831660048201528291849130916001600160a01b031690636352211e9060240160206040518083038186803b15801561431057600080fd5b505afa158015614324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143489190614818565b6001600160a01b0316141561436f5760405162461bcd60e51b815260040161082190614e32565b60ff808516600090815260056020908152604080832061ffff80891685529083528184206001600160a01b03808c16808752828652848720855160c08101875281548085168252600160a01b81048b16828a01908152600160a81b82049097168289019081526001840180548088166060860152600286018054808a16608088015260038801805460a0890152988f52998d526001600160b81b03199094169095556001600160a01b0319948516905592909516909455908790559251909616855260069093529281902054825193519151632142170760e11b8152929416926342842e0e9261446492339291600401614d27565b600060405180830381600087803b15801561447e57600080fd5b505af1158015614492573d6000803e3d6000fd5b5050505060a0810151600080546001600160a01b03166001600160a01b031683606001516001600160a01b0316146144ee57612710600954836144d59190615341565b6144df919061532d565b90506144eb8183615360565b91505b60808301516001600160a01b03161561458d57608083015160405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561454f57600080fd5b505af1158015614563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145879190614a0e565b506145bc565b604051339083156108fc029084906000818181858888f193505050501580156145ba573d6000803e3d6000fd5b505b60808301516001600160a01b0316600090815260086020526040812080548392906145e8908490615315565b90915550506020830151604084015160ff9091169061ffff167f3b16114486a143d02bf51fd802a4eb9b833c8279080e3e673dd31c7eb0522f72614630600160201b42615392565b866040516117d5929190615071565b6000546001600160a01b031633146146695760405162461bcd60e51b815260040161082190614e79565b60ff821660009081526006602052604090819020549051632142170760e11b81526001600160a01b03909116906342842e0e906146ae90309085908890600401614d27565b600060405180830381600087803b1580156146c857600080fd5b505af11580156146dc573d6000803e3d6000fd5b50505050505050565b5080546000825590600052602060002090810190610f6791905b8082111561471957805462ffffff191681556001016146ff565b5090565b600082601f83011261472d578081fd5b8135602067ffffffffffffffff821115614749576147496153d2565b614757818360051b016152e4565b80838252828201915082860187848660061b8901011115614776578586fd5b855b858110156147c557604080838b031215614790578788fd5b6147986152bb565b6147a1846147d2565b81526147ae8785016147e4565b818801528552938501939190910190600101614778565b5090979650505050505050565b803561ffff811681146111f557600080fd5b803560ff811681146111f557600080fd5b600060208284031215614806578081fd5b8135614811816153e8565b9392505050565b600060208284031215614829578081fd5b8151614811816153e8565b60008060408385031215614846578081fd5b8235614851816153e8565b91506020830135614861816153e8565b809150509250929050565b60008060008060808587031215614881578182fd5b843561488c816153e8565b935060208581013561489d816153e8565b935060408601359250606086013567ffffffffffffffff808211156148c0578384fd5b818801915088601f8301126148d3578384fd5b8135818111156148e5576148e56153d2565b6148f7601f8201601f191685016152e4565b9150808252898482850101111561490c578485fd5b8084840185840137810190920192909252939692955090935050565b6000806040838503121561493a578182fd5b8235614945816153e8565b91506020830135614861816153fd565b600080600060608486031215614969578283fd5b8335614974816153e8565b9250614982602085016147e4565b9150614990604085016147d2565b90509250925092565b6000806000606084860312156149ad578283fd5b833567ffffffffffffffff808211156149c4578485fd5b6149d08783880161471d565b945060208601359150808211156149e5578384fd5b506149f28682870161471d565b9250506040840135614a03816153e8565b809150509250925092565b600060208284031215614a1f578081fd5b8151614811816153fd565b600060208284031215614a3b578081fd5b614811826147d2565b60008060408385031215614a56578182fd5b614a5f836147d2565b9150614a6d602084016147e4565b90509250929050565b600080600060608486031215614a8a578081fd5b614a93846147d2565b9250614aa1602085016147e4565b91506040840135614a03816153e8565b600080600060608486031215614ac5578081fd5b614ace846147d2565b9250614adc602085016147e4565b9150604084013590509250925092565b60008060008060808587031215614b01578182fd5b614b0a856147d2565b9350614b18602086016147e4565b9250604085013591506060850135614b2f816153e8565b939692955090935050565b600080600080600060a08688031215614b51578283fd5b614b5a866147d2565b9450614b68602087016147e4565b935060408601359250606086013563ffffffff81168114614b87578182fd5b91506080860135614b97816153e8565b809150509295509295909350565b60008060408385031215614bb7578182fd5b614851836147e4565b60008060408385031215614bd2578182fd5b614bdb836147e4565b9150614a6d602084016147d2565b60008060408385031215614bfb578182fd5b614c04836147e4565b946020939093013593505050565b600080600060608486031215614c26578081fd5b614c2f846147e4565b9250602084013591506040840135614a03816153e8565b6000815180845260208085019450808401835b83811015614c87578151805161ffff16885283015160ff168388015260409096019590820190600101614c59565b509495945050505050565b6000815480845260208085019450838352808320835b83811015614c8757815461ffff8116885260101c60ff168388015260409096019560019182019101614ca8565b80516001600160a01b03908116835260208083015161ffff169084015260408083015160ff169084015260608083015163ffffffff16908401526080808301519091169083015260a090810151910152565b6001600160a01b03938416815291909216602082015261ffff909116604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526028908201527f5468652073706563696669656420455243323020746f6b656e206973206e6f7460408201526708185b1b1bddd95960c21b606082015260800190565b6020808252601e908201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604082015260600190565b60208082526021908201527f4e6f7420656e6f75676820746f20746f70207468652063757272656e742062696040820152601960fa1b606082015260800190565b60208082526027908201527f546865206974656d2069732070617274206f6620616e6f74686572207472616e60408201526639b0b1ba34b7b760c91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252603a908201527f4e6f207265636569766564207472616465206f66666572696e6720666f756e6460408201527f20666f7220746865207370656369666965642061646472657373000000000000606082015260800190565b6020808252601c908201527f546865206974656d207479706520646f6573206e6f7420657869737400000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526029908201527f4f6e6c7920746865206974656d206f776e65722063616e206372656174652061604082015268371030bab1ba34b7b760b91b606082015260800190565b63ffffffff841681526001600160a01b03831660208201526101008101610a466040830184614cd5565b63ffffffff928316815281546001600160a01b03808216602084015260a082811c61ffff16604085015260b083901c60ff16606085015260b883901c8616608085015260d89290921c909416908201526001820154831660c0820152600282015490921660e08301526003810154610100830152600401546101208201526101400190565b600060e08201905063ffffffff8416825260018060a01b0380845116602084015260ff602085015116604084015261ffff60408501511660608401528060608501511660808401528060808501511660a08401525060a083015160c08301529392505050565b63ffffffff8316815281546001600160a01b03808216602084015260a082901c60ff16604084015260a89190911c61ffff166060830152600183015460e08301911661512e60808401826001600160a01b03169052565b5060028301546001600160a01b031660a083015260039092015460c090910152919050565b63ffffffff8316815260e081016148116020830184614cd5565b63ffffffff838116825282546001600160a01b038116602084015260a081901c61ffff16604084015260b081901c60ff16606084015260b81c166080820152600182015460e08201906151c6906001600160a01b031690565b6001600160a01b031660a08301526002929092015460c090910152919050565b63ffffffff831681526040602080830182905283516001600160a01b03908116838501529084015116606083015282015160808083015260009061522d60c0840182614c46565b90506060840151603f198483030160a085015261524a8282614c46565b9695505050505050565b63ffffffff8316815260406020820152600060018060a01b038084541660408401528060018501541660608401525060808083015261529960c0830160028501614c92565b828103603f190160a08401526152b28160038601614c92565b95945050505050565b6040805190810167ffffffffffffffff811182821017156152de576152de6153d2565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561530d5761530d6153d2565b604052919050565b60008219821115615328576153286153a6565b500190565b60008261533c5761533c6153bc565b500490565b600081600019048311821515161561535b5761535b6153a6565b500290565b600082821015615372576153726153a6565b500390565b600060001982141561538b5761538b6153a6565b5060010190565b6000826153a1576153a16153bc565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610f6757600080fd5b8015158114610f6757600080fdfea2646970667358221220f1a6983e41cbc4b443c993ab63998b47f051cf0ac58bd674fbb7fbd70ec5059864736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c806387ac34b4116100f7578063d7037bab11610095578063f2fde38b11610064578063f2fde38b14610782578063f5d1dad6146107a2578063f716b3f1146107c2578063ff0400cb146107e257600080fd5b8063d7037bab14610702578063dd8ef66b14610722578063dfa02c3514610742578063e6edf9731461076257600080fd5b80639874e323116100d15780639874e3231461068f578063b7966efc146106a2578063bf31eb0b146106c2578063c0b37d65146106e257600080fd5b806387ac34b41461062757806389db9245146106475780638da5cb5b1461066757600080fd5b806352767ac31161016f578063728481bb1161013e578063728481bb146105b457806375fd7b66146105c757806378150b06146105e75780638319da071461060757600080fd5b806352767ac3146104e55780635f51522614610505578063715018a6146105335780637240976c1461054857600080fd5b8063150b7a02116101ab578063150b7a02146103b1578063205fc152146103ea57806344759726146104b257806351cff8d9146104c557600080fd5b806304f5d1a7146101d257806306df4a13146102ce5780630ed3fedf1461038f575b600080fd5b3480156101de57600080fd5b506102616101ed366004614be9565b60026020818152600093845260408085209091529183529120805460018201549282015460038301546004909301546001600160a01b038084169561ffff600160a01b8604169560ff600160b01b8704169563ffffffff600160b81b8204811696600160d81b909204169492841693169189565b604080516001600160a01b039a8b16815261ffff90991660208a015260ff9097169688019690965263ffffffff9485166060880152939092166080860152851660a08501529390931660c083015260e0820192909252610100810191909152610120015b60405180910390f35b3480156102da57600080fd5b506103466102e9366004614c12565b600560209081526000938452604080852082529284528284209052825290208054600182015460028301546003909301546001600160a01b0380841694600160a01b850460ff1694600160a81b900461ffff169382169291169086565b604080516001600160a01b03978816815260ff909616602087015261ffff90941693850193909352908416606084015292909216608082015260a081019190915260c0016102c5565b34801561039b57600080fd5b506103af6103aa366004614bc0565b610802565b005b3480156103bd57600080fd5b506103d16103cc36600461486c565b610a3d565b6040516001600160e01b031990911681526020016102c5565b3480156103f657600080fd5b50610464610405366004614be9565b60036020908152600092835260408084209091529082529020805460018201546002909201546001600160a01b0380831693600160a01b840461ffff1693600160b01b810460ff1693600160b81b90910463ffffffff16929091169086565b604080516001600160a01b03978816815261ffff909616602087015260ff9094169385019390935263ffffffff909116606084015292909216608082015260a081019190915260c0016102c5565b6103af6104c0366004614aec565b610a4e565b3480156104d157600080fd5b506103af6104e03660046147f5565b610e41565b3480156104f157600080fd5b506103af610500366004614955565b610f6a565b34801561051157600080fd5b506105256105203660046147f5565b6111af565b6040519081526020016102c5565b34801561053f57600080fd5b506103af6111fa565b34801561055457600080fd5b50610594610563366004614834565b6004602090815260009283526040808420909152908252902080546001909101546001600160a01b03918216911682565b604080516001600160a01b039384168152929091166020830152016102c5565b6103af6105c2366004614a44565b61126e565b3480156105d357600080fd5b506103af6105e23660046147f5565b6117e7565b3480156105f357600080fd5b506103af610602366004614928565b611b04565b34801561061357600080fd5b506103af610622366004614a2a565b611b59565b34801561063357600080fd5b506103af6106423660046147f5565b611b8c565b34801561065357600080fd5b506103af610662366004614a44565b612055565b34801561067357600080fd5b506000546040516001600160a01b0390911681526020016102c5565b6103af61069d366004614ab1565b6122f5565b3480156106ae57600080fd5b506103af6106bd366004614999565b612762565b3480156106ce57600080fd5b506103af6106dd366004614a44565b612d93565b3480156106ee57600080fd5b506103af6106fd366004614ba5565b61334d565b34801561070e57600080fd5b506103af61071d366004614a44565b6133aa565b34801561072e57600080fd5b506103af61073d3660046147f5565b613656565b34801561074e57600080fd5b506103af61075d366004614a44565b6139a7565b34801561076e57600080fd5b506103af61077d366004614b3a565b613b05565b34801561078e57600080fd5b506103af61079d3660046147f5565b613e85565b3480156107ae57600080fd5b506103af6107bd366004614b3a565b613f6f565b3480156107ce57600080fd5b506103af6107dd366004614955565b614295565b3480156107ee57600080fd5b506103af6107fd366004614a76565b61463f565b32331461082a5760405162461bcd60e51b815260040161082190614dba565b60405180910390fd5b6002600154141561084d5760405162461bcd60e51b815260040161082190614f42565b6002600181815560ff808516600090815260056020908152604080832061ffff808916855290835281842033808652818552838620845160c08101865281546001600160a01b038181168352600160a01b8204909a1682890152600160a81b810490951695810195909552978801805480891660608701529989018054808a166080880190815260038c01805460a08a0152948a52949097526001600160b81b03199094169098556001600160a01b03199889169097559690921690915592559151909116156109a957608081015160a082015160405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561096b57600080fd5b505af115801561097f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a39190614a0e565b506109db565b60a0810151604051339180156108fc02916000818181858888f193505050501580156109d9573d6000803e3d6000fd5b505b806020015160ff16816040015161ffff167f6d767aeadf0f1e73f966dd1ca16e6c13d6fd7d27c6da6290aae34ac360163fcc600160201b42610a1d9190615392565b84604051610a2c929190615071565b60405180910390a350506001805550565b630a85bd0160e11b5b949350505050565b323314610a6d5760405162461bcd60e51b815260040161082190614dba565b60026001541415610a905760405162461bcd60e51b815260040161082190614f42565b600260015560ff8316600090815260066020526040908190205490516331a9108f60e11b815261ffff861660048201528591859130916001600160a01b031690636352211e9060240160206040518083038186803b158015610af157600080fd5b505afa158015610b05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b299190614818565b6001600160a01b03161415610b505760405162461bcd60e51b815260040161082190614e32565b60ff85166000908152600660205260409020546001600160a01b0316610b885760405162461bcd60e51b815260040161082190614f0b565b60ff85166000908152600660205260408082205490516331a9108f60e11b815261ffff891660048201526001600160a01b0390911690636352211e9060240160206040518083038186803b158015610bdf57600080fd5b505afa158015610bf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c179190614818565b905060006001600160a01b03851615610c305785610c32565b345b60ff8816600090815260056020908152604080832061ffff8d168452825280832033845290915290208054919250906001600160a01b031615610cd45760405162461bcd60e51b815260206004820152603460248201527f546865726520697320616c726561647920616e206f66666572206d61646520626044820152733c903cb7ba903337b9103a3434b99034ba32b69760611b6064820152608401610821565b80546001820180546001600160a01b03199081166001600160a01b038781169190911790925560038401859055600162ffff0160a01b03199092163361ffff60a81b191617600160a81b61ffff8d16021760ff60a01b1916600160a01b60ff8c160217835560028301805490921690881690811790915515610dd4576040516323b872dd60e01b81526001600160a01b038716906323b872dd90610d8090339030908790600401614d4e565b602060405180830381600087803b158015610d9a57600080fd5b505af1158015610dae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd29190614a0e565b505b8054600160a01b810460ff1690600160a81b900461ffff167f539bf9e773440b9c4c2ef34e32743a189a1bd4f3276ac6dc6e54da3037cc9f71610e1b600160201b42615392565b84604051610e2a9291906150d7565b60405180910390a350506001805550505050505050565b6000546001600160a01b03163314610e6b5760405162461bcd60e51b815260040161082190614e79565b6001600160a01b038116610ed8576001600160a01b038116600090815260086020526040808220549051339282156108fc02929190818181858888f19350505050158015610ebd573d6000803e3d6000fd5b506001600160a01b0316600090815260086020526040812055565b6001600160a01b038116600081815260086020526040908190205490516323b872dd60e01b81526323b872dd91610f159130913391600401614d4e565b602060405180830381600087803b158015610f2f57600080fd5b505af1158015610f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebd9190614a0e565b50565b323314610f895760405162461bcd60e51b815260040161082190614dba565b60026001541415610fac5760405162461bcd60e51b815260040161082190614f42565b6002600181815560ff808516600090815260056020908152604080832061ffff80891685529083528184206001600160a01b03808c16808752828652848720855160c08101875281548085168252600160a01b8104909a1681890152600160a81b8a04909516958501959095529784018054808316606086015299850180548084166080870190815260038801805460a08901529b8a52949097526001600160b81b03199098169094556001600160a01b031998891690935596909216909355925591519091161561110d576080810151815160a083015160405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb90604401602060405180830381600087803b1580156110cf57600080fd5b505af11580156110e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111079190614a0e565b5061114c565b805160a08201516040516001600160a01b039092169181156108fc0291906000818181858888f1935050505015801561114a573d6000803e3d6000fd5b505b806020015160ff16816040015161ffff167f3a1a77be608eab6419f781085d374675858ad805c6f8578d9e686c34bd6f54c3600160201b4261118e9190615392565b8460405161119d929190615071565b60405180910390a35050600180555050565b600080546001600160a01b031633146111da5760405162461bcd60e51b815260040161082190614e79565b506001600160a01b0381166000908152600860205260409020545b919050565b6000546001600160a01b031633146112245760405162461bcd60e51b815260040161082190614e79565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b32331461128d5760405162461bcd60e51b815260040161082190614dba565b60ff811660009081526006602052604090205481906001600160a01b03166112c75760405162461bcd60e51b815260040161082190614f0b565b60ff8216600090815260036020908152604080832061ffff87168452909152902054839083906001600160a01b031661133d5760405162461bcd60e51b8152602060048201526018602482015277546865206974656d206973206e6f7420666f722073616c6560401b6044820152606401610821565b60ff848116600090815260036020908152604080832061ffff8a8116855290835292819020815160c08101835281546001600160a01b03808216808452600160a01b830490971695830195909552600160b01b810490961692810192909252600160b81b90940463ffffffff1660608201526001840154909116608082015260029092015460a08301523314156114165760405162461bcd60e51b815260206004820152601a60248201527f43616e277420627579206f6e20796f7572206f776e2073616c650000000000006044820152606401610821565b606081015163ffffffff1661142f600160201b42615392565b63ffffffff1610806114495750606081015163ffffffff16155b6114955760405162461bcd60e51b815260206004820152601960248201527f53616c65206861732066696e697368656420616c7265616479000000000000006044820152606401610821565b60a08101516000805483516001600160a01b039081169116146114dc57612710600954836114c39190615341565b6114cd919061532d565b90506114d98183615360565b91505b60808301516001600160a01b0316611594578260a001513410156115555760405162461bcd60e51b815260206004820152602a60248201527f4e6f7420656e6f7567682045746865722073656e7420746f20636f6d706c657460448201526965207468652073616c6560b01b6064820152608401610821565b82516040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561158e573d6000803e3d6000fd5b506116a6565b608083015183516040516323b872dd60e01b81526001600160a01b03909216916323b872dd916115cb913391908790600401614d4e565b602060405180830381600087803b1580156115e557600080fd5b505af11580156115f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161d9190614a0e565b5082608001516001600160a01b03166323b872dd3330846040518463ffffffff1660e01b815260040161165293929190614d4e565b602060405180830381600087803b15801561166c57600080fd5b505af1158015611680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a49190614a0e565b505b60808301516001600160a01b0316600090815260086020526040812080548392906116d2908490615315565b909155505060ff8716600081815260036020908152604080832061ffff8d168452825280832080546001600160d81b03191681556001810180546001600160a01b031916905560020183905592825260069052819020549051632142170760e11b81526001600160a01b03909116906342842e0e9061175990309033908d90600401614d27565b600060405180830381600087803b15801561177357600080fd5b505af1158015611787573d6000803e3d6000fd5b505060ff891691505061ffff89167fd50ac8d7416437e46d5ec60ffff44a1d231c2ce6acb0d2a1c6ef5a891be50e146117c4600160201b42615392565b33876040516117d593929190614fc2565b60405180910390a35050505050505050565b3233146118065760405162461bcd60e51b815260040161082190614dba565b3360009081526004602090815260408083206001600160a01b038581168552908352818420825160808101845281548316815260018201549092168285015260028101805484518187028101870186528181529395929486019392879084015b828210156118a9576000848152602090819020604080518082019091529084015461ffff8116825262010000900460ff1681830152825260019092019101611866565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015611919576000848152602090819020604080518082019091529084015461ffff8116825262010000900460ff16818301528252600190920191016118d6565b5050509152505080519091506001600160a01b031661194a5760405162461bcd60e51b815260040161082190614eae565b3360009081526004602090815260408083206001600160a01b0386168452909152812080546001600160a01b0319908116825560018201805490911690559061199660028301826146e5565b6119a46003830160006146e5565b505060005b816040015151811015611ab95760066000836040015183815181106119de57634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160ff1660ff16815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166342842e0e30846000015185604001518581518110611a4a57634e487b7160e01b600052603260045260246000fd5b6020026020010151600001516040518463ffffffff1660e01b8152600401611a7493929190614d27565b600060405180830381600087803b158015611a8e57600080fd5b505af1158015611aa2573d6000803e3d6000fd5b505050508080611ab190615377565b9150506119a9565b507f22c27435df9dc66ae0ee063f16c83a60d2c2cdbc57806e1df797388cd3bc3f82611ae9600160201b42615392565b82604051611af89291906151e6565b60405180910390a15050565b6000546001600160a01b03163314611b2e5760405162461bcd60e51b815260040161082190614e79565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611b835760405162461bcd60e51b815260040161082190614e79565b61ffff16600955565b323314611bab5760405162461bcd60e51b815260040161082190614dba565b3360009081526004602090815260408083206001600160a01b038581168552908352818420825160808101845281548316815260018201549092168285015260028101805484518187028101870186528181529395929486019392879084015b82821015611c4e576000848152602090819020604080518082019091529084015461ffff8116825262010000900460ff1681830152825260019092019101611c0b565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015611cbe576000848152602090819020604080518082019091529084015461ffff8116825262010000900460ff1681830152825260019092019101611c7b565b5050509152505080519091506001600160a01b0316611cef5760405162461bcd60e51b815260040161082190614eae565b3360009081526004602090815260408083206001600160a01b0386168452909152812080546001600160a01b03199081168255600182018054909116905590611d3b60028301826146e5565b611d496003830160006146e5565b505060005b816040015151811015611e5a576006600083604001518381518110611d8357634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160ff1660ff16815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166342842e0e303385604001518581518110611deb57634e487b7160e01b600052603260045260246000fd5b6020026020010151600001516040518463ffffffff1660e01b8152600401611e1593929190614d27565b600060405180830381600087803b158015611e2f57600080fd5b505af1158015611e43573d6000803e3d6000fd5b505050508080611e5290615377565b915050611d4e565b5060005b816060015151811015612025576003600083606001518381518110611e9357634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160ff1660ff168152602001908152602001600020600083606001518381518110611ed957634e487b7160e01b600052603260045260246000fd5b6020908102919091018101515161ffff168252810191909152604001600090812080546001600160d81b03191681556001810180546001600160a01b031916905560020181905560608301518051600692919084908110611f4a57634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160ff1660ff16815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166342842e0e33846000015185606001518581518110611fb657634e487b7160e01b600052603260045260246000fd5b6020026020010151600001516040518463ffffffff1660e01b8152600401611fe093929190614d27565b600060405180830381600087803b158015611ffa57600080fd5b505af115801561200e573d6000803e3d6000fd5b50505050808061201d90615377565b915050611e5e565b507f08298467cd01d6b6949cc065aa098a20468e3240ca930453f7f3067b456b7326611ae9600160201b42615392565b60ff811660009081526006602052604090205481906001600160a01b031661208f5760405162461bcd60e51b815260040161082190614f0b565b60ff8216600090815260036020908152604080832061ffff87168452909152902054839083906001600160a01b03166121055760405162461bcd60e51b8152602060048201526018602482015277546865206974656d206973206e6f7420666f722073616c6560401b6044820152606401610821565b60ff848116600090815260036020908152604080832061ffff8a8116855290835292819020815160c08101835281546001600160a01b03808216808452600160a01b830490971695830195909552600160b01b810490961692810192909252600160b81b90940463ffffffff1660608201526001840154909116608082015260029092015460a083015233146121e95760405162461bcd60e51b8152602060048201526024808201527f4f6e6c79207468652063726561746f722063616e2063616e63656c207468652060448201526373616c6560e01b6064820152608401610821565b60ff8516600081815260036020908152604080832061ffff8b168452825280832080546001600160d81b03191681556001810180546001600160a01b031916905560020183905592825260069052819020549051632142170760e11b81526001600160a01b03909116906342842e0e9061226b90309033908b90600401614d27565b600060405180830381600087803b15801561228557600080fd5b505af1158015612299573d6000803e3d6000fd5b505060ff871691505061ffff87167f390d6889e3c2d4b5e2345dc75b5443ec0d582facfbf14c54ba9a6b5c20af845d6122d6600160201b42615392565b846040516122e5929190615153565b60405180910390a3505050505050565b3233146123145760405162461bcd60e51b815260040161082190614dba565b600260015414156123375760405162461bcd60e51b815260040161082190614f42565b6002600181905560ff831660009081526020918252604080822061ffff871683529092522054839083906001600160a01b03166123b65760405162461bcd60e51b815260206004820152601a60248201527f546865206974656d206973206e6f74206f6e2061756374696f6e0000000000006044820152606401610821565b60ff8416600090815260026020908152604080832061ffff89168452909152902080546001600160a01b03163314156124315760405162461bcd60e51b815260206004820152601c60248201527f43616e7420626964206f6e20796f7572206f776e2061756374696f6e000000006044820152606401610821565b8054600160b81b900463ffffffff1661244e600160201b42615392565b63ffffffff1611156124a25760405162461bcd60e51b815260206004820152601c60248201527f41756374696f6e206861732066696e697368656420616c7265616479000000006044820152606401610821565b60018101546000906001600160a01b0316156124be57846124c0565b345b60028301549091506001600160a01b03166124fe5781600301548110156124f95760405162461bcd60e51b815260040161082190614df1565b612521565b816004015481116125215760405162461bcd60e51b815260040161082190614df1565b60018201546001600160a01b0316156125be5760018201546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061256a90339030908690600401614d4e565b602060405180830381600087803b15801561258457600080fd5b505af1158015612598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bc9190614a0e565b505b60028201546001600160a01b0316156126bd5760018201546001600160a01b031661262957600282015460048301546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612623573d6000803e3d6000fd5b506126bd565b6001820154600283015460048085015460405163a9059cbb60e01b81526001600160a01b0393841692810192909252602482015291169063a9059cbb90604401602060405180830381600087803b15801561268357600080fd5b505af1158015612697573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bb9190614a0e565b505b6002820180546001600160a01b03191633179055600482018190556126e6600160201b42615392565b825463ffffffff91909116600160d81b0263ffffffff60d81b1990911617825560ff861661ffff88167f8cdaefb1c27b6580be7fea84414c1d4516ee08a7452812e50447c147d1ad4b9b61273e600160201b42615392565b8560405161274d929190614fec565b60405180910390a35050600180555050505050565b3233146127815760405162461bcd60e51b815260040161082190614dba565b6001600160a01b038082166000908152600460209081526040808320338452909152902080549091161561281d5760405162461bcd60e51b815260206004820152603d60248201527f546865726520697320616c72656164792061207472616465206f66666572696e60448201527f6720666f72207468652073706563696669656420726563697069656e740000006064820152608401610821565b60005b8451811015612a4a5760006001600160a01b03166006600087848151811061285857634e487b7160e01b600052603260045260246000fd5b60209081029190910181015181015160ff168252810191909152604001600020546001600160a01b031614156128a05760405162461bcd60e51b815260040161082190614f0b565b600660008683815181106128c457634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160ff1660ff16815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166342842e0e333088858151811061292857634e487b7160e01b600052603260045260246000fd5b6020026020010151600001516040518463ffffffff1660e01b815260040161295293929190614d27565b600060405180830381600087803b15801561296c57600080fd5b505af1158015612980573d6000803e3d6000fd5b505050508160020160405180604001604052808784815181106129b357634e487b7160e01b600052603260045260246000fd5b60200260200101516000015161ffff1681526020018784815181106129e857634e487b7160e01b600052603260045260246000fd5b60209081029190910181015181015160ff90811690925283546001810185556000948552938190208351940180549390910151909116620100000262ffffff1990921661ffff9093169290921717905580612a4281615377565b915050612820565b5060005b8351811015612d1e5760006001600160a01b031660066000868481518110612a8657634e487b7160e01b600052603260045260246000fd5b60209081029190910181015181015160ff168252810191909152604001600020546001600160a01b03161415612ace5760405162461bcd60e51b815260040161082190614f0b565b826001600160a01b031660066000868481518110612afc57634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160ff1660ff16815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b0316636352211e868481518110612b5e57634e487b7160e01b600052603260045260246000fd5b6020908102919091010151516040516001600160e01b031960e084901b16815261ffff909116600482015260240160206040518083038186803b158015612ba457600080fd5b505afa158015612bb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bdc9190614818565b6001600160a01b031614612c585760405162461bcd60e51b815260206004820152603860248201527f4120726571756573746564206974656d20646f6573206e6f742062656c6f6e6760448201527f20746f20746865207370656369666965642077616c6c657400000000000000006064820152608401610821565b816003016040518060400160405280868481518110612c8757634e487b7160e01b600052603260045260246000fd5b60200260200101516000015161ffff168152602001868481518110612cbc57634e487b7160e01b600052603260045260246000fd5b60209081029190910181015181015160ff90811690925283546001810185556000948552938190208351940180549390910151909116620100000262ffffff1990921661ffff9093169290921717905580612d1681615377565b915050612a4e565b508054336001600160a01b03199182161782556001820180549091166001600160a01b0384161790557f78991cf873b10fa6351d7c3810220d2ac6c600249d6ede4d6fa3db2eb6175748612d76600160201b42615392565b82604051612d85929190615254565b60405180910390a150505050565b323314612db25760405162461bcd60e51b815260040161082190614dba565b60ff8116600090815260026020908152604080832061ffff86168452909152902054829082906001600160a01b0316612e2d5760405162461bcd60e51b815260206004820152601a60248201527f546865206974656d206973206e6f74206f6e2061756374696f6e0000000000006044820152606401610821565b60ff808416600090815260026020818152604080842061ffff808b1686529083529381902081516101208101835281546001600160a01b038082168352600160a01b820490971694820194909452600160b01b84049096169186019190915263ffffffff600160b81b8304811660608701819052600160d81b9093041660808601526001810154841660a08601529182015490921660c0840152600381015460e084015260040154610100830152612ee9600160201b42615392565b63ffffffff1611612f3c5760405162461bcd60e51b815260206004820152601760248201527f41756374696f6e206973206e6f742066696e69736865640000000000000000006044820152606401610821565b60c08101516001600160a01b0316331480612f60575080516001600160a01b031633145b612fb85760405162461bcd60e51b815260206004820152602360248201527f4f6e6c79207468652077696e6e6572206f722073656c6c65722063616e20636c60448201526261696d60e81b6064820152608401610821565b60ff8416600090815260026020818152604080842061ffff8a168552909152822080546001600160f81b03191681556001810180546001600160a01b03199081169091559181018054909216909155600381018290556004015560c08101516001600160a01b03166130a15760ff8416600090815260066020526040908190205482519151632142170760e11b81526001600160a01b03909116916342842e0e916130699130918a90600401614d27565b600060405180830381600087803b15801561308357600080fd5b505af1158015613097573d6000803e3d6000fd5b5050505050613347565b6101008101516000805483516001600160a01b039081169116146130e957612710600954836130d09190615341565b6130da919061532d565b90506130e68183615360565b91505b60a08301516001600160a01b03161561318b5760a0830151835160405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291169063a9059cbb90604401602060405180830381600087803b15801561314d57600080fd5b505af1158015613161573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131859190614a0e565b506131c6565b82516040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156131c4573d6000803e3d6000fd5b505b60a08301516001600160a01b0316600090815260086020526040812080548392906131f2908490615315565b909155505060ff8616600090815260066020526040908190205460c08501519151632142170760e11b81526001600160a01b03909116916342842e0e9161323f9130918c90600401614d27565b600060405180830381600087803b15801561325957600080fd5b505af115801561326d573d6000803e3d6000fd5b505060ff881691505061ffff88167f099264ce4472d95ceda17363bfeac04a0527feb76fd93e080621199e3cddf0056132aa600160201b42615392565b6040805163ffffffff928316815288516001600160a01b039081166020808401919091528a015161ffff16828401529189015160ff16606080830191909152890151831660808083019190915289015190921660a080840191909152880151811660c0808401919091528801511660e080830191909152870151610100808301919091528701516101208201526101400160405180910390a35050505b50505050565b6000546001600160a01b031633146133775760405162461bcd60e51b815260040161082190614e79565b60ff91909116600090815260066020526040902080546001600160a01b0319166001600160a01b03909216919091179055565b6000546001600160a01b031633146133d45760405162461bcd60e51b815260040161082190614e79565b60ff808216600090815260026020818152604080842061ffff80891686529083529381902081516101208101835281546001600160a01b038082168352600160a01b820490971694820194909452600160b01b84049096169186019190915263ffffffff600160b81b830481166060870152600160d81b90920490911660808501526001810154831660a08501529081015490911660c08301819052600382015460e08401526004909101546101008301521561357a5760a08101516001600160a01b03166134e5578060c001516001600160a01b03166108fc8261010001519081150290604051600060405180830381858888f193505050501580156134df573d6000803e3d6000fd5b5061357a565b60a081015160c082015161010083015160405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb90604401602060405180830381600087803b15801561354057600080fd5b505af1158015613554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135789190614a0e565b505b60ff8216600090815260066020526040908190205482519151632142170760e11b81526001600160a01b03909116916342842e0e916135bf9130918890600401614d27565b600060405180830381600087803b1580156135d957600080fd5b505af11580156135ed573d6000803e3d6000fd5b50505060ff909216600090815260026020818152604080842061ffff909716845295905293812080546001600160f81b03191681556001810180546001600160a01b03199081169091559481018054909516909455600384018190556004909301929092555050565b3233146136755760405162461bcd60e51b815260040161082190614dba565b6001600160a01b038082166000908152600460209081526040808320338452825280832081516080810183528154861681526001820154909516858401526002810180548351818602810186018552818152959695929493860193879084015b82821015613718576000848152602090819020604080518082019091529084015461ffff8116825262010000900460ff16818301528252600190920191016136d5565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015613788576000848152602090819020604080518082019091529084015461ffff8116825262010000900460ff1681830152825260019092019101613745565b5050509152505080519091506001600160a01b03166138085760405162461bcd60e51b815260206004820152603660248201527f4e6f2073656e74207472616465206f66666572696e6720666f756e6420666f726044820152752074686520737065636966696564206164647265737360501b6064820152608401610821565b6001600160a01b0382166000908152600460209081526040808320338452909152812080546001600160a01b0319908116825560018201805490911690559061385460028301826146e5565b6138626003830160006146e5565b505060005b81604001515181101561397757600660008360400151838151811061389c57634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160ff1660ff16815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166342842e0e3084600001518560400151858151811061390857634e487b7160e01b600052603260045260246000fd5b6020026020010151600001516040518463ffffffff1660e01b815260040161393293929190614d27565b600060405180830381600087803b15801561394c57600080fd5b505af1158015613960573d6000803e3d6000fd5b50505050808061396f90615377565b915050613867565b507f0fde94ccaba4cbc02c902e226a09e67896290e8b41c9f60c4f4184e9ff36d849611ae9600160201b42615392565b6000546001600160a01b031633146139d15760405162461bcd60e51b815260040161082190614e79565b60ff818116600081815260036020908152604080832061ffff8881168552908352818420825160c08101845281546001600160a01b038082168352600160a01b820490941682870152600160b01b810490981681850152600160b81b90970463ffffffff1660608801526001810154821660808801526002015460a08701529383526006909152908190205483519151632142170760e11b81529216916342842e0e91613a85913091908890600401614d27565b600060405180830381600087803b158015613a9f57600080fd5b505af1158015613ab3573d6000803e3d6000fd5b50505060ff909216600090815260036020908152604080832061ffff909616835294905292832080546001600160d81b03191681556001810180546001600160a01b0319169055600201929092555050565b60ff841660009081526006602052604090205484906001600160a01b0316613b3f5760405162461bcd60e51b815260040161082190614f0b565b60ff8516600090815260066020526040908190205490516331a9108f60e11b815261ffff881660048201528791879130916001600160a01b031690636352211e9060240160206040518083038186803b158015613b9b57600080fd5b505afa158015613baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd39190614818565b6001600160a01b03161415613bfa5760405162461bcd60e51b815260040161082190614e32565b60ff8088166000908152600660209081526040808320546001600160a01b0389811685526007909352922054911691161515600114613c4b5760405162461bcd60e51b815260040161082190614d72565b6040516331a9108f60e11b815261ffff8a16600482015233906001600160a01b03831690636352211e9060240160206040518083038186803b158015613c9057600080fd5b505afa158015613ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc89190614818565b6001600160a01b031614613cee5760405162461bcd60e51b815260040161082190614f79565b60008711613d3e5760405162461bcd60e51b815260206004820152601d60248201527f4d696e696d756d207072696365206d7573742062652061626f766520300000006044820152606401610821565b604051632142170760e11b81526001600160a01b038216906342842e0e90613d6e90339030908e90600401614d27565b600060405180830381600087803b158015613d8857600080fd5b505af1158015613d9c573d6000803e3d6000fd5b5050505060ff8816600081815260036020908152604080832061ffff8e16808552925290912080546001820180546001600160a01b0319166001600160a01b038b16179055600282018b90556001600160b01b0319163361ffff60a01b191617600160a01b83021764ffffffffff60b01b1916600160b01b840263ffffffff60b81b191617600160b81b63ffffffff8b160217815591907fe4c09ab228f1aa722971423bcaca99d166bea0fff9139b6a4ece5f887b5bbf79613e62600160201b42615392565b84604051613e7192919061516d565b60405180910390a350505050505050505050565b6000546001600160a01b03163314613eaf5760405162461bcd60e51b815260040161082190614e79565b6001600160a01b038116613f145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610821565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60ff841660009081526006602052604090205484906001600160a01b0316613fa95760405162461bcd60e51b815260040161082190614f0b565b60ff8516600090815260066020526040908190205490516331a9108f60e11b815261ffff881660048201528791879130916001600160a01b031690636352211e9060240160206040518083038186803b15801561400557600080fd5b505afa158015614019573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061403d9190614818565b6001600160a01b031614156140645760405162461bcd60e51b815260040161082190614e32565b60ff8716600090815260066020526040908190205490516331a9108f60e11b815261ffff8a1660048201526001600160a01b039091169033908290636352211e9060240160206040518083038186803b1580156140c057600080fd5b505afa1580156140d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f89190614818565b6001600160a01b03161461411e5760405162461bcd60e51b815260040161082190614f79565b6001600160a01b03851660009081526007602052604090205460ff16151560011461415b5760405162461bcd60e51b815260040161082190614d72565b604051632142170760e11b81526001600160a01b038216906342842e0e9061418b90339030908e90600401614d27565b600060405180830381600087803b1580156141a557600080fd5b505af11580156141b9573d6000803e3d6000fd5b5050505060ff8816600081815260026020908152604080832061ffff8e1680855292529091208054600382018b9055600482018b90556001600160b01b0319163361ffff60a01b191617600160a01b83021764ffffffffff60b01b1916600160b01b840263ffffffff60b81b191617600160b81b63ffffffff8b16021781556001810180546001600160a01b0319166001600160a01b038a1617905591907ff899e407f8a7a49e690722b0b81257fb1ed3fc2f7b809763c8a324f37cc75d8e614286600160201b42615392565b84604051613e71929190614fec565b3233146142b45760405162461bcd60e51b815260040161082190614dba565b60ff8216600090815260066020526040908190205490516331a9108f60e11b815261ffff831660048201528291849130916001600160a01b031690636352211e9060240160206040518083038186803b15801561431057600080fd5b505afa158015614324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143489190614818565b6001600160a01b0316141561436f5760405162461bcd60e51b815260040161082190614e32565b60ff808516600090815260056020908152604080832061ffff80891685529083528184206001600160a01b03808c16808752828652848720855160c08101875281548085168252600160a01b81048b16828a01908152600160a81b82049097168289019081526001840180548088166060860152600286018054808a16608088015260038801805460a0890152988f52998d526001600160b81b03199094169095556001600160a01b0319948516905592909516909455908790559251909616855260069093529281902054825193519151632142170760e11b8152929416926342842e0e9261446492339291600401614d27565b600060405180830381600087803b15801561447e57600080fd5b505af1158015614492573d6000803e3d6000fd5b5050505060a0810151600080546001600160a01b03166001600160a01b031683606001516001600160a01b0316146144ee57612710600954836144d59190615341565b6144df919061532d565b90506144eb8183615360565b91505b60808301516001600160a01b03161561458d57608083015160405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561454f57600080fd5b505af1158015614563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145879190614a0e565b506145bc565b604051339083156108fc029084906000818181858888f193505050501580156145ba573d6000803e3d6000fd5b505b60808301516001600160a01b0316600090815260086020526040812080548392906145e8908490615315565b90915550506020830151604084015160ff9091169061ffff167f3b16114486a143d02bf51fd802a4eb9b833c8279080e3e673dd31c7eb0522f72614630600160201b42615392565b866040516117d5929190615071565b6000546001600160a01b031633146146695760405162461bcd60e51b815260040161082190614e79565b60ff821660009081526006602052604090819020549051632142170760e11b81526001600160a01b03909116906342842e0e906146ae90309085908890600401614d27565b600060405180830381600087803b1580156146c857600080fd5b505af11580156146dc573d6000803e3d6000fd5b50505050505050565b5080546000825590600052602060002090810190610f6791905b8082111561471957805462ffffff191681556001016146ff565b5090565b600082601f83011261472d578081fd5b8135602067ffffffffffffffff821115614749576147496153d2565b614757818360051b016152e4565b80838252828201915082860187848660061b8901011115614776578586fd5b855b858110156147c557604080838b031215614790578788fd5b6147986152bb565b6147a1846147d2565b81526147ae8785016147e4565b818801528552938501939190910190600101614778565b5090979650505050505050565b803561ffff811681146111f557600080fd5b803560ff811681146111f557600080fd5b600060208284031215614806578081fd5b8135614811816153e8565b9392505050565b600060208284031215614829578081fd5b8151614811816153e8565b60008060408385031215614846578081fd5b8235614851816153e8565b91506020830135614861816153e8565b809150509250929050565b60008060008060808587031215614881578182fd5b843561488c816153e8565b935060208581013561489d816153e8565b935060408601359250606086013567ffffffffffffffff808211156148c0578384fd5b818801915088601f8301126148d3578384fd5b8135818111156148e5576148e56153d2565b6148f7601f8201601f191685016152e4565b9150808252898482850101111561490c578485fd5b8084840185840137810190920192909252939692955090935050565b6000806040838503121561493a578182fd5b8235614945816153e8565b91506020830135614861816153fd565b600080600060608486031215614969578283fd5b8335614974816153e8565b9250614982602085016147e4565b9150614990604085016147d2565b90509250925092565b6000806000606084860312156149ad578283fd5b833567ffffffffffffffff808211156149c4578485fd5b6149d08783880161471d565b945060208601359150808211156149e5578384fd5b506149f28682870161471d565b9250506040840135614a03816153e8565b809150509250925092565b600060208284031215614a1f578081fd5b8151614811816153fd565b600060208284031215614a3b578081fd5b614811826147d2565b60008060408385031215614a56578182fd5b614a5f836147d2565b9150614a6d602084016147e4565b90509250929050565b600080600060608486031215614a8a578081fd5b614a93846147d2565b9250614aa1602085016147e4565b91506040840135614a03816153e8565b600080600060608486031215614ac5578081fd5b614ace846147d2565b9250614adc602085016147e4565b9150604084013590509250925092565b60008060008060808587031215614b01578182fd5b614b0a856147d2565b9350614b18602086016147e4565b9250604085013591506060850135614b2f816153e8565b939692955090935050565b600080600080600060a08688031215614b51578283fd5b614b5a866147d2565b9450614b68602087016147e4565b935060408601359250606086013563ffffffff81168114614b87578182fd5b91506080860135614b97816153e8565b809150509295509295909350565b60008060408385031215614bb7578182fd5b614851836147e4565b60008060408385031215614bd2578182fd5b614bdb836147e4565b9150614a6d602084016147d2565b60008060408385031215614bfb578182fd5b614c04836147e4565b946020939093013593505050565b600080600060608486031215614c26578081fd5b614c2f846147e4565b9250602084013591506040840135614a03816153e8565b6000815180845260208085019450808401835b83811015614c87578151805161ffff16885283015160ff168388015260409096019590820190600101614c59565b509495945050505050565b6000815480845260208085019450838352808320835b83811015614c8757815461ffff8116885260101c60ff168388015260409096019560019182019101614ca8565b80516001600160a01b03908116835260208083015161ffff169084015260408083015160ff169084015260608083015163ffffffff16908401526080808301519091169083015260a090810151910152565b6001600160a01b03938416815291909216602082015261ffff909116604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526028908201527f5468652073706563696669656420455243323020746f6b656e206973206e6f7460408201526708185b1b1bddd95960c21b606082015260800190565b6020808252601e908201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604082015260600190565b60208082526021908201527f4e6f7420656e6f75676820746f20746f70207468652063757272656e742062696040820152601960fa1b606082015260800190565b60208082526027908201527f546865206974656d2069732070617274206f6620616e6f74686572207472616e60408201526639b0b1ba34b7b760c91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252603a908201527f4e6f207265636569766564207472616465206f66666572696e6720666f756e6460408201527f20666f7220746865207370656369666965642061646472657373000000000000606082015260800190565b6020808252601c908201527f546865206974656d207479706520646f6573206e6f7420657869737400000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526029908201527f4f6e6c7920746865206974656d206f776e65722063616e206372656174652061604082015268371030bab1ba34b7b760b91b606082015260800190565b63ffffffff841681526001600160a01b03831660208201526101008101610a466040830184614cd5565b63ffffffff928316815281546001600160a01b03808216602084015260a082811c61ffff16604085015260b083901c60ff16606085015260b883901c8616608085015260d89290921c909416908201526001820154831660c0820152600282015490921660e08301526003810154610100830152600401546101208201526101400190565b600060e08201905063ffffffff8416825260018060a01b0380845116602084015260ff602085015116604084015261ffff60408501511660608401528060608501511660808401528060808501511660a08401525060a083015160c08301529392505050565b63ffffffff8316815281546001600160a01b03808216602084015260a082901c60ff16604084015260a89190911c61ffff166060830152600183015460e08301911661512e60808401826001600160a01b03169052565b5060028301546001600160a01b031660a083015260039092015460c090910152919050565b63ffffffff8316815260e081016148116020830184614cd5565b63ffffffff838116825282546001600160a01b038116602084015260a081901c61ffff16604084015260b081901c60ff16606084015260b81c166080820152600182015460e08201906151c6906001600160a01b031690565b6001600160a01b031660a08301526002929092015460c090910152919050565b63ffffffff831681526040602080830182905283516001600160a01b03908116838501529084015116606083015282015160808083015260009061522d60c0840182614c46565b90506060840151603f198483030160a085015261524a8282614c46565b9695505050505050565b63ffffffff8316815260406020820152600060018060a01b038084541660408401528060018501541660608401525060808083015261529960c0830160028501614c92565b828103603f190160a08401526152b28160038601614c92565b95945050505050565b6040805190810167ffffffffffffffff811182821017156152de576152de6153d2565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561530d5761530d6153d2565b604052919050565b60008219821115615328576153286153a6565b500190565b60008261533c5761533c6153bc565b500490565b600081600019048311821515161561535b5761535b6153a6565b500290565b600082821015615372576153726153a6565b500390565b600060001982141561538b5761538b6153a6565b5060010190565b6000826153a1576153a16153bc565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610f6757600080fd5b8015158114610f6757600080fdfea2646970667358221220f1a6983e41cbc4b443c993ab63998b47f051cf0ac58bd674fbb7fbd70ec5059864736f6c63430008040033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$11,190.72
Net Worth in ETH
5.957981
Token Allocations
ETH
99.75%
BNB
0.25%
AVAX
0.00%
Others
0.00%
Multichain Portfolio | 34 Chains
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.