Source Code
Latest 25 from a total of 579 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Unlock | 22022911 | 349 days ago | IN | 0 ETH | 0.0010715 | ||||
| Lock | 20717539 | 532 days ago | IN | 0 ETH | 0.00379076 | ||||
| Unlock | 20601992 | 548 days ago | IN | 0 ETH | 0.00041999 | ||||
| Unlock | 20589645 | 549 days ago | IN | 0 ETH | 0.00057526 | ||||
| Unlock | 20231151 | 599 days ago | IN | 0 ETH | 0.00964879 | ||||
| Unlock | 19906730 | 645 days ago | IN | 0 ETH | 0.00114736 | ||||
| Unlock | 19631927 | 683 days ago | IN | 0 ETH | 0.01202183 | ||||
| Unlock | 19546118 | 695 days ago | IN | 0 ETH | 0.00297469 | ||||
| Unlock | 19531105 | 697 days ago | IN | 0 ETH | 0.00503908 | ||||
| Unlock | 19160638 | 749 days ago | IN | 0 ETH | 0.02641126 | ||||
| Lock | 18947334 | 779 days ago | IN | 0 ETH | 0.00731102 | ||||
| Lock | 18901878 | 786 days ago | IN | 0 ETH | 0.02661971 | ||||
| Lock | 18843835 | 794 days ago | IN | 0 ETH | 0.04294972 | ||||
| Lock | 18654996 | 820 days ago | IN | 0 ETH | 0.02444243 | ||||
| Lock | 18329127 | 866 days ago | IN | 0 ETH | 0.00853348 | ||||
| Lock | 18312000 | 868 days ago | IN | 0 ETH | 0.0174911 | ||||
| Unlock | 18208247 | 883 days ago | IN | 0 ETH | 0.00590755 | ||||
| Unlock | 18208237 | 883 days ago | IN | 0 ETH | 0.00558545 | ||||
| Lock | 18205806 | 883 days ago | IN | 0 ETH | 0.00729582 | ||||
| Lock | 18148969 | 891 days ago | IN | 0 ETH | 0.01013857 | ||||
| Lock | 18133654 | 893 days ago | IN | 0 ETH | 0.01175148 | ||||
| Unlock | 18088423 | 900 days ago | IN | 0 ETH | 0.00871566 | ||||
| Unlock | 18088421 | 900 days ago | IN | 0 ETH | 0.0084062 | ||||
| Lock | 18055516 | 904 days ago | IN | 0 ETH | 0.00829988 | ||||
| Unlock | 18031122 | 908 days ago | IN | 0 ETH | 0.0109081 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 16709442 | 1094 days ago | 0.00481559 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
WCADAOLocking
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-02-08
*/
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: 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 Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
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 `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/utils/ERC721Holder.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC721Receiver} interface.
*
* Accepts all token transfers.
* Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
*/
contract ERC721Holder is IERC721Receiver {
/**
* @dev See {IERC721Receiver-onERC721Received}.
*
* Always returns `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address,
address,
uint256,
bytes memory
) public virtual override returns (bytes4) {
return this.onERC721Received.selector;
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: contracts/WCADAOLocking.sol
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract WCADAOLocking is Ownable, ERC721Holder {
IWCATokensAggregator public WCATokensAggregator;
IWWCA public WWCA;
IERC20 public WCAToken;
IERC721Enumerable public WCANFT;
IERC721Enumerable public WCAMUNDIAL;
IERC721Enumerable public WCAVIP;
string public constant version = "0.2";
enum Collection {
WCA,
MUNDIAL,
VIP
}
struct NFT {
Collection collection;
uint256 id;
uint256 stakedTimestamp;
uint256 unstakedTimestamp;
}
struct Tokens {
uint256 amount;
uint256 stakedTimestamp;
uint256 unstakedTimestamp;
}
struct FeeConstraint {
uint256 day;
uint256 percentage;
}
mapping(address => NFT[]) public stakerToNFTs;
mapping(address => Tokens[]) public stakerToTokens;
// Amount of tokens locked and their origin
mapping(address => uint256) public stakerToLockedTokensFromStaking;
mapping(address => uint256) public stakerToLockedTokensFromWallet;
address[] public stakers;
// [[90, 30], [180, 20], [270, 10], [360, 5]]
FeeConstraint[] public feeConstraints;
constructor() {}
function setContracts(
address _WCATokensAggregator,
address _WCAToken,
address _WCANFT,
address _WCAMUNDIAL,
address _WCAVIP,
address _WWCA
) external onlyOwner {
WCATokensAggregator = IWCATokensAggregator(_WCATokensAggregator);
WCAToken = IERC20(_WCAToken);
WCANFT = IERC721Enumerable(_WCANFT);
WCAMUNDIAL = IERC721Enumerable(_WCAMUNDIAL);
WCAVIP = IERC721Enumerable(_WCAVIP);
WWCA = IWWCA(_WWCA);
}
function setFees(FeeConstraint[] calldata _feeConstraints) external onlyOwner {
delete feeConstraints;
for(uint256 i; i < _feeConstraints.length; i++){
feeConstraints.push(_feeConstraints[i]);
}
}
function getFees() external view returns(FeeConstraint[] memory){
return feeConstraints;
}
function getLockedNFTs(address _address) external view returns (NFT[] memory) {
return stakerToNFTs[_address];
}
function getLockedTokens(address _address) external view returns (Tokens[] memory) {
return stakerToTokens[_address];
}
function getLockedTokensFromStaking(address _address) external view returns (uint256) {
return stakerToLockedTokensFromStaking[_address];
}
function getLockedTokensFromWallet(address _address) external view returns (uint256) {
return stakerToLockedTokensFromWallet[_address];
}
function getStakers() external view returns (address[] memory) {
return stakers;
}
function lock(NFT[] calldata nfts, uint256 tokensAmount) external {
// NFTS
for (uint256 i = 0; i < nfts.length; i++) {
// Get collection ERC721
IERC721 nftCollection;
if (nfts[i].collection == Collection.WCA) {
nftCollection = WCANFT;
} else if (nfts[i].collection == Collection.MUNDIAL) {
nftCollection = WCAMUNDIAL;
} else if (nfts[i].collection == Collection.VIP) {
nftCollection = WCAVIP;
}
NFT memory nft = nfts[i];
nft.stakedTimestamp = block.timestamp;
nft.unstakedTimestamp = 0;
// Check if nfts are ok
require(nftCollection.ownerOf(nft.id) == msg.sender, "You don't own this token");
// Transfer and store NFTs
nftCollection.transferFrom(msg.sender, address(this), nft.id);
stakerToNFTs[msg.sender].push(nft);
}
// TOKENS
if (tokensAmount > 0) {
require(WCATokensAggregator.balanceOf(msg.sender) >= tokensAmount, "You haven't enough $WCA");
// If has already locked tokens in other contracts use them
uint256 availableToLockBalance = 0;
if (WCATokensAggregator.stakedBalanceOf(msg.sender) > stakerToLockedTokensFromStaking[msg.sender]) {
availableToLockBalance = WCATokensAggregator.stakedBalanceOf(msg.sender) - stakerToLockedTokensFromStaking[msg.sender];
}
if (availableToLockBalance >= tokensAmount) {
stakerToLockedTokensFromStaking[msg.sender] += tokensAmount;
Tokens memory tokens = Tokens(tokensAmount, block.timestamp, 0);
stakerToTokens[msg.sender].push(tokens);
} else {
uint256 tokenFromWallet = tokensAmount - availableToLockBalance;
WCAToken.transferFrom(msg.sender, address(this), tokenFromWallet);
stakerToLockedTokensFromStaking[msg.sender] += availableToLockBalance;
stakerToLockedTokensFromWallet[msg.sender] += tokenFromWallet;
Tokens memory tokens = Tokens(tokensAmount, block.timestamp, 0);
stakerToTokens[msg.sender].push(tokens);
}
}
// Add staker to array
if (nfts.length > 0 || tokensAmount > 0) {
stakers.push(msg.sender);
// Update WWCA
WWCA.updateWWCAByAddress(msg.sender);
}
}
function unlock() external {
IWWCA.WWCAAmount memory wwcaAmount = WWCA.WWCAOfAddress(msg.sender);
uint256 wwcaToApplyFees = wwcaAmount.wwcaToken + wwcaAmount.wwcaNFT;
uint256 lastStakeTimestamp;
// Unlock NFTs
for (uint256 i; i < stakerToNFTs[msg.sender].length; i++) {
// Get collection ERC721
IERC721 nftCollection;
if (stakerToNFTs[msg.sender][i].collection == Collection.WCA) {
nftCollection = WCANFT;
} else if (stakerToNFTs[msg.sender][i].collection == Collection.MUNDIAL) {
nftCollection = WCAMUNDIAL;
} else if (stakerToNFTs[msg.sender][i].collection == Collection.VIP) {
nftCollection = WCAVIP;
}
if (lastStakeTimestamp < stakerToNFTs[msg.sender][i].stakedTimestamp) {
lastStakeTimestamp = stakerToNFTs[msg.sender][i].stakedTimestamp;
}
stakerToNFTs[msg.sender][i].unstakedTimestamp = block.timestamp;
nftCollection.transferFrom(address(this), msg.sender, stakerToNFTs[msg.sender][i].id);
}
// Unlock Tokens
for (uint256 i; i < stakerToTokens[msg.sender].length; i++) {
if (lastStakeTimestamp < stakerToTokens[msg.sender][i].stakedTimestamp) {
lastStakeTimestamp = stakerToTokens[msg.sender][i].stakedTimestamp;
}
stakerToTokens[msg.sender][i].unstakedTimestamp = block.timestamp;
stakerToLockedTokensFromStaking[msg.sender] = 0;
uint256 tokenFromWallet = stakerToLockedTokensFromWallet[msg.sender];
stakerToLockedTokensFromWallet[msg.sender] = 0;
WCAToken.transfer(msg.sender, tokenFromWallet);
}
// Update WWCA
WWCA.updateWWCAByAddress(msg.sender);
// Calculate fees
uint256 fees;
for (uint256 i = 0; i < feeConstraints.length; i++) {
if (lastStakeTimestamp >= block.timestamp - (feeConstraints[i].day * 86400)) {
fees = (wwcaToApplyFees * feeConstraints[i].percentage) / 100;
break;
}
}
if (fees > 0) {
WCAToken.transferFrom(msg.sender, owner(), fees);
}
}
function estimateFeesToUnlock(address _address) external view returns (uint256) {
IWWCA.WWCAAmount memory wwcaAmount = WWCA.WWCAOfAddress(_address);
uint256 wwcaToApplyFees = wwcaAmount.wwcaToken + wwcaAmount.wwcaNFT;
uint256 lastStakeTimestamp;
// NFTs
for (uint256 i; i < stakerToNFTs[_address].length; i++) {
if (lastStakeTimestamp < stakerToNFTs[_address][i].stakedTimestamp) {
lastStakeTimestamp = stakerToNFTs[_address][i].stakedTimestamp;
}
}
// Tokens
for (uint256 i; i < stakerToTokens[_address].length; i++) {
if (lastStakeTimestamp < stakerToTokens[_address][i].stakedTimestamp) {
lastStakeTimestamp = stakerToTokens[_address][i].stakedTimestamp;
}
}
// Calculate fees
uint256 fees;
for (uint256 i = 0; i < feeConstraints.length; i++) {
if (lastStakeTimestamp >= block.timestamp - (feeConstraints[i].day * 86400)) {
fees = (wwcaToApplyFees * feeConstraints[i].percentage) / 100;
break;
}
}
return fees;
}
// Withdraw NFTs
function panicWithdrawNFTs() external onlyOwner {
uint256 tokenCount = WCANFT.balanceOf(address(this));
for (uint256 i = 0; i < tokenCount; i++) {
WCANFT.transferFrom(address(this), owner(), WCANFT.tokenOfOwnerByIndex(address(this), 0));
}
tokenCount = WCAMUNDIAL.balanceOf(address(this));
for (uint256 i = 0; i < tokenCount; i++) {
WCAMUNDIAL.transferFrom(address(this), owner(), WCAMUNDIAL.tokenOfOwnerByIndex(address(this), 0));
}
tokenCount = WCAVIP.balanceOf(address(this));
for (uint256 i = 0; i < tokenCount; i++) {
WCAVIP.transferFrom(address(this), owner(), WCAVIP.tokenOfOwnerByIndex(address(this), 0));
}
}
// Withdraw Tokens
function panicWithdrawTokens() external onlyOwner {
WCAToken.transfer(owner(), WCAToken.balanceOf(address(this)));
}
function removeAddressFromArray(address[] storage array, address _address) internal {
for (uint256 i = 0; i < array.length; i++) {
if (array[i] == _address) {
if (i < array.length - 1) {
array[i] = array[array.length - 1];
}
array.pop();
break;
}
}
}
}
interface IWWCA {
struct WWCAAmount {
uint256 wwcaToken;
uint256 wwcaNFT;
uint256 wwcaBonus;
}
function WWCAOfAddress(address _address) external view returns (WWCAAmount memory);
function updateWWCAByAddress(address _address) external;
}
interface IWCATokensAggregator {
function balanceOf(address _address) external view returns (uint256);
function stakedBalanceOf(address _address) external view returns (uint256);
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"WCAMUNDIAL","outputs":[{"internalType":"contract IERC721Enumerable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WCANFT","outputs":[{"internalType":"contract IERC721Enumerable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WCAToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WCATokensAggregator","outputs":[{"internalType":"contract IWCATokensAggregator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WCAVIP","outputs":[{"internalType":"contract IERC721Enumerable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WWCA","outputs":[{"internalType":"contract IWWCA","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"estimateFeesToUnlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feeConstraints","outputs":[{"internalType":"uint256","name":"day","type":"uint256"},{"internalType":"uint256","name":"percentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFees","outputs":[{"components":[{"internalType":"uint256","name":"day","type":"uint256"},{"internalType":"uint256","name":"percentage","type":"uint256"}],"internalType":"struct WCADAOLocking.FeeConstraint[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getLockedNFTs","outputs":[{"components":[{"internalType":"enum WCADAOLocking.Collection","name":"collection","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"stakedTimestamp","type":"uint256"},{"internalType":"uint256","name":"unstakedTimestamp","type":"uint256"}],"internalType":"struct WCADAOLocking.NFT[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getLockedTokens","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stakedTimestamp","type":"uint256"},{"internalType":"uint256","name":"unstakedTimestamp","type":"uint256"}],"internalType":"struct WCADAOLocking.Tokens[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getLockedTokensFromStaking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getLockedTokensFromWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum WCADAOLocking.Collection","name":"collection","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"stakedTimestamp","type":"uint256"},{"internalType":"uint256","name":"unstakedTimestamp","type":"uint256"}],"internalType":"struct WCADAOLocking.NFT[]","name":"nfts","type":"tuple[]"},{"internalType":"uint256","name":"tokensAmount","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"panicWithdrawNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"panicWithdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_WCATokensAggregator","type":"address"},{"internalType":"address","name":"_WCAToken","type":"address"},{"internalType":"address","name":"_WCANFT","type":"address"},{"internalType":"address","name":"_WCAMUNDIAL","type":"address"},{"internalType":"address","name":"_WCAVIP","type":"address"},{"internalType":"address","name":"_WWCA","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"day","type":"uint256"},{"internalType":"uint256","name":"percentage","type":"uint256"}],"internalType":"struct WCADAOLocking.FeeConstraint[]","name":"_feeConstraints","type":"tuple[]"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakerToLockedTokensFromStaking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakerToLockedTokensFromWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakerToNFTs","outputs":[{"internalType":"enum WCADAOLocking.Collection","name":"collection","type":"uint8"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"stakedTimestamp","type":"uint256"},{"internalType":"uint256","name":"unstakedTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakerToTokens","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stakedTimestamp","type":"uint256"},{"internalType":"uint256","name":"unstakedTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b5062000032620000266200003860201b60201c565b6200004060201b60201c565b62000104565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61453580620001146000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806385ae031711610104578063ae5a35b8116100a2578063dbbf48f411610071578063dbbf48f414610551578063f2fde38b14610581578063f403ce491461059d578063fd5e6dd1146105b9576101da565b8063ae5a35b8146104b5578063ce4ef527146104e5578063cfef03f614610515578063db8d55f114610533576101da565b8063a379b083116100de578063a379b08314610441578063a3fe56e614610471578063a69df4b51461048d578063ac13bf2614610497576101da565b806385ae0317146103e95780638da5cb5b14610419578063977273e914610437576101da565b8063618cd6c61161017c5780636f2ba1aa1161014b5780636f2ba1aa14610373578063715018a6146103a357806375486f1a146103ad5780638359b468146103cb576101da565b8063618cd6c6146102fd57806361a05f9b1461031b5780636b2d95d4146103255780636eeec3fa14610355576101da565b80632463a55a116101b85780632463a55a1461027257806343352d611461028e57806354fd4d50146102ac57806358ed943b146102ca576101da565b8063083f3fb2146101df578063150b7a02146102115780631dafd2d914610241575b600080fd5b6101f960048036038101906101f49190613118565b6105e9565b60405161020893929190613167565b60405180910390f35b61022b600480360381019061022691906132e4565b610630565b60405161023891906133a2565b60405180910390f35b61025b600480360381019061025691906133bd565b610644565b6040516102699291906133ea565b60405180910390f35b61028c60048036038101906102879190613413565b610678565b005b61029661080e565b6040516102a3919061355e565b60405180910390f35b6102b461089c565b6040516102c191906135ff565b60405180910390f35b6102e460048036038101906102df9190613118565b6108d5565b6040516102f49493929190613698565b60405180910390f35b61030561092f565b604051610312919061373c565b60405180910390f35b610323610955565b005b61033f600480360381019061033a9190613757565b610aa2565b60405161034c9190613884565b60405180910390f35b61035d610b5e565b60405161036a91906138c7565b60405180910390f35b61038d60048036038101906103889190613757565b610b84565b60405161039a91906138e2565b60405180910390f35b6103ab610bcd565b005b6103b5610be1565b6040516103c2919061391e565b60405180910390f35b6103d3610c07565b6040516103e0919061395a565b60405180910390f35b61040360048036038101906103fe9190613757565b610c2d565b6040516104109190613a88565b60405180910390f35b610421610d24565b60405161042e9190613ab9565b60405180910390f35b61043f610d4d565b005b61045b60048036038101906104569190613757565b611333565b60405161046891906138e2565b60405180910390f35b61048b60048036038101906104869190613b34565b61134b565b005b610495611e20565b005b61049f612891565b6040516104ac919061373c565b60405180910390f35b6104cf60048036038101906104ca9190613757565b6128b7565b6040516104dc91906138e2565b60405180910390f35b6104ff60048036038101906104fa9190613757565b612900565b60405161050c91906138e2565b60405180910390f35b61051d612cda565b60405161052a919061373c565b60405180910390f35b61053b612d00565b6040516105489190613c72565b60405180910390f35b61056b60048036038101906105669190613757565b612d73565b60405161057891906138e2565b60405180910390f35b61059b60048036038101906105969190613757565b612d8b565b005b6105b760048036038101906105b29190613cea565b612e0e565b005b6105d360048036038101906105ce91906133bd565b612e9c565b6040516105e09190613ab9565b60405180910390f35b6008602052816000526040600020818154811061060557600080fd5b9060005260206000209060030201600091509150508060000154908060010154908060020154905083565b600063150b7a0260e01b9050949350505050565b600c818154811061065457600080fd5b90600052602060002090600202016000915090508060000154908060010154905082565b610680612edb565b85600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050565b6060600b80548060200260200160405190810160405280929190818152602001828054801561089257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610848575b5050505050905090565b6040518060400160405280600381526020017f302e32000000000000000000000000000000000000000000000000000000000081525081565b600760205281600052604060002081815481106108f157600080fd5b9060005260206000209060040201600091509150508060000160009054906101000a900460ff16908060010154908060020154908060030154905084565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61095d612edb565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6109a3610d24565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109fe9190613ab9565b602060405180830381865afa158015610a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3f9190613d4c565b6040518363ffffffff1660e01b8152600401610a5c929190613d79565b6020604051808303816000875af1158015610a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9f9190613dda565b50565b6060600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610b535783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190610b03565b505050509050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610bd5612edb565b610bdf6000612f59565b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610d1957838290600052602060002090600402016040518060800160405290816000820160009054906101000a900460ff166002811115610cd657610cd5613621565b5b6002811115610ce857610ce7613621565b5b8152602001600182015481526020016002820154815260200160038201548152505081526020019060010190610c8e565b505050509050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d55612edb565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610db29190613ab9565b602060405180830381865afa158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df39190613d4c565b905060005b81811015610f4957600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd30610e47610d24565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c593060006040518363ffffffff1660e01b8152600401610ea5929190613e42565b602060405180830381865afa158015610ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee69190613d4c565b6040518463ffffffff1660e01b8152600401610f0493929190613e6b565b600060405180830381600087803b158015610f1e57600080fd5b505af1158015610f32573d6000803e3d6000fd5b505050508080610f4190613ed1565b915050610df8565b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fa59190613ab9565b602060405180830381865afa158015610fc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe69190613d4c565b905060005b8181101561113c57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3061103a610d24565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c593060006040518363ffffffff1660e01b8152600401611098929190613e42565b602060405180830381865afa1580156110b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d99190613d4c565b6040518463ffffffff1660e01b81526004016110f793929190613e6b565b600060405180830381600087803b15801561111157600080fd5b505af1158015611125573d6000803e3d6000fd5b50505050808061113490613ed1565b915050610feb565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111989190613ab9565b602060405180830381865afa1580156111b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d99190613d4c565b905060005b8181101561132f57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3061122d610d24565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c593060006040518363ffffffff1660e01b815260040161128b929190613e42565b602060405180830381865afa1580156112a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cc9190613d4c565b6040518463ffffffff1660e01b81526004016112ea93929190613e6b565b600060405180830381600087803b15801561130457600080fd5b505af1158015611318573d6000803e3d6000fd5b50505050808061132790613ed1565b9150506111de565b5050565b600a6020528060005260406000206000915090505481565b60005b8383905081101561174557600080600281111561136e5761136d613621565b5b85858481811061138157611380613f19565b5b90506080020160000160208101906113999190613f6d565b60028111156113ab576113aa613621565b5b036113da57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506114d7565b600160028111156113ee576113ed613621565b5b85858481811061140157611400613f19565b5b90506080020160000160208101906114199190613f6d565b600281111561142b5761142a613621565b5b0361145a57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506114d6565b60028081111561146d5761146c613621565b5b8585848181106114805761147f613f19565b5b90506080020160000160208101906114989190613f6d565b60028111156114aa576114a9613621565b5b036114d557600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b5b5b60008585848181106114ec576114eb613f19565b5b9050608002018036038101906115029190614017565b90504281604001818152505060008160600181815250503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e83602001516040518263ffffffff1660e01b815260040161156d91906138e2565b602060405180830381865afa15801561158a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ae9190614059565b73ffffffffffffffffffffffffffffffffffffffff1614611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb906140d2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd333084602001516040518463ffffffff1660e01b815260040161164593929190613e6b565b600060405180830381600087803b15801561165f57600080fd5b505af1158015611673573d6000803e3d6000fd5b50505050600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548160ff0219169083600281111561170b5761170a613621565b5b021790555060208201518160010155604082015181600201556060820151816003015550505050808061173d90613ed1565b91505061134e565b506000811115611d135780600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016117ab9190613ab9565b602060405180830381865afa1580156117c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ec9190613d4c565b101561182d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118249061413e565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316765391336040518263ffffffff1660e01b81526004016118ca9190613ab9565b602060405180830381865afa1580156118e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190b9190613d4c565b11156119fa57600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316765391336040518263ffffffff1660e01b81526004016119ac9190613ab9565b602060405180830381865afa1580156119c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ed9190613d4c565b6119f7919061415e565b90505b818110611b065781600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a509190614192565b925050819055506000604051806060016040528084815260200142815260200160008152509050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000209060030201600090919091909150600082015181600001556020820151816001015560408201518160020155505050611d11565b60008183611b14919061415e565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611b7593929190613e6b565b6020604051808303816000875af1158015611b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb89190613dda565b5081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c089190614192565b9250508190555080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c5e9190614192565b925050819055506000604051806060016040528085815260200142815260200160008152509050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000209060030201600090919091909150600082015181600001556020820151816001015560408201518160020155505050505b505b6000838390501180611d255750600081115b15611e1b57600b339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365263287336040518263ffffffff1660e01b8152600401611de89190613ab9565b600060405180830381600087803b158015611e0257600080fd5b505af1158015611e16573d6000803e3d6000fd5b505050505b505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166307f0111f336040518263ffffffff1660e01b8152600401611e7d9190613ab9565b606060405180830381865afa158015611e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebe919061422a565b9050600081602001518260000151611ed69190614192565b90506000805b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561238f576000806002811115611f3b57611f3a613621565b5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110611f8c57611f8b613f19565b5b906000526020600020906004020160000160009054906101000a900460ff166002811115611fbd57611fbc613621565b5b03611fec57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612173565b6001600281111561200057611fff613621565b5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061205157612050613f19565b5b906000526020600020906004020160000160009054906101000a900460ff16600281111561208257612081613621565b5b036120b157600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612172565b6002808111156120c4576120c3613621565b5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061211557612114613f19565b5b906000526020600020906004020160000160009054906101000a900460ff16600281111561214657612145613621565b5b0361217157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b5b5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106121c4576121c3613f19565b5b90600052602060002090600402016002015483101561224357600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061222e5761222d613f19565b5b90600052602060002090600402016002015492505b42600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061229557612294613f19565b5b9060005260206000209060040201600301819055508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3033600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020868154811061231957612318613f19565b5b9060005260206000209060040201600101546040518463ffffffff1660e01b815260040161234993929190613e6b565b600060405180830381600087803b15801561236357600080fd5b505af1158015612377573d6000803e3d6000fd5b5050505050808061238790613ed1565b915050611edc565b5060005b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561269757600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061242e5761242d613f19565b5b9060005260206000209060030201600101548210156124ad57600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061249857612497613f19565b5b90600052602060002090600302016001015491505b42600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106124ff576124fe613f19565b5b9060005260206000209060030201600201819055506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161263f929190613d79565b6020604051808303816000875af115801561265e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126829190613dda565b5050808061268f90613ed1565b915050612393565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365263287336040518263ffffffff1660e01b81526004016126f39190613ab9565b600060405180830381600087803b15801561270d57600080fd5b505af1158015612721573d6000803e3d6000fd5b50505050600080600090505b600c805490508110156127d65762015180600c828154811061275257612751613f19565b5b90600052602060002090600202016000015461276e9190614257565b42612779919061415e565b83106127c3576064600c828154811061279557612794613f19565b5b906000526020600020906002020160010154856127b29190614257565b6127bc91906142c8565b91506127d6565b80806127ce90613ed1565b91505061272d565b50600081111561288b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33612827610d24565b846040518463ffffffff1660e01b815260040161284693929190613e6b565b6020604051808303816000875af1158015612865573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128899190613dda565b505b50505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166307f0111f846040518263ffffffff1660e01b815260040161295e9190613ab9565b606060405180830381865afa15801561297b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299f919061422a565b90506000816020015182600001516129b79190614192565b90506000805b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015612aea57600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208181548110612a5857612a57613f19565b5b906000526020600020906004020160020154821015612ad757600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208181548110612ac257612ac1613f19565b5b90600052602060002090600402016002015491505b8080612ae290613ed1565b9150506129bd565b5060005b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015612c1b57600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208181548110612b8957612b88613f19565b5b906000526020600020906003020160010154821015612c0857600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208181548110612bf357612bf2613f19565b5b90600052602060002090600302016001015491505b8080612c1390613ed1565b915050612aee565b50600080600090505b600c80549050811015612ccd5762015180600c8281548110612c4957612c48613f19565b5b906000526020600020906002020160000154612c659190614257565b42612c70919061415e565b8310612cba576064600c8281548110612c8c57612c8b613f19565b5b90600052602060002090600202016001015485612ca99190614257565b612cb391906142c8565b9150612ccd565b8080612cc590613ed1565b915050612c24565b5080945050505050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600c805480602002602001604051908101604052809291908181526020016000905b82821015612d6a57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190612d24565b50505050905090565b60096020528060005260406000206000915090505481565b612d93612edb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df99061436b565b60405180910390fd5b612e0b81612f59565b50565b612e16612edb565b600c6000612e249190613025565b60005b82829050811015612e9757600c838383818110612e4757612e46613f19565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181612e829190614485565b50508080612e8f90613ed1565b915050612e27565b505050565b600b8181548110612eac57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612ee361301d565b73ffffffffffffffffffffffffffffffffffffffff16612f01610d24565b73ffffffffffffffffffffffffffffffffffffffff1614612f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4e906144df565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b50805460008255600202906000526020600020908101906130469190613049565b50565b5b8082111561306c5760008082016000905560018201600090555060020161304a565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130af82613084565b9050919050565b6130bf816130a4565b81146130ca57600080fd5b50565b6000813590506130dc816130b6565b92915050565b6000819050919050565b6130f5816130e2565b811461310057600080fd5b50565b600081359050613112816130ec565b92915050565b6000806040838503121561312f5761312e61307a565b5b600061313d858286016130cd565b925050602061314e85828601613103565b9150509250929050565b613161816130e2565b82525050565b600060608201905061317c6000830186613158565b6131896020830185613158565b6131966040830184613158565b949350505050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6131f1826131a8565b810181811067ffffffffffffffff821117156132105761320f6131b9565b5b80604052505050565b6000613223613070565b905061322f82826131e8565b919050565b600067ffffffffffffffff82111561324f5761324e6131b9565b5b613258826131a8565b9050602081019050919050565b82818337600083830152505050565b600061328761328284613234565b613219565b9050828152602081018484840111156132a3576132a26131a3565b5b6132ae848285613265565b509392505050565b600082601f8301126132cb576132ca61319e565b5b81356132db848260208601613274565b91505092915050565b600080600080608085870312156132fe576132fd61307a565b5b600061330c878288016130cd565b945050602061331d878288016130cd565b935050604061332e87828801613103565b925050606085013567ffffffffffffffff81111561334f5761334e61307f565b5b61335b878288016132b6565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61339c81613367565b82525050565b60006020820190506133b76000830184613393565b92915050565b6000602082840312156133d3576133d261307a565b5b60006133e184828501613103565b91505092915050565b60006040820190506133ff6000830185613158565b61340c6020830184613158565b9392505050565b60008060008060008060c087890312156134305761342f61307a565b5b600061343e89828a016130cd565b965050602061344f89828a016130cd565b955050604061346089828a016130cd565b945050606061347189828a016130cd565b935050608061348289828a016130cd565b92505060a061349389828a016130cd565b9150509295509295509295565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6134d5816130a4565b82525050565b60006134e783836134cc565b60208301905092915050565b6000602082019050919050565b600061350b826134a0565b61351581856134ab565b9350613520836134bc565b8060005b8381101561355157815161353888826134db565b9750613543836134f3565b925050600181019050613524565b5085935050505092915050565b600060208201905081810360008301526135788184613500565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135ba57808201518184015260208101905061359f565b60008484015250505050565b60006135d182613580565b6135db818561358b565b93506135eb81856020860161359c565b6135f4816131a8565b840191505092915050565b6000602082019050818103600083015261361981846135c6565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061366157613660613621565b5b50565b600081905061367282613650565b919050565b600061368282613664565b9050919050565b61369281613677565b82525050565b60006080820190506136ad6000830187613689565b6136ba6020830186613158565b6136c76040830185613158565b6136d46060830184613158565b95945050505050565b6000819050919050565b60006137026136fd6136f884613084565b6136dd565b613084565b9050919050565b6000613714826136e7565b9050919050565b600061372682613709565b9050919050565b6137368161371b565b82525050565b6000602082019050613751600083018461372d565b92915050565b60006020828403121561376d5761376c61307a565b5b600061377b848285016130cd565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137b9816130e2565b82525050565b6060820160008201516137d560008501826137b0565b5060208201516137e860208501826137b0565b5060408201516137fb60408501826137b0565b50505050565b600061380d83836137bf565b60608301905092915050565b6000602082019050919050565b600061383182613784565b61383b818561378f565b9350613846836137a0565b8060005b8381101561387757815161385e8882613801565b975061386983613819565b92505060018101905061384a565b5085935050505092915050565b6000602082019050818103600083015261389e8184613826565b905092915050565b60006138b182613709565b9050919050565b6138c1816138a6565b82525050565b60006020820190506138dc60008301846138b8565b92915050565b60006020820190506138f76000830184613158565b92915050565b600061390882613709565b9050919050565b613918816138fd565b82525050565b6000602082019050613933600083018461390f565b92915050565b600061394482613709565b9050919050565b61395481613939565b82525050565b600060208201905061396f600083018461394b565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139aa81613677565b82525050565b6080820160008201516139c660008501826139a1565b5060208201516139d960208501826137b0565b5060408201516139ec60408501826137b0565b5060608201516139ff60608501826137b0565b50505050565b6000613a1183836139b0565b60808301905092915050565b6000602082019050919050565b6000613a3582613975565b613a3f8185613980565b9350613a4a83613991565b8060005b83811015613a7b578151613a628882613a05565b9750613a6d83613a1d565b925050600181019050613a4e565b5085935050505092915050565b60006020820190508181036000830152613aa28184613a2a565b905092915050565b613ab3816130a4565b82525050565b6000602082019050613ace6000830184613aaa565b92915050565b600080fd5b600080fd5b60008083601f840112613af457613af361319e565b5b8235905067ffffffffffffffff811115613b1157613b10613ad4565b5b602083019150836080820283011115613b2d57613b2c613ad9565b5b9250929050565b600080600060408486031215613b4d57613b4c61307a565b5b600084013567ffffffffffffffff811115613b6b57613b6a61307f565b5b613b7786828701613ade565b93509350506020613b8a86828701613103565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b604082016000820151613bd660008501826137b0565b506020820151613be960208501826137b0565b50505050565b6000613bfb8383613bc0565b60408301905092915050565b6000602082019050919050565b6000613c1f82613b94565b613c298185613b9f565b9350613c3483613bb0565b8060005b83811015613c65578151613c4c8882613bef565b9750613c5783613c07565b925050600181019050613c38565b5085935050505092915050565b60006020820190508181036000830152613c8c8184613c14565b905092915050565b60008083601f840112613caa57613ca961319e565b5b8235905067ffffffffffffffff811115613cc757613cc6613ad4565b5b602083019150836040820283011115613ce357613ce2613ad9565b5b9250929050565b60008060208385031215613d0157613d0061307a565b5b600083013567ffffffffffffffff811115613d1f57613d1e61307f565b5b613d2b85828601613c94565b92509250509250929050565b600081519050613d46816130ec565b92915050565b600060208284031215613d6257613d6161307a565b5b6000613d7084828501613d37565b91505092915050565b6000604082019050613d8e6000830185613aaa565b613d9b6020830184613158565b9392505050565b60008115159050919050565b613db781613da2565b8114613dc257600080fd5b50565b600081519050613dd481613dae565b92915050565b600060208284031215613df057613def61307a565b5b6000613dfe84828501613dc5565b91505092915050565b6000819050919050565b6000613e2c613e27613e2284613e07565b6136dd565b6130e2565b9050919050565b613e3c81613e11565b82525050565b6000604082019050613e576000830185613aaa565b613e646020830184613e33565b9392505050565b6000606082019050613e806000830186613aaa565b613e8d6020830185613aaa565b613e9a6040830184613158565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613edc826130e2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f0e57613f0d613ea2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60038110613f5557600080fd5b50565b600081359050613f6781613f48565b92915050565b600060208284031215613f8357613f8261307a565b5b6000613f9184828501613f58565b91505092915050565b600080fd5b600060808284031215613fb557613fb4613f9a565b5b613fbf6080613219565b90506000613fcf84828501613f58565b6000830152506020613fe384828501613103565b6020830152506040613ff784828501613103565b604083015250606061400b84828501613103565b60608301525092915050565b60006080828403121561402d5761402c61307a565b5b600061403b84828501613f9f565b91505092915050565b600081519050614053816130b6565b92915050565b60006020828403121561406f5761406e61307a565b5b600061407d84828501614044565b91505092915050565b7f596f7520646f6e2774206f776e207468697320746f6b656e0000000000000000600082015250565b60006140bc60188361358b565b91506140c782614086565b602082019050919050565b600060208201905081810360008301526140eb816140af565b9050919050565b7f596f7520686176656e277420656e6f7567682024574341000000000000000000600082015250565b600061412860178361358b565b9150614133826140f2565b602082019050919050565b600060208201905081810360008301526141578161411b565b9050919050565b6000614169826130e2565b9150614174836130e2565b925082820390508181111561418c5761418b613ea2565b5b92915050565b600061419d826130e2565b91506141a8836130e2565b92508282019050808211156141c0576141bf613ea2565b5b92915050565b6000606082840312156141dc576141db613f9a565b5b6141e66060613219565b905060006141f684828501613d37565b600083015250602061420a84828501613d37565b602083015250604061421e84828501613d37565b60408301525092915050565b6000606082840312156142405761423f61307a565b5b600061424e848285016141c6565b91505092915050565b6000614262826130e2565b915061426d836130e2565b925082820261427b816130e2565b9150828204841483151761429257614291613ea2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142d3826130e2565b91506142de836130e2565b9250826142ee576142ed614299565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061435560268361358b565b9150614360826142f9565b604082019050919050565b6000602082019050818103600083015261438481614348565b9050919050565b60008135614398816130ec565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6143da846143a1565b9350801983169250808416831791505092915050565b600061440b614406614401846130e2565b6136dd565b6130e2565b9050919050565b6000819050919050565b614425826143f0565b61443861443182614412565b83546143ae565b8255505050565b6000810160008301806144518161438b565b905061445d818461441c565b5050506001810160208301806144728161438b565b905061447e818461441c565b5050505050565b61448f828261443f565b5050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144c960208361358b565b91506144d482614493565b602082019050919050565b600060208201905081810360008301526144f8816144bc565b905091905056fea2646970667358221220d4ff6943e05b13ffded9d4fd03c49b6541e9c78bb839064a7b2fd0826f4f862864736f6c63430008110033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806385ae031711610104578063ae5a35b8116100a2578063dbbf48f411610071578063dbbf48f414610551578063f2fde38b14610581578063f403ce491461059d578063fd5e6dd1146105b9576101da565b8063ae5a35b8146104b5578063ce4ef527146104e5578063cfef03f614610515578063db8d55f114610533576101da565b8063a379b083116100de578063a379b08314610441578063a3fe56e614610471578063a69df4b51461048d578063ac13bf2614610497576101da565b806385ae0317146103e95780638da5cb5b14610419578063977273e914610437576101da565b8063618cd6c61161017c5780636f2ba1aa1161014b5780636f2ba1aa14610373578063715018a6146103a357806375486f1a146103ad5780638359b468146103cb576101da565b8063618cd6c6146102fd57806361a05f9b1461031b5780636b2d95d4146103255780636eeec3fa14610355576101da565b80632463a55a116101b85780632463a55a1461027257806343352d611461028e57806354fd4d50146102ac57806358ed943b146102ca576101da565b8063083f3fb2146101df578063150b7a02146102115780631dafd2d914610241575b600080fd5b6101f960048036038101906101f49190613118565b6105e9565b60405161020893929190613167565b60405180910390f35b61022b600480360381019061022691906132e4565b610630565b60405161023891906133a2565b60405180910390f35b61025b600480360381019061025691906133bd565b610644565b6040516102699291906133ea565b60405180910390f35b61028c60048036038101906102879190613413565b610678565b005b61029661080e565b6040516102a3919061355e565b60405180910390f35b6102b461089c565b6040516102c191906135ff565b60405180910390f35b6102e460048036038101906102df9190613118565b6108d5565b6040516102f49493929190613698565b60405180910390f35b61030561092f565b604051610312919061373c565b60405180910390f35b610323610955565b005b61033f600480360381019061033a9190613757565b610aa2565b60405161034c9190613884565b60405180910390f35b61035d610b5e565b60405161036a91906138c7565b60405180910390f35b61038d60048036038101906103889190613757565b610b84565b60405161039a91906138e2565b60405180910390f35b6103ab610bcd565b005b6103b5610be1565b6040516103c2919061391e565b60405180910390f35b6103d3610c07565b6040516103e0919061395a565b60405180910390f35b61040360048036038101906103fe9190613757565b610c2d565b6040516104109190613a88565b60405180910390f35b610421610d24565b60405161042e9190613ab9565b60405180910390f35b61043f610d4d565b005b61045b60048036038101906104569190613757565b611333565b60405161046891906138e2565b60405180910390f35b61048b60048036038101906104869190613b34565b61134b565b005b610495611e20565b005b61049f612891565b6040516104ac919061373c565b60405180910390f35b6104cf60048036038101906104ca9190613757565b6128b7565b6040516104dc91906138e2565b60405180910390f35b6104ff60048036038101906104fa9190613757565b612900565b60405161050c91906138e2565b60405180910390f35b61051d612cda565b60405161052a919061373c565b60405180910390f35b61053b612d00565b6040516105489190613c72565b60405180910390f35b61056b60048036038101906105669190613757565b612d73565b60405161057891906138e2565b60405180910390f35b61059b60048036038101906105969190613757565b612d8b565b005b6105b760048036038101906105b29190613cea565b612e0e565b005b6105d360048036038101906105ce91906133bd565b612e9c565b6040516105e09190613ab9565b60405180910390f35b6008602052816000526040600020818154811061060557600080fd5b9060005260206000209060030201600091509150508060000154908060010154908060020154905083565b600063150b7a0260e01b9050949350505050565b600c818154811061065457600080fd5b90600052602060002090600202016000915090508060000154908060010154905082565b610680612edb565b85600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050565b6060600b80548060200260200160405190810160405280929190818152602001828054801561089257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610848575b5050505050905090565b6040518060400160405280600381526020017f302e32000000000000000000000000000000000000000000000000000000000081525081565b600760205281600052604060002081815481106108f157600080fd5b9060005260206000209060040201600091509150508060000160009054906101000a900460ff16908060010154908060020154908060030154905084565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61095d612edb565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6109a3610d24565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109fe9190613ab9565b602060405180830381865afa158015610a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3f9190613d4c565b6040518363ffffffff1660e01b8152600401610a5c929190613d79565b6020604051808303816000875af1158015610a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9f9190613dda565b50565b6060600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610b535783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190610b03565b505050509050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610bd5612edb565b610bdf6000612f59565b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610d1957838290600052602060002090600402016040518060800160405290816000820160009054906101000a900460ff166002811115610cd657610cd5613621565b5b6002811115610ce857610ce7613621565b5b8152602001600182015481526020016002820154815260200160038201548152505081526020019060010190610c8e565b505050509050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d55612edb565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610db29190613ab9565b602060405180830381865afa158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df39190613d4c565b905060005b81811015610f4957600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd30610e47610d24565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c593060006040518363ffffffff1660e01b8152600401610ea5929190613e42565b602060405180830381865afa158015610ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee69190613d4c565b6040518463ffffffff1660e01b8152600401610f0493929190613e6b565b600060405180830381600087803b158015610f1e57600080fd5b505af1158015610f32573d6000803e3d6000fd5b505050508080610f4190613ed1565b915050610df8565b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fa59190613ab9565b602060405180830381865afa158015610fc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe69190613d4c565b905060005b8181101561113c57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3061103a610d24565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c593060006040518363ffffffff1660e01b8152600401611098929190613e42565b602060405180830381865afa1580156110b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d99190613d4c565b6040518463ffffffff1660e01b81526004016110f793929190613e6b565b600060405180830381600087803b15801561111157600080fd5b505af1158015611125573d6000803e3d6000fd5b50505050808061113490613ed1565b915050610feb565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111989190613ab9565b602060405180830381865afa1580156111b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d99190613d4c565b905060005b8181101561132f57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3061122d610d24565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c593060006040518363ffffffff1660e01b815260040161128b929190613e42565b602060405180830381865afa1580156112a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cc9190613d4c565b6040518463ffffffff1660e01b81526004016112ea93929190613e6b565b600060405180830381600087803b15801561130457600080fd5b505af1158015611318573d6000803e3d6000fd5b50505050808061132790613ed1565b9150506111de565b5050565b600a6020528060005260406000206000915090505481565b60005b8383905081101561174557600080600281111561136e5761136d613621565b5b85858481811061138157611380613f19565b5b90506080020160000160208101906113999190613f6d565b60028111156113ab576113aa613621565b5b036113da57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506114d7565b600160028111156113ee576113ed613621565b5b85858481811061140157611400613f19565b5b90506080020160000160208101906114199190613f6d565b600281111561142b5761142a613621565b5b0361145a57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506114d6565b60028081111561146d5761146c613621565b5b8585848181106114805761147f613f19565b5b90506080020160000160208101906114989190613f6d565b60028111156114aa576114a9613621565b5b036114d557600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b5b5b60008585848181106114ec576114eb613f19565b5b9050608002018036038101906115029190614017565b90504281604001818152505060008160600181815250503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e83602001516040518263ffffffff1660e01b815260040161156d91906138e2565b602060405180830381865afa15801561158a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ae9190614059565b73ffffffffffffffffffffffffffffffffffffffff1614611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb906140d2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd333084602001516040518463ffffffff1660e01b815260040161164593929190613e6b565b600060405180830381600087803b15801561165f57600080fd5b505af1158015611673573d6000803e3d6000fd5b50505050600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548160ff0219169083600281111561170b5761170a613621565b5b021790555060208201518160010155604082015181600201556060820151816003015550505050808061173d90613ed1565b91505061134e565b506000811115611d135780600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016117ab9190613ab9565b602060405180830381865afa1580156117c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ec9190613d4c565b101561182d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118249061413e565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316765391336040518263ffffffff1660e01b81526004016118ca9190613ab9565b602060405180830381865afa1580156118e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190b9190613d4c565b11156119fa57600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316765391336040518263ffffffff1660e01b81526004016119ac9190613ab9565b602060405180830381865afa1580156119c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ed9190613d4c565b6119f7919061415e565b90505b818110611b065781600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a509190614192565b925050819055506000604051806060016040528084815260200142815260200160008152509050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000209060030201600090919091909150600082015181600001556020820151816001015560408201518160020155505050611d11565b60008183611b14919061415e565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611b7593929190613e6b565b6020604051808303816000875af1158015611b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb89190613dda565b5081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c089190614192565b9250508190555080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c5e9190614192565b925050819055506000604051806060016040528085815260200142815260200160008152509050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000209060030201600090919091909150600082015181600001556020820151816001015560408201518160020155505050505b505b6000838390501180611d255750600081115b15611e1b57600b339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365263287336040518263ffffffff1660e01b8152600401611de89190613ab9565b600060405180830381600087803b158015611e0257600080fd5b505af1158015611e16573d6000803e3d6000fd5b505050505b505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166307f0111f336040518263ffffffff1660e01b8152600401611e7d9190613ab9565b606060405180830381865afa158015611e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebe919061422a565b9050600081602001518260000151611ed69190614192565b90506000805b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561238f576000806002811115611f3b57611f3a613621565b5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110611f8c57611f8b613f19565b5b906000526020600020906004020160000160009054906101000a900460ff166002811115611fbd57611fbc613621565b5b03611fec57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612173565b6001600281111561200057611fff613621565b5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061205157612050613f19565b5b906000526020600020906004020160000160009054906101000a900460ff16600281111561208257612081613621565b5b036120b157600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612172565b6002808111156120c4576120c3613621565b5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061211557612114613f19565b5b906000526020600020906004020160000160009054906101000a900460ff16600281111561214657612145613621565b5b0361217157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b5b5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106121c4576121c3613f19565b5b90600052602060002090600402016002015483101561224357600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061222e5761222d613f19565b5b90600052602060002090600402016002015492505b42600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061229557612294613f19565b5b9060005260206000209060040201600301819055508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3033600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020868154811061231957612318613f19565b5b9060005260206000209060040201600101546040518463ffffffff1660e01b815260040161234993929190613e6b565b600060405180830381600087803b15801561236357600080fd5b505af1158015612377573d6000803e3d6000fd5b5050505050808061238790613ed1565b915050611edc565b5060005b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561269757600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061242e5761242d613f19565b5b9060005260206000209060030201600101548210156124ad57600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061249857612497613f19565b5b90600052602060002090600302016001015491505b42600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106124ff576124fe613f19565b5b9060005260206000209060030201600201819055506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161263f929190613d79565b6020604051808303816000875af115801561265e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126829190613dda565b5050808061268f90613ed1565b915050612393565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365263287336040518263ffffffff1660e01b81526004016126f39190613ab9565b600060405180830381600087803b15801561270d57600080fd5b505af1158015612721573d6000803e3d6000fd5b50505050600080600090505b600c805490508110156127d65762015180600c828154811061275257612751613f19565b5b90600052602060002090600202016000015461276e9190614257565b42612779919061415e565b83106127c3576064600c828154811061279557612794613f19565b5b906000526020600020906002020160010154856127b29190614257565b6127bc91906142c8565b91506127d6565b80806127ce90613ed1565b91505061272d565b50600081111561288b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33612827610d24565b846040518463ffffffff1660e01b815260040161284693929190613e6b565b6020604051808303816000875af1158015612865573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128899190613dda565b505b50505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166307f0111f846040518263ffffffff1660e01b815260040161295e9190613ab9565b606060405180830381865afa15801561297b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299f919061422a565b90506000816020015182600001516129b79190614192565b90506000805b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015612aea57600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208181548110612a5857612a57613f19565b5b906000526020600020906004020160020154821015612ad757600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208181548110612ac257612ac1613f19565b5b90600052602060002090600402016002015491505b8080612ae290613ed1565b9150506129bd565b5060005b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015612c1b57600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208181548110612b8957612b88613f19565b5b906000526020600020906003020160010154821015612c0857600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208181548110612bf357612bf2613f19565b5b90600052602060002090600302016001015491505b8080612c1390613ed1565b915050612aee565b50600080600090505b600c80549050811015612ccd5762015180600c8281548110612c4957612c48613f19565b5b906000526020600020906002020160000154612c659190614257565b42612c70919061415e565b8310612cba576064600c8281548110612c8c57612c8b613f19565b5b90600052602060002090600202016001015485612ca99190614257565b612cb391906142c8565b9150612ccd565b8080612cc590613ed1565b915050612c24565b5080945050505050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600c805480602002602001604051908101604052809291908181526020016000905b82821015612d6a57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190612d24565b50505050905090565b60096020528060005260406000206000915090505481565b612d93612edb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df99061436b565b60405180910390fd5b612e0b81612f59565b50565b612e16612edb565b600c6000612e249190613025565b60005b82829050811015612e9757600c838383818110612e4757612e46613f19565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181612e829190614485565b50508080612e8f90613ed1565b915050612e27565b505050565b600b8181548110612eac57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612ee361301d565b73ffffffffffffffffffffffffffffffffffffffff16612f01610d24565b73ffffffffffffffffffffffffffffffffffffffff1614612f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4e906144df565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b50805460008255600202906000526020600020908101906130469190613049565b50565b5b8082111561306c5760008082016000905560018201600090555060020161304a565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130af82613084565b9050919050565b6130bf816130a4565b81146130ca57600080fd5b50565b6000813590506130dc816130b6565b92915050565b6000819050919050565b6130f5816130e2565b811461310057600080fd5b50565b600081359050613112816130ec565b92915050565b6000806040838503121561312f5761312e61307a565b5b600061313d858286016130cd565b925050602061314e85828601613103565b9150509250929050565b613161816130e2565b82525050565b600060608201905061317c6000830186613158565b6131896020830185613158565b6131966040830184613158565b949350505050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6131f1826131a8565b810181811067ffffffffffffffff821117156132105761320f6131b9565b5b80604052505050565b6000613223613070565b905061322f82826131e8565b919050565b600067ffffffffffffffff82111561324f5761324e6131b9565b5b613258826131a8565b9050602081019050919050565b82818337600083830152505050565b600061328761328284613234565b613219565b9050828152602081018484840111156132a3576132a26131a3565b5b6132ae848285613265565b509392505050565b600082601f8301126132cb576132ca61319e565b5b81356132db848260208601613274565b91505092915050565b600080600080608085870312156132fe576132fd61307a565b5b600061330c878288016130cd565b945050602061331d878288016130cd565b935050604061332e87828801613103565b925050606085013567ffffffffffffffff81111561334f5761334e61307f565b5b61335b878288016132b6565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61339c81613367565b82525050565b60006020820190506133b76000830184613393565b92915050565b6000602082840312156133d3576133d261307a565b5b60006133e184828501613103565b91505092915050565b60006040820190506133ff6000830185613158565b61340c6020830184613158565b9392505050565b60008060008060008060c087890312156134305761342f61307a565b5b600061343e89828a016130cd565b965050602061344f89828a016130cd565b955050604061346089828a016130cd565b945050606061347189828a016130cd565b935050608061348289828a016130cd565b92505060a061349389828a016130cd565b9150509295509295509295565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6134d5816130a4565b82525050565b60006134e783836134cc565b60208301905092915050565b6000602082019050919050565b600061350b826134a0565b61351581856134ab565b9350613520836134bc565b8060005b8381101561355157815161353888826134db565b9750613543836134f3565b925050600181019050613524565b5085935050505092915050565b600060208201905081810360008301526135788184613500565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135ba57808201518184015260208101905061359f565b60008484015250505050565b60006135d182613580565b6135db818561358b565b93506135eb81856020860161359c565b6135f4816131a8565b840191505092915050565b6000602082019050818103600083015261361981846135c6565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061366157613660613621565b5b50565b600081905061367282613650565b919050565b600061368282613664565b9050919050565b61369281613677565b82525050565b60006080820190506136ad6000830187613689565b6136ba6020830186613158565b6136c76040830185613158565b6136d46060830184613158565b95945050505050565b6000819050919050565b60006137026136fd6136f884613084565b6136dd565b613084565b9050919050565b6000613714826136e7565b9050919050565b600061372682613709565b9050919050565b6137368161371b565b82525050565b6000602082019050613751600083018461372d565b92915050565b60006020828403121561376d5761376c61307a565b5b600061377b848285016130cd565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137b9816130e2565b82525050565b6060820160008201516137d560008501826137b0565b5060208201516137e860208501826137b0565b5060408201516137fb60408501826137b0565b50505050565b600061380d83836137bf565b60608301905092915050565b6000602082019050919050565b600061383182613784565b61383b818561378f565b9350613846836137a0565b8060005b8381101561387757815161385e8882613801565b975061386983613819565b92505060018101905061384a565b5085935050505092915050565b6000602082019050818103600083015261389e8184613826565b905092915050565b60006138b182613709565b9050919050565b6138c1816138a6565b82525050565b60006020820190506138dc60008301846138b8565b92915050565b60006020820190506138f76000830184613158565b92915050565b600061390882613709565b9050919050565b613918816138fd565b82525050565b6000602082019050613933600083018461390f565b92915050565b600061394482613709565b9050919050565b61395481613939565b82525050565b600060208201905061396f600083018461394b565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139aa81613677565b82525050565b6080820160008201516139c660008501826139a1565b5060208201516139d960208501826137b0565b5060408201516139ec60408501826137b0565b5060608201516139ff60608501826137b0565b50505050565b6000613a1183836139b0565b60808301905092915050565b6000602082019050919050565b6000613a3582613975565b613a3f8185613980565b9350613a4a83613991565b8060005b83811015613a7b578151613a628882613a05565b9750613a6d83613a1d565b925050600181019050613a4e565b5085935050505092915050565b60006020820190508181036000830152613aa28184613a2a565b905092915050565b613ab3816130a4565b82525050565b6000602082019050613ace6000830184613aaa565b92915050565b600080fd5b600080fd5b60008083601f840112613af457613af361319e565b5b8235905067ffffffffffffffff811115613b1157613b10613ad4565b5b602083019150836080820283011115613b2d57613b2c613ad9565b5b9250929050565b600080600060408486031215613b4d57613b4c61307a565b5b600084013567ffffffffffffffff811115613b6b57613b6a61307f565b5b613b7786828701613ade565b93509350506020613b8a86828701613103565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b604082016000820151613bd660008501826137b0565b506020820151613be960208501826137b0565b50505050565b6000613bfb8383613bc0565b60408301905092915050565b6000602082019050919050565b6000613c1f82613b94565b613c298185613b9f565b9350613c3483613bb0565b8060005b83811015613c65578151613c4c8882613bef565b9750613c5783613c07565b925050600181019050613c38565b5085935050505092915050565b60006020820190508181036000830152613c8c8184613c14565b905092915050565b60008083601f840112613caa57613ca961319e565b5b8235905067ffffffffffffffff811115613cc757613cc6613ad4565b5b602083019150836040820283011115613ce357613ce2613ad9565b5b9250929050565b60008060208385031215613d0157613d0061307a565b5b600083013567ffffffffffffffff811115613d1f57613d1e61307f565b5b613d2b85828601613c94565b92509250509250929050565b600081519050613d46816130ec565b92915050565b600060208284031215613d6257613d6161307a565b5b6000613d7084828501613d37565b91505092915050565b6000604082019050613d8e6000830185613aaa565b613d9b6020830184613158565b9392505050565b60008115159050919050565b613db781613da2565b8114613dc257600080fd5b50565b600081519050613dd481613dae565b92915050565b600060208284031215613df057613def61307a565b5b6000613dfe84828501613dc5565b91505092915050565b6000819050919050565b6000613e2c613e27613e2284613e07565b6136dd565b6130e2565b9050919050565b613e3c81613e11565b82525050565b6000604082019050613e576000830185613aaa565b613e646020830184613e33565b9392505050565b6000606082019050613e806000830186613aaa565b613e8d6020830185613aaa565b613e9a6040830184613158565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613edc826130e2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f0e57613f0d613ea2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60038110613f5557600080fd5b50565b600081359050613f6781613f48565b92915050565b600060208284031215613f8357613f8261307a565b5b6000613f9184828501613f58565b91505092915050565b600080fd5b600060808284031215613fb557613fb4613f9a565b5b613fbf6080613219565b90506000613fcf84828501613f58565b6000830152506020613fe384828501613103565b6020830152506040613ff784828501613103565b604083015250606061400b84828501613103565b60608301525092915050565b60006080828403121561402d5761402c61307a565b5b600061403b84828501613f9f565b91505092915050565b600081519050614053816130b6565b92915050565b60006020828403121561406f5761406e61307a565b5b600061407d84828501614044565b91505092915050565b7f596f7520646f6e2774206f776e207468697320746f6b656e0000000000000000600082015250565b60006140bc60188361358b565b91506140c782614086565b602082019050919050565b600060208201905081810360008301526140eb816140af565b9050919050565b7f596f7520686176656e277420656e6f7567682024574341000000000000000000600082015250565b600061412860178361358b565b9150614133826140f2565b602082019050919050565b600060208201905081810360008301526141578161411b565b9050919050565b6000614169826130e2565b9150614174836130e2565b925082820390508181111561418c5761418b613ea2565b5b92915050565b600061419d826130e2565b91506141a8836130e2565b92508282019050808211156141c0576141bf613ea2565b5b92915050565b6000606082840312156141dc576141db613f9a565b5b6141e66060613219565b905060006141f684828501613d37565b600083015250602061420a84828501613d37565b602083015250604061421e84828501613d37565b60408301525092915050565b6000606082840312156142405761423f61307a565b5b600061424e848285016141c6565b91505092915050565b6000614262826130e2565b915061426d836130e2565b925082820261427b816130e2565b9150828204841483151761429257614291613ea2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142d3826130e2565b91506142de836130e2565b9250826142ee576142ed614299565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061435560268361358b565b9150614360826142f9565b604082019050919050565b6000602082019050818103600083015261438481614348565b9050919050565b60008135614398816130ec565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6143da846143a1565b9350801983169250808416831791505092915050565b600061440b614406614401846130e2565b6136dd565b6130e2565b9050919050565b6000819050919050565b614425826143f0565b61443861443182614412565b83546143ae565b8255505050565b6000810160008301806144518161438b565b905061445d818461441c565b5050506001810160208301806144728161438b565b905061447e818461441c565b5050505050565b61448f828261443f565b5050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144c960208361358b565b91506144d482614493565b602082019050919050565b600060208201905081810360008301526144f8816144bc565b905091905056fea2646970667358221220d4ff6943e05b13ffded9d4fd03c49b6541e9c78bb839064a7b2fd0826f4f862864736f6c63430008110033
Deployed Bytecode Sourcemap
15333:8690:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16031:50;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;11418:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16346:37;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;16410:441;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17719:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15594:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15982:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;15518:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23602:121;;;:::i;:::-;;17294:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15385:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17572:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14408:103;;;:::i;:::-;;15457:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15436:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17172:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13760:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22918:658;;;:::i;:::-;;16201:65;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17811:2128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19944:1940;;;:::i;:::-;;15483:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17423:144;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21889:1005;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15557:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17072:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16131:66;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14666:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16856:211;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16270:24;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16031:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11418:207::-;11561:6;11587:30;;;11580:37;;11418:207;;;;;;:::o;16346:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16410:441::-;13646:13;:11;:13::i;:::-;16640:20:::1;16597:19;;:64;;;;;;;;;;;;;;;;;;16684:9;16666:8;;:28;;;;;;;;;;;;;;;;;;16726:7;16699:6;;:35;;;;;;;;;;;;;;;;;;16770:11;16739:10;;:43;;;;;;;;;;;;;;;;;;16814:7;16787:6;;:35;;;;;;;;;;;;;;;;;;16840:5;16827:4;;:19;;;;;;;;;;;;;;;;;;16410:441:::0;;;;;;:::o;17719:87::-;17764:16;17794:7;17787:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17719:87;:::o;15594:38::-;;;;;;;;;;;;;;;;;;;:::o;15982:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15518:35::-;;;;;;;;;;;;;:::o;23602:121::-;13646:13;:11;:13::i;:::-;23657:8:::1;;;;;;;;;;;:17;;;23675:7;:5;:7::i;:::-;23684:8;;;;;;;;;;;:18;;;23711:4;23684:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23657:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23602:121::o:0;17294:124::-;17360:15;17389:14;:24;17404:8;17389:24;;;;;;;;;;;;;;;17382:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17294:124;;;:::o;15385:47::-;;;;;;;;;;;;;:::o;17572:142::-;17648:7;17669:30;:40;17700:8;17669:40;;;;;;;;;;;;;;;;17662:47;;17572:142;;;:::o;14408:103::-;13646:13;:11;:13::i;:::-;14473:30:::1;14500:1;14473:18;:30::i;:::-;14408:103::o:0;15457:22::-;;;;;;;;;;;;;:::o;15436:17::-;;;;;;;;;;;;;:::o;17172:117::-;17236:12;17262;:22;17275:8;17262:22;;;;;;;;;;;;;;;17255:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17172:117;;;:::o;13760:87::-;13806:7;13833:6;;;;;;;;;;;13826:13;;13760:87;:::o;22918:658::-;13646:13;:11;:13::i;:::-;22971:18:::1;22992:6;;;;;;;;;;;:16;;;23017:4;22992:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22971:52;;23033:9;23028:142;23052:10;23048:1;:14;23028:142;;;23075:6;;;;;;;;;;;:19;;;23103:4;23110:7;:5;:7::i;:::-;23119:6;;;;;;;;;;;:26;;;23154:4;23161:1;23119:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23075:89;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23064:3;;;;;:::i;:::-;;;;23028:142;;;;23187:10;;;;;;;;;;;:20;;;23216:4;23187:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23174:48;;23232:9;23227:150;23251:10;23247:1;:14;23227:150;;;23274:10;;;;;;;;;;;:23;;;23306:4;23313:7;:5;:7::i;:::-;23322:10;;;;;;;;;;;:30;;;23361:4;23368:1;23322:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23274:97;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23263:3;;;;;:::i;:::-;;;;23227:150;;;;23394:6;;;;;;;;;;;:16;;;23419:4;23394:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23381:44;;23435:9;23430:142;23454:10;23450:1;:14;23430:142;;;23477:6;;;;;;;;;;;:19;;;23505:4;23512:7;:5;:7::i;:::-;23521:6;;;;;;;;;;;:26;;;23556:4;23563:1;23521:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23477:89;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23466:3;;;;;:::i;:::-;;;;23430:142;;;;22966:610;22918:658::o:0;16201:65::-;;;;;;;;;;;;;;;;;:::o;17811:2128::-;17898:9;17893:725;17917:4;;:11;;17913:1;:15;17893:725;;;17970:21;18023:14;18001:36;;;;;;;;:::i;:::-;;:4;;18006:1;18001:7;;;;;;;:::i;:::-;;;;;;;:18;;;;;;;;;;:::i;:::-;:36;;;;;;;;:::i;:::-;;;17997:254;;18062:6;;;;;;;;;;;18046:22;;17997:254;;;18107:18;18085:40;;;;;;;;:::i;:::-;;:4;;18090:1;18085:7;;;;;;;:::i;:::-;;;;;;;:18;;;;;;;;;;:::i;:::-;:40;;;;;;;;:::i;:::-;;;18081:170;;18150:10;;;;;;;;;;;18134:26;;18081:170;;;18199:14;18177:36;;;;;;;;:::i;:::-;;:4;;18182:1;18177:7;;;;;;;:::i;:::-;;;;;;;:18;;;;;;;;;;:::i;:::-;:36;;;;;;;;:::i;:::-;;;18173:78;;18238:6;;;;;;;;;;;18222:22;;18173:78;18081:170;17997:254;18258:14;18275:4;;18280:1;18275:7;;;;;;;:::i;:::-;;;;;;;18258:24;;;;;;;;;;:::i;:::-;;;18310:15;18288:3;:19;;:37;;;;;18355:1;18331:3;:21;;:25;;;;;18433:10;18400:43;;:13;:21;;;18422:3;:6;;;18400:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;;18392:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;18511:13;:26;;;18538:10;18558:4;18565:3;:6;;;18511:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18578:12;:24;18591:10;18578:24;;;;;;;;;;;;;;;18608:3;18578:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17935:683;;17930:3;;;;;:::i;:::-;;;;17893:725;;;;18656:1;18641:12;:16;18637:1128;;;18718:12;18673:19;;;;;;;;;;;:29;;;18703:10;18673:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;18665:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;18828:30;18922:31;:43;18954:10;18922:43;;;;;;;;;;;;;;;;18872:19;;;;;;;;;;;:35;;;18908:10;18872:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:93;18868:231;;;19049:31;:43;19081:10;19049:43;;;;;;;;;;;;;;;;18999:19;;;;;;;;;;;:35;;;19035:10;18999:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:93;;;;:::i;:::-;18974:118;;18868:231;19136:12;19110:22;:38;19106:654;;19204:12;19157:31;:43;19189:10;19157:43;;;;;;;;;;;;;;;;:59;;;;;;;:::i;:::-;;;;;;;;19223:20;19246:40;;;;;;;;19253:12;19246:40;;;;19267:15;19246:40;;;;19284:1;19246:40;;;19223:63;;19293:14;:26;19308:10;19293:26;;;;;;;;;;;;;;;19325:6;19293:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19150:189;19106:654;;;19352:23;19393:22;19378:12;:37;;;;:::i;:::-;19352:63;;19424:8;;;;;;;;;;;:21;;;19446:10;19466:4;19473:15;19424:65;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19545:22;19498:31;:43;19530:10;19498:43;;;;;;;;;;;;;;;;:69;;;;;;;:::i;:::-;;;;;;;;19620:15;19574:30;:42;19605:10;19574:42;;;;;;;;;;;;;;;;:61;;;;;;;:::i;:::-;;;;;;;;19644:20;19667:40;;;;;;;;19674:12;19667:40;;;;19688:15;19667:40;;;;19705:1;19667:40;;;19644:63;;19714:14;:26;19729:10;19714:26;;;;;;;;;;;;;;;19746:6;19714:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19345:415;;19106:654;18659:1106;18637:1128;19815:1;19801:4;;:11;;:15;:35;;;;19835:1;19820:12;:16;19801:35;19797:138;;;19844:7;19857:10;19844:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19893:4;;;;;;;;;;;:24;;;19918:10;19893:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19797:138;17811:2128;;;:::o;19944:1940::-;19976:34;20013:4;;;;;;;;;;;:18;;;20032:10;20013:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19976:67;;20048:23;20097:10;:18;;;20074:10;:20;;;:41;;;;:::i;:::-;20048:67;;20120:26;20174:9;20169:752;20189:12;:24;20202:10;20189:24;;;;;;;;;;;;;;;:31;;;;20185:1;:35;20169:752;;;20262:21;20335:14;20293:56;;;;;;;;:::i;:::-;;:12;:24;20306:10;20293:24;;;;;;;;;;;;;;;20318:1;20293:27;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;;;;;;;;;:56;;;;;;;;:::i;:::-;;;20289:314;;20374:6;;;;;;;;;;;20358:22;;20289:314;;;20439:18;20397:60;;;;;;;;:::i;:::-;;:12;:24;20410:10;20397:24;;;;;;;;;;;;;;;20422:1;20397:27;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;;;;;;;;;:60;;;;;;;;:::i;:::-;;;20393:210;;20482:10;;;;;;;;;;;20466:26;;20393:210;;;20551:14;20509:56;;;;;;;;:::i;:::-;;:12;:24;20522:10;20509:24;;;;;;;;;;;;;;;20534:1;20509:27;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;;;;;;;;;:56;;;;;;;;:::i;:::-;;;20505:98;;20590:6;;;;;;;;;;;20574:22;;20505:98;20393:210;20289:314;20633:12;:24;20646:10;20633:24;;;;;;;;;;;;;;;20658:1;20633:27;;;;;;;;:::i;:::-;;;;;;;;;;;;:43;;;20612:18;:64;20608:148;;;20706:12;:24;20719:10;20706:24;;;;;;;;;;;;;;;20731:1;20706:27;;;;;;;;:::i;:::-;;;;;;;;;;;;:43;;;20685:64;;20608:148;20809:15;20761:12;:24;20774:10;20761:24;;;;;;;;;;;;;;;20786:1;20761:27;;;;;;;;:::i;:::-;;;;;;;;;;;;:45;;:63;;;;20830:13;:26;;;20865:4;20872:10;20884:12;:24;20897:10;20884:24;;;;;;;;;;;;;;;20909:1;20884:27;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;;20830:85;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20227:694;20222:3;;;;;:::i;:::-;;;;20169:752;;;;20950:9;20945:525;20965:14;:26;20980:10;20965:26;;;;;;;;;;;;;;;:33;;;;20961:1;:37;20945:525;;;21036:14;:26;21051:10;21036:26;;;;;;;;;;;;;;;21063:1;21036:29;;;;;;;;:::i;:::-;;;;;;;;;;;;:45;;;21015:18;:66;21011:152;;;21111:14;:26;21126:10;21111:26;;;;;;;;;;;;;;;21138:1;21111:29;;;;;;;;:::i;:::-;;;;;;;;;;;;:45;;;21090:66;;21011:152;21218:15;21168:14;:26;21183:10;21168:26;;;;;;;;;;;;;;;21195:1;21168:29;;;;;;;;:::i;:::-;;;;;;;;;;;;:47;;:65;;;;21285:1;21239:31;:43;21271:10;21239:43;;;;;;;;;;;;;;;:47;;;;21292:23;21318:30;:42;21349:10;21318:42;;;;;;;;;;;;;;;;21292:68;;21411:1;21366:30;:42;21397:10;21366:42;;;;;;;;;;;;;;;:46;;;;21418:8;;;;;;;;;;;:17;;;21436:10;21448:15;21418:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21005:465;21000:3;;;;;:::i;:::-;;;;20945:525;;;;21494:4;;;;;;;;;;;:24;;;21519:10;21494:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21558:12;21580:9;21592:1;21580:13;;21575:227;21599:14;:21;;;;21595:1;:25;21575:227;;;21702:5;21678:14;21693:1;21678:17;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;;:29;;;;:::i;:::-;21659:15;:49;;;;:::i;:::-;21637:18;:71;21633:164;;21775:3;21743:14;21758:1;21743:17;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;;21725:15;:46;;;;:::i;:::-;21724:54;;;;:::i;:::-;21717:61;;21785:5;;21633:164;21622:3;;;;;:::i;:::-;;;;21575:227;;;;21817:1;21810:4;:8;21806:74;;;21826:8;;;;;;;;;;;:21;;;21848:10;21860:7;:5;:7::i;:::-;21869:4;21826:48;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21806:74;19971:1913;;;;19944:1940::o;15483:31::-;;;;;;;;;;;;;:::o;17423:144::-;17500:7;17521:31;:41;17553:8;17521:41;;;;;;;;;;;;;;;;17514:48;;17423:144;;;:::o;21889:1005::-;21960:7;21974:34;22011:4;;;;;;;;;;;:18;;;22030:8;22011:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21974:65;;22044:23;22093:10;:18;;;22070:10;:20;;;:41;;;;:::i;:::-;22044:67;;22116:26;22163:9;22158:211;22178:12;:22;22191:8;22178:22;;;;;;;;;;;;;;;:29;;;;22174:1;:33;22158:211;;;22245:12;:22;22258:8;22245:22;;;;;;;;;;;;;;;22268:1;22245:25;;;;;;;;:::i;:::-;;;;;;;;;;;;:41;;;22224:18;:62;22220:144;;;22316:12;:22;22329:8;22316:22;;;;;;;;;;;;;;;22339:1;22316:25;;;;;;;;:::i;:::-;;;;;;;;;;;;:41;;;22295:62;;22220:144;22209:3;;;;;:::i;:::-;;;;22158:211;;;;22391:9;22386:217;22406:14;:24;22421:8;22406:24;;;;;;;;;;;;;;;:31;;;;22402:1;:35;22386:217;;;22475:14;:24;22490:8;22475:24;;;;;;;;;;;;;;;22500:1;22475:27;;;;;;;;:::i;:::-;;;;;;;;;;;;:43;;;22454:18;:64;22450:148;;;22548:14;:24;22563:8;22548:24;;;;;;;;;;;;;;;22573:1;22548:27;;;;;;;;:::i;:::-;;;;;;;;;;;;:43;;;22527:64;;22450:148;22439:3;;;;;:::i;:::-;;;;22386:217;;;;22630:12;22652:9;22664:1;22652:13;;22647:227;22671:14;:21;;;;22667:1;:25;22647:227;;;22774:5;22750:14;22765:1;22750:17;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;;:29;;;;:::i;:::-;22731:15;:49;;;;:::i;:::-;22709:18;:71;22705:164;;22847:3;22815:14;22830:1;22815:17;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;;22797:15;:46;;;;:::i;:::-;22796:54;;;;:::i;:::-;22789:61;;22857:5;;22705:164;22694:3;;;;;:::i;:::-;;;;22647:227;;;;22885:4;22878:11;;;;;;21889:1005;;;:::o;15557:31::-;;;;;;;;;;;;;:::o;17072:95::-;17113:22;17148:14;17141:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17072:95;:::o;16131:66::-;;;;;;;;;;;;;;;;;:::o;14666:201::-;13646:13;:11;:13::i;:::-;14775:1:::1;14755:22;;:8;:22;;::::0;14747:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14831:28;14850:8;14831:18;:28::i;:::-;14666:201:::0;:::o;16856:211::-;13646:13;:11;:13::i;:::-;16946:14:::1;;16939:21;;;;:::i;:::-;16969:9;16965:98;16984:15;;:22;;16980:1;:26;16965:98;;;17018:14;17038:15;;17054:1;17038:18;;;;;;;:::i;:::-;;;;;;;17018:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;17008:3;;;;;:::i;:::-;;;;16965:98;;;;16856:211:::0;;:::o;16270:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13925:132::-;14000:12;:10;:12::i;:::-;13989:23;;:7;:5;:7::i;:::-;:23;;;13981:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13925:132::o;15027:191::-;15101:16;15120:6;;;;;;;;;;;15101:25;;15146:8;15137:6;;:17;;;;;;;;;;;;;;;;;;15201:8;15170:40;;15191:8;15170:40;;;;;;;;;;;;15090:128;15027:191;:::o;12311:98::-;12364:7;12391:10;12384:17;;12311:98;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:442::-;1950:4;1988:2;1977:9;1973:18;1965:26;;2001:71;2069:1;2058:9;2054:17;2045:6;2001:71;:::i;:::-;2082:72;2150:2;2139:9;2135:18;2126:6;2082:72;:::i;:::-;2164;2232:2;2221:9;2217:18;2208:6;2164:72;:::i;:::-;1801:442;;;;;;:::o;2249:117::-;2358:1;2355;2348:12;2372:117;2481:1;2478;2471:12;2495:102;2536:6;2587:2;2583:7;2578:2;2571:5;2567:14;2563:28;2553:38;;2495:102;;;:::o;2603:180::-;2651:77;2648:1;2641:88;2748:4;2745:1;2738:15;2772:4;2769:1;2762:15;2789:281;2872:27;2894:4;2872:27;:::i;:::-;2864:6;2860:40;3002:6;2990:10;2987:22;2966:18;2954:10;2951:34;2948:62;2945:88;;;3013:18;;:::i;:::-;2945:88;3053:10;3049:2;3042:22;2832:238;2789:281;;:::o;3076:129::-;3110:6;3137:20;;:::i;:::-;3127:30;;3166:33;3194:4;3186:6;3166:33;:::i;:::-;3076:129;;;:::o;3211:307::-;3272:4;3362:18;3354:6;3351:30;3348:56;;;3384:18;;:::i;:::-;3348:56;3422:29;3444:6;3422:29;:::i;:::-;3414:37;;3506:4;3500;3496:15;3488:23;;3211:307;;;:::o;3524:146::-;3621:6;3616:3;3611;3598:30;3662:1;3653:6;3648:3;3644:16;3637:27;3524:146;;;:::o;3676:423::-;3753:5;3778:65;3794:48;3835:6;3794:48;:::i;:::-;3778:65;:::i;:::-;3769:74;;3866:6;3859:5;3852:21;3904:4;3897:5;3893:16;3942:3;3933:6;3928:3;3924:16;3921:25;3918:112;;;3949:79;;:::i;:::-;3918:112;4039:54;4086:6;4081:3;4076;4039:54;:::i;:::-;3759:340;3676:423;;;;;:::o;4118:338::-;4173:5;4222:3;4215:4;4207:6;4203:17;4199:27;4189:122;;4230:79;;:::i;:::-;4189:122;4347:6;4334:20;4372:78;4446:3;4438:6;4431:4;4423:6;4419:17;4372:78;:::i;:::-;4363:87;;4179:277;4118:338;;;;:::o;4462:943::-;4557:6;4565;4573;4581;4630:3;4618:9;4609:7;4605:23;4601:33;4598:120;;;4637:79;;:::i;:::-;4598:120;4757:1;4782:53;4827:7;4818:6;4807:9;4803:22;4782:53;:::i;:::-;4772:63;;4728:117;4884:2;4910:53;4955:7;4946:6;4935:9;4931:22;4910:53;:::i;:::-;4900:63;;4855:118;5012:2;5038:53;5083:7;5074:6;5063:9;5059:22;5038:53;:::i;:::-;5028:63;;4983:118;5168:2;5157:9;5153:18;5140:32;5199:18;5191:6;5188:30;5185:117;;;5221:79;;:::i;:::-;5185:117;5326:62;5380:7;5371:6;5360:9;5356:22;5326:62;:::i;:::-;5316:72;;5111:287;4462:943;;;;;;;:::o;5411:149::-;5447:7;5487:66;5480:5;5476:78;5465:89;;5411:149;;;:::o;5566:115::-;5651:23;5668:5;5651:23;:::i;:::-;5646:3;5639:36;5566:115;;:::o;5687:218::-;5778:4;5816:2;5805:9;5801:18;5793:26;;5829:69;5895:1;5884:9;5880:17;5871:6;5829:69;:::i;:::-;5687:218;;;;:::o;5911:329::-;5970:6;6019:2;6007:9;5998:7;5994:23;5990:32;5987:119;;;6025:79;;:::i;:::-;5987:119;6145:1;6170:53;6215:7;6206:6;6195:9;6191:22;6170:53;:::i;:::-;6160:63;;6116:117;5911:329;;;;:::o;6246:332::-;6367:4;6405:2;6394:9;6390:18;6382:26;;6418:71;6486:1;6475:9;6471:17;6462:6;6418:71;:::i;:::-;6499:72;6567:2;6556:9;6552:18;6543:6;6499:72;:::i;:::-;6246:332;;;;;:::o;6584:1057::-;6688:6;6696;6704;6712;6720;6728;6777:3;6765:9;6756:7;6752:23;6748:33;6745:120;;;6784:79;;:::i;:::-;6745:120;6904:1;6929:53;6974:7;6965:6;6954:9;6950:22;6929:53;:::i;:::-;6919:63;;6875:117;7031:2;7057:53;7102:7;7093:6;7082:9;7078:22;7057:53;:::i;:::-;7047:63;;7002:118;7159:2;7185:53;7230:7;7221:6;7210:9;7206:22;7185:53;:::i;:::-;7175:63;;7130:118;7287:2;7313:53;7358:7;7349:6;7338:9;7334:22;7313:53;:::i;:::-;7303:63;;7258:118;7415:3;7442:53;7487:7;7478:6;7467:9;7463:22;7442:53;:::i;:::-;7432:63;;7386:119;7544:3;7571:53;7616:7;7607:6;7596:9;7592:22;7571:53;:::i;:::-;7561:63;;7515:119;6584:1057;;;;;;;;:::o;7647:114::-;7714:6;7748:5;7742:12;7732:22;;7647:114;;;:::o;7767:184::-;7866:11;7900:6;7895:3;7888:19;7940:4;7935:3;7931:14;7916:29;;7767:184;;;;:::o;7957:132::-;8024:4;8047:3;8039:11;;8077:4;8072:3;8068:14;8060:22;;7957:132;;;:::o;8095:108::-;8172:24;8190:5;8172:24;:::i;:::-;8167:3;8160:37;8095:108;;:::o;8209:179::-;8278:10;8299:46;8341:3;8333:6;8299:46;:::i;:::-;8377:4;8372:3;8368:14;8354:28;;8209:179;;;;:::o;8394:113::-;8464:4;8496;8491:3;8487:14;8479:22;;8394:113;;;:::o;8543:732::-;8662:3;8691:54;8739:5;8691:54;:::i;:::-;8761:86;8840:6;8835:3;8761:86;:::i;:::-;8754:93;;8871:56;8921:5;8871:56;:::i;:::-;8950:7;8981:1;8966:284;8991:6;8988:1;8985:13;8966:284;;;9067:6;9061:13;9094:63;9153:3;9138:13;9094:63;:::i;:::-;9087:70;;9180:60;9233:6;9180:60;:::i;:::-;9170:70;;9026:224;9013:1;9010;9006:9;9001:14;;8966:284;;;8970:14;9266:3;9259:10;;8667:608;;;8543:732;;;;:::o;9281:373::-;9424:4;9462:2;9451:9;9447:18;9439:26;;9511:9;9505:4;9501:20;9497:1;9486:9;9482:17;9475:47;9539:108;9642:4;9633:6;9539:108;:::i;:::-;9531:116;;9281:373;;;;:::o;9660:99::-;9712:6;9746:5;9740:12;9730:22;;9660:99;;;:::o;9765:169::-;9849:11;9883:6;9878:3;9871:19;9923:4;9918:3;9914:14;9899:29;;9765:169;;;;:::o;9940:246::-;10021:1;10031:113;10045:6;10042:1;10039:13;10031:113;;;10130:1;10125:3;10121:11;10115:18;10111:1;10106:3;10102:11;10095:39;10067:2;10064:1;10060:10;10055:15;;10031:113;;;10178:1;10169:6;10164:3;10160:16;10153:27;10002:184;9940:246;;;:::o;10192:377::-;10280:3;10308:39;10341:5;10308:39;:::i;:::-;10363:71;10427:6;10422:3;10363:71;:::i;:::-;10356:78;;10443:65;10501:6;10496:3;10489:4;10482:5;10478:16;10443:65;:::i;:::-;10533:29;10555:6;10533:29;:::i;:::-;10528:3;10524:39;10517:46;;10284:285;10192:377;;;;:::o;10575:313::-;10688:4;10726:2;10715:9;10711:18;10703:26;;10775:9;10769:4;10765:20;10761:1;10750:9;10746:17;10739:47;10803:78;10876:4;10867:6;10803:78;:::i;:::-;10795:86;;10575:313;;;;:::o;10894:180::-;10942:77;10939:1;10932:88;11039:4;11036:1;11029:15;11063:4;11060:1;11053:15;11080:119;11167:1;11160:5;11157:12;11147:46;;11173:18;;:::i;:::-;11147:46;11080:119;:::o;11205:139::-;11256:7;11285:5;11274:16;;11291:47;11332:5;11291:47;:::i;:::-;11205:139;;;:::o;11350:::-;11412:9;11445:38;11477:5;11445:38;:::i;:::-;11432:51;;11350:139;;;:::o;11495:155::-;11594:49;11637:5;11594:49;:::i;:::-;11589:3;11582:62;11495:155;;:::o;11656:577::-;11845:4;11883:3;11872:9;11868:19;11860:27;;11897:83;11977:1;11966:9;11962:17;11953:6;11897:83;:::i;:::-;11990:72;12058:2;12047:9;12043:18;12034:6;11990:72;:::i;:::-;12072;12140:2;12129:9;12125:18;12116:6;12072:72;:::i;:::-;12154;12222:2;12211:9;12207:18;12198:6;12154:72;:::i;:::-;11656:577;;;;;;;:::o;12239:60::-;12267:3;12288:5;12281:12;;12239:60;;;:::o;12305:142::-;12355:9;12388:53;12406:34;12415:24;12433:5;12415:24;:::i;:::-;12406:34;:::i;:::-;12388:53;:::i;:::-;12375:66;;12305:142;;;:::o;12453:126::-;12503:9;12536:37;12567:5;12536:37;:::i;:::-;12523:50;;12453:126;;;:::o;12585:151::-;12660:9;12693:37;12724:5;12693:37;:::i;:::-;12680:50;;12585:151;;;:::o;12742:181::-;12854:62;12910:5;12854:62;:::i;:::-;12849:3;12842:75;12742:181;;:::o;12929:272::-;13047:4;13085:2;13074:9;13070:18;13062:26;;13098:96;13191:1;13180:9;13176:17;13167:6;13098:96;:::i;:::-;12929:272;;;;:::o;13207:329::-;13266:6;13315:2;13303:9;13294:7;13290:23;13286:32;13283:119;;;13321:79;;:::i;:::-;13283:119;13441:1;13466:53;13511:7;13502:6;13491:9;13487:22;13466:53;:::i;:::-;13456:63;;13412:117;13207:329;;;;:::o;13542:137::-;13632:6;13666:5;13660:12;13650:22;;13542:137;;;:::o;13685:207::-;13807:11;13841:6;13836:3;13829:19;13881:4;13876:3;13872:14;13857:29;;13685:207;;;;:::o;13898:155::-;13988:4;14011:3;14003:11;;14041:4;14036:3;14032:14;14024:22;;13898:155;;;:::o;14059:108::-;14136:24;14154:5;14136:24;:::i;:::-;14131:3;14124:37;14059:108;;:::o;14239:693::-;14372:4;14367:3;14363:14;14461:4;14454:5;14450:16;14444:23;14480:63;14537:4;14532:3;14528:14;14514:12;14480:63;:::i;:::-;14387:166;14646:4;14639:5;14635:16;14629:23;14665:63;14722:4;14717:3;14713:14;14699:12;14665:63;:::i;:::-;14563:175;14833:4;14826:5;14822:16;14816:23;14852:63;14909:4;14904:3;14900:14;14886:12;14852:63;:::i;:::-;14748:177;14341:591;14239:693;;:::o;14938:271::-;15053:10;15074:92;15162:3;15154:6;15074:92;:::i;:::-;15198:4;15193:3;15189:14;15175:28;;14938:271;;;;:::o;15215:136::-;15308:4;15340;15335:3;15331:14;15323:22;;15215:136;;;:::o;15427:916::-;15592:3;15621:77;15692:5;15621:77;:::i;:::-;15714:109;15816:6;15811:3;15714:109;:::i;:::-;15707:116;;15847:79;15920:5;15847:79;:::i;:::-;15949:7;15980:1;15965:353;15990:6;15987:1;15984:13;15965:353;;;16066:6;16060:13;16093:109;16198:3;16183:13;16093:109;:::i;:::-;16086:116;;16225:83;16301:6;16225:83;:::i;:::-;16215:93;;16025:293;16012:1;16009;16005:9;16000:14;;15965:353;;;15969:14;16334:3;16327:10;;15597:746;;;15427:916;;;;:::o;16349:465::-;16538:4;16576:2;16565:9;16561:18;16553:26;;16625:9;16619:4;16615:20;16611:1;16600:9;16596:17;16589:47;16653:154;16802:4;16793:6;16653:154;:::i;:::-;16645:162;;16349:465;;;;:::o;16820:155::-;16899:9;16932:37;16963:5;16932:37;:::i;:::-;16919:50;;16820:155;;;:::o;16981:189::-;17097:66;17157:5;17097:66;:::i;:::-;17092:3;17085:79;16981:189;;:::o;17176:280::-;17298:4;17336:2;17325:9;17321:18;17313:26;;17349:100;17446:1;17435:9;17431:17;17422:6;17349:100;:::i;:::-;17176:280;;;;:::o;17462:222::-;17555:4;17593:2;17582:9;17578:18;17570:26;;17606:71;17674:1;17663:9;17659:17;17650:6;17606:71;:::i;:::-;17462:222;;;;:::o;17690:140::-;17754:9;17787:37;17818:5;17787:37;:::i;:::-;17774:50;;17690:140;;;:::o;17836:159::-;17937:51;17982:5;17937:51;:::i;:::-;17932:3;17925:64;17836:159;;:::o;18001:250::-;18108:4;18146:2;18135:9;18131:18;18123:26;;18159:85;18241:1;18230:9;18226:17;18217:6;18159:85;:::i;:::-;18001:250;;;;:::o;18257:140::-;18321:9;18354:37;18385:5;18354:37;:::i;:::-;18341:50;;18257:140;;;:::o;18403:159::-;18504:51;18549:5;18504:51;:::i;:::-;18499:3;18492:64;18403:159;;:::o;18568:250::-;18675:4;18713:2;18702:9;18698:18;18690:26;;18726:85;18808:1;18797:9;18793:17;18784:6;18726:85;:::i;:::-;18568:250;;;;:::o;18824:134::-;18911:6;18945:5;18939:12;18929:22;;18824:134;;;:::o;18964:204::-;19083:11;19117:6;19112:3;19105:19;19157:4;19152:3;19148:14;19133:29;;18964:204;;;;:::o;19174:152::-;19261:4;19284:3;19276:11;;19314:4;19309:3;19305:14;19297:22;;19174:152;;;:::o;19332:145::-;19421:49;19464:5;19421:49;:::i;:::-;19416:3;19409:62;19332:145;;:::o;19543:875::-;19670:4;19665:3;19661:14;19763:4;19756:5;19752:16;19746:23;19782:75;19851:4;19846:3;19842:14;19828:12;19782:75;:::i;:::-;19685:182;19947:4;19940:5;19936:16;19930:23;19966:63;20023:4;20018:3;20014:14;20000:12;19966:63;:::i;:::-;19877:162;20132:4;20125:5;20121:16;20115:23;20151:63;20208:4;20203:3;20199:14;20185:12;20151:63;:::i;:::-;20049:175;20319:4;20312:5;20308:16;20302:23;20338:63;20395:4;20390:3;20386:14;20372:12;20338:63;:::i;:::-;20234:177;19639:779;19543:875;;:::o;20424:259::-;20533:10;20554:86;20636:3;20628:6;20554:86;:::i;:::-;20672:4;20667:3;20663:14;20649:28;;20424:259;;;;:::o;20689:133::-;20779:4;20811;20806:3;20802:14;20794:22;;20689:133;;;:::o;20892:892::-;21051:3;21080:74;21148:5;21080:74;:::i;:::-;21170:106;21269:6;21264:3;21170:106;:::i;:::-;21163:113;;21300:76;21370:5;21300:76;:::i;:::-;21399:7;21430:1;21415:344;21440:6;21437:1;21434:13;21415:344;;;21516:6;21510:13;21543:103;21642:3;21627:13;21543:103;:::i;:::-;21536:110;;21669:80;21742:6;21669:80;:::i;:::-;21659:90;;21475:284;21462:1;21459;21455:9;21450:14;;21415:344;;;21419:14;21775:3;21768:10;;21056:728;;;20892:892;;;;:::o;21790:453::-;21973:4;22011:2;22000:9;21996:18;21988:26;;22060:9;22054:4;22050:20;22046:1;22035:9;22031:17;22024:47;22088:148;22231:4;22222:6;22088:148;:::i;:::-;22080:156;;21790:453;;;;:::o;22249:118::-;22336:24;22354:5;22336:24;:::i;:::-;22331:3;22324:37;22249:118;;:::o;22373:222::-;22466:4;22504:2;22493:9;22489:18;22481:26;;22517:71;22585:1;22574:9;22570:17;22561:6;22517:71;:::i;:::-;22373:222;;;;:::o;22601:117::-;22710:1;22707;22700:12;22724:117;22833:1;22830;22823:12;22881:590;22976:8;22986:6;23036:3;23029:4;23021:6;23017:17;23013:27;23003:122;;23044:79;;:::i;:::-;23003:122;23157:6;23144:20;23134:30;;23187:18;23179:6;23176:30;23173:117;;;23209:79;;:::i;:::-;23173:117;23323:4;23315:6;23311:17;23299:29;;23377:3;23369:4;23361:6;23357:17;23347:8;23343:32;23340:41;23337:128;;;23384:79;;:::i;:::-;23337:128;22881:590;;;;;:::o;23477:748::-;23594:6;23602;23610;23659:2;23647:9;23638:7;23634:23;23630:32;23627:119;;;23665:79;;:::i;:::-;23627:119;23813:1;23802:9;23798:17;23785:31;23843:18;23835:6;23832:30;23829:117;;;23865:79;;:::i;:::-;23829:117;23978:102;24072:7;24063:6;24052:9;24048:22;23978:102;:::i;:::-;23960:120;;;;23756:334;24129:2;24155:53;24200:7;24191:6;24180:9;24176:22;24155:53;:::i;:::-;24145:63;;24100:118;23477:748;;;;;:::o;24231:144::-;24328:6;24362:5;24356:12;24346:22;;24231:144;;;:::o;24381:214::-;24510:11;24544:6;24539:3;24532:19;24584:4;24579:3;24575:14;24560:29;;24381:214;;;;:::o;24601:162::-;24698:4;24721:3;24713:11;;24751:4;24746:3;24742:14;24734:22;;24601:162;;;:::o;24849:512::-;24996:4;24991:3;24987:14;25082:4;25075:5;25071:16;25065:23;25101:63;25158:4;25153:3;25149:14;25135:12;25101:63;:::i;:::-;25011:163;25262:4;25255:5;25251:16;25245:23;25281:63;25338:4;25333:3;25329:14;25315:12;25281:63;:::i;:::-;25184:170;24965:396;24849:512;;:::o;25367:299::-;25496:10;25517:106;25619:3;25611:6;25517:106;:::i;:::-;25655:4;25650:3;25646:14;25632:28;;25367:299;;;;:::o;25672:143::-;25772:4;25804;25799:3;25795:14;25787:22;;25672:143;;;:::o;25905:972::-;26084:3;26113:84;26191:5;26113:84;:::i;:::-;26213:116;26322:6;26317:3;26213:116;:::i;:::-;26206:123;;26353:86;26433:5;26353:86;:::i;:::-;26462:7;26493:1;26478:374;26503:6;26500:1;26497:13;26478:374;;;26579:6;26573:13;26606:123;26725:3;26710:13;26606:123;:::i;:::-;26599:130;;26752:90;26835:6;26752:90;:::i;:::-;26742:100;;26538:314;26525:1;26522;26518:9;26513:14;;26478:374;;;26482:14;26868:3;26861:10;;26089:788;;;25905:972;;;;:::o;26883:493::-;27086:4;27124:2;27113:9;27109:18;27101:26;;27173:9;27167:4;27163:20;27159:1;27148:9;27144:17;27137:47;27201:168;27364:4;27355:6;27201:168;:::i;:::-;27193:176;;26883:493;;;;:::o;27426:600::-;27531:8;27541:6;27591:3;27584:4;27576:6;27572:17;27568:27;27558:122;;27599:79;;:::i;:::-;27558:122;27712:6;27699:20;27689:30;;27742:18;27734:6;27731:30;27728:117;;;27764:79;;:::i;:::-;27728:117;27878:4;27870:6;27866:17;27854:29;;27932:3;27924:4;27916:6;27912:17;27902:8;27898:32;27895:41;27892:128;;;27939:79;;:::i;:::-;27892:128;27426:600;;;;;:::o;28032:623::-;28150:6;28158;28207:2;28195:9;28186:7;28182:23;28178:32;28175:119;;;28213:79;;:::i;:::-;28175:119;28361:1;28350:9;28346:17;28333:31;28391:18;28383:6;28380:30;28377:117;;;28413:79;;:::i;:::-;28377:117;28526:112;28630:7;28621:6;28610:9;28606:22;28526:112;:::i;:::-;28508:130;;;;28304:344;28032:623;;;;;:::o;28661:143::-;28718:5;28749:6;28743:13;28734:22;;28765:33;28792:5;28765:33;:::i;:::-;28661:143;;;;:::o;28810:351::-;28880:6;28929:2;28917:9;28908:7;28904:23;28900:32;28897:119;;;28935:79;;:::i;:::-;28897:119;29055:1;29080:64;29136:7;29127:6;29116:9;29112:22;29080:64;:::i;:::-;29070:74;;29026:128;28810:351;;;;:::o;29167:332::-;29288:4;29326:2;29315:9;29311:18;29303:26;;29339:71;29407:1;29396:9;29392:17;29383:6;29339:71;:::i;:::-;29420:72;29488:2;29477:9;29473:18;29464:6;29420:72;:::i;:::-;29167:332;;;;;:::o;29505:90::-;29539:7;29582:5;29575:13;29568:21;29557:32;;29505:90;;;:::o;29601:116::-;29671:21;29686:5;29671:21;:::i;:::-;29664:5;29661:32;29651:60;;29707:1;29704;29697:12;29651:60;29601:116;:::o;29723:137::-;29777:5;29808:6;29802:13;29793:22;;29824:30;29848:5;29824:30;:::i;:::-;29723:137;;;;:::o;29866:345::-;29933:6;29982:2;29970:9;29961:7;29957:23;29953:32;29950:119;;;29988:79;;:::i;:::-;29950:119;30108:1;30133:61;30186:7;30177:6;30166:9;30162:22;30133:61;:::i;:::-;30123:71;;30079:125;29866:345;;;;:::o;30217:85::-;30262:7;30291:5;30280:16;;30217:85;;;:::o;30308:158::-;30366:9;30399:61;30417:42;30426:32;30452:5;30426:32;:::i;:::-;30417:42;:::i;:::-;30399:61;:::i;:::-;30386:74;;30308:158;;;:::o;30472:147::-;30567:45;30606:5;30567:45;:::i;:::-;30562:3;30555:58;30472:147;;:::o;30625:348::-;30754:4;30792:2;30781:9;30777:18;30769:26;;30805:71;30873:1;30862:9;30858:17;30849:6;30805:71;:::i;:::-;30886:80;30962:2;30951:9;30947:18;30938:6;30886:80;:::i;:::-;30625:348;;;;;:::o;30979:442::-;31128:4;31166:2;31155:9;31151:18;31143:26;;31179:71;31247:1;31236:9;31232:17;31223:6;31179:71;:::i;:::-;31260:72;31328:2;31317:9;31313:18;31304:6;31260:72;:::i;:::-;31342;31410:2;31399:9;31395:18;31386:6;31342:72;:::i;:::-;30979:442;;;;;;:::o;31427:180::-;31475:77;31472:1;31465:88;31572:4;31569:1;31562:15;31596:4;31593:1;31586:15;31613:233;31652:3;31675:24;31693:5;31675:24;:::i;:::-;31666:33;;31721:66;31714:5;31711:77;31708:103;;31791:18;;:::i;:::-;31708:103;31838:1;31831:5;31827:13;31820:20;;31613:233;;;:::o;31852:180::-;31900:77;31897:1;31890:88;31997:4;31994:1;31987:15;32021:4;32018:1;32011:15;32038:113;32125:1;32118:5;32115:12;32105:40;;32141:1;32138;32131:12;32105:40;32038:113;:::o;32157:167::-;32217:5;32255:6;32242:20;32233:29;;32271:47;32312:5;32271:47;:::i;:::-;32157:167;;;;:::o;32330:357::-;32403:6;32452:2;32440:9;32431:7;32427:23;32423:32;32420:119;;;32458:79;;:::i;:::-;32420:119;32578:1;32603:67;32662:7;32653:6;32642:9;32638:22;32603:67;:::i;:::-;32593:77;;32549:131;32330:357;;;;:::o;32693:117::-;32802:1;32799;32792:12;32971:933;33040:5;33084:4;33072:9;33067:3;33063:19;33059:30;33056:117;;;33092:79;;:::i;:::-;33056:117;33191:21;33207:4;33191:21;:::i;:::-;33182:30;;33277:1;33317:63;33376:3;33367:6;33356:9;33352:22;33317:63;:::i;:::-;33310:4;33303:5;33299:16;33292:89;33222:170;33449:2;33490:49;33535:3;33526:6;33515:9;33511:22;33490:49;:::i;:::-;33483:4;33476:5;33472:16;33465:75;33402:149;33621:2;33662:49;33707:3;33698:6;33687:9;33683:22;33662:49;:::i;:::-;33655:4;33648:5;33644:16;33637:75;33561:162;33795:2;33836:49;33881:3;33872:6;33861:9;33857:22;33836:49;:::i;:::-;33829:4;33822:5;33818:16;33811:75;33733:164;32971:933;;;;:::o;33910:370::-;33989:6;34038:3;34026:9;34017:7;34013:23;34009:33;34006:120;;;34045:79;;:::i;:::-;34006:120;34165:1;34190:73;34255:7;34246:6;34235:9;34231:22;34190:73;:::i;:::-;34180:83;;34136:137;33910:370;;;;:::o;34286:143::-;34343:5;34374:6;34368:13;34359:22;;34390:33;34417:5;34390:33;:::i;:::-;34286:143;;;;:::o;34435:351::-;34505:6;34554:2;34542:9;34533:7;34529:23;34525:32;34522:119;;;34560:79;;:::i;:::-;34522:119;34680:1;34705:64;34761:7;34752:6;34741:9;34737:22;34705:64;:::i;:::-;34695:74;;34651:128;34435:351;;;;:::o;34792:174::-;34932:26;34928:1;34920:6;34916:14;34909:50;34792:174;:::o;34972:366::-;35114:3;35135:67;35199:2;35194:3;35135:67;:::i;:::-;35128:74;;35211:93;35300:3;35211:93;:::i;:::-;35329:2;35324:3;35320:12;35313:19;;34972:366;;;:::o;35344:419::-;35510:4;35548:2;35537:9;35533:18;35525:26;;35597:9;35591:4;35587:20;35583:1;35572:9;35568:17;35561:47;35625:131;35751:4;35625:131;:::i;:::-;35617:139;;35344:419;;;:::o;35769:173::-;35909:25;35905:1;35897:6;35893:14;35886:49;35769:173;:::o;35948:366::-;36090:3;36111:67;36175:2;36170:3;36111:67;:::i;:::-;36104:74;;36187:93;36276:3;36187:93;:::i;:::-;36305:2;36300:3;36296:12;36289:19;;35948:366;;;:::o;36320:419::-;36486:4;36524:2;36513:9;36509:18;36501:26;;36573:9;36567:4;36563:20;36559:1;36548:9;36544:17;36537:47;36601:131;36727:4;36601:131;:::i;:::-;36593:139;;36320:419;;;:::o;36745:194::-;36785:4;36805:20;36823:1;36805:20;:::i;:::-;36800:25;;36839:20;36857:1;36839:20;:::i;:::-;36834:25;;36883:1;36880;36876:9;36868:17;;36907:1;36901:4;36898:11;36895:37;;;36912:18;;:::i;:::-;36895:37;36745:194;;;;:::o;36945:191::-;36985:3;37004:20;37022:1;37004:20;:::i;:::-;36999:25;;37038:20;37056:1;37038:20;:::i;:::-;37033:25;;37081:1;37078;37074:9;37067:16;;37102:3;37099:1;37096:10;37093:36;;;37109:18;;:::i;:::-;37093:36;36945:191;;;;:::o;37173:795::-;37261:5;37305:4;37293:9;37288:3;37284:19;37280:30;37277:117;;;37313:79;;:::i;:::-;37277:117;37412:21;37428:4;37412:21;:::i;:::-;37403:30;;37497:1;37537:60;37593:3;37584:6;37573:9;37569:22;37537:60;:::i;:::-;37530:4;37523:5;37519:16;37512:86;37443:166;37671:2;37712:60;37768:3;37759:6;37748:9;37744:22;37712:60;:::i;:::-;37705:4;37698:5;37694:16;37687:86;37619:165;37848:2;37889:60;37945:3;37936:6;37925:9;37921:22;37889:60;:::i;:::-;37882:4;37875:5;37871:16;37864:86;37794:167;37173:795;;;;:::o;37974:407::-;38072:6;38121:2;38109:9;38100:7;38096:23;38092:32;38089:119;;;38127:79;;:::i;:::-;38089:119;38247:1;38272:92;38356:7;38347:6;38336:9;38332:22;38272:92;:::i;:::-;38262:102;;38218:156;37974:407;;;;:::o;38387:410::-;38427:7;38450:20;38468:1;38450:20;:::i;:::-;38445:25;;38484:20;38502:1;38484:20;:::i;:::-;38479:25;;38539:1;38536;38532:9;38561:30;38579:11;38561:30;:::i;:::-;38550:41;;38740:1;38731:7;38727:15;38724:1;38721:22;38701:1;38694:9;38674:83;38651:139;;38770:18;;:::i;:::-;38651:139;38435:362;38387:410;;;;:::o;38803:180::-;38851:77;38848:1;38841:88;38948:4;38945:1;38938:15;38972:4;38969:1;38962:15;38989:185;39029:1;39046:20;39064:1;39046:20;:::i;:::-;39041:25;;39080:20;39098:1;39080:20;:::i;:::-;39075:25;;39119:1;39109:35;;39124:18;;:::i;:::-;39109:35;39166:1;39163;39159:9;39154:14;;38989:185;;;;:::o;39180:225::-;39320:34;39316:1;39308:6;39304:14;39297:58;39389:8;39384:2;39376:6;39372:15;39365:33;39180:225;:::o;39411:366::-;39553:3;39574:67;39638:2;39633:3;39574:67;:::i;:::-;39567:74;;39650:93;39739:3;39650:93;:::i;:::-;39768:2;39763:3;39759:12;39752:19;;39411:366;;;:::o;39783:419::-;39949:4;39987:2;39976:9;39972:18;39964:26;;40036:9;40030:4;40026:20;40022:1;40011:9;40007:17;40000:47;40064:131;40190:4;40064:131;:::i;:::-;40056:139;;39783:419;;;:::o;40394:186::-;40439:11;40488:3;40475:17;40501:33;40528:5;40501:33;:::i;:::-;40568:5;40544:29;;40451:129;40394:186;;;:::o;40586:92::-;40618:8;40665:5;40662:1;40658:13;40637:34;;40586:92;;;:::o;40684:290::-;40742:6;40771:66;40858:22;40871:8;40858:22;:::i;:::-;40846:34;;40913:4;40909:9;40902:5;40898:21;40889:30;;40962:4;40952:8;40948:19;40941:5;40938:30;40928:40;;40749:225;40684:290;;;;:::o;40980:142::-;41030:9;41063:53;41081:34;41090:24;41108:5;41090:24;:::i;:::-;41081:34;:::i;:::-;41063:53;:::i;:::-;41050:66;;40980:142;;;:::o;41128:75::-;41171:3;41192:5;41185:12;;41128:75;;;:::o;41209:262::-;41319:39;41350:7;41319:39;:::i;:::-;41380:84;41422:41;41446:16;41422:41;:::i;:::-;41415:4;41409:11;41380:84;:::i;:::-;41374:4;41367:98;41285:186;41209:262;;:::o;41477:815::-;41663:1;41657:4;41653:12;41709:1;41702:5;41698:13;41759:12;41802:42;41830:13;41802:42;:::i;:::-;41785:59;;41858:78;41922:13;41910:10;41858:78;:::i;:::-;41620:327;;;42000:1;41994:4;41990:12;42046:2;42039:5;42035:14;42097:12;42140:42;42168:13;42140:42;:::i;:::-;42123:59;;42196:78;42260:13;42248:10;42196:78;:::i;:::-;41957:328;;;41477:815;;:::o;42298:276::-;42444:124;42560:7;42554:4;42444:124;:::i;:::-;42298:276;;:::o;42580:182::-;42720:34;42716:1;42708:6;42704:14;42697:58;42580:182;:::o;42768:366::-;42910:3;42931:67;42995:2;42990:3;42931:67;:::i;:::-;42924:74;;43007:93;43096:3;43007:93;:::i;:::-;43125:2;43120:3;43116:12;43109:19;;42768:366;;;:::o;43140:419::-;43306:4;43344:2;43333:9;43329:18;43321:26;;43393:9;43387:4;43383:20;43379:1;43368:9;43364:17;43357:47;43421:131;43547:4;43421:131;:::i;:::-;43413:139;;43140:419;;;:::o
Swarm Source
ipfs://d4ff6943e05b13ffded9d4fd03c49b6541e9c78bb839064a7b2fd0826f4f8628
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.