Overview
APE Balance
2,095.8 APE
APE Value
$2,601.01 (@ $1.24/APE)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 212 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0xf899e247 | 7419867 | 3 hrs ago | IN | 42 APE | 0.00129594 | ||||
0xf899e247 | 7410380 | 11 hrs ago | IN | 42 APE | 0.00129597 | ||||
0x39c62859 | 7407218 | 15 hrs ago | IN | 4.2 APE | 0.00129543 | ||||
0x39c62859 | 7407016 | 15 hrs ago | IN | 4.2 APE | 0.00129543 | ||||
0x39c62859 | 7404320 | 19 hrs ago | IN | 4.2 APE | 0.00129546 | ||||
0x39c62859 | 7400287 | 23 hrs ago | IN | 4.2 APE | 0.00129543 | ||||
0x39c62859 | 7399997 | 23 hrs ago | IN | 4.2 APE | 0.00129543 | ||||
0x39c62859 | 7399086 | 24 hrs ago | IN | 4.2 APE | 0.00129543 | ||||
0x39c62859 | 7397539 | 25 hrs ago | IN | 4.2 APE | 0.00129546 | ||||
0xf899e247 | 7396901 | 26 hrs ago | IN | 42 APE | 0.00129594 | ||||
0x39c62859 | 7396895 | 26 hrs ago | IN | 4.2 APE | 0.00129543 | ||||
0xf899e247 | 7396602 | 26 hrs ago | IN | 42 APE | 0.00129597 | ||||
0x39c62859 | 7396028 | 27 hrs ago | IN | 4.2 APE | 0.00129543 | ||||
0xf899e247 | 7394458 | 28 hrs ago | IN | 42 APE | 0.00129594 | ||||
0x39c62859 | 7390847 | 31 hrs ago | IN | 4.2 APE | 0.00129543 | ||||
0x39c62859 | 7390824 | 31 hrs ago | IN | 4.2 APE | 0.00129543 | ||||
0x39c62859 | 7389020 | 32 hrs ago | IN | 4.2 APE | 0.00129543 | ||||
0x39c62859 | 7388604 | 33 hrs ago | IN | 4.2 APE | 0.00129543 | ||||
0x39c62859 | 7388004 | 33 hrs ago | IN | 4.2 APE | 0.00129543 | ||||
0xf899e247 | 7386250 | 35 hrs ago | IN | 42 APE | 0.00129597 | ||||
0x39c62859 | 7378220 | 43 hrs ago | IN | 4.2 APE | 0.00129543 | ||||
0x39c62859 | 7376938 | 44 hrs ago | IN | 4.2 APE | 0.00129546 | ||||
0x39c62859 | 7376833 | 44 hrs ago | IN | 4.2 APE | 0.00129546 | ||||
0x39c62859 | 7375273 | 46 hrs ago | IN | 4.2 APE | 0.00129543 | ||||
0xf899e247 | 7375255 | 46 hrs ago | IN | 42 APE | 0.00129594 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
BoujeeBoxes
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2024-12-29 */ // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _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); } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. * * ==== Security Considerations * * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be * considered as an intention to spend the allowance in any specific way. The second is that because permits have * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be * generally recommended is: * * ```solidity * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { * try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {} * doThing(..., value); * } * * function doThing(..., uint256 value) public { * token.safeTransferFrom(msg.sender, address(this), value); * ... * } * ``` * * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also * {SafeERC20-safeTransferFrom}). * * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so * contracts should have entry points that don't rely on permit. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. * * CAUTION: See Security Considerations above. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol) pragma solidity ^0.8.20; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev The ETH balance of the account is not enough to perform the operation. */ error AddressInsufficientBalance(address account); /** * @dev There's no code at `target` (it is not a contract). */ error AddressEmptyCode(address target); /** * @dev A call to an address target failed. The target may have reverted. */ error FailedInnerCall(); /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { if (address(this).balance < amount) { revert AddressInsufficientBalance(address(this)); } (bool success, ) = recipient.call{value: amount}(""); if (!success) { revert FailedInnerCall(); } } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason or custom error, it is bubbled * up by this function (like regular Solidity function calls). However, if * the call reverted with no returned reason, this function reverts with a * {FailedInnerCall} error. * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { if (address(this).balance < value) { revert AddressInsufficientBalance(address(this)); } (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an * unsuccessful call. */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata ) internal view returns (bytes memory) { if (!success) { _revert(returndata); } else { // only check if target is a contract if the call was successful and the return data is empty // otherwise we already know that it was a contract if (returndata.length == 0 && target.code.length == 0) { revert AddressEmptyCode(target); } return returndata; } } /** * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the * revert reason or with a default {FailedInnerCall} error. */ function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) { if (!success) { _revert(returndata); } else { return returndata; } } /** * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}. */ function _revert(bytes memory returndata) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert FailedInnerCall(); } } } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.20; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; /** * @dev An operation with an ERC20 token failed. */ error SafeERC20FailedOperation(address token); /** * @dev Indicates a failed `decreaseAllowance` request. */ error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease); /** * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value))); } /** * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. */ function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value))); } /** * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 oldAllowance = token.allowance(address(this), spender); forceApprove(token, spender, oldAllowance + value); } /** * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no * value, non-reverting calls are assumed to be successful. */ function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal { unchecked { uint256 currentAllowance = token.allowance(address(this), spender); if (currentAllowance < requestedDecrease) { revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease); } forceApprove(token, spender, currentAllowance - requestedDecrease); } } /** * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval * to be set to zero before setting it to a non-zero value, such as USDT. */ function forceApprove(IERC20 token, address spender, uint256 value) internal { bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value)); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0))); _callOptionalReturn(token, approvalCall); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data); if (returndata.length != 0 && !abi.decode(returndata, (bool))) { revert SafeERC20FailedOperation(address(token)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). * * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead. */ function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false // and not revert is the subcall reverts. (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0; } } // File: @openzeppelin/contracts/finance/PaymentSplitter.sol // OpenZeppelin Contracts (last updated v4.8.0) (finance/PaymentSplitter.sol) pragma solidity ^0.8.0; /** * @title PaymentSplitter * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware * that the Ether will be split in this way, since it is handled transparently by the contract. * * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim * an amount proportional to the percentage of total shares they were assigned. The distribution of shares is set at the * time of contract deployment and can't be updated thereafter. * * `PaymentSplitter` follows a _pull payment_ model. This means that payments are not automatically forwarded to the * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release} * function. * * NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and * tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you * to run tests before sending real value to this contract. */ contract PaymentSplitter is Context { event PayeeAdded(address account, uint256 shares); event PaymentReleased(address to, uint256 amount); event ERC20PaymentReleased(IERC20 indexed token, address to, uint256 amount); event PaymentReceived(address from, uint256 amount); uint256 private _totalShares; uint256 private _totalReleased; mapping(address => uint256) private _shares; mapping(address => uint256) private _released; address[] private _payees; mapping(IERC20 => uint256) private _erc20TotalReleased; mapping(IERC20 => mapping(address => uint256)) private _erc20Released; /** * @dev Creates an instance of `PaymentSplitter` where each account in `payees` is assigned the number of shares at * the matching position in the `shares` array. * * All addresses in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no * duplicates in `payees`. */ constructor(address[] memory payees, uint256[] memory shares_) payable { require(payees.length == shares_.length, "PaymentSplitter: payees and shares length mismatch"); require(payees.length > 0, "PaymentSplitter: no payees"); for (uint256 i = 0; i < payees.length; i++) { _addPayee(payees[i], shares_[i]); } } /** * @dev The Ether received will be logged with {PaymentReceived} events. Note that these events are not fully * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the * reliability of the events, and not the actual splitting of Ether. * * To learn more about this see the Solidity documentation for * https://solidity.readthedocs.io/en/latest/contracts.html#fallback-function[fallback * functions]. */ receive() external payable virtual { emit PaymentReceived(_msgSender(), msg.value); } /** * @dev Getter for the total shares held by payees. */ function totalShares() public view returns (uint256) { return _totalShares; } /** * @dev Getter for the total amount of Ether already released. */ function totalReleased() public view returns (uint256) { return _totalReleased; } /** * @dev Getter for the total amount of `token` already released. `token` should be the address of an IERC20 * contract. */ function totalReleased(IERC20 token) public view returns (uint256) { return _erc20TotalReleased[token]; } /** * @dev Getter for the amount of shares held by an account. */ function shares(address account) public view returns (uint256) { return _shares[account]; } /** * @dev Getter for the amount of Ether already released to a payee. */ function released(address account) public view returns (uint256) { return _released[account]; } /** * @dev Getter for the amount of `token` tokens already released to a payee. `token` should be the address of an * IERC20 contract. */ function released(IERC20 token, address account) public view returns (uint256) { return _erc20Released[token][account]; } /** * @dev Getter for the address of the payee number `index`. */ function payee(uint256 index) public view returns (address) { return _payees[index]; } /** * @dev Getter for the amount of payee's releasable Ether. */ function releasable(address account) public view returns (uint256) { uint256 totalReceived = address(this).balance + totalReleased(); return _pendingPayment(account, totalReceived, released(account)); } /** * @dev Getter for the amount of payee's releasable `token` tokens. `token` should be the address of an * IERC20 contract. */ function releasable(IERC20 token, address account) public view returns (uint256) { uint256 totalReceived = token.balanceOf(address(this)) + totalReleased(token); return _pendingPayment(account, totalReceived, released(token, account)); } /** * @dev Triggers a transfer to `account` of the amount of Ether they are owed, according to their percentage of the * total shares and their previous withdrawals. */ function release(address payable account) public virtual { require(_shares[account] > 0, "PaymentSplitter: account has no shares"); uint256 payment = releasable(account); require(payment != 0, "PaymentSplitter: account is not due payment"); // _totalReleased is the sum of all values in _released. // If "_totalReleased += payment" does not overflow, then "_released[account] += payment" cannot overflow. _totalReleased += payment; unchecked { _released[account] += payment; } Address.sendValue(account, payment); emit PaymentReleased(account, payment); } /** * @dev Triggers a transfer to `account` of the amount of `token` tokens they are owed, according to their * percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20 * contract. */ function release(IERC20 token, address account) public virtual { require(_shares[account] > 0, "PaymentSplitter: account has no shares"); uint256 payment = releasable(token, account); require(payment != 0, "PaymentSplitter: account is not due payment"); // _erc20TotalReleased[token] is the sum of all values in _erc20Released[token]. // If "_erc20TotalReleased[token] += payment" does not overflow, then "_erc20Released[token][account] += payment" // cannot overflow. _erc20TotalReleased[token] += payment; unchecked { _erc20Released[token][account] += payment; } SafeERC20.safeTransfer(token, account, payment); emit ERC20PaymentReleased(token, account, payment); } /** * @dev internal logic for computing the pending payment of an `account` given the token historical balances and * already released amounts. */ function _pendingPayment( address account, uint256 totalReceived, uint256 alreadyReleased ) private view returns (uint256) { return (totalReceived * _shares[account]) / _totalShares - alreadyReleased; } /** * @dev Add a new payee to the contract. * @param account The address of the payee to add. * @param shares_ The number of shares owned by the payee. */ function _addPayee(address account, uint256 shares_) private { require(account != address(0), "PaymentSplitter: account is the zero address"); require(shares_ > 0, "PaymentSplitter: shares are 0"); require(_shares[account] == 0, "PaymentSplitter: account already has shares"); _payees.push(account); _shares[account] = shares_; _totalShares = _totalShares + shares_; emit PayeeAdded(account, shares_); } } // File: contracts/BoujeeBoxes.sol pragma solidity ^0.8.23; contract BoujeeBoxes is Ownable, ReentrancyGuard, PaymentSplitter { uint256 public constant donationPrice1 = 4.2 ether; uint256 public constant donationPrice2 = 42 ether; uint256 public constant donationPrice3 = 420 ether; address[] private donors1; address[] private donors2; address[] private donors3; // Keep track of how many payees there are (for releaseAll) uint256 private teamLength; constructor( address _initialOwner, address[] memory _payees, uint256[] memory _shares ) PaymentSplitter(_payees, _shares) Ownable(_initialOwner) { teamLength = _payees.length; } /** * @notice Donate exactly 4.2 APE */ function donate1() external payable nonReentrant { require(msg.value == donationPrice1, "Must send exactly 4.2 APE"); donors1.push(msg.sender); } /** * @notice Donate exactly 42 APE */ function donate2() external payable nonReentrant { require(msg.value == donationPrice2, "Must send exactly 42 APE"); donors2.push(msg.sender); } /** * @notice Donate exactly 420 APE */ function donate3() external payable nonReentrant { require(msg.value == donationPrice3, "Must send exactly 420 APE"); donors3.push(msg.sender); } /*/////////////////////////////////////////////////////////////// VIEW FUNCTIONS //////////////////////////////////////////////////////////////*/ /** * @notice Retrieve all donors of 4.2 APE */ function getdonors1() external view returns (address[] memory) { return donors1; } /** * @notice Retrieve all donors of 42 APE */ function getdonors2() external view returns (address[] memory) { return donors2; } /** * @notice Retrieve all donors of 420 APE */ function getdonors3() external view returns (address[] memory) { return donors3; } /*/////////////////////////////////////////////////////////////// OWNER FUNCTIONS //////////////////////////////////////////////////////////////*/ /** * @notice Release all payees’ available shares in one go. * Alternatively, each payee can individually call `release(payable(theirAddress))`. */ function releaseAll() external onlyOwner { for (uint256 i = 0; i < teamLength; i++) { release(payable(payee(i))); } } /** * @notice Rescue function for any ERC20 tokens accidentally sent to this contract. */ function rescueERC20(IERC20 token, address to, uint256 amount) external onlyOwner { token.transfer(to, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"address[]","name":"_payees","type":"address[]"},{"internalType":"uint256[]","name":"_shares","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","type":"event"},{"inputs":[],"name":"donate1","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"donate2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"donate3","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"donationPrice1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"donationPrice2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"donationPrice3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getdonors1","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getdonors2","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getdonors3","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"releaseAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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
608060405234801561000f575f80fd5b50604051612bf2380380612bf283398181016040528101906100319190610742565b8181845f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a4575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161009b91906107d9565b60405180910390fd5b6100b3816101b160201b60201c565b506001808190555080518251146100ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f690610872565b60405180910390fd5b5f825111610142576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610139906108da565b60405180910390fd5b5f5b825181101561019e57610191838281518110610163576101626108f8565b5b602002602001015183838151811061017e5761017d6108f8565b5b602002602001015161027260201b60201c565b8080600101915050610144565b5050508151600c81905550505050610b3f565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d790610995565b60405180910390fd5b5f8111610322576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610319906109fd565b60405180910390fd5b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054146103a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039890610a8b565b60405180910390fd5b600682908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550806002546104519190610ad6565b6002819055507f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac8282604051610488929190610b18565b60405180910390a15050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6104ce826104a5565b9050919050565b6104de816104c4565b81146104e8575f80fd5b50565b5f815190506104f9816104d5565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61054982610503565b810181811067ffffffffffffffff8211171561056857610567610513565b5b80604052505050565b5f61057a610494565b90506105868282610540565b919050565b5f67ffffffffffffffff8211156105a5576105a4610513565b5b602082029050602081019050919050565b5f80fd5b5f6105cc6105c78461058b565b610571565b905080838252602082019050602084028301858111156105ef576105ee6105b6565b5b835b81811015610618578061060488826104eb565b8452602084019350506020810190506105f1565b5050509392505050565b5f82601f830112610636576106356104ff565b5b81516106468482602086016105ba565b91505092915050565b5f67ffffffffffffffff82111561066957610668610513565b5b602082029050602081019050919050565b5f819050919050565b61068c8161067a565b8114610696575f80fd5b50565b5f815190506106a781610683565b92915050565b5f6106bf6106ba8461064f565b610571565b905080838252602082019050602084028301858111156106e2576106e16105b6565b5b835b8181101561070b57806106f78882610699565b8452602084019350506020810190506106e4565b5050509392505050565b5f82601f830112610729576107286104ff565b5b81516107398482602086016106ad565b91505092915050565b5f805f606084860312156107595761075861049d565b5b5f610766868287016104eb565b935050602084015167ffffffffffffffff811115610787576107866104a1565b5b61079386828701610622565b925050604084015167ffffffffffffffff8111156107b4576107b36104a1565b5b6107c086828701610715565b9150509250925092565b6107d3816104c4565b82525050565b5f6020820190506107ec5f8301846107ca565b92915050565b5f82825260208201905092915050565b7f5061796d656e7453706c69747465723a2070617965657320616e6420736861725f8201527f6573206c656e677468206d69736d617463680000000000000000000000000000602082015250565b5f61085c6032836107f2565b915061086782610802565b604082019050919050565b5f6020820190508181035f83015261088981610850565b9050919050565b7f5061796d656e7453706c69747465723a206e6f207061796565730000000000005f82015250565b5f6108c4601a836107f2565b91506108cf82610890565b602082019050919050565b5f6020820190508181035f8301526108f1816108b8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f5061796d656e7453706c69747465723a206163636f756e7420697320746865205f8201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b5f61097f602c836107f2565b915061098a82610925565b604082019050919050565b5f6020820190508181035f8301526109ac81610973565b9050919050565b7f5061796d656e7453706c69747465723a207368617265732061726520300000005f82015250565b5f6109e7601d836107f2565b91506109f2826109b3565b602082019050919050565b5f6020820190508181035f830152610a14816109db565b9050919050565b7f5061796d656e7453706c69747465723a206163636f756e7420616c72656164795f8201527f2068617320736861726573000000000000000000000000000000000000000000602082015250565b5f610a75602b836107f2565b9150610a8082610a1b565b604082019050919050565b5f6020820190508181035f830152610aa281610a69565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610ae08261067a565b9150610aeb8361067a565b9250828201905080821115610b0357610b02610aa9565b5b92915050565b610b128161067a565b82525050565b5f604082019050610b2b5f8301856107ca565b610b386020830184610b09565b9392505050565b6120a680610b4c5f395ff3fe608060405260043610610169575f3560e01c80638da5cb5b116100d0578063c45ac05011610089578063e33b7de311610063578063e33b7de314610536578063f2fde38b14610560578063f899e24714610588578063fbb1c9c014610592576101b0565b8063c45ac05014610482578063ce7c2ac2146104be578063d79779b2146104fa576101b0565b80638da5cb5b146103845780639852595c146103ae5780639a97d0fd146103ea578063a2663bd114610414578063a3f8eace1461041e578063b2118a8d1461045a576101b0565b806348b750441161012257806348b75044146102a05780635be7fde8146102c85780637030f4c0146102de578063703e019d14610308578063715018a6146103325780638b83209b14610348576101b0565b806317a8ae3c146101b457806319165587146101de57806339c62859146102065780633a98ef3914610210578063406072a91461023a57806345e541b414610276576101b0565b366101b0577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7706101976105bc565b346040516101a692919061174e565b60405180910390a1005b5f80fd5b3480156101bf575f80fd5b506101c86105c3565b6040516101d5919061182c565b60405180910390f35b3480156101e9575f80fd5b5061020460048036038101906101ff919061188b565b61064e565b005b61020e6107c4565b005b34801561021b575f80fd5b50610224610880565b60405161023191906118b6565b60405180910390f35b348015610245575f80fd5b50610260600480360381019061025b9190611934565b610889565b60405161026d91906118b6565b60405180910390f35b348015610281575f80fd5b5061028a61090b565b60405161029791906118b6565b60405180910390f35b3480156102ab575f80fd5b506102c660048036038101906102c19190611934565b610918565b005b3480156102d3575f80fd5b506102dc610b1e565b005b3480156102e9575f80fd5b506102f2610b53565b6040516102ff919061182c565b60405180910390f35b348015610313575f80fd5b5061031c610bde565b60405161032991906118b6565b60405180910390f35b34801561033d575f80fd5b50610346610beb565b005b348015610353575f80fd5b5061036e6004803603810190610369919061199c565b610bfe565b60405161037b91906119c7565b60405180910390f35b34801561038f575f80fd5b50610398610c42565b6040516103a591906119c7565b60405180910390f35b3480156103b9575f80fd5b506103d460048036038101906103cf91906119e0565b610c69565b6040516103e191906118b6565b60405180910390f35b3480156103f5575f80fd5b506103fe610caf565b60405161040b91906118b6565b60405180910390f35b61041c610cbb565b005b348015610429575f80fd5b50610444600480360381019061043f91906119e0565b610d78565b60405161045191906118b6565b60405180910390f35b348015610465575f80fd5b50610480600480360381019061047b9190611a0b565b610daa565b005b34801561048d575f80fd5b506104a860048036038101906104a39190611934565b610e33565b6040516104b591906118b6565b60405180910390f35b3480156104c9575f80fd5b506104e460048036038101906104df91906119e0565b610edf565b6040516104f191906118b6565b60405180910390f35b348015610505575f80fd5b50610520600480360381019061051b9190611a5b565b610f25565b60405161052d91906118b6565b60405180910390f35b348015610541575f80fd5b5061054a610f6b565b60405161055791906118b6565b60405180910390f35b34801561056b575f80fd5b50610586600480360381019061058191906119e0565b610f74565b005b610590610ff8565b005b34801561059d575f80fd5b506105a66110b5565b6040516105b3919061182c565b60405180910390f35b5f33905090565b6060600980548060200260200160405190810160405280929190818152602001828054801561064457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116105fb575b5050505050905090565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054116106cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c490611b06565b60405180910390fd5b5f6106d782610d78565b90505f810361071b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071290611b94565b60405180910390fd5b8060035f82825461072c9190611bdf565b925050819055508060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055506107878282611140565b7fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b05682826040516107b8929190611c6d565b60405180910390a15050565b6107cc611229565b673a4965bf58a400003414610816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080d90611cde565b60405180910390fd5b600933908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061087e611278565b565b5f600254905090565b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b680246ddf9797668000081565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098e90611b06565b60405180910390fd5b5f6109a28383610e33565b90505f81036109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dd90611b94565b60405180910390fd5b8060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610a329190611bdf565b925050819055508060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550610ac9838383611281565b8273ffffffffffffffffffffffffffffffffffffffff167f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a8383604051610b1192919061174e565b60405180910390a2505050565b610b26611300565b5f5b600c54811015610b5057610b43610b3e82610bfe565b61064e565b8080600101915050610b28565b50565b6060600b805480602002602001604051908101604052809291908181526020018280548015610bd457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610b8b575b5050505050905090565b6816c4abbebea010000081565b610bf3611300565b610bfc5f611387565b565b5f60068281548110610c1357610c12611cfc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b673a4965bf58a4000081565b610cc3611229565b6816c4abbebea01000003414610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0590611d73565b60405180910390fd5b600b33908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d76611278565b565b5f80610d82610f6b565b47610d8d9190611bdf565b9050610da28382610d9d86610c69565b611448565b915050919050565b610db2611300565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610ded92919061174e565b6020604051808303815f875af1158015610e09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2d9190611dc6565b50505050565b5f80610e3e84610f25565b8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e7791906119c7565b602060405180830381865afa158015610e92573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb69190611e05565b610ec09190611bdf565b9050610ed68382610ed18787610889565b611448565b91505092915050565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f600354905090565b610f7c611300565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fec575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610fe391906119c7565b60405180910390fd5b610ff581611387565b50565b611000611229565b680246ddf97976680000341461104b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104290611e7a565b60405180910390fd5b600a33908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506110b3611278565b565b6060600a80548060200260200160405190810160405280929190818152602001828054801561113657602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116110ed575b5050505050905090565b8047101561118557306040517fcd78605900000000000000000000000000000000000000000000000000000000815260040161117c91906119c7565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040516111aa90611ec5565b5f6040518083038185875af1925050503d805f81146111e4576040519150601f19603f3d011682016040523d82523d5f602084013e6111e9565b606091505b5050905080611224576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60026001540361126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590611f23565b60405180910390fd5b6002600181905550565b60018081905550565b6112fb838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016112b492919061174e565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506114b3565b505050565b6113086105bc565b73ffffffffffffffffffffffffffffffffffffffff16611326610c42565b73ffffffffffffffffffffffffffffffffffffffff1614611385576113496105bc565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161137c91906119c7565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8160025460045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054856114969190611f41565b6114a09190611faf565b6114aa9190611fdf565b90509392505050565b5f6114dd828473ffffffffffffffffffffffffffffffffffffffff1661154890919063ffffffff16565b90505f8151141580156115015750808060200190518101906114ff9190611dc6565b155b1561154357826040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161153a91906119c7565b60405180910390fd5b505050565b606061155583835f61155d565b905092915050565b6060814710156115a457306040517fcd78605900000000000000000000000000000000000000000000000000000000815260040161159b91906119c7565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff1684866040516115cc919061205a565b5f6040518083038185875af1925050503d805f8114611606576040519150601f19603f3d011682016040523d82523d5f602084013e61160b565b606091505b509150915061161b868383611626565b925050509392505050565b60608261163b57611636826116b3565b6116ab565b5f825114801561166157505f8473ffffffffffffffffffffffffffffffffffffffff163b145b156116a357836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161169a91906119c7565b60405180910390fd5b8190506116ac565b5b9392505050565b5f815111156116c55780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611720826116f7565b9050919050565b61173081611716565b82525050565b5f819050919050565b61174881611736565b82525050565b5f6040820190506117615f830185611727565b61176e602083018461173f565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6117a781611716565b82525050565b5f6117b8838361179e565b60208301905092915050565b5f602082019050919050565b5f6117da82611775565b6117e4818561177f565b93506117ef8361178f565b805f5b8381101561181f57815161180688826117ad565b9750611811836117c4565b9250506001810190506117f2565b5085935050505092915050565b5f6020820190508181035f83015261184481846117d0565b905092915050565b5f80fd5b5f61185a826116f7565b9050919050565b61186a81611850565b8114611874575f80fd5b50565b5f8135905061188581611861565b92915050565b5f602082840312156118a05761189f61184c565b5b5f6118ad84828501611877565b91505092915050565b5f6020820190506118c95f83018461173f565b92915050565b5f6118d982611716565b9050919050565b6118e9816118cf565b81146118f3575f80fd5b50565b5f81359050611904816118e0565b92915050565b61191381611716565b811461191d575f80fd5b50565b5f8135905061192e8161190a565b92915050565b5f806040838503121561194a5761194961184c565b5b5f611957858286016118f6565b925050602061196885828601611920565b9150509250929050565b61197b81611736565b8114611985575f80fd5b50565b5f8135905061199681611972565b92915050565b5f602082840312156119b1576119b061184c565b5b5f6119be84828501611988565b91505092915050565b5f6020820190506119da5f830184611727565b92915050565b5f602082840312156119f5576119f461184c565b5b5f611a0284828501611920565b91505092915050565b5f805f60608486031215611a2257611a2161184c565b5b5f611a2f868287016118f6565b9350506020611a4086828701611920565b9250506040611a5186828701611988565b9150509250925092565b5f60208284031215611a7057611a6f61184c565b5b5f611a7d848285016118f6565b91505092915050565b5f82825260208201905092915050565b7f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f205f8201527f7368617265730000000000000000000000000000000000000000000000000000602082015250565b5f611af0602683611a86565b9150611afb82611a96565b604082019050919050565b5f6020820190508181035f830152611b1d81611ae4565b9050919050565b7f5061796d656e7453706c69747465723a206163636f756e74206973206e6f74205f8201527f647565207061796d656e74000000000000000000000000000000000000000000602082015250565b5f611b7e602b83611a86565b9150611b8982611b24565b604082019050919050565b5f6020820190508181035f830152611bab81611b72565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611be982611736565b9150611bf483611736565b9250828201905080821115611c0c57611c0b611bb2565b5b92915050565b5f819050919050565b5f611c35611c30611c2b846116f7565b611c12565b6116f7565b9050919050565b5f611c4682611c1b565b9050919050565b5f611c5782611c3c565b9050919050565b611c6781611c4d565b82525050565b5f604082019050611c805f830185611c5e565b611c8d602083018461173f565b9392505050565b7f4d7573742073656e642065786163746c7920342e3220415045000000000000005f82015250565b5f611cc8601983611a86565b9150611cd382611c94565b602082019050919050565b5f6020820190508181035f830152611cf581611cbc565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4d7573742073656e642065786163746c792034323020415045000000000000005f82015250565b5f611d5d601983611a86565b9150611d6882611d29565b602082019050919050565b5f6020820190508181035f830152611d8a81611d51565b9050919050565b5f8115159050919050565b611da581611d91565b8114611daf575f80fd5b50565b5f81519050611dc081611d9c565b92915050565b5f60208284031215611ddb57611dda61184c565b5b5f611de884828501611db2565b91505092915050565b5f81519050611dff81611972565b92915050565b5f60208284031215611e1a57611e1961184c565b5b5f611e2784828501611df1565b91505092915050565b7f4d7573742073656e642065786163746c792034322041504500000000000000005f82015250565b5f611e64601883611a86565b9150611e6f82611e30565b602082019050919050565b5f6020820190508181035f830152611e9181611e58565b9050919050565b5f81905092915050565b50565b5f611eb05f83611e98565b9150611ebb82611ea2565b5f82019050919050565b5f611ecf82611ea5565b9150819050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f611f0d601f83611a86565b9150611f1882611ed9565b602082019050919050565b5f6020820190508181035f830152611f3a81611f01565b9050919050565b5f611f4b82611736565b9150611f5683611736565b9250828202611f6481611736565b91508282048414831517611f7b57611f7a611bb2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611fb982611736565b9150611fc483611736565b925082611fd457611fd3611f82565b5b828204905092915050565b5f611fe982611736565b9150611ff483611736565b925082820390508181111561200c5761200b611bb2565b5b92915050565b5f81519050919050565b8281835e5f83830152505050565b5f61203482612012565b61203e8185611e98565b935061204e81856020860161201c565b80840191505092915050565b5f612065828461202a565b91508190509291505056fea2646970667358221220252a5c4c785eb6083bbd6530f34dc5ec4237ac236415b15241c860e6caba25cd64736f6c634300081a00330000000000000000000000003303c4350259c2b8f3c560b2ec70ad3ed87a5e72000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000003303c4350259c2b8f3c560b2ec70ad3ed87a5e7200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000064
Deployed Bytecode
0x608060405260043610610169575f3560e01c80638da5cb5b116100d0578063c45ac05011610089578063e33b7de311610063578063e33b7de314610536578063f2fde38b14610560578063f899e24714610588578063fbb1c9c014610592576101b0565b8063c45ac05014610482578063ce7c2ac2146104be578063d79779b2146104fa576101b0565b80638da5cb5b146103845780639852595c146103ae5780639a97d0fd146103ea578063a2663bd114610414578063a3f8eace1461041e578063b2118a8d1461045a576101b0565b806348b750441161012257806348b75044146102a05780635be7fde8146102c85780637030f4c0146102de578063703e019d14610308578063715018a6146103325780638b83209b14610348576101b0565b806317a8ae3c146101b457806319165587146101de57806339c62859146102065780633a98ef3914610210578063406072a91461023a57806345e541b414610276576101b0565b366101b0577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7706101976105bc565b346040516101a692919061174e565b60405180910390a1005b5f80fd5b3480156101bf575f80fd5b506101c86105c3565b6040516101d5919061182c565b60405180910390f35b3480156101e9575f80fd5b5061020460048036038101906101ff919061188b565b61064e565b005b61020e6107c4565b005b34801561021b575f80fd5b50610224610880565b60405161023191906118b6565b60405180910390f35b348015610245575f80fd5b50610260600480360381019061025b9190611934565b610889565b60405161026d91906118b6565b60405180910390f35b348015610281575f80fd5b5061028a61090b565b60405161029791906118b6565b60405180910390f35b3480156102ab575f80fd5b506102c660048036038101906102c19190611934565b610918565b005b3480156102d3575f80fd5b506102dc610b1e565b005b3480156102e9575f80fd5b506102f2610b53565b6040516102ff919061182c565b60405180910390f35b348015610313575f80fd5b5061031c610bde565b60405161032991906118b6565b60405180910390f35b34801561033d575f80fd5b50610346610beb565b005b348015610353575f80fd5b5061036e6004803603810190610369919061199c565b610bfe565b60405161037b91906119c7565b60405180910390f35b34801561038f575f80fd5b50610398610c42565b6040516103a591906119c7565b60405180910390f35b3480156103b9575f80fd5b506103d460048036038101906103cf91906119e0565b610c69565b6040516103e191906118b6565b60405180910390f35b3480156103f5575f80fd5b506103fe610caf565b60405161040b91906118b6565b60405180910390f35b61041c610cbb565b005b348015610429575f80fd5b50610444600480360381019061043f91906119e0565b610d78565b60405161045191906118b6565b60405180910390f35b348015610465575f80fd5b50610480600480360381019061047b9190611a0b565b610daa565b005b34801561048d575f80fd5b506104a860048036038101906104a39190611934565b610e33565b6040516104b591906118b6565b60405180910390f35b3480156104c9575f80fd5b506104e460048036038101906104df91906119e0565b610edf565b6040516104f191906118b6565b60405180910390f35b348015610505575f80fd5b50610520600480360381019061051b9190611a5b565b610f25565b60405161052d91906118b6565b60405180910390f35b348015610541575f80fd5b5061054a610f6b565b60405161055791906118b6565b60405180910390f35b34801561056b575f80fd5b50610586600480360381019061058191906119e0565b610f74565b005b610590610ff8565b005b34801561059d575f80fd5b506105a66110b5565b6040516105b3919061182c565b60405180910390f35b5f33905090565b6060600980548060200260200160405190810160405280929190818152602001828054801561064457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116105fb575b5050505050905090565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054116106cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c490611b06565b60405180910390fd5b5f6106d782610d78565b90505f810361071b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071290611b94565b60405180910390fd5b8060035f82825461072c9190611bdf565b925050819055508060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055506107878282611140565b7fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b05682826040516107b8929190611c6d565b60405180910390a15050565b6107cc611229565b673a4965bf58a400003414610816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080d90611cde565b60405180910390fd5b600933908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061087e611278565b565b5f600254905090565b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b680246ddf9797668000081565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098e90611b06565b60405180910390fd5b5f6109a28383610e33565b90505f81036109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dd90611b94565b60405180910390fd5b8060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610a329190611bdf565b925050819055508060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550610ac9838383611281565b8273ffffffffffffffffffffffffffffffffffffffff167f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a8383604051610b1192919061174e565b60405180910390a2505050565b610b26611300565b5f5b600c54811015610b5057610b43610b3e82610bfe565b61064e565b8080600101915050610b28565b50565b6060600b805480602002602001604051908101604052809291908181526020018280548015610bd457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610b8b575b5050505050905090565b6816c4abbebea010000081565b610bf3611300565b610bfc5f611387565b565b5f60068281548110610c1357610c12611cfc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b673a4965bf58a4000081565b610cc3611229565b6816c4abbebea01000003414610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0590611d73565b60405180910390fd5b600b33908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d76611278565b565b5f80610d82610f6b565b47610d8d9190611bdf565b9050610da28382610d9d86610c69565b611448565b915050919050565b610db2611300565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610ded92919061174e565b6020604051808303815f875af1158015610e09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2d9190611dc6565b50505050565b5f80610e3e84610f25565b8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e7791906119c7565b602060405180830381865afa158015610e92573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb69190611e05565b610ec09190611bdf565b9050610ed68382610ed18787610889565b611448565b91505092915050565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f600354905090565b610f7c611300565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fec575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610fe391906119c7565b60405180910390fd5b610ff581611387565b50565b611000611229565b680246ddf97976680000341461104b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104290611e7a565b60405180910390fd5b600a33908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506110b3611278565b565b6060600a80548060200260200160405190810160405280929190818152602001828054801561113657602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116110ed575b5050505050905090565b8047101561118557306040517fcd78605900000000000000000000000000000000000000000000000000000000815260040161117c91906119c7565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040516111aa90611ec5565b5f6040518083038185875af1925050503d805f81146111e4576040519150601f19603f3d011682016040523d82523d5f602084013e6111e9565b606091505b5050905080611224576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60026001540361126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590611f23565b60405180910390fd5b6002600181905550565b60018081905550565b6112fb838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016112b492919061174e565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506114b3565b505050565b6113086105bc565b73ffffffffffffffffffffffffffffffffffffffff16611326610c42565b73ffffffffffffffffffffffffffffffffffffffff1614611385576113496105bc565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161137c91906119c7565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8160025460045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054856114969190611f41565b6114a09190611faf565b6114aa9190611fdf565b90509392505050565b5f6114dd828473ffffffffffffffffffffffffffffffffffffffff1661154890919063ffffffff16565b90505f8151141580156115015750808060200190518101906114ff9190611dc6565b155b1561154357826040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161153a91906119c7565b60405180910390fd5b505050565b606061155583835f61155d565b905092915050565b6060814710156115a457306040517fcd78605900000000000000000000000000000000000000000000000000000000815260040161159b91906119c7565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff1684866040516115cc919061205a565b5f6040518083038185875af1925050503d805f8114611606576040519150601f19603f3d011682016040523d82523d5f602084013e61160b565b606091505b509150915061161b868383611626565b925050509392505050565b60608261163b57611636826116b3565b6116ab565b5f825114801561166157505f8473ffffffffffffffffffffffffffffffffffffffff163b145b156116a357836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161169a91906119c7565b60405180910390fd5b8190506116ac565b5b9392505050565b5f815111156116c55780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611720826116f7565b9050919050565b61173081611716565b82525050565b5f819050919050565b61174881611736565b82525050565b5f6040820190506117615f830185611727565b61176e602083018461173f565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6117a781611716565b82525050565b5f6117b8838361179e565b60208301905092915050565b5f602082019050919050565b5f6117da82611775565b6117e4818561177f565b93506117ef8361178f565b805f5b8381101561181f57815161180688826117ad565b9750611811836117c4565b9250506001810190506117f2565b5085935050505092915050565b5f6020820190508181035f83015261184481846117d0565b905092915050565b5f80fd5b5f61185a826116f7565b9050919050565b61186a81611850565b8114611874575f80fd5b50565b5f8135905061188581611861565b92915050565b5f602082840312156118a05761189f61184c565b5b5f6118ad84828501611877565b91505092915050565b5f6020820190506118c95f83018461173f565b92915050565b5f6118d982611716565b9050919050565b6118e9816118cf565b81146118f3575f80fd5b50565b5f81359050611904816118e0565b92915050565b61191381611716565b811461191d575f80fd5b50565b5f8135905061192e8161190a565b92915050565b5f806040838503121561194a5761194961184c565b5b5f611957858286016118f6565b925050602061196885828601611920565b9150509250929050565b61197b81611736565b8114611985575f80fd5b50565b5f8135905061199681611972565b92915050565b5f602082840312156119b1576119b061184c565b5b5f6119be84828501611988565b91505092915050565b5f6020820190506119da5f830184611727565b92915050565b5f602082840312156119f5576119f461184c565b5b5f611a0284828501611920565b91505092915050565b5f805f60608486031215611a2257611a2161184c565b5b5f611a2f868287016118f6565b9350506020611a4086828701611920565b9250506040611a5186828701611988565b9150509250925092565b5f60208284031215611a7057611a6f61184c565b5b5f611a7d848285016118f6565b91505092915050565b5f82825260208201905092915050565b7f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f205f8201527f7368617265730000000000000000000000000000000000000000000000000000602082015250565b5f611af0602683611a86565b9150611afb82611a96565b604082019050919050565b5f6020820190508181035f830152611b1d81611ae4565b9050919050565b7f5061796d656e7453706c69747465723a206163636f756e74206973206e6f74205f8201527f647565207061796d656e74000000000000000000000000000000000000000000602082015250565b5f611b7e602b83611a86565b9150611b8982611b24565b604082019050919050565b5f6020820190508181035f830152611bab81611b72565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611be982611736565b9150611bf483611736565b9250828201905080821115611c0c57611c0b611bb2565b5b92915050565b5f819050919050565b5f611c35611c30611c2b846116f7565b611c12565b6116f7565b9050919050565b5f611c4682611c1b565b9050919050565b5f611c5782611c3c565b9050919050565b611c6781611c4d565b82525050565b5f604082019050611c805f830185611c5e565b611c8d602083018461173f565b9392505050565b7f4d7573742073656e642065786163746c7920342e3220415045000000000000005f82015250565b5f611cc8601983611a86565b9150611cd382611c94565b602082019050919050565b5f6020820190508181035f830152611cf581611cbc565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4d7573742073656e642065786163746c792034323020415045000000000000005f82015250565b5f611d5d601983611a86565b9150611d6882611d29565b602082019050919050565b5f6020820190508181035f830152611d8a81611d51565b9050919050565b5f8115159050919050565b611da581611d91565b8114611daf575f80fd5b50565b5f81519050611dc081611d9c565b92915050565b5f60208284031215611ddb57611dda61184c565b5b5f611de884828501611db2565b91505092915050565b5f81519050611dff81611972565b92915050565b5f60208284031215611e1a57611e1961184c565b5b5f611e2784828501611df1565b91505092915050565b7f4d7573742073656e642065786163746c792034322041504500000000000000005f82015250565b5f611e64601883611a86565b9150611e6f82611e30565b602082019050919050565b5f6020820190508181035f830152611e9181611e58565b9050919050565b5f81905092915050565b50565b5f611eb05f83611e98565b9150611ebb82611ea2565b5f82019050919050565b5f611ecf82611ea5565b9150819050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f611f0d601f83611a86565b9150611f1882611ed9565b602082019050919050565b5f6020820190508181035f830152611f3a81611f01565b9050919050565b5f611f4b82611736565b9150611f5683611736565b9250828202611f6481611736565b91508282048414831517611f7b57611f7a611bb2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611fb982611736565b9150611fc483611736565b925082611fd457611fd3611f82565b5b828204905092915050565b5f611fe982611736565b9150611ff483611736565b925082820390508181111561200c5761200b611bb2565b5b92915050565b5f81519050919050565b8281835e5f83830152505050565b5f61203482612012565b61203e8185611e98565b935061204e81856020860161201c565b80840191505092915050565b5f612065828461202a565b91508190509291505056fea2646970667358221220252a5c4c785eb6083bbd6530f34dc5ec4237ac236415b15241c860e6caba25cd64736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003303c4350259c2b8f3c560b2ec70ad3ed87a5e72000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000003303c4350259c2b8f3c560b2ec70ad3ed87a5e7200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000064
-----Decoded View---------------
Arg [0] : _initialOwner (address): 0x3303C4350259C2B8F3C560B2ec70aD3ed87A5E72
Arg [1] : _payees (address[]): 0x3303C4350259C2B8F3C560B2ec70aD3ed87A5E72
Arg [2] : _shares (uint256[]): 100
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000003303c4350259c2b8f3c560b2ec70ad3ed87a5e72
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [4] : 0000000000000000000000003303c4350259c2b8f3c560b2ec70ad3ed87a5e72
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000064
Deployed Bytecode Sourcemap
35172:2855:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29746:40;29762:12;:10;:12::i;:::-;29776:9;29746:40;;;;;;;:::i;:::-;;;;;;;;35172:2855;;;;;36818:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32267:671;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35928:168;;;:::i;:::-;;29877:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31006:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35302:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33206:792;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37629:153;;;;;;;;;;;;;:::i;:::-;;37155:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35359:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3254:103;;;;;;;;;;;;;:::i;:::-;;31232:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2579:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30728:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35245:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36392:168;;;:::i;:::-;;31422:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37897:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31807:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30524:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30314:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30062:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3512:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36160:167;;;:::i;:::-;;36986:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;695:98;748:7;775:10;768:17;;695:98;:::o;36818:96::-;36863:16;36899:7;36892:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36818:96;:::o;32267:671::-;32362:1;32343:7;:16;32351:7;32343:16;;;;;;;;;;;;;;;;:20;32335:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32419:15;32437:19;32448:7;32437:10;:19::i;:::-;32419:37;;32488:1;32477:7;:12;32469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32750:7;32732:14;;:25;;;;;;;:::i;:::-;;;;;;;;32815:7;32793:9;:18;32803:7;32793:18;;;;;;;;;;;;;;;;:29;;;;;;;;;;;32846:35;32864:7;32873;32846:17;:35::i;:::-;32897:33;32913:7;32922;32897:33;;;;;;;:::i;:::-;;;;;;;;32324:614;32267:671;:::o;35928:168::-;6435:21;:19;:21::i;:::-;35286:9:::1;35996;:27;35988:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36064:7;36077:10;36064:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6479:20:::0;:18;:20::i;:::-;35928:168::o;29877:91::-;29921:7;29948:12;;29941:19;;29877:91;:::o;31006:135::-;31076:7;31103:14;:21;31118:5;31103:21;;;;;;;;;;;;;;;:30;31125:7;31103:30;;;;;;;;;;;;;;;;31096:37;;31006:135;;;;:::o;35302:50::-;35344:8;35302:50;:::o;33206:792::-;33307:1;33288:7;:16;33296:7;33288:16;;;;;;;;;;;;;;;;:20;33280:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33364:15;33382:26;33393:5;33400:7;33382:10;:26::i;:::-;33364:44;;33440:1;33429:7;:12;33421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33774:7;33744:19;:26;33764:5;33744:26;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;33851:7;33817:14;:21;33832:5;33817:21;;;;;;;;;;;;;;;:30;33839:7;33817:30;;;;;;;;;;;;;;;;:41;;;;;;;;;;;33882:47;33905:5;33912:7;33921;33882:22;:47::i;:::-;33966:5;33945:45;;;33973:7;33982;33945:45;;;;;;;:::i;:::-;;;;;;;;33269:729;33206:792;;:::o;37629:153::-;2465:13;:11;:13::i;:::-;37686:9:::1;37681:94;37705:10;;37701:1;:14;37681:94;;;37737:26;37753:8;37759:1;37753:5;:8::i;:::-;37737:7;:26::i;:::-;37717:3;;;;;;;37681:94;;;;37629:153::o:0;37155:96::-;37200:16;37236:7;37229:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37155:96;:::o;35359:50::-;35400:9;35359:50;:::o;3254:103::-;2465:13;:11;:13::i;:::-;3319:30:::1;3346:1;3319:18;:30::i;:::-;3254:103::o:0;31232:100::-;31283:7;31310;31318:5;31310:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31303:21;;31232:100;;;:::o;2579:87::-;2625:7;2652:6;;;;;;;;;;;2645:13;;2579:87;:::o;30728:109::-;30784:7;30811:9;:18;30821:7;30811:18;;;;;;;;;;;;;;;;30804:25;;30728:109;;;:::o;35245:50::-;35286:9;35245:50;:::o;36392:168::-;6435:21;:19;:21::i;:::-;35400:9:::1;36460;:27;36452:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36528:7;36541:10;36528:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6479:20:::0;:18;:20::i;:::-;36392:168::o;31422:225::-;31480:7;31500:21;31548:15;:13;:15::i;:::-;31524:21;:39;;;;:::i;:::-;31500:63;;31581:58;31597:7;31606:13;31621:17;31630:7;31621:8;:17::i;:::-;31581:15;:58::i;:::-;31574:65;;;31422:225;;;:::o;37897:127::-;2465:13;:11;:13::i;:::-;37990:5:::1;:14;;;38005:2;38009:6;37990:26;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37897:127:::0;;;:::o;31807:260::-;31879:7;31899:21;31956:20;31970:5;31956:13;:20::i;:::-;31923:5;:15;;;31947:4;31923:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;;:::i;:::-;31899:77;;31994:65;32010:7;32019:13;32034:24;32043:5;32050:7;32034:8;:24::i;:::-;31994:15;:65::i;:::-;31987:72;;;31807:260;;;;:::o;30524:105::-;30578:7;30605;:16;30613:7;30605:16;;;;;;;;;;;;;;;;30598:23;;30524:105;;;:::o;30314:119::-;30372:7;30399:19;:26;30419:5;30399:26;;;;;;;;;;;;;;;;30392:33;;30314:119;;;:::o;30062:95::-;30108:7;30135:14;;30128:21;;30062:95;:::o;3512:220::-;2465:13;:11;:13::i;:::-;3617:1:::1;3597:22;;:8;:22;;::::0;3593:93:::1;;3671:1;3643:31;;;;;;;;;;;:::i;:::-;;;;;;;;3593:93;3696:28;3715:8;3696:18;:28::i;:::-;3512:220:::0;:::o;36160:167::-;6435:21;:19;:21::i;:::-;35344:8:::1;36228:9;:27;36220:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36295:7;36308:10;36295:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6479:20:::0;:18;:20::i;:::-;36160:167::o;36986:96::-;37031:16;37067:7;37060:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36986:96;:::o;15752:340::-;15862:6;15838:21;:30;15834:111;;;15927:4;15892:41;;;;;;;;;;;:::i;:::-;;;;;;;;15834:111;15958:12;15976:9;:14;;15998:6;15976:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15957:52;;;16025:7;16020:65;;16056:17;;;;;;;;;;;;;;16020:65;15823:269;15752:340;;:::o;6515:293::-;5917:1;6649:7;;:19;6641:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;5917:1;6782:7;:18;;;;6515:293::o;6816:213::-;5873:1;6999:7;:22;;;;6816:213::o;21829:162::-;21912:71;21932:5;21954;:14;;;21971:2;21975:5;21939:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21912:19;:71::i;:::-;21829:162;;;:::o;2744:166::-;2815:12;:10;:12::i;:::-;2804:23;;:7;:5;:7::i;:::-;:23;;;2800:103;;2878:12;:10;:12::i;:::-;2851:40;;;;;;;;;;;:::i;:::-;;;;;;;;2800:103;2744:166::o;3892:191::-;3966:16;3985:6;;;;;;;;;;;3966:25;;4011:8;4002:6;;:17;;;;;;;;;;;;;;;;;;4066:8;4035:40;;4056:8;4035:40;;;;;;;;;;;;3955:128;3892:191;:::o;34176:248::-;34322:7;34401:15;34386:12;;34366:7;:16;34374:7;34366:16;;;;;;;;;;;;;;;;34350:13;:32;;;;:::i;:::-;34349:49;;;;:::i;:::-;:67;;;;:::i;:::-;34342:74;;34176:248;;;;;:::o;24640:638::-;25064:23;25090:33;25118:4;25098:5;25090:27;;;;:33;;;;:::i;:::-;25064:59;;25159:1;25138:10;:17;:22;;:57;;;;;25176:10;25165:30;;;;;;;;;;;;:::i;:::-;25164:31;25138:57;25134:137;;;25252:5;25219:40;;;;;;;;;;;:::i;:::-;;;;;;;;25134:137;24710:568;24640:638;;:::o;16955:153::-;17030:12;17062:38;17084:6;17092:4;17098:1;17062:21;:38::i;:::-;17055:45;;16955:153;;;;:::o;17443:398::-;17542:12;17595:5;17571:21;:29;17567:110;;;17659:4;17624:41;;;;;;;;;;;:::i;:::-;;;;;;;;17567:110;17688:12;17702:23;17729:6;:11;;17748:5;17755:4;17729:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17687:73;;;;17778:55;17805:6;17813:7;17822:10;17778:26;:55::i;:::-;17771:62;;;;17443:398;;;;;:::o;18919:597::-;19067:12;19097:7;19092:417;;19121:19;19129:10;19121:7;:19::i;:::-;19092:417;;;19370:1;19349:10;:17;:22;:49;;;;;19397:1;19375:6;:18;;;:23;19349:49;19345:121;;;19443:6;19426:24;;;;;;;;;;;:::i;:::-;;;;;;;;19345:121;19487:10;19480:17;;;;19092:417;18919:597;;;;;;:::o;20069:528::-;20222:1;20202:10;:17;:21;20198:392;;;20434:10;20428:17;20491:15;20478:10;20474:2;20470:19;20463:44;20198:392;20561:17;;;;;;;;;;;;;;7:126:1;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:77::-;402:7;431:5;420:16;;365:77;;;:::o;448:118::-;535:24;553:5;535:24;:::i;:::-;530:3;523:37;448:118;;:::o;572:332::-;693:4;731:2;720:9;716:18;708:26;;744:71;812:1;801:9;797:17;788:6;744:71;:::i;:::-;825:72;893:2;882:9;878:18;869:6;825:72;:::i;:::-;572:332;;;;;:::o;910:114::-;977:6;1011:5;1005:12;995:22;;910:114;;;:::o;1030:184::-;1129:11;1163:6;1158:3;1151:19;1203:4;1198:3;1194:14;1179:29;;1030:184;;;;:::o;1220:132::-;1287:4;1310:3;1302:11;;1340:4;1335:3;1331:14;1323:22;;1220:132;;;:::o;1358:108::-;1435:24;1453:5;1435:24;:::i;:::-;1430:3;1423:37;1358:108;;:::o;1472:179::-;1541:10;1562:46;1604:3;1596:6;1562:46;:::i;:::-;1640:4;1635:3;1631:14;1617:28;;1472:179;;;;:::o;1657:113::-;1727:4;1759;1754:3;1750:14;1742:22;;1657:113;;;:::o;1806:732::-;1925:3;1954:54;2002:5;1954:54;:::i;:::-;2024:86;2103:6;2098:3;2024:86;:::i;:::-;2017:93;;2134:56;2184:5;2134:56;:::i;:::-;2213:7;2244:1;2229:284;2254:6;2251:1;2248:13;2229:284;;;2330:6;2324:13;2357:63;2416:3;2401:13;2357:63;:::i;:::-;2350:70;;2443:60;2496:6;2443:60;:::i;:::-;2433:70;;2289:224;2276:1;2273;2269:9;2264:14;;2229:284;;;2233:14;2529:3;2522:10;;1930:608;;;1806:732;;;;:::o;2544:373::-;2687:4;2725:2;2714:9;2710:18;2702:26;;2774:9;2768:4;2764:20;2760:1;2749:9;2745:17;2738:47;2802:108;2905:4;2896:6;2802:108;:::i;:::-;2794:116;;2544:373;;;;:::o;3004:117::-;3113:1;3110;3103:12;3250:104;3295:7;3324:24;3342:5;3324:24;:::i;:::-;3313:35;;3250:104;;;:::o;3360:138::-;3441:32;3467:5;3441:32;:::i;:::-;3434:5;3431:43;3421:71;;3488:1;3485;3478:12;3421:71;3360:138;:::o;3504:155::-;3558:5;3596:6;3583:20;3574:29;;3612:41;3647:5;3612:41;:::i;:::-;3504:155;;;;:::o;3665:345::-;3732:6;3781:2;3769:9;3760:7;3756:23;3752:32;3749:119;;;3787:79;;:::i;:::-;3749:119;3907:1;3932:61;3985:7;3976:6;3965:9;3961:22;3932:61;:::i;:::-;3922:71;;3878:125;3665:345;;;;:::o;4016:222::-;4109:4;4147:2;4136:9;4132:18;4124:26;;4160:71;4228:1;4217:9;4213:17;4204:6;4160:71;:::i;:::-;4016:222;;;;:::o;4244:110::-;4295:7;4324:24;4342:5;4324:24;:::i;:::-;4313:35;;4244:110;;;:::o;4360:150::-;4447:38;4479:5;4447:38;:::i;:::-;4440:5;4437:49;4427:77;;4500:1;4497;4490:12;4427:77;4360:150;:::o;4516:167::-;4576:5;4614:6;4601:20;4592:29;;4630:47;4671:5;4630:47;:::i;:::-;4516:167;;;;:::o;4689:122::-;4762:24;4780:5;4762:24;:::i;:::-;4755:5;4752:35;4742:63;;4801:1;4798;4791:12;4742:63;4689:122;:::o;4817:139::-;4863:5;4901:6;4888:20;4879:29;;4917:33;4944:5;4917:33;:::i;:::-;4817:139;;;;:::o;4962:502::-;5044:6;5052;5101:2;5089:9;5080:7;5076:23;5072:32;5069:119;;;5107:79;;:::i;:::-;5069:119;5227:1;5252:67;5311:7;5302:6;5291:9;5287:22;5252:67;:::i;:::-;5242:77;;5198:131;5368:2;5394:53;5439:7;5430:6;5419:9;5415:22;5394:53;:::i;:::-;5384:63;;5339:118;4962:502;;;;;:::o;5470:122::-;5543:24;5561:5;5543:24;:::i;:::-;5536:5;5533:35;5523:63;;5582:1;5579;5572:12;5523:63;5470:122;:::o;5598:139::-;5644:5;5682:6;5669:20;5660:29;;5698:33;5725:5;5698:33;:::i;:::-;5598:139;;;;:::o;5743:329::-;5802:6;5851:2;5839:9;5830:7;5826:23;5822:32;5819:119;;;5857:79;;:::i;:::-;5819:119;5977:1;6002:53;6047:7;6038:6;6027:9;6023:22;6002:53;:::i;:::-;5992:63;;5948:117;5743:329;;;;:::o;6078:222::-;6171:4;6209:2;6198:9;6194:18;6186:26;;6222:71;6290:1;6279:9;6275:17;6266:6;6222:71;:::i;:::-;6078:222;;;;:::o;6306:329::-;6365:6;6414:2;6402:9;6393:7;6389:23;6385:32;6382:119;;;6420:79;;:::i;:::-;6382:119;6540:1;6565:53;6610:7;6601:6;6590:9;6586:22;6565:53;:::i;:::-;6555:63;;6511:117;6306:329;;;;:::o;6641:647::-;6732:6;6740;6748;6797:2;6785:9;6776:7;6772:23;6768:32;6765:119;;;6803:79;;:::i;:::-;6765:119;6923:1;6948:67;7007:7;6998:6;6987:9;6983:22;6948:67;:::i;:::-;6938:77;;6894:131;7064:2;7090:53;7135:7;7126:6;7115:9;7111:22;7090:53;:::i;:::-;7080:63;;7035:118;7192:2;7218:53;7263:7;7254:6;7243:9;7239:22;7218:53;:::i;:::-;7208:63;;7163:118;6641:647;;;;;:::o;7294:357::-;7367:6;7416:2;7404:9;7395:7;7391:23;7387:32;7384:119;;;7422:79;;:::i;:::-;7384:119;7542:1;7567:67;7626:7;7617:6;7606:9;7602:22;7567:67;:::i;:::-;7557:77;;7513:131;7294:357;;;;:::o;7657:169::-;7741:11;7775:6;7770:3;7763:19;7815:4;7810:3;7806:14;7791:29;;7657:169;;;;:::o;7832:225::-;7972:34;7968:1;7960:6;7956:14;7949:58;8041:8;8036:2;8028:6;8024:15;8017:33;7832:225;:::o;8063:366::-;8205:3;8226:67;8290:2;8285:3;8226:67;:::i;:::-;8219:74;;8302:93;8391:3;8302:93;:::i;:::-;8420:2;8415:3;8411:12;8404:19;;8063:366;;;:::o;8435:419::-;8601:4;8639:2;8628:9;8624:18;8616:26;;8688:9;8682:4;8678:20;8674:1;8663:9;8659:17;8652:47;8716:131;8842:4;8716:131;:::i;:::-;8708:139;;8435:419;;;:::o;8860:230::-;9000:34;8996:1;8988:6;8984:14;8977:58;9069:13;9064:2;9056:6;9052:15;9045:38;8860:230;:::o;9096:366::-;9238:3;9259:67;9323:2;9318:3;9259:67;:::i;:::-;9252:74;;9335:93;9424:3;9335:93;:::i;:::-;9453:2;9448:3;9444:12;9437:19;;9096:366;;;:::o;9468:419::-;9634:4;9672:2;9661:9;9657:18;9649:26;;9721:9;9715:4;9711:20;9707:1;9696:9;9692:17;9685:47;9749:131;9875:4;9749:131;:::i;:::-;9741:139;;9468:419;;;:::o;9893:180::-;9941:77;9938:1;9931:88;10038:4;10035:1;10028:15;10062:4;10059:1;10052:15;10079:191;10119:3;10138:20;10156:1;10138:20;:::i;:::-;10133:25;;10172:20;10190:1;10172:20;:::i;:::-;10167:25;;10215:1;10212;10208:9;10201:16;;10236:3;10233:1;10230:10;10227:36;;;10243:18;;:::i;:::-;10227:36;10079:191;;;;:::o;10276:60::-;10304:3;10325:5;10318:12;;10276:60;;;:::o;10342:142::-;10392:9;10425:53;10443:34;10452:24;10470:5;10452:24;:::i;:::-;10443:34;:::i;:::-;10425:53;:::i;:::-;10412:66;;10342:142;;;:::o;10490:126::-;10540:9;10573:37;10604:5;10573:37;:::i;:::-;10560:50;;10490:126;;;:::o;10622:134::-;10680:9;10713:37;10744:5;10713:37;:::i;:::-;10700:50;;10622:134;;;:::o;10762:147::-;10857:45;10896:5;10857:45;:::i;:::-;10852:3;10845:58;10762:147;;:::o;10915:348::-;11044:4;11082:2;11071:9;11067:18;11059:26;;11095:79;11171:1;11160:9;11156:17;11147:6;11095:79;:::i;:::-;11184:72;11252:2;11241:9;11237:18;11228:6;11184:72;:::i;:::-;10915:348;;;;;:::o;11269:175::-;11409:27;11405:1;11397:6;11393:14;11386:51;11269:175;:::o;11450:366::-;11592:3;11613:67;11677:2;11672:3;11613:67;:::i;:::-;11606:74;;11689:93;11778:3;11689:93;:::i;:::-;11807:2;11802:3;11798:12;11791:19;;11450:366;;;:::o;11822:419::-;11988:4;12026:2;12015:9;12011:18;12003:26;;12075:9;12069:4;12065:20;12061:1;12050:9;12046:17;12039:47;12103:131;12229:4;12103:131;:::i;:::-;12095:139;;11822:419;;;:::o;12247:180::-;12295:77;12292:1;12285:88;12392:4;12389:1;12382:15;12416:4;12413:1;12406:15;12433:175;12573:27;12569:1;12561:6;12557:14;12550:51;12433:175;:::o;12614:366::-;12756:3;12777:67;12841:2;12836:3;12777:67;:::i;:::-;12770:74;;12853:93;12942:3;12853:93;:::i;:::-;12971:2;12966:3;12962:12;12955:19;;12614:366;;;:::o;12986:419::-;13152:4;13190:2;13179:9;13175:18;13167:26;;13239:9;13233:4;13229:20;13225:1;13214:9;13210:17;13203:47;13267:131;13393:4;13267:131;:::i;:::-;13259:139;;12986:419;;;:::o;13411:90::-;13445:7;13488:5;13481:13;13474:21;13463:32;;13411:90;;;:::o;13507:116::-;13577:21;13592:5;13577:21;:::i;:::-;13570:5;13567:32;13557:60;;13613:1;13610;13603:12;13557:60;13507:116;:::o;13629:137::-;13683:5;13714:6;13708:13;13699:22;;13730:30;13754:5;13730:30;:::i;:::-;13629:137;;;;:::o;13772:345::-;13839:6;13888:2;13876:9;13867:7;13863:23;13859:32;13856:119;;;13894:79;;:::i;:::-;13856:119;14014:1;14039:61;14092:7;14083:6;14072:9;14068:22;14039:61;:::i;:::-;14029:71;;13985:125;13772:345;;;;:::o;14123:143::-;14180:5;14211:6;14205:13;14196:22;;14227:33;14254:5;14227:33;:::i;:::-;14123:143;;;;:::o;14272:351::-;14342:6;14391:2;14379:9;14370:7;14366:23;14362:32;14359:119;;;14397:79;;:::i;:::-;14359:119;14517:1;14542:64;14598:7;14589:6;14578:9;14574:22;14542:64;:::i;:::-;14532:74;;14488:128;14272:351;;;;:::o;14629:174::-;14769:26;14765:1;14757:6;14753:14;14746:50;14629:174;:::o;14809:366::-;14951:3;14972:67;15036:2;15031:3;14972:67;:::i;:::-;14965:74;;15048:93;15137:3;15048:93;:::i;:::-;15166:2;15161:3;15157:12;15150:19;;14809:366;;;:::o;15181:419::-;15347:4;15385:2;15374:9;15370:18;15362:26;;15434:9;15428:4;15424:20;15420:1;15409:9;15405:17;15398:47;15462:131;15588:4;15462:131;:::i;:::-;15454:139;;15181:419;;;:::o;15606:147::-;15707:11;15744:3;15729:18;;15606:147;;;;:::o;15759:114::-;;:::o;15879:398::-;16038:3;16059:83;16140:1;16135:3;16059:83;:::i;:::-;16052:90;;16151:93;16240:3;16151:93;:::i;:::-;16269:1;16264:3;16260:11;16253:18;;15879:398;;;:::o;16283:379::-;16467:3;16489:147;16632:3;16489:147;:::i;:::-;16482:154;;16653:3;16646:10;;16283:379;;;:::o;16668:181::-;16808:33;16804:1;16796:6;16792:14;16785:57;16668:181;:::o;16855:366::-;16997:3;17018:67;17082:2;17077:3;17018:67;:::i;:::-;17011:74;;17094:93;17183:3;17094:93;:::i;:::-;17212:2;17207:3;17203:12;17196:19;;16855:366;;;:::o;17227:419::-;17393:4;17431:2;17420:9;17416:18;17408:26;;17480:9;17474:4;17470:20;17466:1;17455:9;17451:17;17444:47;17508:131;17634:4;17508:131;:::i;:::-;17500:139;;17227:419;;;:::o;17652:410::-;17692:7;17715:20;17733:1;17715:20;:::i;:::-;17710:25;;17749:20;17767:1;17749:20;:::i;:::-;17744:25;;17804:1;17801;17797:9;17826:30;17844:11;17826:30;:::i;:::-;17815:41;;18005:1;17996:7;17992:15;17989:1;17986:22;17966:1;17959:9;17939:83;17916:139;;18035:18;;:::i;:::-;17916:139;17700:362;17652:410;;;;:::o;18068:180::-;18116:77;18113:1;18106:88;18213:4;18210:1;18203:15;18237:4;18234:1;18227:15;18254:185;18294:1;18311:20;18329:1;18311:20;:::i;:::-;18306:25;;18345:20;18363:1;18345:20;:::i;:::-;18340:25;;18384:1;18374:35;;18389:18;;:::i;:::-;18374:35;18431:1;18428;18424:9;18419:14;;18254:185;;;;:::o;18445:194::-;18485:4;18505:20;18523:1;18505:20;:::i;:::-;18500:25;;18539:20;18557:1;18539:20;:::i;:::-;18534:25;;18583:1;18580;18576:9;18568:17;;18607:1;18601:4;18598:11;18595:37;;;18612:18;;:::i;:::-;18595:37;18445:194;;;;:::o;18645:98::-;18696:6;18730:5;18724:12;18714:22;;18645:98;;;:::o;18749:139::-;18838:6;18833:3;18828;18822:23;18879:1;18870:6;18865:3;18861:16;18854:27;18749:139;;;:::o;18894:386::-;18998:3;19026:38;19058:5;19026:38;:::i;:::-;19080:88;19161:6;19156:3;19080:88;:::i;:::-;19073:95;;19177:65;19235:6;19230:3;19223:4;19216:5;19212:16;19177:65;:::i;:::-;19267:6;19262:3;19258:16;19251:23;;19002:278;18894:386;;;;:::o;19286:271::-;19416:3;19438:93;19527:3;19518:6;19438:93;:::i;:::-;19431:100;;19548:3;19541:10;;19286:271;;;;:::o
Swarm Source
ipfs://252a5c4c785eb6083bbd6530f34dc5ec4237ac236415b15241c860e6caba25cd
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
APE | Ape (APE) | 100.00% | $1.24 | 2,095.8 | $2,601.01 |
[ 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.