More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 760 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake Nfts | 20281180 | 97 days ago | IN | 0 ETH | 0.0002781 | ||||
Unstake Nfts | 20249803 | 101 days ago | IN | 0 ETH | 0.00021208 | ||||
Unstake Nfts | 20249795 | 101 days ago | IN | 0 ETH | 0.00022504 | ||||
Unstake Nfts | 20179643 | 111 days ago | IN | 0 ETH | 0.00039896 | ||||
Unstake Nfts | 20171291 | 112 days ago | IN | 0 ETH | 0.00039251 | ||||
Unstake Nfts | 19904868 | 149 days ago | IN | 0 ETH | 0.00035544 | ||||
Stake Nfts | 19804191 | 163 days ago | IN | 0 ETH | 0.00016424 | ||||
Unstake Nfts | 19590505 | 193 days ago | IN | 0 ETH | 0.00077816 | ||||
Unstake Nfts | 18896407 | 290 days ago | IN | 0 ETH | 0.00138318 | ||||
Unstake Nfts | 18752743 | 311 days ago | IN | 0 ETH | 0.00350346 | ||||
Unstake Nfts | 18617987 | 330 days ago | IN | 0 ETH | 0.00327606 | ||||
Stake Nfts | 18572360 | 336 days ago | IN | 0 ETH | 0.00628548 | ||||
Stake Nfts | 18338837 | 369 days ago | IN | 0 ETH | 0.00089172 | ||||
Unstake Nfts | 18338670 | 369 days ago | IN | 0 ETH | 0.00017121 | ||||
Unstake Nfts | 18338663 | 369 days ago | IN | 0 ETH | 0.00015345 | ||||
Unstake Nfts | 18338658 | 369 days ago | IN | 0 ETH | 0.00015908 | ||||
Unstake Nfts | 18338655 | 369 days ago | IN | 0 ETH | 0.00017704 | ||||
Unstake Nfts | 18338649 | 369 days ago | IN | 0 ETH | 0.00045354 | ||||
Unstake Nfts | 18331343 | 370 days ago | IN | 0 ETH | 0.00049703 | ||||
Unstake Nfts | 18238929 | 383 days ago | IN | 0 ETH | 0.00058837 | ||||
Unstake Nfts | 18102671 | 402 days ago | IN | 0 ETH | 0.00076757 | ||||
Stake Nfts | 18008882 | 415 days ago | IN | 0 ETH | 0.00177525 | ||||
Unstake Nfts | 17864717 | 435 days ago | IN | 0 ETH | 0.00338447 | ||||
Unstake Nfts | 17805929 | 443 days ago | IN | 0 ETH | 0.00126365 | ||||
Unstake Nfts | 17797150 | 444 days ago | IN | 0 ETH | 0.0013536 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DoriStaking
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// @author: @gizmolab_ //SPDX-License-Identifier: MIT pragma solidity ^0.8.7; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract DoriStaking is Ownable { bool public stakingEnabled = false; bool public burnEnabled = false; uint256 public totalStaked; uint256 public baseReward = 5; address public doriGenesisContract; address public dori1776Contract; address public sweeperClubContract; struct Stake { address owner; // 32bits uint128 timestamp; // 32bits } struct Burn { address owner; // 32bits uint128 timestamp; // 32bits } mapping(address => mapping(uint256 => Stake)) public vault; mapping(address => mapping(address => uint256[])) public userStakeTokens; mapping(address => mapping(address => uint256[])) public userBurnTokens; mapping(address => bool) public isVaultContract; mapping(address => uint256) public vaultMultiplier; mapping(address => uint256) public burnClaimed; event NFTStaked( address owner, address tokenAddress, uint256 tokenId, uint256 value ); event NFTUnstaked( address owner, address tokenAddress, uint256 tokenId, uint256 value ); event NFTBurned( address owner, address tokenAddress, uint256 tokenId, uint256 value ); /*============================================================== == User Staking Functions == ==============================================================*/ function stakeNfts(address _contract, uint256[] calldata tokenIds) external { require(stakingEnabled == true, "Staking is not enabled yet."); require(isVaultContract[_contract] == true, "Contract not allowed"); IERC721 nftContract = IERC721(_contract); for (uint256 i; i < tokenIds.length; i++) { require( nftContract.ownerOf(tokenIds[i]) == msg.sender, "You do not own this token" ); nftContract.transferFrom(msg.sender, address(this), tokenIds[i]); vault[_contract][tokenIds[i]] = Stake( msg.sender, uint128(block.timestamp) ); userStakeTokens[msg.sender][_contract].push(tokenIds[i]); emit NFTStaked(msg.sender, _contract, tokenIds[i], block.timestamp); totalStaked++; } } function unstakeNfts(address _contract, uint256[] calldata tokenIds) external { require(stakingEnabled == true, "Staking is not enabled yet."); require(isVaultContract[_contract] == true, "Contract not allowed"); IERC721 nftContract = IERC721(_contract); for (uint256 i; i < tokenIds.length; i++) { bool isTokenOwner = false; uint256 tokenIndex = 0; for ( uint256 j; j < userStakeTokens[msg.sender][_contract].length; j++ ) { if (userStakeTokens[msg.sender][_contract][j] == tokenIds[i]) { isTokenOwner = true; tokenIndex = j; } } require(isTokenOwner == true, "You do not own this Token"); nftContract.transferFrom(address(this), msg.sender, tokenIds[i]); delete vault[_contract][tokenIds[i]]; totalStaked--; userStakeTokens[msg.sender][_contract][ tokenIndex ] = userStakeTokens[msg.sender][_contract][ userStakeTokens[msg.sender][_contract].length - 1 ]; userStakeTokens[msg.sender][_contract].pop(); emit NFTUnstaked( msg.sender, _contract, tokenIds[i], block.timestamp ); } } /*============================================================== == Burn Function == ==============================================================*/ function burnNfts(uint256[] calldata tokenIds) external { require(burnEnabled, "Burn is not yet Live"); require(dori1776Contract != address(0), "DoriGen2 Contract not set"); IERC721 nftContract = IERC721(dori1776Contract); for (uint256 i; i < tokenIds.length; i++) { bool isTokenOwner = false; uint256 tokenIndex = 0; for ( uint256 j; j < userStakeTokens[msg.sender][dori1776Contract].length; j++ ) { if ( userStakeTokens[msg.sender][dori1776Contract][j] == tokenIds[i] ) { isTokenOwner = true; tokenIndex = j; } } require(isTokenOwner == true, "You do not own this Token"); nftContract.transferFrom(address(this), address(0), tokenIds[i]); emit NFTBurned( msg.sender, dori1776Contract, tokenIds[i], block.timestamp ); uint256 reward = _calculateReward(msg.sender, dori1776Contract); burnClaimed[msg.sender] += reward; delete vault[dori1776Contract][tokenIds[i]]; totalStaked--; userBurnTokens[msg.sender][dori1776Contract].push(tokenIds[i]); userStakeTokens[msg.sender][dori1776Contract][ tokenIndex ] = userStakeTokens[msg.sender][dori1776Contract][ userStakeTokens[msg.sender][dori1776Contract].length - 1 ]; userStakeTokens[msg.sender][dori1776Contract].pop(); } } /*============================================================== == Public Get Functions == ==============================================================*/ function getStakedTokens(address _user, address _contract) external view returns (uint256[] memory) { return userStakeTokens[_user][_contract]; } function getBurnedTokens(address _user, address _contract) external view returns (uint256[] memory) { return userBurnTokens[_user][_contract]; } function getRewards(address _user, address[] calldata vaultContracts) external view returns (uint256) { uint256 reward = 0; uint256 i; for (i = 0; i < vaultContracts.length; i++) { reward += _calculateReward(_user, vaultContracts[i]); } if (burnClaimed[_user] > 0) { reward += burnClaimed[_user] * 1e18; } return reward; } function getBurnedRewards(address _user) external view returns (uint256) { return burnClaimed[_user]; } /*============================================================== == Owner Functions == ==============================================================*/ function addVault(address _contract, uint256 _multiplier) public onlyOwner { require(isVaultContract[_contract] == false, "Contract already added"); isVaultContract[_contract] = true; vaultMultiplier[_contract] = _multiplier; } function setStakingEnabled(bool _enabled) external onlyOwner { stakingEnabled = _enabled; } function setBaseReward(uint256 _reward) external onlyOwner { baseReward = _reward; } function setMultiplier(address _contract, uint256 _multiplier) external onlyOwner { require(isVaultContract[_contract] == true, "Contract not added"); vaultMultiplier[_contract] = _multiplier; } function setBurnEnabled(bool _enabled) external onlyOwner { burnEnabled = _enabled; } function setDori1776Contract(address _contract) external onlyOwner { dori1776Contract = _contract; } function setSweeperClubContract(address _contract) external onlyOwner { sweeperClubContract = _contract; } /*============================================================== == Reward Calculate Functions == ==============================================================*/ function _calculateReward(address _user, address _contract) internal view returns (uint256) { uint256 reward = 0; for (uint256 i; i < userStakeTokens[_user][_contract].length; i++) { uint256 token = userStakeTokens[_user][_contract][i]; uint256 timeSinceStake = block.timestamp - vault[_contract][token].timestamp; uint256 rewardPerToken = baseReward * vaultMultiplier[_contract]; reward += timeSinceStake * rewardPerToken * 1e18; } return reward / 86400; } }
// 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) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// 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 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; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NFTBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NFTStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NFTUnstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint256","name":"_multiplier","type":"uint256"}],"name":"addVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"baseReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"burnClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"burnNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dori1776Contract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"doriGenesisContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getBurnedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"_contract","type":"address"}],"name":"getBurnedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address[]","name":"vaultContracts","type":"address[]"}],"name":"getRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"_contract","type":"address"}],"name":"getStakedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isVaultContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_reward","type":"uint256"}],"name":"setBaseReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBurnEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"setDori1776Contract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint256","name":"_multiplier","type":"uint256"}],"name":"setMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setStakingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"setSweeperClubContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweeperClubContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userBurnTokens","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"}],"name":"userStakeTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"vault","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint128","name":"timestamp","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vaultMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260008060146101000a81548160ff02191690831515021790555060008060156101000a81548160ff02191690831515021790555060056002553480156200004a57600080fd5b506200006b6200005f6200007160201b60201c565b6200007960201b60201c565b6200013d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6134e5806200014d6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637b2c835f11610104578063bce8567e116100a2578063f3d942ec11610071578063f3d942ec1461052e578063f790e4271461055e578063fd9d142a1461058e578063fe3d1354146105be576101da565b8063bce8567e146104be578063d55944a9146104da578063e4aaccab146104f6578063f2fde38b14610512576101da565b80639471a8f0116100de5780639471a8f0146104385780639df7d47514610456578063b0459a9014610472578063b7bcc7111461048e576101da565b80637b2c835f146103e0578063817b1cd2146103fc5780638da5cb5b1461041a576101da565b80633d8e846e1161017c578063715018a61161014b578063715018a61461036c5780637319d65c1461037657806373a08ad51461039257806376ad03bc146103c2576101da565b80633d8e846e146102d15780633fa16d99146103015780635dc96d16146103325780636372df6a14610350576101da565b8063216c70bb116101b8578063216c70bb1461023557806328c64785146102655780632dd6ad7d1461028357806335960cb8146102a1576101da565b80630373a23a146101df5780630a0cd9cc146101fb5780631cfff51b14610217575b600080fd5b6101f960048036038101906101f49190612afb565b6105ee565b005b61021560048036038101906102109190612a81565b610600565b005b61021f610f5e565b60405161022c9190612e29565b60405180910390f35b61024f600480360381019061024a9190612894565b610f71565b60405161025c9190612f84565b60405180910390f35b61026d610fba565b60405161027a9190612d47565b60405180910390f35b61028b610fe0565b6040516102989190612d47565b60405180910390f35b6102bb60048036038101906102b691906128ee565b611006565b6040516102c89190612e07565b60405180910390f35b6102eb60048036038101906102e69190612981565b6110db565b6040516102f89190612f84565b60405180910390f35b61031b60048036038101906103169190612a41565b6111f6565b604051610329929190612dde565b60405180910390f35b61033a611263565b6040516103479190612e29565b60405180910390f35b61036a60048036038101906103659190612a41565b611276565b005b6103746113b1565b005b610390600480360381019061038b9190612a41565b6113c5565b005b6103ac60048036038101906103a79190612894565b6114a8565b6040516103b99190612f84565b60405180910390f35b6103ca6114c0565b6040516103d79190612f84565b60405180910390f35b6103fa60048036038101906103f59190612ace565b6114c6565b005b6104046114eb565b6040516104119190612f84565b60405180910390f35b6104226114f1565b60405161042f9190612d47565b60405180910390f35b61044061151a565b60405161044d9190612d47565b60405180910390f35b610470600480360381019061046b91906129e1565b611540565b005b61048c60048036038101906104879190612894565b611c0f565b005b6104a860048036038101906104a3919061292e565b611c5b565b6040516104b59190612f84565b60405180910390f35b6104d860048036038101906104d39190612ace565b611c99565b005b6104f460048036038101906104ef9190612894565b611cbe565b005b610510600480360381019061050b91906129e1565b611d0a565b005b61052c60048036038101906105279190612894565b612210565b005b61054860048036038101906105439190612894565b612294565b6040516105559190612e29565b60405180910390f35b61057860048036038101906105739190612894565b6122b4565b6040516105859190612f84565b60405180910390f35b6105a860048036038101906105a391906128ee565b6122cc565b6040516105b59190612e07565b60405180910390f35b6105d860048036038101906105d3919061292e565b6123a1565b6040516105e59190612f84565b60405180910390f35b6105f66123df565b8060028190555050565b600060159054906101000a900460ff1661064f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064690612ea4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156106e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d890612f04565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b83839050811015610f585760008060005b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156108bb578686858181106107d8576107d7613262565b5b90506020020135600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061088f5761088e613262565b5b906000526020600020015414156108a857600192508091505b80806108b39061318c565b91505061071c565b506001151582151514610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa90612f64565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd30600089898881811061093557610934613262565b5b905060200201356040518463ffffffff1660e01b815260040161095a93929190612d62565b600060405180830381600087803b15801561097457600080fd5b505af1158015610988573d6000803e3d6000fd5b505050507f75811404efd05ed2fdc7cad0fac817d632b1dbce60292ff81cdc096be419c77633600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168888878181106109e4576109e3613262565b5b90506020020135426040516109fc9493929190612d99565b60405180910390a16000610a3233600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661245d565b905080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a839190612fe9565b9250508190555060066000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000888887818110610b0057610aff613262565b5b905060200201358152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a8154906fffffffffffffffffffffffffffffffff0219169055505060016000815480929190610b7590613162565b9190505550600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020878786818110610c2b57610c2a613262565b5b905060200201359080600181540180825580915050600190039060005260206000200160009091909190915055600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050610da491906130ca565b81548110610db557610db4613262565b5b9060005260206000200154600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110610e7057610e6f613262565b5b9060005260206000200181905550600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480610f2c57610f2b613233565b5b600190038181906000526020600020016000905590555050508080610f509061318c565b91505061070b565b50505050565b600060149054906101000a900460ff1681565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156110ce57602002820191906000526020600020905b8154815260200190600101908083116110ba575b5050505050905092915050565b6000806000905060005b84849050811015611141576111218686868481811061110757611106613262565b5b905060200201602081019061111c9190612894565b61245d565b8261112c9190612fe9565b915080806111399061318c565b9150506110e5565b6000600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156111ea57670de0b6b3a7640000600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111dc9190613070565b826111e79190612fe9565b91505b81925050509392505050565b6006602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a90046fffffffffffffffffffffffffffffffff16905082565b600060159054906101000a900460ff1681565b61127e6123df565b60001515600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890612f44565b60405180910390fd5b6001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6113b96123df565b6113c360006126c8565b565b6113cd6123df565b60011515600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790612ee4565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600a6020528060005260406000206000915090505481565b60025481565b6114ce6123df565b80600060156101000a81548160ff02191690831515021790555050565b60015481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60011515600060149054906101000a900460ff16151514611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90612f24565b60405180910390fd5b60011515600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162090612e84565b60405180910390fd5b600083905060005b83839050811015611c085760008060005b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561179d578686858181106116dc576116db613262565b5b90506020020135600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061177157611770613262565b5b9060005260206000200154141561178a57600192508091505b80806117959061318c565b915050611642565b5060011515821515146117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc90612f64565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd303389898881811061181657611815613262565b5b905060200201356040518463ffffffff1660e01b815260040161183b93929190612d62565b600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b50505050600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008787868181106118c1576118c0613262565b5b905060200201358152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a8154906fffffffffffffffffffffffffffffffff021916905550506001600081548092919061193690613162565b9190505550600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050611a4391906130ca565b81548110611a5457611a53613262565b5b9060005260206000200154600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110611aed57611aec613262565b5b9060005260206000200181905550600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480611b8757611b86613233565b5b600190038181906000526020600020016000905590557f2cba55f1bc992f27ae3c165ae6392e6ccefcd891a59089721bf95afbb3976b723388888887818110611bd357611bd2613262565b5b9050602002013542604051611beb9493929190612d99565b60405180910390a150508080611c009061318c565b915050611631565b5050505050565b611c176123df565b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528260005260406000206020528160005260406000208181548110611c8357600080fd5b9060005260206000200160009250925050505481565b611ca16123df565b80600060146101000a81548160ff02191690831515021790555050565b611cc66123df565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60011515600060149054906101000a900460ff16151514611d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5790612f24565b60405180910390fd5b60011515600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea90612e84565b60405180910390fd5b600083905060005b83839050811015612209573373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e868685818110611e4c57611e4b613262565b5b905060200201356040518263ffffffff1660e01b8152600401611e6f9190612f84565b60206040518083038186803b158015611e8757600080fd5b505afa158015611e9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebf91906128c1565b73ffffffffffffffffffffffffffffffffffffffff1614611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c90612e44565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330878786818110611f4657611f45613262565b5b905060200201356040518463ffffffff1660e01b8152600401611f6b93929190612d62565b600060405180830381600087803b158015611f8557600080fd5b505af1158015611f99573d6000803e3d6000fd5b5050505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001426fffffffffffffffffffffffffffffffff16815250600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086868581811061202e5761202d613262565b5b90506020020135815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550905050600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084848381811061215b5761215a613262565b5b9050602002013590806001815401808255809150506001900390600052602060002001600090919091909150557feec9ba5bfbc4283796482d3f7c7e891a5375d4e02efefac262ba00280fc2608d33868686858181106121be576121bd613262565b5b90506020020135426040516121d69493929190612d99565b60405180910390a1600160008154809291906121f19061318c565b919050555080806122019061318c565b915050611dfb565b5050505050565b6122186123df565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227f90612e64565b60405180910390fd5b612291816126c8565b50565b60096020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915090505481565b6060600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561239457602002820191906000526020600020905b815481526020019060010190808311612380575b5050505050905092915050565b600760205282600052604060002060205281600052604060002081815481106123c957600080fd5b9060005260206000200160009250925050505481565b6123e761278c565b73ffffffffffffffffffffffffffffffffffffffff166124056114f1565b73ffffffffffffffffffffffffffffffffffffffff161461245b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245290612ec4565b60405180910390fd5b565b6000806000905060005b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156126af576000600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061257e5761257d613262565b5b906000526020600020015490506000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060010160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff164261261a91906130ca565b90506000600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460025461266b9190613070565b9050670de0b6b3a764000081836126829190613070565b61268c9190613070565b856126979190612fe9565b945050505080806126a79061318c565b915050612467565b5062015180816126bf919061303f565b91505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000813590506127a38161346a565b92915050565b6000815190506127b88161346a565b92915050565b60008083601f8401126127d4576127d3613296565b5b8235905067ffffffffffffffff8111156127f1576127f0613291565b5b60208301915083602082028301111561280d5761280c61329b565b5b9250929050565b60008083601f84011261282a57612829613296565b5b8235905067ffffffffffffffff81111561284757612846613291565b5b6020830191508360208202830111156128635761286261329b565b5b9250929050565b60008135905061287981613481565b92915050565b60008135905061288e81613498565b92915050565b6000602082840312156128aa576128a96132a5565b5b60006128b884828501612794565b91505092915050565b6000602082840312156128d7576128d66132a5565b5b60006128e5848285016127a9565b91505092915050565b60008060408385031215612905576129046132a5565b5b600061291385828601612794565b925050602061292485828601612794565b9150509250929050565b600080600060608486031215612947576129466132a5565b5b600061295586828701612794565b935050602061296686828701612794565b92505060406129778682870161287f565b9150509250925092565b60008060006040848603121561299a576129996132a5565b5b60006129a886828701612794565b935050602084013567ffffffffffffffff8111156129c9576129c86132a0565b5b6129d5868287016127be565b92509250509250925092565b6000806000604084860312156129fa576129f96132a5565b5b6000612a0886828701612794565b935050602084013567ffffffffffffffff811115612a2957612a286132a0565b5b612a3586828701612814565b92509250509250925092565b60008060408385031215612a5857612a576132a5565b5b6000612a6685828601612794565b9250506020612a778582860161287f565b9150509250929050565b60008060208385031215612a9857612a976132a5565b5b600083013567ffffffffffffffff811115612ab657612ab56132a0565b5b612ac285828601612814565b92509250509250929050565b600060208284031215612ae457612ae36132a5565b5b6000612af28482850161286a565b91505092915050565b600060208284031215612b1157612b106132a5565b5b6000612b1f8482850161287f565b91505092915050565b6000612b348383612d29565b60208301905092915050565b612b49816130fe565b82525050565b6000612b5a82612faf565b612b648185612fc7565b9350612b6f83612f9f565b8060005b83811015612ba0578151612b878882612b28565b9750612b9283612fba565b925050600181019050612b73565b5085935050505092915050565b612bb681613110565b82525050565b6000612bc9601983612fd8565b9150612bd4826132aa565b602082019050919050565b6000612bec602683612fd8565b9150612bf7826132d3565b604082019050919050565b6000612c0f601483612fd8565b9150612c1a82613322565b602082019050919050565b6000612c32601483612fd8565b9150612c3d8261334b565b602082019050919050565b6000612c55602083612fd8565b9150612c6082613374565b602082019050919050565b6000612c78601283612fd8565b9150612c838261339d565b602082019050919050565b6000612c9b601983612fd8565b9150612ca6826133c6565b602082019050919050565b6000612cbe601b83612fd8565b9150612cc9826133ef565b602082019050919050565b6000612ce1601683612fd8565b9150612cec82613418565b602082019050919050565b6000612d04601983612fd8565b9150612d0f82613441565b602082019050919050565b612d238161311c565b82525050565b612d3281613158565b82525050565b612d4181613158565b82525050565b6000602082019050612d5c6000830184612b40565b92915050565b6000606082019050612d776000830186612b40565b612d846020830185612b40565b612d916040830184612d38565b949350505050565b6000608082019050612dae6000830187612b40565b612dbb6020830186612b40565b612dc86040830185612d38565b612dd56060830184612d38565b95945050505050565b6000604082019050612df36000830185612b40565b612e006020830184612d1a565b9392505050565b60006020820190508181036000830152612e218184612b4f565b905092915050565b6000602082019050612e3e6000830184612bad565b92915050565b60006020820190508181036000830152612e5d81612bbc565b9050919050565b60006020820190508181036000830152612e7d81612bdf565b9050919050565b60006020820190508181036000830152612e9d81612c02565b9050919050565b60006020820190508181036000830152612ebd81612c25565b9050919050565b60006020820190508181036000830152612edd81612c48565b9050919050565b60006020820190508181036000830152612efd81612c6b565b9050919050565b60006020820190508181036000830152612f1d81612c8e565b9050919050565b60006020820190508181036000830152612f3d81612cb1565b9050919050565b60006020820190508181036000830152612f5d81612cd4565b9050919050565b60006020820190508181036000830152612f7d81612cf7565b9050919050565b6000602082019050612f996000830184612d38565b92915050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612ff482613158565b9150612fff83613158565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613034576130336131d5565b5b828201905092915050565b600061304a82613158565b915061305583613158565b92508261306557613064613204565b5b828204905092915050565b600061307b82613158565b915061308683613158565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156130bf576130be6131d5565b5b828202905092915050565b60006130d582613158565b91506130e083613158565b9250828210156130f3576130f26131d5565b5b828203905092915050565b600061310982613138565b9050919050565b60008115159050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061316d82613158565b91506000821415613181576131806131d5565b5b600182039050919050565b600061319782613158565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156131ca576131c96131d5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b7f596f7520646f206e6f74206f776e207468697320746f6b656e00000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206e6f7420616c6c6f776564000000000000000000000000600082015250565b7f4275726e206973206e6f7420796574204c697665000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f436f6e7472616374206e6f742061646465640000000000000000000000000000600082015250565b7f446f726947656e3220436f6e7472616374206e6f742073657400000000000000600082015250565b7f5374616b696e67206973206e6f7420656e61626c6564207965742e0000000000600082015250565b7f436f6e747261637420616c726561647920616464656400000000000000000000600082015250565b7f596f7520646f206e6f74206f776e207468697320546f6b656e00000000000000600082015250565b613473816130fe565b811461347e57600080fd5b50565b61348a81613110565b811461349557600080fd5b50565b6134a181613158565b81146134ac57600080fd5b5056fea2646970667358221220bfb88cda6d1dea42c301051f291d29d41d228746e84f742290b9b660d150d50b64736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80637b2c835f11610104578063bce8567e116100a2578063f3d942ec11610071578063f3d942ec1461052e578063f790e4271461055e578063fd9d142a1461058e578063fe3d1354146105be576101da565b8063bce8567e146104be578063d55944a9146104da578063e4aaccab146104f6578063f2fde38b14610512576101da565b80639471a8f0116100de5780639471a8f0146104385780639df7d47514610456578063b0459a9014610472578063b7bcc7111461048e576101da565b80637b2c835f146103e0578063817b1cd2146103fc5780638da5cb5b1461041a576101da565b80633d8e846e1161017c578063715018a61161014b578063715018a61461036c5780637319d65c1461037657806373a08ad51461039257806376ad03bc146103c2576101da565b80633d8e846e146102d15780633fa16d99146103015780635dc96d16146103325780636372df6a14610350576101da565b8063216c70bb116101b8578063216c70bb1461023557806328c64785146102655780632dd6ad7d1461028357806335960cb8146102a1576101da565b80630373a23a146101df5780630a0cd9cc146101fb5780631cfff51b14610217575b600080fd5b6101f960048036038101906101f49190612afb565b6105ee565b005b61021560048036038101906102109190612a81565b610600565b005b61021f610f5e565b60405161022c9190612e29565b60405180910390f35b61024f600480360381019061024a9190612894565b610f71565b60405161025c9190612f84565b60405180910390f35b61026d610fba565b60405161027a9190612d47565b60405180910390f35b61028b610fe0565b6040516102989190612d47565b60405180910390f35b6102bb60048036038101906102b691906128ee565b611006565b6040516102c89190612e07565b60405180910390f35b6102eb60048036038101906102e69190612981565b6110db565b6040516102f89190612f84565b60405180910390f35b61031b60048036038101906103169190612a41565b6111f6565b604051610329929190612dde565b60405180910390f35b61033a611263565b6040516103479190612e29565b60405180910390f35b61036a60048036038101906103659190612a41565b611276565b005b6103746113b1565b005b610390600480360381019061038b9190612a41565b6113c5565b005b6103ac60048036038101906103a79190612894565b6114a8565b6040516103b99190612f84565b60405180910390f35b6103ca6114c0565b6040516103d79190612f84565b60405180910390f35b6103fa60048036038101906103f59190612ace565b6114c6565b005b6104046114eb565b6040516104119190612f84565b60405180910390f35b6104226114f1565b60405161042f9190612d47565b60405180910390f35b61044061151a565b60405161044d9190612d47565b60405180910390f35b610470600480360381019061046b91906129e1565b611540565b005b61048c60048036038101906104879190612894565b611c0f565b005b6104a860048036038101906104a3919061292e565b611c5b565b6040516104b59190612f84565b60405180910390f35b6104d860048036038101906104d39190612ace565b611c99565b005b6104f460048036038101906104ef9190612894565b611cbe565b005b610510600480360381019061050b91906129e1565b611d0a565b005b61052c60048036038101906105279190612894565b612210565b005b61054860048036038101906105439190612894565b612294565b6040516105559190612e29565b60405180910390f35b61057860048036038101906105739190612894565b6122b4565b6040516105859190612f84565b60405180910390f35b6105a860048036038101906105a391906128ee565b6122cc565b6040516105b59190612e07565b60405180910390f35b6105d860048036038101906105d3919061292e565b6123a1565b6040516105e59190612f84565b60405180910390f35b6105f66123df565b8060028190555050565b600060159054906101000a900460ff1661064f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064690612ea4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156106e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d890612f04565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b83839050811015610f585760008060005b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156108bb578686858181106107d8576107d7613262565b5b90506020020135600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061088f5761088e613262565b5b906000526020600020015414156108a857600192508091505b80806108b39061318c565b91505061071c565b506001151582151514610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa90612f64565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd30600089898881811061093557610934613262565b5b905060200201356040518463ffffffff1660e01b815260040161095a93929190612d62565b600060405180830381600087803b15801561097457600080fd5b505af1158015610988573d6000803e3d6000fd5b505050507f75811404efd05ed2fdc7cad0fac817d632b1dbce60292ff81cdc096be419c77633600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168888878181106109e4576109e3613262565b5b90506020020135426040516109fc9493929190612d99565b60405180910390a16000610a3233600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661245d565b905080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a839190612fe9565b9250508190555060066000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000888887818110610b0057610aff613262565b5b905060200201358152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a8154906fffffffffffffffffffffffffffffffff0219169055505060016000815480929190610b7590613162565b9190505550600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020878786818110610c2b57610c2a613262565b5b905060200201359080600181540180825580915050600190039060005260206000200160009091909190915055600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050610da491906130ca565b81548110610db557610db4613262565b5b9060005260206000200154600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110610e7057610e6f613262565b5b9060005260206000200181905550600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480610f2c57610f2b613233565b5b600190038181906000526020600020016000905590555050508080610f509061318c565b91505061070b565b50505050565b600060149054906101000a900460ff1681565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156110ce57602002820191906000526020600020905b8154815260200190600101908083116110ba575b5050505050905092915050565b6000806000905060005b84849050811015611141576111218686868481811061110757611106613262565b5b905060200201602081019061111c9190612894565b61245d565b8261112c9190612fe9565b915080806111399061318c565b9150506110e5565b6000600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156111ea57670de0b6b3a7640000600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111dc9190613070565b826111e79190612fe9565b91505b81925050509392505050565b6006602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a90046fffffffffffffffffffffffffffffffff16905082565b600060159054906101000a900460ff1681565b61127e6123df565b60001515600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890612f44565b60405180910390fd5b6001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6113b96123df565b6113c360006126c8565b565b6113cd6123df565b60011515600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790612ee4565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600a6020528060005260406000206000915090505481565b60025481565b6114ce6123df565b80600060156101000a81548160ff02191690831515021790555050565b60015481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60011515600060149054906101000a900460ff16151514611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90612f24565b60405180910390fd5b60011515600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162090612e84565b60405180910390fd5b600083905060005b83839050811015611c085760008060005b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561179d578686858181106116dc576116db613262565b5b90506020020135600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061177157611770613262565b5b9060005260206000200154141561178a57600192508091505b80806117959061318c565b915050611642565b5060011515821515146117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc90612f64565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd303389898881811061181657611815613262565b5b905060200201356040518463ffffffff1660e01b815260040161183b93929190612d62565b600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b50505050600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008787868181106118c1576118c0613262565b5b905060200201358152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a8154906fffffffffffffffffffffffffffffffff021916905550506001600081548092919061193690613162565b9190505550600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050611a4391906130ca565b81548110611a5457611a53613262565b5b9060005260206000200154600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110611aed57611aec613262565b5b9060005260206000200181905550600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480611b8757611b86613233565b5b600190038181906000526020600020016000905590557f2cba55f1bc992f27ae3c165ae6392e6ccefcd891a59089721bf95afbb3976b723388888887818110611bd357611bd2613262565b5b9050602002013542604051611beb9493929190612d99565b60405180910390a150508080611c009061318c565b915050611631565b5050505050565b611c176123df565b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528260005260406000206020528160005260406000208181548110611c8357600080fd5b9060005260206000200160009250925050505481565b611ca16123df565b80600060146101000a81548160ff02191690831515021790555050565b611cc66123df565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60011515600060149054906101000a900460ff16151514611d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5790612f24565b60405180910390fd5b60011515600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea90612e84565b60405180910390fd5b600083905060005b83839050811015612209573373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e868685818110611e4c57611e4b613262565b5b905060200201356040518263ffffffff1660e01b8152600401611e6f9190612f84565b60206040518083038186803b158015611e8757600080fd5b505afa158015611e9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebf91906128c1565b73ffffffffffffffffffffffffffffffffffffffff1614611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c90612e44565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330878786818110611f4657611f45613262565b5b905060200201356040518463ffffffff1660e01b8152600401611f6b93929190612d62565b600060405180830381600087803b158015611f8557600080fd5b505af1158015611f99573d6000803e3d6000fd5b5050505060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001426fffffffffffffffffffffffffffffffff16815250600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086868581811061202e5761202d613262565b5b90506020020135815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550905050600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084848381811061215b5761215a613262565b5b9050602002013590806001815401808255809150506001900390600052602060002001600090919091909150557feec9ba5bfbc4283796482d3f7c7e891a5375d4e02efefac262ba00280fc2608d33868686858181106121be576121bd613262565b5b90506020020135426040516121d69493929190612d99565b60405180910390a1600160008154809291906121f19061318c565b919050555080806122019061318c565b915050611dfb565b5050505050565b6122186123df565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227f90612e64565b60405180910390fd5b612291816126c8565b50565b60096020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915090505481565b6060600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561239457602002820191906000526020600020905b815481526020019060010190808311612380575b5050505050905092915050565b600760205282600052604060002060205281600052604060002081815481106123c957600080fd5b9060005260206000200160009250925050505481565b6123e761278c565b73ffffffffffffffffffffffffffffffffffffffff166124056114f1565b73ffffffffffffffffffffffffffffffffffffffff161461245b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245290612ec4565b60405180910390fd5b565b6000806000905060005b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156126af576000600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061257e5761257d613262565b5b906000526020600020015490506000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060010160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff164261261a91906130ca565b90506000600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460025461266b9190613070565b9050670de0b6b3a764000081836126829190613070565b61268c9190613070565b856126979190612fe9565b945050505080806126a79061318c565b915050612467565b5062015180816126bf919061303f565b91505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000813590506127a38161346a565b92915050565b6000815190506127b88161346a565b92915050565b60008083601f8401126127d4576127d3613296565b5b8235905067ffffffffffffffff8111156127f1576127f0613291565b5b60208301915083602082028301111561280d5761280c61329b565b5b9250929050565b60008083601f84011261282a57612829613296565b5b8235905067ffffffffffffffff81111561284757612846613291565b5b6020830191508360208202830111156128635761286261329b565b5b9250929050565b60008135905061287981613481565b92915050565b60008135905061288e81613498565b92915050565b6000602082840312156128aa576128a96132a5565b5b60006128b884828501612794565b91505092915050565b6000602082840312156128d7576128d66132a5565b5b60006128e5848285016127a9565b91505092915050565b60008060408385031215612905576129046132a5565b5b600061291385828601612794565b925050602061292485828601612794565b9150509250929050565b600080600060608486031215612947576129466132a5565b5b600061295586828701612794565b935050602061296686828701612794565b92505060406129778682870161287f565b9150509250925092565b60008060006040848603121561299a576129996132a5565b5b60006129a886828701612794565b935050602084013567ffffffffffffffff8111156129c9576129c86132a0565b5b6129d5868287016127be565b92509250509250925092565b6000806000604084860312156129fa576129f96132a5565b5b6000612a0886828701612794565b935050602084013567ffffffffffffffff811115612a2957612a286132a0565b5b612a3586828701612814565b92509250509250925092565b60008060408385031215612a5857612a576132a5565b5b6000612a6685828601612794565b9250506020612a778582860161287f565b9150509250929050565b60008060208385031215612a9857612a976132a5565b5b600083013567ffffffffffffffff811115612ab657612ab56132a0565b5b612ac285828601612814565b92509250509250929050565b600060208284031215612ae457612ae36132a5565b5b6000612af28482850161286a565b91505092915050565b600060208284031215612b1157612b106132a5565b5b6000612b1f8482850161287f565b91505092915050565b6000612b348383612d29565b60208301905092915050565b612b49816130fe565b82525050565b6000612b5a82612faf565b612b648185612fc7565b9350612b6f83612f9f565b8060005b83811015612ba0578151612b878882612b28565b9750612b9283612fba565b925050600181019050612b73565b5085935050505092915050565b612bb681613110565b82525050565b6000612bc9601983612fd8565b9150612bd4826132aa565b602082019050919050565b6000612bec602683612fd8565b9150612bf7826132d3565b604082019050919050565b6000612c0f601483612fd8565b9150612c1a82613322565b602082019050919050565b6000612c32601483612fd8565b9150612c3d8261334b565b602082019050919050565b6000612c55602083612fd8565b9150612c6082613374565b602082019050919050565b6000612c78601283612fd8565b9150612c838261339d565b602082019050919050565b6000612c9b601983612fd8565b9150612ca6826133c6565b602082019050919050565b6000612cbe601b83612fd8565b9150612cc9826133ef565b602082019050919050565b6000612ce1601683612fd8565b9150612cec82613418565b602082019050919050565b6000612d04601983612fd8565b9150612d0f82613441565b602082019050919050565b612d238161311c565b82525050565b612d3281613158565b82525050565b612d4181613158565b82525050565b6000602082019050612d5c6000830184612b40565b92915050565b6000606082019050612d776000830186612b40565b612d846020830185612b40565b612d916040830184612d38565b949350505050565b6000608082019050612dae6000830187612b40565b612dbb6020830186612b40565b612dc86040830185612d38565b612dd56060830184612d38565b95945050505050565b6000604082019050612df36000830185612b40565b612e006020830184612d1a565b9392505050565b60006020820190508181036000830152612e218184612b4f565b905092915050565b6000602082019050612e3e6000830184612bad565b92915050565b60006020820190508181036000830152612e5d81612bbc565b9050919050565b60006020820190508181036000830152612e7d81612bdf565b9050919050565b60006020820190508181036000830152612e9d81612c02565b9050919050565b60006020820190508181036000830152612ebd81612c25565b9050919050565b60006020820190508181036000830152612edd81612c48565b9050919050565b60006020820190508181036000830152612efd81612c6b565b9050919050565b60006020820190508181036000830152612f1d81612c8e565b9050919050565b60006020820190508181036000830152612f3d81612cb1565b9050919050565b60006020820190508181036000830152612f5d81612cd4565b9050919050565b60006020820190508181036000830152612f7d81612cf7565b9050919050565b6000602082019050612f996000830184612d38565b92915050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612ff482613158565b9150612fff83613158565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613034576130336131d5565b5b828201905092915050565b600061304a82613158565b915061305583613158565b92508261306557613064613204565b5b828204905092915050565b600061307b82613158565b915061308683613158565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156130bf576130be6131d5565b5b828202905092915050565b60006130d582613158565b91506130e083613158565b9250828210156130f3576130f26131d5565b5b828203905092915050565b600061310982613138565b9050919050565b60008115159050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061316d82613158565b91506000821415613181576131806131d5565b5b600182039050919050565b600061319782613158565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156131ca576131c96131d5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b7f596f7520646f206e6f74206f776e207468697320746f6b656e00000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206e6f7420616c6c6f776564000000000000000000000000600082015250565b7f4275726e206973206e6f7420796574204c697665000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f436f6e7472616374206e6f742061646465640000000000000000000000000000600082015250565b7f446f726947656e3220436f6e7472616374206e6f742073657400000000000000600082015250565b7f5374616b696e67206973206e6f7420656e61626c6564207965742e0000000000600082015250565b7f436f6e747261637420616c726561647920616464656400000000000000000000600082015250565b7f596f7520646f206e6f74206f776e207468697320546f6b656e00000000000000600082015250565b613473816130fe565b811461347e57600080fd5b50565b61348a81613110565b811461349557600080fd5b50565b6134a181613158565b81146134ac57600080fd5b5056fea2646970667358221220bfb88cda6d1dea42c301051f291d29d41d228746e84f742290b9b660d150d50b64736f6c63430008070033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.