Indexing Tokens - We're indexing this chain right now. Some of the counts may be inaccurate.

Contract Address Details

0xb55D76a04c9d808420FbFB9cB6Fc07Cb1139A0F0

Creator
0x046bf7–da7b9c at 0xc944f4–7dedf2
Balance
0 LIT
Tokens
Fetching tokens...
Transactions
3 Transactions
Transfers
11 Transfers
Gas Used
1,054,718
Last Balance Update
2793400
Contract is not verified. However, we found a verified contract with the same bytecode in Blockscout DB 0x8db77c72dc7530b9790c6b845131f9511995b526.
All metadata displayed below is from that contract. In order to verify current contract, click Verify & Publish button
Verify & Publish
Contract name:
Multisender




Optimization enabled
false
Compiler version
v0.8.17+commit.8df45f5f




Verified at
2023-09-11T05:56:25.120929Z

contracts/lit-node/Multisender.sol

//SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.17;
import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
// This contract does one thing, simply. it allows you to send eth or tokens to multiple recipients. Useful for setting up a testnet and funding all the validators and stakers.
contract Multisender is Ownable {
function sendEth(address[] calldata _recipients) public payable {
uint256 val = msg.value / _recipients.length;
for (uint256 i = 0; i < _recipients.length; i++) {
payable(_recipients[i]).transfer(val);
}
}
function sendTokens(
address[] calldata _recipients,
address tokenContract
) public {
ERC20 tkn = ERC20(tokenContract);
uint256 bal = tkn.balanceOf(address(this));
uint256 val = bal / _recipients.length;
for (uint256 i = 0; i < _recipients.length; i++) {
tkn.transfer(_recipients[i], val);
}
}
function withdraw() public onlyOwner {
payable(msg.sender).transfer(address(this).balance);
}
function withdrawTokens(address tokenContract) public onlyOwner {
ERC20 tkn = ERC20(tokenContract);
uint256 bal = tkn.balanceOf(address(this));
tkn.transfer(msg.sender, bal);
}
}
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/access/Ownable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.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.
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/token/ERC20/ERC20.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/token/ERC20/IERC20.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.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);
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/utils/Context.sol

// 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;
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Contract ABI

