More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 4,156 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Use Vending Mach... | 5500068 | 8 secs ago | IN | 0 ETH | 0.00001062 | ||||
Use Vending Mach... | 5499781 | 5 mins ago | IN | 0 ETH | 0.00001273 | ||||
Use Vending Mach... | 5499747 | 5 mins ago | IN | 0 ETH | 0.00000824 | ||||
Use Vending Mach... | 5499291 | 13 mins ago | IN | 0 ETH | 0.00003406 | ||||
Use Vending Mach... | 5499221 | 14 mins ago | IN | 0 ETH | 0.00001374 | ||||
Use Vending Mach... | 5499214 | 15 mins ago | IN | 0 ETH | 0.00001333 | ||||
Use Vending Mach... | 5499176 | 15 mins ago | IN | 0 ETH | 0.00000858 | ||||
Use Vending Mach... | 5499169 | 15 mins ago | IN | 0 ETH | 0.00001586 | ||||
Use Vending Mach... | 5499143 | 16 mins ago | IN | 0 ETH | 0.00000858 | ||||
Use Vending Mach... | 5499138 | 16 mins ago | IN | 0 ETH | 0.00001537 | ||||
Use Vending Mach... | 5499109 | 16 mins ago | IN | 0 ETH | 0.00000858 | ||||
Use Vending Mach... | 5499063 | 17 mins ago | IN | 0 ETH | 0.00001563 | ||||
Use Vending Mach... | 5499035 | 18 mins ago | IN | 0 ETH | 0.0000107 | ||||
Use Vending Mach... | 5498221 | 32 mins ago | IN | 0 ETH | 0.000016 | ||||
Use Vending Mach... | 5498197 | 32 mins ago | IN | 0 ETH | 0.00001203 | ||||
Use Vending Mach... | 5498060 | 35 mins ago | IN | 0 ETH | 0.00001385 | ||||
Use Vending Mach... | 5497934 | 37 mins ago | IN | 0 ETH | 0.00001068 | ||||
Use Vending Mach... | 5497933 | 37 mins ago | IN | 0 ETH | 0.00003558 | ||||
Use Vending Mach... | 5497865 | 38 mins ago | IN | 0 ETH | 0.00001167 | ||||
Use Vending Mach... | 5497368 | 47 mins ago | IN | 0 ETH | 0.00001619 | ||||
Use Vending Mach... | 5497339 | 47 mins ago | IN | 0 ETH | 0.00001395 | ||||
Use Vending Mach... | 5497327 | 48 mins ago | IN | 0 ETH | 0.00001067 | ||||
Use Vending Mach... | 5497313 | 48 mins ago | IN | 0 ETH | 0.00000876 | ||||
Use Vending Mach... | 5497307 | 48 mins ago | IN | 0 ETH | 0.00001415 | ||||
Use Vending Mach... | 5497274 | 49 mins ago | IN | 0 ETH | 0.00000876 |
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
4973965 | 6 days ago | Contract Creation | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
Dabble
Compiler Version
v0.8.24+commit.e11b9ed9
ZkSolc Version
v1.5.11
Optimization Enabled:
Yes with Mode 3
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Receiver.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; contract Dabble is Ownable, ERC1155Receiver, ReentrancyGuard { IERC20 public usdc; address public feeRecipient = 0x2f2A13462f6d4aF64954ee84641D265932849b64; address public signerAddress = 0xf156ed63C0b6D07132Fa8704FB09EAa76fF30EE4; mapping(uint256 => VendingMachine) public vendingMachines; mapping(uint256 => VendingMachineItem[]) public vendingMachineItems; mapping(address => VendingState) public vendingStates; mapping(address => uint256) public nonces; mapping(address => mapping(uint256 => bool)) public nonceUsed; uint256 public vendingMachineId = 1; uint256 public fee = 0; struct VendingMachine { address owner; bool isActive; uint256 totalWeight; } struct VendingMachineItem { address contractAddress; uint256 itemId; uint256 quantity; uint256 itemsPerWin; uint256 weight; uint256 buyBackPrice; } struct VendingState { uint256 vendingMachineId; uint256 blockNumber; uint256 cost; uint256 boost; } struct CommitVendingMachineParams { address user; uint256 vendingMachineId; uint256 nonce; uint256 boost; uint256 cost; uint256 fee; bytes signature; bool permissioned; } modifier checkNonce(address user, uint256 nonce) { require(!nonceUsed[user][nonce], "Invalid nonce"); nonceUsed[user][nonce] = true; nonces[user]++; _; } // ------------------------------------------------------ // Vending Machine Creation // ------------------------------------------------------ function createVendingMachine( address _owner, VendingMachineItem[] memory _items ) public onlyOwner { _addItemsToVendingMachine(_owner, vendingMachineId, _items); vendingMachineId++; } function _addItemsToVendingMachine( address _owner, uint256 _vendingMachineId, VendingMachineItem[] memory _items ) internal { vendingMachines[_vendingMachineId] = VendingMachine({ owner: _owner, isActive: true, totalWeight: 0 }); uint256 previousWeight = 0; uint256 totalWeight = 0; for (uint256 i = 0; i < _items.length; i++) { VendingMachineItem memory item = _items[i]; vendingMachineItems[_vendingMachineId].push(item); require(previousWeight <= item.weight, "Weights must be in ascending order"); require(item.quantity > 0, "Quantity must be greater than 0"); require(item.itemsPerWin > 0, "itemsPerWin must be greater than 0"); require(item.quantity % item.itemsPerWin == 0, "Quantity must be divisible by itemsPerWin"); totalWeight += item.weight; previousWeight = item.weight; IERC1155(item.contractAddress).safeTransferFrom( msg.sender, address(this), item.itemId, item.quantity, "" ); } vendingMachines[_vendingMachineId].totalWeight = totalWeight; } // ------------------------------------------------------ // Add Items to Vending Machine // ------------------------------------------------------ function addToVendingMachine(uint256 _vendingMachineId, VendingMachineItem[] memory _items) public onlyOwner { closeVendingMachine(_vendingMachineId, false); _addItemsToVendingMachine(msg.sender, _vendingMachineId, _items); } // ------------------------------------------------------ // Closing Vending Machine // ------------------------------------------------------ function closeVendingMachine(uint256 _vendingMachineId, bool _isActive) public onlyOwner { require(vendingMachines[_vendingMachineId].isActive, "Vending machine is not active"); vendingMachines[_vendingMachineId].isActive = _isActive; for (uint256 i = 0; i < vendingMachineItems[_vendingMachineId].length; i++) { VendingMachineItem memory item = vendingMachineItems[_vendingMachineId][i]; if (item.quantity == 0) continue; IERC1155(item.contractAddress).safeTransferFrom( address(this), vendingMachines[_vendingMachineId].owner, item.itemId, item.quantity, "" ); } delete vendingMachineItems[_vendingMachineId]; } // ------------------------------------------------------ // Commit Phase // ------------------------------------------------------ function useVendingMachineCommit(CommitVendingMachineParams memory _params) public nonReentrant checkNonce(_params.user, _params.nonce) { VendingMachine storage vendingMachine = vendingMachines[_params.vendingMachineId]; require(vendingMachine.isActive, "Vending machine is not active"); require(vendingStates[_params.user].vendingMachineId == 0, "Already committed"); if(!_params.permissioned) { require(msg.sender == _params.user, "Not authorized"); } bytes32 hash = ECDSA.toEthSignedMessageHash( keccak256( abi.encode( _params.user, _params.permissioned, _params.nonce, _params.boost, _params.cost, _params.fee, _params.vendingMachineId ) ) ); require(_verify(hash, _params.signature), "Invalid signature"); if (_params.cost > 0) { require( usdc.transferFrom(_params.user, address(this), _params.cost), "Transfer failed" ); } if (_params.fee > 0) { require( usdc.transferFrom(_params.user, feeRecipient, _params.fee), "Transfer failed" ); } vendingStates[_params.user] = VendingState({ vendingMachineId: _params.vendingMachineId, blockNumber: block.number + 2, cost: _params.cost, boost: _params.boost }); } // ------------------------------------------------------ // getVendingMachineReward // ------------------------------------------------------ function getVendingMachineReward(address _user, bytes32 _blockHash, uint256 rewardNonce) public view returns (uint256) { uint256 _vendingMachineId = vendingStates[_user].vendingMachineId; VendingMachine memory vendingMachine = vendingMachines[_vendingMachineId]; uint256 totalWeight = vendingMachine.totalWeight; if(vendingStates[_user].boost > 0) { totalWeight += vendingStates[_user].boost * vendingMachineItems[_vendingMachineId].length; } uint256 randomNumber = getRandomNumber(totalWeight, _blockHash, rewardNonce); uint256 itemToReceiveId = 0; uint256 cumulativeWeight = 0; uint256 itemsAvailable = 0; for (uint256 i = 0; i < vendingMachineItems[_vendingMachineId].length; i++) { VendingMachineItem memory item = vendingMachineItems[_vendingMachineId][i]; itemsAvailable += item.quantity; } if (itemsAvailable == 0) { return vendingMachineItems[_vendingMachineId].length; } for (uint256 i = 0; i < vendingMachineItems[_vendingMachineId].length; i++) { VendingMachineItem memory item = vendingMachineItems[_vendingMachineId][i]; cumulativeWeight += (item.weight + vendingStates[_user].boost); if (randomNumber < cumulativeWeight) { itemToReceiveId = i; break; } } for (uint256 i = itemToReceiveId; i < vendingMachineItems[_vendingMachineId].length; i++) { VendingMachineItem memory item = vendingMachineItems[_vendingMachineId][i]; if (item.quantity >= item.itemsPerWin) { itemToReceiveId = i; break; } itemToReceiveId = i + 1; } uint256 length_ = vendingMachineItems[_vendingMachineId].length; if (itemToReceiveId >= length_) { return length_; } return itemToReceiveId; } // ------------------------------------------------------ // Finalize Phase // ------------------------------------------------------ function useVendingMachineFinalize( address _user, uint256 _nonce, bytes32 _blockHash, bytes memory _signature, bool _buyBack, bool _permissioned, bool _buyBackOverride, uint256 rewardNonce ) public nonReentrant checkNonce(_user, _nonce) { require(vendingStates[_user].vendingMachineId != 0, "Not committed"); uint256 _vendingMachineId = vendingStates[_user].vendingMachineId; if (!_permissioned) { require(msg.sender == _user, "Not authorized"); } require(block.number > vendingStates[_user].blockNumber, "Not enough blocks passed"); bytes32 hash = ECDSA.toEthSignedMessageHash( keccak256( abi.encode( _user, _nonce, _blockHash, _vendingMachineId, _buyBack, _permissioned, _buyBackOverride, rewardNonce ) ) ); require(_verify(hash, _signature), "Invalid signature"); uint256 itemToReceiveId = getVendingMachineReward(_user, _blockHash, rewardNonce); _useVendingMachineFinalize(_user, itemToReceiveId, _buyBack, _vendingMachineId, _buyBackOverride); } function _useVendingMachineFinalize( address _user, uint256 _itemToReceiveId, bool _buyBack, uint256 _vendingMachineId, bool _buyBackOverride ) internal { uint256 _cost = vendingStates[_user].cost; vendingStates[_user] = VendingState({ vendingMachineId: 0, blockNumber: 0, cost: 0, boost: 0 }); if (_buyBackOverride) { return; } if (_itemToReceiveId == vendingMachineItems[_vendingMachineId].length) { if (_cost > 0) { IERC20(usdc).transfer(_user, _cost); } return; } VendingMachineItem storage itemToReceive = vendingMachineItems[_vendingMachineId][_itemToReceiveId]; if (_buyBack) { if (itemToReceive.buyBackPrice > 0) { IERC20(usdc).transfer(_user, itemToReceive.buyBackPrice); } return; } if (_cost > 0) { IERC20(usdc).transfer(owner(), _cost); } itemToReceive.quantity -= itemToReceive.itemsPerWin; IERC1155(itemToReceive.contractAddress).safeTransferFrom( address(this), _user, itemToReceive.itemId, itemToReceive.itemsPerWin, "" ); } function getItemsLeftInVendingMachine(uint256 _vendingMachineId) public view returns (uint256) { uint256 itemsAvailable = 0; for (uint256 i = 0; i < vendingMachineItems[_vendingMachineId].length; i++) { VendingMachineItem memory item = vendingMachineItems[_vendingMachineId][i]; itemsAvailable += item.quantity; } return itemsAvailable; } // ------------------------------------------------------ // Signature Verification & Helpers // ------------------------------------------------------ function setSigner(address _newSigner) public onlyOwner { signerAddress = _newSigner; } function _verify(bytes32 hash, bytes memory signature) internal view returns (bool) { address recovered = ECDSA.recover(hash, signature); return recovered == signerAddress; } function getVendingMachineItem(uint256 _vendingMachineId, uint256 index) public view returns ( address contractAddress, uint256 itemId, uint256 quantity, uint256 itemsPerWin, uint256 weight, uint256 buyBackPrice ) { VendingMachineItem memory item = vendingMachineItems[_vendingMachineId][index]; return ( item.contractAddress, item.itemId, item.quantity, item.itemsPerWin, item.weight, item.buyBackPrice ); } // ------------------------------------------------------ // ERC1155Receiver Implementation // ------------------------------------------------------ function onERC1155Received( address, address, uint256, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] memory, uint256[] memory, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId; } // ------------------------------------------------------ // Admin Functions // ------------------------------------------------------ function setUSDC(address _usdc) external onlyOwner { usdc = IERC20(_usdc); } function setFee(uint256 _fee) external onlyOwner { fee = _fee; } function withdraw() external onlyOwner { IERC20(usdc).transfer(owner(), IERC20(usdc).balanceOf(address(this))); } function getRandomNumber(uint256 totalWeight, bytes32 _blockHash, uint256 rewardNonce) public pure returns (uint256) { bytes32 blockHash = keccak256(abi.encodePacked(_blockHash, rewardNonce)); return uint256(blockHash) % totalWeight; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @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 amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @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 { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; import "../Strings.sol"; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV // Deprecated in v4.8 } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. /// @solidity memory-safe-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/utils/ERC1155Receiver.sol) pragma solidity ^0.8.0; import "../IERC1155Receiver.sol"; import "../../../utils/introspection/ERC165.sol"; /** * @dev _Available since v3.1._ */ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol) pragma solidity ^0.8.0; import "./math/Math.sol"; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv( uint256 x, uint256 y, uint256 denominator, Rounding rounding ) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10**64) { value /= 10**64; result += 64; } if (value >= 10**32) { value /= 10**32; result += 32; } if (value >= 10**16) { value /= 10**16; result += 16; } if (value >= 10**8) { value /= 10**8; result += 8; } if (value >= 10**4) { value /= 10**4; result += 4; } if (value >= 10**2) { value /= 10**2; result += 2; } if (value >= 10**1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0); } } }
{ "optimizer": { "enabled": true, "mode": "3" }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "abi" ] } }, "detectMissingLibraries": false, "forceEVMLA": false, "enableEraVMExtensions": true, "codegen": "evmla", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"_vendingMachineId","type":"uint256"},{"components":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"itemsPerWin","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"uint256","name":"buyBackPrice","type":"uint256"}],"internalType":"struct Dabble.VendingMachineItem[]","name":"_items","type":"tuple[]"}],"name":"addToVendingMachine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_vendingMachineId","type":"uint256"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"closeVendingMachine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"components":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"itemsPerWin","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"uint256","name":"buyBackPrice","type":"uint256"}],"internalType":"struct Dabble.VendingMachineItem[]","name":"_items","type":"tuple[]"}],"name":"createVendingMachine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_vendingMachineId","type":"uint256"}],"name":"getItemsLeftInVendingMachine","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalWeight","type":"uint256"},{"internalType":"bytes32","name":"_blockHash","type":"bytes32"},{"internalType":"uint256","name":"rewardNonce","type":"uint256"}],"name":"getRandomNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_vendingMachineId","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getVendingMachineItem","outputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"itemsPerWin","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"uint256","name":"buyBackPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bytes32","name":"_blockHash","type":"bytes32"},{"internalType":"uint256","name":"rewardNonce","type":"uint256"}],"name":"getVendingMachineReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"nonceUsed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newSigner","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_usdc","type":"address"}],"name":"setUSDC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdc","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"vendingMachineId","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"boost","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bool","name":"permissioned","type":"bool"}],"internalType":"struct Dabble.CommitVendingMachineParams","name":"_params","type":"tuple"}],"name":"useVendingMachineCommit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"bytes32","name":"_blockHash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"bool","name":"_buyBack","type":"bool"},{"internalType":"bool","name":"_permissioned","type":"bool"},{"internalType":"bool","name":"_buyBackOverride","type":"bool"},{"internalType":"uint256","name":"rewardNonce","type":"uint256"}],"name":"useVendingMachineFinalize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vendingMachineId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"vendingMachineItems","outputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"itemsPerWin","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"uint256","name":"buyBackPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"vendingMachines","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"uint256","name":"totalWeight","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vendingStates","outputs":[{"internalType":"uint256","name":"vendingMachineId","type":"uint256"},{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"boost","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
9c4d535b0000000000000000000000000000000000000000000000000000000000000000010004ada9552565caabf61aa94c07e3af2aaeb25ca0ee462b35828ee2bb53c700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x0001000000000002000a00000000000200000000000103550000008003000039000000400030043f0000000100200190000000630000c13d000000000901034f00000060011002700000042e02100197000000040020008c00000bef0000413d000000000109043b000000e001100270000004360010009c0000008c0000a13d000004370010009c000001710000a13d000004380010009c000001860000213d0000043e0010009c000002a20000213d000004410010009c000004560000613d000004420010009c00000bef0000c13d000000240020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000101043b000800000001001d000900000000001d000a00000000001d0000000801000029000000000010043f0000000601000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000201041a0000000a0020006b000005420000813d000000000010043f00000000010004140000042e0010009c0000042e01008041000000c0011002100000046d011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000400200043d000004630020009c000004e50000213d000000000101043b000000c003200039000000400030043f0000000a0600002900000006036000c90000000001310019000000000301041a000004300330019700000000033204360000000104100039000000000404041a00000000004304350000000203100039000000000303041a000000400420003900000000003404350000000304100039000000000404041a000000600520003900000000004504350000000404100039000000000404041a000000800520003900000000004504350000000501100039000000a002200039000000000101041a0000000000120435000a00010060003d000000090030002a000900090030002d000002f10000413d000000240000013d0000000001000416000000000001004b00000bef0000c13d000000000100041a0000042f021001970000000006000411000000000262019f000000000020041b000000000200041400000430051001970000042e0020009c0000042e02008041000000c00120021000000431011001c70000800d020000390000000303000039000004320400004110b510ab0000040f000000010020019000000bef0000613d0000000101000039000000000011041b0000000303000039000000000203041a0000042f0220019700000433022001c7000000000023041b0000000402000039000000000302041a0000042f0330019700000434033001c7000000000032041b0000000a02000039000000000012041b0000000b01000039000000000001041b0000002001000039000001000010044300000120000004430000043501000041000010b60001042e0000044c0010009c000001590000213d000004560010009c000001a80000a13d000004570010009c000001f80000213d0000045a0010009c000003240000613d0000045b0010009c00000bef0000c13d000001040020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000101043b000a00000001001d000004300010009c00000bef0000213d0000006401900370000000000301043b0000045f0030009c00000bef0000213d0000002301300039000000000021004b00000bef0000813d0000000404300039000000000149034f000000000101043b000004850010009c000004e50000813d0000001f0610003900000496066001970000003f066000390000049606600197000004610060009c000004e50000213d0000008006600039000000400060043f000000800010043f00000000031300190000002403300039000000000023004b00000bef0000213d0000002002400039000000000329034f00000496041001980000001f0510018f000000a002400039000000c50000613d000000a006000039000000000703034f000000007807043c0000000006860436000000000026004b000000c10000c13d000000000005004b000000d20000613d000000000343034f0000000304500210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000320435000000a00110003900000000000104350000008401900370000000000101043b000000000001004b0000000002000039000000010200c039000000000021004b00000bef0000c13d000000a401900370000000000201043b000000000002004b0000000001000039000000010100c039000900000002001d000000000012004b00000bef0000c13d000000c401900370000000000101043b000000000001004b0000000002000039000000010200c039000000000021004b00000bef0000c13d0000000101000039000000000101041a000000020010008c000004c50000613d00000002020000390000000101000039000000000021041b0000000a01000029000000000010043f0000000901000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b00000024020000390000000002200367000000000202043b000000000020043f000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000101041a000000ff001001900000087d0000c13d0000000a01000029000000000010043f0000000901000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b00000024020000390000000002200367000000000202043b000000000020043f000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000201041a000004970220019700000001022001bf000000000021041b0000000a01000029000000000010043f0000000801000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000201041a000000010220003a000002f10000613d000000000021041b0000000a01000029000000000010043f0000000701000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000101041a000000000001004b000008cb0000c13d000000400100043d00000044021000390000048f03000041000008800000013d0000044d0010009c000001cd0000a13d0000044e0010009c000002010000213d000004510010009c000003980000613d000004520010009c00000bef0000c13d000000240020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000101043b000004300010009c00000bef0000213d000000000010043f0000000801000039000000200010043f0000004002000039000000000100001910b510960000040f000004ef0000013d000004430010009c000001e50000a13d000004440010009c000002370000213d000004470010009c000003dd0000613d000004480010009c00000bef0000c13d000000240020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000101043b000a00000001001d000004300010009c00000bef0000213d10b50ea20000040f0000000201000039000001df0000013d000004390010009c000002bb0000213d0000043c0010009c000004cc0000613d0000043d0010009c00000bef0000c13d000000240020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000601043b000004300060009c00000bef0000213d000000000100041a00000430021001970000000005000411000000000052004b0000051b0000c13d000000000006004b0000060f0000c13d0000046501000041000000800010043f0000002001000039000000840010043f0000002601000039000000a40010043f0000046601000041000000c40010043f0000046701000041000000e40010043f0000046801000041000010b7000104300000045c0010009c000004250000613d0000045d0010009c000003fe0000613d0000045e0010009c00000bef0000c13d000000440020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000101043b000004300010009c00000bef0000213d000000000010043f0000000901000039000000200010043f00000040020000390000000001000019000a00000009035310b510960000040f0000000a0200035f0000002402200370000000000202043b000000000020043f000000200010043f0000000001000019000000400200003910b510960000040f000000000101041a000000ff001001900000000001000039000000010100c039000000800010043f0000047501000041000010b60001042e000004530010009c000004340000613d000004540010009c000004130000613d000004550010009c00000bef0000c13d000000240020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000101043b000a00000001001d000004300010009c00000bef0000213d10b50ea20000040f0000000401000039000000000201041a0000042f022001970000000a022001af000000000021041b0000000001000019000010b60001042e000004490010009c0000043d0000613d0000044a0010009c000004200000613d0000044b0010009c00000bef0000c13d000000640020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000101043b0000002402900370000000000202043b0000004403900370000000000303043b10b50e700000040f0000040c0000013d000004580010009c000003b00000613d000004590010009c00000bef0000c13d0000000001000416000000000001004b00000bef0000c13d0000000301000039000004380000013d0000044f0010009c000003b50000613d000004500010009c00000bef0000c13d000000440020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000101043b000800000001001d0000002401900370000000000201043b000000000002004b0000000001000039000000010100c039000a00000002001d000000000012004b00000bef0000c13d000000000100041a00000430011001970000000002000411000000000021004b0000051b0000c13d0000000801000029000000000010043f0000000501000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000101041a0000046b001001980000062a0000c13d000000400100043d00000044021000390000048403000041000000000032043500000024021000390000001d03000039000000000032043500000465020000410000000000210435000000040210003900000020030000390000070b0000013d000004450010009c000003f90000613d000004460010009c00000bef0000c13d000000a40020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000101043b000004300010009c00000bef0000213d0000002401900370000000000101043b000004300010009c00000bef0000213d0000004401900370000000000101043b0000045f0010009c00000bef0000213d0000002303100039000000000023004b00000bef0000813d0000000403100039000000000339034f000000000403043b0000045f0040009c000004e50000213d00000005034002100000003f053000390000046005500197000004610050009c000004e50000213d0000008005500039000000400050043f000000800040043f00000024011000390000000003130019000000000023004b00000bef0000213d000000000004004b0000026a0000613d0000008004000039000000000519034f000000000505043b000000200440003900000000005404350000002001100039000000000031004b000002630000413d0000006401900370000000000101043b0000045f0010009c00000bef0000213d0000002303100039000000000023004b00000000040000190000047f040080410000047f03300197000000000003004b00000000050000190000047f050040410000047f0030009c000000000504c019000000000005004b00000bef0000c13d0000000403100039000000000339034f000000000403043b0000045f0040009c000004e50000213d00000005054002100000003f035000390000046006300197000000400300043d0000000006630019000000000036004b000000000700003900000001070040390000045f0060009c000004e50000213d0000000100700190000004e50000c13d000000400060043f000000000043043500000024011000390000000005150019000000000025004b00000bef0000213d000000000004004b0000029a0000613d000000000419034f000000000404043b000000200330003900000000004304350000002001100039000000000051004b000002930000413d0000008401900370000000000101043b0000045f0010009c00000bef0000213d000000040110003910b50c270000040f00000480010000410000040c0000013d0000043f0010009c000004eb0000613d000004400010009c00000bef0000c13d000000a40020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000101043b000004300010009c00000bef0000213d0000002401900370000000000101043b000004300010009c00000bef0000213d0000008401900370000000000101043b0000045f0010009c00000bef0000213d000000040110003910b50c270000040f00000473010000410000040c0000013d0000043a0010009c000004f30000613d0000043b0010009c00000bef0000c13d000000440020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000101043b000004300010009c00000bef0000213d0000002404900370000000000404043b0000045f0040009c00000bef0000213d0000002305400039000000000025004b00000bef0000813d0000000405400039000000000559034f000000000605043b0000045f0060009c000004e50000213d00000005056002100000003f055000390000046005500197000004610050009c000004e50000213d0000008005500039000000400050043f000000800060043f0000002404400039000000c0056000c90000000005450019000000000025004b00000bef0000213d000000000006004b000002f70000c13d000000000200041a00000430022001970000000003000411000000000032004b000007010000c13d0000000a02000039000000000202041a000000800300003910b50f500000040f0000000a010000390000000002010019000000000101041a000000010110003a0000041d0000c13d0000048a01000041000000000010043f0000001101000039000000040010043f0000048b01000041000010b7000104300000000006420049000004620060009c00000bef0000213d000000c00060008c00000bef0000413d000000400600043d000004630060009c000004e50000213d000000c007600039000000400070043f000000000749034f000000000707043b000004300070009c00000bef0000213d000000200330003900000000077604360000002008400039000000000889034f000000000808043b00000000008704350000004007400039000000000779034f000000000707043b000000400860003900000000007804350000006007400039000000000779034f000000000707043b000000600860003900000000007804350000008007400039000000000779034f000000000707043b00000080086000390000000000780435000000a007400039000000000779034f000000000707043b000000a00860003900000000007804350000000000630435000000c004400039000000000054004b000002f70000413d000002e30000013d0000000001000416000000000001004b00000bef0000c13d000000000100041a00000430011001970000000002000411000000000021004b0000051b0000c13d0000000201000039000000000101041a0000049202000041000000800020043f0000000002000410000000840020043f000000000300041400000430021001970000042e0030009c0000042e03008041000000c00130021000000493011001c7000900000002001d10b510b00000040f00000060031002700000042e03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000003490000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000003450000c13d000000000006004b000003560000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000005240000613d0000001f01400039000000600110018f00000080021001bf000a00000002001d000000400020043f000000200030008c00000bef0000413d000000800200043d0000048c030000410000000a05000029000000000035043500000084031001bf00000000040004110000000000430435000000a401100039000000000021043500000000010004140000042e0010009c0000042e01008041000000c0011002100000004002500210000000000121019f0000048d011001c7000000090200002910b510ab0000040f00000060031002700000042e03300197000000200030008c000000200a000039000000000a0340190000001f05a0018f0000002006a001900000000a04600029000003800000613d000000000701034f0000000a08000029000000007907043c0000000008980436000000000048004b0000037c0000c13d000000000005004b0000038d0000613d000000000661034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f000000000054043500000001002001900000061e0000613d0000000a0100002900000000020a001900090000000a001d10b50c150000040f0000000a01000029000000090210002910b50e620000040f0000000001000019000010b60001042e0000000001000416000000000001004b00000bef0000c13d000000000100041a00000430021001970000000005000411000000000052004b0000051b0000c13d0000042f01100197000000000010041b00000000010004140000042e0010009c0000042e01008041000000c00110021000000431011001c70000800d0200003900000003030000390000043204000041000000000600001910b510ab0000040f000000010020019000000bef0000613d0000000001000019000010b60001042e0000000001000416000000000001004b00000bef0000c13d0000000201000039000004380000013d0000000001000416000000000001004b00000bef0000c13d000000000102001910b50c700000040f000a00000002001d000000000010043f0000000601000039000000200010043f0000004002000039000000000100001910b510960000040f0000000a0200002910b50c8a0000040f10b50ca60000040f00000020021000390000000003020433000000400210003900000000040204330000006002100039000000000502043300000080021000390000000006020433000000a00210003900000000070204330000000002010433000000400100043d000a00000001001d000004300220019710b50c7c0000040f0000000a0200002900000000012100490000042e0010009c0000042e010080410000042e0020009c0000042e0200804100000060011002100000004002200210000000000121019f000010b60001042e000000240020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000101043b000004300010009c00000bef0000213d000000000010043f0000000701000039000000200010043f0000004002000039000000000100001910b510960000040f0000000302100039000000000202041a0000000203100039000000000303041a0000000104100039000000000404041a000000000101041a000000800010043f000000a00040043f000000c00030043f000000e00020043f0000048101000041000010b60001042e0000000001000416000000000001004b00000bef0000c13d0000000a01000039000004ef0000013d000000640020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000101043b000004300010009c00000bef0000213d0000002402900370000000000202043b0000004403900370000000000303043b10b50cc90000040f000000400200043d00000000001204350000042e0020009c0000042e02008041000000400120021000000474011001c7000010b60001042e000000240020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d10b50ea20000040f00000004010000390000000001100367000000000101043b0000000b02000039000000000012041b0000000001000019000010b60001042e0000000001000416000000000001004b00000bef0000c13d000000000100041a000004390000013d000000240020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000101043b000004940010019800000bef0000c13d000004950010009c00000000010000390000000101006039000000800010043f0000047501000041000010b60001042e0000000001000416000000000001004b00000bef0000c13d0000000401000039000000000101041a0000043001100197000000800010043f0000047501000041000010b60001042e000000240020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000101043b000000000010043f0000000501000039000000200010043f0000004002000039000000000100001910b510960000040f0000000102100039000000000202041a000000000101041a0000043003100197000000800030043f0000046b001001980000000001000039000000010100c039000000a00010043f000000c00020043f0000048201000041000010b60001042e000000240020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000401043b0000045f0040009c00000bef0000213d0000000001420049000004620010009c00000bef0000213d000001040010008c00000bef0000413d0000018001000039000000400010043f0000000403400039000000000539034f000000000505043b000004300050009c00000bef0000213d000000800050043f0000002005300039000000000559034f000000000505043b000000a00050043f0000004005300039000000000559034f000000000505043b000000c00050043f0000006005300039000000000559034f000000000505043b000000e00050043f0000008005300039000000000559034f000000000505043b000001000050043f000000a005300039000000000559034f000000000505043b000001200050043f000000c003300039000000000539034f000000000505043b0000045f0050009c00000bef0000213d00000000054500190000002304500039000000000024004b00000bef0000813d0000000406500039000000000469034f000000000404043b0000045f0040009c000004e50000213d0000001f0840003900000496088001970000003f088000390000049608800197000004760080009c000004e50000213d0000018008800039000000400080043f000001800040043f00000000054500190000002405500039000000000025004b00000bef0000213d0000002002600039000000000b09034f000000000529034f00000496064001980000001f0740018f000001a002600039000004a80000613d000001a008000039000000000905034f000000009a09043c0000000008a80436000000000028004b000004a40000c13d000000000007004b000004b50000613d000000000565034f0000000306700210000000000702043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f0000000000520435000001a0024000390000000000020435000001400010043f000000200130003900000000011b034f000000000101043b000000000001004b0000000002000039000000010200c039000000000021004b00000bef0000c13d000001600010043f0000000101000039000000000101041a000000020010008c000007610000c13d000000400100043d00000044021000390000049003000041000000000032043500000024021000390000001f03000039000002310000013d000000440020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000000401900370000000000101043b000800000001001d0000002401900370000000000101043b0000045f0010009c00000bef0000213d0000002303100039000000000023004b00000bef0000813d0000000403100039000000000339034f000000000403043b0000045f0040009c000004e50000213d00000005034002100000003f033000390000046003300197000004610030009c0000054a0000a13d0000048a01000041000000000010043f0000004101000039000000040010043f0000048b01000041000010b7000104300000000001000416000000000001004b00000bef0000c13d0000000b01000039000000000101041a000000800010043f0000047501000041000010b60001042e000000440020008c00000bef0000413d0000000001000416000000000001004b00000bef0000c13d0000002401900370000000000101043b000a00000001001d0000000401900370000000000101043b000000000010043f0000000601000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000201041a0000000a0020006b00000bef0000813d0000000a0200002910b50c8a0000040f0000000102100039000000000302041a0000000202100039000000000402041a0000000302100039000000000502041a0000000402100039000000000602041a0000000502100039000000000702041a000000000201041a000003cf0000013d0000046501000041000000800010043f0000002001000039000000840010043f000000a40010043f0000046901000041000000c40010043f0000049101000041000010b7000104300000001f0530018f0000047206300198000000400200043d00000000046200190000052f0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000052b0000c13d000000000005004b0000053c0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060013002100000042e0020009c0000042e020080410000004002200210000000000112019f000010b700010430000000400100043d000000090200002900000000002104350000042e0010009c0000042e01008041000000400110021000000474011001c7000010b60001042e0000008003300039000000400030043f000000800040043f0000002401100039000000c0034000c90000000003130019000000000023004b00000bef0000213d000000000004004b000006d30000c13d000000000100041a00000430011001970000000002000411000000000021004b000007010000c13d0000000801000029000000000010043f0000000501000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000101041a0000046b001001980000022b0000613d0000000801000029000000000010043f0000000501000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000201041a0000046c02200197000000000021041b0000000001000410000404300010019b000a00000000001d000005810000013d0000000a01000029000a00010010003d0000000801000029000000000010043f0000000601000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000201041a0000000a0020006b000008840000813d000000000010043f00000000010004140000042e0010009c0000042e01008041000000c0011002100000046d011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000400200043d000004630020009c000004e50000213d000000000101043b000000c003200039000000400030043f0000000a0300002900000006033000c90000000001310019000000000301041a0000043003300197000900000003001d00000000063204360000000103100039000000000303041a00000000003604350000000203100039000000000303041a000000400720003900000000003704350000000304100039000000000404041a000000600520003900000000004504350000000404100039000000000404041a000000800520003900000000004504350000000501100039000000a002200039000000000101041a0000000000120435000000000003004b0000057f0000613d000600000007001d000700000006001d0000000801000029000000000010043f0000000501000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d00000006020000290000000002020433000600000002001d00000007020000290000000002020433000700000002001d000000000101043b000000000101041a000500000001001d0000046e0100004100000000001004430000000901000029000000040010044300000000010004140000042e0010009c0000042e01008041000000c0011002100000046f011001c7000080020200003910b510b00000040f000000010020019000000b4a0000613d000000000101043b000000000001004b00000bef0000613d00000005010000290000043001100197000000400400043d0000008402400039000000a00300003900000000003204350000006402400039000000060300002900000000003204350000004402400039000000070300002900000000003204350000002402400039000000000012043500000470010000410000000000140435000000040140003900000004020000290000000000210435000000a40140003900000000000104350000042e0040009c000700000004001d0000042e010000410000000001044019000000400110021000000000020004140000042e0020009c0000042e02008041000000c002200210000000000112019f00000471011001c7000000090200002910b510ab0000040f00000001002001900000089c0000613d00000007010000290000045f0010009c000004e50000213d000000400010043f0000057f0000013d0000042f01100197000000000161019f000000000010041b00000000010004140000042e0010009c0000042e01008041000000c00110021000000431011001c70000800d020000390000000303000039000004320400004110b510ab0000040f0000000100200190000003ae0000c13d00000bef0000013d0000001f0530018f0000047206300198000000400200043d00000000046200190000052f0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000006250000c13d0000052f0000013d0000000801000029000000000010043f0000000501000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d0000000a0000006b00000483020000410000000002006019000000000101043b000000000301041a0000046c03300197000000000223019f000000000021041b0000000001000410000404300010019b000a00000000001d000006450000013d0000000a01000029000a00010010003d0000000801000029000000000010043f0000000601000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000201041a0000000a0020006b000007110000813d000000000010043f00000000010004140000042e0010009c0000042e01008041000000c0011002100000046d011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000400200043d000004630020009c000004e50000213d000000000101043b000000c003200039000000400030043f0000000a0300002900000006033000c90000000001310019000000000301041a0000043003300197000900000003001d00000000063204360000000103100039000000000303041a00000000003604350000000203100039000000000303041a000000400720003900000000003704350000000304100039000000000404041a000000600520003900000000004504350000000404100039000000000404041a000000800520003900000000004504350000000501100039000000a002200039000000000101041a0000000000120435000000000003004b000006430000613d000600000007001d000700000006001d0000000801000029000000000010043f0000000501000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d00000006020000290000000002020433000600000002001d00000007020000290000000002020433000700000002001d000000000101043b000000000101041a000500000001001d0000046e0100004100000000001004430000000901000029000000040010044300000000010004140000042e0010009c0000042e01008041000000c0011002100000046f011001c7000080020200003910b510b00000040f000000010020019000000b4a0000613d000000000101043b000000000001004b00000bef0000613d00000005010000290000043001100197000000400400043d0000008402400039000000a00300003900000000003204350000006402400039000000060300002900000000003204350000004402400039000000070300002900000000003204350000002402400039000000000012043500000470010000410000000000140435000000040140003900000004020000290000000000210435000000a40140003900000000000104350000042e0040009c000700000004001d0000042e010000410000000001044019000000400110021000000000020004140000042e0020009c0000042e02008041000000c002200210000000000112019f00000471011001c7000000090200002910b510ab0000040f0000000100200190000007450000613d00000007010000290000045f0010009c000004e50000213d000000400010043f000006430000013d00000080040000390000000005120049000004620050009c00000bef0000213d000000c00050008c00000bef0000413d000000400500043d000004630050009c000004e50000213d000000c006500039000000400060043f000000000619034f000000000606043b000004300060009c00000bef0000213d000000200440003900000000066504360000002007100039000000000779034f000000000707043b00000000007604350000004006100039000000000669034f000000000606043b000000400750003900000000006704350000006006100039000000000669034f000000000606043b000000600750003900000000006704350000008006100039000000000669034f000000000606043b00000080075000390000000000670435000000a006100039000000000669034f000000000606043b000000a00750003900000000006704350000000000540435000000c001100039000000000031004b000006d40000413d000005540000013d000000400100043d00000044021000390000046903000041000000000032043500000465020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000042e0010009c0000042e0100804100000040011002100000046a011001c7000010b7000104300000000801000029000000000010043f0000000601000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000201041a000000000001041b000000000002004b000003ae0000613d00000006032000c9000a00000003001d000000060330011a000000000032004b000002f10000c13d000000000010043f00000000010004140000042e0010009c0000042e01008041000000c0011002100000046d011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b0000000a02100029000000000021004b000003ae0000813d000000000001041b0000000103100039000000000003041b0000000203100039000000000003041b0000000303100039000000000003041b0000000403100039000000000003041b0000000503100039000000000003041b0000000601100039000000000021004b000007360000413d000003ae0000013d00000060061002700000001f0460018f0000047205600198000000400200043d0000000003520019000007510000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b0000074d0000c13d0000042e06600197000000000004004b0000075f0000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000060016002100000053d0000013d00000002020000390000000101000039000000000021041b000000800100043d0000043001100197000000c00200043d000a00000002001d000900000001001d000000000010043f0000000901000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b0000000a02000029000000000020043f000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000101041a000000ff001001900000087d0000c13d0000000901000029000000000010043f0000000901000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b0000000a02000029000000000020043f000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000201041a000004970220019700000001022001bf000000000021041b0000000901000029000000000010043f0000000801000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000201041a000000010220003a000002f10000613d000000000021041b000000a00100043d000000000010043f0000000501000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000101041a0000046b001001980000022b0000613d000000800100043d0000043001100197000000000010043f0000000701000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000101041a000000000001004b000009640000c13d000000800100043d0000043001100197000001600300043d000000000003004b000007e20000c13d0000000002000411000000000012004b0000096b0000c13d000000400200043d000000e004200039000000c00500043d000000e00600043d000001000700043d000001200800043d000000a00900043d0000000000940435000000c0042000390000000000840435000000a00420003900000000007404350000008004200039000000000064043500000060042000390000000000540435000000000003004b0000000003000039000000010300c03900000040042000390000000000340435000000e00300003900000000033204360000000000130435000004780020009c000004e50000213d0000010001200039000000400010043f0000042e0030009c0000042e03008041000000400130021000000000020204330000042e0020009c0000042e020080410000006002200210000000000112019f00000000020004140000042e0020009c0000042e02008041000000c002200210000000000112019f00000431011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000301043b000000400100043d0000002002100039000004790400004100000000004204350000003c0410003900000000003404350000003c0300003900000000003104350000047a0010009c000004e50000213d0000006003100039000000400030043f0000042e0020009c0000042e02008041000000400220021000000000010104330000042e0010009c0000042e010080410000006001100210000000000121019f00000000020004140000042e0020009c0000042e02008041000000c002200210000000000112019f00000431011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000001400200043d10b50eb80000040f000000000001004b000009600000613d000001000100043d000000000001004b000009820000c13d000001200100043d000000000001004b000009d30000c13d000000a00100043d000a00000001001d0000047d01000041000000000010044300000000010004140000042e0010009c0000042e01008041000000c0011002100000047e011001c70000800b0200003910b510b00000040f000000010020019000000b4a0000613d000000000201043b000900000002001d000004980020009c000002f10000213d000001000100043d000500000001001d000000e00100043d000600000001001d000000400100043d000800000001001d10b50c0a0000040f00000008020000290000006001200039000700000001001d000000060300002900000000003104350000004001200039000600000001001d00000005030000290000000000310435000000090100002900000002011000390000002003200039000900000003001d00000000001304350000000a010000290000000000120435000000800100043d0000043001100197000000000010043f0000000701000039000000200010043f0000004002000039000000000100001910b510960000040f00000008020000290000000002020433000000000021041b000000090200002900000000020204330000000103100039000000000023041b000000060200002900000000020204330000000203100039000000000023041b000000070200002900000000020204330000000301100039000000000021041b0000000101000039000000000011041b0000000001000019000010b60001042e000000400100043d00000044021000390000048603000041000000000032043500000024021000390000000d03000039000002310000013d0000000801000029000000000010043f0000000601000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000201041a000000000001041b000000000002004b000008a90000c13d00000080030000390000000001000411000000080200002910b50f500000040f0000000001000019000010b60001042e00000060061002700000001f0460018f0000047205600198000000400200043d0000000003520019000007510000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b000008a40000c13d000007510000013d00000006032000c9000a00000003001d000000060330011a000000000032004b000002f10000c13d000000000010043f00000000010004140000042e0010009c0000042e01008041000000c0011002100000046d011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b0000000a02100029000000000021004b000008960000813d000000000001041b0000000103100039000000000003041b0000000203100039000000000003041b0000000303100039000000000003041b0000000403100039000000000003041b0000000503100039000000000003041b0000000601100039000000000021004b000008bc0000413d000008960000013d0000000a01000029000000000010043f0000000701000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000101041a000800000001001d000000090000006b000008e00000c13d00000000010004110000000a0010006c0000096b0000c13d0000000a01000029000000000010043f0000000701000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b0000000101100039000000000101041a000700000001001d0000047d01000041000000000010044300000000010004140000042e0010009c0000042e01008041000000c0011002100000047e011001c70000800b0200003910b510b00000040f000000010020019000000b4a0000613d000000400200043d000000000101043b000000070010006c000009720000a13d00000020012000390000000a03000029000000000031043500000000030003670000002404300370000000000404043b000000400520003900000000004504350000004404300370000000000404043b000000800520003900000008060000290000000000650435000000600520003900000000004504350000008404300370000000000404043b000000c00520003900000009060000290000000000650435000000000004004b0000000004000039000000010400c039000000a0052000390000000000450435000000c404300370000000000404043b000000000004004b0000000004000039000000010400c039000000e0052000390000000000450435000000e403300370000000000303043b0000010004200039000000000034043500000100030000390000000000320435000004890020009c000004e50000213d0000012003200039000000400030043f0000042e0010009c0000042e01008041000000400110021000000000020204330000042e0020009c0000042e020080410000006002200210000000000112019f00000000020004140000042e0020009c0000042e02008041000000c002200210000000000112019f00000431011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000301043b000000400100043d0000002002100039000004790400004100000000004204350000003c0410003900000000003404350000003c0300003900000000003104350000047a0010009c000004e50000213d0000006003100039000000400030043f0000042e0020009c0000042e02008041000000400220021000000000010104330000042e0010009c0000042e010080410000006001100210000000000121019f00000000020004140000042e0020009c0000042e02008041000000c002200210000000000112019f00000431011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000800200003910b50eb80000040f000000000001004b00000a2a0000c13d000000400100043d00000044021000390000048e03000041000009670000013d000000400100043d00000044021000390000047703000041000000000032043500000024021000390000001103000039000002310000013d000000400100043d00000044021000390000048703000041000000000032043500000024021000390000000e03000039000002310000013d000000440120003900000488030000410000000000310435000000240120003900000018030000390000000000310435000004650100004100000000001204350000000401200039000000200300003900000000003104350000042e0020009c0000042e0200804100000040012002100000046a011001c7000010b7000104300000000202000039000000000202041a000000400500043d000a00000005001d0000004403500039000000800400043d000000000013043500000000010004100000043001100197000000240350003900000000001304350000047b0100004100000000001504350000043001400197000000040350003900000000001304350000042e0050009c0000042e010000410000000001054019000000400110021000000000030004140000042e0030009c0000042e03008041000000c003300210000000000113019f0000046a011001c7000004300220019710b510ab0000040f00000060031002700000042e03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000a0b0000290000000a05700029000009ae0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000009aa0000c13d000000000006004b000009bb0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000ad60000613d0000001f01400039000000600210018f0000000001b20019000000000021004b000000000200003900000001020040390000045f0010009c000004e50000213d0000000100200190000004e50000c13d000000400010043f000000200030008c00000bef0000413d00000000020b0433000000000002004b0000000003000039000000010300c039000000000032004b00000bef0000c13d000000000002004b000008370000c13d00000a240000013d0000000202000039000000000202041a0000000303000039000000000303041a000000400600043d000a00000006001d0000004404600039000000800500043d00000000001404350000043001300197000000240360003900000000001304350000047b0100004100000000001604350000043001500197000000040360003900000000001304350000042e0060009c0000042e010000410000000001064019000000400110021000000000030004140000042e0030009c0000042e03008041000000c003300210000000000113019f0000046a011001c7000004300220019710b510ab0000040f00000060031002700000042e03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000a0b0000290000000a0570002900000a000000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000009fc0000c13d000000000006004b00000a0d0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000ae20000613d0000001f01400039000000600210018f0000000001b20019000000000021004b000000000200003900000001020040390000045f0010009c000004e50000213d0000000100200190000004e50000c13d000000400010043f000000200030008c00000bef0000413d00000000020b0433000000000002004b0000000003000039000000010300c039000000000032004b00000bef0000c13d000000000002004b0000083a0000c13d00000044021000390000047c03000041000000000032043500000024021000390000000f03000039000002310000013d00000000010003670000008402100370000000000202043b000600000002001d000000c402100370000000000202043b000900000002001d0000004402100370000000000202043b000000e401100370000000000301043b0000000a0100002910b50cc90000040f0000000a02000029000000000020043f0000000702000039000000200020043f000700000001001d00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000400200043d000500000002001d000004610020009c000004e50000213d0000000201100039000000000101041a000100000001001d00000005020000290000008001200039000000400010043f0000006001200039000400000001001d00000000000104350000004001200039000300000001001d00000000000104350000000001020436000200000001001d00000000000104350000000a01000029000000000010043f0000000701000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d00000005020000290000000002020433000000000101043b000000000021041b000000020200002900000000020204330000000103100039000000000023041b000000030200002900000000020204330000000203100039000000000023041b000000030110003900000004020000290000000002020433000000000021041b000000090000006b000008790000c13d0000000801000029000000000010043f0000000601000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000000101043b000000000201041a000000070020006c00000aee0000c13d000000010000006b000008790000613d0000000201000039000000000201041a000000400400043d000900000004001d0000002401400039000000010300002900000000003104350000048c01000041000000000014043500000004014000390000000a0300002900000000003104350000042e0040009c0000042e010000410000000001044019000000400110021000000000030004140000042e0030009c0000042e03008041000000c003300210000000000113019f0000048d011001c7000004300220019710b510ab0000040f00000060031002700000042e03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000090b000029000000090570002900000ab30000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000aaf0000c13d000000000006004b00000ac00000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000b510000613d0000001f01400039000000600210018f0000000001b20019000000000021004b000000000200003900000001020040390000045f0010009c000004e50000213d0000000100200190000004e50000c13d000000400010043f000000200030008c00000bef0000413d00000000010b0433000000000001004b0000000002000039000000010200c039000000000021004b000008790000613d00000bef0000013d0000001f0530018f0000047206300198000000400200043d00000000046200190000052f0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000add0000c13d0000052f0000013d0000001f0530018f0000047206300198000000400200043d00000000046200190000052f0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000ae90000c13d0000052f0000013d00000b4b0000a13d000000000010043f00000000010004140000042e0010009c0000042e01008041000000c0011002100000046d011001c7000080100200003910b510b00000040f000000010020019000000bef0000613d000000070200002900000006022000c9000000000101043b000900000021001d000000060000006b00000b5d0000c13d000000010000006b00000ba40000c13d00000009030000290000000201300039000000000201041a0000000303300039000000000303041a000800000003001d000000000232004b000002f10000413d000000000021041b00000009020000290000000101200039000000000101041a000700000001001d000000000102041a0000046e0200004100000000002004430000043001100197000900000001001d000000040010044300000000010004140000042e0010009c0000042e01008041000000c0011002100000046f011001c7000080020200003910b510b00000040f000000010020019000000b4a0000613d000000000101043b000000000001004b00000bef0000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000802000029000000000021043500000044013000390000000702000029000000000021043500000024013000390000000a020000290000000000210435000004700100004100000000001304350000000001000410000004300110019700000004023000390000000000120435000000a40130003900000000000104350000042e0030009c000a00000003001d0000042e010000410000000001034019000000400110021000000000020004140000042e0020009c0000042e02008041000000c002200210000000000112019f00000471011001c7000000090200002910b510ab0000040f000000010020019000000bfd0000613d0000000a010000290000045f0010009c000004e50000213d0000000a01000029000000400010043f000008790000013d000000000001042f0000048a01000041000000000010043f0000003201000039000000040010043f0000048b01000041000010b7000104300000001f0530018f0000047206300198000000400200043d00000000046200190000052f0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b580000c13d0000052f0000013d00000009010000290000000501100039000000000101041a000000000001004b000008790000613d0000000202000039000000000202041a000000400400043d000900000004001d000000240340003900000000001304350000048c01000041000000000014043500000004014000390000000a0300002900000000003104350000042e0040009c0000042e010000410000000001044019000000400110021000000000030004140000042e0030009c0000042e03008041000000c003300210000000000113019f0000048d011001c7000004300220019710b510ab0000040f00000060031002700000042e03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000090b000029000000090570002900000b890000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000b850000c13d000000000006004b00000b960000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000ac20000c13d0000001f0530018f0000047206300198000000400200043d00000000046200190000052f0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b9f0000c13d0000052f0000013d0000000201000039000000000201041a000000400500043d000800000005001d0000002401500039000000000300041a000000010400002900000000004104350000048c0100004100000000001504350000043001300197000000040350003900000000001304350000042e0050009c0000042e010000410000000001054019000000400110021000000000030004140000042e0030009c0000042e03008041000000c003300210000000000113019f0000048d011001c7000004300220019710b510ab0000040f00000060031002700000042e03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000080b000029000000080570002900000bcd0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000bc90000c13d000000000006004b00000bda0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000bf10000613d0000001f01400039000000600210018f0000000001b20019000000000021004b000000000200003900000001020040390000045f0010009c000004e50000213d0000000100200190000004e50000c13d000000400010043f000000200030008c00000bef0000413d00000000010b0433000000000001004b0000000002000039000000010200c039000000000021004b00000b010000613d0000000001000019000010b7000104300000001f0530018f0000047206300198000000400200043d00000000046200190000052f0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000bf80000c13d0000052f0000013d00000060061002700000001f0460018f0000047205600198000000400200043d0000000003520019000007510000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000c050000c13d000007510000013d000004990010009c00000c0f0000813d0000008001100039000000400010043f000000000001042d0000048a01000041000000000010043f0000004101000039000000040010043f0000048b01000041000010b7000104300000001f0220003900000496022001970000000001120019000000000021004b000000000200003900000001020040390000045f0010009c00000c210000213d000000010020019000000c210000c13d000000400010043f000000000001042d0000048a01000041000000000010043f0000004101000039000000040010043f0000048b01000041000010b7000104300000001f03100039000000000023004b00000000040000190000047f040040410000047f052001970000047f03300197000000000653013f000000000053004b00000000030000190000047f030020410000047f0060009c000000000304c019000000000003004b00000c6e0000613d0000000005000367000000000315034f000000000303043b000004850030009c00000c680000813d0000001f0430003900000496044001970000003f044000390000049607400197000000400400043d0000000007740019000000000047004b000000000800003900000001080040390000045f0070009c00000c680000213d000000010080019000000c680000c13d000000400070043f000000000434043600000020011000390000000007310019000000000027004b00000c6e0000213d000000000215034f00000496053001980000001f0630018f000000000154001900000c580000613d000000000702034f0000000008040019000000007907043c0000000008980436000000000018004b00000c540000c13d000000000006004b00000c650000613d000000000252034f0000000305600210000000000601043300000000065601cf000000000656022f000000000202043b0000010005500089000000000252022f00000000025201cf000000000262019f000000000021043500000000013400190000000000010435000000000001042d0000048a01000041000000000010043f0000004101000039000000040010043f0000048b01000041000010b7000104300000000001000019000010b700010430000004620010009c00000c7a0000213d000000430010008c00000c7a0000a13d00000000020003670000000401200370000000000101043b0000002402200370000000000202043b000000000001042d0000000001000019000010b700010430000000a00810003900000000007804350000008007100039000000000067043500000060061000390000000000560435000000400510003900000000004504350000002004100039000000000034043500000430022001970000000000210435000000c001100039000000000001042d0001000000000002000000000301041a000100000002001d000000000023004b00000c9e0000a13d000000000010043f00000000010004140000042e0010009c0000042e01008041000000c0011002100000046d011001c7000080100200003910b510b00000040f000000010020019000000ca40000613d000000010200002900000006022000c9000000000101043b0000000001210019000000000001042d0000048a01000041000000000010043f0000003201000039000000040010043f0000048b01000041000010b7000104300000000001000019000010b7000104300000000002010019000000400100043d0000049a0010009c00000cc30000813d000000c003100039000000400030043f000000000302041a000004300330019700000000033104360000000104200039000000000404041a00000000004304350000000203200039000000000303041a000000400410003900000000003404350000000303200039000000000303041a000000600410003900000000003404350000000403200039000000000303041a000000800410003900000000003404350000000502200039000000000202041a000000a0031000390000000000230435000000000001042d0000048a01000041000000000010043f0000004101000039000000040010043f0000048b01000041000010b7000104300006000000000002000300000003001d000500000002001d0000043001100197000200000001001d000000000010043f0000000701000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000e540000613d000000000101043b000000000101041a000400000001001d000000000010043f0000000501000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000e540000613d000000400200043d0000049b0020009c00000e560000813d000000000101043b0000006003200039000000400030043f000000000301041a0000046b003001980000000004000039000000010400c039000000200520003900000000004504350000043003300197000000000032043500000040022000390000000101100039000000000101041a000600000001001d00000000001204350000000201000029000000000010043f0000000701000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000e540000613d000000000101043b0000000301100039000000000101041a000000000001004b000000060200003900000d280000613d000100000001001d0000000401000029000000000010043f000000200020043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000e540000613d000000000101043b000000000201041a00000001012000b900000001031000fa000600060010002d000000060010006b00000000010000390000000101004039000000000032004b00000d8d0000c13d000000010010019000000d8d0000c13d000000400100043d00000040021000390000000303000029000000000032043500000040020000390000000002210436000000050300002900000000003204350000047a0010009c00000e560000213d0000006003100039000000400030043f0000042e0020009c0000042e02008041000000400220021000000000010104330000042e0010009c0000042e010080410000006001100210000000000121019f00000000020004140000042e0020009c0000042e02008041000000c002200210000000000112019f00000431011001c7000080100200003910b510b00000040f000000010020019000000e540000613d0000000602000029000000000002004b00000e5c0000613d000000000101043b00000000102100d9000100000001001d000500000000001d000600000000001d0000000401000029000000000010043f0000000601000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000e540000613d000000000101043b000000000201041a000000060020006b00000d930000813d000000000010043f00000000010004140000042e0010009c0000042e01008041000000c0011002100000046d011001c7000080100200003910b510b00000040f000000010020019000000e540000613d000000400200043d000004630020009c00000e560000213d000000000101043b000000c003200039000000400030043f000000060600002900000006036000c90000000001310019000000000301041a000004300330019700000000033204360000000104100039000000000404041a00000000004304350000000203100039000000000303041a000000400420003900000000003404350000000304100039000000000404041a000000600520003900000000004504350000000404100039000000000404041a000000800520003900000000004504350000000501100039000000a002200039000000000101041a0000000000120435000600010060003d000000050030002a000500050030002d00000d8d0000413d00000d4e0000013d0000048a01000041000000000010043f0000001101000039000000040010043f0000048b01000041000010b700010430000000050000006b00000df00000613d000500000000001d000600000000001d00000006020000390000000401000029000000000010043f000000200020043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000e540000613d000000000101043b000000000201041a000000060020006b00000e000000813d000000000010043f00000000010004140000042e0010009c0000042e01008041000000c0011002100000046d011001c7000080100200003910b510b00000040f000000010020019000000e540000613d000000400200043d000004630020009c000000060400002900000e560000213d000000000101043b000000c003200039000000400030043f00000006034000c90000000001310019000000000301041a000004300330019700000000033204360000000104100039000000000404041a00000000004304350000000203100039000000000303041a000000400420003900000000003404350000000303100039000000000303041a000000600420003900000000003404350000000403100039000000000403041a0000008003200039000300000004001d00000000004304350000000501100039000000a002200039000000000101041a00000000001204350000000201000029000000000010043f0000000701000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000e540000613d000000000101043b0000000301100039000000000101041a0000000304000029000000000041001a0000000603000029000000050200002900000d8d0000413d0000000001410019000000000012001a00000d8d0000413d0000000002120019000000010020006b00000e010000413d000500000002001d000600010030003d00000d970000013d0000000401000029000000000010043f0000000601000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000e540000613d000000000101043b000000000101041a000000000001042d00000000030000190000000602000039000600000003001d0000000401000029000000000010043f000000200020043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000e540000613d000000000101043b000000000201041a000000060020006b00000e410000813d000000000010043f00000000010004140000042e0010009c0000042e01008041000000c0011002100000046d011001c7000080100200003910b510b00000040f000000010020019000000e540000613d000000400200043d000004630020009c000000060700002900000e560000213d000000000101043b000000c003200039000000400030043f00000006037000c90000000001310019000000000301041a000004300330019700000000033204360000000104100039000000000404041a00000000004304350000000203100039000000000303041a000000400420003900000000003404350000000304100039000000000404041a000000600520003900000000004504350000000405100039000000000505041a000000800620003900000000005604350000000501100039000000a002200039000000000101041a0000000000120435000000000043004b00000e410000813d000600010070003d000000060200003900000e030000013d0000000401000029000000000010043f0000000601000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f000000010020019000000e540000613d000000000101043b000000000201041a000000060020006b00000000010200190000000601004029000000000001042d0000000001000019000010b7000104300000048a01000041000000000010043f0000004101000039000000040010043f0000048b01000041000010b7000104300000048a01000041000000000010043f0000001201000039000000040010043f0000048b01000041000010b7000104300000000002120049000004620020009c00000e6e0000213d0000001f0020008c00000e6e0000a13d0000000001010433000000000001004b0000000002000039000000010200c039000000000021004b00000e6e0000c13d000000000001042d0000000001000019000010b7000104300001000000000002000100000001001d000000400100043d000000400410003900000000003404350000004003000039000000000331043600000000002304350000049b0010009c00000e940000813d0000006002100039000000400020043f0000042e0030009c0000042e03008041000000400230021000000000010104330000042e0010009c0000042e010080410000006001100210000000000121019f00000000020004140000042e0020009c0000042e02008041000000c002200210000000000112019f00000431011001c7000080100200003910b510b00000040f000000010020019000000e9a0000613d0000000102000029000000000002004b00000e9c0000613d000000000101043b00000000102100d9000000000001042d0000048a01000041000000000010043f0000004101000039000000040010043f0000048b01000041000010b7000104300000000001000019000010b7000104300000048a01000041000000000010043f0000001201000039000000040010043f0000048b01000041000010b700010430000000000100041a00000430011001970000000002000411000000000021004b00000ea80000c13d000000000001042d000000400100043d00000044021000390000046903000041000000000032043500000465020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000042e0010009c0000042e0100804100000040011002100000046a011001c7000010b700010430000000400300043d0000000045020434000000410050008c00000efe0000c13d000000400520003900000000050504330000049d0050009c00000f0e0000213d0000006002200039000000000202043300000000040404330000006006300039000000000056043500000040053000390000000000450435000000f802200270000000200430003900000000002404350000000000130435000000000000043f0000042e0030009c0000042e03008041000000400130021000000000020004140000042e0020009c0000042e02008041000000c002200210000000000112019f0000049e011001c7000000010200003910b510b00000040f00000060031002700000042e03300197000000200030008c000000200400003900000000040340190000001f0540018f000000200440019000000ee50000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b00000ee10000c13d000000000005004b00000ef20000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000000010020019000000f210000613d000000000100043d000004300010019800000f3f0000613d0000000402000039000000000202041a000000000112013f000004300010019800000000010000390000000101006039000000000001042d00000044013000390000049c02000041000000000021043500000024013000390000001f020000390000000000210435000004650100004100000000001304350000000401300039000000200200003900000000002104350000042e0030009c0000042e0300804100000040013002100000046a011001c7000010b7000104300000006401300039000004a00200004100000000002104350000004401300039000004a1020000410000000000210435000000240130003900000022020000390000000000210435000004650100004100000000001304350000000401300039000000200200003900000000002104350000042e0030009c0000042e030080410000004001300210000004a2011001c7000010b7000104300000001f0530018f0000047206300198000000400200043d000000000462001900000f2c0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000f280000c13d000000000005004b00000f390000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060013002100000042e0020009c0000042e020080410000004002200210000000000112019f000010b700010430000000400100043d00000044021000390000049f030000410000000000320435000000240210003900000018030000390000000000320435000004650200004100000000002104350000000402100039000000200300003900000000003204350000042e0010009c0000042e0100804100000040011002100000046a011001c7000010b700010430000b000000000002000400000003001d000500000002001d000000400300043d0000049b0030009c000010320000813d0000006002300039000000400020043f00000020043000390000000102000039000900000004001d000000000024043500000430011001970000000000130435000b00000003001d0000004001300039000a00000001001d00000000000104350000000501000029000000000010043f0000000501000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f0000000100200190000010300000613d0000000b0200002900000000020204330000043002200197000000000101043b000000000301041a000004a303300197000000000223019f00000009030000290000000003030433000000000003004b00000483030000410000000003006019000000000223019f000000000021041b00000001011000390000000a020000290000000002020433000000000021041b00000004010000290000000021010434000300000002001d000000000001004b0000101d0000613d0000000001000410000204300010019b0000000001000411000104300010019b0000000002000019000b00000000001d0000000003000019000a00000003001d000700000002001d000000050120021000000003011000290000000001010433000900000001001d0000000501000029000000000010043f0000000601000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f0000000100200190000010300000613d000000000101043b000000000201041a0000045f0020009c000010320000213d000800000002001d0000000102200039000000000021041b000000000010043f00000000010004140000042e0010009c0000042e01008041000000c0011002100000046d011001c7000080100200003910b510b00000040f0000000100200190000010300000613d000000080200002900000006022000c9000000000101043b0000000002210019000000000102041a0000042f01100197000000090600002900000000430604340000043005300197000000000151019f000000000012041b00000000070404330000000101200039000000000071041b000000400160003900000000080104330000000201200039000000000081041b000000600160003900000000010104330000000303200039000000000013041b000000800360003900000000040304330000000403200039000000000043041b0000000502200039000000a0036000390000000003030433000000000032041b0000000a0040006b000010380000213d000000000008004b0000103f0000613d000000000001004b000010500000613d00000000101800d9000000000001004b0000105a0000c13d000900000008001d000a00000007001d000600000004001d0000000b0040002a0000108f0000413d0000046e010000410000000000100443000800000005001d000000040050044300000000010004140000042e0010009c0000042e01008041000000c0011002100000046f011001c7000080020200003910b510b00000040f00000001002001900000106e0000613d000000000101043b000000000001004b0000000a030000290000000904000029000010300000613d000000400500043d0000008401500039000000a0020000390000000000210435000000640150003900000000004104350000004401500039000000000031043500000024015000390000000202000029000000000021043500000470010000410000000000150435000000040150003900000001020000290000000000210435000000a40150003900000000000104350000042e0050009c000a00000005001d0000042e010000410000000001054019000000400110021000000000020004140000042e0020009c0000042e02008041000000c002200210000000000112019f00000471011001c7000000080200002910b510ab0000040f00000001002001900000106f0000613d0000000a020000290000045f0020009c0000000603000029000010320000213d000b000b0030002d000000400020043f0000000702000029000000010220003900000004010000290000000001010433000000000012004b00000f8d0000413d0000101e0000013d000b00000000001d0000000501000029000000000010043f0000000501000039000000200010043f00000000010004140000042e0010009c0000042e01008041000000c00110021000000464011001c7000080100200003910b510b00000040f0000000100200190000010300000613d000000000101043b00000001011000390000000b02000029000000000021041b000000000001042d0000000001000019000010b7000104300000048a01000041000000000010043f0000004101000039000000040010043f0000048b01000041000010b700010430000000400100043d0000006402100039000004a90300004100000000003204350000004402100039000004aa03000041000010560000013d000000400100043d0000004402100039000004a803000041000000000032043500000024021000390000001f030000390000000000320435000004650200004100000000002104350000000402100039000000200300003900000000003204350000042e0010009c0000042e0100804100000040011002100000046a011001c7000010b700010430000000400100043d0000006402100039000004a60300004100000000003204350000004402100039000004a703000041000000000032043500000024021000390000002203000039000010630000013d000000400100043d0000006402100039000004a40300004100000000003204350000004402100039000004a5030000410000000000320435000000240210003900000029030000390000000000320435000004650200004100000000002104350000000402100039000000200300003900000000003204350000042e0010009c0000042e010080410000004001100210000004a2011001c7000010b700010430000000000001042f00000060061002700000001f0460018f0000047205600198000000400200043d00000000035200190000107b0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b000010770000c13d0000042e06600197000000000004004b000010890000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000060016002100000042e0020009c0000042e020080410000004002200210000000000112019f000010b7000104300000048a01000041000000000010043f0000001101000039000000040010043f0000048b01000041000010b700010430000000000001042f0000042e0010009c0000042e0100804100000040011002100000042e0020009c0000042e020080410000006002200210000000000112019f00000000020004140000042e0020009c0000042e02008041000000c002200210000000000112019f00000431011001c7000080100200003910b510b00000040f0000000100200190000010a90000613d000000000101043b000000000001042d0000000001000019000010b700010430000010ae002104210000000102000039000000000001042d0000000002000019000000000001042d000010b3002104230000000102000039000000000001042d0000000002000019000000000001042d000010b500000432000010b60001042e000010b70001043000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff02000000000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000000000000000000002f2a13462f6d4af64954ee84641d265932849b64000000000000000000000000f156ed63c0b6d07132fa8704fb09eaa76ff30ee40000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000008aab8cbe00000000000000000000000000000000000000000000000000000000c37ecb7a00000000000000000000000000000000000000000000000000000000f2eb9cb700000000000000000000000000000000000000000000000000000000f5243a4700000000000000000000000000000000000000000000000000000000f5243a4800000000000000000000000000000000000000000000000000000000fb06f8c300000000000000000000000000000000000000000000000000000000f2eb9cb800000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000ddca3f4200000000000000000000000000000000000000000000000000000000ddca3f4300000000000000000000000000000000000000000000000000000000f23a6e6100000000000000000000000000000000000000000000000000000000c37ecb7b00000000000000000000000000000000000000000000000000000000ccd112c90000000000000000000000000000000000000000000000000000000098b69c4900000000000000000000000000000000000000000000000000000000b8f9487200000000000000000000000000000000000000000000000000000000b8f9487300000000000000000000000000000000000000000000000000000000bc197c810000000000000000000000000000000000000000000000000000000098b69c4a00000000000000000000000000000000000000000000000000000000b3e089a2000000000000000000000000000000000000000000000000000000008aab8cbf000000000000000000000000000000000000000000000000000000008da5cb5b00000000000000000000000000000000000000000000000000000000910188d1000000000000000000000000000000000000000000000000000000005b7633cf00000000000000000000000000000000000000000000000000000000715018a50000000000000000000000000000000000000000000000000000000081625e2a0000000000000000000000000000000000000000000000000000000081625e2b0000000000000000000000000000000000000000000000000000000087e5ed1800000000000000000000000000000000000000000000000000000000715018a6000000000000000000000000000000000000000000000000000000007ecebe00000000000000000000000000000000000000000000000000000000005b7633d00000000000000000000000000000000000000000000000000000000069fe0e2d000000000000000000000000000000000000000000000000000000006c19e783000000000000000000000000000000000000000000000000000000003ccfd60a000000000000000000000000000000000000000000000000000000003e413bed000000000000000000000000000000000000000000000000000000003e413bee0000000000000000000000000000000000000000000000000000000046904840000000000000000000000000000000000000000000000000000000003ccfd60b000000000000000000000000000000000000000000000000000000003e2be0a50000000000000000000000000000000000000000000000000000000001ffc9a7000000000000000000000000000000000000000000000000000000000b013dad000000000000000000000000000000000000000000000000000000001647795e000000000000000000000000000000000000000000000000ffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff3f020000000000000000000000000000000000004000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000008000000000000000004f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657200000000000000000000000000000000000000640000000000000000000000000000000000000000000000ff0000000000000000000000000000000000000000ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff02000000000000000000000000000000000000200000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000f242432a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffe0f23a6e610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000000000fffffffffffffe7f416c726561647920636f6d6d6974746564000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffeff19457468657265756d205369676e6564204d6573736167653a0a333200000000000000000000000000000000000000000000000000000000ffffffffffffff9f23b872dd000000000000000000000000000000000000000000000000000000005472616e73666572206661696c6564000000000000000000000000000000000042cbb15ccdc3cad6266b0e7a08c0454b23bf29dc2df74b6f3c209e9336465bd102000002000000000000000000000000000000040000000000000000000000008000000000000000000000000000000000000000000000000000000000000000bc197c810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000008000000000000000000000000000000000000000000000000000000060000000800000000000000000000000000000000000000001000000000000000000000000000000000000000056656e64696e67206d616368696e65206973206e6f74206163746976650000000000000000000000000000000000000000000000000000010000000000000000496e76616c6964206e6f6e6365000000000000000000000000000000000000004e6f7420617574686f72697a65640000000000000000000000000000000000004e6f7420656e6f75676820626c6f636b73207061737365640000000000000000000000000000000000000000000000000000000000000000fffffffffffffedf4e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000a9059cbb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000496e76616c6964207369676e61747572650000000000000000000000000000004e6f7420636f6d6d6974746564000000000000000000000000000000000000005265656e7472616e637947756172643a207265656e7472616e742063616c6c00000000000000000000000000000000000000006400000080000000000000000070a0823100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000080000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff4e2312e000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd000000000000000000000000000000000000000000000000ffffffffffffff80000000000000000000000000000000000000000000000000ffffffffffffff40000000000000000000000000000000000000000000000000ffffffffffffffa045434453413a20696e76616c6964207369676e6174757265206c656e677468007fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0000000000000000000000000000000000000008000000000000000000000000045434453413a20696e76616c6964207369676e61747572650000000000000000756500000000000000000000000000000000000000000000000000000000000045434453413a20696e76616c6964207369676e6174757265202773272076616c0000000000000000000000000000000000000084000000000000000000000000ffffffffffffffffffffff000000000000000000000000000000000000000000656d7350657257696e00000000000000000000000000000000000000000000005175616e74697479206d75737420626520646976697369626c6520627920697420300000000000000000000000000000000000000000000000000000000000006974656d7350657257696e206d7573742062652067726561746572207468616e5175616e74697479206d7573742062652067726561746572207468616e203000657200000000000000000000000000000000000000000000000000000000000057656967687473206d75737420626520696e20617363656e64696e67206f72640000000000000000000000000000000000000000000000000000000000000000adfd2b5ccd2bc64dde448ff0a88c75603a19a526df97586515b87424f98a6bbc
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.