More Info
Private Name Tags
ContractCreator
Latest 7 from a total of 7 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Pick Winner | 9000868 | 57 days ago | IN | 0 APE | 0.000916 | ||||
Enroll | 9000795 | 57 days ago | IN | 2 wei | 0.00143738 | ||||
Enroll | 8985566 | 57 days ago | IN | 10 wei | 0.00256558 | ||||
Enroll | 8982659 | 57 days ago | IN | 2 wei | 0.00386966 | ||||
Set Split Accoun... | 8951288 | 58 days ago | IN | 0 APE | 0.0023388 | ||||
Create Match | 8950809 | 58 days ago | IN | 0 APE | 0.00360775 | ||||
Set Entries | 8950673 | 58 days ago | IN | 0 APE | 0.00700703 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
NewWinpad
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2025-01-30 */ // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @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 { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _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: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ 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 value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[ERC]. * * 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[ERC 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 v5.1.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.20; /** * @dev Required interface of an ERC-721 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 ERC-721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or * {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the address zero. * * 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/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: contracts/NewWinpad.sol pragma solidity ^0.8.0; contract NewWinpad is Ownable, ReentrancyGuard { using SafeMath for uint256; //@dev defining entries struct Entry { uint256 idx; uint256 baseEntry; uint256 bonusEntry; } struct Match { uint256 id; uint256 endDate; bool paused; bool isEnded; uint256 currentEntries; uint256 totalEntries; address rewardToken; // ERC20 token address or NFT contract address bool isERC20; // True if reward is ERC20, false if NFT uint256 rewardAmount; // Amount of ERC20 tokens or NFT ID mapping(address => uint256) participantEntries; // Total entries per participant uint256 collectedFunds; address[] participants; // To track participant addresses } uint8 public entriesLength; // Track the total number of entries mapping(uint8 => Entry) public entries; Match[] public matches; mapping(address => bool) public callers; mapping(address => uint256) public refunds; uint8 constant FEE_PERCENT = 8; uint8 constant TREASURY_PERCENT = 72; uint8 constant OPERATIONS_PERCENT = 20; address payable public FEE_PERCENT_ACCOUNT; address payable public TREASURY_PERCENT_ACCOUNT; address payable public OPERATIONS_PERCENT_ACCOUNT; // Function to set the accounts (admin-only) function setSplitAccounts( address payable feeAccount, address payable treasuryAccount, address payable operationsAccount ) external onlyOwner { require(feeAccount != address(0), "Fee account is zero address"); require( treasuryAccount != address(0), "Treasury account is zero address" ); require( operationsAccount != address(0), "Operations account is zero address" ); FEE_PERCENT_ACCOUNT = feeAccount; TREASURY_PERCENT_ACCOUNT = treasuryAccount; OPERATIONS_PERCENT_ACCOUNT = operationsAccount; } // Private function to split and distribute collected funds function _split(uint256 totalAmount) private { require(totalAmount > 0, "Total amount must be greater than zero"); uint256 feeAmount = (totalAmount * FEE_PERCENT) / 100; uint256 treasuryAmount = (totalAmount * TREASURY_PERCENT) / 100; uint256 operationsAmount = (totalAmount * OPERATIONS_PERCENT) / 100; require( feeAmount + treasuryAmount + operationsAmount == totalAmount, "Percentage split mismatch" ); // Transfer funds to the respective accounts if (feeAmount > 0) { FEE_PERCENT_ACCOUNT.transfer(feeAmount); } if (treasuryAmount > 0) { TREASURY_PERCENT_ACCOUNT.transfer(treasuryAmount); } if (operationsAmount > 0) { OPERATIONS_PERCENT_ACCOUNT.transfer(operationsAmount); } emit FundsSplit( totalAmount, feeAmount, treasuryAmount, operationsAmount ); } event MatchCreated( uint256 matchId, uint256 endDate, address rewardToken, bool isERC20, uint256 rewardAmount ); event MatchPaused(uint256 matchId); event MatchUnpaused(uint256 matchId); event MatchCancelled(uint256 matchId); event ParticipantJoined( uint256 matchId, address participant, uint256 obtainedEntries ); event WinnerPicked(uint256 matchId, address winner, uint256 seed); event FundsSplit( uint256 totalAmount, uint256 feeAmount, uint256 treasuryAmount, uint256 operationsAmount ); constructor(address _initialOwner) Ownable(_initialOwner) {} function createMatch( uint256 endDate, address rewardToken, bool isERC20, uint256 rewardAmount, uint256 totalEntries ) external onlyOwner { require(endDate > block.timestamp, "End date must be in the future"); Match storage newMatch = matches.push(); newMatch.id = matches.length - 1; newMatch.endDate = endDate; newMatch.rewardToken = rewardToken; newMatch.isERC20 = isERC20; newMatch.rewardAmount = rewardAmount; newMatch.totalEntries = totalEntries; emit MatchCreated( newMatch.id, endDate, rewardToken, isERC20, rewardAmount ); } function enroll(uint256 matchId, uint8 entryId) external payable matchExists(matchId) entryExists(entryId) notPaused(matchId) nonReentrant { Match storage currentMatch = matches[matchId]; require( block.timestamp < currentMatch.endDate || !currentMatch.isEnded, "Match has ended." ); Entry storage selectedEntry = entries[entryId]; // Calculate the total entry amount for this enrollment uint256 totalEntryAmount = selectedEntry.baseEntry + selectedEntry.bonusEntry; // Ensure the user's total entries don't exceed the match's total entries require( currentMatch.currentEntries + totalEntryAmount <= currentMatch.totalEntries, "Entry limit exceeded for this match." ); require(msg.value == selectedEntry.baseEntry, "Incorrect payment."); if (currentMatch.participantEntries[msg.sender] == 0) { currentMatch.participants.push(msg.sender); } currentMatch.participantEntries[msg.sender] += totalEntryAmount; currentMatch.currentEntries += totalEntryAmount; currentMatch.collectedFunds += selectedEntry.baseEntry; emit ParticipantJoined(matchId, msg.sender, totalEntryAmount); } function pickWinner(uint256 matchId) external onlyCaller matchExists(matchId) notPaused(matchId) nonReentrant { Match storage currentMatch = matches[matchId]; require( block.timestamp >= currentMatch.endDate, "Match has not ended yet" ); require( currentMatch.participants.length > 0, "No participants in the match" ); uint256 totalWeightedEntries = 0; for (uint256 i = 0; i < currentMatch.participants.length; i++) { totalWeightedEntries += currentMatch.participantEntries[ currentMatch.participants[i] ]; } require(totalWeightedEntries > 0, "No valid entries"); uint256 randomSeed = uint256( keccak256( abi.encodePacked(block.timestamp, block.difficulty, msg.sender) ) ); uint256 winningEntry = randomSeed % totalWeightedEntries; uint256 cumulativeEntries = 0; address winner; for (uint256 i = 0; i < currentMatch.participants.length; i++) { address participant = currentMatch.participants[i]; cumulativeEntries += currentMatch.participantEntries[participant]; if (winningEntry < cumulativeEntries) { winner = participant; break; } } require(winner != address(0), "Winner not determined"); if (currentMatch.isERC20) { require( IERC20(currentMatch.rewardToken).transfer( winner, currentMatch.rewardAmount ), "ERC20 transfer failed" ); } else { IERC721(currentMatch.rewardToken).safeTransferFrom( address(this), winner, currentMatch.rewardAmount ); } uint256 collectedAmount = currentMatch.collectedFunds; //splitting collected amount to accounts; _split(collectedAmount); currentMatch.isEnded = true; emit WinnerPicked(matchId, winner, randomSeed); } function cancelMatch(uint256 matchId) external onlyCaller matchExists(matchId) nonReentrant { Match storage currentMatch = matches[matchId]; // Process refunds only if there are participants if (currentMatch.participants.length > 0) { for (uint256 i = 0; i < currentMatch.participants.length; i++) { address participant = currentMatch.participants[i]; refunds[participant] += currentMatch.participantEntries[ participant ]; } } // Mark the match as ended regardless of participants currentMatch.isEnded = true; emit MatchCancelled(matchId); } function withdrawRefund() external nonReentrant { uint256 amount = refunds[msg.sender]; require(amount > 0, "No refund available"); refunds[msg.sender] = 0; (bool sent, ) = msg.sender.call{value: amount}(""); require(sent, "Refund failed."); } function getCurrentMatches() external view returns (uint256[] memory) { uint256 count = 0; // First, count how many matches are ongoing for (uint256 i = 0; i < matches.length; i++) { if (!matches[i].isEnded) { count++; } } // Initialize the result array with the exact count of ongoing matches uint256[] memory ongoingMatches = new uint256[](count); uint256 index = 0; // Populate the result array with ongoing match IDs for (uint256 i = 0; i < matches.length; i++) { if (!matches[i].isEnded) { ongoingMatches[index] = matches[i].id; index++; } } return ongoingMatches; } function getReadyToPickMatches() external view returns (uint256[] memory) { uint256[] memory readyMatches = new uint256[](matches.length); uint256 count = 0; for (uint256 i = 0; i < matches.length; i++) { Match storage currentMatch = matches[i]; if ( block.timestamp >= currentMatch.endDate && !currentMatch.paused && !currentMatch.isEnded && currentMatch.participants.length > 0 ) { readyMatches[count] = currentMatch.id; count++; } } uint256[] memory result = new uint256[](count); for (uint256 i = 0; i < count; i++) { result[i] = readyMatches[i]; } return result; } /** * @dev Returns all participants and their entries for a given match. * @param matchId The ID of the match to fetch entries for. * @return participants Array of participant addresses. * @return _entries Array of entry amounts corresponding to each participant. */ function getAllEntries(uint256 matchId) external view matchExists(matchId) returns (address[] memory participants, uint256[] memory _entries) { Match storage currentMatch = matches[matchId]; uint256 participantCount = currentMatch.participants.length; participants = new address[](participantCount); _entries = new uint256[](participantCount); for (uint256 i = 0; i < participantCount; i++) { address participant = currentMatch.participants[i]; participants[i] = participant; _entries[i] = currentMatch.participantEntries[participant]; } return (participants, _entries); } function getEntryData(uint8 entryId) external view returns (uint256 baseEntry, uint256 bonusEntry) { require( entries[entryId].baseEntry > 0 || entries[entryId].bonusEntry > 0, "Entry does not exist" ); return (entries[entryId].baseEntry, entries[entryId].bonusEntry); } function addEntry(uint256 baseEntry, uint256 bonusEntry) external onlyOwner { entries[entriesLength] = Entry({ idx: entriesLength, baseEntry: baseEntry, bonusEntry: bonusEntry }); entriesLength++; // Increment the counter } function getEntries() external view returns (Entry[] memory data) { data = new Entry[](entriesLength); for (uint8 i = 0; i < entriesLength; i++) { data[i] = entries[i]; } return data; } function setEntries( uint256[] calldata baseEntries, uint256[] calldata bonusEntries ) public onlyOwner { require( baseEntries.length == bonusEntries.length, "Invalid entry input lengths" ); for (uint8 i = 0; i < baseEntries.length; i++) { entries[i] = Entry(i, baseEntries[i], bonusEntries[i]); } entriesLength = uint8(baseEntries.length); } modifier entryExists(uint8 entryId) { require( entries[entryId].baseEntry != 0 || entries[entryId].bonusEntry != 0, "Entry does not exist." ); _; } modifier matchExists(uint256 matchId) { require(matchId < matches.length, "Match does not exist."); _; } modifier notPaused(uint256 matchId) { require(!matches[matchId].paused, "Match is paused."); _; } modifier onlyCaller() { require(owner() == msg.sender || callers[msg.sender], "Not Caller."); _; } function pauseMatch(uint256 matchId) external onlyCaller { matches[matchId].paused = true; emit MatchPaused(matchId); } function unpauseMatch(uint256 matchId) external onlyCaller { matches[matchId].paused = false; emit MatchUnpaused(matchId); } function addCallers(address[] memory executors) public onlyOwner { for (uint256 i = 0; i < executors.length; i++) { callers[executors[i]] = true; } } function removeCallers(address[] memory executors) public onlyOwner { for (uint256 i = 0; i < executors.length; i++) { callers[executors[i]] = false; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"operationsAmount","type":"uint256"}],"name":"FundsSplit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"matchId","type":"uint256"}],"name":"MatchCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"matchId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endDate","type":"uint256"},{"indexed":false,"internalType":"address","name":"rewardToken","type":"address"},{"indexed":false,"internalType":"bool","name":"isERC20","type":"bool"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"MatchCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"matchId","type":"uint256"}],"name":"MatchPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"matchId","type":"uint256"}],"name":"MatchUnpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"matchId","type":"uint256"},{"indexed":false,"internalType":"address","name":"participant","type":"address"},{"indexed":false,"internalType":"uint256","name":"obtainedEntries","type":"uint256"}],"name":"ParticipantJoined","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"matchId","type":"uint256"},{"indexed":false,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"uint256","name":"seed","type":"uint256"}],"name":"WinnerPicked","type":"event"},{"inputs":[],"name":"FEE_PERCENT_ACCOUNT","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATIONS_PERCENT_ACCOUNT","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TREASURY_PERCENT_ACCOUNT","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"executors","type":"address[]"}],"name":"addCallers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"baseEntry","type":"uint256"},{"internalType":"uint256","name":"bonusEntry","type":"uint256"}],"name":"addEntry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"callers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"matchId","type":"uint256"}],"name":"cancelMatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"bool","name":"isERC20","type":"bool"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"internalType":"uint256","name":"totalEntries","type":"uint256"}],"name":"createMatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"matchId","type":"uint256"},{"internalType":"uint8","name":"entryId","type":"uint8"}],"name":"enroll","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"entries","outputs":[{"internalType":"uint256","name":"idx","type":"uint256"},{"internalType":"uint256","name":"baseEntry","type":"uint256"},{"internalType":"uint256","name":"bonusEntry","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"entriesLength","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"matchId","type":"uint256"}],"name":"getAllEntries","outputs":[{"internalType":"address[]","name":"participants","type":"address[]"},{"internalType":"uint256[]","name":"_entries","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentMatches","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEntries","outputs":[{"components":[{"internalType":"uint256","name":"idx","type":"uint256"},{"internalType":"uint256","name":"baseEntry","type":"uint256"},{"internalType":"uint256","name":"bonusEntry","type":"uint256"}],"internalType":"struct NewWinpad.Entry[]","name":"data","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"entryId","type":"uint8"}],"name":"getEntryData","outputs":[{"internalType":"uint256","name":"baseEntry","type":"uint256"},{"internalType":"uint256","name":"bonusEntry","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReadyToPickMatches","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"matches","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"bool","name":"paused","type":"bool"},{"internalType":"bool","name":"isEnded","type":"bool"},{"internalType":"uint256","name":"currentEntries","type":"uint256"},{"internalType":"uint256","name":"totalEntries","type":"uint256"},{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"bool","name":"isERC20","type":"bool"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"internalType":"uint256","name":"collectedFunds","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"matchId","type":"uint256"}],"name":"pauseMatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"matchId","type":"uint256"}],"name":"pickWinner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"refunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"executors","type":"address[]"}],"name":"removeCallers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"baseEntries","type":"uint256[]"},{"internalType":"uint256[]","name":"bonusEntries","type":"uint256[]"}],"name":"setEntries","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"feeAccount","type":"address"},{"internalType":"address payable","name":"treasuryAccount","type":"address"},{"internalType":"address payable","name":"operationsAccount","type":"address"}],"name":"setSplitAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"matchId","type":"uint256"}],"name":"unpauseMatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawRefund","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561000f575f80fd5b5060405161462f38038061462f833981810160405281019061003191906101de565b805f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a2575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100999190610218565b60405180910390fd5b6100b1816100bf60201b60201c565b506001808190555050610231565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101ad82610184565b9050919050565b6101bd816101a3565b81146101c7575f80fd5b50565b5f815190506101d8816101b4565b92915050565b5f602082840312156101f3576101f2610180565b5b5f610200848285016101ca565b91505092915050565b610212816101a3565b82525050565b5f60208201905061022b5f830184610209565b92915050565b6143f18061023e5f395ff3fe6080604052600436106101b6575f3560e01c80638da5cb5b116100eb578063e53805c711610089578063f737d21d11610063578063f737d21d146105db578063f7dc078b14610603578063fbe9e7511461062d578063fd23efef14610655576101b6565b8063e53805c714610561578063ee9b29401461058b578063f2fde38b146105b3576101b6565b8063bc3da535116100c5578063bc3da53514610495578063bc3e2284146104d1578063d02c8cdf1461050f578063d2c4d41414610537576101b6565b80638da5cb5b1461041b57806390bd67e514610445578063b92d70b81461046d576101b6565b80634768d4ef11610158578063768b5c6711610132578063768b5c67146103655780637bbf4a3f1461038d57806382d97110146103c957806384267959146103f1576101b6565b80634768d4ef146102e25780635e42f10e14610327578063715018a61461034f576101b6565b806325a3d4361161019457806325a3d4361461022257806329dc91c31461025f578063330ab39a1461028957806333a35448146102a5576101b6565b8063049ac59b146101ba578063110f8874146101e257806317be85c3146101f8575b5f80fd5b3480156101c5575f80fd5b506101e060048036038101906101db9190612be3565b61067f565b005b3480156101ed575f80fd5b506101f66107b9565b005b348015610203575f80fd5b5061020c61093a565b6040516102199190612d05565b60405180910390f35b34801561022d575f80fd5b5061024860048036038101906102439190612be3565b610a32565b604051610256929190612eb4565b60405180910390f35b34801561026a575f80fd5b50610273610c50565b6040516102809190612ee9565b60405180910390f35b6102a3600480360381019061029e9190612f3f565b610e12565b005b3480156102b0575f80fd5b506102cb60048036038101906102c69190612f7d565b611229565b6040516102d9929190612fb7565b60405180910390f35b3480156102ed575f80fd5b5061030860048036038101906103039190612be3565b6112ea565b60405161031e9a99989796959493929190613007565b60405180910390f35b348015610332575f80fd5b5061034d6004803603810190610348919061321b565b61138e565b005b34801561035a575f80fd5b50610363611420565b005b348015610370575f80fd5b5061038b60048036038101906103869190612be3565b611433565b005b348015610398575f80fd5b506103b360048036038101906103ae9190613262565b61156e565b6040516103c0919061328d565b60405180910390f35b3480156103d4575f80fd5b506103ef60048036038101906103ea91906132ff565b61158b565b005b3480156103fc575f80fd5b506104056116ae565b604051610412919061339d565b60405180910390f35b348015610426575f80fd5b5061042f6116d3565b60405161043c91906133b6565b60405180910390f35b348015610450575f80fd5b5061046b600480360381019061046691906133f9565b6116fa565b005b348015610478575f80fd5b50610493600480360381019061048e9190613473565b611911565b005b3480156104a0575f80fd5b506104bb60048036038101906104b69190613262565b611a58565b6040516104c891906134ea565b60405180910390f35b3480156104dc575f80fd5b506104f760048036038101906104f29190612f7d565b611a6d565b60405161050693929190613503565b60405180910390f35b34801561051a575f80fd5b5061053560048036038101906105309190612be3565b611a93565b005b348015610542575f80fd5b5061054b611d30565b604051610558919061339d565b60405180910390f35b34801561056c575f80fd5b50610575611d55565b6040516105829190612ee9565b60405180910390f35b348015610596575f80fd5b506105b160048036038101906105ac9190613538565b611eb2565b005b3480156105be575f80fd5b506105d960048036038101906105d49190613262565b611f65565b005b3480156105e6575f80fd5b5061060160048036038101906105fc9190612be3565b611fe9565b005b34801561060e575f80fd5b5061061761268c565b604051610624919061339d565b60405180910390f35b348015610638575f80fd5b50610653600480360381019061064e919061321b565b6126b1565b005b348015610660575f80fd5b50610669612744565b6040516106769190613585565b60405180910390f35b3373ffffffffffffffffffffffffffffffffffffffff1661069e6116d3565b73ffffffffffffffffffffffffffffffffffffffff161480610706575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073c906135f8565b60405180910390fd5b5f6004828154811061075a57610759613616565b5b905f5260205f2090600a02016002015f6101000a81548160ff0219169083151502179055507fbd2800ce670bc629d6709a5facc3b0e4748e1b212b7e420b1ed292778a4c5046816040516107ae91906134ea565b60405180910390a150565b6107c1612756565b5f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8111610844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083b9061368d565b60405180910390fd5b5f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f3373ffffffffffffffffffffffffffffffffffffffff16826040516108ab906136d8565b5f6040518083038185875af1925050503d805f81146108e5576040519150601f19603f3d011682016040523d82523d5f602084013e6108ea565b606091505b505090508061092e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092590613736565b60405180910390fd5b50506109386127a5565b565b606060025f9054906101000a900460ff1660ff1667ffffffffffffffff811115610967576109666130b5565b5b6040519080825280602002602001820160405280156109a057816020015b61098d612b81565b8152602001906001900390816109855790505b5090505f5b60025f9054906101000a900460ff1660ff168160ff161015610a2e5760035f8260ff1660ff1681526020019081526020015f206040518060600160405290815f820154815260200160018201548152602001600282015481525050828260ff1681518110610a1657610a15613616565b5b602002602001018190525080806001019150506109a5565b5090565b606080826004805490508110610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a749061379e565b60405180910390fd5b5f60048581548110610a9257610a91613616565b5b905f5260205f2090600a020190505f816009018054905090508067ffffffffffffffff811115610ac557610ac46130b5565b5b604051908082528060200260200182016040528015610af35781602001602082028036833780820191505090505b5094508067ffffffffffffffff811115610b1057610b0f6130b5565b5b604051908082528060200260200182016040528015610b3e5781602001602082028036833780820191505090505b5093505f5b81811015610c47575f836009018281548110610b6257610b61613616565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080878381518110610ba057610b9f613616565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050836007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054868381518110610c2d57610c2c613616565b5b602002602001018181525050508080600101915050610b43565b50505050915091565b60605f60048054905067ffffffffffffffff811115610c7257610c716130b5565b5b604051908082528060200260200182016040528015610ca05781602001602082028036833780820191505090505b5090505f805b600480549050811015610d6a575f60048281548110610cc857610cc7613616565b5b905f5260205f2090600a0201905080600101544210158015610cf85750806002015f9054906101000a900460ff16155b8015610d1357508060020160019054906101000a900460ff16155b8015610d2557505f8160090180549050115b15610d5c57805f0154848481518110610d4157610d40613616565b5b6020026020010181815250508280610d58906137e9565b9350505b508080600101915050610ca6565b505f8167ffffffffffffffff811115610d8657610d856130b5565b5b604051908082528060200260200182016040528015610db45781602001602082028036833780820191505090505b5090505f5b82811015610e0857838181518110610dd457610dd3613616565b5b6020026020010151828281518110610def57610dee613616565b5b6020026020010181815250508080600101915050610db9565b5080935050505090565b816004805490508110610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e519061379e565b60405180910390fd5b815f60035f8360ff1660ff1681526020019081526020015f2060010154141580610e9e57505f60035f8360ff1660ff1681526020019081526020015f206002015414155b610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed49061387a565b60405180910390fd5b8360048181548110610ef257610ef1613616565b5b905f5260205f2090600a02016002015f9054906101000a900460ff1615610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f45906138e2565b60405180910390fd5b610f56612756565b5f60048681548110610f6b57610f6a613616565b5b905f5260205f2090600a020190508060010154421080610f9a57508060020160019054906101000a900460ff16155b610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd09061394a565b60405180910390fd5b5f60035f8760ff1660ff1681526020019081526020015f2090505f816002015482600101546110089190613968565b9050826004015481846003015461101f9190613968565b1115611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790613a0b565b60405180910390fd5b816001015434146110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d90613a73565b60405180910390fd5b5f836007015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20540361114f578260090133908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80836007015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461119d9190613968565b9250508190555080836003015f8282546111b79190613968565b925050819055508160010154836008015f8282546111d59190613968565b925050819055507f338e0cd33c4e120afcd73f43f082fd8940ed67ac35180d278d2eb4f3ed51d92e88338360405161120f93929190613a91565b60405180910390a15050506112226127a5565b5050505050565b5f805f60035f8560ff1660ff1681526020019081526020015f2060010154118061126c57505f60035f8560ff1660ff1681526020019081526020015f2060020154115b6112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290613b10565b60405180910390fd5b60035f8460ff1660ff1681526020019081526020015f206001015460035f8560ff1660ff1681526020019081526020015f206002015491509150915091565b600481815481106112f9575f80fd5b905f5260205f2090600a02015f91509050805f015490806001015490806002015f9054906101000a900460ff16908060020160019054906101000a900460ff1690806003015490806004015490806005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050160149054906101000a900460ff1690806006015490806008015490508a565b6113966127ae565b5f5b815181101561141c575f60055f8484815181106113b8576113b7613616565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611398565b5050565b6114286127ae565b6114315f612835565b565b3373ffffffffffffffffffffffffffffffffffffffff166114526116d3565b73ffffffffffffffffffffffffffffffffffffffff1614806114ba575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f0906135f8565b60405180910390fd5b60016004828154811061150f5761150e613616565b5b905f5260205f2090600a02016002015f6101000a81548160ff0219169083151502179055507f9f6b838e8160012b261280722f7d000f9a616b49bae77628ab03db3142190c688160405161156391906134ea565b60405180910390a150565b6005602052805f5260405f205f915054906101000a900460ff1681565b6115936127ae565b8181905084849050146115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d290613b78565b60405180910390fd5b5f5b848490508160ff16101561168a5760405180606001604052808260ff16815260200186868460ff1681811061161557611614613616565b5b90506020020135815260200184848460ff1681811061163757611636613616565b5b9050602002013581525060035f8360ff1660ff1681526020019081526020015f205f820151815f01556020820151816001015560408201518160020155905050808061168290613b96565b9150506115dd565b508383905060025f6101000a81548160ff021916908360ff16021790555050505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117026127ae565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176790613c08565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d590613c70565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184390613cfe565b60405180910390fd5b8260075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6119196127ae565b42851161195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195290613d66565b60405180910390fd5b5f600460018160018154018082558091505003905f5260205f2090600a02019050600160048054905061198e9190613d84565b815f018190555085816001018190555084816005015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160050160146101000a81548160ff0219169083151502179055508281600601819055508181600401819055507f712a06043bdc55fb71b57e8747caf273ae1c60da08943aa231909b47f5532ed3815f015487878787604051611a48959493929190613db7565b60405180910390a1505050505050565b6006602052805f5260405f205f915090505481565b6003602052805f5260405f205f91509050805f0154908060010154908060020154905083565b3373ffffffffffffffffffffffffffffffffffffffff16611ab26116d3565b73ffffffffffffffffffffffffffffffffffffffff161480611b1a575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b50906135f8565b60405180910390fd5b806004805490508110611ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b989061379e565b60405180910390fd5b611ba9612756565b5f60048381548110611bbe57611bbd613616565b5b905f5260205f2090600a020190505f81600901805490501115611ccf575f5b8160090180549050811015611ccd575f826009018281548110611c0357611c02613616565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050826007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611cb89190613968565b92505081905550508080600101915050611bdd565b505b60018160020160016101000a81548160ff0219169083151502179055507f700135b4fe8746e2d2c85a9baa43c62887740aebfeb3a439f71a083fe5d5675983604051611d1b91906134ea565b60405180910390a150611d2c6127a5565b5050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60605f805b600480549050811015611db85760048181548110611d7b57611d7a613616565b5b905f5260205f2090600a020160020160019054906101000a900460ff16611dab578180611da7906137e9565b9250505b8080600101915050611d5a565b505f8167ffffffffffffffff811115611dd457611dd36130b5565b5b604051908082528060200260200182016040528015611e025781602001602082028036833780820191505090505b5090505f805b600480549050811015611ea85760048181548110611e2957611e28613616565b5b905f5260205f2090600a020160020160019054906101000a900460ff16611e9b5760048181548110611e5e57611e5d613616565b5b905f5260205f2090600a02015f0154838381518110611e8057611e7f613616565b5b6020026020010181815250508180611e97906137e9565b9250505b8080600101915050611e08565b5081935050505090565b611eba6127ae565b604051806060016040528060025f9054906101000a900460ff1660ff1681526020018381526020018281525060035f60025f9054906101000a900460ff1660ff1660ff1681526020019081526020015f205f820151815f0155602082015181600101556040820151816002015590505060025f81819054906101000a900460ff1680929190611f4890613b96565b91906101000a81548160ff021916908360ff160217905550505050565b611f6d6127ae565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fdd575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611fd491906133b6565b60405180910390fd5b611fe681612835565b50565b3373ffffffffffffffffffffffffffffffffffffffff166120086116d3565b73ffffffffffffffffffffffffffffffffffffffff161480612070575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a6906135f8565b60405180910390fd5b8060048054905081106120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee9061379e565b60405180910390fd5b816004818154811061210c5761210b613616565b5b905f5260205f2090600a02016002015f9054906101000a900460ff1615612168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215f906138e2565b60405180910390fd5b612170612756565b5f6004848154811061218557612184613616565b5b905f5260205f2090600a0201905080600101544210156121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d190613e52565b60405180910390fd5b5f816009018054905011612223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221a90613eba565b60405180910390fd5b5f805b82600901805490508110156122cc57826007015f8460090183815481106122505761224f613616565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054826122bd9190613968565b91508080600101915050612226565b505f811161230f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230690613f22565b60405180910390fd5b5f42443360405160200161232593929190613fa5565b604051602081830303815290604052805190602001205f1c90505f828261234c919061400e565b90505f80805f90505b8660090180549050811015612411575f87600901828154811061237b5761237a613616565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050876007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054846123f09190613968565b9350838510156124035780925050612411565b508080600101915050612355565b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247790614088565b60405180910390fd5b8560050160149054906101000a900460ff161561257d57856005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8288600601546040518363ffffffff1660e01b81526004016124f99291906140a6565b6020604051808303815f875af1158015612515573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061253991906140e1565b612578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256f90614156565b60405180910390fd5b61260f565b856005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e308389600601546040518463ffffffff1660e01b81526004016125e193929190614174565b5f604051808303815f87803b1580156125f8575f80fd5b505af115801561260a573d5f803e3d5ffd5b505050505b5f86600801549050612620816128f6565b60018760020160016101000a81548160ff0219169083151502179055507fad586bf2cfefa63512aa5a1106545ee05dc5376edec8841ef54a636f4a036a2d8a838760405161267093929190613a91565b60405180910390a1505050505050506126876127a5565b505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6126b96127ae565b5f5b815181101561274057600160055f8484815181106126dc576126db613616565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506126bb565b5050565b60025f9054906101000a900460ff1681565b60026001540361279b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612792906141f3565b60405180910390fd5b6002600181905550565b60018081905550565b6127b6612b7a565b73ffffffffffffffffffffffffffffffffffffffff166127d46116d3565b73ffffffffffffffffffffffffffffffffffffffff1614612833576127f7612b7a565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161282a91906133b6565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8111612938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292f90614281565b60405180910390fd5b5f6064600860ff168361294b919061429f565b61295591906142e0565b90505f6064604860ff168461296a919061429f565b61297491906142e0565b90505f6064601460ff1685612989919061429f565b61299391906142e0565b9050838183856129a39190613968565b6129ad9190613968565b146129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e49061435a565b60405180910390fd5b5f831115612a5b5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015612a59573d5f803e3d5ffd5b505b5f821115612ac95760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015612ac7573d5f803e3d5ffd5b505b5f811115612b375760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612b35573d5f803e3d5ffd5b505b7f6e24439017528dcb48087e74e9920b967cd425bab648f784c8b92fc6e652d40b84848484604051612b6c9493929190614378565b60405180910390a150505050565b5f33905090565b60405180606001604052805f81526020015f81526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b612bc281612bb0565b8114612bcc575f80fd5b50565b5f81359050612bdd81612bb9565b92915050565b5f60208284031215612bf857612bf7612ba8565b5b5f612c0584828501612bcf565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612c4081612bb0565b82525050565b606082015f820151612c5a5f850182612c37565b506020820151612c6d6020850182612c37565b506040820151612c806040850182612c37565b50505050565b5f612c918383612c46565b60608301905092915050565b5f602082019050919050565b5f612cb382612c0e565b612cbd8185612c18565b9350612cc883612c28565b805f5b83811015612cf8578151612cdf8882612c86565b9750612cea83612c9d565b925050600181019050612ccb565b5085935050505092915050565b5f6020820190508181035f830152612d1d8184612ca9565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d7782612d4e565b9050919050565b612d8781612d6d565b82525050565b5f612d988383612d7e565b60208301905092915050565b5f602082019050919050565b5f612dba82612d25565b612dc48185612d2f565b9350612dcf83612d3f565b805f5b83811015612dff578151612de68882612d8d565b9750612df183612da4565b925050600181019050612dd2565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f612e408383612c37565b60208301905092915050565b5f602082019050919050565b5f612e6282612e0c565b612e6c8185612e16565b9350612e7783612e26565b805f5b83811015612ea7578151612e8e8882612e35565b9750612e9983612e4c565b925050600181019050612e7a565b5085935050505092915050565b5f6040820190508181035f830152612ecc8185612db0565b90508181036020830152612ee08184612e58565b90509392505050565b5f6020820190508181035f830152612f018184612e58565b905092915050565b5f60ff82169050919050565b612f1e81612f09565b8114612f28575f80fd5b50565b5f81359050612f3981612f15565b92915050565b5f8060408385031215612f5557612f54612ba8565b5b5f612f6285828601612bcf565b9250506020612f7385828601612f2b565b9150509250929050565b5f60208284031215612f9257612f91612ba8565b5b5f612f9f84828501612f2b565b91505092915050565b612fb181612bb0565b82525050565b5f604082019050612fca5f830185612fa8565b612fd76020830184612fa8565b9392505050565b5f8115159050919050565b612ff281612fde565b82525050565b61300181612d6d565b82525050565b5f6101408201905061301b5f83018d612fa8565b613028602083018c612fa8565b613035604083018b612fe9565b613042606083018a612fe9565b61304f6080830189612fa8565b61305c60a0830188612fa8565b61306960c0830187612ff8565b61307660e0830186612fe9565b613084610100830185612fa8565b613092610120830184612fa8565b9b9a5050505050505050505050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6130eb826130a5565b810181811067ffffffffffffffff8211171561310a576131096130b5565b5b80604052505050565b5f61311c612b9f565b905061312882826130e2565b919050565b5f67ffffffffffffffff821115613147576131466130b5565b5b602082029050602081019050919050565b5f80fd5b61316581612d6d565b811461316f575f80fd5b50565b5f813590506131808161315c565b92915050565b5f6131986131938461312d565b613113565b905080838252602082019050602084028301858111156131bb576131ba613158565b5b835b818110156131e457806131d08882613172565b8452602084019350506020810190506131bd565b5050509392505050565b5f82601f830112613202576132016130a1565b5b8135613212848260208601613186565b91505092915050565b5f602082840312156132305761322f612ba8565b5b5f82013567ffffffffffffffff81111561324d5761324c612bac565b5b613259848285016131ee565b91505092915050565b5f6020828403121561327757613276612ba8565b5b5f61328484828501613172565b91505092915050565b5f6020820190506132a05f830184612fe9565b92915050565b5f80fd5b5f8083601f8401126132bf576132be6130a1565b5b8235905067ffffffffffffffff8111156132dc576132db6132a6565b5b6020830191508360208202830111156132f8576132f7613158565b5b9250929050565b5f805f806040858703121561331757613316612ba8565b5b5f85013567ffffffffffffffff81111561333457613333612bac565b5b613340878288016132aa565b9450945050602085013567ffffffffffffffff81111561336357613362612bac565b5b61336f878288016132aa565b925092505092959194509250565b5f61338782612d4e565b9050919050565b6133978161337d565b82525050565b5f6020820190506133b05f83018461338e565b92915050565b5f6020820190506133c95f830184612ff8565b92915050565b6133d88161337d565b81146133e2575f80fd5b50565b5f813590506133f3816133cf565b92915050565b5f805f606084860312156134105761340f612ba8565b5b5f61341d868287016133e5565b935050602061342e868287016133e5565b925050604061343f868287016133e5565b9150509250925092565b61345281612fde565b811461345c575f80fd5b50565b5f8135905061346d81613449565b92915050565b5f805f805f60a0868803121561348c5761348b612ba8565b5b5f61349988828901612bcf565b95505060206134aa88828901613172565b94505060406134bb8882890161345f565b93505060606134cc88828901612bcf565b92505060806134dd88828901612bcf565b9150509295509295909350565b5f6020820190506134fd5f830184612fa8565b92915050565b5f6060820190506135165f830186612fa8565b6135236020830185612fa8565b6135306040830184612fa8565b949350505050565b5f806040838503121561354e5761354d612ba8565b5b5f61355b85828601612bcf565b925050602061356c85828601612bcf565b9150509250929050565b61357f81612f09565b82525050565b5f6020820190506135985f830184613576565b92915050565b5f82825260208201905092915050565b7f4e6f742043616c6c65722e0000000000000000000000000000000000000000005f82015250565b5f6135e2600b8361359e565b91506135ed826135ae565b602082019050919050565b5f6020820190508181035f83015261360f816135d6565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e6f20726566756e6420617661696c61626c65000000000000000000000000005f82015250565b5f61367760138361359e565b915061368282613643565b602082019050919050565b5f6020820190508181035f8301526136a48161366b565b9050919050565b5f81905092915050565b50565b5f6136c35f836136ab565b91506136ce826136b5565b5f82019050919050565b5f6136e2826136b8565b9150819050919050565b7f526566756e64206661696c65642e0000000000000000000000000000000000005f82015250565b5f613720600e8361359e565b915061372b826136ec565b602082019050919050565b5f6020820190508181035f83015261374d81613714565b9050919050565b7f4d6174636820646f6573206e6f742065786973742e00000000000000000000005f82015250565b5f61378860158361359e565b915061379382613754565b602082019050919050565b5f6020820190508181035f8301526137b58161377c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6137f382612bb0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613825576138246137bc565b5b600182019050919050565b7f456e74727920646f6573206e6f742065786973742e00000000000000000000005f82015250565b5f61386460158361359e565b915061386f82613830565b602082019050919050565b5f6020820190508181035f83015261389181613858565b9050919050565b7f4d61746368206973207061757365642e000000000000000000000000000000005f82015250565b5f6138cc60108361359e565b91506138d782613898565b602082019050919050565b5f6020820190508181035f8301526138f9816138c0565b9050919050565b7f4d617463682068617320656e6465642e000000000000000000000000000000005f82015250565b5f61393460108361359e565b915061393f82613900565b602082019050919050565b5f6020820190508181035f83015261396181613928565b9050919050565b5f61397282612bb0565b915061397d83612bb0565b9250828201905080821115613995576139946137bc565b5b92915050565b7f456e747279206c696d697420657863656564656420666f722074686973206d615f8201527f7463682e00000000000000000000000000000000000000000000000000000000602082015250565b5f6139f560248361359e565b9150613a008261399b565b604082019050919050565b5f6020820190508181035f830152613a22816139e9565b9050919050565b7f496e636f7272656374207061796d656e742e00000000000000000000000000005f82015250565b5f613a5d60128361359e565b9150613a6882613a29565b602082019050919050565b5f6020820190508181035f830152613a8a81613a51565b9050919050565b5f606082019050613aa45f830186612fa8565b613ab16020830185612ff8565b613abe6040830184612fa8565b949350505050565b7f456e74727920646f6573206e6f742065786973740000000000000000000000005f82015250565b5f613afa60148361359e565b9150613b0582613ac6565b602082019050919050565b5f6020820190508181035f830152613b2781613aee565b9050919050565b7f496e76616c696420656e74727920696e707574206c656e6774687300000000005f82015250565b5f613b62601b8361359e565b9150613b6d82613b2e565b602082019050919050565b5f6020820190508181035f830152613b8f81613b56565b9050919050565b5f613ba082612f09565b915060ff8203613bb357613bb26137bc565b5b600182019050919050565b7f466565206163636f756e74206973207a65726f206164647265737300000000005f82015250565b5f613bf2601b8361359e565b9150613bfd82613bbe565b602082019050919050565b5f6020820190508181035f830152613c1f81613be6565b9050919050565b7f5472656173757279206163636f756e74206973207a65726f20616464726573735f82015250565b5f613c5a60208361359e565b9150613c6582613c26565b602082019050919050565b5f6020820190508181035f830152613c8781613c4e565b9050919050565b7f4f7065726174696f6e73206163636f756e74206973207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ce860228361359e565b9150613cf382613c8e565b604082019050919050565b5f6020820190508181035f830152613d1581613cdc565b9050919050565b7f456e642064617465206d75737420626520696e207468652066757475726500005f82015250565b5f613d50601e8361359e565b9150613d5b82613d1c565b602082019050919050565b5f6020820190508181035f830152613d7d81613d44565b9050919050565b5f613d8e82612bb0565b9150613d9983612bb0565b9250828203905081811115613db157613db06137bc565b5b92915050565b5f60a082019050613dca5f830188612fa8565b613dd76020830187612fa8565b613de46040830186612ff8565b613df16060830185612fe9565b613dfe6080830184612fa8565b9695505050505050565b7f4d6174636820686173206e6f7420656e646564207965740000000000000000005f82015250565b5f613e3c60178361359e565b9150613e4782613e08565b602082019050919050565b5f6020820190508181035f830152613e6981613e30565b9050919050565b7f4e6f207061727469636970616e747320696e20746865206d61746368000000005f82015250565b5f613ea4601c8361359e565b9150613eaf82613e70565b602082019050919050565b5f6020820190508181035f830152613ed181613e98565b9050919050565b7f4e6f2076616c696420656e7472696573000000000000000000000000000000005f82015250565b5f613f0c60108361359e565b9150613f1782613ed8565b602082019050919050565b5f6020820190508181035f830152613f3981613f00565b9050919050565b5f819050919050565b613f5a613f5582612bb0565b613f40565b82525050565b5f8160601b9050919050565b5f613f7682613f60565b9050919050565b5f613f8782613f6c565b9050919050565b613f9f613f9a82612d6d565b613f7d565b82525050565b5f613fb08286613f49565b602082019150613fc08285613f49565b602082019150613fd08284613f8e565b601482019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61401882612bb0565b915061402383612bb0565b92508261403357614032613fe1565b5b828206905092915050565b7f57696e6e6572206e6f742064657465726d696e656400000000000000000000005f82015250565b5f61407260158361359e565b915061407d8261403e565b602082019050919050565b5f6020820190508181035f83015261409f81614066565b9050919050565b5f6040820190506140b95f830185612ff8565b6140c66020830184612fa8565b9392505050565b5f815190506140db81613449565b92915050565b5f602082840312156140f6576140f5612ba8565b5b5f614103848285016140cd565b91505092915050565b7f4552433230207472616e73666572206661696c656400000000000000000000005f82015250565b5f61414060158361359e565b915061414b8261410c565b602082019050919050565b5f6020820190508181035f83015261416d81614134565b9050919050565b5f6060820190506141875f830186612ff8565b6141946020830185612ff8565b6141a16040830184612fa8565b949350505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f6141dd601f8361359e565b91506141e8826141a9565b602082019050919050565b5f6020820190508181035f83015261420a816141d1565b9050919050565b7f546f74616c20616d6f756e74206d7573742062652067726561746572207468615f8201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b5f61426b60268361359e565b915061427682614211565b604082019050919050565b5f6020820190508181035f8301526142988161425f565b9050919050565b5f6142a982612bb0565b91506142b483612bb0565b92508282026142c281612bb0565b915082820484148315176142d9576142d86137bc565b5b5092915050565b5f6142ea82612bb0565b91506142f583612bb0565b92508261430557614304613fe1565b5b828204905092915050565b7f50657263656e746167652073706c6974206d69736d61746368000000000000005f82015250565b5f61434460198361359e565b915061434f82614310565b602082019050919050565b5f6020820190508181035f83015261437181614338565b9050919050565b5f60808201905061438b5f830187612fa8565b6143986020830186612fa8565b6143a56040830185612fa8565b6143b26060830184612fa8565b9594505050505056fea26469706673582212209ba4176660d82e3b3b1b55abb5e9253e760ce40b82bf1a55cb53a7fe9b68fe0d64736f6c634300081a0033000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711
Deployed Bytecode
0x6080604052600436106101b6575f3560e01c80638da5cb5b116100eb578063e53805c711610089578063f737d21d11610063578063f737d21d146105db578063f7dc078b14610603578063fbe9e7511461062d578063fd23efef14610655576101b6565b8063e53805c714610561578063ee9b29401461058b578063f2fde38b146105b3576101b6565b8063bc3da535116100c5578063bc3da53514610495578063bc3e2284146104d1578063d02c8cdf1461050f578063d2c4d41414610537576101b6565b80638da5cb5b1461041b57806390bd67e514610445578063b92d70b81461046d576101b6565b80634768d4ef11610158578063768b5c6711610132578063768b5c67146103655780637bbf4a3f1461038d57806382d97110146103c957806384267959146103f1576101b6565b80634768d4ef146102e25780635e42f10e14610327578063715018a61461034f576101b6565b806325a3d4361161019457806325a3d4361461022257806329dc91c31461025f578063330ab39a1461028957806333a35448146102a5576101b6565b8063049ac59b146101ba578063110f8874146101e257806317be85c3146101f8575b5f80fd5b3480156101c5575f80fd5b506101e060048036038101906101db9190612be3565b61067f565b005b3480156101ed575f80fd5b506101f66107b9565b005b348015610203575f80fd5b5061020c61093a565b6040516102199190612d05565b60405180910390f35b34801561022d575f80fd5b5061024860048036038101906102439190612be3565b610a32565b604051610256929190612eb4565b60405180910390f35b34801561026a575f80fd5b50610273610c50565b6040516102809190612ee9565b60405180910390f35b6102a3600480360381019061029e9190612f3f565b610e12565b005b3480156102b0575f80fd5b506102cb60048036038101906102c69190612f7d565b611229565b6040516102d9929190612fb7565b60405180910390f35b3480156102ed575f80fd5b5061030860048036038101906103039190612be3565b6112ea565b60405161031e9a99989796959493929190613007565b60405180910390f35b348015610332575f80fd5b5061034d6004803603810190610348919061321b565b61138e565b005b34801561035a575f80fd5b50610363611420565b005b348015610370575f80fd5b5061038b60048036038101906103869190612be3565b611433565b005b348015610398575f80fd5b506103b360048036038101906103ae9190613262565b61156e565b6040516103c0919061328d565b60405180910390f35b3480156103d4575f80fd5b506103ef60048036038101906103ea91906132ff565b61158b565b005b3480156103fc575f80fd5b506104056116ae565b604051610412919061339d565b60405180910390f35b348015610426575f80fd5b5061042f6116d3565b60405161043c91906133b6565b60405180910390f35b348015610450575f80fd5b5061046b600480360381019061046691906133f9565b6116fa565b005b348015610478575f80fd5b50610493600480360381019061048e9190613473565b611911565b005b3480156104a0575f80fd5b506104bb60048036038101906104b69190613262565b611a58565b6040516104c891906134ea565b60405180910390f35b3480156104dc575f80fd5b506104f760048036038101906104f29190612f7d565b611a6d565b60405161050693929190613503565b60405180910390f35b34801561051a575f80fd5b5061053560048036038101906105309190612be3565b611a93565b005b348015610542575f80fd5b5061054b611d30565b604051610558919061339d565b60405180910390f35b34801561056c575f80fd5b50610575611d55565b6040516105829190612ee9565b60405180910390f35b348015610596575f80fd5b506105b160048036038101906105ac9190613538565b611eb2565b005b3480156105be575f80fd5b506105d960048036038101906105d49190613262565b611f65565b005b3480156105e6575f80fd5b5061060160048036038101906105fc9190612be3565b611fe9565b005b34801561060e575f80fd5b5061061761268c565b604051610624919061339d565b60405180910390f35b348015610638575f80fd5b50610653600480360381019061064e919061321b565b6126b1565b005b348015610660575f80fd5b50610669612744565b6040516106769190613585565b60405180910390f35b3373ffffffffffffffffffffffffffffffffffffffff1661069e6116d3565b73ffffffffffffffffffffffffffffffffffffffff161480610706575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073c906135f8565b60405180910390fd5b5f6004828154811061075a57610759613616565b5b905f5260205f2090600a02016002015f6101000a81548160ff0219169083151502179055507fbd2800ce670bc629d6709a5facc3b0e4748e1b212b7e420b1ed292778a4c5046816040516107ae91906134ea565b60405180910390a150565b6107c1612756565b5f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8111610844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083b9061368d565b60405180910390fd5b5f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f3373ffffffffffffffffffffffffffffffffffffffff16826040516108ab906136d8565b5f6040518083038185875af1925050503d805f81146108e5576040519150601f19603f3d011682016040523d82523d5f602084013e6108ea565b606091505b505090508061092e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092590613736565b60405180910390fd5b50506109386127a5565b565b606060025f9054906101000a900460ff1660ff1667ffffffffffffffff811115610967576109666130b5565b5b6040519080825280602002602001820160405280156109a057816020015b61098d612b81565b8152602001906001900390816109855790505b5090505f5b60025f9054906101000a900460ff1660ff168160ff161015610a2e5760035f8260ff1660ff1681526020019081526020015f206040518060600160405290815f820154815260200160018201548152602001600282015481525050828260ff1681518110610a1657610a15613616565b5b602002602001018190525080806001019150506109a5565b5090565b606080826004805490508110610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a749061379e565b60405180910390fd5b5f60048581548110610a9257610a91613616565b5b905f5260205f2090600a020190505f816009018054905090508067ffffffffffffffff811115610ac557610ac46130b5565b5b604051908082528060200260200182016040528015610af35781602001602082028036833780820191505090505b5094508067ffffffffffffffff811115610b1057610b0f6130b5565b5b604051908082528060200260200182016040528015610b3e5781602001602082028036833780820191505090505b5093505f5b81811015610c47575f836009018281548110610b6257610b61613616565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080878381518110610ba057610b9f613616565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050836007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054868381518110610c2d57610c2c613616565b5b602002602001018181525050508080600101915050610b43565b50505050915091565b60605f60048054905067ffffffffffffffff811115610c7257610c716130b5565b5b604051908082528060200260200182016040528015610ca05781602001602082028036833780820191505090505b5090505f805b600480549050811015610d6a575f60048281548110610cc857610cc7613616565b5b905f5260205f2090600a0201905080600101544210158015610cf85750806002015f9054906101000a900460ff16155b8015610d1357508060020160019054906101000a900460ff16155b8015610d2557505f8160090180549050115b15610d5c57805f0154848481518110610d4157610d40613616565b5b6020026020010181815250508280610d58906137e9565b9350505b508080600101915050610ca6565b505f8167ffffffffffffffff811115610d8657610d856130b5565b5b604051908082528060200260200182016040528015610db45781602001602082028036833780820191505090505b5090505f5b82811015610e0857838181518110610dd457610dd3613616565b5b6020026020010151828281518110610def57610dee613616565b5b6020026020010181815250508080600101915050610db9565b5080935050505090565b816004805490508110610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e519061379e565b60405180910390fd5b815f60035f8360ff1660ff1681526020019081526020015f2060010154141580610e9e57505f60035f8360ff1660ff1681526020019081526020015f206002015414155b610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed49061387a565b60405180910390fd5b8360048181548110610ef257610ef1613616565b5b905f5260205f2090600a02016002015f9054906101000a900460ff1615610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f45906138e2565b60405180910390fd5b610f56612756565b5f60048681548110610f6b57610f6a613616565b5b905f5260205f2090600a020190508060010154421080610f9a57508060020160019054906101000a900460ff16155b610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd09061394a565b60405180910390fd5b5f60035f8760ff1660ff1681526020019081526020015f2090505f816002015482600101546110089190613968565b9050826004015481846003015461101f9190613968565b1115611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790613a0b565b60405180910390fd5b816001015434146110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d90613a73565b60405180910390fd5b5f836007015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20540361114f578260090133908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80836007015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461119d9190613968565b9250508190555080836003015f8282546111b79190613968565b925050819055508160010154836008015f8282546111d59190613968565b925050819055507f338e0cd33c4e120afcd73f43f082fd8940ed67ac35180d278d2eb4f3ed51d92e88338360405161120f93929190613a91565b60405180910390a15050506112226127a5565b5050505050565b5f805f60035f8560ff1660ff1681526020019081526020015f2060010154118061126c57505f60035f8560ff1660ff1681526020019081526020015f2060020154115b6112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290613b10565b60405180910390fd5b60035f8460ff1660ff1681526020019081526020015f206001015460035f8560ff1660ff1681526020019081526020015f206002015491509150915091565b600481815481106112f9575f80fd5b905f5260205f2090600a02015f91509050805f015490806001015490806002015f9054906101000a900460ff16908060020160019054906101000a900460ff1690806003015490806004015490806005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050160149054906101000a900460ff1690806006015490806008015490508a565b6113966127ae565b5f5b815181101561141c575f60055f8484815181106113b8576113b7613616565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611398565b5050565b6114286127ae565b6114315f612835565b565b3373ffffffffffffffffffffffffffffffffffffffff166114526116d3565b73ffffffffffffffffffffffffffffffffffffffff1614806114ba575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f0906135f8565b60405180910390fd5b60016004828154811061150f5761150e613616565b5b905f5260205f2090600a02016002015f6101000a81548160ff0219169083151502179055507f9f6b838e8160012b261280722f7d000f9a616b49bae77628ab03db3142190c688160405161156391906134ea565b60405180910390a150565b6005602052805f5260405f205f915054906101000a900460ff1681565b6115936127ae565b8181905084849050146115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d290613b78565b60405180910390fd5b5f5b848490508160ff16101561168a5760405180606001604052808260ff16815260200186868460ff1681811061161557611614613616565b5b90506020020135815260200184848460ff1681811061163757611636613616565b5b9050602002013581525060035f8360ff1660ff1681526020019081526020015f205f820151815f01556020820151816001015560408201518160020155905050808061168290613b96565b9150506115dd565b508383905060025f6101000a81548160ff021916908360ff16021790555050505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117026127ae565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176790613c08565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d590613c70565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184390613cfe565b60405180910390fd5b8260075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6119196127ae565b42851161195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195290613d66565b60405180910390fd5b5f600460018160018154018082558091505003905f5260205f2090600a02019050600160048054905061198e9190613d84565b815f018190555085816001018190555084816005015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160050160146101000a81548160ff0219169083151502179055508281600601819055508181600401819055507f712a06043bdc55fb71b57e8747caf273ae1c60da08943aa231909b47f5532ed3815f015487878787604051611a48959493929190613db7565b60405180910390a1505050505050565b6006602052805f5260405f205f915090505481565b6003602052805f5260405f205f91509050805f0154908060010154908060020154905083565b3373ffffffffffffffffffffffffffffffffffffffff16611ab26116d3565b73ffffffffffffffffffffffffffffffffffffffff161480611b1a575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b50906135f8565b60405180910390fd5b806004805490508110611ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b989061379e565b60405180910390fd5b611ba9612756565b5f60048381548110611bbe57611bbd613616565b5b905f5260205f2090600a020190505f81600901805490501115611ccf575f5b8160090180549050811015611ccd575f826009018281548110611c0357611c02613616565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050826007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611cb89190613968565b92505081905550508080600101915050611bdd565b505b60018160020160016101000a81548160ff0219169083151502179055507f700135b4fe8746e2d2c85a9baa43c62887740aebfeb3a439f71a083fe5d5675983604051611d1b91906134ea565b60405180910390a150611d2c6127a5565b5050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60605f805b600480549050811015611db85760048181548110611d7b57611d7a613616565b5b905f5260205f2090600a020160020160019054906101000a900460ff16611dab578180611da7906137e9565b9250505b8080600101915050611d5a565b505f8167ffffffffffffffff811115611dd457611dd36130b5565b5b604051908082528060200260200182016040528015611e025781602001602082028036833780820191505090505b5090505f805b600480549050811015611ea85760048181548110611e2957611e28613616565b5b905f5260205f2090600a020160020160019054906101000a900460ff16611e9b5760048181548110611e5e57611e5d613616565b5b905f5260205f2090600a02015f0154838381518110611e8057611e7f613616565b5b6020026020010181815250508180611e97906137e9565b9250505b8080600101915050611e08565b5081935050505090565b611eba6127ae565b604051806060016040528060025f9054906101000a900460ff1660ff1681526020018381526020018281525060035f60025f9054906101000a900460ff1660ff1660ff1681526020019081526020015f205f820151815f0155602082015181600101556040820151816002015590505060025f81819054906101000a900460ff1680929190611f4890613b96565b91906101000a81548160ff021916908360ff160217905550505050565b611f6d6127ae565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fdd575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611fd491906133b6565b60405180910390fd5b611fe681612835565b50565b3373ffffffffffffffffffffffffffffffffffffffff166120086116d3565b73ffffffffffffffffffffffffffffffffffffffff161480612070575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a6906135f8565b60405180910390fd5b8060048054905081106120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee9061379e565b60405180910390fd5b816004818154811061210c5761210b613616565b5b905f5260205f2090600a02016002015f9054906101000a900460ff1615612168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215f906138e2565b60405180910390fd5b612170612756565b5f6004848154811061218557612184613616565b5b905f5260205f2090600a0201905080600101544210156121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d190613e52565b60405180910390fd5b5f816009018054905011612223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221a90613eba565b60405180910390fd5b5f805b82600901805490508110156122cc57826007015f8460090183815481106122505761224f613616565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054826122bd9190613968565b91508080600101915050612226565b505f811161230f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230690613f22565b60405180910390fd5b5f42443360405160200161232593929190613fa5565b604051602081830303815290604052805190602001205f1c90505f828261234c919061400e565b90505f80805f90505b8660090180549050811015612411575f87600901828154811061237b5761237a613616565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050876007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054846123f09190613968565b9350838510156124035780925050612411565b508080600101915050612355565b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247790614088565b60405180910390fd5b8560050160149054906101000a900460ff161561257d57856005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8288600601546040518363ffffffff1660e01b81526004016124f99291906140a6565b6020604051808303815f875af1158015612515573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061253991906140e1565b612578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256f90614156565b60405180910390fd5b61260f565b856005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e308389600601546040518463ffffffff1660e01b81526004016125e193929190614174565b5f604051808303815f87803b1580156125f8575f80fd5b505af115801561260a573d5f803e3d5ffd5b505050505b5f86600801549050612620816128f6565b60018760020160016101000a81548160ff0219169083151502179055507fad586bf2cfefa63512aa5a1106545ee05dc5376edec8841ef54a636f4a036a2d8a838760405161267093929190613a91565b60405180910390a1505050505050506126876127a5565b505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6126b96127ae565b5f5b815181101561274057600160055f8484815181106126dc576126db613616565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506126bb565b5050565b60025f9054906101000a900460ff1681565b60026001540361279b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612792906141f3565b60405180910390fd5b6002600181905550565b60018081905550565b6127b6612b7a565b73ffffffffffffffffffffffffffffffffffffffff166127d46116d3565b73ffffffffffffffffffffffffffffffffffffffff1614612833576127f7612b7a565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161282a91906133b6565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8111612938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292f90614281565b60405180910390fd5b5f6064600860ff168361294b919061429f565b61295591906142e0565b90505f6064604860ff168461296a919061429f565b61297491906142e0565b90505f6064601460ff1685612989919061429f565b61299391906142e0565b9050838183856129a39190613968565b6129ad9190613968565b146129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e49061435a565b60405180910390fd5b5f831115612a5b5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015612a59573d5f803e3d5ffd5b505b5f821115612ac95760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015612ac7573d5f803e3d5ffd5b505b5f811115612b375760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612b35573d5f803e3d5ffd5b505b7f6e24439017528dcb48087e74e9920b967cd425bab648f784c8b92fc6e652d40b84848484604051612b6c9493929190614378565b60405180910390a150505050565b5f33905090565b60405180606001604052805f81526020015f81526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b612bc281612bb0565b8114612bcc575f80fd5b50565b5f81359050612bdd81612bb9565b92915050565b5f60208284031215612bf857612bf7612ba8565b5b5f612c0584828501612bcf565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612c4081612bb0565b82525050565b606082015f820151612c5a5f850182612c37565b506020820151612c6d6020850182612c37565b506040820151612c806040850182612c37565b50505050565b5f612c918383612c46565b60608301905092915050565b5f602082019050919050565b5f612cb382612c0e565b612cbd8185612c18565b9350612cc883612c28565b805f5b83811015612cf8578151612cdf8882612c86565b9750612cea83612c9d565b925050600181019050612ccb565b5085935050505092915050565b5f6020820190508181035f830152612d1d8184612ca9565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d7782612d4e565b9050919050565b612d8781612d6d565b82525050565b5f612d988383612d7e565b60208301905092915050565b5f602082019050919050565b5f612dba82612d25565b612dc48185612d2f565b9350612dcf83612d3f565b805f5b83811015612dff578151612de68882612d8d565b9750612df183612da4565b925050600181019050612dd2565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f612e408383612c37565b60208301905092915050565b5f602082019050919050565b5f612e6282612e0c565b612e6c8185612e16565b9350612e7783612e26565b805f5b83811015612ea7578151612e8e8882612e35565b9750612e9983612e4c565b925050600181019050612e7a565b5085935050505092915050565b5f6040820190508181035f830152612ecc8185612db0565b90508181036020830152612ee08184612e58565b90509392505050565b5f6020820190508181035f830152612f018184612e58565b905092915050565b5f60ff82169050919050565b612f1e81612f09565b8114612f28575f80fd5b50565b5f81359050612f3981612f15565b92915050565b5f8060408385031215612f5557612f54612ba8565b5b5f612f6285828601612bcf565b9250506020612f7385828601612f2b565b9150509250929050565b5f60208284031215612f9257612f91612ba8565b5b5f612f9f84828501612f2b565b91505092915050565b612fb181612bb0565b82525050565b5f604082019050612fca5f830185612fa8565b612fd76020830184612fa8565b9392505050565b5f8115159050919050565b612ff281612fde565b82525050565b61300181612d6d565b82525050565b5f6101408201905061301b5f83018d612fa8565b613028602083018c612fa8565b613035604083018b612fe9565b613042606083018a612fe9565b61304f6080830189612fa8565b61305c60a0830188612fa8565b61306960c0830187612ff8565b61307660e0830186612fe9565b613084610100830185612fa8565b613092610120830184612fa8565b9b9a5050505050505050505050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6130eb826130a5565b810181811067ffffffffffffffff8211171561310a576131096130b5565b5b80604052505050565b5f61311c612b9f565b905061312882826130e2565b919050565b5f67ffffffffffffffff821115613147576131466130b5565b5b602082029050602081019050919050565b5f80fd5b61316581612d6d565b811461316f575f80fd5b50565b5f813590506131808161315c565b92915050565b5f6131986131938461312d565b613113565b905080838252602082019050602084028301858111156131bb576131ba613158565b5b835b818110156131e457806131d08882613172565b8452602084019350506020810190506131bd565b5050509392505050565b5f82601f830112613202576132016130a1565b5b8135613212848260208601613186565b91505092915050565b5f602082840312156132305761322f612ba8565b5b5f82013567ffffffffffffffff81111561324d5761324c612bac565b5b613259848285016131ee565b91505092915050565b5f6020828403121561327757613276612ba8565b5b5f61328484828501613172565b91505092915050565b5f6020820190506132a05f830184612fe9565b92915050565b5f80fd5b5f8083601f8401126132bf576132be6130a1565b5b8235905067ffffffffffffffff8111156132dc576132db6132a6565b5b6020830191508360208202830111156132f8576132f7613158565b5b9250929050565b5f805f806040858703121561331757613316612ba8565b5b5f85013567ffffffffffffffff81111561333457613333612bac565b5b613340878288016132aa565b9450945050602085013567ffffffffffffffff81111561336357613362612bac565b5b61336f878288016132aa565b925092505092959194509250565b5f61338782612d4e565b9050919050565b6133978161337d565b82525050565b5f6020820190506133b05f83018461338e565b92915050565b5f6020820190506133c95f830184612ff8565b92915050565b6133d88161337d565b81146133e2575f80fd5b50565b5f813590506133f3816133cf565b92915050565b5f805f606084860312156134105761340f612ba8565b5b5f61341d868287016133e5565b935050602061342e868287016133e5565b925050604061343f868287016133e5565b9150509250925092565b61345281612fde565b811461345c575f80fd5b50565b5f8135905061346d81613449565b92915050565b5f805f805f60a0868803121561348c5761348b612ba8565b5b5f61349988828901612bcf565b95505060206134aa88828901613172565b94505060406134bb8882890161345f565b93505060606134cc88828901612bcf565b92505060806134dd88828901612bcf565b9150509295509295909350565b5f6020820190506134fd5f830184612fa8565b92915050565b5f6060820190506135165f830186612fa8565b6135236020830185612fa8565b6135306040830184612fa8565b949350505050565b5f806040838503121561354e5761354d612ba8565b5b5f61355b85828601612bcf565b925050602061356c85828601612bcf565b9150509250929050565b61357f81612f09565b82525050565b5f6020820190506135985f830184613576565b92915050565b5f82825260208201905092915050565b7f4e6f742043616c6c65722e0000000000000000000000000000000000000000005f82015250565b5f6135e2600b8361359e565b91506135ed826135ae565b602082019050919050565b5f6020820190508181035f83015261360f816135d6565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e6f20726566756e6420617661696c61626c65000000000000000000000000005f82015250565b5f61367760138361359e565b915061368282613643565b602082019050919050565b5f6020820190508181035f8301526136a48161366b565b9050919050565b5f81905092915050565b50565b5f6136c35f836136ab565b91506136ce826136b5565b5f82019050919050565b5f6136e2826136b8565b9150819050919050565b7f526566756e64206661696c65642e0000000000000000000000000000000000005f82015250565b5f613720600e8361359e565b915061372b826136ec565b602082019050919050565b5f6020820190508181035f83015261374d81613714565b9050919050565b7f4d6174636820646f6573206e6f742065786973742e00000000000000000000005f82015250565b5f61378860158361359e565b915061379382613754565b602082019050919050565b5f6020820190508181035f8301526137b58161377c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6137f382612bb0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613825576138246137bc565b5b600182019050919050565b7f456e74727920646f6573206e6f742065786973742e00000000000000000000005f82015250565b5f61386460158361359e565b915061386f82613830565b602082019050919050565b5f6020820190508181035f83015261389181613858565b9050919050565b7f4d61746368206973207061757365642e000000000000000000000000000000005f82015250565b5f6138cc60108361359e565b91506138d782613898565b602082019050919050565b5f6020820190508181035f8301526138f9816138c0565b9050919050565b7f4d617463682068617320656e6465642e000000000000000000000000000000005f82015250565b5f61393460108361359e565b915061393f82613900565b602082019050919050565b5f6020820190508181035f83015261396181613928565b9050919050565b5f61397282612bb0565b915061397d83612bb0565b9250828201905080821115613995576139946137bc565b5b92915050565b7f456e747279206c696d697420657863656564656420666f722074686973206d615f8201527f7463682e00000000000000000000000000000000000000000000000000000000602082015250565b5f6139f560248361359e565b9150613a008261399b565b604082019050919050565b5f6020820190508181035f830152613a22816139e9565b9050919050565b7f496e636f7272656374207061796d656e742e00000000000000000000000000005f82015250565b5f613a5d60128361359e565b9150613a6882613a29565b602082019050919050565b5f6020820190508181035f830152613a8a81613a51565b9050919050565b5f606082019050613aa45f830186612fa8565b613ab16020830185612ff8565b613abe6040830184612fa8565b949350505050565b7f456e74727920646f6573206e6f742065786973740000000000000000000000005f82015250565b5f613afa60148361359e565b9150613b0582613ac6565b602082019050919050565b5f6020820190508181035f830152613b2781613aee565b9050919050565b7f496e76616c696420656e74727920696e707574206c656e6774687300000000005f82015250565b5f613b62601b8361359e565b9150613b6d82613b2e565b602082019050919050565b5f6020820190508181035f830152613b8f81613b56565b9050919050565b5f613ba082612f09565b915060ff8203613bb357613bb26137bc565b5b600182019050919050565b7f466565206163636f756e74206973207a65726f206164647265737300000000005f82015250565b5f613bf2601b8361359e565b9150613bfd82613bbe565b602082019050919050565b5f6020820190508181035f830152613c1f81613be6565b9050919050565b7f5472656173757279206163636f756e74206973207a65726f20616464726573735f82015250565b5f613c5a60208361359e565b9150613c6582613c26565b602082019050919050565b5f6020820190508181035f830152613c8781613c4e565b9050919050565b7f4f7065726174696f6e73206163636f756e74206973207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ce860228361359e565b9150613cf382613c8e565b604082019050919050565b5f6020820190508181035f830152613d1581613cdc565b9050919050565b7f456e642064617465206d75737420626520696e207468652066757475726500005f82015250565b5f613d50601e8361359e565b9150613d5b82613d1c565b602082019050919050565b5f6020820190508181035f830152613d7d81613d44565b9050919050565b5f613d8e82612bb0565b9150613d9983612bb0565b9250828203905081811115613db157613db06137bc565b5b92915050565b5f60a082019050613dca5f830188612fa8565b613dd76020830187612fa8565b613de46040830186612ff8565b613df16060830185612fe9565b613dfe6080830184612fa8565b9695505050505050565b7f4d6174636820686173206e6f7420656e646564207965740000000000000000005f82015250565b5f613e3c60178361359e565b9150613e4782613e08565b602082019050919050565b5f6020820190508181035f830152613e6981613e30565b9050919050565b7f4e6f207061727469636970616e747320696e20746865206d61746368000000005f82015250565b5f613ea4601c8361359e565b9150613eaf82613e70565b602082019050919050565b5f6020820190508181035f830152613ed181613e98565b9050919050565b7f4e6f2076616c696420656e7472696573000000000000000000000000000000005f82015250565b5f613f0c60108361359e565b9150613f1782613ed8565b602082019050919050565b5f6020820190508181035f830152613f3981613f00565b9050919050565b5f819050919050565b613f5a613f5582612bb0565b613f40565b82525050565b5f8160601b9050919050565b5f613f7682613f60565b9050919050565b5f613f8782613f6c565b9050919050565b613f9f613f9a82612d6d565b613f7d565b82525050565b5f613fb08286613f49565b602082019150613fc08285613f49565b602082019150613fd08284613f8e565b601482019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61401882612bb0565b915061402383612bb0565b92508261403357614032613fe1565b5b828206905092915050565b7f57696e6e6572206e6f742064657465726d696e656400000000000000000000005f82015250565b5f61407260158361359e565b915061407d8261403e565b602082019050919050565b5f6020820190508181035f83015261409f81614066565b9050919050565b5f6040820190506140b95f830185612ff8565b6140c66020830184612fa8565b9392505050565b5f815190506140db81613449565b92915050565b5f602082840312156140f6576140f5612ba8565b5b5f614103848285016140cd565b91505092915050565b7f4552433230207472616e73666572206661696c656400000000000000000000005f82015250565b5f61414060158361359e565b915061414b8261410c565b602082019050919050565b5f6020820190508181035f83015261416d81614134565b9050919050565b5f6060820190506141875f830186612ff8565b6141946020830185612ff8565b6141a16040830184612fa8565b949350505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f6141dd601f8361359e565b91506141e8826141a9565b602082019050919050565b5f6020820190508181035f83015261420a816141d1565b9050919050565b7f546f74616c20616d6f756e74206d7573742062652067726561746572207468615f8201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b5f61426b60268361359e565b915061427682614211565b604082019050919050565b5f6020820190508181035f8301526142988161425f565b9050919050565b5f6142a982612bb0565b91506142b483612bb0565b92508282026142c281612bb0565b915082820484148315176142d9576142d86137bc565b5b5092915050565b5f6142ea82612bb0565b91506142f583612bb0565b92508261430557614304613fe1565b5b828204905092915050565b7f50657263656e746167652073706c6974206d69736d61746368000000000000005f82015250565b5f61434460198361359e565b915061434f82614310565b602082019050919050565b5f6020820190508181035f83015261437181614338565b9050919050565b5f60808201905061438b5f830187612fa8565b6143986020830186612fa8565b6143a56040830185612fa8565b6143b26060830184612fa8565b9594505050505056fea26469706673582212209ba4176660d82e3b3b1b55abb5e9253e760ce40b82bf1a55cb53a7fe9b68fe0d64736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711
-----Decoded View---------------
Arg [0] : _initialOwner (address): 0xb931E339b4f5eB3D4D039CE1451426754063C711
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711
Deployed Bytecode Sourcemap
23306:14724:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37490:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32373:295;;;;;;;;;;;;;:::i;:::-;;36026:239;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34599:726;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;33470:819;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27940:1387;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35333:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;24230:22;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;37838:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3361:103;;;;;;;;;;;;;:::i;:::-;;37340:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24261:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36273:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24485:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2686:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24696:661;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27185:747;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24307:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24185:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;31612:753;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24588:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32676:786;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35701:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3619:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29335:2269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24534:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37645:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24115:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37490:147;37263:10;37252:21;;:7;:5;:7::i;:::-;:21;;;:44;;;;37277:7;:19;37285:10;37277:19;;;;;;;;;;;;;;;;;;;;;;;;;37252:44;37244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37586:5:::1;37560:7;37568;37560:16;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;:31;;;;;;;;;;;;;;;;;;37607:22;37621:7;37607:22;;;;;;:::i;:::-;;;;;;;;37490:147:::0;:::o;32373:295::-;6542:21;:19;:21::i;:::-;32432:14:::1;32449:7;:19;32457:10;32449:19;;;;;;;;;;;;;;;;32432:36;;32496:1;32487:6;:10;32479:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;32556:1;32534:7;:19;32542:10;32534:19;;;;;;;;;;;;;;;:23;;;;32569:9;32584:10;:15;;32607:6;32584:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32568:50;;;32637:4;32629:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;32421:247;;6586:20:::0;:18;:20::i;:::-;32373:295::o;36026:239::-;36071:19;36122:13;;;;;;;;;;;36110:26;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;36103:33;;36152:7;36147:89;36169:13;;;;;;;;;;;36165:17;;:1;:17;;;36147:89;;;36214:7;:10;36222:1;36214:10;;;;;;;;;;;;;;;36204:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:4;36209:1;36204:7;;;;;;;;;;:::i;:::-;;;;;;;:20;;;;36184:3;;;;;;;36147:89;;;;36026:239;:::o;34599:726::-;34719:29;34750:25;34692:7;37015;:14;;;;37005:7;:24;36997:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34793:26:::1;34822:7;34830;34822:16;;;;;;;;:::i;:::-;;;;;;;;;;;;34793:45;;34849:24;34876:12;:25;;:32;;;;34849:59;;34950:16;34936:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34921:46;;35003:16;34989:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34978:42;;35038:9;35033:241;35057:16;35053:1;:20;35033:241;;;35095:19;35117:12;:25;;35143:1;35117:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35095:50;;35178:11;35160:12;35173:1;35160:15;;;;;;;;:::i;:::-;;;;;;;:29;;;;;;;;;::::0;::::1;35218:12;:31;;:44;35250:11;35218:44;;;;;;;;;;;;;;;;35204:8;35213:1;35204:11;;;;;;;;:::i;:::-;;;;;;;:58;;;::::0;::::1;35080:194;35075:3;;;;;;;35033:241;;;;35286:31;;34599:726:::0;;;;:::o;33470:819::-;33526:16;33555:29;33601:7;:14;;;;33587:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33555:61;;33627:13;33662:9;33657:440;33681:7;:14;;;;33677:1;:18;33657:440;;;33717:26;33746:7;33754:1;33746:10;;;;;;;;:::i;:::-;;;;;;;;;;;;33717:39;;33812:12;:20;;;33793:15;:39;;:80;;;;;33854:12;:19;;;;;;;;;;;;33853:20;33793:80;:122;;;;;33895:12;:20;;;;;;;;;;;;33894:21;33793:122;:179;;;;;33971:1;33936:12;:25;;:32;;;;:36;33793:179;33771:315;;;34029:12;:15;;;34007:12;34020:5;34007:19;;;;;;;;:::i;:::-;;;;;;;:37;;;;;34063:7;;;;;:::i;:::-;;;;33771:315;33702:395;33697:3;;;;;;;33657:440;;;;34109:23;34149:5;34135:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34109:46;;34171:9;34166:90;34190:5;34186:1;:9;34166:90;;;34229:12;34242:1;34229:15;;;;;;;;:::i;:::-;;;;;;;;34217:6;34224:1;34217:9;;;;;;;;:::i;:::-;;;;;;;:27;;;;;34197:3;;;;;;;34166:90;;;;34275:6;34268:13;;;;;33470:819;:::o;27940:1387::-;28044:7;37015;:14;;;;37005:7;:24;36997:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28074:7:::1;36834:1;36804:7;:16;36812:7;36804:16;;;;;;;;;;;;;;;:26;;;:31;;:67;;;;36870:1;36839:7;:16;36847:7;36839:16;;;;;;;;;;;;;;;:27;;;:32;;36804:67;36782:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;28102:7:::2;37139;37147;37139:16;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;;;;;;;;;;37138:24;37130:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;6542:21:::3;:19;:21::i;:::-;28149:26:::4;28178:7;28186;28178:16;;;;;;;;:::i;:::-;;;;;;;;;;;;28149:45;;28245:12;:20;;;28227:15;:38;:63;;;;28270:12;:20;;;;;;;;;;;;28269:21;28227:63;28205:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;28347:27;28377:7;:16;28385:7;28377:16;;;;;;;;;;;;;;;28347:46;;28469:24;28535:13;:24;;;28496:13;:23;;;:63;;;;:::i;:::-;28469:90;;28744:12;:25;;;28707:16;28677:12;:27;;;:46;;;;:::i;:::-;:92;;28655:178;;;;;;;;;;;;:::i;:::-;;;;;;;;;28865:13;:23;;;28852:9;:36;28844:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28975:1;28928:12;:31;;:43;28960:10;28928:43;;;;;;;;;;;;;;;;:48:::0;28924:123:::4;;28993:12;:25;;29024:10;28993:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28924:123;29106:16;29059:12;:31;;:43;29091:10;29059:43;;;;;;;;;;;;;;;;:63;;;;;;;:::i;:::-;;;;;;;;29164:16;29133:12;:27;;;:47;;;;;;;:::i;:::-;;;;;;;;29222:13;:23;;;29191:12;:27;;;:54;;;;;;;:::i;:::-;;;;;;;;29263:56;29281:7;29290:10;29302:16;29263:56;;;;;;;;:::i;:::-;;;;;;;;28138:1189;;;6586:20:::3;:18;:20::i;:::-;36931:1:::2;37066::::1;27940:1387:::0;;;:::o;35333:360::-;35420:17;35439:18;35526:1;35497:7;:16;35505:7;35497:16;;;;;;;;;;;;;;;:26;;;:30;:65;;;;35561:1;35531:7;:16;35539:7;35531:16;;;;;;;;;;;;;;;:27;;;:31;35497:65;35475:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;35629:7;:16;35637:7;35629:16;;;;;;;;;;;;;;;:26;;;35657:7;:16;35665:7;35657:16;;;;;;;;;;;;;;;:27;;;35621:64;;;;35333:360;;;:::o;24230:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37838:189::-;2572:13;:11;:13::i;:::-;37922:9:::1;37917:103;37941:9;:16;37937:1;:20;37917:103;;;38003:5;37979:7;:21;37987:9;37997:1;37987:12;;;;;;;;:::i;:::-;;;;;;;;37979:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37959:3;;;;;;;37917:103;;;;37838:189:::0;:::o;3361:103::-;2572:13;:11;:13::i;:::-;3426:30:::1;3453:1;3426:18;:30::i;:::-;3361:103::o:0;37340:142::-;37263:10;37252:21;;:7;:5;:7::i;:::-;:21;;;:44;;;;37277:7;:19;37285:10;37277:19;;;;;;;;;;;;;;;;;;;;;;;;;37252:44;37244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37434:4:::1;37408:7;37416;37408:16;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;:30;;;;;;;;;;;;;;;;;;37454:20;37466:7;37454:20;;;;;;:::i;:::-;;;;;;;;37340:142:::0;:::o;24261:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;36273:454::-;2572:13;:11;:13::i;:::-;36455:12:::1;;:19;;36433:11;;:18;;:41;36411:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;36545:7;36540:128;36562:11;;:18;;36558:1;:22;;;36540:128;;;36615:41;;;;;;;;36621:1;36615:41;;;;;;36624:11;;36636:1;36624:14;;;;;;;;;:::i;:::-;;;;;;;;36615:41;;;;36640:12;;36653:1;36640:15;;;;;;;;;:::i;:::-;;;;;;;;36615:41;;::::0;36602:7:::1;:10;36610:1;36602:10;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;36582:3;;;;;:::i;:::-;;;;36540:128;;;;36700:11;;:18;;36678:13;;:41;;;;;;;;;;;;;;;;;;36273:454:::0;;;;:::o;24485:42::-;;;;;;;;;;;;;:::o;2686:87::-;2732:7;2759:6;;;;;;;;;;;2752:13;;2686:87;:::o;24696:661::-;2572:13;:11;:13::i;:::-;24912:1:::1;24890:24;;:10;:24;;::::0;24882:64:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25006:1;24979:29;;:15;:29;;::::0;24957:111:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25130:1;25101:31;;:17;:31;;::::0;25079:115:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25229:10;25207:19;;:32;;;;;;;;;;;;;;;;;;25277:15;25250:24;;:42;;;;;;;;;;;;;;;;;;25332:17;25303:26;;:46;;;;;;;;;;;;;;;;;;24696:661:::0;;;:::o;27185:747::-;2572:13;:11;:13::i;:::-;27402:15:::1;27392:7;:25;27384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27465:22;27490:7;:14;;;;;;;;;;;;;;;;;;;;;;;;27465:39;;27546:1;27529:7;:14;;;;:18;;;;:::i;:::-;27515:8;:11;;:32;;;;27577:7;27558:8;:16;;:26;;;;27618:11;27595:8;:20;;;:34;;;;;;;;;;;;;;;;;;27659:7;27640:8;:16;;;:26;;;;;;;;;;;;;;;;;;27701:12;27677:8;:21;;:36;;;;27748:12;27724:8;:21;;:36;;;;27778:146;27805:8;:11;;;27831:7;27853:11;27879:7;27901:12;27778:146;;;;;;;;;;:::i;:::-;;;;;;;;27373:559;27185:747:::0;;;;;:::o;24307:42::-;;;;;;;;;;;;;;;;;:::o;24185:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31612:753::-;37263:10;37252:21;;:7;:5;:7::i;:::-;:21;;;:44;;;;37277:7;:19;37285:10;37277:19;;;;;;;;;;;;;;;;;;;;;;;;;37252:44;37244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31709:7:::1;37015;:14;;;;37005:7;:24;36997:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;6542:21:::2;:19;:21::i;:::-;31756:26:::3;31785:7;31793;31785:16;;;;;;;;:::i;:::-;;;;;;;;;;;;31756:45;;31912:1;31877:12;:25;;:32;;;;:36;31873:343;;;31935:9;31930:275;31954:12;:25;;:32;;;;31950:1;:36;31930:275;;;32012:19;32034:12;:25;;32060:1;32034:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32012:50;;32105:12;:31;;:84;32159:11;32105:84;;;;;;;;;;;;;;;;32081:7;:20;32089:11;32081:20;;;;;;;;;;;;;;;;:108;;;;;;;:::i;:::-;;;;;;;;31993:212;31988:3;;;;;;;31930:275;;;;31873:343;32314:4;32291:12;:20;;;:27;;;;;;;;;;;;;;;;;;32334:23;32349:7;32334:23;;;;;;:::i;:::-;;;;;;;;31745:620;6586:20:::2;:18;:20::i;:::-;37323:1:::1;31612:753:::0;:::o;24588:49::-;;;;;;;;;;;;;:::o;32676:786::-;32728:16;32757:13;32846:9;32841:138;32865:7;:14;;;;32861:1;:18;32841:138;;;32906:7;32914:1;32906:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:18;;;;;;;;;;;;32901:67;;32945:7;;;;;:::i;:::-;;;;32901:67;32881:3;;;;;;;32841:138;;;;33071:31;33119:5;33105:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33071:54;;33136:13;33232:9;33227:194;33251:7;:14;;;;33247:1;:18;33227:194;;;33292:7;33300:1;33292:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:18;;;;;;;;;;;;33287:123;;33355:7;33363:1;33355:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:13;;;33331:14;33346:5;33331:21;;;;;;;;:::i;:::-;;;;;;;:37;;;;;33387:7;;;;;:::i;:::-;;;;33287:123;33267:3;;;;;;;33227:194;;;;33440:14;33433:21;;;;;32676:786;:::o;35701:317::-;2572:13;:11;:13::i;:::-;35836:123:::1;;;;;;;;35862:13;;;;;;;;;;;35836:123;;;;;;35901:9;35836:123;;;;35937:10;35836:123;;::::0;35811:7:::1;:22;35819:13;;;;;;;;;;;35811:22;;;;;;;;;;;;;;;:148;;;;;;;;;;;;;;;;;;;;;;;;;;;35970:13;;:15;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;35701:317:::0;;:::o;3619:220::-;2572:13;:11;:13::i;:::-;3724:1:::1;3704:22;;:8;:22;;::::0;3700:93:::1;;3778:1;3750:31;;;;;;;;;;;:::i;:::-;;;;;;;;3700:93;3803:28;3822:8;3803:18;:28::i;:::-;3619:220:::0;:::o;29335:2269::-;37263:10;37252:21;;:7;:5;:7::i;:::-;:21;;;:44;;;;37277:7;:19;37285:10;37277:19;;;;;;;;;;;;;;;;;;;;;;;;;37252:44;37244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29431:7:::1;37015;:14;;;;37005:7;:24;36997:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29459:7:::2;37139;37147;37139:16;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;;;;;;;;;;37138:24;37130:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;6542:21:::3;:19;:21::i;:::-;29506:26:::4;29535:7;29543;29535:16;;;;;;;;:::i;:::-;;;;;;;;;;;;29506:45;;29605:12;:20;;;29586:15;:39;;29564:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;29744:1;29709:12;:25;;:32;;;;:36;29687:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;29814:28;29862:9:::0;29857:207:::4;29881:12;:25;;:32;;;;29877:1;:36;29857:207;;;29959:12;:31;;:93;30009:12;:25;;30035:1;30009:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29959:93;;;;;;;;;;;;;;;;29935:117;;;;;:::i;:::-;;;29915:3;;;;;;;29857:207;;;;30107:1;30084:20;:24;30076:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;30142:18;30230:15;30247:16;30265:10;30213:63;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30185:106;;;;;;30163:139;;30142:160;;30313:20;30349;30336:10;:33;;;;:::i;:::-;30313:56;;30382:25;30422:14:::0;30452:9;30464:1:::4;30452:13;;30447:351;30471:12;:25;;:32;;;;30467:1;:36;30447:351;;;30525:19;30547:12;:25;;30573:1;30547:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30525:50;;30611:12;:31;;:44;30643:11;30611:44;;;;;;;;;;;;;;;;30590:65;;;;;:::i;:::-;;;30689:17;30674:12;:32;30670:117;;;30736:11;30727:20;;30766:5;;;30670:117;30510:288;30505:3;;;;;;;30447:351;;;;30836:1;30818:20;;:6;:20;;::::0;30810:54:::4;;;;;;;;;;;;:::i;:::-;;;;;;;;;30881:12;:20;;;;;;;;;;;;30877:472;;;30951:12;:24;;;;;;;;;;;;30944:41;;;31008:6;31037:12;:25;;;30944:137;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30918:220;;;;;;;;;;;;:::i;:::-;;;;;;;;;30877:472;;;31179:12;:24;;;;;;;;;;;;31171:50;;;31248:4;31272:6;31297:12;:25;;;31171:166;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;30877:472;31361:23;31387:12;:27;;;31361:53;;31476:23;31483:15;31476:6;:23::i;:::-;31535:4;31512:12;:20;;;:27;;;;;;;;;;;;;;;;;;31555:41;31568:7;31577:6;31585:10;31555:41;;;;;;;;:::i;:::-;;;;;;;;29495:2109;;;;;;;6586:20:::3;:18;:20::i;:::-;37066:1:::2;37323::::1;29335:2269:::0;:::o;24534:47::-;;;;;;;;;;;;;:::o;37645:185::-;2572:13;:11;:13::i;:::-;37726:9:::1;37721:102;37745:9;:16;37741:1;:20;37721:102;;;37807:4;37783:7;:21;37791:9;37801:1;37791:12;;;;;;;;:::i;:::-;;;;;;;;37783:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;37763:3;;;;;;;37721:102;;;;37645:185:::0;:::o;24115:26::-;;;;;;;;;;;;;:::o;6622:293::-;6024:1;6756:7;;:19;6748:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;6024:1;6889:7;:18;;;;6622:293::o;6923:213::-;5980:1;7106:7;:22;;;;6923:213::o;2851:166::-;2922:12;:10;:12::i;:::-;2911:23;;:7;:5;:7::i;:::-;:23;;;2907:103;;2985:12;:10;:12::i;:::-;2958:40;;;;;;;;;;;:::i;:::-;;;;;;;;2907:103;2851:166::o;3999:191::-;4073:16;4092:6;;;;;;;;;;;4073:25;;4118:8;4109:6;;:17;;;;;;;;;;;;;;;;;;4173:8;4142:40;;4163:8;4142:40;;;;;;;;;;;;4062:128;3999:191;:::o;25430:1026::-;25508:1;25494:11;:15;25486:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25565:17;25615:3;24387:1;25586:25;;:11;:25;;;;:::i;:::-;25585:33;;;;:::i;:::-;25565:53;;25629:22;25689:3;24429:2;25655:30;;:11;:30;;;;:::i;:::-;25654:38;;;;:::i;:::-;25629:63;;25703:24;25767:3;24474:2;25731:32;;:11;:32;;;;:::i;:::-;25730:40;;;;:::i;:::-;25703:67;;25854:11;25834:16;25817:14;25805:9;:26;;;;:::i;:::-;:45;;;;:::i;:::-;:60;25783:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;26001:1;25989:9;:13;25985:85;;;26019:19;;;;;;;;;;;:28;;:39;26048:9;26019:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25985:85;26103:1;26086:14;:18;26082:100;;;26121:24;;;;;;;;;;;:33;;:49;26155:14;26121:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26082:100;26217:1;26198:16;:20;26194:106;;;26235:26;;;;;;;;;;;:35;;:53;26271:16;26235:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26194:106;26317:131;26342:11;26368:9;26392:14;26421:16;26317:131;;;;;;;;;:::i;:::-;;;;;;;;25475:981;;;25430:1026;:::o;695:98::-;748:7;775:10;768:17;;695:98;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::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:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:136::-;1114:6;1148:5;1142:12;1132:22;;1025:136;;;:::o;1167:206::-;1288:11;1322:6;1317:3;1310:19;1362:4;1357:3;1353:14;1338:29;;1167:206;;;;:::o;1379:154::-;1468:4;1491:3;1483:11;;1521:4;1516:3;1512:14;1504:22;;1379:154;;;:::o;1539:108::-;1616:24;1634:5;1616:24;:::i;:::-;1611:3;1604:37;1539:108;;:::o;1709:675::-;1840:4;1835:3;1831:14;1926:4;1919:5;1915:16;1909:23;1945:63;2002:4;1997:3;1993:14;1979:12;1945:63;:::i;:::-;1855:163;2105:4;2098:5;2094:16;2088:23;2124:63;2181:4;2176:3;2172:14;2158:12;2124:63;:::i;:::-;2028:169;2285:4;2278:5;2274:16;2268:23;2304:63;2361:4;2356:3;2352:14;2338:12;2304:63;:::i;:::-;2207:170;1809:575;1709:675;;:::o;2390:267::-;2503:10;2524:90;2610:3;2602:6;2524:90;:::i;:::-;2646:4;2641:3;2637:14;2623:28;;2390:267;;;;:::o;2663:135::-;2755:4;2787;2782:3;2778:14;2770:22;;2663:135;;;:::o;2864:908::-;3027:3;3056:76;3126:5;3056:76;:::i;:::-;3148:108;3249:6;3244:3;3148:108;:::i;:::-;3141:115;;3280:78;3352:5;3280:78;:::i;:::-;3381:7;3412:1;3397:350;3422:6;3419:1;3416:13;3397:350;;;3498:6;3492:13;3525:107;3628:3;3613:13;3525:107;:::i;:::-;3518:114;;3655:82;3730:6;3655:82;:::i;:::-;3645:92;;3457:290;3444:1;3441;3437:9;3432:14;;3397:350;;;3401:14;3763:3;3756:10;;3032:740;;;2864:908;;;;:::o;3778:461::-;3965:4;4003:2;3992:9;3988:18;3980:26;;4052:9;4046:4;4042:20;4038:1;4027:9;4023:17;4016:47;4080:152;4227:4;4218:6;4080:152;:::i;:::-;4072:160;;3778:461;;;;:::o;4245:114::-;4312:6;4346:5;4340:12;4330:22;;4245:114;;;:::o;4365:184::-;4464:11;4498:6;4493:3;4486:19;4538:4;4533:3;4529:14;4514:29;;4365:184;;;;:::o;4555:132::-;4622:4;4645:3;4637:11;;4675:4;4670:3;4666:14;4658:22;;4555:132;;;:::o;4693:126::-;4730:7;4770:42;4763:5;4759:54;4748:65;;4693:126;;;:::o;4825:96::-;4862:7;4891:24;4909:5;4891:24;:::i;:::-;4880:35;;4825:96;;;:::o;4927:108::-;5004:24;5022:5;5004:24;:::i;:::-;4999:3;4992:37;4927:108;;:::o;5041:179::-;5110:10;5131:46;5173:3;5165:6;5131:46;:::i;:::-;5209:4;5204:3;5200:14;5186:28;;5041:179;;;;:::o;5226:113::-;5296:4;5328;5323:3;5319:14;5311:22;;5226:113;;;:::o;5375:732::-;5494:3;5523:54;5571:5;5523:54;:::i;:::-;5593:86;5672:6;5667:3;5593:86;:::i;:::-;5586:93;;5703:56;5753:5;5703:56;:::i;:::-;5782:7;5813:1;5798:284;5823:6;5820:1;5817:13;5798:284;;;5899:6;5893:13;5926:63;5985:3;5970:13;5926:63;:::i;:::-;5919:70;;6012:60;6065:6;6012:60;:::i;:::-;6002:70;;5858:224;5845:1;5842;5838:9;5833:14;;5798:284;;;5802:14;6098:3;6091:10;;5499:608;;;5375:732;;;;:::o;6113:114::-;6180:6;6214:5;6208:12;6198:22;;6113:114;;;:::o;6233:184::-;6332:11;6366:6;6361:3;6354:19;6406:4;6401:3;6397:14;6382:29;;6233:184;;;;:::o;6423:132::-;6490:4;6513:3;6505:11;;6543:4;6538:3;6534:14;6526:22;;6423:132;;;:::o;6561:179::-;6630:10;6651:46;6693:3;6685:6;6651:46;:::i;:::-;6729:4;6724:3;6720:14;6706:28;;6561:179;;;;:::o;6746:113::-;6816:4;6848;6843:3;6839:14;6831:22;;6746:113;;;:::o;6895:732::-;7014:3;7043:54;7091:5;7043:54;:::i;:::-;7113:86;7192:6;7187:3;7113:86;:::i;:::-;7106:93;;7223:56;7273:5;7223:56;:::i;:::-;7302:7;7333:1;7318:284;7343:6;7340:1;7337:13;7318:284;;;7419:6;7413:13;7446:63;7505:3;7490:13;7446:63;:::i;:::-;7439:70;;7532:60;7585:6;7532:60;:::i;:::-;7522:70;;7378:224;7365:1;7362;7358:9;7353:14;;7318:284;;;7322:14;7618:3;7611:10;;7019:608;;;6895:732;;;;:::o;7633:634::-;7854:4;7892:2;7881:9;7877:18;7869:26;;7941:9;7935:4;7931:20;7927:1;7916:9;7912:17;7905:47;7969:108;8072:4;8063:6;7969:108;:::i;:::-;7961:116;;8124:9;8118:4;8114:20;8109:2;8098:9;8094:18;8087:48;8152:108;8255:4;8246:6;8152:108;:::i;:::-;8144:116;;7633:634;;;;;:::o;8273:373::-;8416:4;8454:2;8443:9;8439:18;8431:26;;8503:9;8497:4;8493:20;8489:1;8478:9;8474:17;8467:47;8531:108;8634:4;8625:6;8531:108;:::i;:::-;8523:116;;8273:373;;;;:::o;8652:86::-;8687:7;8727:4;8720:5;8716:16;8705:27;;8652:86;;;:::o;8744:118::-;8815:22;8831:5;8815:22;:::i;:::-;8808:5;8805:33;8795:61;;8852:1;8849;8842:12;8795:61;8744:118;:::o;8868:135::-;8912:5;8950:6;8937:20;8928:29;;8966:31;8991:5;8966:31;:::i;:::-;8868:135;;;;:::o;9009:470::-;9075:6;9083;9132:2;9120:9;9111:7;9107:23;9103:32;9100:119;;;9138:79;;:::i;:::-;9100:119;9258:1;9283:53;9328:7;9319:6;9308:9;9304:22;9283:53;:::i;:::-;9273:63;;9229:117;9385:2;9411:51;9454:7;9445:6;9434:9;9430:22;9411:51;:::i;:::-;9401:61;;9356:116;9009:470;;;;;:::o;9485:325::-;9542:6;9591:2;9579:9;9570:7;9566:23;9562:32;9559:119;;;9597:79;;:::i;:::-;9559:119;9717:1;9742:51;9785:7;9776:6;9765:9;9761:22;9742:51;:::i;:::-;9732:61;;9688:115;9485:325;;;;:::o;9816:118::-;9903:24;9921:5;9903:24;:::i;:::-;9898:3;9891:37;9816:118;;:::o;9940:332::-;10061:4;10099:2;10088:9;10084:18;10076:26;;10112:71;10180:1;10169:9;10165:17;10156:6;10112:71;:::i;:::-;10193:72;10261:2;10250:9;10246:18;10237:6;10193:72;:::i;:::-;9940:332;;;;;:::o;10278:90::-;10312:7;10355:5;10348:13;10341:21;10330:32;;10278:90;;;:::o;10374:109::-;10455:21;10470:5;10455:21;:::i;:::-;10450:3;10443:34;10374:109;;:::o;10489:118::-;10576:24;10594:5;10576:24;:::i;:::-;10571:3;10564:37;10489:118;;:::o;10613:1183::-;10940:4;10978:3;10967:9;10963:19;10955:27;;10992:71;11060:1;11049:9;11045:17;11036:6;10992:71;:::i;:::-;11073:72;11141:2;11130:9;11126:18;11117:6;11073:72;:::i;:::-;11155:66;11217:2;11206:9;11202:18;11193:6;11155:66;:::i;:::-;11231;11293:2;11282:9;11278:18;11269:6;11231:66;:::i;:::-;11307:73;11375:3;11364:9;11360:19;11351:6;11307:73;:::i;:::-;11390;11458:3;11447:9;11443:19;11434:6;11390:73;:::i;:::-;11473;11541:3;11530:9;11526:19;11517:6;11473:73;:::i;:::-;11556:67;11618:3;11607:9;11603:19;11594:6;11556:67;:::i;:::-;11633:73;11701:3;11690:9;11686:19;11677:6;11633:73;:::i;:::-;11716;11784:3;11773:9;11769:19;11760:6;11716:73;:::i;:::-;10613:1183;;;;;;;;;;;;;:::o;11802:117::-;11911:1;11908;11901:12;11925:102;11966:6;12017:2;12013:7;12008:2;12001:5;11997:14;11993:28;11983:38;;11925:102;;;:::o;12033:180::-;12081:77;12078:1;12071:88;12178:4;12175:1;12168:15;12202:4;12199:1;12192:15;12219:281;12302:27;12324:4;12302:27;:::i;:::-;12294:6;12290:40;12432:6;12420:10;12417:22;12396:18;12384:10;12381:34;12378:62;12375:88;;;12443:18;;:::i;:::-;12375:88;12483:10;12479:2;12472:22;12262:238;12219:281;;:::o;12506:129::-;12540:6;12567:20;;:::i;:::-;12557:30;;12596:33;12624:4;12616:6;12596:33;:::i;:::-;12506:129;;;:::o;12641:311::-;12718:4;12808:18;12800:6;12797:30;12794:56;;;12830:18;;:::i;:::-;12794:56;12880:4;12872:6;12868:17;12860:25;;12940:4;12934;12930:15;12922:23;;12641:311;;;:::o;12958:117::-;13067:1;13064;13057:12;13081:122;13154:24;13172:5;13154:24;:::i;:::-;13147:5;13144:35;13134:63;;13193:1;13190;13183:12;13134:63;13081:122;:::o;13209:139::-;13255:5;13293:6;13280:20;13271:29;;13309:33;13336:5;13309:33;:::i;:::-;13209:139;;;;:::o;13371:710::-;13467:5;13492:81;13508:64;13565:6;13508:64;:::i;:::-;13492:81;:::i;:::-;13483:90;;13593:5;13622:6;13615:5;13608:21;13656:4;13649:5;13645:16;13638:23;;13709:4;13701:6;13697:17;13689:6;13685:30;13738:3;13730:6;13727:15;13724:122;;;13757:79;;:::i;:::-;13724:122;13872:6;13855:220;13889:6;13884:3;13881:15;13855:220;;;13964:3;13993:37;14026:3;14014:10;13993:37;:::i;:::-;13988:3;13981:50;14060:4;14055:3;14051:14;14044:21;;13931:144;13915:4;13910:3;13906:14;13899:21;;13855:220;;;13859:21;13473:608;;13371:710;;;;;:::o;14104:370::-;14175:5;14224:3;14217:4;14209:6;14205:17;14201:27;14191:122;;14232:79;;:::i;:::-;14191:122;14349:6;14336:20;14374:94;14464:3;14456:6;14449:4;14441:6;14437:17;14374:94;:::i;:::-;14365:103;;14181:293;14104:370;;;;:::o;14480:539::-;14564:6;14613:2;14601:9;14592:7;14588:23;14584:32;14581:119;;;14619:79;;:::i;:::-;14581:119;14767:1;14756:9;14752:17;14739:31;14797:18;14789:6;14786:30;14783:117;;;14819:79;;:::i;:::-;14783:117;14924:78;14994:7;14985:6;14974:9;14970:22;14924:78;:::i;:::-;14914:88;;14710:302;14480:539;;;;:::o;15025:329::-;15084:6;15133:2;15121:9;15112:7;15108:23;15104:32;15101:119;;;15139:79;;:::i;:::-;15101:119;15259:1;15284:53;15329:7;15320:6;15309:9;15305:22;15284:53;:::i;:::-;15274:63;;15230:117;15025:329;;;;:::o;15360:210::-;15447:4;15485:2;15474:9;15470:18;15462:26;;15498:65;15560:1;15549:9;15545:17;15536:6;15498:65;:::i;:::-;15360:210;;;;:::o;15576:117::-;15685:1;15682;15675:12;15716:568;15789:8;15799:6;15849:3;15842:4;15834:6;15830:17;15826:27;15816:122;;15857:79;;:::i;:::-;15816:122;15970:6;15957:20;15947:30;;16000:18;15992:6;15989:30;15986:117;;;16022:79;;:::i;:::-;15986:117;16136:4;16128:6;16124:17;16112:29;;16190:3;16182:4;16174:6;16170:17;16160:8;16156:32;16153:41;16150:128;;;16197:79;;:::i;:::-;16150:128;15716:568;;;;;:::o;16290:934::-;16412:6;16420;16428;16436;16485:2;16473:9;16464:7;16460:23;16456:32;16453:119;;;16491:79;;:::i;:::-;16453:119;16639:1;16628:9;16624:17;16611:31;16669:18;16661:6;16658:30;16655:117;;;16691:79;;:::i;:::-;16655:117;16804:80;16876:7;16867:6;16856:9;16852:22;16804:80;:::i;:::-;16786:98;;;;16582:312;16961:2;16950:9;16946:18;16933:32;16992:18;16984:6;16981:30;16978:117;;;17014:79;;:::i;:::-;16978:117;17127:80;17199:7;17190:6;17179:9;17175:22;17127:80;:::i;:::-;17109:98;;;;16904:313;16290:934;;;;;;;:::o;17230:104::-;17275:7;17304:24;17322:5;17304:24;:::i;:::-;17293:35;;17230:104;;;:::o;17340:142::-;17443:32;17469:5;17443:32;:::i;:::-;17438:3;17431:45;17340:142;;:::o;17488:254::-;17597:4;17635:2;17624:9;17620:18;17612:26;;17648:87;17732:1;17721:9;17717:17;17708:6;17648:87;:::i;:::-;17488:254;;;;:::o;17748:222::-;17841:4;17879:2;17868:9;17864:18;17856:26;;17892:71;17960:1;17949:9;17945:17;17936:6;17892:71;:::i;:::-;17748:222;;;;:::o;17976:138::-;18057:32;18083:5;18057:32;:::i;:::-;18050:5;18047:43;18037:71;;18104:1;18101;18094:12;18037:71;17976:138;:::o;18120:155::-;18174:5;18212:6;18199:20;18190:29;;18228:41;18263:5;18228:41;:::i;:::-;18120:155;;;;:::o;18281:667::-;18382:6;18390;18398;18447:2;18435:9;18426:7;18422:23;18418:32;18415:119;;;18453:79;;:::i;:::-;18415:119;18573:1;18598:61;18651:7;18642:6;18631:9;18627:22;18598:61;:::i;:::-;18588:71;;18544:125;18708:2;18734:61;18787:7;18778:6;18767:9;18763:22;18734:61;:::i;:::-;18724:71;;18679:126;18844:2;18870:61;18923:7;18914:6;18903:9;18899:22;18870:61;:::i;:::-;18860:71;;18815:126;18281:667;;;;;:::o;18954:116::-;19024:21;19039:5;19024:21;:::i;:::-;19017:5;19014:32;19004:60;;19060:1;19057;19050:12;19004:60;18954:116;:::o;19076:133::-;19119:5;19157:6;19144:20;19135:29;;19173:30;19197:5;19173:30;:::i;:::-;19076:133;;;;:::o;19215:905::-;19307:6;19315;19323;19331;19339;19388:3;19376:9;19367:7;19363:23;19359:33;19356:120;;;19395:79;;:::i;:::-;19356:120;19515:1;19540:53;19585:7;19576:6;19565:9;19561:22;19540:53;:::i;:::-;19530:63;;19486:117;19642:2;19668:53;19713:7;19704:6;19693:9;19689:22;19668:53;:::i;:::-;19658:63;;19613:118;19770:2;19796:50;19838:7;19829:6;19818:9;19814:22;19796:50;:::i;:::-;19786:60;;19741:115;19895:2;19921:53;19966:7;19957:6;19946:9;19942:22;19921:53;:::i;:::-;19911:63;;19866:118;20023:3;20050:53;20095:7;20086:6;20075:9;20071:22;20050:53;:::i;:::-;20040:63;;19994:119;19215:905;;;;;;;;:::o;20126:222::-;20219:4;20257:2;20246:9;20242:18;20234:26;;20270:71;20338:1;20327:9;20323:17;20314:6;20270:71;:::i;:::-;20126:222;;;;:::o;20354:442::-;20503:4;20541:2;20530:9;20526:18;20518:26;;20554:71;20622:1;20611:9;20607:17;20598:6;20554:71;:::i;:::-;20635:72;20703:2;20692:9;20688:18;20679:6;20635:72;:::i;:::-;20717;20785:2;20774:9;20770:18;20761:6;20717:72;:::i;:::-;20354:442;;;;;;:::o;20802:474::-;20870:6;20878;20927:2;20915:9;20906:7;20902:23;20898:32;20895:119;;;20933:79;;:::i;:::-;20895:119;21053:1;21078:53;21123:7;21114:6;21103:9;21099:22;21078:53;:::i;:::-;21068:63;;21024:117;21180:2;21206:53;21251:7;21242:6;21231:9;21227:22;21206:53;:::i;:::-;21196:63;;21151:118;20802:474;;;;;:::o;21282:112::-;21365:22;21381:5;21365:22;:::i;:::-;21360:3;21353:35;21282:112;;:::o;21400:214::-;21489:4;21527:2;21516:9;21512:18;21504:26;;21540:67;21604:1;21593:9;21589:17;21580:6;21540:67;:::i;:::-;21400:214;;;;:::o;21620:169::-;21704:11;21738:6;21733:3;21726:19;21778:4;21773:3;21769:14;21754:29;;21620:169;;;;:::o;21795:161::-;21935:13;21931:1;21923:6;21919:14;21912:37;21795:161;:::o;21962:366::-;22104:3;22125:67;22189:2;22184:3;22125:67;:::i;:::-;22118:74;;22201:93;22290:3;22201:93;:::i;:::-;22319:2;22314:3;22310:12;22303:19;;21962:366;;;:::o;22334:419::-;22500:4;22538:2;22527:9;22523:18;22515:26;;22587:9;22581:4;22577:20;22573:1;22562:9;22558:17;22551:47;22615:131;22741:4;22615:131;:::i;:::-;22607:139;;22334:419;;;:::o;22759:180::-;22807:77;22804:1;22797:88;22904:4;22901:1;22894:15;22928:4;22925:1;22918:15;22945:169;23085:21;23081:1;23073:6;23069:14;23062:45;22945:169;:::o;23120:366::-;23262:3;23283:67;23347:2;23342:3;23283:67;:::i;:::-;23276:74;;23359:93;23448:3;23359:93;:::i;:::-;23477:2;23472:3;23468:12;23461:19;;23120:366;;;:::o;23492:419::-;23658:4;23696:2;23685:9;23681:18;23673:26;;23745:9;23739:4;23735:20;23731:1;23720:9;23716:17;23709:47;23773:131;23899:4;23773:131;:::i;:::-;23765:139;;23492:419;;;:::o;23917:147::-;24018:11;24055:3;24040:18;;23917:147;;;;:::o;24070:114::-;;:::o;24190:398::-;24349:3;24370:83;24451:1;24446:3;24370:83;:::i;:::-;24363:90;;24462:93;24551:3;24462:93;:::i;:::-;24580:1;24575:3;24571:11;24564:18;;24190:398;;;:::o;24594:379::-;24778:3;24800:147;24943:3;24800:147;:::i;:::-;24793:154;;24964:3;24957:10;;24594:379;;;:::o;24979:164::-;25119:16;25115:1;25107:6;25103:14;25096:40;24979:164;:::o;25149:366::-;25291:3;25312:67;25376:2;25371:3;25312:67;:::i;:::-;25305:74;;25388:93;25477:3;25388:93;:::i;:::-;25506:2;25501:3;25497:12;25490:19;;25149:366;;;:::o;25521:419::-;25687:4;25725:2;25714:9;25710:18;25702:26;;25774:9;25768:4;25764:20;25760:1;25749:9;25745:17;25738:47;25802:131;25928:4;25802:131;:::i;:::-;25794:139;;25521:419;;;:::o;25946:171::-;26086:23;26082:1;26074:6;26070:14;26063:47;25946:171;:::o;26123:366::-;26265:3;26286:67;26350:2;26345:3;26286:67;:::i;:::-;26279:74;;26362:93;26451:3;26362:93;:::i;:::-;26480:2;26475:3;26471:12;26464:19;;26123:366;;;:::o;26495:419::-;26661:4;26699:2;26688:9;26684:18;26676:26;;26748:9;26742:4;26738:20;26734:1;26723:9;26719:17;26712:47;26776:131;26902:4;26776:131;:::i;:::-;26768:139;;26495:419;;;:::o;26920:180::-;26968:77;26965:1;26958:88;27065:4;27062:1;27055:15;27089:4;27086:1;27079:15;27106:233;27145:3;27168:24;27186:5;27168:24;:::i;:::-;27159:33;;27214:66;27207:5;27204:77;27201:103;;27284:18;;:::i;:::-;27201:103;27331:1;27324:5;27320:13;27313:20;;27106:233;;;:::o;27345:171::-;27485:23;27481:1;27473:6;27469:14;27462:47;27345:171;:::o;27522:366::-;27664:3;27685:67;27749:2;27744:3;27685:67;:::i;:::-;27678:74;;27761:93;27850:3;27761:93;:::i;:::-;27879:2;27874:3;27870:12;27863:19;;27522:366;;;:::o;27894:419::-;28060:4;28098:2;28087:9;28083:18;28075:26;;28147:9;28141:4;28137:20;28133:1;28122:9;28118:17;28111:47;28175:131;28301:4;28175:131;:::i;:::-;28167:139;;27894:419;;;:::o;28319:166::-;28459:18;28455:1;28447:6;28443:14;28436:42;28319:166;:::o;28491:366::-;28633:3;28654:67;28718:2;28713:3;28654:67;:::i;:::-;28647:74;;28730:93;28819:3;28730:93;:::i;:::-;28848:2;28843:3;28839:12;28832:19;;28491:366;;;:::o;28863:419::-;29029:4;29067:2;29056:9;29052:18;29044:26;;29116:9;29110:4;29106:20;29102:1;29091:9;29087:17;29080:47;29144:131;29270:4;29144:131;:::i;:::-;29136:139;;28863:419;;;:::o;29288:166::-;29428:18;29424:1;29416:6;29412:14;29405:42;29288:166;:::o;29460:366::-;29602:3;29623:67;29687:2;29682:3;29623:67;:::i;:::-;29616:74;;29699:93;29788:3;29699:93;:::i;:::-;29817:2;29812:3;29808:12;29801:19;;29460:366;;;:::o;29832:419::-;29998:4;30036:2;30025:9;30021:18;30013:26;;30085:9;30079:4;30075:20;30071:1;30060:9;30056:17;30049:47;30113:131;30239:4;30113:131;:::i;:::-;30105:139;;29832:419;;;:::o;30257:191::-;30297:3;30316:20;30334:1;30316:20;:::i;:::-;30311:25;;30350:20;30368:1;30350:20;:::i;:::-;30345:25;;30393:1;30390;30386:9;30379:16;;30414:3;30411:1;30408:10;30405:36;;;30421:18;;:::i;:::-;30405:36;30257:191;;;;:::o;30454:223::-;30594:34;30590:1;30582:6;30578:14;30571:58;30663:6;30658:2;30650:6;30646:15;30639:31;30454:223;:::o;30683:366::-;30825:3;30846:67;30910:2;30905:3;30846:67;:::i;:::-;30839:74;;30922:93;31011:3;30922:93;:::i;:::-;31040:2;31035:3;31031:12;31024:19;;30683:366;;;:::o;31055:419::-;31221:4;31259:2;31248:9;31244:18;31236:26;;31308:9;31302:4;31298:20;31294:1;31283:9;31279:17;31272:47;31336:131;31462:4;31336:131;:::i;:::-;31328:139;;31055:419;;;:::o;31480:168::-;31620:20;31616:1;31608:6;31604:14;31597:44;31480:168;:::o;31654:366::-;31796:3;31817:67;31881:2;31876:3;31817:67;:::i;:::-;31810:74;;31893:93;31982:3;31893:93;:::i;:::-;32011:2;32006:3;32002:12;31995:19;;31654:366;;;:::o;32026:419::-;32192:4;32230:2;32219:9;32215:18;32207:26;;32279:9;32273:4;32269:20;32265:1;32254:9;32250:17;32243:47;32307:131;32433:4;32307:131;:::i;:::-;32299:139;;32026:419;;;:::o;32451:442::-;32600:4;32638:2;32627:9;32623:18;32615:26;;32651:71;32719:1;32708:9;32704:17;32695:6;32651:71;:::i;:::-;32732:72;32800:2;32789:9;32785:18;32776:6;32732:72;:::i;:::-;32814;32882:2;32871:9;32867:18;32858:6;32814:72;:::i;:::-;32451:442;;;;;;:::o;32899:170::-;33039:22;33035:1;33027:6;33023:14;33016:46;32899:170;:::o;33075:366::-;33217:3;33238:67;33302:2;33297:3;33238:67;:::i;:::-;33231:74;;33314:93;33403:3;33314:93;:::i;:::-;33432:2;33427:3;33423:12;33416:19;;33075:366;;;:::o;33447:419::-;33613:4;33651:2;33640:9;33636:18;33628:26;;33700:9;33694:4;33690:20;33686:1;33675:9;33671:17;33664:47;33728:131;33854:4;33728:131;:::i;:::-;33720:139;;33447:419;;;:::o;33872:177::-;34012:29;34008:1;34000:6;33996:14;33989:53;33872:177;:::o;34055:366::-;34197:3;34218:67;34282:2;34277:3;34218:67;:::i;:::-;34211:74;;34294:93;34383:3;34294:93;:::i;:::-;34412:2;34407:3;34403:12;34396:19;;34055:366;;;:::o;34427:419::-;34593:4;34631:2;34620:9;34616:18;34608:26;;34680:9;34674:4;34670:20;34666:1;34655:9;34651:17;34644:47;34708:131;34834:4;34708:131;:::i;:::-;34700:139;;34427:419;;;:::o;34852:167::-;34889:3;34912:22;34928:5;34912:22;:::i;:::-;34903:31;;34956:4;34949:5;34946:15;34943:41;;34964:18;;:::i;:::-;34943:41;35011:1;35004:5;35000:13;34993:20;;34852:167;;;:::o;35025:177::-;35165:29;35161:1;35153:6;35149:14;35142:53;35025:177;:::o;35208:366::-;35350:3;35371:67;35435:2;35430:3;35371:67;:::i;:::-;35364:74;;35447:93;35536:3;35447:93;:::i;:::-;35565:2;35560:3;35556:12;35549:19;;35208:366;;;:::o;35580:419::-;35746:4;35784:2;35773:9;35769:18;35761:26;;35833:9;35827:4;35823:20;35819:1;35808:9;35804:17;35797:47;35861:131;35987:4;35861:131;:::i;:::-;35853:139;;35580:419;;;:::o;36005:182::-;36145:34;36141:1;36133:6;36129:14;36122:58;36005:182;:::o;36193:366::-;36335:3;36356:67;36420:2;36415:3;36356:67;:::i;:::-;36349:74;;36432:93;36521:3;36432:93;:::i;:::-;36550:2;36545:3;36541:12;36534:19;;36193:366;;;:::o;36565:419::-;36731:4;36769:2;36758:9;36754:18;36746:26;;36818:9;36812:4;36808:20;36804:1;36793:9;36789:17;36782:47;36846:131;36972:4;36846:131;:::i;:::-;36838:139;;36565:419;;;:::o;36990:221::-;37130:34;37126:1;37118:6;37114:14;37107:58;37199:4;37194:2;37186:6;37182:15;37175:29;36990:221;:::o;37217:366::-;37359:3;37380:67;37444:2;37439:3;37380:67;:::i;:::-;37373:74;;37456:93;37545:3;37456:93;:::i;:::-;37574:2;37569:3;37565:12;37558:19;;37217:366;;;:::o;37589:419::-;37755:4;37793:2;37782:9;37778:18;37770:26;;37842:9;37836:4;37832:20;37828:1;37817:9;37813:17;37806:47;37870:131;37996:4;37870:131;:::i;:::-;37862:139;;37589:419;;;:::o;38014:180::-;38154:32;38150:1;38142:6;38138:14;38131:56;38014:180;:::o;38200:366::-;38342:3;38363:67;38427:2;38422:3;38363:67;:::i;:::-;38356:74;;38439:93;38528:3;38439:93;:::i;:::-;38557:2;38552:3;38548:12;38541:19;;38200:366;;;:::o;38572:419::-;38738:4;38776:2;38765:9;38761:18;38753:26;;38825:9;38819:4;38815:20;38811:1;38800:9;38796:17;38789:47;38853:131;38979:4;38853:131;:::i;:::-;38845:139;;38572:419;;;:::o;38997:194::-;39037:4;39057:20;39075:1;39057:20;:::i;:::-;39052:25;;39091:20;39109:1;39091:20;:::i;:::-;39086:25;;39135:1;39132;39128:9;39120:17;;39159:1;39153:4;39150:11;39147:37;;;39164:18;;:::i;:::-;39147:37;38997:194;;;;:::o;39197:652::-;39396:4;39434:3;39423:9;39419:19;39411:27;;39448:71;39516:1;39505:9;39501:17;39492:6;39448:71;:::i;:::-;39529:72;39597:2;39586:9;39582:18;39573:6;39529:72;:::i;:::-;39611;39679:2;39668:9;39664:18;39655:6;39611:72;:::i;:::-;39693:66;39755:2;39744:9;39740:18;39731:6;39693:66;:::i;:::-;39769:73;39837:3;39826:9;39822:19;39813:6;39769:73;:::i;:::-;39197:652;;;;;;;;:::o;39855:173::-;39995:25;39991:1;39983:6;39979:14;39972:49;39855:173;:::o;40034:366::-;40176:3;40197:67;40261:2;40256:3;40197:67;:::i;:::-;40190:74;;40273:93;40362:3;40273:93;:::i;:::-;40391:2;40386:3;40382:12;40375:19;;40034:366;;;:::o;40406:419::-;40572:4;40610:2;40599:9;40595:18;40587:26;;40659:9;40653:4;40649:20;40645:1;40634:9;40630:17;40623:47;40687:131;40813:4;40687:131;:::i;:::-;40679:139;;40406:419;;;:::o;40831:178::-;40971:30;40967:1;40959:6;40955:14;40948:54;40831:178;:::o;41015:366::-;41157:3;41178:67;41242:2;41237:3;41178:67;:::i;:::-;41171:74;;41254:93;41343:3;41254:93;:::i;:::-;41372:2;41367:3;41363:12;41356:19;;41015:366;;;:::o;41387:419::-;41553:4;41591:2;41580:9;41576:18;41568:26;;41640:9;41634:4;41630:20;41626:1;41615:9;41611:17;41604:47;41668:131;41794:4;41668:131;:::i;:::-;41660:139;;41387:419;;;:::o;41812:166::-;41952:18;41948:1;41940:6;41936:14;41929:42;41812:166;:::o;41984:366::-;42126:3;42147:67;42211:2;42206:3;42147:67;:::i;:::-;42140:74;;42223:93;42312:3;42223:93;:::i;:::-;42341:2;42336:3;42332:12;42325:19;;41984:366;;;:::o;42356:419::-;42522:4;42560:2;42549:9;42545:18;42537:26;;42609:9;42603:4;42599:20;42595:1;42584:9;42580:17;42573:47;42637:131;42763:4;42637:131;:::i;:::-;42629:139;;42356:419;;;:::o;42781:79::-;42820:7;42849:5;42838:16;;42781:79;;;:::o;42866:157::-;42971:45;42991:24;43009:5;42991:24;:::i;:::-;42971:45;:::i;:::-;42966:3;42959:58;42866:157;;:::o;43029:94::-;43062:8;43110:5;43106:2;43102:14;43081:35;;43029:94;;;:::o;43129:::-;43168:7;43197:20;43211:5;43197:20;:::i;:::-;43186:31;;43129:94;;;:::o;43229:100::-;43268:7;43297:26;43317:5;43297:26;:::i;:::-;43286:37;;43229:100;;;:::o;43335:157::-;43440:45;43460:24;43478:5;43460:24;:::i;:::-;43440:45;:::i;:::-;43435:3;43428:58;43335:157;;:::o;43498:538::-;43666:3;43681:75;43752:3;43743:6;43681:75;:::i;:::-;43781:2;43776:3;43772:12;43765:19;;43794:75;43865:3;43856:6;43794:75;:::i;:::-;43894:2;43889:3;43885:12;43878:19;;43907:75;43978:3;43969:6;43907:75;:::i;:::-;44007:2;44002:3;43998:12;43991:19;;44027:3;44020:10;;43498:538;;;;;;:::o;44042:180::-;44090:77;44087:1;44080:88;44187:4;44184:1;44177:15;44211:4;44208:1;44201:15;44228:176;44260:1;44277:20;44295:1;44277:20;:::i;:::-;44272:25;;44311:20;44329:1;44311:20;:::i;:::-;44306:25;;44350:1;44340:35;;44355:18;;:::i;:::-;44340:35;44396:1;44393;44389:9;44384:14;;44228:176;;;;:::o;44410:171::-;44550:23;44546:1;44538:6;44534:14;44527:47;44410:171;:::o;44587:366::-;44729:3;44750:67;44814:2;44809:3;44750:67;:::i;:::-;44743:74;;44826:93;44915:3;44826:93;:::i;:::-;44944:2;44939:3;44935:12;44928:19;;44587:366;;;:::o;44959:419::-;45125:4;45163:2;45152:9;45148:18;45140:26;;45212:9;45206:4;45202:20;45198:1;45187:9;45183:17;45176:47;45240:131;45366:4;45240:131;:::i;:::-;45232:139;;44959:419;;;:::o;45384:332::-;45505:4;45543:2;45532:9;45528:18;45520:26;;45556:71;45624:1;45613:9;45609:17;45600:6;45556:71;:::i;:::-;45637:72;45705:2;45694:9;45690:18;45681:6;45637:72;:::i;:::-;45384:332;;;;;:::o;45722:137::-;45776:5;45807:6;45801:13;45792:22;;45823:30;45847:5;45823:30;:::i;:::-;45722:137;;;;:::o;45865:345::-;45932:6;45981:2;45969:9;45960:7;45956:23;45952:32;45949:119;;;45987:79;;:::i;:::-;45949:119;46107:1;46132:61;46185:7;46176:6;46165:9;46161:22;46132:61;:::i;:::-;46122:71;;46078:125;45865:345;;;;:::o;46216:171::-;46356:23;46352:1;46344:6;46340:14;46333:47;46216:171;:::o;46393:366::-;46535:3;46556:67;46620:2;46615:3;46556:67;:::i;:::-;46549:74;;46632:93;46721:3;46632:93;:::i;:::-;46750:2;46745:3;46741:12;46734:19;;46393:366;;;:::o;46765:419::-;46931:4;46969:2;46958:9;46954:18;46946:26;;47018:9;47012:4;47008:20;47004:1;46993:9;46989:17;46982:47;47046:131;47172:4;47046:131;:::i;:::-;47038:139;;46765:419;;;:::o;47190:442::-;47339:4;47377:2;47366:9;47362:18;47354:26;;47390:71;47458:1;47447:9;47443:17;47434:6;47390:71;:::i;:::-;47471:72;47539:2;47528:9;47524:18;47515:6;47471:72;:::i;:::-;47553;47621:2;47610:9;47606:18;47597:6;47553:72;:::i;:::-;47190:442;;;;;;:::o;47638:181::-;47778:33;47774:1;47766:6;47762:14;47755:57;47638:181;:::o;47825:366::-;47967:3;47988:67;48052:2;48047:3;47988:67;:::i;:::-;47981:74;;48064:93;48153:3;48064:93;:::i;:::-;48182:2;48177:3;48173:12;48166:19;;47825:366;;;:::o;48197:419::-;48363:4;48401:2;48390:9;48386:18;48378:26;;48450:9;48444:4;48440:20;48436:1;48425:9;48421:17;48414:47;48478:131;48604:4;48478:131;:::i;:::-;48470:139;;48197:419;;;:::o;48622:225::-;48762:34;48758:1;48750:6;48746:14;48739:58;48831:8;48826:2;48818:6;48814:15;48807:33;48622:225;:::o;48853:366::-;48995:3;49016:67;49080:2;49075:3;49016:67;:::i;:::-;49009:74;;49092:93;49181:3;49092:93;:::i;:::-;49210:2;49205:3;49201:12;49194:19;;48853:366;;;:::o;49225:419::-;49391:4;49429:2;49418:9;49414:18;49406:26;;49478:9;49472:4;49468:20;49464:1;49453:9;49449:17;49442:47;49506:131;49632:4;49506:131;:::i;:::-;49498:139;;49225:419;;;:::o;49650:410::-;49690:7;49713:20;49731:1;49713:20;:::i;:::-;49708:25;;49747:20;49765:1;49747:20;:::i;:::-;49742:25;;49802:1;49799;49795:9;49824:30;49842:11;49824:30;:::i;:::-;49813:41;;50003:1;49994:7;49990:15;49987:1;49984:22;49964:1;49957:9;49937:83;49914:139;;50033:18;;:::i;:::-;49914:139;49698:362;49650:410;;;;:::o;50066:185::-;50106:1;50123:20;50141:1;50123:20;:::i;:::-;50118:25;;50157:20;50175:1;50157:20;:::i;:::-;50152:25;;50196:1;50186:35;;50201:18;;:::i;:::-;50186:35;50243:1;50240;50236:9;50231:14;;50066:185;;;;:::o;50257:175::-;50397:27;50393:1;50385:6;50381:14;50374:51;50257:175;:::o;50438:366::-;50580:3;50601:67;50665:2;50660:3;50601:67;:::i;:::-;50594:74;;50677:93;50766:3;50677:93;:::i;:::-;50795:2;50790:3;50786:12;50779:19;;50438:366;;;:::o;50810:419::-;50976:4;51014:2;51003:9;50999:18;50991:26;;51063:9;51057:4;51053:20;51049:1;51038:9;51034:17;51027:47;51091:131;51217:4;51091:131;:::i;:::-;51083:139;;50810:419;;;:::o;51235:553::-;51412:4;51450:3;51439:9;51435:19;51427:27;;51464:71;51532:1;51521:9;51517:17;51508:6;51464:71;:::i;:::-;51545:72;51613:2;51602:9;51598:18;51589:6;51545:72;:::i;:::-;51627;51695:2;51684:9;51680:18;51671:6;51627:72;:::i;:::-;51709;51777:2;51766:9;51762:18;51753:6;51709:72;:::i;:::-;51235:553;;;;;;;:::o
Swarm Source
ipfs://9ba4176660d82e3b3b1b55abb5e9253e760ce40b82bf1a55cb53a7fe9b68fe0d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
APE | 100.00% | $0.49473 | 0.000000000000000014 | <$0.000001 |
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.