[{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"sendEth","inputs":[{"type":"address[]","name":"_recipients","internalType":"address[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"sendTokens","inputs":[{"type":"address[]","name":"_recipients","internalType":"address[]"},{"type":"address","name":"tokenContract","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdraw","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdrawTokens","inputs":[{"type":"address","name":"tokenContract","internalType":"address"}]}]
            

Contract Creation Code

Verify & Publish
0x608060405234801561001057600080fd5b5061002d61002261003260201b60201c565b61003a60201b60201c565b6100fe565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610bf98061010d6000396000f3fe6080604052600436106100705760003560e01c80636ecf13861161004e5780636ecf1386146100d1578063715018a6146100fa5780638da5cb5b14610111578063f2fde38b1461013c57610070565b80633b2fe781146100755780633ccfd60b1461009157806349df728c146100a8575b600080fd5b61008f600480360381019061008a919061074c565b610165565b005b34801561009d57600080fd5b506100a661020d565b005b3480156100b457600080fd5b506100cf60048036038101906100ca91906107f7565b61025e565b005b3480156100dd57600080fd5b506100f860048036038101906100f39190610824565b61036d565b005b34801561010657600080fd5b5061010f6104d3565b005b34801561011d57600080fd5b506101266104e7565b6040516101339190610893565b60405180910390f35b34801561014857600080fd5b50610163600480360381019061015e91906107f7565b610510565b005b600082829050346101769190610916565b905060005b838390508110156102075783838281811061019957610198610947565b5b90506020020160208101906101ae91906107f7565b73ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156101f3573d6000803e3d6000fd5b5080806101ff90610976565b91505061017b565b50505050565b610215610593565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561025b573d6000803e3d6000fd5b50565b610266610593565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016102a69190610893565b602060405180830381865afa1580156102c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e791906109ea565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610324929190610a26565b6020604051808303816000875af1158015610343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103679190610a87565b50505050565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016103ad9190610893565b602060405180830381865afa1580156103ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ee91906109ea565b9050600085859050826104019190610916565b905060005b868690508110156104ca578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8888848181106104405761043f610947565b5b905060200201602081019061045591906107f7565b846040518363ffffffff1660e01b8152600401610473929190610a26565b6020604051808303816000875af1158015610492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b69190610a87565b5080806104c290610976565b915050610406565b50505050505050565b6104db610593565b6104e56000610611565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610518610593565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057e90610b37565b60405180910390fd5b61059081610611565b50565b61059b6106d5565b73ffffffffffffffffffffffffffffffffffffffff166105b96104e7565b73ffffffffffffffffffffffffffffffffffffffff161461060f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060690610ba3565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261070c5761070b6106e7565b5b8235905067ffffffffffffffff811115610729576107286106ec565b5b602083019150836020820283011115610745576107446106f1565b5b9250929050565b60008060208385031215610763576107626106dd565b5b600083013567ffffffffffffffff811115610781576107806106e2565b5b61078d858286016106f6565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107c482610799565b9050919050565b6107d4816107b9565b81146107df57600080fd5b50565b6000813590506107f1816107cb565b92915050565b60006020828403121561080d5761080c6106dd565b5b600061081b848285016107e2565b91505092915050565b60008060006040848603121561083d5761083c6106dd565b5b600084013567ffffffffffffffff81111561085b5761085a6106e2565b5b610867868287016106f6565b9350935050602061087a868287016107e2565b9150509250925092565b61088d816107b9565b82525050565b60006020820190506108a86000830184610884565b92915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610921826108ae565b915061092c836108ae565b92508261093c5761093b6108b8565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000610981826108ae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036109b3576109b26108e7565b5b600182019050919050565b6109c7816108ae565b81146109d257600080fd5b50565b6000815190506109e4816109be565b92915050565b600060208284031215610a00576109ff6106dd565b5b6000610a0e848285016109d5565b91505092915050565b610a20816108ae565b82525050565b6000604082019050610a3b6000830185610884565b610a486020830184610a17565b9392505050565b60008115159050919050565b610a6481610a4f565b8114610a6f57600080fd5b50565b600081519050610a8181610a5b565b92915050565b600060208284031215610a9d57610a9c6106dd565b5b6000610aab84828501610a72565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610b21602683610ab4565b9150610b2c82610ac5565b604082019050919050565b60006020820190508181036000830152610b5081610b14565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610b8d602083610ab4565b9150610b9882610b57565b602082019050919050565b60006020820190508181036000830152610bbc81610b80565b905091905056fea2646970667358221220b32c42e20565b2eee6b85885fda98e5b09fe8ac74b908878c759ba7f540d3c5064736f6c63430008110033

Deployed ByteCode

0x6080604052600436106100705760003560e01c80636ecf13861161004e5780636ecf1386146100d1578063715018a6146100fa5780638da5cb5b14610111578063f2fde38b1461013c57610070565b80633b2fe781146100755780633ccfd60b1461009157806349df728c146100a8575b600080fd5b61008f600480360381019061008a919061074c565b610165565b005b34801561009d57600080fd5b506100a661020d565b005b3480156100b457600080fd5b506100cf60048036038101906100ca91906107f7565b61025e565b005b3480156100dd57600080fd5b506100f860048036038101906100f39190610824565b61036d565b005b34801561010657600080fd5b5061010f6104d3565b005b34801561011d57600080fd5b506101266104e7565b6040516101339190610893565b60405180910390f35b34801561014857600080fd5b50610163600480360381019061015e91906107f7565b610510565b005b600082829050346101769190610916565b905060005b838390508110156102075783838281811061019957610198610947565b5b90506020020160208101906101ae91906107f7565b73ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156101f3573d6000803e3d6000fd5b5080806101ff90610976565b91505061017b565b50505050565b610215610593565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561025b573d6000803e3d6000fd5b50565b610266610593565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016102a69190610893565b602060405180830381865afa1580156102c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e791906109ea565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610324929190610a26565b6020604051808303816000875af1158015610343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103679190610a87565b50505050565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016103ad9190610893565b602060405180830381865afa1580156103ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ee91906109ea565b9050600085859050826104019190610916565b905060005b868690508110156104ca578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8888848181106104405761043f610947565b5b905060200201602081019061045591906107f7565b846040518363ffffffff1660e01b8152600401610473929190610a26565b6020604051808303816000875af1158015610492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b69190610a87565b5080806104c290610976565b915050610406565b50505050505050565b6104db610593565b6104e56000610611565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610518610593565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057e90610b37565b60405180910390fd5b61059081610611565b50565b61059b6106d5565b73ffffffffffffffffffffffffffffffffffffffff166105b96104e7565b73ffffffffffffffffffffffffffffffffffffffff161461060f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060690610ba3565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261070c5761070b6106e7565b5b8235905067ffffffffffffffff811115610729576107286106ec565b5b602083019150836020820283011115610745576107446106f1565b5b9250929050565b60008060208385031215610763576107626106dd565b5b600083013567ffffffffffffffff811115610781576107806106e2565b5b61078d858286016106f6565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107c482610799565b9050919050565b6107d4816107b9565b81146107df57600080fd5b50565b6000813590506107f1816107cb565b92915050565b60006020828403121561080d5761080c6106dd565b5b600061081b848285016107e2565b91505092915050565b60008060006040848603121561083d5761083c6106dd565b5b600084013567ffffffffffffffff81111561085b5761085a6106e2565b5b610867868287016106f6565b9350935050602061087a868287016107e2565b9150509250925092565b61088d816107b9565b82525050565b60006020820190506108a86000830184610884565b92915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610921826108ae565b915061092c836108ae565b92508261093c5761093b6108b8565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000610981826108ae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036109b3576109b26108e7565b5b600182019050919050565b6109c7816108ae565b81146109d257600080fd5b50565b6000815190506109e4816109be565b92915050565b600060208284031215610a00576109ff6106dd565b5b6000610a0e848285016109d5565b91505092915050565b610a20816108ae565b82525050565b6000604082019050610a3b6000830185610884565b610a486020830184610a17565b9392505050565b60008115159050919050565b610a6481610a4f565b8114610a6f57600080fd5b50565b600081519050610a8181610a5b565b92915050565b600060208284031215610a9d57610a9c6106dd565b5b6000610aab84828501610a72565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610b21602683610ab4565b9150610b2c82610ac5565b604082019050919050565b60006020820190508181036000830152610b5081610b14565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610b8d602083610ab4565b9150610b9882610b57565b602082019050919050565b60006020820190508181036000830152610bbc81610b80565b905091905056fea2646970667358221220b32c42e20565b2eee6b85885fda98e5b09fe8ac74b908878c759ba7f540d3c5064736f6c63430008110033