Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 20 from a total of 20 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer Fees | 15000412 | 1356 days ago | IN | 0 ETH | 0.00170852 | ||||
| Cancel Atomic Sw... | 15000404 | 1356 days ago | IN | 0 ETH | 0.00247122 | ||||
| Create Atomic Sw... | 14994012 | 1357 days ago | IN | 0.02 ETH | 0.00149815 | ||||
| Close Atomic Swa... | 14989683 | 1357 days ago | IN | 0.01 ETH | 0.00883715 | ||||
| Create Atomic Sw... | 14986943 | 1358 days ago | IN | 0.01 ETH | 0.01890349 | ||||
| Close Atomic Swa... | 14981217 | 1359 days ago | IN | 0.01 ETH | 0.00516496 | ||||
| Close Atomic Swa... | 14981183 | 1359 days ago | IN | 0.01 ETH | 0.00545341 | ||||
| Create Atomic Sw... | 14981160 | 1359 days ago | IN | 0.035 ETH | 0.00196144 | ||||
| Create Atomic Sw... | 14981114 | 1359 days ago | IN | 0.01 ETH | 0.00236173 | ||||
| Cancel Atomic Sw... | 14981101 | 1359 days ago | IN | 0 ETH | 0.0017745 | ||||
| Create Atomic Sw... | 14981094 | 1359 days ago | IN | 0.01 ETH | 0.00251571 | ||||
| Close Atomic Swa... | 14978074 | 1359 days ago | IN | 0.01 ETH | 0.00855085 | ||||
| Create Atomic Sw... | 14978060 | 1359 days ago | IN | 0.01 ETH | 0.00199514 | ||||
| Close Atomic Swa... | 14977123 | 1360 days ago | IN | 0.01 ETH | 0.00671033 | ||||
| Create Atomic Sw... | 14977110 | 1360 days ago | IN | 0.01 ETH | 0.00262117 | ||||
| Close Atomic Swa... | 14977013 | 1360 days ago | IN | 0.01 ETH | 0.00249671 | ||||
| Create Atomic Sw... | 14976975 | 1360 days ago | IN | 0.11 ETH | 0.00267232 | ||||
| Set Swap Fee | 14976902 | 1360 days ago | IN | 0 ETH | 0.00104724 | ||||
| Transfer Ownersh... | 14976872 | 1360 days ago | IN | 0 ETH | 0.00090708 | ||||
| Set Master Fu | 14976862 | 1360 days ago | IN | 0 ETH | 0.00213243 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AtomicSwap
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-06-17
*/
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <=0.8.15;
/**
* @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);
}
pragma solidity >=0.6.2 <=0.8.15;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}
pragma solidity >=0.6.2 <=0.8.15;
/**
* @dev Required interface of an ERC1155 compliant contract, as defined in the
* https://eips.ethereum.org/EIPS/eip-1155[EIP].
*
* _Available since v3.1._
*/
interface IERC1155 is IERC165 {
/**
* @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
*/
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
/**
* @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
* transfers.
*/
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);
/**
* @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
* `approved`.
*/
event ApprovalForAll(address indexed account, address indexed operator, bool approved);
/**
* @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
*
* If an {URI} event was emitted for `id`, the standard
* https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
* returned by {IERC1155MetadataURI-uri}.
*/
event URI(string value, uint256 indexed id);
/**
* @dev Returns the amount of tokens of token type `id` owned by `account`.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function balanceOf(address account, uint256 id) external view returns (uint256);
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
*
* Requirements:
*
* - `accounts` and `ids` must have the same length.
*/
function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);
/**
* @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
*
* Emits an {ApprovalForAll} event.
*
* Requirements:
*
* - `operator` cannot be the caller.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
*
* See {setApprovalForAll}.
*/
function isApprovedForAll(address account, address operator) external view returns (bool);
/**
* @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
* - `from` must have a balance of tokens of type `id` of at least `amount`.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
* acceptance magic value.
*/
function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
*
* Emits a {TransferBatch} event.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
* acceptance magic value.
*/
function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}
pragma solidity >=0.6.0 <=0.8.15;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return payable(msg.sender);
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
pragma solidity >=0.6.0 <=0.8.15;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
pragma solidity >=0.6.0 <=0.8.15;
/**
* @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 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());
}
}
pragma solidity >=0.6.0 <=0.8.15;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
pragma solidity ^0.8.15;
pragma abicoder v2;
/**
* @author COIN-FU
*/
contract AtomicSwap is Ownable, Pausable {
using SafeMath for uint;
// Swap Status
enum swapStatus { New, Opened, Closed, Cancelled }
enum contractType { ERC721, ERC1155 }
struct atomicSwapContract {
address payable addressOne;
uint256 valueOne;
address payable addressTwo;
uint256 valueTwo;
bytes nonce;
nftStruct nftsOne;
nftStruct nftsTwo;
}
struct nftStruct {
address[] contractAddress;
uint256[] tokenId;
uint256[] amount;
bytes[] data;
contractType[] typeOf;
}
mapping(bytes32 => swapStatus) public swapContract;
uint256 public _swapFee;
uint256 public _feeBalance;
address payable public _masterfu;
event paymentReceived(address indexed payer, uint256 value);
event swapCreated(bytes32 contractId);
event swapClosed(bytes32 contractId);
event swapCanceled(bytes32 contractId);
event feeTransfer(uint256 amount);
constructor() {
}
receive() external payable {
_feeBalance = _feeBalance.add(msg.value);
emit paymentReceived(msg.sender, msg.value);
}
// creates the atomic swap contract
function createAtomicSwap(atomicSwapContract memory _contract) payable public whenNotPaused returns(bytes32) {
require(msg.value >= _contract.valueOne.add(_swapFee), "coin-fu: not enough eth sent for this transaction");
require(msg.sender == _contract.addressOne, "coin-fu: nft holder address does not match contract");
_feeBalance = _feeBalance.add(_swapFee);
// get a new contract id
bytes32 _contractId = getContractId(_contract);
// make sure this contract is new
require(swapContract[_contractId] == swapStatus.New, "coin-fu: contract already exists");
swapContract[_contractId] = swapStatus.Opened;
emit swapCreated(_contractId);
return _contractId;
}
// returns unique id per contract
function getContractId(atomicSwapContract memory _contract) internal pure returns(bytes32) {
return keccak256(abi.encode(_contract));
}
// close the atomic swap contract
function closeAtomicSwap(bytes32 _contractId, atomicSwapContract memory _contract) payable public whenNotPaused {
require(msg.value >= _contract.valueTwo.add(_swapFee), "coin-fu: not enough eth sent for this transaction");
require(_contractId == getContractId(_contract), "coin-fu: contract hash is not valid");
require(msg.sender == _contract.addressTwo, "coin-fu: address does not match this contract");
require(swapContract[_contractId] == swapStatus.Opened, "coin-fu: contract is no longer valid");
_feeBalance = _feeBalance.add(_swapFee);
// do the eth transfers
if (_contract.valueOne > 0) {
_contract.addressTwo.transfer(_contract.valueOne);
}
if (_contract.valueTwo > 0) {
_contract.addressOne.transfer(_contract.valueTwo);
}
// do the nft transfers
for(uint i=0; i < _contract.nftsTwo.contractAddress.length; i++) {
if (_contract.nftsTwo.typeOf[i] == contractType.ERC721)
IERC721(_contract.nftsTwo.contractAddress[i])
.safeTransferFrom(_contract.addressTwo,
_contract.addressOne,
_contract.nftsTwo.tokenId[i],
_contract.nftsTwo.data[i]);
else
IERC1155(_contract.nftsTwo.contractAddress[i])
.safeTransferFrom(_contract.addressTwo,
_contract.addressOne,
_contract.nftsTwo.tokenId[i],
_contract.nftsTwo.amount[i],
_contract.nftsTwo.data[i]);
}
for(uint i=0; i < _contract.nftsOne.contractAddress.length; i++) {
if (_contract.nftsOne.typeOf[i] == contractType.ERC721)
IERC721(_contract.nftsOne.contractAddress[i])
.safeTransferFrom(_contract.addressOne,
_contract.addressTwo,
_contract.nftsOne.tokenId[i],
_contract.nftsOne.data[i]);
else
IERC1155(_contract.nftsOne.contractAddress[i])
.safeTransferFrom(_contract.addressOne,
_contract.addressTwo,
_contract.nftsOne.tokenId[i],
_contract.nftsOne.amount[i],
_contract.nftsOne.data[i]);
}
swapContract[_contractId] = swapStatus.Closed;
emit swapClosed(_contractId);
}
// cancel the atomic swap contract
function cancelAtomicSwap(bytes32 _contractId, atomicSwapContract memory _contract) public {
require(_contractId == getContractId(_contract), "coin-fu: contract hash is not valid");
require(msg.sender == _contract.addressOne, "coin-fu: invalid address - must be swap creator");
require(swapContract[_contractId] == swapStatus.Opened, "coin-fu: contract is no longer open");
// cancel the contract
swapContract[_contractId] = swapStatus.Cancelled;
// refund any crypto to swap creator - addressOne
if(_contract.valueOne > 0){
_contract.addressOne.transfer(_contract.valueOne);
}
emit swapCanceled(_contractId);
}
// set the masterfu address for fee payouts
function setMasterFu(address payable _address) public onlyOwner {
require(_address != address(0), "coin-fu: zero address");
_masterfu = _address;
}
// set the swap fee rate in eth
function setSwapFee(uint256 _fee) public onlyOwner {
_swapFee = _fee;
}
// returns the contract balance
function getContractBalance() public view returns (uint256) {
return address(this).balance;
}
// admin function to widthdraw eth fees collected
function transferFees(uint256 _amount) public returns(uint256) {
require(msg.sender == _masterfu, "coin-fu: only master-fu can do this");
require(_amount <= _feeBalance, "coin-fu: amount not available");
_feeBalance = _feeBalance.sub(_amount);
_masterfu.transfer(_amount);
emit feeTransfer(_amount);
return _amount;
}
// pause the contract
function pause(bool val) public onlyOwner {
if (val) _pause(); else _unpause();
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"feeTransfer","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":false,"internalType":"bytes32","name":"contractId","type":"bytes32"}],"name":"swapCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"contractId","type":"bytes32"}],"name":"swapClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"contractId","type":"bytes32"}],"name":"swapCreated","type":"event"},{"inputs":[],"name":"_feeBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_masterfu","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_contractId","type":"bytes32"},{"components":[{"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":"bytes","name":"nonce","type":"bytes"},{"components":[{"internalType":"address[]","name":"contractAddress","type":"address[]"},{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"},{"internalType":"bytes[]","name":"data","type":"bytes[]"},{"internalType":"enum AtomicSwap.contractType[]","name":"typeOf","type":"uint8[]"}],"internalType":"struct AtomicSwap.nftStruct","name":"nftsOne","type":"tuple"},{"components":[{"internalType":"address[]","name":"contractAddress","type":"address[]"},{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"},{"internalType":"bytes[]","name":"data","type":"bytes[]"},{"internalType":"enum AtomicSwap.contractType[]","name":"typeOf","type":"uint8[]"}],"internalType":"struct AtomicSwap.nftStruct","name":"nftsTwo","type":"tuple"}],"internalType":"struct AtomicSwap.atomicSwapContract","name":"_contract","type":"tuple"}],"name":"cancelAtomicSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_contractId","type":"bytes32"},{"components":[{"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":"bytes","name":"nonce","type":"bytes"},{"components":[{"internalType":"address[]","name":"contractAddress","type":"address[]"},{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"},{"internalType":"bytes[]","name":"data","type":"bytes[]"},{"internalType":"enum AtomicSwap.contractType[]","name":"typeOf","type":"uint8[]"}],"internalType":"struct AtomicSwap.nftStruct","name":"nftsOne","type":"tuple"},{"components":[{"internalType":"address[]","name":"contractAddress","type":"address[]"},{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"},{"internalType":"bytes[]","name":"data","type":"bytes[]"},{"internalType":"enum AtomicSwap.contractType[]","name":"typeOf","type":"uint8[]"}],"internalType":"struct AtomicSwap.nftStruct","name":"nftsTwo","type":"tuple"}],"internalType":"struct AtomicSwap.atomicSwapContract","name":"_contract","type":"tuple"}],"name":"closeAtomicSwap","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"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":"bytes","name":"nonce","type":"bytes"},{"components":[{"internalType":"address[]","name":"contractAddress","type":"address[]"},{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"},{"internalType":"bytes[]","name":"data","type":"bytes[]"},{"internalType":"enum AtomicSwap.contractType[]","name":"typeOf","type":"uint8[]"}],"internalType":"struct AtomicSwap.nftStruct","name":"nftsOne","type":"tuple"},{"components":[{"internalType":"address[]","name":"contractAddress","type":"address[]"},{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"},{"internalType":"bytes[]","name":"data","type":"bytes[]"},{"internalType":"enum AtomicSwap.contractType[]","name":"typeOf","type":"uint8[]"}],"internalType":"struct AtomicSwap.nftStruct","name":"nftsTwo","type":"tuple"}],"internalType":"struct AtomicSwap.atomicSwapContract","name":"_contract","type":"tuple"}],"name":"createAtomicSwap","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","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 payable","name":"_address","type":"address"}],"name":"setMasterFu","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"swapContract","outputs":[{"internalType":"enum AtomicSwap.swapStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805460ff60a01b19169055611d688061006e6000396000f3fe6080604052600436106100f75760003560e01c8063715018a61161008a5780639835b0af116100595780639835b0af146102ef578063bf19d77a14610305578063e38388bb14610325578063f2fde38b1461033857600080fd5b8063715018a61461026e5780637ba518511461028357806383278155146102bb5780638da5cb5b146102d157600080fd5b80634adf9a0f116100c65780634adf9a0f146101f15780635c975abb1461021157806364c701d41461023b5780636f9fb98a1461025b57600080fd5b806302329a29146101485780630b411a661461016a5780632fe753da146101b057806334e19907146101d157600080fd5b36610143576003546101099034610358565b60035560405134815233907f0de0271e0148b63e6b759917905b6ae5d995f6081392a30b9fa9e23bb4fb98719060200160405180910390a2005b600080fd5b34801561015457600080fd5b5061016861016336600461132c565b6103c3565b005b34801561017657600080fd5b5061019a61018536600461134e565b60016020526000908152604090205460ff1681565b6040516101a7919061137d565b60405180910390f35b6101c36101be36600461183e565b610406565b6040519081526020016101a7565b3480156101dd57600080fd5b506101686101ec36600461134e565b6105bc565b3480156101fd57600080fd5b5061016861020c36600461187b565b6105eb565b34801561021d57600080fd5b50600054600160a01b900460ff1660405190151581526020016101a7565b34801561024757600080fd5b506101686102563660046118c2565b61079c565b34801561026757600080fd5b50476101c3565b34801561027a57600080fd5b50610168610836565b34801561028f57600080fd5b506004546102a3906001600160a01b031681565b6040516001600160a01b0390911681526020016101a7565b3480156102c757600080fd5b506101c360025481565b3480156102dd57600080fd5b506000546001600160a01b03166102a3565b3480156102fb57600080fd5b506101c360035481565b34801561031157600080fd5b506101c361032036600461134e565b6108aa565b61016861033336600461187b565b6109e7565b34801561034457600080fd5b506101686103533660046118c2565b611095565b60008061036583856118f5565b9050838110156103bc5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b9392505050565b6000546001600160a01b031633146103ed5760405162461bcd60e51b81526004016103b39061190d565b80156103fe576103fb61117f565b50565b6103fb611201565b60008054600160a01b900460ff16156104315760405162461bcd60e51b81526004016103b390611942565b600254602083015161044291610358565b3410156104615760405162461bcd60e51b81526004016103b39061196c565b81516001600160a01b031633146104d65760405162461bcd60e51b815260206004820152603360248201527f636f696e2d66753a206e667420686f6c646572206164647265737320646f6573604482015272081b9bdd081b585d18da0818dbdb9d1c9858dd606a1b60648201526084016103b3565b6002546003546104e591610358565b60035560006104f383611285565b90506000808281526001602052604090205460ff16600381111561051957610519611367565b146105665760405162461bcd60e51b815260206004820181905260248201527f636f696e2d66753a20636f6e747261637420616c72656164792065786973747360448201526064016103b3565b600081815260016020818152604092839020805460ff191690921790915590518281527f9158b9e1fb22eda628ebc421e6dbcd7bd4d6c883727d44dac376b328c3507226910160405180910390a190505b919050565b6000546001600160a01b031633146105e65760405162461bcd60e51b81526004016103b39061190d565b600255565b6105f481611285565b82146106125760405162461bcd60e51b81526004016103b3906119bd565b80516001600160a01b031633146106835760405162461bcd60e51b815260206004820152602f60248201527f636f696e2d66753a20696e76616c69642061646472657373202d206d7573742060448201526e31329039bbb0b81031b932b0ba37b960891b60648201526084016103b3565b600160008381526001602052604090205460ff1660038111156106a8576106a8611367565b146107015760405162461bcd60e51b815260206004820152602360248201527f636f696e2d66753a20636f6e7472616374206973206e6f206c6f6e676572206f6044820152623832b760e91b60648201526084016103b3565b6000828152600160209081526040909120805460ff191660031790558101511561076457805160208201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015610762573d6000803e3d6000fd5b505b6040518281527fb89d0881c20ed632999464b93927d06bc8470f5e1a509fcfa39dae6e3e67202d906020015b60405180910390a15050565b6000546001600160a01b031633146107c65760405162461bcd60e51b81526004016103b39061190d565b6001600160a01b0381166108145760405162461bcd60e51b8152602060048201526015602482015274636f696e2d66753a207a65726f206164647265737360581b60448201526064016103b3565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146108605760405162461bcd60e51b81526004016103b39061190d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6004546000906001600160a01b031633146109135760405162461bcd60e51b815260206004820152602360248201527f636f696e2d66753a206f6e6c79206d61737465722d66752063616e20646f207460448201526268697360e81b60648201526084016103b3565b6003548211156109655760405162461bcd60e51b815260206004820152601d60248201527f636f696e2d66753a20616d6f756e74206e6f7420617661696c61626c6500000060448201526064016103b3565b60035461097290836112b5565b6003556004546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156109af573d6000803e3d6000fd5b506040518281527fc3be0530f7427ff874d958081a3764091df87ec700dfeb30a4e01573d29ab9c09060200160405180910390a15090565b600054600160a01b900460ff1615610a115760405162461bcd60e51b81526004016103b390611942565b6002546060820151610a2291610358565b341015610a415760405162461bcd60e51b81526004016103b39061196c565b610a4a81611285565b8214610a685760405162461bcd60e51b81526004016103b3906119bd565b80604001516001600160a01b0316336001600160a01b031614610ae35760405162461bcd60e51b815260206004820152602d60248201527f636f696e2d66753a206164647265737320646f6573206e6f74206d617463682060448201526c1d1a1a5cc818dbdb9d1c9858dd609a1b60648201526084016103b3565b600160008381526001602052604090205460ff166003811115610b0857610b08611367565b14610b615760405162461bcd60e51b8152602060048201526024808201527f636f696e2d66753a20636f6e7472616374206973206e6f206c6f6e6765722076604482015263185b1a5960e21b60648201526084016103b3565b600254600354610b7091610358565b600355602081015115610bc05780604001516001600160a01b03166108fc82602001519081150290604051600060405180830381858888f19350505050158015610bbe573d6000803e3d6000fd5b505b606081015115610c0957805160608201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015610c07573d6000803e3d6000fd5b505b60005b60c08201515151811015610e295760008260c00151608001518281518110610c3657610c36611a00565b60200260200101516001811115610c4f57610c4f611367565b03610d265760c082015151805182908110610c6c57610c6c611a00565b60200260200101516001600160a01b031663b88d4fde836040015184600001518560c00151602001518581518110610ca657610ca6611a00565b60200260200101518660c00151606001518681518110610cc857610cc8611a00565b60200260200101516040518563ffffffff1660e01b8152600401610cef9493929190611a63565b600060405180830381600087803b158015610d0957600080fd5b505af1158015610d1d573d6000803e3d6000fd5b50505050610e17565b60c082015151805182908110610d3e57610d3e611a00565b60200260200101516001600160a01b031663f242432a836040015184600001518560c00151602001518581518110610d7857610d78611a00565b60200260200101518660c00151604001518681518110610d9a57610d9a611a00565b60200260200101518760c00151606001518781518110610dbc57610dbc611a00565b60200260200101516040518663ffffffff1660e01b8152600401610de4959493929190611aa0565b600060405180830381600087803b158015610dfe57600080fd5b505af1158015610e12573d6000803e3d6000fd5b505050505b80610e2181611ae5565b915050610c0c565b5060005b60a0820151515181101561104a5760008260a00151608001518281518110610e5757610e57611a00565b60200260200101516001811115610e7057610e70611367565b03610f475760a082015151805182908110610e8d57610e8d611a00565b60200260200101516001600160a01b031663b88d4fde836000015184604001518560a00151602001518581518110610ec757610ec7611a00565b60200260200101518660a00151606001518681518110610ee957610ee9611a00565b60200260200101516040518563ffffffff1660e01b8152600401610f109493929190611a63565b600060405180830381600087803b158015610f2a57600080fd5b505af1158015610f3e573d6000803e3d6000fd5b50505050611038565b60a082015151805182908110610f5f57610f5f611a00565b60200260200101516001600160a01b031663f242432a836000015184604001518560a00151602001518581518110610f9957610f99611a00565b60200260200101518660a00151604001518681518110610fbb57610fbb611a00565b60200260200101518760a00151606001518781518110610fdd57610fdd611a00565b60200260200101516040518663ffffffff1660e01b8152600401611005959493929190611aa0565b600060405180830381600087803b15801561101f57600080fd5b505af1158015611033573d6000803e3d6000fd5b505050505b8061104281611ae5565b915050610e2d565b50600082815260016020908152604091829020805460ff1916600217905590518381527fdb2a9f10e73e1858e739edff25aa699c17e3120e73da638fa9be3f3fa614f6419101610790565b6000546001600160a01b031633146110bf5760405162461bcd60e51b81526004016103b39061190d565b6001600160a01b0381166111245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b3565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600054600160a01b900460ff16156111a95760405162461bcd60e51b81526004016103b390611942565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111e43390565b6040516001600160a01b03909116815260200160405180910390a1565b600054600160a01b900460ff166112515760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016103b3565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336111e4565b6000816040516020016112989190611c7b565b604051602081830303815290604052805190602001209050919050565b60006103bc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250600081848411156113165760405162461bcd60e51b81526004016103b39190611d08565b5060006113238486611d1b565b95945050505050565b60006020828403121561133e57600080fd5b813580151581146103bc57600080fd5b60006020828403121561136057600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b602081016004831061139157611391611367565b91905290565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156113d0576113d0611397565b60405290565b60405160e0810167ffffffffffffffff811182821017156113d0576113d0611397565b604051601f8201601f1916810167ffffffffffffffff8111828210171561142257611422611397565b604052919050565b6001600160a01b03811681146103fb57600080fd5b80356105b78161142a565b600082601f83011261145b57600080fd5b813567ffffffffffffffff81111561147557611475611397565b611488601f8201601f19166020016113f9565b81815284602083860101111561149d57600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff8211156114d4576114d4611397565b5060051b60200190565b600082601f8301126114ef57600080fd5b813560206115046114ff836114ba565b6113f9565b82815260059290921b8401810191818101908684111561152357600080fd5b8286015b8481101561154757803561153a8161142a565b8352918301918301611527565b509695505050505050565b600082601f83011261156357600080fd5b813560206115736114ff836114ba565b82815260059290921b8401810191818101908684111561159257600080fd5b8286015b848110156115475780358352918301918301611596565b600082601f8301126115be57600080fd5b813560206115ce6114ff836114ba565b82815260059290921b840181019181810190868411156115ed57600080fd5b8286015b8481101561154757803567ffffffffffffffff8111156116115760008081fd5b61161f8986838b010161144a565b8452509183019183016115f1565b600082601f83011261163e57600080fd5b8135602061164e6114ff836114ba565b82815260059290921b8401810191818101908684111561166d57600080fd5b8286015b84811015611547578035600281106116895760008081fd5b8352918301918301611671565b600060a082840312156116a857600080fd5b6116b06113ad565b9050813567ffffffffffffffff808211156116ca57600080fd5b6116d6858386016114de565b835260208401359150808211156116ec57600080fd5b6116f885838601611552565b6020840152604084013591508082111561171157600080fd5b61171d85838601611552565b6040840152606084013591508082111561173657600080fd5b611742858386016115ad565b6060840152608084013591508082111561175b57600080fd5b506117688482850161162d565b60808301525092915050565b600060e0828403121561178657600080fd5b61178e6113d6565b90506117998261143f565b8152602082013560208201526117b16040830161143f565b604082015260608201356060820152608082013567ffffffffffffffff808211156117db57600080fd5b6117e78583860161144a565b608084015260a084013591508082111561180057600080fd5b61180c85838601611696565b60a084015260c084013591508082111561182557600080fd5b5061183284828501611696565b60c08301525092915050565b60006020828403121561185057600080fd5b813567ffffffffffffffff81111561186757600080fd5b61187384828501611774565b949350505050565b6000806040838503121561188e57600080fd5b82359150602083013567ffffffffffffffff8111156118ac57600080fd5b6118b885828601611774565b9150509250929050565b6000602082840312156118d457600080fd5b81356103bc8161142a565b634e487b7160e01b600052601160045260246000fd5b60008219821115611908576119086118df565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526031908201527f636f696e2d66753a206e6f7420656e6f756768206574682073656e7420666f72604082015270103a3434b9903a3930b739b0b1ba34b7b760791b606082015260800190565b60208082526023908201527f636f696e2d66753a20636f6e74726163742068617368206973206e6f742076616040820152621b1a5960ea1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000815180845260005b81811015611a3c57602081850181015186830182015201611a20565b81811115611a4e576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611a9690830184611a16565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611ada90830184611a16565b979650505050505050565b600060018201611af757611af76118df565b5060010190565b600081518084526020808501945080840160005b83811015611b2e57815187529582019590820190600101611b12565b509495945050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015611b81578284038952611b6f848351611a16565b98850198935090840190600101611b57565b5091979650505050505050565b600081518084526020808501945080840160005b83811015611b2e57815160028110611bbc57611bbc611367565b87529582019590820190600101611ba2565b805160a080845281519084018190526000916020919082019060c0860190845b81811015611c135783516001600160a01b031683529284019291840191600101611bee565b505082850151915085810383870152611c2c8183611afe565b9250505060408301518482036040860152611c478282611afe565b91505060608301518482036060860152611c618282611b39565b915050608083015184820360808601526113238282611b8e565b60208152600060018060a01b03808451166020840152602084015160408401528060408501511660608401525060608301516080830152608083015160e060a0840152611ccc610100840182611a16565b905060a0840151601f19808584030160c0860152611cea8383611bce565b925060c08601519150808584030160e0860152506113238282611bce565b6020815260006103bc6020830184611a16565b600082821015611d2d57611d2d6118df565b50039056fea2646970667358221220013f02be5d9f609090faf669d6636128ec3c4d4fa7c503b4730422b8ee44656564736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106100f75760003560e01c8063715018a61161008a5780639835b0af116100595780639835b0af146102ef578063bf19d77a14610305578063e38388bb14610325578063f2fde38b1461033857600080fd5b8063715018a61461026e5780637ba518511461028357806383278155146102bb5780638da5cb5b146102d157600080fd5b80634adf9a0f116100c65780634adf9a0f146101f15780635c975abb1461021157806364c701d41461023b5780636f9fb98a1461025b57600080fd5b806302329a29146101485780630b411a661461016a5780632fe753da146101b057806334e19907146101d157600080fd5b36610143576003546101099034610358565b60035560405134815233907f0de0271e0148b63e6b759917905b6ae5d995f6081392a30b9fa9e23bb4fb98719060200160405180910390a2005b600080fd5b34801561015457600080fd5b5061016861016336600461132c565b6103c3565b005b34801561017657600080fd5b5061019a61018536600461134e565b60016020526000908152604090205460ff1681565b6040516101a7919061137d565b60405180910390f35b6101c36101be36600461183e565b610406565b6040519081526020016101a7565b3480156101dd57600080fd5b506101686101ec36600461134e565b6105bc565b3480156101fd57600080fd5b5061016861020c36600461187b565b6105eb565b34801561021d57600080fd5b50600054600160a01b900460ff1660405190151581526020016101a7565b34801561024757600080fd5b506101686102563660046118c2565b61079c565b34801561026757600080fd5b50476101c3565b34801561027a57600080fd5b50610168610836565b34801561028f57600080fd5b506004546102a3906001600160a01b031681565b6040516001600160a01b0390911681526020016101a7565b3480156102c757600080fd5b506101c360025481565b3480156102dd57600080fd5b506000546001600160a01b03166102a3565b3480156102fb57600080fd5b506101c360035481565b34801561031157600080fd5b506101c361032036600461134e565b6108aa565b61016861033336600461187b565b6109e7565b34801561034457600080fd5b506101686103533660046118c2565b611095565b60008061036583856118f5565b9050838110156103bc5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b9392505050565b6000546001600160a01b031633146103ed5760405162461bcd60e51b81526004016103b39061190d565b80156103fe576103fb61117f565b50565b6103fb611201565b60008054600160a01b900460ff16156104315760405162461bcd60e51b81526004016103b390611942565b600254602083015161044291610358565b3410156104615760405162461bcd60e51b81526004016103b39061196c565b81516001600160a01b031633146104d65760405162461bcd60e51b815260206004820152603360248201527f636f696e2d66753a206e667420686f6c646572206164647265737320646f6573604482015272081b9bdd081b585d18da0818dbdb9d1c9858dd606a1b60648201526084016103b3565b6002546003546104e591610358565b60035560006104f383611285565b90506000808281526001602052604090205460ff16600381111561051957610519611367565b146105665760405162461bcd60e51b815260206004820181905260248201527f636f696e2d66753a20636f6e747261637420616c72656164792065786973747360448201526064016103b3565b600081815260016020818152604092839020805460ff191690921790915590518281527f9158b9e1fb22eda628ebc421e6dbcd7bd4d6c883727d44dac376b328c3507226910160405180910390a190505b919050565b6000546001600160a01b031633146105e65760405162461bcd60e51b81526004016103b39061190d565b600255565b6105f481611285565b82146106125760405162461bcd60e51b81526004016103b3906119bd565b80516001600160a01b031633146106835760405162461bcd60e51b815260206004820152602f60248201527f636f696e2d66753a20696e76616c69642061646472657373202d206d7573742060448201526e31329039bbb0b81031b932b0ba37b960891b60648201526084016103b3565b600160008381526001602052604090205460ff1660038111156106a8576106a8611367565b146107015760405162461bcd60e51b815260206004820152602360248201527f636f696e2d66753a20636f6e7472616374206973206e6f206c6f6e676572206f6044820152623832b760e91b60648201526084016103b3565b6000828152600160209081526040909120805460ff191660031790558101511561076457805160208201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015610762573d6000803e3d6000fd5b505b6040518281527fb89d0881c20ed632999464b93927d06bc8470f5e1a509fcfa39dae6e3e67202d906020015b60405180910390a15050565b6000546001600160a01b031633146107c65760405162461bcd60e51b81526004016103b39061190d565b6001600160a01b0381166108145760405162461bcd60e51b8152602060048201526015602482015274636f696e2d66753a207a65726f206164647265737360581b60448201526064016103b3565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146108605760405162461bcd60e51b81526004016103b39061190d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6004546000906001600160a01b031633146109135760405162461bcd60e51b815260206004820152602360248201527f636f696e2d66753a206f6e6c79206d61737465722d66752063616e20646f207460448201526268697360e81b60648201526084016103b3565b6003548211156109655760405162461bcd60e51b815260206004820152601d60248201527f636f696e2d66753a20616d6f756e74206e6f7420617661696c61626c6500000060448201526064016103b3565b60035461097290836112b5565b6003556004546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156109af573d6000803e3d6000fd5b506040518281527fc3be0530f7427ff874d958081a3764091df87ec700dfeb30a4e01573d29ab9c09060200160405180910390a15090565b600054600160a01b900460ff1615610a115760405162461bcd60e51b81526004016103b390611942565b6002546060820151610a2291610358565b341015610a415760405162461bcd60e51b81526004016103b39061196c565b610a4a81611285565b8214610a685760405162461bcd60e51b81526004016103b3906119bd565b80604001516001600160a01b0316336001600160a01b031614610ae35760405162461bcd60e51b815260206004820152602d60248201527f636f696e2d66753a206164647265737320646f6573206e6f74206d617463682060448201526c1d1a1a5cc818dbdb9d1c9858dd609a1b60648201526084016103b3565b600160008381526001602052604090205460ff166003811115610b0857610b08611367565b14610b615760405162461bcd60e51b8152602060048201526024808201527f636f696e2d66753a20636f6e7472616374206973206e6f206c6f6e6765722076604482015263185b1a5960e21b60648201526084016103b3565b600254600354610b7091610358565b600355602081015115610bc05780604001516001600160a01b03166108fc82602001519081150290604051600060405180830381858888f19350505050158015610bbe573d6000803e3d6000fd5b505b606081015115610c0957805160608201516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015610c07573d6000803e3d6000fd5b505b60005b60c08201515151811015610e295760008260c00151608001518281518110610c3657610c36611a00565b60200260200101516001811115610c4f57610c4f611367565b03610d265760c082015151805182908110610c6c57610c6c611a00565b60200260200101516001600160a01b031663b88d4fde836040015184600001518560c00151602001518581518110610ca657610ca6611a00565b60200260200101518660c00151606001518681518110610cc857610cc8611a00565b60200260200101516040518563ffffffff1660e01b8152600401610cef9493929190611a63565b600060405180830381600087803b158015610d0957600080fd5b505af1158015610d1d573d6000803e3d6000fd5b50505050610e17565b60c082015151805182908110610d3e57610d3e611a00565b60200260200101516001600160a01b031663f242432a836040015184600001518560c00151602001518581518110610d7857610d78611a00565b60200260200101518660c00151604001518681518110610d9a57610d9a611a00565b60200260200101518760c00151606001518781518110610dbc57610dbc611a00565b60200260200101516040518663ffffffff1660e01b8152600401610de4959493929190611aa0565b600060405180830381600087803b158015610dfe57600080fd5b505af1158015610e12573d6000803e3d6000fd5b505050505b80610e2181611ae5565b915050610c0c565b5060005b60a0820151515181101561104a5760008260a00151608001518281518110610e5757610e57611a00565b60200260200101516001811115610e7057610e70611367565b03610f475760a082015151805182908110610e8d57610e8d611a00565b60200260200101516001600160a01b031663b88d4fde836000015184604001518560a00151602001518581518110610ec757610ec7611a00565b60200260200101518660a00151606001518681518110610ee957610ee9611a00565b60200260200101516040518563ffffffff1660e01b8152600401610f109493929190611a63565b600060405180830381600087803b158015610f2a57600080fd5b505af1158015610f3e573d6000803e3d6000fd5b50505050611038565b60a082015151805182908110610f5f57610f5f611a00565b60200260200101516001600160a01b031663f242432a836000015184604001518560a00151602001518581518110610f9957610f99611a00565b60200260200101518660a00151604001518681518110610fbb57610fbb611a00565b60200260200101518760a00151606001518781518110610fdd57610fdd611a00565b60200260200101516040518663ffffffff1660e01b8152600401611005959493929190611aa0565b600060405180830381600087803b15801561101f57600080fd5b505af1158015611033573d6000803e3d6000fd5b505050505b8061104281611ae5565b915050610e2d565b50600082815260016020908152604091829020805460ff1916600217905590518381527fdb2a9f10e73e1858e739edff25aa699c17e3120e73da638fa9be3f3fa614f6419101610790565b6000546001600160a01b031633146110bf5760405162461bcd60e51b81526004016103b39061190d565b6001600160a01b0381166111245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b3565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600054600160a01b900460ff16156111a95760405162461bcd60e51b81526004016103b390611942565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111e43390565b6040516001600160a01b03909116815260200160405180910390a1565b600054600160a01b900460ff166112515760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016103b3565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336111e4565b6000816040516020016112989190611c7b565b604051602081830303815290604052805190602001209050919050565b60006103bc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250600081848411156113165760405162461bcd60e51b81526004016103b39190611d08565b5060006113238486611d1b565b95945050505050565b60006020828403121561133e57600080fd5b813580151581146103bc57600080fd5b60006020828403121561136057600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b602081016004831061139157611391611367565b91905290565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156113d0576113d0611397565b60405290565b60405160e0810167ffffffffffffffff811182821017156113d0576113d0611397565b604051601f8201601f1916810167ffffffffffffffff8111828210171561142257611422611397565b604052919050565b6001600160a01b03811681146103fb57600080fd5b80356105b78161142a565b600082601f83011261145b57600080fd5b813567ffffffffffffffff81111561147557611475611397565b611488601f8201601f19166020016113f9565b81815284602083860101111561149d57600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff8211156114d4576114d4611397565b5060051b60200190565b600082601f8301126114ef57600080fd5b813560206115046114ff836114ba565b6113f9565b82815260059290921b8401810191818101908684111561152357600080fd5b8286015b8481101561154757803561153a8161142a565b8352918301918301611527565b509695505050505050565b600082601f83011261156357600080fd5b813560206115736114ff836114ba565b82815260059290921b8401810191818101908684111561159257600080fd5b8286015b848110156115475780358352918301918301611596565b600082601f8301126115be57600080fd5b813560206115ce6114ff836114ba565b82815260059290921b840181019181810190868411156115ed57600080fd5b8286015b8481101561154757803567ffffffffffffffff8111156116115760008081fd5b61161f8986838b010161144a565b8452509183019183016115f1565b600082601f83011261163e57600080fd5b8135602061164e6114ff836114ba565b82815260059290921b8401810191818101908684111561166d57600080fd5b8286015b84811015611547578035600281106116895760008081fd5b8352918301918301611671565b600060a082840312156116a857600080fd5b6116b06113ad565b9050813567ffffffffffffffff808211156116ca57600080fd5b6116d6858386016114de565b835260208401359150808211156116ec57600080fd5b6116f885838601611552565b6020840152604084013591508082111561171157600080fd5b61171d85838601611552565b6040840152606084013591508082111561173657600080fd5b611742858386016115ad565b6060840152608084013591508082111561175b57600080fd5b506117688482850161162d565b60808301525092915050565b600060e0828403121561178657600080fd5b61178e6113d6565b90506117998261143f565b8152602082013560208201526117b16040830161143f565b604082015260608201356060820152608082013567ffffffffffffffff808211156117db57600080fd5b6117e78583860161144a565b608084015260a084013591508082111561180057600080fd5b61180c85838601611696565b60a084015260c084013591508082111561182557600080fd5b5061183284828501611696565b60c08301525092915050565b60006020828403121561185057600080fd5b813567ffffffffffffffff81111561186757600080fd5b61187384828501611774565b949350505050565b6000806040838503121561188e57600080fd5b82359150602083013567ffffffffffffffff8111156118ac57600080fd5b6118b885828601611774565b9150509250929050565b6000602082840312156118d457600080fd5b81356103bc8161142a565b634e487b7160e01b600052601160045260246000fd5b60008219821115611908576119086118df565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526031908201527f636f696e2d66753a206e6f7420656e6f756768206574682073656e7420666f72604082015270103a3434b9903a3930b739b0b1ba34b7b760791b606082015260800190565b60208082526023908201527f636f696e2d66753a20636f6e74726163742068617368206973206e6f742076616040820152621b1a5960ea1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000815180845260005b81811015611a3c57602081850181015186830182015201611a20565b81811115611a4e576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611a9690830184611a16565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611ada90830184611a16565b979650505050505050565b600060018201611af757611af76118df565b5060010190565b600081518084526020808501945080840160005b83811015611b2e57815187529582019590820190600101611b12565b509495945050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015611b81578284038952611b6f848351611a16565b98850198935090840190600101611b57565b5091979650505050505050565b600081518084526020808501945080840160005b83811015611b2e57815160028110611bbc57611bbc611367565b87529582019590820190600101611ba2565b805160a080845281519084018190526000916020919082019060c0860190845b81811015611c135783516001600160a01b031683529284019291840191600101611bee565b505082850151915085810383870152611c2c8183611afe565b9250505060408301518482036040860152611c478282611afe565b91505060608301518482036060860152611c618282611b39565b915050608083015184820360808601526113238282611b8e565b60208152600060018060a01b03808451166020840152602084015160408401528060408501511660608401525060608301516080830152608083015160e060a0840152611ccc610100840182611a16565b905060a0840151601f19808584030160c0860152611cea8383611bce565b925060c08601519150808584030160e0860152506113238282611bce565b6020815260006103bc6020830184611a16565b600082821015611d2d57611d2d6118df565b50039056fea2646970667358221220013f02be5d9f609090faf669d6636128ec3c4d4fa7c503b4730422b8ee44656564736f6c634300080f0033
Deployed Bytecode Sourcemap
20157:6791:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21282:11;;:26;;21298:9;21282:15;:26::i;:::-;21268:11;:40;21324:38;;21352:9;160:25:1;;21340:10:0;;21324:38;;148:2:1;133:18;21324:38:0;;;;;;;20157:6791;;;;;26846:97;;;;;;;;;;-1:-1:-1;26846:97:0;;;;;:::i;:::-;;:::i;:::-;;20788:50;;;;;;;;;;-1:-1:-1;20788:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;21419:753;;;;;;:::i;:::-;;:::i;:::-;;;160:25:1;;;148:2;133:18;21419:753:0;14:177:1;26136:83:0;;;;;;;;;;-1:-1:-1;26136:83:0;;;;;:::i;:::-;;:::i;25156:711::-;;;;;;;;;;-1:-1:-1;25156:711:0;;;;;:::i;:::-;;:::i;13557:78::-;;;;;;;;;;-1:-1:-1;13596:4:0;13620:7;-1:-1:-1;;;13620:7:0;;;;13557:78;;9703:14:1;;9696:22;9678:41;;9666:2;9651:18;13557:78:0;9538:187:1;25925:166:0;;;;;;;;;;-1:-1:-1;25925:166:0;;;;;:::i;:::-;;:::i;26264:107::-;;;;;;;;;;-1:-1:-1;26342:21:0;26264:107;;11978:148;;;;;;;;;;;;;:::i;20912:32::-;;;;;;;;;;-1:-1:-1;20912:32:0;;;;-1:-1:-1;;;;;20912:32:0;;;;;;-1:-1:-1;;;;;10178:32:1;;;10160:51;;10148:2;10133:18;20912:32:0;9998:219:1;20849:23:0;;;;;;;;;;;;;;;;11336:79;;;;;;;;;;-1:-1:-1;11374:7:0;11401:6;-1:-1:-1;;;;;11401:6:0;11336:79;;20879:26;;;;;;;;;;;;;;;;26435:376;;;;;;;;;;-1:-1:-1;26435:376:0;;;;;:::i;:::-;;:::i;22416:2692::-;;;;;;:::i;:::-;;:::i;12281:244::-;;;;;;;;;;-1:-1:-1;12281:244:0;;;;;:::i;:::-;;:::i;15614:181::-;15672:7;;15704:5;15708:1;15704;:5;:::i;:::-;15692:17;;15733:1;15728;:6;;15720:46;;;;-1:-1:-1;;;15720:46:0;;11157:2:1;15720:46:0;;;11139:21:1;11196:2;11176:18;;;11169:30;11235:29;11215:18;;;11208:57;11282:18;;15720:46:0;;;;;;;;;15786:1;15614:181;-1:-1:-1;;;15614:181:0:o;26846:97::-;11548:6;;-1:-1:-1;;;;;11548:6:0;10020:10;11548:22;11540:67;;;;-1:-1:-1;;;11540:67:0;;;;;;;:::i;:::-;26903:3:::1;26899:36;;;26908:8;:6;:8::i;:::-;26846:97:::0;:::o;26899:36::-:1;26925:10;:8;:10::i;21419:753::-:0;21519:7;13875;;-1:-1:-1;;;13875:7:0;;;;13874:8;13866:37;;;;-1:-1:-1;;;13866:37:0;;;;;;;:::i;:::-;21583:8:::1;::::0;21560:18:::1;::::0;::::1;::::0;:32:::1;::::0;:22:::1;:32::i;:::-;21547:9;:45;;21539:107;;;;-1:-1:-1::0;;;21539:107:0::1;;;;;;;:::i;:::-;21679:20:::0;;-1:-1:-1;;;;;21665:34:0::1;:10;:34;21657:98;;;::::0;-1:-1:-1;;;21657:98:0;;12637:2:1;21657:98:0::1;::::0;::::1;12619:21:1::0;12676:2;12656:18;;;12649:30;12715:34;12695:18;;;12688:62;-1:-1:-1;;;12766:18:1;;;12759:49;12825:19;;21657:98:0::1;12435:415:1::0;21657:98:0::1;21796:8;::::0;21780:11:::1;::::0;:25:::1;::::0;:15:::1;:25::i;:::-;21766:11;:39:::0;21851:19:::1;21873:24;21887:9:::0;21873:13:::1;:24::i;:::-;21851:46:::0;-1:-1:-1;21988:14:0::1;21959:25:::0;;;;:12:::1;:25;::::0;;;;;::::1;;:43;::::0;::::1;;;;;;:::i;:::-;;21951:88;;;::::0;-1:-1:-1;;;21951:88:0;;13057:2:1;21951:88:0::1;::::0;::::1;13039:21:1::0;;;13076:18;;;13069:30;13135:34;13115:18;;;13108:62;13187:18;;21951:88:0::1;12855:356:1::0;21951:88:0::1;22050:25;::::0;;;22078:17:::1;22050:25;::::0;;;;;;;;:45;;-1:-1:-1;;22050:45:0::1;::::0;;::::1;::::0;;;22111:24;;160:25:1;;;22111:24:0::1;::::0;133:18:1;22111:24:0::1;;;;;;;22153:11:::0;-1:-1:-1;13914:1:0::1;21419:753:::0;;;:::o;26136:83::-;11548:6;;-1:-1:-1;;;;;11548:6:0;10020:10;11548:22;11540:67;;;;-1:-1:-1;;;11540:67:0;;;;;;;:::i;:::-;26196:8:::1;:15:::0;26136:83::o;25156:711::-;25281:24;25295:9;25281:13;:24::i;:::-;25266:11;:39;25258:87;;;;-1:-1:-1;;;25258:87:0;;;;;;;:::i;:::-;25378:20;;-1:-1:-1;;;;;25364:34:0;:10;:34;25356:94;;;;-1:-1:-1;;;25356:94:0;;13822:2:1;25356:94:0;;;13804:21:1;13861:2;13841:18;;;13834:30;13900:34;13880:18;;;13873:62;-1:-1:-1;;;13951:18:1;;;13944:45;14006:19;;25356:94:0;13620:411:1;25356:94:0;25498:17;25469:25;;;;:12;:25;;;;;;;;:46;;;;;;;;:::i;:::-;;25461:94;;;;-1:-1:-1;;;25461:94:0;;14238:2:1;25461:94:0;;;14220:21:1;14277:2;14257:18;;;14250:30;14316:34;14296:18;;;14289:62;-1:-1:-1;;;14367:18:1;;;14360:33;14410:19;;25461:94:0;14036:399:1;25461:94:0;25598:25;;;;:12;:25;;;;;;;;:48;;-1:-1:-1;;25598:48:0;25626:20;25598:48;;;25719:18;;;:22;25716:102;;25757:20;;25787:18;;;;25757:49;;-1:-1:-1;;;;;25757:29:0;;;;:49;;;;;25787:18;25757:20;:49;:20;:49;25787:18;25757:29;:49;;;;;;;;;;;;;;;;;;;;;25716:102;25833:25;;160::1;;;25833::0;;148:2:1;133:18;25833:25:0;;;;;;;;25156:711;;:::o;25925:166::-;11548:6;;-1:-1:-1;;;;;11548:6:0;10020:10;11548:22;11540:67;;;;-1:-1:-1;;;11540:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26006:22:0;::::1;25998:56;;;::::0;-1:-1:-1;;;25998:56:0;;14642:2:1;25998:56:0::1;::::0;::::1;14624:21:1::0;14681:2;14661:18;;;14654:30;-1:-1:-1;;;14700:18:1;;;14693:51;14761:18;;25998:56:0::1;14440:345:1::0;25998:56:0::1;26063:9;:20:::0;;-1:-1:-1;;;;;;26063:20:0::1;-1:-1:-1::0;;;;;26063:20:0;;;::::1;::::0;;;::::1;::::0;;25925:166::o;11978:148::-;11548:6;;-1:-1:-1;;;;;11548:6:0;10020:10;11548:22;11540:67;;;;-1:-1:-1;;;11540:67:0;;;;;;;:::i;:::-;12085:1:::1;12069:6:::0;;12048:40:::1;::::0;-1:-1:-1;;;;;12069:6:0;;::::1;::::0;12048:40:::1;::::0;12085:1;;12048:40:::1;12116:1;12099:19:::0;;-1:-1:-1;;;;;;12099:19:0::1;::::0;;11978:148::o;26435:376::-;26531:9;;26489:7;;-1:-1:-1;;;;;26531:9:0;26517:10;:23;26509:71;;;;-1:-1:-1;;;26509:71:0;;14992:2:1;26509:71:0;;;14974:21:1;15031:2;15011:18;;;15004:30;15070:34;15050:18;;;15043:62;-1:-1:-1;;;15121:18:1;;;15114:33;15164:19;;26509:71:0;14790:399:1;26509:71:0;26610:11;;26599:7;:22;;26591:64;;;;-1:-1:-1;;;26591:64:0;;15396:2:1;26591:64:0;;;15378:21:1;15435:2;15415:18;;;15408:30;15474:31;15454:18;;;15447:59;15523:18;;26591:64:0;15194:353:1;26591:64:0;26680:11;;:24;;26696:7;26680:15;:24::i;:::-;26666:11;:38;26715:9;;:27;;-1:-1:-1;;;;;26715:9:0;;;;:27;;;;;26734:7;;26715:9;:27;:9;:27;26734:7;26715:9;:27;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26758:20:0;;160:25:1;;;26758:20:0;;148:2:1;133:18;26758:20:0;;;;;;;-1:-1:-1;26796:7:0;26435:376::o;22416:2692::-;13875:7;;-1:-1:-1;;;13875:7:0;;;;13874:8;13866:37;;;;-1:-1:-1;;;13866:37:0;;;;;;;:::i;:::-;22583:8:::1;::::0;22560:18:::1;::::0;::::1;::::0;:32:::1;::::0;:22:::1;:32::i;:::-;22547:9;:45;;22539:107;;;;-1:-1:-1::0;;;22539:107:0::1;;;;;;;:::i;:::-;22680:24;22694:9;22680:13;:24::i;:::-;22665:11;:39;22657:87;;;;-1:-1:-1::0;;;22657:87:0::1;;;;;;;:::i;:::-;22777:9;:20;;;-1:-1:-1::0;;;;;22763:34:0::1;:10;-1:-1:-1::0;;;;;22763:34:0::1;;22755:92;;;::::0;-1:-1:-1;;;22755:92:0;;15754:2:1;22755:92:0::1;::::0;::::1;15736:21:1::0;15793:2;15773:18;;;15766:30;15832:34;15812:18;;;15805:62;-1:-1:-1;;;15883:18:1;;;15876:43;15936:19;;22755:92:0::1;15552:409:1::0;22755:92:0::1;22895:17;22866:25;::::0;;;:12:::1;:25;::::0;;;;;::::1;;:46;::::0;::::1;;;;;;:::i;:::-;;22858:95;;;::::0;-1:-1:-1;;;22858:95:0;;16168:2:1;22858:95:0::1;::::0;::::1;16150:21:1::0;16207:2;16187:18;;;16180:30;16246:34;16226:18;;;16219:62;-1:-1:-1;;;16297:18:1;;;16290:34;16341:19;;22858:95:0::1;15966:400:1::0;22858:95:0::1;22994:8;::::0;22978:11:::1;::::0;:25:::1;::::0;:15:::1;:25::i;:::-;22964:11;:39:::0;23051:18:::1;::::0;::::1;::::0;:22;23047:104:::1;;23090:9;:20;;;-1:-1:-1::0;;;;;23090:29:0::1;:49;23120:9;:18;;;23090:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23047:104;23165:18;::::0;::::1;::::0;:22;23161:104:::1;;23204:20:::0;;23234:18:::1;::::0;::::1;::::0;23204:49:::1;::::0;-1:-1:-1;;;;;23204:29:0;;::::1;::::0;:49;::::1;;;::::0;23234:18;23204:20:::1;:49:::0;:20;:49;23234:18;23204:29;:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23161:104;23313:6;23309:843;23327:17;::::0;::::1;::::0;:33;:40;23323:44;::::1;23309:843;;;23424:19;23393:9;:17;;;:24;;;23418:1;23393:27;;;;;;;;:::i;:::-;;;;;;;:50;;;;;;;;:::i;:::-;::::0;23389:751:::1;;23470:17;::::0;::::1;::::0;:33;:36;;23504:1;;23470:36;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;23462:80:0::1;;23543:9;:20;;;23601:9;:20;;;23659:9;:17;;;:25;;;23685:1;23659:28;;;;;;;;:::i;:::-;;;;;;;23724:9;:17;;;:22;;;23747:1;23724:25;;;;;;;;:::i;:::-;;;;;;;23462:288;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23389:751;;;23796:17;::::0;::::1;::::0;:33;:36;;23830:1;;23796:36;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;23787:81:0::1;;23869:9;:20;;;23927:9;:20;;;23985:9;:17;;;:25;;;24011:1;23985:28;;;;;;;;:::i;:::-;;;;;;;24050:9;:17;;;:24;;;24075:1;24050:27;;;;;;;;:::i;:::-;;;;;;;24114:9;:17;;;:22;;;24137:1;24114:25;;;;;;;;:::i;:::-;;;;;;;23787:353;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23389:751;23369:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23309:843;;;;24166:6;24162:844;24180:17;::::0;::::1;::::0;:33;:40;24176:44;::::1;24162:844;;;24278:19;24247:9;:17;;;:24;;;24272:1;24247:27;;;;;;;;:::i;:::-;;;;;;;:50;;;;;;;;:::i;:::-;::::0;24243:751:::1;;24324:17;::::0;::::1;::::0;:33;:36;;24358:1;;24324:36;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;24316:80:0::1;;24397:9;:20;;;24455:9;:20;;;24513:9;:17;;;:25;;;24539:1;24513:28;;;;;;;;:::i;:::-;;;;;;;24578:9;:17;;;:22;;;24601:1;24578:25;;;;;;;;:::i;:::-;;;;;;;24316:288;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24243:751;;;24650:17;::::0;::::1;::::0;:33;:36;;24684:1;;24650:36;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;24641:81:0::1;;24723:9;:20;;;24781:9;:20;;;24839:9;:17;;;:25;;;24865:1;24839:28;;;;;;;;:::i;:::-;;;;;;;24904:9;:17;;;:24;;;24929:1;24904:27;;;;;;;;:::i;:::-;;;;;;;24968:9;:17;;;:22;;;24991:1;24968:25;;;;;;;;:::i;:::-;;;;;;;24641:353;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24243:751;24222:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24162:844;;;-1:-1:-1::0;25016:25:0::1;::::0;;;:12:::1;:25;::::0;;;;;;;;:45;;-1:-1:-1;;25016:45:0::1;25044:17;25016:45;::::0;;25077:23;;160:25:1;;;25077:23:0::1;::::0;133:18:1;25077:23:0::1;14:177:1::0;12281:244:0;11548:6;;-1:-1:-1;;;;;11548:6:0;10020:10;11548:22;11540:67;;;;-1:-1:-1;;;11540:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12370:22:0;::::1;12362:73;;;::::0;-1:-1:-1;;;12362:73:0;;18411:2:1;12362:73:0::1;::::0;::::1;18393:21:1::0;18450:2;18430:18;;;18423:30;18489:34;18469:18;;;18462:62;-1:-1:-1;;;18540:18:1;;;18533:36;18586:19;;12362:73:0::1;18209:402:1::0;12362:73:0::1;12472:6;::::0;;12451:38:::1;::::0;-1:-1:-1;;;;;12451:38:0;;::::1;::::0;12472:6;::::1;::::0;12451:38:::1;::::0;::::1;12500:6;:17:::0;;-1:-1:-1;;;;;;12500:17:0::1;-1:-1:-1::0;;;;;12500:17:0;;;::::1;::::0;;;::::1;::::0;;12281:244::o;14347:118::-;13875:7;;-1:-1:-1;;;13875:7:0;;;;13874:8;13866:37;;;;-1:-1:-1;;;13866:37:0;;;;;;;:::i;:::-;14407:7:::1;:14:::0;;-1:-1:-1;;;;14407:14:0::1;-1:-1:-1::0;;;14407:14:0::1;::::0;;14437:20:::1;14444:12;10020:10:::0;;9924:115;14444:12:::1;14437:20;::::0;-1:-1:-1;;;;;10178:32:1;;;10160:51;;10148:2;10133:18;14437:20:0::1;;;;;;;14347:118::o:0;14606:120::-;14151:7;;-1:-1:-1;;;14151:7:0;;;;14143:40;;;;-1:-1:-1;;;14143:40:0;;19034:2:1;14143:40:0;;;19016:21:1;19073:2;19053:18;;;19046:30;-1:-1:-1;;;19092:18:1;;;19085:50;19152:18;;14143:40:0;18832:344:1;14143:40:0;14675:5:::1;14665:15:::0;;-1:-1:-1;;;;14665:15:0::1;::::0;;14696:22:::1;10020:10:::0;14705:12:::1;9924:115:::0;22220:149;22302:7;22350:9;22339:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;22329:32;;;;;;22322:39;;22220:149;;;:::o;16078:136::-;16136:7;16163:43;16167:1;16170;16163:43;;;;;;;;;;;;;;;;;16603:7;16639:12;16631:6;;;;16623:29;;;;-1:-1:-1;;;16623:29:0;;;;;;;;:::i;:::-;-1:-1:-1;16663:9:0;16675:5;16679:1;16675;:5;:::i;:::-;16663:17;16517:192;-1:-1:-1;;;;;16517:192:0:o;196:273:1:-;252:6;305:2;293:9;284:7;280:23;276:32;273:52;;;321:1;318;311:12;273:52;360:9;347:23;413:5;406:13;399:21;392:5;389:32;379:60;;435:1;432;425:12;474:180;533:6;586:2;574:9;565:7;561:23;557:32;554:52;;;602:1;599;592:12;554:52;-1:-1:-1;625:23:1;;474:180;-1:-1:-1;474:180:1:o;659:127::-;720:10;715:3;711:20;708:1;701:31;751:4;748:1;741:15;775:4;772:1;765:15;791:245;937:2;922:18;;970:1;959:13;;949:47;;976:18;;:::i;:::-;1005:25;;;791:245;:::o;1041:127::-;1102:10;1097:3;1093:20;1090:1;1083:31;1133:4;1130:1;1123:15;1157:4;1154:1;1147:15;1173:253;1245:2;1239:9;1287:4;1275:17;;1322:18;1307:34;;1343:22;;;1304:62;1301:88;;;1369:18;;:::i;:::-;1405:2;1398:22;1173:253;:::o;1431:::-;1503:2;1497:9;1545:4;1533:17;;1580:18;1565:34;;1601:22;;;1562:62;1559:88;;;1627:18;;:::i;1689:275::-;1760:2;1754:9;1825:2;1806:13;;-1:-1:-1;;1802:27:1;1790:40;;1860:18;1845:34;;1881:22;;;1842:62;1839:88;;;1907:18;;:::i;:::-;1943:2;1936:22;1689:275;;-1:-1:-1;1689:275:1:o;1969:139::-;-1:-1:-1;;;;;2052:31:1;;2042:42;;2032:70;;2098:1;2095;2088:12;2113:150;2189:20;;2218:39;2189:20;2218:39;:::i;2268:530::-;2310:5;2363:3;2356:4;2348:6;2344:17;2340:27;2330:55;;2381:1;2378;2371:12;2330:55;2417:6;2404:20;2443:18;2439:2;2436:26;2433:52;;;2465:18;;:::i;:::-;2509:55;2552:2;2533:13;;-1:-1:-1;;2529:27:1;2558:4;2525:38;2509:55;:::i;:::-;2589:2;2580:7;2573:19;2635:3;2628:4;2623:2;2615:6;2611:15;2607:26;2604:35;2601:55;;;2652:1;2649;2642:12;2601:55;2717:2;2710:4;2702:6;2698:17;2691:4;2682:7;2678:18;2665:55;2765:1;2740:16;;;2758:4;2736:27;2729:38;;;;2744:7;2268:530;-1:-1:-1;;;2268:530:1:o;2803:183::-;2863:4;2896:18;2888:6;2885:30;2882:56;;;2918:18;;:::i;:::-;-1:-1:-1;2963:1:1;2959:14;2975:4;2955:25;;2803:183::o;2991:745::-;3045:5;3098:3;3091:4;3083:6;3079:17;3075:27;3065:55;;3116:1;3113;3106:12;3065:55;3152:6;3139:20;3178:4;3202:60;3218:43;3258:2;3218:43;:::i;:::-;3202:60;:::i;:::-;3296:15;;;3382:1;3378:10;;;;3366:23;;3362:32;;;3327:12;;;;3406:15;;;3403:35;;;3434:1;3431;3424:12;3403:35;3470:2;3462:6;3458:15;3482:225;3498:6;3493:3;3490:15;3482:225;;;3578:3;3565:17;3595:39;3628:5;3595:39;:::i;:::-;3647:18;;3685:12;;;;3515;;3482:225;;;-1:-1:-1;3725:5:1;2991:745;-1:-1:-1;;;;;;2991:745:1:o;3741:662::-;3795:5;3848:3;3841:4;3833:6;3829:17;3825:27;3815:55;;3866:1;3863;3856:12;3815:55;3902:6;3889:20;3928:4;3952:60;3968:43;4008:2;3968:43;:::i;3952:60::-;4046:15;;;4132:1;4128:10;;;;4116:23;;4112:32;;;4077:12;;;;4156:15;;;4153:35;;;4184:1;4181;4174:12;4153:35;4220:2;4212:6;4208:15;4232:142;4248:6;4243:3;4240:15;4232:142;;;4314:17;;4302:30;;4352:12;;;;4265;;4232:142;;4408:886;4460:5;4513:3;4506:4;4498:6;4494:17;4490:27;4480:55;;4531:1;4528;4521:12;4480:55;4567:6;4554:20;4593:4;4617:60;4633:43;4673:2;4633:43;:::i;4617:60::-;4711:15;;;4797:1;4793:10;;;;4781:23;;4777:32;;;4742:12;;;;4821:15;;;4818:35;;;4849:1;4846;4839:12;4818:35;4885:2;4877:6;4873:15;4897:368;4913:6;4908:3;4905:15;4897:368;;;4999:3;4986:17;5035:18;5022:11;5019:35;5016:125;;;5095:1;5124:2;5120;5113:14;5016:125;5166:56;5218:3;5213:2;5199:11;5191:6;5187:24;5183:33;5166:56;:::i;:::-;5154:69;;-1:-1:-1;5243:12:1;;;;4930;;4897:368;;5299:826;5363:5;5416:3;5409:4;5401:6;5397:17;5393:27;5383:55;;5434:1;5431;5424:12;5383:55;5470:6;5457:20;5496:4;5520:60;5536:43;5576:2;5536:43;:::i;5520:60::-;5614:15;;;5700:1;5696:10;;;;5684:23;;5680:32;;;5645:12;;;;5724:15;;;5721:35;;;5752:1;5749;5742:12;5721:35;5788:2;5780:6;5776:15;5800:296;5816:6;5811:3;5808:15;5800:296;;;5896:3;5883:17;5933:1;5926:5;5923:12;5913:110;;5977:1;6006:2;6002;5995:14;5913:110;6036:18;;6074:12;;;;5833;;5800:296;;6130:1165;6186:5;6234:4;6222:9;6217:3;6213:19;6209:30;6206:50;;;6252:1;6249;6242:12;6206:50;6274:22;;:::i;:::-;6265:31;;6332:9;6319:23;6361:18;6402:2;6394:6;6391:14;6388:34;;;6418:1;6415;6408:12;6388:34;6445:57;6498:3;6489:6;6478:9;6474:22;6445:57;:::i;:::-;6438:5;6431:72;6556:2;6545:9;6541:18;6528:32;6512:48;;6585:2;6575:8;6572:16;6569:36;;;6601:1;6598;6591:12;6569:36;6637:59;6692:3;6681:8;6670:9;6666:24;6637:59;:::i;:::-;6632:2;6625:5;6621:14;6614:83;6750:2;6739:9;6735:18;6722:32;6706:48;;6779:2;6769:8;6766:16;6763:36;;;6795:1;6792;6785:12;6763:36;6831:59;6886:3;6875:8;6864:9;6860:24;6831:59;:::i;:::-;6826:2;6819:5;6815:14;6808:83;6944:2;6933:9;6929:18;6916:32;6900:48;;6973:2;6963:8;6960:16;6957:36;;;6989:1;6986;6979:12;6957:36;7025:57;7078:3;7067:8;7056:9;7052:24;7025:57;:::i;:::-;7020:2;7013:5;7009:14;7002:81;7136:3;7125:9;7121:19;7108:33;7092:49;;7166:2;7156:8;7153:16;7150:36;;;7182:1;7179;7172:12;7150:36;;7219:69;7284:3;7273:8;7262:9;7258:24;7219:69;:::i;:::-;7213:3;7206:5;7202:15;7195:94;;6130:1165;;;;:::o;7300:1056::-;7365:5;7413:4;7401:9;7396:3;7392:19;7388:30;7385:50;;;7431:1;7428;7421:12;7385:50;7453:22;;:::i;:::-;7444:31;;7498:37;7525:9;7498:37;:::i;:::-;7491:5;7484:52;7596:2;7585:9;7581:18;7568:32;7563:2;7556:5;7552:14;7545:56;7633:46;7675:2;7664:9;7660:18;7633:46;:::i;:::-;7628:2;7621:5;7617:14;7610:70;7740:2;7729:9;7725:18;7712:32;7707:2;7700:5;7696:14;7689:56;7796:3;7785:9;7781:19;7768:33;7820:18;7861:2;7853:6;7850:14;7847:34;;;7877:1;7874;7867:12;7847:34;7914:45;7955:3;7946:6;7935:9;7931:22;7914:45;:::i;:::-;7908:3;7901:5;7897:15;7890:70;8013:3;8002:9;7998:19;7985:33;7969:49;;8043:2;8033:8;8030:16;8027:36;;;8059:1;8056;8049:12;8027:36;8096:58;8150:3;8139:8;8128:9;8124:24;8096:58;:::i;:::-;8090:3;8083:5;8079:15;8072:83;8208:3;8197:9;8193:19;8180:33;8164:49;;8238:2;8228:8;8225:16;8222:36;;;8254:1;8251;8244:12;8222:36;;8291:58;8345:3;8334:8;8323:9;8319:24;8291:58;:::i;:::-;8285:3;8278:5;8274:15;8267:83;;7300:1056;;;;:::o;8361:366::-;8455:6;8508:2;8496:9;8487:7;8483:23;8479:32;8476:52;;;8524:1;8521;8514:12;8476:52;8564:9;8551:23;8597:18;8589:6;8586:30;8583:50;;;8629:1;8626;8619:12;8583:50;8652:69;8713:7;8704:6;8693:9;8689:22;8652:69;:::i;:::-;8642:79;8361:366;-1:-1:-1;;;;8361:366:1:o;9099:434::-;9202:6;9210;9263:2;9251:9;9242:7;9238:23;9234:32;9231:52;;;9279:1;9276;9269:12;9231:52;9315:9;9302:23;9292:33;;9376:2;9365:9;9361:18;9348:32;9403:18;9395:6;9392:30;9389:50;;;9435:1;9432;9425:12;9389:50;9458:69;9519:7;9510:6;9499:9;9495:22;9458:69;:::i;:::-;9448:79;;;9099:434;;;;;:::o;9730:263::-;9797:6;9850:2;9838:9;9829:7;9825:23;9821:32;9818:52;;;9866:1;9863;9856:12;9818:52;9905:9;9892:23;9924:39;9957:5;9924:39;:::i;10690:127::-;10751:10;10746:3;10742:20;10739:1;10732:31;10782:4;10779:1;10772:15;10806:4;10803:1;10796:15;10822:128;10862:3;10893:1;10889:6;10886:1;10883:13;10880:39;;;10899:18;;:::i;:::-;-1:-1:-1;10935:9:1;;10822:128::o;11311:356::-;11513:2;11495:21;;;11532:18;;;11525:30;11591:34;11586:2;11571:18;;11564:62;11658:2;11643:18;;11311:356::o;11672:340::-;11874:2;11856:21;;;11913:2;11893:18;;;11886:30;-1:-1:-1;;;11947:2:1;11932:18;;11925:46;12003:2;11988:18;;11672:340::o;12017:413::-;12219:2;12201:21;;;12258:2;12238:18;;;12231:30;12297:34;12292:2;12277:18;;12270:62;-1:-1:-1;;;12363:2:1;12348:18;;12341:47;12420:3;12405:19;;12017:413::o;13216:399::-;13418:2;13400:21;;;13457:2;13437:18;;;13430:30;13496:34;13491:2;13476:18;;13469:62;-1:-1:-1;;;13562:2:1;13547:18;;13540:33;13605:3;13590:19;;13216:399::o;16371:127::-;16432:10;16427:3;16423:20;16420:1;16413:31;16463:4;16460:1;16453:15;16487:4;16484:1;16477:15;16503:471;16544:3;16582:5;16576:12;16609:6;16604:3;16597:19;16634:1;16644:162;16658:6;16655:1;16652:13;16644:162;;;16720:4;16776:13;;;16772:22;;16766:29;16748:11;;;16744:20;;16737:59;16673:12;16644:162;;;16824:6;16821:1;16818:13;16815:87;;;16890:1;16883:4;16874:6;16869:3;16865:16;16861:27;16854:38;16815:87;-1:-1:-1;16956:2:1;16935:15;-1:-1:-1;;16931:29:1;16922:39;;;;16963:4;16918:50;;16503:471;-1:-1:-1;;16503:471:1:o;16979:504::-;-1:-1:-1;;;;;17264:15:1;;;17246:34;;17316:15;;17311:2;17296:18;;17289:43;17363:2;17348:18;;17341:34;;;17411:3;17406:2;17391:18;;17384:31;;;17189:4;;17432:45;;17457:19;;17449:6;17432:45;:::i;:::-;17424:53;16979:504;-1:-1:-1;;;;;;16979:504:1:o;17488:576::-;-1:-1:-1;;;;;17801:15:1;;;17783:34;;17853:15;;17848:2;17833:18;;17826:43;17900:2;17885:18;;17878:34;;;17943:2;17928:18;;17921:34;;;17763:3;17986;17971:19;;17964:32;;;17726:4;;18013:45;;18038:19;;18030:6;18013:45;:::i;:::-;18005:53;17488:576;-1:-1:-1;;;;;;;17488:576:1:o;18069:135::-;18108:3;18129:17;;;18126:43;;18149:18;;:::i;:::-;-1:-1:-1;18196:1:1;18185:13;;18069:135::o;19181:435::-;19234:3;19272:5;19266:12;19299:6;19294:3;19287:19;19325:4;19354:2;19349:3;19345:12;19338:19;;19391:2;19384:5;19380:14;19412:1;19422:169;19436:6;19433:1;19430:13;19422:169;;;19497:13;;19485:26;;19531:12;;;;19566:15;;;;19458:1;19451:9;19422:169;;;-1:-1:-1;19607:3:1;;19181:435;-1:-1:-1;;;;;19181:435:1:o;19621:614::-;19672:3;19710:5;19704:12;19737:6;19732:3;19725:19;19763:4;19804:2;19799:3;19795:12;19829:11;19856;19849:18;;19906:6;19903:1;19899:14;19892:5;19888:26;19876:38;;19948:2;19941:5;19937:14;19969:1;19979:230;19993:6;19990:1;19987:13;19979:230;;;20064:5;20058:4;20054:16;20049:3;20042:29;20092:37;20124:4;20115:6;20109:13;20092:37;:::i;:::-;20187:12;;;;20084:45;-1:-1:-1;20152:15:1;;;;20015:1;20008:9;19979:230;;;-1:-1:-1;20225:4:1;;19621:614;-1:-1:-1;;;;;;;19621:614:1:o;20240:526::-;20303:3;20341:5;20335:12;20368:6;20363:3;20356:19;20394:4;20423:2;20418:3;20414:12;20407:19;;20460:2;20453:5;20449:14;20481:1;20491:250;20505:6;20502:1;20499:13;20491:250;;;20570:6;20564:13;20607:1;20603:2;20600:9;20590:43;;20613:18;;:::i;:::-;20646:15;;20681:12;;;;20716:15;;;;20527:1;20520:9;20491:250;;20771:1300;20896:12;;20862:4;20917:17;;;20983:19;;20853:14;;;21011:20;;;20823:3;;21081:4;;21108:21;;;;21058:3;21049:13;;;20823:3;21157:201;21171:6;21168:1;21165:13;21157:201;;;21238:13;;-1:-1:-1;;;;;21234:39:1;21220:54;;21333:15;;;;21296:14;;;;21270:1;21186:9;21157:201;;;21161:3;;21406:2;21399:5;21395:14;21389:21;21367:43;;21451:3;21444:5;21440:15;21435:2;21430:3;21426:12;21419:37;21479:51;21524:5;21508:14;21479:51;:::i;:::-;21465:65;;;;21578:4;21571:5;21567:16;21561:23;21628:3;21620:6;21616:16;21609:4;21604:3;21600:14;21593:40;21656:52;21701:6;21685:14;21656:52;:::i;:::-;21642:66;;;21756:4;21749:5;21745:16;21739:23;21806:3;21798:6;21794:16;21787:4;21782:3;21778:14;21771:40;21834:50;21877:6;21861:14;21834:50;:::i;:::-;21820:64;;;21932:4;21925:5;21921:16;21915:23;21982:3;21974:6;21970:16;21963:4;21958:3;21954:14;21947:40;22003:62;22058:6;22042:14;22003:62;:::i;22076:1075::-;22275:2;22264:9;22257:21;22238:4;22314:1;22310;22305:3;22301:11;22297:19;22371:2;22362:6;22356:13;22352:22;22347:2;22336:9;22332:18;22325:50;22429:2;22421:6;22417:15;22411:22;22406:2;22395:9;22391:18;22384:50;22498:2;22492;22484:6;22480:15;22474:22;22470:31;22465:2;22454:9;22450:18;22443:59;;22557:2;22549:6;22545:15;22539:22;22533:3;22522:9;22518:19;22511:51;22609:3;22601:6;22597:16;22591:23;22651:4;22645:3;22634:9;22630:19;22623:33;22679:51;22725:3;22714:9;22710:19;22696:12;22679:51;:::i;:::-;22665:65;;22779:3;22771:6;22767:16;22761:23;22807:2;22803:7;22875:2;22863:9;22855:6;22851:22;22847:31;22841:3;22830:9;22826:19;22819:60;22902:51;22946:6;22930:14;22902:51;:::i;:::-;22888:65;;23002:3;22994:6;22990:16;22984:23;22962:45;;23073:2;23061:9;23053:6;23049:22;23045:31;23038:4;23027:9;23023:20;23016:61;;23094:51;23138:6;23122:14;23094:51;:::i;23156:219::-;23305:2;23294:9;23287:21;23268:4;23325:44;23365:2;23354:9;23350:18;23342:6;23325:44;:::i;23380:125::-;23420:4;23448:1;23445;23442:8;23439:34;;;23453:18;;:::i;:::-;-1:-1:-1;23490:9:1;;23380:125::o
Swarm Source
ipfs://013f02be5d9f609090faf669d6636128ec3c4d4fa7c503b4730422b8ee446565
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.