Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0.24572 ETH
Eth Value
$810.11 (@ $3,296.87/ETH)Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 9,349 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
TRADESQUAD | 20145237 | 184 days ago | IN | 0 ETH | 0.00004212 | ||||
Cancel Swap Inte... | 15305622 | 867 days ago | IN | 0 ETH | 0.00236506 | ||||
Cancel Swap Inte... | 15179299 | 886 days ago | IN | 0 ETH | 0.00156925 | ||||
Cancel Swap Inte... | 15167830 | 888 days ago | IN | 0 ETH | 0.00617524 | ||||
Close Swap Inten... | 15167577 | 888 days ago | IN | 0.905 ETH | 0.01037031 | ||||
Close Swap Inten... | 15167526 | 888 days ago | IN | 0.005 ETH | 0.01942993 | ||||
Create Swap Inte... | 15167514 | 888 days ago | IN | 0.005 ETH | 0.03033663 | ||||
Create Swap Inte... | 15167511 | 888 days ago | IN | 0.005 ETH | 0.03168202 | ||||
Create Swap Inte... | 15167411 | 888 days ago | IN | 5.005 ETH | 0.04639505 | ||||
Cancel Swap Inte... | 15167397 | 888 days ago | IN | 0 ETH | 0.02638527 | ||||
Create Swap Inte... | 15167388 | 888 days ago | IN | 5.005 ETH | 0.08508676 | ||||
Close Swap Inten... | 15166923 | 888 days ago | IN | 62.505 ETH | 0.00427849 | ||||
Create Swap Inte... | 15166907 | 888 days ago | IN | 0.005 ETH | 0.00813515 | ||||
Close Swap Inten... | 15166759 | 888 days ago | IN | 0.005 ETH | 0.00262438 | ||||
Close Swap Inten... | 15166656 | 888 days ago | IN | 0.005 ETH | 0.00794288 | ||||
Create Swap Inte... | 15166645 | 888 days ago | IN | 1.005 ETH | 0.02069169 | ||||
Create Swap Inte... | 15166562 | 888 days ago | IN | 0.005 ETH | 0.01467881 | ||||
Close Swap Inten... | 15166207 | 888 days ago | IN | 13.005 ETH | 0.00408971 | ||||
Create Swap Inte... | 15166033 | 888 days ago | IN | 0.005 ETH | 0.02161353 | ||||
Close Swap Inten... | 15165835 | 888 days ago | IN | 0.005 ETH | 0.00674758 | ||||
Create Swap Inte... | 15165821 | 888 days ago | IN | 31.505 ETH | 0.00871222 | ||||
Cancel Swap Inte... | 15165316 | 889 days ago | IN | 0 ETH | 0.0050111 | ||||
Cancel Swap Inte... | 15165104 | 889 days ago | IN | 0 ETH | 0.00044213 | ||||
Close Swap Inten... | 15164798 | 889 days ago | IN | 23.605 ETH | 0.00477661 | ||||
Create Swap Inte... | 15164732 | 889 days ago | IN | 0.005 ETH | 0.00593674 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
18800119 | 372 days ago | 0.005 ETH | ||||
18798739 | 372 days ago | 0.01 ETH | ||||
18798739 | 372 days ago | 0.005 ETH | ||||
18798739 | 372 days ago | 0.005 ETH | ||||
18798739 | 372 days ago | 0.01 ETH | ||||
18798739 | 372 days ago | 0.005 ETH | ||||
18798739 | 372 days ago | 0.005 ETH | ||||
18798723 | 372 days ago | 0.01 ETH | ||||
18798723 | 372 days ago | 0.005 ETH | ||||
18798723 | 372 days ago | 0.005 ETH | ||||
18798719 | 372 days ago | 0.01 ETH | ||||
18798719 | 372 days ago | 0.005 ETH | ||||
18798719 | 372 days ago | 0.005 ETH | ||||
18798696 | 372 days ago | 0.01 ETH | ||||
18798696 | 372 days ago | 0.005 ETH | ||||
18798696 | 372 days ago | 0.005 ETH | ||||
18798696 | 372 days ago | 0.01 ETH | ||||
18798696 | 372 days ago | 0.005 ETH | ||||
18798696 | 372 days ago | 0.005 ETH | ||||
18798678 | 372 days ago | 0.01 ETH | ||||
18798678 | 372 days ago | 0.005 ETH | ||||
18798678 | 372 days ago | 0.005 ETH | ||||
18798672 | 372 days ago | 0.01 ETH | ||||
18798672 | 372 days ago | 0.005 ETH | ||||
18798672 | 372 days ago | 0.005 ETH |
Loading...
Loading
Contract Name:
BatchSwap
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-08 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; pragma abicoder v2; // // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @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) { return msg.data; } } // // OpenZeppelin Contracts v4.4.1 (access/Ownable.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() { _transferOwnership(_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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) /** * @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); } // // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) /** * @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); } // // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) /** * @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 making 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; } } // //Interface abstract contract ERC20Interface { function transferFrom(address from, address to, uint256 tokenId) public virtual; function transfer(address recipient, uint256 amount) public virtual; } abstract contract ERC721Interface { function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual; function balanceOf(address owner) public virtual view returns (uint256 balance) ; } abstract contract ERC1155Interface { function safeBatchTransferFrom(address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public virtual; } abstract contract customInterface { function bridgeSafeTransferFrom(address dapp, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public virtual; } contract BatchSwap is Ownable, Pausable, ReentrancyGuard, IERC721Receiver, IERC1155Receiver { address constant ERC20 = 0x90b7cf88476cc99D295429d4C1Bb1ff52448abeE; address constant ERC721 = 0x58874d2951524F7f851bbBE240f0C3cF0b992d79; address constant ERC1155 = 0xEDfdd7266667D48f3C9aB10194C3d325813d8c39; address public TRADESQUAD = 0xdbD4264248e2f814838702E0CB3015AC3a7157a1; address payable public VAULT = payable(0x48c45a687173ec396353cD1E507B26Fa4F6Ff6D9); mapping (address => address) dappRelations; mapping (address => bool) whiteList; using Counters for Counters.Counter; using SafeMath for uint256; uint256 constant secs = 86400; Counters.Counter private _swapIds; // Flag for the createSwap bool private swapFlag; // Swap Struct struct swapStruct { address dapp; address typeStd; uint256[] tokenId; uint256[] blc; bytes data; } // Swap Status enum swapStatus { Opened, Closed, Cancelled } // SwapIntent Struct struct swapIntent { uint256 id; address payable addressOne; uint256 valueOne; address payable addressTwo; uint256 valueTwo; uint256 swapStart; uint256 swapEnd; uint256 swapFee; swapStatus status; } // NFT Mapping mapping(uint256 => swapStruct[]) nftsOne; mapping(uint256 => swapStruct[]) nftsTwo; // Struct Payment struct paymentStruct { bool status; uint256 value; } // Mapping key/value for get the swap infos mapping (address => swapIntent[]) swapList; mapping (uint256 => uint256) swapMatch; // Struct for the payment rules paymentStruct payment; // Checks mapping(uint256 => address) checksCreator; mapping(uint256 => address) checksCounterparty; // Events event swapEvent(address indexed _creator, uint256 indexed time, swapStatus indexed _status, uint256 _swapId, address _swapCounterPart); event paymentReceived(address indexed _payer, uint256 _value); receive() external payable { emit paymentReceived(msg.sender, msg.value); } // Create Swap function createSwapIntent(swapIntent memory _swapIntent, swapStruct[] memory _nftsOne, swapStruct[] memory _nftsTwo) payable public whenNotPaused nonReentrant { if(payment.status) { if(ERC721Interface(TRADESQUAD).balanceOf(msg.sender)==0) { require(msg.value>=payment.value.add(_swapIntent.valueOne), "Not enought WEI for handle the transaction"); _swapIntent.swapFee = getWeiPayValueAmount() ; } else { require(msg.value>=_swapIntent.valueOne, "Not enought WEI for handle the transaction"); _swapIntent.swapFee = 0 ; } } else require(msg.value>=_swapIntent.valueOne, "Not enought WEI for handle the transaction"); _swapIntent.addressOne = payable(msg.sender); _swapIntent.id = _swapIds.current(); checksCreator[_swapIntent.id] = _swapIntent.addressOne ; checksCounterparty[_swapIntent.id] = _swapIntent.addressTwo ; _swapIntent.swapStart = block.timestamp; _swapIntent.swapEnd = 0; _swapIntent.status = swapStatus.Opened ; swapMatch[_swapIds.current()] = swapList[msg.sender].length; swapList[msg.sender].push(_swapIntent); uint256 i; for(i=0; i<_nftsOne.length; i++) nftsOne[_swapIntent.id].push(_nftsOne[i]); for(i=0; i<_nftsTwo.length; i++) nftsTwo[_swapIntent.id].push(_nftsTwo[i]); for(i=0; i<nftsOne[_swapIntent.id].length; i++) { require(whiteList[nftsOne[_swapIntent.id][i].dapp], "A DAPP is not handled by the system"); if(nftsOne[_swapIntent.id][i].typeStd == ERC20) { ERC20Interface(nftsOne[_swapIntent.id][i].dapp).transferFrom(_swapIntent.addressOne, address(this), nftsOne[_swapIntent.id][i].blc[0]); } else if(nftsOne[_swapIntent.id][i].typeStd == ERC721) { ERC721Interface(nftsOne[_swapIntent.id][i].dapp).safeTransferFrom(_swapIntent.addressOne, address(this), nftsOne[_swapIntent.id][i].tokenId[0], nftsOne[_swapIntent.id][i].data); } else if(nftsOne[_swapIntent.id][i].typeStd == ERC1155) { ERC1155Interface(nftsOne[_swapIntent.id][i].dapp).safeBatchTransferFrom(_swapIntent.addressOne, address(this), nftsOne[_swapIntent.id][i].tokenId, nftsOne[_swapIntent.id][i].blc, nftsOne[_swapIntent.id][i].data); } else { customInterface(dappRelations[nftsOne[_swapIntent.id][i].dapp]).bridgeSafeTransferFrom(nftsOne[_swapIntent.id][i].dapp, _swapIntent.addressOne, dappRelations[nftsOne[_swapIntent.id][i].dapp], nftsOne[_swapIntent.id][i].tokenId, nftsOne[_swapIntent.id][i].blc, nftsOne[_swapIntent.id][i].data); } } emit swapEvent(msg.sender, (block.timestamp-(block.timestamp%secs)), _swapIntent.status, _swapIntent.id, _swapIntent.addressTwo); _swapIds.increment(); } // Close the swap function closeSwapIntent(address _swapCreator, uint256 _swapId) payable public whenNotPaused nonReentrant { require(checksCounterparty[_swapId] == msg.sender, "You're not the interested counterpart"); require(swapList[_swapCreator][swapMatch[_swapId]].status == swapStatus.Opened, "Swap Status is not opened"); require(swapList[_swapCreator][swapMatch[_swapId]].addressTwo == msg.sender, "You're not the interested counterpart"); if(payment.status) { if(ERC721Interface(TRADESQUAD).balanceOf(msg.sender)==0) { require(msg.value>=payment.value.add(swapList[_swapCreator][swapMatch[_swapId]].valueTwo), "Not enought WEI for handle the transaction"); // Move the fees to the vault if(payment.value.add(swapList[_swapCreator][swapMatch[_swapId]].swapFee) > 0) VAULT.transfer(payment.value.add(swapList[_swapCreator][swapMatch[_swapId]].swapFee)); } else { require(msg.value>=swapList[_swapCreator][swapMatch[_swapId]].valueTwo, "Not enought WEI for handle the transaction"); if(swapList[_swapCreator][swapMatch[_swapId]].swapFee>0) VAULT.transfer(swapList[_swapCreator][swapMatch[_swapId]].swapFee); } } else require(msg.value>=swapList[_swapCreator][swapMatch[_swapId]].valueTwo, "Not enought WEI for handle the transaction"); swapList[_swapCreator][swapMatch[_swapId]].addressTwo = payable(msg.sender); swapList[_swapCreator][swapMatch[_swapId]].swapEnd = block.timestamp; swapList[_swapCreator][swapMatch[_swapId]].status = swapStatus.Closed; //From Owner 1 to Owner 2 uint256 i; for(i=0; i<nftsOne[_swapId].length; i++) { require(whiteList[nftsOne[_swapId][i].dapp], "A DAPP is not handled by the system"); if(nftsOne[_swapId][i].typeStd == ERC20) { ERC20Interface(nftsOne[_swapId][i].dapp).transfer(swapList[_swapCreator][swapMatch[_swapId]].addressTwo, nftsOne[_swapId][i].blc[0]); } else if(nftsOne[_swapId][i].typeStd == ERC721) { ERC721Interface(nftsOne[_swapId][i].dapp).safeTransferFrom(address(this), swapList[_swapCreator][swapMatch[_swapId]].addressTwo, nftsOne[_swapId][i].tokenId[0], nftsOne[_swapId][i].data); } else if(nftsOne[_swapId][i].typeStd == ERC1155) { ERC1155Interface(nftsOne[_swapId][i].dapp).safeBatchTransferFrom(address(this), swapList[_swapCreator][swapMatch[_swapId]].addressTwo, nftsOne[_swapId][i].tokenId, nftsOne[_swapId][i].blc, nftsOne[_swapId][i].data); } else { customInterface(dappRelations[nftsOne[_swapId][i].dapp]).bridgeSafeTransferFrom(nftsOne[_swapId][i].dapp, dappRelations[nftsOne[_swapId][i].dapp], swapList[_swapCreator][swapMatch[_swapId]].addressTwo, nftsOne[_swapId][i].tokenId, nftsOne[_swapId][i].blc, nftsOne[_swapId][i].data); } } if(swapList[_swapCreator][swapMatch[_swapId]].valueOne > 0) swapList[_swapCreator][swapMatch[_swapId]].addressTwo.transfer(swapList[_swapCreator][swapMatch[_swapId]].valueOne); //From Owner 2 to Owner 1 for(i=0; i<nftsTwo[_swapId].length; i++) { require(whiteList[nftsTwo[_swapId][i].dapp], "A DAPP is not handled by the system"); if(nftsTwo[_swapId][i].typeStd == ERC20) { ERC20Interface(nftsTwo[_swapId][i].dapp).transferFrom(swapList[_swapCreator][swapMatch[_swapId]].addressTwo, swapList[_swapCreator][swapMatch[_swapId]].addressOne, nftsTwo[_swapId][i].blc[0]); } else if(nftsTwo[_swapId][i].typeStd == ERC721) { ERC721Interface(nftsTwo[_swapId][i].dapp).safeTransferFrom(swapList[_swapCreator][swapMatch[_swapId]].addressTwo, swapList[_swapCreator][swapMatch[_swapId]].addressOne, nftsTwo[_swapId][i].tokenId[0], nftsTwo[_swapId][i].data); } else if(nftsTwo[_swapId][i].typeStd == ERC1155) { ERC1155Interface(nftsTwo[_swapId][i].dapp).safeBatchTransferFrom(swapList[_swapCreator][swapMatch[_swapId]].addressTwo, swapList[_swapCreator][swapMatch[_swapId]].addressOne, nftsTwo[_swapId][i].tokenId, nftsTwo[_swapId][i].blc, nftsTwo[_swapId][i].data); } else { customInterface(dappRelations[nftsTwo[_swapId][i].dapp]).bridgeSafeTransferFrom(nftsTwo[_swapId][i].dapp, swapList[_swapCreator][swapMatch[_swapId]].addressTwo, swapList[_swapCreator][swapMatch[_swapId]].addressOne, nftsTwo[_swapId][i].tokenId, nftsTwo[_swapId][i].blc, nftsTwo[_swapId][i].data); } } if(swapList[_swapCreator][swapMatch[_swapId]].valueTwo>0) swapList[_swapCreator][swapMatch[_swapId]].addressOne.transfer(swapList[_swapCreator][swapMatch[_swapId]].valueTwo); emit swapEvent(msg.sender, (block.timestamp-(block.timestamp%secs)), swapStatus.Closed, _swapId, _swapCreator); } // Cancel Swap function cancelSwapIntent(uint256 _swapId) public nonReentrant { require(checksCreator[_swapId] == msg.sender, "You're not the interested counterpart"); require(swapList[msg.sender][swapMatch[_swapId]].addressOne == msg.sender, "You're not the interested counterpart"); require(swapList[msg.sender][swapMatch[_swapId]].status == swapStatus.Opened, "Swap Status is not opened"); //Rollback if(swapList[msg.sender][swapMatch[_swapId]].swapFee>0) payable(msg.sender).transfer(swapList[msg.sender][swapMatch[_swapId]].swapFee); uint256 i; for(i=0; i<nftsOne[_swapId].length; i++) { if(nftsOne[_swapId][i].typeStd == ERC20) { ERC20Interface(nftsOne[_swapId][i].dapp).transfer(swapList[msg.sender][swapMatch[_swapId]].addressOne, nftsOne[_swapId][i].blc[0]); } else if(nftsOne[_swapId][i].typeStd == ERC721) { ERC721Interface(nftsOne[_swapId][i].dapp).safeTransferFrom(address(this), swapList[msg.sender][swapMatch[_swapId]].addressOne, nftsOne[_swapId][i].tokenId[0], nftsOne[_swapId][i].data); } else if(nftsOne[_swapId][i].typeStd == ERC1155) { ERC1155Interface(nftsOne[_swapId][i].dapp).safeBatchTransferFrom(address(this), swapList[msg.sender][swapMatch[_swapId]].addressOne, nftsOne[_swapId][i].tokenId, nftsOne[_swapId][i].blc, nftsOne[_swapId][i].data); } else { customInterface(dappRelations[nftsOne[_swapId][i].dapp]).bridgeSafeTransferFrom(nftsOne[_swapId][i].dapp, dappRelations[nftsOne[_swapId][i].dapp], swapList[msg.sender][swapMatch[_swapId]].addressOne, nftsOne[_swapId][i].tokenId, nftsOne[_swapId][i].blc, nftsOne[_swapId][i].data); } } if(swapList[msg.sender][swapMatch[_swapId]].valueOne > 0) swapList[msg.sender][swapMatch[_swapId]].addressOne.transfer(swapList[msg.sender][swapMatch[_swapId]].valueOne); swapList[msg.sender][swapMatch[_swapId]].swapEnd = block.timestamp; swapList[msg.sender][swapMatch[_swapId]].status = swapStatus.Cancelled; emit swapEvent(msg.sender, (block.timestamp-(block.timestamp%secs)), swapStatus.Cancelled, _swapId, address(0)); } // Set Trade Squad address function setTradeSquadAddress(address _tradeSquad) public onlyOwner { TRADESQUAD = _tradeSquad ; } // Set Vault address function setVaultAddress(address payable _vault) public onlyOwner { VAULT = _vault ; } // Handle dapp relations for the bridges function setDappRelation(address _dapp, address _customInterface) public onlyOwner { dappRelations[_dapp] = _customInterface; } // Handle the whitelist function setWhitelist(address[] memory _dapp, bool _status) public onlyOwner { uint256 i; for(i=0; i< _dapp.length; i++) { whiteList[_dapp[i]] = _status; } } // Edit CounterPart Address function editCounterPart(uint256 _swapId, address payable _counterPart) public { require(checksCreator[_swapId] == msg.sender, "You're not the interested counterpart"); require(msg.sender == swapList[msg.sender][swapMatch[_swapId]].addressOne, "Message sender must be the swap creator"); checksCounterparty[_swapId] = _counterPart; swapList[msg.sender][swapMatch[_swapId]].addressTwo = _counterPart; } // Set the payment function setPayment(bool _status, uint256 _value) public onlyOwner whenNotPaused { payment.status = _status; payment.value = _value * (1 wei); } // Pause / Unpause the contract function pauseContract(bool _paused) public onlyOwner { _paused?_pause():_unpause(); } // Get whitelist status of an address function getWhiteList(address _address) public view returns(bool) { return whiteList[_address]; } // Get Trade fees function getWeiPayValueAmount() public view returns(uint256) { return payment.value; } // Get swap infos function getSwapIntentByAddress(address _creator, uint256 _swapId) public view returns(swapIntent memory) { return swapList[_creator][swapMatch[_swapId]]; } // Get swapStructLength function getSwapStructSize(uint256 _swapId, bool _nfts) public view returns(uint256) { if(_nfts) return nftsOne[_swapId].length ; else return nftsTwo[_swapId].length ; } // Get swapStruct function getSwapStruct(uint256 _swapId, bool _nfts, uint256 _index) public view returns(swapStruct memory) { if(_nfts) return nftsOne[_swapId][_index] ; else return nftsTwo[_swapId][_index] ; } //Interface IERC721/IERC1155 function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external override returns (bytes4) { return bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")); } function onERC1155Received(address operator, address from, uint256 id, uint256 value, bytes calldata data) external override returns (bytes4) { return bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)")); } function onERC1155BatchReceived(address operator, address from, uint256[] calldata id, uint256[] calldata value, bytes calldata data) external override returns (bytes4) { return bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)")); } function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) { return interfaceID == 0x01ffc9a7 || interfaceID == 0x4e2312e0; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_payer","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"paymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_creator","type":"address"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":true,"internalType":"enum BatchSwap.swapStatus","name":"_status","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"_swapId","type":"uint256"},{"indexed":false,"internalType":"address","name":"_swapCounterPart","type":"address"}],"name":"swapEvent","type":"event"},{"inputs":[],"name":"TRADESQUAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VAULT","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapId","type":"uint256"}],"name":"cancelSwapIntent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapCreator","type":"address"},{"internalType":"uint256","name":"_swapId","type":"uint256"}],"name":"closeSwapIntent","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address payable","name":"addressOne","type":"address"},{"internalType":"uint256","name":"valueOne","type":"uint256"},{"internalType":"address payable","name":"addressTwo","type":"address"},{"internalType":"uint256","name":"valueTwo","type":"uint256"},{"internalType":"uint256","name":"swapStart","type":"uint256"},{"internalType":"uint256","name":"swapEnd","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"enum BatchSwap.swapStatus","name":"status","type":"uint8"}],"internalType":"struct BatchSwap.swapIntent","name":"_swapIntent","type":"tuple"},{"components":[{"internalType":"address","name":"dapp","type":"address"},{"internalType":"address","name":"typeStd","type":"address"},{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"},{"internalType":"uint256[]","name":"blc","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct BatchSwap.swapStruct[]","name":"_nftsOne","type":"tuple[]"},{"components":[{"internalType":"address","name":"dapp","type":"address"},{"internalType":"address","name":"typeStd","type":"address"},{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"},{"internalType":"uint256[]","name":"blc","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct BatchSwap.swapStruct[]","name":"_nftsTwo","type":"tuple[]"}],"name":"createSwapIntent","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapId","type":"uint256"},{"internalType":"address payable","name":"_counterPart","type":"address"}],"name":"editCounterPart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_creator","type":"address"},{"internalType":"uint256","name":"_swapId","type":"uint256"}],"name":"getSwapIntentByAddress","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address payable","name":"addressOne","type":"address"},{"internalType":"uint256","name":"valueOne","type":"uint256"},{"internalType":"address payable","name":"addressTwo","type":"address"},{"internalType":"uint256","name":"valueTwo","type":"uint256"},{"internalType":"uint256","name":"swapStart","type":"uint256"},{"internalType":"uint256","name":"swapEnd","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"enum BatchSwap.swapStatus","name":"status","type":"uint8"}],"internalType":"struct BatchSwap.swapIntent","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapId","type":"uint256"},{"internalType":"bool","name":"_nfts","type":"bool"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getSwapStruct","outputs":[{"components":[{"internalType":"address","name":"dapp","type":"address"},{"internalType":"address","name":"typeStd","type":"address"},{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"},{"internalType":"uint256[]","name":"blc","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct BatchSwap.swapStruct","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapId","type":"uint256"},{"internalType":"bool","name":"_nfts","type":"bool"}],"name":"getSwapStructSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeiPayValueAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256[]","name":"id","type":"uint256[]"},{"internalType":"uint256[]","name":"value","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","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":"bool","name":"_paused","type":"bool"}],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dapp","type":"address"},{"internalType":"address","name":"_customInterface","type":"address"}],"name":"setDappRelation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setPayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tradeSquad","type":"address"}],"name":"setTradeSquadAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_vault","type":"address"}],"name":"setVaultAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_dapp","type":"address[]"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600280546001600160a01b031990811673dbd4264248e2f814838702e0cb3015ac3a7157a117909155600380549091167348c45a687173ec396353cd1e507b26fa4f6ff6d91790553480156200005957600080fd5b5062000065336200007c565b6000805460ff60a01b1916905560018055620000cc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b614e8b80620000dc6000396000f3fe60806040526004361061016a5760003560e01c806385535cc5116100d1578063cf14e5571161008a578063e7b061e811610064578063e7b061e814610506578063eed188b514610519578063f23a6e611461052e578063f2fde38b1461057457600080fd5b8063cf14e557146104a6578063dc788a24146104c6578063e272b892146104e657600080fd5b806385535cc5146103b45780638da5cb5b146103d45780639dfe9d68146103f2578063b19eee131461042b578063bc197c811461044b578063c041abb11461049357600080fd5b8063411557d111610123578063411557d1146102da57806342a22917146103125780635c975abb1461034057806363bf87d41461035f57806368eb640d1461037f578063715018a61461039f57600080fd5b806301ffc9a7146101ab578063150b7a02146101e057806319ba5e731461023e57806323e0aa4c1461026b57806325d4eeb0146102985780633c271a05146102ba57600080fd5b366101a65760405134815233907f0de0271e0148b63e6b759917905b6ae5d995f6081392a30b9fa9e23bb4fb98719060200160405180910390a2005b600080fd5b3480156101b757600080fd5b506101cb6101c6366004614017565b610594565b60405190151581526020015b60405180910390f35b3480156101ec57600080fd5b506102256101fb3660046140ae565b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f95945050505050565b6040516001600160e01b031990911681526020016101d7565b34801561024a57600080fd5b5061025e610259366004614120565b6105cb565b6040516101d79190614184565b34801561027757600080fd5b5061028b610286366004614210565b6106c3565b6040516101d79190614280565b3480156102a457600080fd5b506102b86102b3366004614334565b6108b6565b005b3480156102c657600080fd5b506102b86102d5366004614404565b610933565b3480156102e657600080fd5b506003546102fa906001600160a01b031681565b6040516001600160a01b0390911681526020016101d7565b34801561031e57600080fd5b5061033261032d3660046144b4565b6109c9565b6040519081526020016101d7565b34801561034c57600080fd5b50600054600160a01b900460ff166101cb565b34801561036b57600080fd5b506002546102fa906001600160a01b031681565b34801561038b57600080fd5b506102b861039a3660046144e0565b6109fb565b3480156103ab57600080fd5b506102b8610a53565b3480156103c057600080fd5b506102b86103cf366004614519565b610a89565b3480156103e057600080fd5b506000546001600160a01b03166102fa565b3480156103fe57600080fd5b506101cb61040d366004614519565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561043757600080fd5b506102b8610446366004614519565b610ad5565b34801561045757600080fd5b5061022561046636600461457a565b7fbc197c819b3e337a6f9652dd10becd7eef83032af3b9d958d3d42f669414662198975050505050505050565b6102b86104a1366004614847565b610b21565b3480156104b257600080fd5b506102b86104c1366004614937565b6116d1565b3480156104d257600080fd5b506102b86104e136600461495c565b61183d565b3480156104f257600080fd5b506102b8610501366004614975565b6123ab565b6102b8610514366004614120565b6123ed565b34801561052557600080fd5b50600d54610332565b34801561053a57600080fd5b50610225610549366004614990565b7ff23a6e612e1ff4830e658fe43f4e3cb4a5f8170bd5d9e69fb5d7a7fa9e4fdf979695505050505050565b34801561058057600080fd5b506102b861058f366004614519565b613ce4565b60006301ffc9a760e01b6001600160e01b0319831614806105c55750630271189760e51b6001600160e01b03198316145b92915050565b6105d3613ed6565b6001600160a01b0383166000908152600a60209081526040808320858452600b909252909120548154811061060a5761060a614a0b565b6000918252602091829020604080516101208101825260099093029091018054835260018101546001600160a01b0390811694840194909452600280820154928401929092526003810154909316606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e0830152600883015491929161010084019160ff909116908111156106a8576106a861414c565b60028111156106b9576106b961414c565b9052509392505050565b6040805160a0810182526000808252602082015260609181018290528181018290526080810191909152821561088f57600084815260086020526040902080548390811061071357610713614a0b565b60009182526020918290206040805160a081018252600590930290910180546001600160a01b03908116845260018201541683850152600281018054835181870281018701855281815294959294938601939283018282801561079557602002820191906000526020600020905b815481526020019060010190808311610781575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156107ed57602002820191906000526020600020905b8154815260200190600101908083116107d9575b5050505050815260200160048201805461080690614a21565b80601f016020809104026020016040519081016040528092919081815260200182805461083290614a21565b801561087f5780601f106108545761010080835404028352916020019161087f565b820191906000526020600020905b81548152906001019060200180831161086257829003601f168201915b50505050508152505090506108af565b600084815260096020526040902080548390811061071357610713614a0b565b9392505050565b6000546001600160a01b031633146108e95760405162461bcd60e51b81526004016108e090614a5c565b60405180910390fd5b600054600160a01b900460ff16156109135760405162461bcd60e51b81526004016108e090614a91565b600c805460ff191683151517905561092c816001614ad1565b600d555050565b6000546001600160a01b0316331461095d5760405162461bcd60e51b81526004016108e090614a5c565b60005b82518110156109c457816005600085848151811061098057610980614a0b565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806109bc81614af0565b915050610960565b505050565b600081156109e657506000828152600860205260409020546105c5565b506000828152600960205260409020546105c5565b6000546001600160a01b03163314610a255760405162461bcd60e51b81526004016108e090614a5c565b6001600160a01b03918216600090815260046020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b03163314610a7d5760405162461bcd60e51b81526004016108e090614a5c565b610a876000613d78565b565b6000546001600160a01b03163314610ab35760405162461bcd60e51b81526004016108e090614a5c565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610aff5760405162461bcd60e51b81526004016108e090614a5c565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600054600160a01b900460ff1615610b4b5760405162461bcd60e51b81526004016108e090614a91565b60026001541415610b6e5760405162461bcd60e51b81526004016108e090614b0b565b6002600155600c5460ff1615610c5b576002546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614b42565b610c2b576040830151600d54610bff91613dc8565b341015610c1e5760405162461bcd60e51b81526004016108e090614b5b565b600d5460e0840152610c7f565b8260400151341015610c4f5760405162461bcd60e51b81526004016108e090614b5b565b600060e0840152610c7f565b8260400151341015610c7f5760405162461bcd60e51b81526004016108e090614b5b565b336020848101828152600680548088526000908152600e8452604080822080546001600160a01b0319908116881790915560608a0180518b518552600f885283852080546001600160a01b039283169085161790554260a08d0190815260c08d018681526101008e018781529a8752600a808b5286882080548a548a52600b8d52888a20819055918c52600182810182559089529a9097208e516009909802019687559751868a0180548616918416919091179055938c0151600280870191909155915160038601805490941691161790915560808a015160048401559051600583015592519181019190915560e0870151600782015592516008840180548895949293919260ff1991909116918490811115610d9e57610d9e61414c565b0217905550505060005b8251811015610e9657835160009081526008602052604090208351849083908110610dd557610dd5614a0b565b602090810291909101810151825460018181018555600094855293839020825160059092020180546001600160a01b039283166001600160a01b031991821617825583850151958201805496909316951694909417905560408101518051919392610e4892600285019290910190613f44565b5060608201518051610e64916003840191602090910190613f44565b5060808201518051610e80916004840191602090910190613f8f565b5050508080610e8e90614af0565b915050610da8565b5060005b8151811015610f8857835160009081526009602052604090208251839083908110610ec757610ec7614a0b565b602090810291909101810151825460018181018555600094855293839020825160059092020180546001600160a01b039283166001600160a01b031991821617825583850151958201805496909316951694909417905560408101518051919392610f3a92600285019290910190613f44565b5060608201518051610f56916003840191602090910190613f44565b5060808201518051610f72916004840191602090910190613f8f565b5050508080610f8090614af0565b915050610e9a565b5060005b835160009081526008602052604090205481101561163a57835160009081526008602052604081208054600592919084908110610fcb57610fcb614a0b565b600091825260208083206005909202909101546001600160a01b0316835282019290925260400190205460ff166110145760405162461bcd60e51b81526004016108e090614ba5565b8351600090815260086020526040902080547390b7cf88476cc99d295429d4c1bb1ff52448abee91908390811061104d5761104d614a0b565b60009182526020909120600160059092020101546001600160a01b0316141561117a578351600090815260086020526040902080548290811061109257611092614a0b565b6000918252602080832060059092029091015486820151875184526008909252604090922080546001600160a01b03909316926323b872dd92913091869081106110de576110de614a0b565b906000526020600020906005020160030160008154811061110157611101614a0b565b6000918252602090912001546040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015b600060405180830381600087803b15801561115d57600080fd5b505af1158015611171573d6000803e3d6000fd5b50505050611628565b8351600090815260086020526040902080547358874d2951524f7f851bbbe240f0c3cf0b992d799190839081106111b3576111b3614a0b565b60009182526020909120600160059092020101546001600160a01b031614156112ca57835160009081526008602052604090208054829081106111f8576111f8614a0b565b6000918252602080832060059092029091015486820151875184526008909252604090922080546001600160a01b039093169263b88d4fde929130918690811061124457611244614a0b565b906000526020600020906005020160020160008154811061126757611267614a0b565b9060005260206000200154600860008a600001518152602001908152602001600020868154811061129a5761129a614a0b565b90600052602060002090600502016004016040518563ffffffff1660e01b81526004016111439493929190614c88565b83516000908152600860205260409020805473edfdd7266667d48f3c9ab10194c3d325813d8c3991908390811061130357611303614a0b565b60009182526020909120600160059092020101546001600160a01b03161415611437578351600090815260086020526040902080548290811061134857611348614a0b565b6000918252602080832060059092029091015486820151875184526008909252604090922080546001600160a01b0390931692632eb2c2d6929130918690811061139457611394614a0b565b9060005260206000209060050201600201600860008a60000151815260200190815260200160002086815481106113cd576113cd614a0b565b9060005260206000209060050201600301600860008b600001518152602001908152602001600020878154811061140657611406614a0b565b90600052602060002090600502016004016040518663ffffffff1660e01b8152600401611143959493929190614cfa565b83516000908152600860205260408120805460049291908490811061145e5761145e614a0b565b600091825260208083206005909202909101546001600160a01b0390811684528382019490945260409283018220548851835260089091529190208054919092169163810a665391849081106114b6576114b6614a0b565b60009182526020808320600590920290910154888201518951845260089092526040832080546001600160a01b0390921693600492909190889081106114fe576114fe614a0b565b600091825260208083206005909202909101546001600160a01b0390811684528382019490945260409283018220548c518352600890915291902080549190921691908790811061155157611551614a0b565b9060005260206000209060050201600201600860008b600001518152602001908152602001600020878154811061158a5761158a614a0b565b9060005260206000209060050201600301600860008c60000151815260200190815260200160002088815481106115c3576115c3614a0b565b90600052602060002090600502016004016040518763ffffffff1660e01b81526004016115f596959493929190614d58565b600060405180830381600087803b15801561160f57600080fd5b505af1158015611623573d6000803e3d6000fd5b505050505b8061163281614af0565b915050610f8c565b83610100015160028111156116515761165161414c565b61165e6201518042614dbf565b6116689042614de1565b8551606087015160405133927f20c004714deaf94f3e80538ac812eb372a6d40711070cd585f447f9ef76d525d926116b1929182526001600160a01b0316602082015260400190565b60405180910390a46116c7600680546001019055565b5050600180555050565b6000828152600e60205260409020546001600160a01b031633146117075760405162461bcd60e51b81526004016108e090614df8565b336000908152600a60209081526040808320858452600b909252909120548154811061173557611735614a0b565b60009182526020909120600990910201600101546001600160a01b031633146117b05760405162461bcd60e51b815260206004820152602760248201527f4d6573736167652073656e646572206d7573742062652074686520737761702060448201526631b932b0ba37b960c91b60648201526084016108e0565b6000828152600f6020908152604080832080546001600160a01b0319166001600160a01b038616179055338352600a8252808320858452600b90925290912054815483929190811061180457611804614a0b565b906000526020600020906009020160030160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b600260015414156118605760405162461bcd60e51b81526004016108e090614b0b565b60026001556000818152600e60205260409020546001600160a01b0316331461189b5760405162461bcd60e51b81526004016108e090614df8565b336000818152600a60209081526040808320858452600b90925290912054815481106118c9576118c9614a0b565b60009182526020909120600160099092020101546001600160a01b0316146119035760405162461bcd60e51b81526004016108e090614df8565b336000908152600a60209081526040808320848452600b9092528220548154811061193057611930614a0b565b600091825260209091206008600990920201015460ff1660028111156119585761195861414c565b146119a15760405162461bcd60e51b815260206004820152601960248201527814ddd85c0814dd185d1d5cc81a5cc81b9bdd081bdc195b9959603a1b60448201526064016108e0565b336000908152600a60209081526040808320848452600b909252822054815481106119ce576119ce614a0b565b9060005260206000209060090201600701541115611a5957336000818152600a60209081526040808320858452600b9092529091205481546108fc9291908110611a1a57611a1a614a0b565b9060005260206000209060090201600701549081150290604051600060405180830381858888f19350505050158015611a57573d6000803e3d6000fd5b505b60005b6000828152600860205260409020548110156121a257600082815260086020526040902080547390b7cf88476cc99d295429d4c1bb1ff52448abee919083908110611aa957611aa9614a0b565b60009182526020909120600160059092020101546001600160a01b03161415611c17576000828152600860205260409020805482908110611aec57611aec614a0b565b60009182526020808320600590920290910154338352600a82526040808420868552600b9093529092205481546001600160a01b039093169263a9059cbb9291908110611b3b57611b3b614a0b565b906000526020600020906009020160010160009054906101000a90046001600160a01b0316600860008681526020019081526020016000208481548110611b8457611b84614a0b565b9060005260206000209060050201600301600081548110611ba757611ba7614a0b565b6000918252602090912001546040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015b600060405180830381600087803b158015611bfa57600080fd5b505af1158015611c0e573d6000803e3d6000fd5b50505050612190565b600082815260086020526040902080547358874d2951524f7f851bbbe240f0c3cf0b992d79919083908110611c4e57611c4e614a0b565b60009182526020909120600160059092020101546001600160a01b03161415611dad576000828152600860205260409020805482908110611c9157611c91614a0b565b60009182526020808320600590920290910154338352600a82526040808420868552600b9093529092205481546001600160a01b039093169263b88d4fde92309290918110611ce257611ce2614a0b565b906000526020600020906009020160010160009054906101000a90046001600160a01b0316600860008781526020019081526020016000208581548110611d2b57611d2b614a0b565b9060005260206000209060050201600201600081548110611d4e57611d4e614a0b565b9060005260206000200154600860008881526020019081526020016000208681548110611d7d57611d7d614a0b565b90600052602060002090600502016004016040518563ffffffff1660e01b8152600401611be09493929190614c88565b6000828152600860205260409020805473edfdd7266667d48f3c9ab10194c3d325813d8c39919083908110611de457611de4614a0b565b60009182526020909120600160059092020101546001600160a01b03161415611f5c576000828152600860205260409020805482908110611e2757611e27614a0b565b60009182526020808320600590920290910154338352600a82526040808420868552600b9093529092205481546001600160a01b0390931692632eb2c2d692309290918110611e7857611e78614a0b565b906000526020600020906009020160010160009054906101000a90046001600160a01b0316600860008781526020019081526020016000208581548110611ec157611ec1614a0b565b9060005260206000209060050201600201600860008881526020019081526020016000208681548110611ef657611ef6614a0b565b9060005260206000209060050201600301600860008981526020019081526020016000208781548110611f2b57611f2b614a0b565b90600052602060002090600502016004016040518663ffffffff1660e01b8152600401611be0959493929190614cfa565b60008281526008602052604081208054600492919084908110611f8157611f81614a0b565b600091825260208083206005909202909101546001600160a01b03908116845283820194909452604092830182205486835260089091529190208054919092169163810a66539184908110611fd857611fd8614a0b565b6000918252602080832060059092029091015486835260089091526040822080546001600160a01b03909216926004929091908790811061201b5761201b614a0b565b600091825260208083206005909202909101546001600160a01b039081168452838201949094526040928301822054338352600a82528383208a8452600b9092529290912054815492909316929091811061207857612078614a0b565b906000526020600020906009020160010160009054906101000a90046001600160a01b03166008600088815260200190815260200160002086815481106120c1576120c1614a0b565b90600052602060002090600502016002016008600089815260200190815260200160002087815481106120f6576120f6614a0b565b9060005260206000209060050201600301600860008a8152602001908152602001600020888154811061212b5761212b614a0b565b90600052602060002090600502016004016040518763ffffffff1660e01b815260040161215d96959493929190614d58565b600060405180830381600087803b15801561217757600080fd5b505af115801561218b573d6000803e3d6000fd5b505050505b8061219a81614af0565b915050611a5c565b336000908152600a60209081526040808320858452600b909252822054815481106121cf576121cf614a0b565b90600052602060002090600902016002015411156122a557336000908152600a60209081526040808320858452600b909252909120548154811061221557612215614a0b565b6000918252602080832060016009909302019190910154338352600a82526040808420868552600b9093529092205481546001600160a01b03909316926108fc929190811061226657612266614a0b565b9060005260206000209060090201600201549081150290604051600060405180830381858888f193505050501580156122a3573d6000803e3d6000fd5b505b336000908152600a60209081526040808320858452600b9092529091205481544292919081106122d7576122d7614a0b565b6000918252602080832060066009909302019190910192909255338152600a82526040808220858352600b90935290205481546002929190811061231d5761231d614a0b565b60009182526020909120600860099092020101805460ff1916600183600281111561234a5761234a61414c565b0217905550600261235e6201518042614dbf565b6123689042614de1565b604080518581526000602082015233917f20c004714deaf94f3e80538ac812eb372a6d40711070cd585f447f9ef76d525d910160405180910390a4505060018055565b6000546001600160a01b031633146123d55760405162461bcd60e51b81526004016108e090614a5c565b806123e5576123e2613dd4565b50565b6123e2613e71565b600054600160a01b900460ff16156124175760405162461bcd60e51b81526004016108e090614a91565b6002600154141561243a5760405162461bcd60e51b81526004016108e090614b0b565b60026001556000818152600f60205260409020546001600160a01b031633146124755760405162461bcd60e51b81526004016108e090614df8565b6001600160a01b0382166000908152600a60209081526040808320848452600b909252822054815481106124ab576124ab614a0b565b600091825260209091206008600990920201015460ff1660028111156124d3576124d361414c565b1461251c5760405162461bcd60e51b815260206004820152601960248201527814ddd85c0814dd185d1d5cc81a5cc81b9bdd081bdc195b9959603a1b60448201526064016108e0565b6001600160a01b0382166000908152600a60209081526040808320848452600b90925290912054815433929190811061255757612557614a0b565b60009182526020909120600360099092020101546001600160a01b0316146125915760405162461bcd60e51b81526004016108e090614df8565b600c5460ff1615612894576002546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156125e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126089190614b42565b61275d576001600160a01b0382166000908152600a60209081526040808320848452600b909252909120548154612666929190811061264957612649614a0b565b6000918252602090912060046009909202010154600d5490613dc8565b3410156126855760405162461bcd60e51b81526004016108e090614b5b565b6001600160a01b0382166000908152600a60209081526040808320848452600b90925282205481546126de92919081106126c1576126c1614a0b565b6000918252602090912060076009909202010154600d5490613dc8565b1115612758576003546001600160a01b038381166000908152600a60209081526040808320868452600b90925290912054815492909316926108fc9261272e92919081106126c1576126c1614a0b565b6040518115909202916000818181858888f19350505050158015612756573d6000803e3d6000fd5b505b6128fc565b6001600160a01b0382166000908152600a60209081526040808320848452600b909252909120548154811061279457612794614a0b565b9060005260206000209060090201600401543410156127c55760405162461bcd60e51b81526004016108e090614b5b565b6001600160a01b0382166000908152600a60209081526040808320848452600b909252822054815481106127fb576127fb614a0b565b9060005260206000209060090201600701541115612758576003546001600160a01b038381166000908152600a60209081526040808320868452600b90925290912054815492909316926108fc92811061285757612857614a0b565b9060005260206000209060090201600701549081150290604051600060405180830381858888f19350505050158015612756573d6000803e3d6000fd5b6001600160a01b0382166000908152600a60209081526040808320848452600b90925290912054815481106128cb576128cb614a0b565b9060005260206000209060090201600401543410156128fc5760405162461bcd60e51b81526004016108e090614b5b565b6001600160a01b0382166000908152600a60209081526040808320848452600b90925290912054815433929190811061293757612937614a0b565b6000918252602080832060099290920290910160030180546001600160a01b0319166001600160a01b039485161790559184168152600a82526040808220848352600b909352902054815442929190811061299457612994614a0b565b60009182526020808320600660099093020191909101929092556001600160a01b0384168152600a82526040808220848352600b9093529020548154600192919081106129e3576129e3614a0b565b60009182526020909120600860099092020101805460ff19166001836002811115612a1057612a1061414c565b021790555060005b6000828152600860205260409020548110156131d75760008281526008602052604081208054600592919084908110612a5357612a53614a0b565b600091825260208083206005909202909101546001600160a01b0316835282019290925260400190205460ff16612a9c5760405162461bcd60e51b81526004016108e090614ba5565b600082815260086020526040902080547390b7cf88476cc99d295429d4c1bb1ff52448abee919083908110612ad357612ad3614a0b565b60009182526020909120600160059092020101546001600160a01b03161415612c44576000828152600860205260409020805482908110612b1657612b16614a0b565b600091825260208083206005909202909101546001600160a01b038681168452600a83526040808520878652600b909452909320548254939091169263a9059cbb9291908110612b6857612b68614a0b565b906000526020600020906009020160030160009054906101000a90046001600160a01b0316600860008681526020019081526020016000208481548110612bb157612bb1614a0b565b9060005260206000209060050201600301600081548110612bd457612bd4614a0b565b6000918252602090912001546040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015b600060405180830381600087803b158015612c2757600080fd5b505af1158015612c3b573d6000803e3d6000fd5b505050506131c5565b600082815260086020526040902080547358874d2951524f7f851bbbe240f0c3cf0b992d79919083908110612c7b57612c7b614a0b565b60009182526020909120600160059092020101546001600160a01b03161415612ddd576000828152600860205260409020805482908110612cbe57612cbe614a0b565b600091825260208083206005909202909101546001600160a01b038681168452600a83526040808520878652600b909452909320548254939091169263b88d4fde92309290918110612d1257612d12614a0b565b906000526020600020906009020160030160009054906101000a90046001600160a01b0316600860008781526020019081526020016000208581548110612d5b57612d5b614a0b565b9060005260206000209060050201600201600081548110612d7e57612d7e614a0b565b9060005260206000200154600860008881526020019081526020016000208681548110612dad57612dad614a0b565b90600052602060002090600502016004016040518563ffffffff1660e01b8152600401612c0d9493929190614c88565b6000828152600860205260409020805473edfdd7266667d48f3c9ab10194c3d325813d8c39919083908110612e1457612e14614a0b565b60009182526020909120600160059092020101546001600160a01b03161415612f8f576000828152600860205260409020805482908110612e5757612e57614a0b565b600091825260208083206005909202909101546001600160a01b038681168452600a83526040808520878652600b9094529093205482549390911692632eb2c2d692309290918110612eab57612eab614a0b565b906000526020600020906009020160030160009054906101000a90046001600160a01b0316600860008781526020019081526020016000208581548110612ef457612ef4614a0b565b9060005260206000209060050201600201600860008881526020019081526020016000208681548110612f2957612f29614a0b565b9060005260206000209060050201600301600860008981526020019081526020016000208781548110612f5e57612f5e614a0b565b90600052602060002090600502016004016040518663ffffffff1660e01b8152600401612c0d959493929190614cfa565b60008281526008602052604081208054600492919084908110612fb457612fb4614a0b565b600091825260208083206005909202909101546001600160a01b03908116845283820194909452604092830182205486835260089091529190208054919092169163810a6653918490811061300b5761300b614a0b565b6000918252602080832060059092029091015486835260089091526040822080546001600160a01b03909216926004929091908790811061304e5761304e614a0b565b600091825260208083206005909202909101546001600160a01b0390811684528382019490945260409283018220548a85168352600a82528383208a8452600b909252929091205481549290931692909181106130ad576130ad614a0b565b906000526020600020906009020160030160009054906101000a90046001600160a01b03166008600088815260200190815260200160002086815481106130f6576130f6614a0b565b906000526020600020906005020160020160086000898152602001908152602001600020878154811061312b5761312b614a0b565b9060005260206000209060050201600301600860008a8152602001908152602001600020888154811061316057613160614a0b565b90600052602060002090600502016004016040518763ffffffff1660e01b815260040161319296959493929190614d58565b600060405180830381600087803b1580156131ac57600080fd5b505af11580156131c0573d6000803e3d6000fd5b505050505b806131cf81614af0565b915050612a18565b6001600160a01b0383166000908152600a60209081526040808320858452600b9092528220548154811061320d5761320d614a0b565b90600052602060002090600902016002015411156132ef576001600160a01b0383166000908152600a60209081526040808320858452600b909252909120548154811061325c5761325c614a0b565b60009182526020808320600360099093020191909101546001600160a01b038681168452600a83526040808520878652600b90945290932054825493909116926108fc92919081106132b0576132b0614a0b565b9060005260206000209060090201600201549081150290604051600060405180830381858888f193505050501580156132ed573d6000803e3d6000fd5b505b5060005b600082815260096020526040902054811015613b67576000828152600960205260408120805460059291908490811061332e5761332e614a0b565b600091825260208083206005909202909101546001600160a01b0316835282019290925260400190205460ff166133775760405162461bcd60e51b81526004016108e090614ba5565b600082815260096020526040902080547390b7cf88476cc99d295429d4c1bb1ff52448abee9190839081106133ae576133ae614a0b565b60009182526020909120600160059092020101546001600160a01b0316141561356a5760008281526009602052604090208054829081106133f1576133f1614a0b565b600091825260208083206005909202909101546001600160a01b038681168452600a83526040808520878652600b90945290932054825493909116926323b872dd929190811061344357613443614a0b565b60009182526020808320600360099093020191909101546001600160a01b038881168452600a83526040808520898652600b9094529093205482549390911692811061349157613491614a0b565b6000918252602080832060099283020160010154888452919052604090912080546001600160a01b0390921691869081106134ce576134ce614a0b565b90600052602060002090600502016003016000815481106134f1576134f1614a0b565b6000918252602090912001546040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015b600060405180830381600087803b15801561354d57600080fd5b505af1158015613561573d6000803e3d6000fd5b50505050613b55565b600082815260096020526040902080547358874d2951524f7f851bbbe240f0c3cf0b992d799190839081106135a1576135a1614a0b565b60009182526020909120600160059092020101546001600160a01b031614156137435760008281526009602052604090208054829081106135e4576135e4614a0b565b600091825260208083206005909202909101546001600160a01b038681168452600a83526040808520878652600b909452909320548254939091169263b88d4fde929190811061363657613636614a0b565b60009182526020808320600360099093020191909101546001600160a01b038881168452600a83526040808520898652600b9094529093205482549390911692811061368457613684614a0b565b6000918252602080832060099283020160010154888452919052604090912080546001600160a01b0390921691869081106136c1576136c1614a0b565b90600052602060002090600502016002016000815481106136e4576136e4614a0b565b906000526020600020015460096000888152602001908152602001600020868154811061371357613713614a0b565b90600052602060002090600502016004016040518563ffffffff1660e01b81526004016135339493929190614c88565b6000828152600960205260409020805473edfdd7266667d48f3c9ab10194c3d325813d8c3991908390811061377a5761377a614a0b565b60009182526020909120600160059092020101546001600160a01b031614156139355760008281526009602052604090208054829081106137bd576137bd614a0b565b600091825260208083206005909202909101546001600160a01b038681168452600a83526040808520878652600b9094529093205482549390911692632eb2c2d6929190811061380f5761380f614a0b565b60009182526020808320600360099093020191909101546001600160a01b038881168452600a83526040808520898652600b9094529093205482549390911692811061385d5761385d614a0b565b6000918252602080832060099283020160010154888452919052604090912080546001600160a01b03909216918690811061389a5761389a614a0b565b90600052602060002090600502016002016009600088815260200190815260200160002086815481106138cf576138cf614a0b565b906000526020600020906005020160030160096000898152602001908152602001600020878154811061390457613904614a0b565b90600052602060002090600502016004016040518663ffffffff1660e01b8152600401613533959493929190614cfa565b6000828152600960205260408120805460049291908490811061395a5761395a614a0b565b600091825260208083206005909202909101546001600160a01b03908116845283820194909452604092830182205486835260099091529190208054919092169163810a665391849081106139b1576139b1614a0b565b600091825260208083206005909202909101546001600160a01b038881168452600a83526040808520898652600b909452909320548254939091169281106139fb576139fb614a0b565b60009182526020808320600360099093020191909101546001600160a01b038981168452600a835260408085208a8652600b90945290932054825493909116928110613a4957613a49614a0b565b6000918252602080832060099283020160010154898452919052604090912080546001600160a01b039092169187908110613a8657613a86614a0b565b9060005260206000209060050201600201600960008981526020019081526020016000208781548110613abb57613abb614a0b565b9060005260206000209060050201600301600960008a81526020019081526020016000208881548110613af057613af0614a0b565b90600052602060002090600502016004016040518763ffffffff1660e01b8152600401613b2296959493929190614d58565b600060405180830381600087803b158015613b3c57600080fd5b505af1158015613b50573d6000803e3d6000fd5b505050505b80613b5f81614af0565b9150506132f3565b6001600160a01b0383166000908152600a60209081526040808320858452600b90925282205481548110613b9d57613b9d614a0b565b9060005260206000209060090201600401541115613c7f576001600160a01b0383166000908152600a60209081526040808320858452600b9092529091205481548110613bec57613bec614a0b565b60009182526020808320600160099093020191909101546001600160a01b038681168452600a83526040808520878652600b90945290932054825493909116926108fc9291908110613c4057613c40614a0b565b9060005260206000209060090201600401549081150290604051600060405180830381858888f19350505050158015613c7d573d6000803e3d6000fd5b505b6001613c8e6201518042614dbf565b613c989042614de1565b604080518581526001600160a01b038716602082015233917f20c004714deaf94f3e80538ac812eb372a6d40711070cd585f447f9ef76d525d910160405180910390a450506001805550565b6000546001600160a01b03163314613d0e5760405162461bcd60e51b81526004016108e090614a5c565b6001600160a01b038116613d735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108e0565b6123e2815b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006108af8284614e3d565b600054600160a01b900460ff16613e245760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108e0565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054600160a01b900460ff1615613e9b5760405162461bcd60e51b81526004016108e090614a91565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613e543390565b6040518061012001604052806000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160006002811115613f3f57613f3f61414c565b905290565b828054828255906000526020600020908101928215613f7f579160200282015b82811115613f7f578251825591602001919060010190613f64565b50613f8b929150614002565b5090565b828054613f9b90614a21565b90600052602060002090601f016020900481019282613fbd5760008555613f7f565b82601f10613fd657805160ff1916838001178555613f7f565b82800160010185558215613f7f5791820182811115613f7f578251825591602001919060010190613f64565b5b80821115613f8b5760008155600101614003565b60006020828403121561402957600080fd5b81356001600160e01b0319811681146108af57600080fd5b6001600160a01b03811681146123e257600080fd5b803561406181614041565b919050565b60008083601f84011261407857600080fd5b5081356001600160401b0381111561408f57600080fd5b6020830191508360208285010111156140a757600080fd5b9250929050565b6000806000806000608086880312156140c657600080fd5b85356140d181614041565b945060208601356140e181614041565b93506040860135925060608601356001600160401b0381111561410357600080fd5b61410f88828901614066565b969995985093965092949392505050565b6000806040838503121561413357600080fd5b823561413e81614041565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b6003811061418057634e487b7160e01b600052602160045260246000fd5b9052565b60006101208201905082518252602083015160018060a01b0380821660208501526040850151604085015280606086015116606085015250506080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100808401516141f882850182614162565b505092915050565b8035801515811461406157600080fd5b60008060006060848603121561422557600080fd5b8335925061423560208501614200565b9150604084013590509250925092565b600081518084526020808501945080840160005b8381101561427557815187529582019590820190600101614259565b509495945050505050565b6000602080835260018060a01b038085511682850152808286015116604085015250604084015160a060608501526142bb60c0850182614245565b90506060850151601f19808684030160808701526142d98383614245565b925060808701519150808684030160a0870152815180845260005b8181101561430f5783810186015185820187015285016142f4565b818111156143205760008683870101525b50601f011691909101909101949350505050565b6000806040838503121561434757600080fd5b61413e83614200565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b038111828210171561438857614388614350565b60405290565b60405161012081016001600160401b038111828210171561438857614388614350565b604051601f8201601f191681016001600160401b03811182821017156143d9576143d9614350565b604052919050565b60006001600160401b038211156143fa576143fa614350565b5060051b60200190565b6000806040838503121561441757600080fd5b82356001600160401b0381111561442d57600080fd5b8301601f8101851361443e57600080fd5b8035602061445361444e836143e1565b6143b1565b82815260059290921b8301810191818101908884111561447257600080fd5b938201935b8385101561449957843561448a81614041565b82529382019390820190614477565b95506144a89050868201614200565b93505050509250929050565b600080604083850312156144c757600080fd5b823591506144d760208401614200565b90509250929050565b600080604083850312156144f357600080fd5b82356144fe81614041565b9150602083013561450e81614041565b809150509250929050565b60006020828403121561452b57600080fd5b81356108af81614041565b60008083601f84011261454857600080fd5b5081356001600160401b0381111561455f57600080fd5b6020830191508360208260051b85010111156140a757600080fd5b60008060008060008060008060a0898b03121561459657600080fd5b88356145a181614041565b975060208901356145b181614041565b965060408901356001600160401b03808211156145cd57600080fd5b6145d98c838d01614536565b909850965060608b01359150808211156145f257600080fd5b6145fe8c838d01614536565b909650945060808b013591508082111561461757600080fd5b506146248b828c01614066565b999c989b5096995094979396929594505050565b80356003811061406157600080fd5b600082601f83011261465857600080fd5b8135602061466861444e836143e1565b82815260059290921b8401810191818101908684111561468757600080fd5b8286015b848110156146a2578035835291830191830161468b565b509695505050505050565b600082601f8301126146be57600080fd5b81356001600160401b038111156146d7576146d7614350565b6146ea601f8201601f19166020016143b1565b8181528460208386010111156146ff57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261472d57600080fd5b8135602061473d61444e836143e1565b82815260059290921b8401810191818101908684111561475c57600080fd5b8286015b848110156146a25780356001600160401b03808211156147805760008081fd5b9088019060a0828b03601f190181131561479a5760008081fd5b6147a2614366565b6147ad888501614056565b815260406147bc818601614056565b89830152606080860135858111156147d45760008081fd5b6147e28f8c838a0101614647565b83850152506080915081860135858111156147fd5760008081fd5b61480b8f8c838a0101614647565b828501525050828501359250838311156148255760008081fd5b6148338d8a858801016146ad565b908201528652505050918301918301614760565b600080600083850361016081121561485e57600080fd5b6101208082121561486e57600080fd5b61487661438e565b91508535825261488860208701614056565b6020830152604086013560408301526148a360608701614056565b60608301526080860135608083015260a086013560a083015260c086013560c083015260e086013560e08301526101006148de818801614638565b908301529093508401356001600160401b03808211156148fd57600080fd5b6149098783880161471c565b935061014086013591508082111561492057600080fd5b5061492d8682870161471c565b9150509250925092565b6000806040838503121561494a57600080fd5b82359150602083013561450e81614041565b60006020828403121561496e57600080fd5b5035919050565b60006020828403121561498757600080fd5b6108af82614200565b60008060008060008060a087890312156149a957600080fd5b86356149b481614041565b955060208701356149c481614041565b9450604087013593506060870135925060808701356001600160401b038111156149ed57600080fd5b6149f989828a01614066565b979a9699509497509295939492505050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680614a3557607f821691505b60208210811415614a5657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615614aeb57614aeb614abb565b500290565b6000600019821415614b0457614b04614abb565b5060010190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600060208284031215614b5457600080fd5b5051919050565b6020808252602a908201527f4e6f7420656e6f756768742057454920666f722068616e646c652074686520746040820152693930b739b0b1ba34b7b760b11b606082015260800190565b60208082526023908201527f412044415050206973206e6f742068616e646c6564206279207468652073797360408201526274656d60e81b606082015260800190565b8054600090600181811c9080831680614c0257607f831692505b6020808410821415614c2457634e487b7160e01b600052602260045260246000fd5b83885260208801828015614c3f5760018114614c5057614c7b565b60ff19871682528282019750614c7b565b60008981526020902060005b87811015614c7557815484820152908601908401614c5c565b83019850505b5050505050505092915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614cbb90830184614be8565b9695505050505050565b6000815480845260208085019450836000528060002060005b8381101561427557815487529582019560019182019101614cde565b6001600160a01b0386811682528516602082015260a060408201819052600090614d2690830186614cc5565b8281036060840152614d388186614cc5565b90508281036080840152614d4c8185614be8565b98975050505050505050565b6001600160a01b03878116825286811660208301528516604082015260c060608201819052600090614d8c90830186614cc5565b8281036080840152614d9e8186614cc5565b905082810360a0840152614db28185614be8565b9998505050505050505050565b600082614ddc57634e487b7160e01b600052601260045260246000fd5b500690565b600082821015614df357614df3614abb565b500390565b60208082526025908201527f596f75277265206e6f742074686520696e746572657374656420636f756e74656040820152641c9c185c9d60da1b606082015260800190565b60008219821115614e5057614e50614abb565b50019056fea2646970667358221220389ff5836611c4aaf1a4d0e6796947341dd7d392f0a64bdd25941db4f4394f7764736f6c634300080a0033
Deployed Bytecode
0x60806040526004361061016a5760003560e01c806385535cc5116100d1578063cf14e5571161008a578063e7b061e811610064578063e7b061e814610506578063eed188b514610519578063f23a6e611461052e578063f2fde38b1461057457600080fd5b8063cf14e557146104a6578063dc788a24146104c6578063e272b892146104e657600080fd5b806385535cc5146103b45780638da5cb5b146103d45780639dfe9d68146103f2578063b19eee131461042b578063bc197c811461044b578063c041abb11461049357600080fd5b8063411557d111610123578063411557d1146102da57806342a22917146103125780635c975abb1461034057806363bf87d41461035f57806368eb640d1461037f578063715018a61461039f57600080fd5b806301ffc9a7146101ab578063150b7a02146101e057806319ba5e731461023e57806323e0aa4c1461026b57806325d4eeb0146102985780633c271a05146102ba57600080fd5b366101a65760405134815233907f0de0271e0148b63e6b759917905b6ae5d995f6081392a30b9fa9e23bb4fb98719060200160405180910390a2005b600080fd5b3480156101b757600080fd5b506101cb6101c6366004614017565b610594565b60405190151581526020015b60405180910390f35b3480156101ec57600080fd5b506102256101fb3660046140ae565b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f95945050505050565b6040516001600160e01b031990911681526020016101d7565b34801561024a57600080fd5b5061025e610259366004614120565b6105cb565b6040516101d79190614184565b34801561027757600080fd5b5061028b610286366004614210565b6106c3565b6040516101d79190614280565b3480156102a457600080fd5b506102b86102b3366004614334565b6108b6565b005b3480156102c657600080fd5b506102b86102d5366004614404565b610933565b3480156102e657600080fd5b506003546102fa906001600160a01b031681565b6040516001600160a01b0390911681526020016101d7565b34801561031e57600080fd5b5061033261032d3660046144b4565b6109c9565b6040519081526020016101d7565b34801561034c57600080fd5b50600054600160a01b900460ff166101cb565b34801561036b57600080fd5b506002546102fa906001600160a01b031681565b34801561038b57600080fd5b506102b861039a3660046144e0565b6109fb565b3480156103ab57600080fd5b506102b8610a53565b3480156103c057600080fd5b506102b86103cf366004614519565b610a89565b3480156103e057600080fd5b506000546001600160a01b03166102fa565b3480156103fe57600080fd5b506101cb61040d366004614519565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561043757600080fd5b506102b8610446366004614519565b610ad5565b34801561045757600080fd5b5061022561046636600461457a565b7fbc197c819b3e337a6f9652dd10becd7eef83032af3b9d958d3d42f669414662198975050505050505050565b6102b86104a1366004614847565b610b21565b3480156104b257600080fd5b506102b86104c1366004614937565b6116d1565b3480156104d257600080fd5b506102b86104e136600461495c565b61183d565b3480156104f257600080fd5b506102b8610501366004614975565b6123ab565b6102b8610514366004614120565b6123ed565b34801561052557600080fd5b50600d54610332565b34801561053a57600080fd5b50610225610549366004614990565b7ff23a6e612e1ff4830e658fe43f4e3cb4a5f8170bd5d9e69fb5d7a7fa9e4fdf979695505050505050565b34801561058057600080fd5b506102b861058f366004614519565b613ce4565b60006301ffc9a760e01b6001600160e01b0319831614806105c55750630271189760e51b6001600160e01b03198316145b92915050565b6105d3613ed6565b6001600160a01b0383166000908152600a60209081526040808320858452600b909252909120548154811061060a5761060a614a0b565b6000918252602091829020604080516101208101825260099093029091018054835260018101546001600160a01b0390811694840194909452600280820154928401929092526003810154909316606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e0830152600883015491929161010084019160ff909116908111156106a8576106a861414c565b60028111156106b9576106b961414c565b9052509392505050565b6040805160a0810182526000808252602082015260609181018290528181018290526080810191909152821561088f57600084815260086020526040902080548390811061071357610713614a0b565b60009182526020918290206040805160a081018252600590930290910180546001600160a01b03908116845260018201541683850152600281018054835181870281018701855281815294959294938601939283018282801561079557602002820191906000526020600020905b815481526020019060010190808311610781575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156107ed57602002820191906000526020600020905b8154815260200190600101908083116107d9575b5050505050815260200160048201805461080690614a21565b80601f016020809104026020016040519081016040528092919081815260200182805461083290614a21565b801561087f5780601f106108545761010080835404028352916020019161087f565b820191906000526020600020905b81548152906001019060200180831161086257829003601f168201915b50505050508152505090506108af565b600084815260096020526040902080548390811061071357610713614a0b565b9392505050565b6000546001600160a01b031633146108e95760405162461bcd60e51b81526004016108e090614a5c565b60405180910390fd5b600054600160a01b900460ff16156109135760405162461bcd60e51b81526004016108e090614a91565b600c805460ff191683151517905561092c816001614ad1565b600d555050565b6000546001600160a01b0316331461095d5760405162461bcd60e51b81526004016108e090614a5c565b60005b82518110156109c457816005600085848151811061098057610980614a0b565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806109bc81614af0565b915050610960565b505050565b600081156109e657506000828152600860205260409020546105c5565b506000828152600960205260409020546105c5565b6000546001600160a01b03163314610a255760405162461bcd60e51b81526004016108e090614a5c565b6001600160a01b03918216600090815260046020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b03163314610a7d5760405162461bcd60e51b81526004016108e090614a5c565b610a876000613d78565b565b6000546001600160a01b03163314610ab35760405162461bcd60e51b81526004016108e090614a5c565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610aff5760405162461bcd60e51b81526004016108e090614a5c565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600054600160a01b900460ff1615610b4b5760405162461bcd60e51b81526004016108e090614a91565b60026001541415610b6e5760405162461bcd60e51b81526004016108e090614b0b565b6002600155600c5460ff1615610c5b576002546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614b42565b610c2b576040830151600d54610bff91613dc8565b341015610c1e5760405162461bcd60e51b81526004016108e090614b5b565b600d5460e0840152610c7f565b8260400151341015610c4f5760405162461bcd60e51b81526004016108e090614b5b565b600060e0840152610c7f565b8260400151341015610c7f5760405162461bcd60e51b81526004016108e090614b5b565b336020848101828152600680548088526000908152600e8452604080822080546001600160a01b0319908116881790915560608a0180518b518552600f885283852080546001600160a01b039283169085161790554260a08d0190815260c08d018681526101008e018781529a8752600a808b5286882080548a548a52600b8d52888a20819055918c52600182810182559089529a9097208e516009909802019687559751868a0180548616918416919091179055938c0151600280870191909155915160038601805490941691161790915560808a015160048401559051600583015592519181019190915560e0870151600782015592516008840180548895949293919260ff1991909116918490811115610d9e57610d9e61414c565b0217905550505060005b8251811015610e9657835160009081526008602052604090208351849083908110610dd557610dd5614a0b565b602090810291909101810151825460018181018555600094855293839020825160059092020180546001600160a01b039283166001600160a01b031991821617825583850151958201805496909316951694909417905560408101518051919392610e4892600285019290910190613f44565b5060608201518051610e64916003840191602090910190613f44565b5060808201518051610e80916004840191602090910190613f8f565b5050508080610e8e90614af0565b915050610da8565b5060005b8151811015610f8857835160009081526009602052604090208251839083908110610ec757610ec7614a0b565b602090810291909101810151825460018181018555600094855293839020825160059092020180546001600160a01b039283166001600160a01b031991821617825583850151958201805496909316951694909417905560408101518051919392610f3a92600285019290910190613f44565b5060608201518051610f56916003840191602090910190613f44565b5060808201518051610f72916004840191602090910190613f8f565b5050508080610f8090614af0565b915050610e9a565b5060005b835160009081526008602052604090205481101561163a57835160009081526008602052604081208054600592919084908110610fcb57610fcb614a0b565b600091825260208083206005909202909101546001600160a01b0316835282019290925260400190205460ff166110145760405162461bcd60e51b81526004016108e090614ba5565b8351600090815260086020526040902080547390b7cf88476cc99d295429d4c1bb1ff52448abee91908390811061104d5761104d614a0b565b60009182526020909120600160059092020101546001600160a01b0316141561117a578351600090815260086020526040902080548290811061109257611092614a0b565b6000918252602080832060059092029091015486820151875184526008909252604090922080546001600160a01b03909316926323b872dd92913091869081106110de576110de614a0b565b906000526020600020906005020160030160008154811061110157611101614a0b565b6000918252602090912001546040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015b600060405180830381600087803b15801561115d57600080fd5b505af1158015611171573d6000803e3d6000fd5b50505050611628565b8351600090815260086020526040902080547358874d2951524f7f851bbbe240f0c3cf0b992d799190839081106111b3576111b3614a0b565b60009182526020909120600160059092020101546001600160a01b031614156112ca57835160009081526008602052604090208054829081106111f8576111f8614a0b565b6000918252602080832060059092029091015486820151875184526008909252604090922080546001600160a01b039093169263b88d4fde929130918690811061124457611244614a0b565b906000526020600020906005020160020160008154811061126757611267614a0b565b9060005260206000200154600860008a600001518152602001908152602001600020868154811061129a5761129a614a0b565b90600052602060002090600502016004016040518563ffffffff1660e01b81526004016111439493929190614c88565b83516000908152600860205260409020805473edfdd7266667d48f3c9ab10194c3d325813d8c3991908390811061130357611303614a0b565b60009182526020909120600160059092020101546001600160a01b03161415611437578351600090815260086020526040902080548290811061134857611348614a0b565b6000918252602080832060059092029091015486820151875184526008909252604090922080546001600160a01b0390931692632eb2c2d6929130918690811061139457611394614a0b565b9060005260206000209060050201600201600860008a60000151815260200190815260200160002086815481106113cd576113cd614a0b565b9060005260206000209060050201600301600860008b600001518152602001908152602001600020878154811061140657611406614a0b565b90600052602060002090600502016004016040518663ffffffff1660e01b8152600401611143959493929190614cfa565b83516000908152600860205260408120805460049291908490811061145e5761145e614a0b565b600091825260208083206005909202909101546001600160a01b0390811684528382019490945260409283018220548851835260089091529190208054919092169163810a665391849081106114b6576114b6614a0b565b60009182526020808320600590920290910154888201518951845260089092526040832080546001600160a01b0390921693600492909190889081106114fe576114fe614a0b565b600091825260208083206005909202909101546001600160a01b0390811684528382019490945260409283018220548c518352600890915291902080549190921691908790811061155157611551614a0b565b9060005260206000209060050201600201600860008b600001518152602001908152602001600020878154811061158a5761158a614a0b565b9060005260206000209060050201600301600860008c60000151815260200190815260200160002088815481106115c3576115c3614a0b565b90600052602060002090600502016004016040518763ffffffff1660e01b81526004016115f596959493929190614d58565b600060405180830381600087803b15801561160f57600080fd5b505af1158015611623573d6000803e3d6000fd5b505050505b8061163281614af0565b915050610f8c565b83610100015160028111156116515761165161414c565b61165e6201518042614dbf565b6116689042614de1565b8551606087015160405133927f20c004714deaf94f3e80538ac812eb372a6d40711070cd585f447f9ef76d525d926116b1929182526001600160a01b0316602082015260400190565b60405180910390a46116c7600680546001019055565b5050600180555050565b6000828152600e60205260409020546001600160a01b031633146117075760405162461bcd60e51b81526004016108e090614df8565b336000908152600a60209081526040808320858452600b909252909120548154811061173557611735614a0b565b60009182526020909120600990910201600101546001600160a01b031633146117b05760405162461bcd60e51b815260206004820152602760248201527f4d6573736167652073656e646572206d7573742062652074686520737761702060448201526631b932b0ba37b960c91b60648201526084016108e0565b6000828152600f6020908152604080832080546001600160a01b0319166001600160a01b038616179055338352600a8252808320858452600b90925290912054815483929190811061180457611804614a0b565b906000526020600020906009020160030160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b600260015414156118605760405162461bcd60e51b81526004016108e090614b0b565b60026001556000818152600e60205260409020546001600160a01b0316331461189b5760405162461bcd60e51b81526004016108e090614df8565b336000818152600a60209081526040808320858452600b90925290912054815481106118c9576118c9614a0b565b60009182526020909120600160099092020101546001600160a01b0316146119035760405162461bcd60e51b81526004016108e090614df8565b336000908152600a60209081526040808320848452600b9092528220548154811061193057611930614a0b565b600091825260209091206008600990920201015460ff1660028111156119585761195861414c565b146119a15760405162461bcd60e51b815260206004820152601960248201527814ddd85c0814dd185d1d5cc81a5cc81b9bdd081bdc195b9959603a1b60448201526064016108e0565b336000908152600a60209081526040808320848452600b909252822054815481106119ce576119ce614a0b565b9060005260206000209060090201600701541115611a5957336000818152600a60209081526040808320858452600b9092529091205481546108fc9291908110611a1a57611a1a614a0b565b9060005260206000209060090201600701549081150290604051600060405180830381858888f19350505050158015611a57573d6000803e3d6000fd5b505b60005b6000828152600860205260409020548110156121a257600082815260086020526040902080547390b7cf88476cc99d295429d4c1bb1ff52448abee919083908110611aa957611aa9614a0b565b60009182526020909120600160059092020101546001600160a01b03161415611c17576000828152600860205260409020805482908110611aec57611aec614a0b565b60009182526020808320600590920290910154338352600a82526040808420868552600b9093529092205481546001600160a01b039093169263a9059cbb9291908110611b3b57611b3b614a0b565b906000526020600020906009020160010160009054906101000a90046001600160a01b0316600860008681526020019081526020016000208481548110611b8457611b84614a0b565b9060005260206000209060050201600301600081548110611ba757611ba7614a0b565b6000918252602090912001546040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015b600060405180830381600087803b158015611bfa57600080fd5b505af1158015611c0e573d6000803e3d6000fd5b50505050612190565b600082815260086020526040902080547358874d2951524f7f851bbbe240f0c3cf0b992d79919083908110611c4e57611c4e614a0b565b60009182526020909120600160059092020101546001600160a01b03161415611dad576000828152600860205260409020805482908110611c9157611c91614a0b565b60009182526020808320600590920290910154338352600a82526040808420868552600b9093529092205481546001600160a01b039093169263b88d4fde92309290918110611ce257611ce2614a0b565b906000526020600020906009020160010160009054906101000a90046001600160a01b0316600860008781526020019081526020016000208581548110611d2b57611d2b614a0b565b9060005260206000209060050201600201600081548110611d4e57611d4e614a0b565b9060005260206000200154600860008881526020019081526020016000208681548110611d7d57611d7d614a0b565b90600052602060002090600502016004016040518563ffffffff1660e01b8152600401611be09493929190614c88565b6000828152600860205260409020805473edfdd7266667d48f3c9ab10194c3d325813d8c39919083908110611de457611de4614a0b565b60009182526020909120600160059092020101546001600160a01b03161415611f5c576000828152600860205260409020805482908110611e2757611e27614a0b565b60009182526020808320600590920290910154338352600a82526040808420868552600b9093529092205481546001600160a01b0390931692632eb2c2d692309290918110611e7857611e78614a0b565b906000526020600020906009020160010160009054906101000a90046001600160a01b0316600860008781526020019081526020016000208581548110611ec157611ec1614a0b565b9060005260206000209060050201600201600860008881526020019081526020016000208681548110611ef657611ef6614a0b565b9060005260206000209060050201600301600860008981526020019081526020016000208781548110611f2b57611f2b614a0b565b90600052602060002090600502016004016040518663ffffffff1660e01b8152600401611be0959493929190614cfa565b60008281526008602052604081208054600492919084908110611f8157611f81614a0b565b600091825260208083206005909202909101546001600160a01b03908116845283820194909452604092830182205486835260089091529190208054919092169163810a66539184908110611fd857611fd8614a0b565b6000918252602080832060059092029091015486835260089091526040822080546001600160a01b03909216926004929091908790811061201b5761201b614a0b565b600091825260208083206005909202909101546001600160a01b039081168452838201949094526040928301822054338352600a82528383208a8452600b9092529290912054815492909316929091811061207857612078614a0b565b906000526020600020906009020160010160009054906101000a90046001600160a01b03166008600088815260200190815260200160002086815481106120c1576120c1614a0b565b90600052602060002090600502016002016008600089815260200190815260200160002087815481106120f6576120f6614a0b565b9060005260206000209060050201600301600860008a8152602001908152602001600020888154811061212b5761212b614a0b565b90600052602060002090600502016004016040518763ffffffff1660e01b815260040161215d96959493929190614d58565b600060405180830381600087803b15801561217757600080fd5b505af115801561218b573d6000803e3d6000fd5b505050505b8061219a81614af0565b915050611a5c565b336000908152600a60209081526040808320858452600b909252822054815481106121cf576121cf614a0b565b90600052602060002090600902016002015411156122a557336000908152600a60209081526040808320858452600b909252909120548154811061221557612215614a0b565b6000918252602080832060016009909302019190910154338352600a82526040808420868552600b9093529092205481546001600160a01b03909316926108fc929190811061226657612266614a0b565b9060005260206000209060090201600201549081150290604051600060405180830381858888f193505050501580156122a3573d6000803e3d6000fd5b505b336000908152600a60209081526040808320858452600b9092529091205481544292919081106122d7576122d7614a0b565b6000918252602080832060066009909302019190910192909255338152600a82526040808220858352600b90935290205481546002929190811061231d5761231d614a0b565b60009182526020909120600860099092020101805460ff1916600183600281111561234a5761234a61414c565b0217905550600261235e6201518042614dbf565b6123689042614de1565b604080518581526000602082015233917f20c004714deaf94f3e80538ac812eb372a6d40711070cd585f447f9ef76d525d910160405180910390a4505060018055565b6000546001600160a01b031633146123d55760405162461bcd60e51b81526004016108e090614a5c565b806123e5576123e2613dd4565b50565b6123e2613e71565b600054600160a01b900460ff16156124175760405162461bcd60e51b81526004016108e090614a91565b6002600154141561243a5760405162461bcd60e51b81526004016108e090614b0b565b60026001556000818152600f60205260409020546001600160a01b031633146124755760405162461bcd60e51b81526004016108e090614df8565b6001600160a01b0382166000908152600a60209081526040808320848452600b909252822054815481106124ab576124ab614a0b565b600091825260209091206008600990920201015460ff1660028111156124d3576124d361414c565b1461251c5760405162461bcd60e51b815260206004820152601960248201527814ddd85c0814dd185d1d5cc81a5cc81b9bdd081bdc195b9959603a1b60448201526064016108e0565b6001600160a01b0382166000908152600a60209081526040808320848452600b90925290912054815433929190811061255757612557614a0b565b60009182526020909120600360099092020101546001600160a01b0316146125915760405162461bcd60e51b81526004016108e090614df8565b600c5460ff1615612894576002546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156125e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126089190614b42565b61275d576001600160a01b0382166000908152600a60209081526040808320848452600b909252909120548154612666929190811061264957612649614a0b565b6000918252602090912060046009909202010154600d5490613dc8565b3410156126855760405162461bcd60e51b81526004016108e090614b5b565b6001600160a01b0382166000908152600a60209081526040808320848452600b90925282205481546126de92919081106126c1576126c1614a0b565b6000918252602090912060076009909202010154600d5490613dc8565b1115612758576003546001600160a01b038381166000908152600a60209081526040808320868452600b90925290912054815492909316926108fc9261272e92919081106126c1576126c1614a0b565b6040518115909202916000818181858888f19350505050158015612756573d6000803e3d6000fd5b505b6128fc565b6001600160a01b0382166000908152600a60209081526040808320848452600b909252909120548154811061279457612794614a0b565b9060005260206000209060090201600401543410156127c55760405162461bcd60e51b81526004016108e090614b5b565b6001600160a01b0382166000908152600a60209081526040808320848452600b909252822054815481106127fb576127fb614a0b565b9060005260206000209060090201600701541115612758576003546001600160a01b038381166000908152600a60209081526040808320868452600b90925290912054815492909316926108fc92811061285757612857614a0b565b9060005260206000209060090201600701549081150290604051600060405180830381858888f19350505050158015612756573d6000803e3d6000fd5b6001600160a01b0382166000908152600a60209081526040808320848452600b90925290912054815481106128cb576128cb614a0b565b9060005260206000209060090201600401543410156128fc5760405162461bcd60e51b81526004016108e090614b5b565b6001600160a01b0382166000908152600a60209081526040808320848452600b90925290912054815433929190811061293757612937614a0b565b6000918252602080832060099290920290910160030180546001600160a01b0319166001600160a01b039485161790559184168152600a82526040808220848352600b909352902054815442929190811061299457612994614a0b565b60009182526020808320600660099093020191909101929092556001600160a01b0384168152600a82526040808220848352600b9093529020548154600192919081106129e3576129e3614a0b565b60009182526020909120600860099092020101805460ff19166001836002811115612a1057612a1061414c565b021790555060005b6000828152600860205260409020548110156131d75760008281526008602052604081208054600592919084908110612a5357612a53614a0b565b600091825260208083206005909202909101546001600160a01b0316835282019290925260400190205460ff16612a9c5760405162461bcd60e51b81526004016108e090614ba5565b600082815260086020526040902080547390b7cf88476cc99d295429d4c1bb1ff52448abee919083908110612ad357612ad3614a0b565b60009182526020909120600160059092020101546001600160a01b03161415612c44576000828152600860205260409020805482908110612b1657612b16614a0b565b600091825260208083206005909202909101546001600160a01b038681168452600a83526040808520878652600b909452909320548254939091169263a9059cbb9291908110612b6857612b68614a0b565b906000526020600020906009020160030160009054906101000a90046001600160a01b0316600860008681526020019081526020016000208481548110612bb157612bb1614a0b565b9060005260206000209060050201600301600081548110612bd457612bd4614a0b565b6000918252602090912001546040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015b600060405180830381600087803b158015612c2757600080fd5b505af1158015612c3b573d6000803e3d6000fd5b505050506131c5565b600082815260086020526040902080547358874d2951524f7f851bbbe240f0c3cf0b992d79919083908110612c7b57612c7b614a0b565b60009182526020909120600160059092020101546001600160a01b03161415612ddd576000828152600860205260409020805482908110612cbe57612cbe614a0b565b600091825260208083206005909202909101546001600160a01b038681168452600a83526040808520878652600b909452909320548254939091169263b88d4fde92309290918110612d1257612d12614a0b565b906000526020600020906009020160030160009054906101000a90046001600160a01b0316600860008781526020019081526020016000208581548110612d5b57612d5b614a0b565b9060005260206000209060050201600201600081548110612d7e57612d7e614a0b565b9060005260206000200154600860008881526020019081526020016000208681548110612dad57612dad614a0b565b90600052602060002090600502016004016040518563ffffffff1660e01b8152600401612c0d9493929190614c88565b6000828152600860205260409020805473edfdd7266667d48f3c9ab10194c3d325813d8c39919083908110612e1457612e14614a0b565b60009182526020909120600160059092020101546001600160a01b03161415612f8f576000828152600860205260409020805482908110612e5757612e57614a0b565b600091825260208083206005909202909101546001600160a01b038681168452600a83526040808520878652600b9094529093205482549390911692632eb2c2d692309290918110612eab57612eab614a0b565b906000526020600020906009020160030160009054906101000a90046001600160a01b0316600860008781526020019081526020016000208581548110612ef457612ef4614a0b565b9060005260206000209060050201600201600860008881526020019081526020016000208681548110612f2957612f29614a0b565b9060005260206000209060050201600301600860008981526020019081526020016000208781548110612f5e57612f5e614a0b565b90600052602060002090600502016004016040518663ffffffff1660e01b8152600401612c0d959493929190614cfa565b60008281526008602052604081208054600492919084908110612fb457612fb4614a0b565b600091825260208083206005909202909101546001600160a01b03908116845283820194909452604092830182205486835260089091529190208054919092169163810a6653918490811061300b5761300b614a0b565b6000918252602080832060059092029091015486835260089091526040822080546001600160a01b03909216926004929091908790811061304e5761304e614a0b565b600091825260208083206005909202909101546001600160a01b0390811684528382019490945260409283018220548a85168352600a82528383208a8452600b909252929091205481549290931692909181106130ad576130ad614a0b565b906000526020600020906009020160030160009054906101000a90046001600160a01b03166008600088815260200190815260200160002086815481106130f6576130f6614a0b565b906000526020600020906005020160020160086000898152602001908152602001600020878154811061312b5761312b614a0b565b9060005260206000209060050201600301600860008a8152602001908152602001600020888154811061316057613160614a0b565b90600052602060002090600502016004016040518763ffffffff1660e01b815260040161319296959493929190614d58565b600060405180830381600087803b1580156131ac57600080fd5b505af11580156131c0573d6000803e3d6000fd5b505050505b806131cf81614af0565b915050612a18565b6001600160a01b0383166000908152600a60209081526040808320858452600b9092528220548154811061320d5761320d614a0b565b90600052602060002090600902016002015411156132ef576001600160a01b0383166000908152600a60209081526040808320858452600b909252909120548154811061325c5761325c614a0b565b60009182526020808320600360099093020191909101546001600160a01b038681168452600a83526040808520878652600b90945290932054825493909116926108fc92919081106132b0576132b0614a0b565b9060005260206000209060090201600201549081150290604051600060405180830381858888f193505050501580156132ed573d6000803e3d6000fd5b505b5060005b600082815260096020526040902054811015613b67576000828152600960205260408120805460059291908490811061332e5761332e614a0b565b600091825260208083206005909202909101546001600160a01b0316835282019290925260400190205460ff166133775760405162461bcd60e51b81526004016108e090614ba5565b600082815260096020526040902080547390b7cf88476cc99d295429d4c1bb1ff52448abee9190839081106133ae576133ae614a0b565b60009182526020909120600160059092020101546001600160a01b0316141561356a5760008281526009602052604090208054829081106133f1576133f1614a0b565b600091825260208083206005909202909101546001600160a01b038681168452600a83526040808520878652600b90945290932054825493909116926323b872dd929190811061344357613443614a0b565b60009182526020808320600360099093020191909101546001600160a01b038881168452600a83526040808520898652600b9094529093205482549390911692811061349157613491614a0b565b6000918252602080832060099283020160010154888452919052604090912080546001600160a01b0390921691869081106134ce576134ce614a0b565b90600052602060002090600502016003016000815481106134f1576134f1614a0b565b6000918252602090912001546040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015b600060405180830381600087803b15801561354d57600080fd5b505af1158015613561573d6000803e3d6000fd5b50505050613b55565b600082815260096020526040902080547358874d2951524f7f851bbbe240f0c3cf0b992d799190839081106135a1576135a1614a0b565b60009182526020909120600160059092020101546001600160a01b031614156137435760008281526009602052604090208054829081106135e4576135e4614a0b565b600091825260208083206005909202909101546001600160a01b038681168452600a83526040808520878652600b909452909320548254939091169263b88d4fde929190811061363657613636614a0b565b60009182526020808320600360099093020191909101546001600160a01b038881168452600a83526040808520898652600b9094529093205482549390911692811061368457613684614a0b565b6000918252602080832060099283020160010154888452919052604090912080546001600160a01b0390921691869081106136c1576136c1614a0b565b90600052602060002090600502016002016000815481106136e4576136e4614a0b565b906000526020600020015460096000888152602001908152602001600020868154811061371357613713614a0b565b90600052602060002090600502016004016040518563ffffffff1660e01b81526004016135339493929190614c88565b6000828152600960205260409020805473edfdd7266667d48f3c9ab10194c3d325813d8c3991908390811061377a5761377a614a0b565b60009182526020909120600160059092020101546001600160a01b031614156139355760008281526009602052604090208054829081106137bd576137bd614a0b565b600091825260208083206005909202909101546001600160a01b038681168452600a83526040808520878652600b9094529093205482549390911692632eb2c2d6929190811061380f5761380f614a0b565b60009182526020808320600360099093020191909101546001600160a01b038881168452600a83526040808520898652600b9094529093205482549390911692811061385d5761385d614a0b565b6000918252602080832060099283020160010154888452919052604090912080546001600160a01b03909216918690811061389a5761389a614a0b565b90600052602060002090600502016002016009600088815260200190815260200160002086815481106138cf576138cf614a0b565b906000526020600020906005020160030160096000898152602001908152602001600020878154811061390457613904614a0b565b90600052602060002090600502016004016040518663ffffffff1660e01b8152600401613533959493929190614cfa565b6000828152600960205260408120805460049291908490811061395a5761395a614a0b565b600091825260208083206005909202909101546001600160a01b03908116845283820194909452604092830182205486835260099091529190208054919092169163810a665391849081106139b1576139b1614a0b565b600091825260208083206005909202909101546001600160a01b038881168452600a83526040808520898652600b909452909320548254939091169281106139fb576139fb614a0b565b60009182526020808320600360099093020191909101546001600160a01b038981168452600a835260408085208a8652600b90945290932054825493909116928110613a4957613a49614a0b565b6000918252602080832060099283020160010154898452919052604090912080546001600160a01b039092169187908110613a8657613a86614a0b565b9060005260206000209060050201600201600960008981526020019081526020016000208781548110613abb57613abb614a0b565b9060005260206000209060050201600301600960008a81526020019081526020016000208881548110613af057613af0614a0b565b90600052602060002090600502016004016040518763ffffffff1660e01b8152600401613b2296959493929190614d58565b600060405180830381600087803b158015613b3c57600080fd5b505af1158015613b50573d6000803e3d6000fd5b505050505b80613b5f81614af0565b9150506132f3565b6001600160a01b0383166000908152600a60209081526040808320858452600b90925282205481548110613b9d57613b9d614a0b565b9060005260206000209060090201600401541115613c7f576001600160a01b0383166000908152600a60209081526040808320858452600b9092529091205481548110613bec57613bec614a0b565b60009182526020808320600160099093020191909101546001600160a01b038681168452600a83526040808520878652600b90945290932054825493909116926108fc9291908110613c4057613c40614a0b565b9060005260206000209060090201600401549081150290604051600060405180830381858888f19350505050158015613c7d573d6000803e3d6000fd5b505b6001613c8e6201518042614dbf565b613c989042614de1565b604080518581526001600160a01b038716602082015233917f20c004714deaf94f3e80538ac812eb372a6d40711070cd585f447f9ef76d525d910160405180910390a450506001805550565b6000546001600160a01b03163314613d0e5760405162461bcd60e51b81526004016108e090614a5c565b6001600160a01b038116613d735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108e0565b6123e2815b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006108af8284614e3d565b600054600160a01b900460ff16613e245760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108e0565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054600160a01b900460ff1615613e9b5760405162461bcd60e51b81526004016108e090614a91565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613e543390565b6040518061012001604052806000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160006002811115613f3f57613f3f61414c565b905290565b828054828255906000526020600020908101928215613f7f579160200282015b82811115613f7f578251825591602001919060010190613f64565b50613f8b929150614002565b5090565b828054613f9b90614a21565b90600052602060002090601f016020900481019282613fbd5760008555613f7f565b82601f10613fd657805160ff1916838001178555613f7f565b82800160010185558215613f7f5791820182811115613f7f578251825591602001919060010190613f64565b5b80821115613f8b5760008155600101614003565b60006020828403121561402957600080fd5b81356001600160e01b0319811681146108af57600080fd5b6001600160a01b03811681146123e257600080fd5b803561406181614041565b919050565b60008083601f84011261407857600080fd5b5081356001600160401b0381111561408f57600080fd5b6020830191508360208285010111156140a757600080fd5b9250929050565b6000806000806000608086880312156140c657600080fd5b85356140d181614041565b945060208601356140e181614041565b93506040860135925060608601356001600160401b0381111561410357600080fd5b61410f88828901614066565b969995985093965092949392505050565b6000806040838503121561413357600080fd5b823561413e81614041565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b6003811061418057634e487b7160e01b600052602160045260246000fd5b9052565b60006101208201905082518252602083015160018060a01b0380821660208501526040850151604085015280606086015116606085015250506080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100808401516141f882850182614162565b505092915050565b8035801515811461406157600080fd5b60008060006060848603121561422557600080fd5b8335925061423560208501614200565b9150604084013590509250925092565b600081518084526020808501945080840160005b8381101561427557815187529582019590820190600101614259565b509495945050505050565b6000602080835260018060a01b038085511682850152808286015116604085015250604084015160a060608501526142bb60c0850182614245565b90506060850151601f19808684030160808701526142d98383614245565b925060808701519150808684030160a0870152815180845260005b8181101561430f5783810186015185820187015285016142f4565b818111156143205760008683870101525b50601f011691909101909101949350505050565b6000806040838503121561434757600080fd5b61413e83614200565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b038111828210171561438857614388614350565b60405290565b60405161012081016001600160401b038111828210171561438857614388614350565b604051601f8201601f191681016001600160401b03811182821017156143d9576143d9614350565b604052919050565b60006001600160401b038211156143fa576143fa614350565b5060051b60200190565b6000806040838503121561441757600080fd5b82356001600160401b0381111561442d57600080fd5b8301601f8101851361443e57600080fd5b8035602061445361444e836143e1565b6143b1565b82815260059290921b8301810191818101908884111561447257600080fd5b938201935b8385101561449957843561448a81614041565b82529382019390820190614477565b95506144a89050868201614200565b93505050509250929050565b600080604083850312156144c757600080fd5b823591506144d760208401614200565b90509250929050565b600080604083850312156144f357600080fd5b82356144fe81614041565b9150602083013561450e81614041565b809150509250929050565b60006020828403121561452b57600080fd5b81356108af81614041565b60008083601f84011261454857600080fd5b5081356001600160401b0381111561455f57600080fd5b6020830191508360208260051b85010111156140a757600080fd5b60008060008060008060008060a0898b03121561459657600080fd5b88356145a181614041565b975060208901356145b181614041565b965060408901356001600160401b03808211156145cd57600080fd5b6145d98c838d01614536565b909850965060608b01359150808211156145f257600080fd5b6145fe8c838d01614536565b909650945060808b013591508082111561461757600080fd5b506146248b828c01614066565b999c989b5096995094979396929594505050565b80356003811061406157600080fd5b600082601f83011261465857600080fd5b8135602061466861444e836143e1565b82815260059290921b8401810191818101908684111561468757600080fd5b8286015b848110156146a2578035835291830191830161468b565b509695505050505050565b600082601f8301126146be57600080fd5b81356001600160401b038111156146d7576146d7614350565b6146ea601f8201601f19166020016143b1565b8181528460208386010111156146ff57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261472d57600080fd5b8135602061473d61444e836143e1565b82815260059290921b8401810191818101908684111561475c57600080fd5b8286015b848110156146a25780356001600160401b03808211156147805760008081fd5b9088019060a0828b03601f190181131561479a5760008081fd5b6147a2614366565b6147ad888501614056565b815260406147bc818601614056565b89830152606080860135858111156147d45760008081fd5b6147e28f8c838a0101614647565b83850152506080915081860135858111156147fd5760008081fd5b61480b8f8c838a0101614647565b828501525050828501359250838311156148255760008081fd5b6148338d8a858801016146ad565b908201528652505050918301918301614760565b600080600083850361016081121561485e57600080fd5b6101208082121561486e57600080fd5b61487661438e565b91508535825261488860208701614056565b6020830152604086013560408301526148a360608701614056565b60608301526080860135608083015260a086013560a083015260c086013560c083015260e086013560e08301526101006148de818801614638565b908301529093508401356001600160401b03808211156148fd57600080fd5b6149098783880161471c565b935061014086013591508082111561492057600080fd5b5061492d8682870161471c565b9150509250925092565b6000806040838503121561494a57600080fd5b82359150602083013561450e81614041565b60006020828403121561496e57600080fd5b5035919050565b60006020828403121561498757600080fd5b6108af82614200565b60008060008060008060a087890312156149a957600080fd5b86356149b481614041565b955060208701356149c481614041565b9450604087013593506060870135925060808701356001600160401b038111156149ed57600080fd5b6149f989828a01614066565b979a9699509497509295939492505050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680614a3557607f821691505b60208210811415614a5657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615614aeb57614aeb614abb565b500290565b6000600019821415614b0457614b04614abb565b5060010190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600060208284031215614b5457600080fd5b5051919050565b6020808252602a908201527f4e6f7420656e6f756768742057454920666f722068616e646c652074686520746040820152693930b739b0b1ba34b7b760b11b606082015260800190565b60208082526023908201527f412044415050206973206e6f742068616e646c6564206279207468652073797360408201526274656d60e81b606082015260800190565b8054600090600181811c9080831680614c0257607f831692505b6020808410821415614c2457634e487b7160e01b600052602260045260246000fd5b83885260208801828015614c3f5760018114614c5057614c7b565b60ff19871682528282019750614c7b565b60008981526020902060005b87811015614c7557815484820152908601908401614c5c565b83019850505b5050505050505092915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614cbb90830184614be8565b9695505050505050565b6000815480845260208085019450836000528060002060005b8381101561427557815487529582019560019182019101614cde565b6001600160a01b0386811682528516602082015260a060408201819052600090614d2690830186614cc5565b8281036060840152614d388186614cc5565b90508281036080840152614d4c8185614be8565b98975050505050505050565b6001600160a01b03878116825286811660208301528516604082015260c060608201819052600090614d8c90830186614cc5565b8281036080840152614d9e8186614cc5565b905082810360a0840152614db28185614be8565b9998505050505050505050565b600082614ddc57634e487b7160e01b600052601260045260246000fd5b500690565b600082821015614df357614df3614abb565b500390565b60208082526025908201527f596f75277265206e6f742074686520696e746572657374656420636f756e74656040820152641c9c185c9d60da1b606082015260800190565b60008219821115614e5057614e50614abb565b50019056fea2646970667358221220389ff5836611c4aaf1a4d0e6796947341dd7d392f0a64bdd25941db4f4394f7764736f6c634300080a0033
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.