More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 364 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 21693486 | 32 days ago | IN | 0 ETH | 0.00064344 | ||||
Withdraw | 21667813 | 36 days ago | IN | 0 ETH | 0.00138482 | ||||
Withdraw | 21469103 | 63 days ago | IN | 0 ETH | 0.00045269 | ||||
Withdraw | 21469054 | 63 days ago | IN | 0 ETH | 0.00041048 | ||||
Claim Reward | 21365703 | 78 days ago | IN | 0 ETH | 0.00103008 | ||||
Un Stake | 21354236 | 79 days ago | IN | 0 ETH | 0.00084788 | ||||
Claim Reward | 21348970 | 80 days ago | IN | 0 ETH | 0.00037371 | ||||
Claim Reward | 21348925 | 80 days ago | IN | 0 ETH | 0.00037257 | ||||
Claim Reward | 21308599 | 86 days ago | IN | 0 ETH | 0.00075868 | ||||
Un Stake | 21308583 | 86 days ago | IN | 0 ETH | 0.00239322 | ||||
Claim Reward | 21308526 | 86 days ago | IN | 0 ETH | 0.00070648 | ||||
Claim Reward | 21308512 | 86 days ago | IN | 0 ETH | 0.00069251 | ||||
Un Stake | 21295747 | 87 days ago | IN | 0 ETH | 0.00098793 | ||||
Un Stake | 21275557 | 90 days ago | IN | 0 ETH | 0.00255937 | ||||
Claim Reward | 21275538 | 90 days ago | IN | 0 ETH | 0.00040989 | ||||
Claim Reward | 21275532 | 90 days ago | IN | 0 ETH | 0.00039951 | ||||
Claim Reward | 21275527 | 90 days ago | IN | 0 ETH | 0.00038039 | ||||
Un Stake | 21186647 | 103 days ago | IN | 0 ETH | 0.00419152 | ||||
Claim Reward | 21186643 | 103 days ago | IN | 0 ETH | 0.00122455 | ||||
Claim Reward | 21186636 | 103 days ago | IN | 0 ETH | 0.00122236 | ||||
Claim Reward | 21186622 | 103 days ago | IN | 0 ETH | 0.00137545 | ||||
Transfer | 21186475 | 103 days ago | IN | 0.003 ETH | 0.0008218 | ||||
Claim Reward | 21186430 | 103 days ago | IN | 0 ETH | 0.00108915 | ||||
Un Stake | 21019607 | 126 days ago | IN | 0 ETH | 0.00062924 | ||||
Un Stake | 20967527 | 133 days ago | IN | 0 ETH | 0.00134338 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
StakeNFT
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Unlicense pragma solidity ^0.8.7; // import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; // import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; // import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; 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); } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved( uint256 tokenId ) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll( address owner, address operator ) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer( address recipient, uint256 amount ) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @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 ); } contract StakeNFT { //State variabble uint private _stakingId = 0; uint private _totalStaked = 0; address private constant NFTToken = 0x0FCBD68251819928C8f6D182fC04bE733fA94170; address private constant REWARDToken = 0x6982508145454Ce325dDbE47a25d4ec3d2311933; address private admin; uint private constant rate = 36_000_000e18; // per staking for 90 days uint private constant startTimestamp = 1694332800; // September 10th 2023, 00:00 PST uint private endTimestamp = startTimestamp + 90 days; // December 9th 2023, 00:00 PST (default of 90 days staking period) bool private _started; //constructor constructor() { admin = msg.sender; } //enumerator enum StakingStatus { InActive, Active, Cancelled } //structs struct Staking { address staker; address token; uint256 tokenId; uint256 stakeTime; uint256 releaseTime; uint256 claimedAmount; StakingStatus status; uint256 StakingId; } //mapping mapping(address => uint256) private stakedCount; mapping(uint256 => Staking) private _StakedItem; //event event tokenStaked( address indexed staker, address indexed token, uint256 token_id, StakingStatus status, uint256 StakingId ); event tokenClaimStatus( address indexed token, uint256 indexed token_id, StakingStatus indexed status, uint256 StakingId ); event tokenClaimComplete( address indexed token, uint256 indexed token_id, StakingStatus indexed status, uint256 StakingId ); event tokenCancelComplete( address indexed token, uint256 indexed token_id, StakingStatus indexed status, uint256 StakingId ); //function to call another function function callStakeToken(address token, uint256[] memory _tokenID) public { require(_started == true, "Staking is paused"); require(block.timestamp >= startTimestamp, "Staking period not started"); require(block.timestamp < endTimestamp, "Staking period is over"); require(token == NFTToken, "incorrect NFT to stake"); // hardcode the NFT smart contract to allow only specific NFT into staking, assume 0xd2...d005 as NFT contract address require(_tokenID.length > 0, "You have to select tokens to be staked"); require( stakedCount[msg.sender] + _tokenID.length <= 20, "you can stake up to 20 tokens" ); stakeToken(_tokenID); } //function to transfer NFT from user to contract function stakeToken(uint256[] memory tokenId) private { uint256 releaseTime = block.timestamp; require(_totalStaked + tokenId.length <= 500, "max stake amount reached"); for (uint256 i = 0; i < tokenId.length; i++) { IERC721(NFTToken).transferFrom( msg.sender, address(this), tokenId[i] ); // User must approve() this contract address via the NFT ERC721 contract before NFT can be transfered uint256 currentStakingId = _stakingId; Staking memory staking = Staking( msg.sender, NFTToken, tokenId[i], releaseTime, releaseTime, 0, StakingStatus.Active, currentStakingId ); _StakedItem[_stakingId] = staking; _stakingId++; _totalStaked++; emit tokenStaked( msg.sender, staking.token, staking.tokenId, staking.status, currentStakingId ); } stakedCount[msg.sender] += tokenId.length; } //function to view staked NFT function viewStake(uint256 stakingId) public view returns (Staking memory) { return _StakedItem[stakingId]; } // function to get list of staked tokens function viewMyStakedNfts(address user) external view returns (Staking[] memory) { Staking[] memory list = new Staking[](stakedCount[user]); uint256 cnt = 0; for (uint256 index = 0; index < _stakingId; index++){ if(_StakedItem[index].staker == user && _StakedItem[index].status == StakingStatus.Active) { list[cnt++] = _StakedItem[index]; } } return list; } //function to check NFT stake duration status function checkStake( uint256 stakingId, address staker ) public returns (Staking memory) { Staking storage staking = _StakedItem[stakingId]; require( staker == msg.sender, "You cannot check this staking as it is not listed under this address" ); require( staking.status == StakingStatus.Active, "Staking is not active or claimed" ); emit tokenClaimStatus( staking.token, staking.tokenId, staking.status, staking.StakingId ); return _StakedItem[stakingId]; } //function to claim reward token if NFT stake duration is completed function claimReward(uint256 stakingId) public { uint256 amount; Staking storage staking = _StakedItem[stakingId]; require( staking.staker == msg.sender, "You cannot cancel this staking as it is not listed under this address" ); require( staking.status == StakingStatus.Active, "Your reward is either not claimable yet or has been claimed" ); uint256 maxTimestamp = endTimestamp; uint256 curTimestamp = block.timestamp; uint256 releaseTime = curTimestamp < maxTimestamp ? curTimestamp : maxTimestamp; if (releaseTime <= staking.releaseTime) return; amount = (rate / 90 days) * (releaseTime - staking.releaseTime); uint256 balance = IERC20(REWARDToken).balanceOf(address(this)); if (balance < amount) { amount = balance; } staking.releaseTime = releaseTime; staking.claimedAmount += amount; emit tokenClaimComplete( staking.token, staking.tokenId, staking.status, staking.StakingId ); if (amount != 0) { IERC20(REWARDToken).transfer(msg.sender, amount); } } //function to cancel NFT stake function unStake(uint256[] memory stakingId) public { require( stakingId.length > 0, "You have to select tokens to be unstaked" ); for (uint256 i = 0; i < stakingId.length; i++) { Staking storage staking = _StakedItem[stakingId[i]]; claimReward(stakingId[i]); staking.status = StakingStatus.Cancelled; IERC721(staking.token).transferFrom( address(this), msg.sender, staking.tokenId ); _totalStaked--; emit tokenCancelComplete( staking.token, staking.tokenId, staking.status, staking.StakingId ); } stakedCount[msg.sender] -= stakingId.length; } function withdraw(uint256 amount) public onlyAdmin { IERC20(REWARDToken).transfer(msg.sender, amount); } function toggleStake(bool newStat) public onlyAdmin { _started = newStat; } function setEnd(uint256 newEndTimestamp) public onlyAdmin { require(newEndTimestamp > block.timestamp, "Cannot set end in the past"); require(newEndTimestamp > startTimestamp, "Cannot set end before start"); require(newEndTimestamp < endTimestamp, "Cannot extend staking period"); endTimestamp = newEndTimestamp; } function getRewardRate() external pure returns (uint256) { return rate; } function getNFTAddress() external pure returns (address) { return NFTToken; } function getRewardToken() external pure returns (address) { return REWARDToken; } function getStakingIndex() external view returns (uint256) { return _stakingId; } function getTotalStaked() external view returns (uint256) { return _totalStaked; } modifier onlyAdmin() { require(admin == msg.sender, "OA"); _; } function setNewAdmin(address newAdd) external onlyAdmin { admin = newAdd; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"token_id","type":"uint256"},{"indexed":true,"internalType":"enum StakeNFT.StakingStatus","name":"status","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"StakingId","type":"uint256"}],"name":"tokenCancelComplete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"token_id","type":"uint256"},{"indexed":true,"internalType":"enum StakeNFT.StakingStatus","name":"status","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"StakingId","type":"uint256"}],"name":"tokenClaimComplete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"token_id","type":"uint256"},{"indexed":true,"internalType":"enum StakeNFT.StakingStatus","name":"status","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"StakingId","type":"uint256"}],"name":"tokenClaimStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"token_id","type":"uint256"},{"indexed":false,"internalType":"enum StakeNFT.StakingStatus","name":"status","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"StakingId","type":"uint256"}],"name":"tokenStaked","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256[]","name":"_tokenID","type":"uint256[]"}],"name":"callStakeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakingId","type":"uint256"},{"internalType":"address","name":"staker","type":"address"}],"name":"checkStake","outputs":[{"components":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"releaseTime","type":"uint256"},{"internalType":"uint256","name":"claimedAmount","type":"uint256"},{"internalType":"enum StakeNFT.StakingStatus","name":"status","type":"uint8"},{"internalType":"uint256","name":"StakingId","type":"uint256"}],"internalType":"struct StakeNFT.Staking","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakingId","type":"uint256"}],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getNFTAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getRewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getStakingIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newEndTimestamp","type":"uint256"}],"name":"setEnd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdd","type":"address"}],"name":"setNewAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStat","type":"bool"}],"name":"toggleStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"stakingId","type":"uint256[]"}],"name":"unStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"viewMyStakedNfts","outputs":[{"components":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"releaseTime","type":"uint256"},{"internalType":"uint256","name":"claimedAmount","type":"uint256"},{"internalType":"enum StakeNFT.StakingStatus","name":"status","type":"uint8"},{"internalType":"uint256","name":"StakingId","type":"uint256"}],"internalType":"struct StakeNFT.Staking[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakingId","type":"uint256"}],"name":"viewStake","outputs":[{"components":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"releaseTime","type":"uint256"},{"internalType":"uint256","name":"claimedAmount","type":"uint256"},{"internalType":"enum StakeNFT.StakingStatus","name":"status","type":"uint8"},{"internalType":"uint256","name":"StakingId","type":"uint256"}],"internalType":"struct StakeNFT.Staking","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000805560006001556276a7006364fd7780620000229190620000b3565b6003553480156200003257600080fd5b5033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000ee565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620000c0826200007a565b9150620000cd836200007a565b9250828201905080821115620000e857620000e762000084565b5b92915050565b612ceb80620000fe6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80637e1a378611610097578063ae169a5011610066578063ae169a5014610272578063b10dcc931461028e578063b9618478146102aa578063bca81652146102c8576100f5565b80637e1a3786146102005780637f498ffc1461021e578063819241071461023a5780638eec99c814610256576100f5565b80635074e0c8116100d35780635074e0c8146101645780635ab58b151461018257806369940d79146101b257806379813f14146101d0576100f5565b80630917e776146100fa57806323691677146101185780632e1a7d4d14610148575b600080fd5b6101026102e4565b60405161010f9190611b30565b60405180910390f35b610132600480360381019061012d9190611b8b565b6102ee565b60405161013f9190611d21565b60405180910390f35b610162600480360381019061015d9190611b8b565b610435565b005b61016c61055b565b6040516101799190611b30565b60405180910390f35b61019c60048036038101906101979190611d69565b610564565b6040516101a99190611d21565b60405180910390f35b6101ba610849565b6040516101c79190611db8565b60405180910390f35b6101ea60048036038101906101e59190611dd3565b610865565b6040516101f79190611f52565b60405180910390f35b610208610b4a565b6040516102159190611b30565b60405180910390f35b61023860048036038101906102339190611b8b565b610b5d565b005b610254600480360381019061024f91906120cd565b610cc3565b005b610270600480360381019061026b9190611dd3565b610f06565b005b61028c60048036038101906102879190611b8b565b610fda565b005b6102a860048036038101906102a39190612129565b61136d565b005b6102b26115fb565b6040516102bf9190611db8565b60405180910390f35b6102e260048036038101906102dd91906121aa565b611617565b005b6000600154905090565b6102f6611a94565b60066000838152602001908152602001600020604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff16600281111561040e5761040d611c08565b5b60028111156104205761041f611c08565b5b81526020016007820154815250509050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bc90612234565b60405180910390fd5b736982508145454ce325ddbe47a25d4ec3d231193373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610514929190612254565b6020604051808303816000875af1158015610533573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105579190612292565b5050565b60008054905090565b61056c611a94565b60006006600085815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146105f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e890612357565b60405180910390fd5b6001600281111561060557610604611c08565b5b8160060160009054906101000a900460ff16600281111561062957610628611c08565b5b14610669576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610660906123c3565b60405180910390fd5b8060060160009054906101000a900460ff16600281111561068d5761068c611c08565b5b81600201548260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f688bf88fb93e23e74afe19c94a1ff0d1bc8fd1c713831362f8e7f4ff126a1dac84600701546040516107009190611b30565b60405180910390a460066000858152602001908152602001600020604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff1660028111156108205761081f611c08565b5b600281111561083257610831611c08565b5b815260200160078201548152505091505092915050565b6000736982508145454ce325ddbe47a25d4ec3d2311933905090565b60606000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205467ffffffffffffffff8111156108c2576108c1611f8a565b5b6040519080825280602002602001820160405280156108fb57816020015b6108e8611a94565b8152602001906001900390816108e05790505b5090506000805b600054811015610b3f578473ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156109c457506001600281111561098c5761098b611c08565b5b6006600083815260200190815260200160002060060160009054906101000a900460ff1660028111156109c2576109c1611c08565b5b145b15610b2c5760066000828152602001908152602001600020604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff166002811115610ae157610ae0611c08565b5b6002811115610af357610af2611c08565b5b8152602001600782015481525050838380610b0d90612412565b945081518110610b2057610b1f61245a565b5b60200260200101819052505b8080610b3790612412565b915050610902565b508192505050919050565b60006a1dc74be914d16aa4000000905090565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be490612234565b60405180910390fd5b428111610c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c26906124d5565b60405180910390fd5b6364fd77808111610c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6c90612541565b60405180910390fd5b6003548110610cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb0906125ad565b60405180910390fd5b8060038190555050565b60011515600460009054906101000a900460ff16151514610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090612619565b60405180910390fd5b6364fd7780421015610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5790612685565b60405180910390fd5b6003544210610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b906126f1565b60405180910390fd5b730fcbd68251819928c8f6d182fc04be733fa9417073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d9061275d565b60405180910390fd5b6000815111610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e61906127ef565b60405180910390fd5b60148151600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610eb8919061280f565b1115610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef09061288f565b60405180910390fd5b610f02816116c4565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90612234565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806006600084815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b90612947565b60405180910390fd5b6001600281111561109857611097611c08565b5b8160060160009054906101000a900460ff1660028111156110bc576110bb611c08565b5b146110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f3906129d9565b60405180910390fd5b60006003549050600042905060008282106111175782611119565b815b90508360040154811161113057505050505061136a565b83600401548161114091906129f9565b6276a7006a1dc74be914d16aa400000061115a9190612a5c565b6111649190612a8d565b94506000736982508145454ce325ddbe47a25d4ec3d231193373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111b59190611db8565b602060405180830381865afa1580156111d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f69190612ae4565b905085811015611204578095505b81856004018190555085856005016000828254611221919061280f565b925050819055508460060160009054906101000a900460ff16600281111561124c5761124b611c08565b5b85600201548660010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4db109773e80c5f5f0e60b36bd24a72f846a6b975122dc814263ca77eaf3e12988600701546040516112bf9190611b30565b60405180910390a46000861461136357736982508145454ce325ddbe47a25d4ec3d231193373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33886040518363ffffffff1660e01b815260040161131e929190612254565b6020604051808303816000875af115801561133d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113619190612292565b505b5050505050505b50565b60008151116113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a890612b83565b60405180910390fd5b60005b81518110156115a0576000600660008484815181106113d6576113d561245a565b5b6020026020010151815260200190815260200160002090506114118383815181106114045761140361245a565b5b6020026020010151610fda565b60028160060160006101000a81548160ff0219169083600281111561143957611438611c08565b5b02179055508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd303384600201546040518463ffffffff1660e01b81526004016114a393929190612ba3565b600060405180830381600087803b1580156114bd57600080fd5b505af11580156114d1573d6000803e3d6000fd5b50505050600160008154809291906114e890612bda565b91905055508060060160009054906101000a900460ff16600281111561151157611510611c08565b5b81600201548260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8e501adbf23c51f4b10a55b773d057f61dd1f0ad2b39130f747a2dd1eb9f028884600701546040516115849190611b30565b60405180910390a450808061159890612412565b9150506113b4565b508051600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115f191906129f9565b9250508190555050565b6000730fcbd68251819928c8f6d182fc04be733fa94170905090565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e90612234565b60405180910390fd5b80600460006101000a81548160ff02191690831515021790555050565b60004290506101f482516001546116db919061280f565b111561171c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171390612c4f565b60405180910390fd5b60005b8251811015611a3857730fcbd68251819928c8f6d182fc04be733fa9417073ffffffffffffffffffffffffffffffffffffffff166323b872dd333086858151811061176d5761176c61245a565b5b60200260200101516040518463ffffffff1660e01b815260040161179393929190612ba3565b600060405180830381600087803b1580156117ad57600080fd5b505af11580156117c1573d6000803e3d6000fd5b5050505060008054905060006040518061010001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001730fcbd68251819928c8f6d182fc04be733fa9417073ffffffffffffffffffffffffffffffffffffffff1681526020018685815181106118385761183761245a565b5b60200260200101518152602001858152602001858152602001600081526020016001600281111561186c5761186b611c08565b5b815260200183815250905080600660008054815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff0219169083600281111561196d5761196c611c08565b5b021790555060e0820151816007015590505060008081548092919061199190612412565b9190505550600160008154809291906119a990612412565b9190505550806020015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f44af49f353b8a0ed500ab278953308316db74837c1b6fc9d4522957c1f721e7c83604001518460c0015186604051611a1b93929190612c7e565b60405180910390a350508080611a3090612412565b91505061171f565b508151600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a89919061280f565b925050819055505050565b604051806101000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160006002811115611b0a57611b09611c08565b5b8152602001600081525090565b6000819050919050565b611b2a81611b17565b82525050565b6000602082019050611b456000830184611b21565b92915050565b6000604051905090565b600080fd5b600080fd5b611b6881611b17565b8114611b7357600080fd5b50565b600081359050611b8581611b5f565b92915050565b600060208284031215611ba157611ba0611b55565b5b6000611baf84828501611b76565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611be382611bb8565b9050919050565b611bf381611bd8565b82525050565b611c0281611b17565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110611c4857611c47611c08565b5b50565b6000819050611c5982611c37565b919050565b6000611c6982611c4b565b9050919050565b611c7981611c5e565b82525050565b61010082016000820151611c966000850182611bea565b506020820151611ca96020850182611bea565b506040820151611cbc6040850182611bf9565b506060820151611ccf6060850182611bf9565b506080820151611ce26080850182611bf9565b5060a0820151611cf560a0850182611bf9565b5060c0820151611d0860c0850182611c70565b5060e0820151611d1b60e0850182611bf9565b50505050565b600061010082019050611d376000830184611c7f565b92915050565b611d4681611bd8565b8114611d5157600080fd5b50565b600081359050611d6381611d3d565b92915050565b60008060408385031215611d8057611d7f611b55565b5b6000611d8e85828601611b76565b9250506020611d9f85828601611d54565b9150509250929050565b611db281611bd8565b82525050565b6000602082019050611dcd6000830184611da9565b92915050565b600060208284031215611de957611de8611b55565b5b6000611df784828501611d54565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61010082016000820151611e436000850182611bea565b506020820151611e566020850182611bea565b506040820151611e696040850182611bf9565b506060820151611e7c6060850182611bf9565b506080820151611e8f6080850182611bf9565b5060a0820151611ea260a0850182611bf9565b5060c0820151611eb560c0850182611c70565b5060e0820151611ec860e0850182611bf9565b50505050565b6000611eda8383611e2c565b6101008301905092915050565b6000602082019050919050565b6000611eff82611e00565b611f098185611e0b565b9350611f1483611e1c565b8060005b83811015611f45578151611f2c8882611ece565b9750611f3783611ee7565b925050600181019050611f18565b5085935050505092915050565b60006020820190508181036000830152611f6c8184611ef4565b905092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611fc282611f79565b810181811067ffffffffffffffff82111715611fe157611fe0611f8a565b5b80604052505050565b6000611ff4611b4b565b90506120008282611fb9565b919050565b600067ffffffffffffffff8211156120205761201f611f8a565b5b602082029050602081019050919050565b600080fd5b600061204961204484612005565b611fea565b9050808382526020820190506020840283018581111561206c5761206b612031565b5b835b8181101561209557806120818882611b76565b84526020840193505060208101905061206e565b5050509392505050565b600082601f8301126120b4576120b3611f74565b5b81356120c4848260208601612036565b91505092915050565b600080604083850312156120e4576120e3611b55565b5b60006120f285828601611d54565b925050602083013567ffffffffffffffff81111561211357612112611b5a565b5b61211f8582860161209f565b9150509250929050565b60006020828403121561213f5761213e611b55565b5b600082013567ffffffffffffffff81111561215d5761215c611b5a565b5b6121698482850161209f565b91505092915050565b60008115159050919050565b61218781612172565b811461219257600080fd5b50565b6000813590506121a48161217e565b92915050565b6000602082840312156121c0576121bf611b55565b5b60006121ce84828501612195565b91505092915050565b600082825260208201905092915050565b7f4f41000000000000000000000000000000000000000000000000000000000000600082015250565b600061221e6002836121d7565b9150612229826121e8565b602082019050919050565b6000602082019050818103600083015261224d81612211565b9050919050565b60006040820190506122696000830185611da9565b6122766020830184611b21565b9392505050565b60008151905061228c8161217e565b92915050565b6000602082840312156122a8576122a7611b55565b5b60006122b68482850161227d565b91505092915050565b7f596f752063616e6e6f7420636865636b2074686973207374616b696e6720617360008201527f206974206973206e6f74206c697374656420756e64657220746869732061646460208201527f7265737300000000000000000000000000000000000000000000000000000000604082015250565b60006123416044836121d7565b915061234c826122bf565b606082019050919050565b6000602082019050818103600083015261237081612334565b9050919050565b7f5374616b696e67206973206e6f7420616374697665206f7220636c61696d6564600082015250565b60006123ad6020836121d7565b91506123b882612377565b602082019050919050565b600060208201905081810360008301526123dc816123a0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061241d82611b17565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361244f5761244e6123e3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f43616e6e6f742073657420656e6420696e207468652070617374000000000000600082015250565b60006124bf601a836121d7565b91506124ca82612489565b602082019050919050565b600060208201905081810360008301526124ee816124b2565b9050919050565b7f43616e6e6f742073657420656e64206265666f72652073746172740000000000600082015250565b600061252b601b836121d7565b9150612536826124f5565b602082019050919050565b6000602082019050818103600083015261255a8161251e565b9050919050565b7f43616e6e6f7420657874656e64207374616b696e6720706572696f6400000000600082015250565b6000612597601c836121d7565b91506125a282612561565b602082019050919050565b600060208201905081810360008301526125c68161258a565b9050919050565b7f5374616b696e6720697320706175736564000000000000000000000000000000600082015250565b60006126036011836121d7565b915061260e826125cd565b602082019050919050565b60006020820190508181036000830152612632816125f6565b9050919050565b7f5374616b696e6720706572696f64206e6f742073746172746564000000000000600082015250565b600061266f601a836121d7565b915061267a82612639565b602082019050919050565b6000602082019050818103600083015261269e81612662565b9050919050565b7f5374616b696e6720706572696f64206973206f76657200000000000000000000600082015250565b60006126db6016836121d7565b91506126e6826126a5565b602082019050919050565b6000602082019050818103600083015261270a816126ce565b9050919050565b7f696e636f7272656374204e465420746f207374616b6500000000000000000000600082015250565b60006127476016836121d7565b915061275282612711565b602082019050919050565b600060208201905081810360008301526127768161273a565b9050919050565b7f596f75206861766520746f2073656c65637420746f6b656e7320746f2062652060008201527f7374616b65640000000000000000000000000000000000000000000000000000602082015250565b60006127d96026836121d7565b91506127e48261277d565b604082019050919050565b60006020820190508181036000830152612808816127cc565b9050919050565b600061281a82611b17565b915061282583611b17565b925082820190508082111561283d5761283c6123e3565b5b92915050565b7f796f752063616e207374616b6520757020746f20323020746f6b656e73000000600082015250565b6000612879601d836121d7565b915061288482612843565b602082019050919050565b600060208201905081810360008301526128a88161286c565b9050919050565b7f596f752063616e6e6f742063616e63656c2074686973207374616b696e67206160008201527f73206974206973206e6f74206c697374656420756e646572207468697320616460208201527f6472657373000000000000000000000000000000000000000000000000000000604082015250565b60006129316045836121d7565b915061293c826128af565b606082019050919050565b6000602082019050818103600083015261296081612924565b9050919050565b7f596f75722072657761726420697320656974686572206e6f7420636c61696d6160008201527f626c6520796574206f7220686173206265656e20636c61696d65640000000000602082015250565b60006129c3603b836121d7565b91506129ce82612967565b604082019050919050565b600060208201905081810360008301526129f2816129b6565b9050919050565b6000612a0482611b17565b9150612a0f83611b17565b9250828203905081811115612a2757612a266123e3565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612a6782611b17565b9150612a7283611b17565b925082612a8257612a81612a2d565b5b828204905092915050565b6000612a9882611b17565b9150612aa383611b17565b9250828202612ab181611b17565b91508282048414831517612ac857612ac76123e3565b5b5092915050565b600081519050612ade81611b5f565b92915050565b600060208284031215612afa57612af9611b55565b5b6000612b0884828501612acf565b91505092915050565b7f596f75206861766520746f2073656c65637420746f6b656e7320746f2062652060008201527f756e7374616b6564000000000000000000000000000000000000000000000000602082015250565b6000612b6d6028836121d7565b9150612b7882612b11565b604082019050919050565b60006020820190508181036000830152612b9c81612b60565b9050919050565b6000606082019050612bb86000830186611da9565b612bc56020830185611da9565b612bd26040830184611b21565b949350505050565b6000612be582611b17565b915060008203612bf857612bf76123e3565b5b600182039050919050565b7f6d6178207374616b6520616d6f756e7420726561636865640000000000000000600082015250565b6000612c396018836121d7565b9150612c4482612c03565b602082019050919050565b60006020820190508181036000830152612c6881612c2c565b9050919050565b612c7881611c5e565b82525050565b6000606082019050612c936000830186611b21565b612ca06020830185612c6f565b612cad6040830184611b21565b94935050505056fea26469706673582212200f547a0e94d7a4999b79e34818dd8294b4fe27f7cc548c0fdffbbe0caae76acd64736f6c63430008120033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80637e1a378611610097578063ae169a5011610066578063ae169a5014610272578063b10dcc931461028e578063b9618478146102aa578063bca81652146102c8576100f5565b80637e1a3786146102005780637f498ffc1461021e578063819241071461023a5780638eec99c814610256576100f5565b80635074e0c8116100d35780635074e0c8146101645780635ab58b151461018257806369940d79146101b257806379813f14146101d0576100f5565b80630917e776146100fa57806323691677146101185780632e1a7d4d14610148575b600080fd5b6101026102e4565b60405161010f9190611b30565b60405180910390f35b610132600480360381019061012d9190611b8b565b6102ee565b60405161013f9190611d21565b60405180910390f35b610162600480360381019061015d9190611b8b565b610435565b005b61016c61055b565b6040516101799190611b30565b60405180910390f35b61019c60048036038101906101979190611d69565b610564565b6040516101a99190611d21565b60405180910390f35b6101ba610849565b6040516101c79190611db8565b60405180910390f35b6101ea60048036038101906101e59190611dd3565b610865565b6040516101f79190611f52565b60405180910390f35b610208610b4a565b6040516102159190611b30565b60405180910390f35b61023860048036038101906102339190611b8b565b610b5d565b005b610254600480360381019061024f91906120cd565b610cc3565b005b610270600480360381019061026b9190611dd3565b610f06565b005b61028c60048036038101906102879190611b8b565b610fda565b005b6102a860048036038101906102a39190612129565b61136d565b005b6102b26115fb565b6040516102bf9190611db8565b60405180910390f35b6102e260048036038101906102dd91906121aa565b611617565b005b6000600154905090565b6102f6611a94565b60066000838152602001908152602001600020604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff16600281111561040e5761040d611c08565b5b60028111156104205761041f611c08565b5b81526020016007820154815250509050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bc90612234565b60405180910390fd5b736982508145454ce325ddbe47a25d4ec3d231193373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610514929190612254565b6020604051808303816000875af1158015610533573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105579190612292565b5050565b60008054905090565b61056c611a94565b60006006600085815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146105f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e890612357565b60405180910390fd5b6001600281111561060557610604611c08565b5b8160060160009054906101000a900460ff16600281111561062957610628611c08565b5b14610669576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610660906123c3565b60405180910390fd5b8060060160009054906101000a900460ff16600281111561068d5761068c611c08565b5b81600201548260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f688bf88fb93e23e74afe19c94a1ff0d1bc8fd1c713831362f8e7f4ff126a1dac84600701546040516107009190611b30565b60405180910390a460066000858152602001908152602001600020604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff1660028111156108205761081f611c08565b5b600281111561083257610831611c08565b5b815260200160078201548152505091505092915050565b6000736982508145454ce325ddbe47a25d4ec3d2311933905090565b60606000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205467ffffffffffffffff8111156108c2576108c1611f8a565b5b6040519080825280602002602001820160405280156108fb57816020015b6108e8611a94565b8152602001906001900390816108e05790505b5090506000805b600054811015610b3f578473ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156109c457506001600281111561098c5761098b611c08565b5b6006600083815260200190815260200160002060060160009054906101000a900460ff1660028111156109c2576109c1611c08565b5b145b15610b2c5760066000828152602001908152602001600020604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff166002811115610ae157610ae0611c08565b5b6002811115610af357610af2611c08565b5b8152602001600782015481525050838380610b0d90612412565b945081518110610b2057610b1f61245a565b5b60200260200101819052505b8080610b3790612412565b915050610902565b508192505050919050565b60006a1dc74be914d16aa4000000905090565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be490612234565b60405180910390fd5b428111610c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c26906124d5565b60405180910390fd5b6364fd77808111610c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6c90612541565b60405180910390fd5b6003548110610cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb0906125ad565b60405180910390fd5b8060038190555050565b60011515600460009054906101000a900460ff16151514610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090612619565b60405180910390fd5b6364fd7780421015610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5790612685565b60405180910390fd5b6003544210610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b906126f1565b60405180910390fd5b730fcbd68251819928c8f6d182fc04be733fa9417073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d9061275d565b60405180910390fd5b6000815111610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e61906127ef565b60405180910390fd5b60148151600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610eb8919061280f565b1115610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef09061288f565b60405180910390fd5b610f02816116c4565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90612234565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806006600084815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b90612947565b60405180910390fd5b6001600281111561109857611097611c08565b5b8160060160009054906101000a900460ff1660028111156110bc576110bb611c08565b5b146110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f3906129d9565b60405180910390fd5b60006003549050600042905060008282106111175782611119565b815b90508360040154811161113057505050505061136a565b83600401548161114091906129f9565b6276a7006a1dc74be914d16aa400000061115a9190612a5c565b6111649190612a8d565b94506000736982508145454ce325ddbe47a25d4ec3d231193373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111b59190611db8565b602060405180830381865afa1580156111d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f69190612ae4565b905085811015611204578095505b81856004018190555085856005016000828254611221919061280f565b925050819055508460060160009054906101000a900460ff16600281111561124c5761124b611c08565b5b85600201548660010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4db109773e80c5f5f0e60b36bd24a72f846a6b975122dc814263ca77eaf3e12988600701546040516112bf9190611b30565b60405180910390a46000861461136357736982508145454ce325ddbe47a25d4ec3d231193373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33886040518363ffffffff1660e01b815260040161131e929190612254565b6020604051808303816000875af115801561133d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113619190612292565b505b5050505050505b50565b60008151116113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a890612b83565b60405180910390fd5b60005b81518110156115a0576000600660008484815181106113d6576113d561245a565b5b6020026020010151815260200190815260200160002090506114118383815181106114045761140361245a565b5b6020026020010151610fda565b60028160060160006101000a81548160ff0219169083600281111561143957611438611c08565b5b02179055508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd303384600201546040518463ffffffff1660e01b81526004016114a393929190612ba3565b600060405180830381600087803b1580156114bd57600080fd5b505af11580156114d1573d6000803e3d6000fd5b50505050600160008154809291906114e890612bda565b91905055508060060160009054906101000a900460ff16600281111561151157611510611c08565b5b81600201548260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8e501adbf23c51f4b10a55b773d057f61dd1f0ad2b39130f747a2dd1eb9f028884600701546040516115849190611b30565b60405180910390a450808061159890612412565b9150506113b4565b508051600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115f191906129f9565b9250508190555050565b6000730fcbd68251819928c8f6d182fc04be733fa94170905090565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e90612234565b60405180910390fd5b80600460006101000a81548160ff02191690831515021790555050565b60004290506101f482516001546116db919061280f565b111561171c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171390612c4f565b60405180910390fd5b60005b8251811015611a3857730fcbd68251819928c8f6d182fc04be733fa9417073ffffffffffffffffffffffffffffffffffffffff166323b872dd333086858151811061176d5761176c61245a565b5b60200260200101516040518463ffffffff1660e01b815260040161179393929190612ba3565b600060405180830381600087803b1580156117ad57600080fd5b505af11580156117c1573d6000803e3d6000fd5b5050505060008054905060006040518061010001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001730fcbd68251819928c8f6d182fc04be733fa9417073ffffffffffffffffffffffffffffffffffffffff1681526020018685815181106118385761183761245a565b5b60200260200101518152602001858152602001858152602001600081526020016001600281111561186c5761186b611c08565b5b815260200183815250905080600660008054815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff0219169083600281111561196d5761196c611c08565b5b021790555060e0820151816007015590505060008081548092919061199190612412565b9190505550600160008154809291906119a990612412565b9190505550806020015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f44af49f353b8a0ed500ab278953308316db74837c1b6fc9d4522957c1f721e7c83604001518460c0015186604051611a1b93929190612c7e565b60405180910390a350508080611a3090612412565b91505061171f565b508151600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a89919061280f565b925050819055505050565b604051806101000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160006002811115611b0a57611b09611c08565b5b8152602001600081525090565b6000819050919050565b611b2a81611b17565b82525050565b6000602082019050611b456000830184611b21565b92915050565b6000604051905090565b600080fd5b600080fd5b611b6881611b17565b8114611b7357600080fd5b50565b600081359050611b8581611b5f565b92915050565b600060208284031215611ba157611ba0611b55565b5b6000611baf84828501611b76565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611be382611bb8565b9050919050565b611bf381611bd8565b82525050565b611c0281611b17565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110611c4857611c47611c08565b5b50565b6000819050611c5982611c37565b919050565b6000611c6982611c4b565b9050919050565b611c7981611c5e565b82525050565b61010082016000820151611c966000850182611bea565b506020820151611ca96020850182611bea565b506040820151611cbc6040850182611bf9565b506060820151611ccf6060850182611bf9565b506080820151611ce26080850182611bf9565b5060a0820151611cf560a0850182611bf9565b5060c0820151611d0860c0850182611c70565b5060e0820151611d1b60e0850182611bf9565b50505050565b600061010082019050611d376000830184611c7f565b92915050565b611d4681611bd8565b8114611d5157600080fd5b50565b600081359050611d6381611d3d565b92915050565b60008060408385031215611d8057611d7f611b55565b5b6000611d8e85828601611b76565b9250506020611d9f85828601611d54565b9150509250929050565b611db281611bd8565b82525050565b6000602082019050611dcd6000830184611da9565b92915050565b600060208284031215611de957611de8611b55565b5b6000611df784828501611d54565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61010082016000820151611e436000850182611bea565b506020820151611e566020850182611bea565b506040820151611e696040850182611bf9565b506060820151611e7c6060850182611bf9565b506080820151611e8f6080850182611bf9565b5060a0820151611ea260a0850182611bf9565b5060c0820151611eb560c0850182611c70565b5060e0820151611ec860e0850182611bf9565b50505050565b6000611eda8383611e2c565b6101008301905092915050565b6000602082019050919050565b6000611eff82611e00565b611f098185611e0b565b9350611f1483611e1c565b8060005b83811015611f45578151611f2c8882611ece565b9750611f3783611ee7565b925050600181019050611f18565b5085935050505092915050565b60006020820190508181036000830152611f6c8184611ef4565b905092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611fc282611f79565b810181811067ffffffffffffffff82111715611fe157611fe0611f8a565b5b80604052505050565b6000611ff4611b4b565b90506120008282611fb9565b919050565b600067ffffffffffffffff8211156120205761201f611f8a565b5b602082029050602081019050919050565b600080fd5b600061204961204484612005565b611fea565b9050808382526020820190506020840283018581111561206c5761206b612031565b5b835b8181101561209557806120818882611b76565b84526020840193505060208101905061206e565b5050509392505050565b600082601f8301126120b4576120b3611f74565b5b81356120c4848260208601612036565b91505092915050565b600080604083850312156120e4576120e3611b55565b5b60006120f285828601611d54565b925050602083013567ffffffffffffffff81111561211357612112611b5a565b5b61211f8582860161209f565b9150509250929050565b60006020828403121561213f5761213e611b55565b5b600082013567ffffffffffffffff81111561215d5761215c611b5a565b5b6121698482850161209f565b91505092915050565b60008115159050919050565b61218781612172565b811461219257600080fd5b50565b6000813590506121a48161217e565b92915050565b6000602082840312156121c0576121bf611b55565b5b60006121ce84828501612195565b91505092915050565b600082825260208201905092915050565b7f4f41000000000000000000000000000000000000000000000000000000000000600082015250565b600061221e6002836121d7565b9150612229826121e8565b602082019050919050565b6000602082019050818103600083015261224d81612211565b9050919050565b60006040820190506122696000830185611da9565b6122766020830184611b21565b9392505050565b60008151905061228c8161217e565b92915050565b6000602082840312156122a8576122a7611b55565b5b60006122b68482850161227d565b91505092915050565b7f596f752063616e6e6f7420636865636b2074686973207374616b696e6720617360008201527f206974206973206e6f74206c697374656420756e64657220746869732061646460208201527f7265737300000000000000000000000000000000000000000000000000000000604082015250565b60006123416044836121d7565b915061234c826122bf565b606082019050919050565b6000602082019050818103600083015261237081612334565b9050919050565b7f5374616b696e67206973206e6f7420616374697665206f7220636c61696d6564600082015250565b60006123ad6020836121d7565b91506123b882612377565b602082019050919050565b600060208201905081810360008301526123dc816123a0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061241d82611b17565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361244f5761244e6123e3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f43616e6e6f742073657420656e6420696e207468652070617374000000000000600082015250565b60006124bf601a836121d7565b91506124ca82612489565b602082019050919050565b600060208201905081810360008301526124ee816124b2565b9050919050565b7f43616e6e6f742073657420656e64206265666f72652073746172740000000000600082015250565b600061252b601b836121d7565b9150612536826124f5565b602082019050919050565b6000602082019050818103600083015261255a8161251e565b9050919050565b7f43616e6e6f7420657874656e64207374616b696e6720706572696f6400000000600082015250565b6000612597601c836121d7565b91506125a282612561565b602082019050919050565b600060208201905081810360008301526125c68161258a565b9050919050565b7f5374616b696e6720697320706175736564000000000000000000000000000000600082015250565b60006126036011836121d7565b915061260e826125cd565b602082019050919050565b60006020820190508181036000830152612632816125f6565b9050919050565b7f5374616b696e6720706572696f64206e6f742073746172746564000000000000600082015250565b600061266f601a836121d7565b915061267a82612639565b602082019050919050565b6000602082019050818103600083015261269e81612662565b9050919050565b7f5374616b696e6720706572696f64206973206f76657200000000000000000000600082015250565b60006126db6016836121d7565b91506126e6826126a5565b602082019050919050565b6000602082019050818103600083015261270a816126ce565b9050919050565b7f696e636f7272656374204e465420746f207374616b6500000000000000000000600082015250565b60006127476016836121d7565b915061275282612711565b602082019050919050565b600060208201905081810360008301526127768161273a565b9050919050565b7f596f75206861766520746f2073656c65637420746f6b656e7320746f2062652060008201527f7374616b65640000000000000000000000000000000000000000000000000000602082015250565b60006127d96026836121d7565b91506127e48261277d565b604082019050919050565b60006020820190508181036000830152612808816127cc565b9050919050565b600061281a82611b17565b915061282583611b17565b925082820190508082111561283d5761283c6123e3565b5b92915050565b7f796f752063616e207374616b6520757020746f20323020746f6b656e73000000600082015250565b6000612879601d836121d7565b915061288482612843565b602082019050919050565b600060208201905081810360008301526128a88161286c565b9050919050565b7f596f752063616e6e6f742063616e63656c2074686973207374616b696e67206160008201527f73206974206973206e6f74206c697374656420756e646572207468697320616460208201527f6472657373000000000000000000000000000000000000000000000000000000604082015250565b60006129316045836121d7565b915061293c826128af565b606082019050919050565b6000602082019050818103600083015261296081612924565b9050919050565b7f596f75722072657761726420697320656974686572206e6f7420636c61696d6160008201527f626c6520796574206f7220686173206265656e20636c61696d65640000000000602082015250565b60006129c3603b836121d7565b91506129ce82612967565b604082019050919050565b600060208201905081810360008301526129f2816129b6565b9050919050565b6000612a0482611b17565b9150612a0f83611b17565b9250828203905081811115612a2757612a266123e3565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612a6782611b17565b9150612a7283611b17565b925082612a8257612a81612a2d565b5b828204905092915050565b6000612a9882611b17565b9150612aa383611b17565b9250828202612ab181611b17565b91508282048414831517612ac857612ac76123e3565b5b5092915050565b600081519050612ade81611b5f565b92915050565b600060208284031215612afa57612af9611b55565b5b6000612b0884828501612acf565b91505092915050565b7f596f75206861766520746f2073656c65637420746f6b656e7320746f2062652060008201527f756e7374616b6564000000000000000000000000000000000000000000000000602082015250565b6000612b6d6028836121d7565b9150612b7882612b11565b604082019050919050565b60006020820190508181036000830152612b9c81612b60565b9050919050565b6000606082019050612bb86000830186611da9565b612bc56020830185611da9565b612bd26040830184611b21565b949350505050565b6000612be582611b17565b915060008203612bf857612bf76123e3565b5b600182039050919050565b7f6d6178207374616b6520616d6f756e7420726561636865640000000000000000600082015250565b6000612c396018836121d7565b9150612c4482612c03565b602082019050919050565b60006020820190508181036000830152612c6881612c2c565b9050919050565b612c7881611c5e565b82525050565b6000606082019050612c936000830186611b21565b612ca06020830185612c6f565b612cad6040830184611b21565b94935050505056fea26469706673582212200f547a0e94d7a4999b79e34818dd8294b4fe27f7cc548c0fdffbbe0caae76acd64736f6c63430008120033
Deployed Bytecode Sourcemap
9075:9024:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17809:96;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13157:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16823:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17706:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13843:665;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17603:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13334:450;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17409:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17046:355;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11061:746;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18007:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14589:1317;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15950:865;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17504:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16949:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17809:96;17858:7;17885:12;;17878:19;;17809:96;:::o;13157:123::-;13216:14;;:::i;:::-;13250:11;:22;13262:9;13250:22;;;;;;;;;;;13243:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13157:123;;;:::o;16823:118::-;17962:10;17953:19;;:5;;;;;;;;;;;:19;;;17945:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;9317:42:::1;16885:28;;;16914:10;16926:6;16885:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16823:118:::0;:::o;17706:95::-;17756:7;17783:10;;17776:17;;17706:95;:::o;13843:665::-;13939:14;;:::i;:::-;13966:23;13992:11;:22;14004:9;13992:22;;;;;;;;;;;13966:48;;14059:10;14049:20;;:6;:20;;;14027:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;14216:20;14198:38;;;;;;;;:::i;:::-;;:7;:14;;;;;;;;;;;;:38;;;;;;;;:::i;:::-;;;14176:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;14403:7;:14;;;;;;;;;;;;14314:146;;;;;;;;:::i;:::-;;14373:7;:15;;;14345:7;:13;;;;;;;;;;;;14314:146;;;14432:7;:17;;;14314:146;;;;;;:::i;:::-;;;;;;;;14478:11;:22;14490:9;14478:22;;;;;;;;;;;14471:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;13843:665;;;;:::o;17603:95::-;17652:7;9317:42;17672:18;;17603:95;:::o;13334:450::-;13397:16;13426:21;13464:11;:17;13476:4;13464:17;;;;;;;;;;;;;;;;13450:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;13426:56;;13493:11;13524:13;13519:236;13551:10;;13543:5;:18;13519:236;;;13618:4;13589:33;;:11;:18;13601:5;13589:18;;;;;;;;;;;:25;;;;;;;;;;;;:33;;;:86;;;;;13655:20;13626:49;;;;;;;;:::i;:::-;;:11;:18;13638:5;13626:18;;;;;;;;;;;:25;;;;;;;;;;;;:49;;;;;;;;:::i;:::-;;;13589:86;13586:158;;;13710:11;:18;13722:5;13710:18;;;;;;;;;;;13696:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:4;13701:5;;;;;:::i;:::-;;;13696:11;;;;;;;;:::i;:::-;;;;;;;:32;;;;13586:158;13563:7;;;;;:::i;:::-;;;;13519:236;;;;13772:4;13765:11;;;;13334:450;;;:::o;17409:87::-;17457:7;9425:13;17477:11;;17409:87;:::o;17046:355::-;17962:10;17953:19;;:5;;;;;;;;;;;:19;;;17945:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;17141:15:::1;17123;:33;17115:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;9517:10;17206:15;:32;17198:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;17307:12;;17289:15;:30;17281:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17378:15;17363:12;:30;;;;17046:355:::0;:::o;11061:746::-;11165:4;11153:16;;:8;;;;;;;;;;;:16;;;11145:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9517:10;11212:15;:33;;11204:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;11313:12;;11295:15;:30;11287:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;9229:42;11373:17;;:5;:17;;;11365:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;11583:1;11565:8;:15;:19;11557:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11707:2;11688:8;:15;11662:11;:23;11674:10;11662:23;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;:47;;11640:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;11779:20;11790:8;11779:10;:20::i;:::-;11061:746;;:::o;18007:89::-;17962:10;17953:19;;:5;;;;;;;;;;;:19;;;17945:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;18082:6:::1;18074:5;;:14;;;;;;;;;;;;;;;;;;18007:89:::0;:::o;14589:1317::-;14647:14;14674:23;14700:11;:22;14712:9;14700:22;;;;;;;;;;;14674:48;;14775:10;14757:28;;:7;:14;;;;;;;;;;;;:28;;;14735:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;14933:20;14915:38;;;;;;;;:::i;:::-;;:7;:14;;;;;;;;;;;;:38;;;;;;;;:::i;:::-;;;14893:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;15053:20;15076:12;;15053:35;;15099:20;15122:15;15099:38;;15150:19;15187:12;15172;:27;:83;;15243:12;15172:83;;;15215:12;15172:83;15150:105;;15287:7;:19;;;15272:11;:34;15268:47;;15308:7;;;;;;;15268:47;15370:7;:19;;;15356:11;:33;;;;:::i;:::-;15344:7;9425:13;15337:14;;;;:::i;:::-;15336:54;;;;:::i;:::-;15327:63;;15403:15;9317:42;15421:29;;;15459:4;15421:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15403:62;;15490:6;15480:7;:16;15476:65;;;15522:7;15513:16;;15476:65;15575:11;15553:7;:19;;:33;;;;15622:6;15597:7;:21;;;:31;;;;;;;:::i;:::-;;;;;;;;15737:7;:14;;;;;;;;;;;;15646:148;;;;;;;;:::i;:::-;;15707:7;:15;;;15679:7;:13;;;;;;;;;;;;15646:148;;;15766:7;:17;;;15646:148;;;;;;:::i;:::-;;;;;;;;15821:1;15811:6;:11;15807:92;;9317:42;15839:28;;;15868:10;15880:6;15839:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15807:92;14636:1270;;;;;;14589:1317;;:::o;15950:865::-;16054:1;16035:9;:16;:20;16013:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;16141:9;16136:616;16160:9;:16;16156:1;:20;16136:616;;;16198:23;16224:11;:25;16236:9;16246:1;16236:12;;;;;;;;:::i;:::-;;;;;;;;16224:25;;;;;;;;;;;16198:51;;16266:25;16278:9;16288:1;16278:12;;;;;;;;:::i;:::-;;;;;;;;16266:11;:25::i;:::-;16325:23;16308:7;:14;;;:40;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;16371:7;:13;;;;;;;;;;;;16363:35;;;16425:4;16449:10;16478:7;:15;;;16363:145;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16523:12;;:14;;;;;;;;;:::i;:::-;;;;;;16675:7;:14;;;;;;;;;;;;16571:169;;;;;;;;:::i;:::-;;16641:7;:15;;;16609:7;:13;;;;;;;;;;;;16571:169;;;16708:7;:17;;;16571:169;;;;;;:::i;:::-;;;;;;;;16183:569;16178:3;;;;;:::i;:::-;;;;16136:616;;;;16791:9;:16;16764:11;:23;16776:10;16764:23;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;15950:865;:::o;17504:91::-;17552:7;9229:42;17572:15;;17504:91;:::o;16949:89::-;17962:10;17953:19;;:5;;;;;;;;;;;:19;;;17945:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;17023:7:::1;17012:8;;:18;;;;;;;;;;;;;;;;;;16949:89:::0;:::o;11869:1245::-;11934:19;11956:15;11934:37;;12025:3;12007:7;:14;11992:12;;:29;;;;:::i;:::-;:36;;11984:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12075:9;12070:983;12094:7;:14;12090:1;:18;12070:983;;;9229:42;12130:30;;;12179:10;12216:4;12240:7;12248:1;12240:10;;;;;;;;:::i;:::-;;;;;;;;12130:135;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12384:24;12411:10;;12384:37;;12438:22;12463:261;;;;;;;;12489:10;12463:261;;;;;;9229:42;12463:261;;;;;;12545:7;12553:1;12545:10;;;;;;;;:::i;:::-;;;;;;;;12463:261;;;;12574:11;12463:261;;;;12604:11;12463:261;;;;12634:1;12463:261;;;;12654:20;12463:261;;;;;;;;:::i;:::-;;;;;;12693:16;12463:261;;;12438:286;;12767:7;12741:11;:23;12753:10;;12741:23;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;12789:10;;:12;;;;;;;;;:::i;:::-;;;;;;12816;;:14;;;;;;;;;:::i;:::-;;;;;;12911:7;:13;;;12852:189;;12882:10;12852:189;;;12943:7;:15;;;12977:7;:14;;;13010:16;12852:189;;;;;;;;:::i;:::-;;;;;;;;12115:938;;12110:3;;;;;:::i;:::-;;;;12070:983;;;;13092:7;:14;13065:11;:23;13077:10;13065:23;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;11923:1191;11869:1245;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:329::-;1101:6;1150:2;1138:9;1129:7;1125:23;1121:32;1118:119;;;1156:79;;:::i;:::-;1118:119;1276:1;1301:53;1346:7;1337:6;1326:9;1322:22;1301:53;:::i;:::-;1291:63;;1247:117;1042:329;;;;:::o;1377:126::-;1414:7;1454:42;1447:5;1443:54;1432:65;;1377:126;;;:::o;1509:96::-;1546:7;1575:24;1593:5;1575:24;:::i;:::-;1564:35;;1509:96;;;:::o;1611:108::-;1688:24;1706:5;1688:24;:::i;:::-;1683:3;1676:37;1611:108;;:::o;1725:::-;1802:24;1820:5;1802:24;:::i;:::-;1797:3;1790:37;1725:108;;:::o;1839:180::-;1887:77;1884:1;1877:88;1984:4;1981:1;1974:15;2008:4;2005:1;1998:15;2025:122;2115:1;2108:5;2105:12;2095:46;;2121:18;;:::i;:::-;2095:46;2025:122;:::o;2153:145::-;2207:7;2236:5;2225:16;;2242:50;2286:5;2242:50;:::i;:::-;2153:145;;;:::o;2304:::-;2369:9;2402:41;2437:5;2402:41;:::i;:::-;2389:54;;2304:145;;;:::o;2455:151::-;2547:52;2593:5;2547:52;:::i;:::-;2542:3;2535:65;2455:151;;:::o;2670:1600::-;2815:6;2810:3;2806:16;2906:4;2899:5;2895:16;2889:23;2925:63;2982:4;2977:3;2973:14;2959:12;2925:63;:::i;:::-;2832:166;3081:4;3074:5;3070:16;3064:23;3100:63;3157:4;3152:3;3148:14;3134:12;3100:63;:::i;:::-;3008:165;3258:4;3251:5;3247:16;3241:23;3277:63;3334:4;3329:3;3325:14;3311:12;3277:63;:::i;:::-;3183:167;3437:4;3430:5;3426:16;3420:23;3456:63;3513:4;3508:3;3504:14;3490:12;3456:63;:::i;:::-;3360:169;3618:4;3611:5;3607:16;3601:23;3637:63;3694:4;3689:3;3685:14;3671:12;3637:63;:::i;:::-;3539:171;3801:4;3794:5;3790:16;3784:23;3820:63;3877:4;3872:3;3868:14;3854:12;3820:63;:::i;:::-;3720:173;3977:4;3970:5;3966:16;3960:23;3996:78;4068:4;4063:3;4059:14;4045:12;3996:78;:::i;:::-;3903:181;4171:4;4164:5;4160:16;4154:23;4190:63;4247:4;4242:3;4238:14;4224:12;4190:63;:::i;:::-;4094:169;2784:1486;2670:1600;;:::o;4276:319::-;4417:4;4455:3;4444:9;4440:19;4432:27;;4469:119;4585:1;4574:9;4570:17;4561:6;4469:119;:::i;:::-;4276:319;;;;:::o;4601:122::-;4674:24;4692:5;4674:24;:::i;:::-;4667:5;4664:35;4654:63;;4713:1;4710;4703:12;4654:63;4601:122;:::o;4729:139::-;4775:5;4813:6;4800:20;4791:29;;4829:33;4856:5;4829:33;:::i;:::-;4729:139;;;;:::o;4874:474::-;4942:6;4950;4999:2;4987:9;4978:7;4974:23;4970:32;4967:119;;;5005:79;;:::i;:::-;4967:119;5125:1;5150:53;5195:7;5186:6;5175:9;5171:22;5150:53;:::i;:::-;5140:63;;5096:117;5252:2;5278:53;5323:7;5314:6;5303:9;5299:22;5278:53;:::i;:::-;5268:63;;5223:118;4874:474;;;;;:::o;5354:118::-;5441:24;5459:5;5441:24;:::i;:::-;5436:3;5429:37;5354:118;;:::o;5478:222::-;5571:4;5609:2;5598:9;5594:18;5586:26;;5622:71;5690:1;5679:9;5675:17;5666:6;5622:71;:::i;:::-;5478:222;;;;:::o;5706:329::-;5765:6;5814:2;5802:9;5793:7;5789:23;5785:32;5782:119;;;5820:79;;:::i;:::-;5782:119;5940:1;5965:53;6010:7;6001:6;5990:9;5986:22;5965:53;:::i;:::-;5955:63;;5911:117;5706:329;;;;:::o;6041:138::-;6132:6;6166:5;6160:12;6150:22;;6041:138;;;:::o;6185:208::-;6308:11;6342:6;6337:3;6330:19;6382:4;6377:3;6373:14;6358:29;;6185:208;;;;:::o;6399:156::-;6490:4;6513:3;6505:11;;6543:4;6538:3;6534:14;6526:22;;6399:156;;;:::o;6619:1590::-;6754:6;6749:3;6745:16;6845:4;6838:5;6834:16;6828:23;6864:63;6921:4;6916:3;6912:14;6898:12;6864:63;:::i;:::-;6771:166;7020:4;7013:5;7009:16;7003:23;7039:63;7096:4;7091:3;7087:14;7073:12;7039:63;:::i;:::-;6947:165;7197:4;7190:5;7186:16;7180:23;7216:63;7273:4;7268:3;7264:14;7250:12;7216:63;:::i;:::-;7122:167;7376:4;7369:5;7365:16;7359:23;7395:63;7452:4;7447:3;7443:14;7429:12;7395:63;:::i;:::-;7299:169;7557:4;7550:5;7546:16;7540:23;7576:63;7633:4;7628:3;7624:14;7610:12;7576:63;:::i;:::-;7478:171;7740:4;7733:5;7729:16;7723:23;7759:63;7816:4;7811:3;7807:14;7793:12;7759:63;:::i;:::-;7659:173;7916:4;7909:5;7905:16;7899:23;7935:78;8007:4;8002:3;7998:14;7984:12;7935:78;:::i;:::-;7842:181;8110:4;8103:5;8099:16;8093:23;8129:63;8186:4;8181:3;8177:14;8163:12;8129:63;:::i;:::-;8033:169;6723:1486;6619:1590;;:::o;8215:277::-;8332:10;8353:94;8443:3;8435:6;8353:94;:::i;:::-;8479:6;8474:3;8470:16;8456:30;;8215:277;;;;:::o;8498:137::-;8592:4;8624;8619:3;8615:14;8607:22;;8498:137;;;:::o;8703:924::-;8870:3;8899:78;8971:5;8899:78;:::i;:::-;8993:110;9096:6;9091:3;8993:110;:::i;:::-;8986:117;;9127:80;9201:5;9127:80;:::i;:::-;9230:7;9261:1;9246:356;9271:6;9268:1;9265:13;9246:356;;;9347:6;9341:13;9374:111;9481:3;9466:13;9374:111;:::i;:::-;9367:118;;9508:84;9585:6;9508:84;:::i;:::-;9498:94;;9306:296;9293:1;9290;9286:9;9281:14;;9246:356;;;9250:14;9618:3;9611:10;;8875:752;;;8703:924;;;;:::o;9633:469::-;9824:4;9862:2;9851:9;9847:18;9839:26;;9911:9;9905:4;9901:20;9897:1;9886:9;9882:17;9875:47;9939:156;10090:4;10081:6;9939:156;:::i;:::-;9931:164;;9633:469;;;;:::o;10108:117::-;10217:1;10214;10207:12;10231:102;10272:6;10323:2;10319:7;10314:2;10307:5;10303:14;10299:28;10289:38;;10231:102;;;:::o;10339:180::-;10387:77;10384:1;10377:88;10484:4;10481:1;10474:15;10508:4;10505:1;10498:15;10525:281;10608:27;10630:4;10608:27;:::i;:::-;10600:6;10596:40;10738:6;10726:10;10723:22;10702:18;10690:10;10687:34;10684:62;10681:88;;;10749:18;;:::i;:::-;10681:88;10789:10;10785:2;10778:22;10568:238;10525:281;;:::o;10812:129::-;10846:6;10873:20;;:::i;:::-;10863:30;;10902:33;10930:4;10922:6;10902:33;:::i;:::-;10812:129;;;:::o;10947:311::-;11024:4;11114:18;11106:6;11103:30;11100:56;;;11136:18;;:::i;:::-;11100:56;11186:4;11178:6;11174:17;11166:25;;11246:4;11240;11236:15;11228:23;;10947:311;;;:::o;11264:117::-;11373:1;11370;11363:12;11404:710;11500:5;11525:81;11541:64;11598:6;11541:64;:::i;:::-;11525:81;:::i;:::-;11516:90;;11626:5;11655:6;11648:5;11641:21;11689:4;11682:5;11678:16;11671:23;;11742:4;11734:6;11730:17;11722:6;11718:30;11771:3;11763:6;11760:15;11757:122;;;11790:79;;:::i;:::-;11757:122;11905:6;11888:220;11922:6;11917:3;11914:15;11888:220;;;11997:3;12026:37;12059:3;12047:10;12026:37;:::i;:::-;12021:3;12014:50;12093:4;12088:3;12084:14;12077:21;;11964:144;11948:4;11943:3;11939:14;11932:21;;11888:220;;;11892:21;11506:608;;11404:710;;;;;:::o;12137:370::-;12208:5;12257:3;12250:4;12242:6;12238:17;12234:27;12224:122;;12265:79;;:::i;:::-;12224:122;12382:6;12369:20;12407:94;12497:3;12489:6;12482:4;12474:6;12470:17;12407:94;:::i;:::-;12398:103;;12214:293;12137:370;;;;:::o;12513:684::-;12606:6;12614;12663:2;12651:9;12642:7;12638:23;12634:32;12631:119;;;12669:79;;:::i;:::-;12631:119;12789:1;12814:53;12859:7;12850:6;12839:9;12835:22;12814:53;:::i;:::-;12804:63;;12760:117;12944:2;12933:9;12929:18;12916:32;12975:18;12967:6;12964:30;12961:117;;;12997:79;;:::i;:::-;12961:117;13102:78;13172:7;13163:6;13152:9;13148:22;13102:78;:::i;:::-;13092:88;;12887:303;12513:684;;;;;:::o;13203:539::-;13287:6;13336:2;13324:9;13315:7;13311:23;13307:32;13304:119;;;13342:79;;:::i;:::-;13304:119;13490:1;13479:9;13475:17;13462:31;13520:18;13512:6;13509:30;13506:117;;;13542:79;;:::i;:::-;13506:117;13647:78;13717:7;13708:6;13697:9;13693:22;13647:78;:::i;:::-;13637:88;;13433:302;13203:539;;;;:::o;13748:90::-;13782:7;13825:5;13818:13;13811:21;13800:32;;13748:90;;;:::o;13844:116::-;13914:21;13929:5;13914:21;:::i;:::-;13907:5;13904:32;13894:60;;13950:1;13947;13940:12;13894:60;13844:116;:::o;13966:133::-;14009:5;14047:6;14034:20;14025:29;;14063:30;14087:5;14063:30;:::i;:::-;13966:133;;;;:::o;14105:323::-;14161:6;14210:2;14198:9;14189:7;14185:23;14181:32;14178:119;;;14216:79;;:::i;:::-;14178:119;14336:1;14361:50;14403:7;14394:6;14383:9;14379:22;14361:50;:::i;:::-;14351:60;;14307:114;14105:323;;;;:::o;14434:169::-;14518:11;14552:6;14547:3;14540:19;14592:4;14587:3;14583:14;14568:29;;14434:169;;;;:::o;14609:152::-;14749:4;14745:1;14737:6;14733:14;14726:28;14609:152;:::o;14767:365::-;14909:3;14930:66;14994:1;14989:3;14930:66;:::i;:::-;14923:73;;15005:93;15094:3;15005:93;:::i;:::-;15123:2;15118:3;15114:12;15107:19;;14767:365;;;:::o;15138:419::-;15304:4;15342:2;15331:9;15327:18;15319:26;;15391:9;15385:4;15381:20;15377:1;15366:9;15362:17;15355:47;15419:131;15545:4;15419:131;:::i;:::-;15411:139;;15138:419;;;:::o;15563:332::-;15684:4;15722:2;15711:9;15707:18;15699:26;;15735:71;15803:1;15792:9;15788:17;15779:6;15735:71;:::i;:::-;15816:72;15884:2;15873:9;15869:18;15860:6;15816:72;:::i;:::-;15563:332;;;;;:::o;15901:137::-;15955:5;15986:6;15980:13;15971:22;;16002:30;16026:5;16002:30;:::i;:::-;15901:137;;;;:::o;16044:345::-;16111:6;16160:2;16148:9;16139:7;16135:23;16131:32;16128:119;;;16166:79;;:::i;:::-;16128:119;16286:1;16311:61;16364:7;16355:6;16344:9;16340:22;16311:61;:::i;:::-;16301:71;;16257:125;16044:345;;;;:::o;16395:292::-;16535:34;16531:1;16523:6;16519:14;16512:58;16604:34;16599:2;16591:6;16587:15;16580:59;16673:6;16668:2;16660:6;16656:15;16649:31;16395:292;:::o;16693:366::-;16835:3;16856:67;16920:2;16915:3;16856:67;:::i;:::-;16849:74;;16932:93;17021:3;16932:93;:::i;:::-;17050:2;17045:3;17041:12;17034:19;;16693:366;;;:::o;17065:419::-;17231:4;17269:2;17258:9;17254:18;17246:26;;17318:9;17312:4;17308:20;17304:1;17293:9;17289:17;17282:47;17346:131;17472:4;17346:131;:::i;:::-;17338:139;;17065:419;;;:::o;17490:182::-;17630:34;17626:1;17618:6;17614:14;17607:58;17490:182;:::o;17678:366::-;17820:3;17841:67;17905:2;17900:3;17841:67;:::i;:::-;17834:74;;17917:93;18006:3;17917:93;:::i;:::-;18035:2;18030:3;18026:12;18019:19;;17678:366;;;:::o;18050:419::-;18216:4;18254:2;18243:9;18239:18;18231:26;;18303:9;18297:4;18293:20;18289:1;18278:9;18274:17;18267:47;18331:131;18457:4;18331:131;:::i;:::-;18323:139;;18050:419;;;:::o;18475:180::-;18523:77;18520:1;18513:88;18620:4;18617:1;18610:15;18644:4;18641:1;18634:15;18661:233;18700:3;18723:24;18741:5;18723:24;:::i;:::-;18714:33;;18769:66;18762:5;18759:77;18756:103;;18839:18;;:::i;:::-;18756:103;18886:1;18879:5;18875:13;18868:20;;18661:233;;;:::o;18900:180::-;18948:77;18945:1;18938:88;19045:4;19042:1;19035:15;19069:4;19066:1;19059:15;19086:176;19226:28;19222:1;19214:6;19210:14;19203:52;19086:176;:::o;19268:366::-;19410:3;19431:67;19495:2;19490:3;19431:67;:::i;:::-;19424:74;;19507:93;19596:3;19507:93;:::i;:::-;19625:2;19620:3;19616:12;19609:19;;19268:366;;;:::o;19640:419::-;19806:4;19844:2;19833:9;19829:18;19821:26;;19893:9;19887:4;19883:20;19879:1;19868:9;19864:17;19857:47;19921:131;20047:4;19921:131;:::i;:::-;19913:139;;19640:419;;;:::o;20065:177::-;20205:29;20201:1;20193:6;20189:14;20182:53;20065:177;:::o;20248:366::-;20390:3;20411:67;20475:2;20470:3;20411:67;:::i;:::-;20404:74;;20487:93;20576:3;20487:93;:::i;:::-;20605:2;20600:3;20596:12;20589:19;;20248:366;;;:::o;20620:419::-;20786:4;20824:2;20813:9;20809:18;20801:26;;20873:9;20867:4;20863:20;20859:1;20848:9;20844:17;20837:47;20901:131;21027:4;20901:131;:::i;:::-;20893:139;;20620:419;;;:::o;21045:178::-;21185:30;21181:1;21173:6;21169:14;21162:54;21045:178;:::o;21229:366::-;21371:3;21392:67;21456:2;21451:3;21392:67;:::i;:::-;21385:74;;21468:93;21557:3;21468:93;:::i;:::-;21586:2;21581:3;21577:12;21570:19;;21229:366;;;:::o;21601:419::-;21767:4;21805:2;21794:9;21790:18;21782:26;;21854:9;21848:4;21844:20;21840:1;21829:9;21825:17;21818:47;21882:131;22008:4;21882:131;:::i;:::-;21874:139;;21601:419;;;:::o;22026:167::-;22166:19;22162:1;22154:6;22150:14;22143:43;22026:167;:::o;22199:366::-;22341:3;22362:67;22426:2;22421:3;22362:67;:::i;:::-;22355:74;;22438:93;22527:3;22438:93;:::i;:::-;22556:2;22551:3;22547:12;22540:19;;22199:366;;;:::o;22571:419::-;22737:4;22775:2;22764:9;22760:18;22752:26;;22824:9;22818:4;22814:20;22810:1;22799:9;22795:17;22788:47;22852:131;22978:4;22852:131;:::i;:::-;22844:139;;22571:419;;;:::o;22996:176::-;23136:28;23132:1;23124:6;23120:14;23113:52;22996:176;:::o;23178:366::-;23320:3;23341:67;23405:2;23400:3;23341:67;:::i;:::-;23334:74;;23417:93;23506:3;23417:93;:::i;:::-;23535:2;23530:3;23526:12;23519:19;;23178:366;;;:::o;23550:419::-;23716:4;23754:2;23743:9;23739:18;23731:26;;23803:9;23797:4;23793:20;23789:1;23778:9;23774:17;23767:47;23831:131;23957:4;23831:131;:::i;:::-;23823:139;;23550:419;;;:::o;23975:172::-;24115:24;24111:1;24103:6;24099:14;24092:48;23975:172;:::o;24153:366::-;24295:3;24316:67;24380:2;24375:3;24316:67;:::i;:::-;24309:74;;24392:93;24481:3;24392:93;:::i;:::-;24510:2;24505:3;24501:12;24494:19;;24153:366;;;:::o;24525:419::-;24691:4;24729:2;24718:9;24714:18;24706:26;;24778:9;24772:4;24768:20;24764:1;24753:9;24749:17;24742:47;24806:131;24932:4;24806:131;:::i;:::-;24798:139;;24525:419;;;:::o;24950:172::-;25090:24;25086:1;25078:6;25074:14;25067:48;24950:172;:::o;25128:366::-;25270:3;25291:67;25355:2;25350:3;25291:67;:::i;:::-;25284:74;;25367:93;25456:3;25367:93;:::i;:::-;25485:2;25480:3;25476:12;25469:19;;25128:366;;;:::o;25500:419::-;25666:4;25704:2;25693:9;25689:18;25681:26;;25753:9;25747:4;25743:20;25739:1;25728:9;25724:17;25717:47;25781:131;25907:4;25781:131;:::i;:::-;25773:139;;25500:419;;;:::o;25925:225::-;26065:34;26061:1;26053:6;26049:14;26042:58;26134:8;26129:2;26121:6;26117:15;26110:33;25925:225;:::o;26156:366::-;26298:3;26319:67;26383:2;26378:3;26319:67;:::i;:::-;26312:74;;26395:93;26484:3;26395:93;:::i;:::-;26513:2;26508:3;26504:12;26497:19;;26156:366;;;:::o;26528:419::-;26694:4;26732:2;26721:9;26717:18;26709:26;;26781:9;26775:4;26771:20;26767:1;26756:9;26752:17;26745:47;26809:131;26935:4;26809:131;:::i;:::-;26801:139;;26528:419;;;:::o;26953:191::-;26993:3;27012:20;27030:1;27012:20;:::i;:::-;27007:25;;27046:20;27064:1;27046:20;:::i;:::-;27041:25;;27089:1;27086;27082:9;27075:16;;27110:3;27107:1;27104:10;27101:36;;;27117:18;;:::i;:::-;27101:36;26953:191;;;;:::o;27150:179::-;27290:31;27286:1;27278:6;27274:14;27267:55;27150:179;:::o;27335:366::-;27477:3;27498:67;27562:2;27557:3;27498:67;:::i;:::-;27491:74;;27574:93;27663:3;27574:93;:::i;:::-;27692:2;27687:3;27683:12;27676:19;;27335:366;;;:::o;27707:419::-;27873:4;27911:2;27900:9;27896:18;27888:26;;27960:9;27954:4;27950:20;27946:1;27935:9;27931:17;27924:47;27988:131;28114:4;27988:131;:::i;:::-;27980:139;;27707:419;;;:::o;28132:293::-;28272:34;28268:1;28260:6;28256:14;28249:58;28341:34;28336:2;28328:6;28324:15;28317:59;28410:7;28405:2;28397:6;28393:15;28386:32;28132:293;:::o;28431:366::-;28573:3;28594:67;28658:2;28653:3;28594:67;:::i;:::-;28587:74;;28670:93;28759:3;28670:93;:::i;:::-;28788:2;28783:3;28779:12;28772:19;;28431:366;;;:::o;28803:419::-;28969:4;29007:2;28996:9;28992:18;28984:26;;29056:9;29050:4;29046:20;29042:1;29031:9;29027:17;29020:47;29084:131;29210:4;29084:131;:::i;:::-;29076:139;;28803:419;;;:::o;29228:246::-;29368:34;29364:1;29356:6;29352:14;29345:58;29437:29;29432:2;29424:6;29420:15;29413:54;29228:246;:::o;29480:366::-;29622:3;29643:67;29707:2;29702:3;29643:67;:::i;:::-;29636:74;;29719:93;29808:3;29719:93;:::i;:::-;29837:2;29832:3;29828:12;29821:19;;29480:366;;;:::o;29852:419::-;30018:4;30056:2;30045:9;30041:18;30033:26;;30105:9;30099:4;30095:20;30091:1;30080:9;30076:17;30069:47;30133:131;30259:4;30133:131;:::i;:::-;30125:139;;29852:419;;;:::o;30277:194::-;30317:4;30337:20;30355:1;30337:20;:::i;:::-;30332:25;;30371:20;30389:1;30371:20;:::i;:::-;30366:25;;30415:1;30412;30408:9;30400:17;;30439:1;30433:4;30430:11;30427:37;;;30444:18;;:::i;:::-;30427:37;30277:194;;;;:::o;30477:180::-;30525:77;30522:1;30515:88;30622:4;30619:1;30612:15;30646:4;30643:1;30636:15;30663:185;30703:1;30720:20;30738:1;30720:20;:::i;:::-;30715:25;;30754:20;30772:1;30754:20;:::i;:::-;30749:25;;30793:1;30783:35;;30798:18;;:::i;:::-;30783:35;30840:1;30837;30833:9;30828:14;;30663:185;;;;:::o;30854:410::-;30894:7;30917:20;30935:1;30917:20;:::i;:::-;30912:25;;30951:20;30969:1;30951:20;:::i;:::-;30946:25;;31006:1;31003;30999:9;31028:30;31046:11;31028:30;:::i;:::-;31017:41;;31207:1;31198:7;31194:15;31191:1;31188:22;31168:1;31161:9;31141:83;31118:139;;31237:18;;:::i;:::-;31118:139;30902:362;30854:410;;;;:::o;31270:143::-;31327:5;31358:6;31352:13;31343:22;;31374:33;31401:5;31374:33;:::i;:::-;31270:143;;;;:::o;31419:351::-;31489:6;31538:2;31526:9;31517:7;31513:23;31509:32;31506:119;;;31544:79;;:::i;:::-;31506:119;31664:1;31689:64;31745:7;31736:6;31725:9;31721:22;31689:64;:::i;:::-;31679:74;;31635:128;31419:351;;;;:::o;31776:227::-;31916:34;31912:1;31904:6;31900:14;31893:58;31985:10;31980:2;31972:6;31968:15;31961:35;31776:227;:::o;32009:366::-;32151:3;32172:67;32236:2;32231:3;32172:67;:::i;:::-;32165:74;;32248:93;32337:3;32248:93;:::i;:::-;32366:2;32361:3;32357:12;32350:19;;32009:366;;;:::o;32381:419::-;32547:4;32585:2;32574:9;32570:18;32562:26;;32634:9;32628:4;32624:20;32620:1;32609:9;32605:17;32598:47;32662:131;32788:4;32662:131;:::i;:::-;32654:139;;32381:419;;;:::o;32806:442::-;32955:4;32993:2;32982:9;32978:18;32970:26;;33006:71;33074:1;33063:9;33059:17;33050:6;33006:71;:::i;:::-;33087:72;33155:2;33144:9;33140:18;33131:6;33087:72;:::i;:::-;33169;33237:2;33226:9;33222:18;33213:6;33169:72;:::i;:::-;32806:442;;;;;;:::o;33254:171::-;33293:3;33316:24;33334:5;33316:24;:::i;:::-;33307:33;;33362:4;33355:5;33352:15;33349:41;;33370:18;;:::i;:::-;33349:41;33417:1;33410:5;33406:13;33399:20;;33254:171;;;:::o;33431:174::-;33571:26;33567:1;33559:6;33555:14;33548:50;33431:174;:::o;33611:366::-;33753:3;33774:67;33838:2;33833:3;33774:67;:::i;:::-;33767:74;;33850:93;33939:3;33850:93;:::i;:::-;33968:2;33963:3;33959:12;33952:19;;33611:366;;;:::o;33983:419::-;34149:4;34187:2;34176:9;34172:18;34164:26;;34236:9;34230:4;34226:20;34222:1;34211:9;34207:17;34200:47;34264:131;34390:4;34264:131;:::i;:::-;34256:139;;33983:419;;;:::o;34408:161::-;34510:52;34556:5;34510:52;:::i;:::-;34505:3;34498:65;34408:161;;:::o;34575:472::-;34739:4;34777:2;34766:9;34762:18;34754:26;;34790:71;34858:1;34847:9;34843:17;34834:6;34790:71;:::i;:::-;34871:87;34954:2;34943:9;34939:18;34930:6;34871:87;:::i;:::-;34968:72;35036:2;35025:9;35021:18;35012:6;34968:72;:::i;:::-;34575:472;;;;;;:::o
Swarm Source
ipfs://0f547a0e94d7a4999b79e34818dd8294b4fe27f7cc548c0fdffbbe0caae76acd
Loading...
Loading
Loading...
Loading
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.