Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 188 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Pause | 15308575 | 695 days ago | IN | 0 ETH | 0.00078391 | ||||
Init Pool | 15308572 | 695 days ago | IN | 0 ETH | 0.00096944 | ||||
Init Pool | 15308458 | 695 days ago | IN | 0 ETH | 0.00176923 | ||||
Withdraw Stake | 15307636 | 695 days ago | IN | 0 ETH | 0.00160295 | ||||
Burn Keys | 15306963 | 695 days ago | IN | 0 ETH | 0.00095834 | ||||
Burn Keys | 15306935 | 695 days ago | IN | 0 ETH | 0.00118357 | ||||
Burn Keys | 15306922 | 695 days ago | IN | 0 ETH | 0.00111923 | ||||
Burn Keys | 15306912 | 695 days ago | IN | 0 ETH | 0.00112247 | ||||
Burn Keys | 15306903 | 695 days ago | IN | 0 ETH | 0.00098546 | ||||
Burn Keys | 15306892 | 695 days ago | IN | 0 ETH | 0.00110003 | ||||
Burn Keys | 15306881 | 695 days ago | IN | 0 ETH | 0.00115147 | ||||
Burn Keys | 15306863 | 695 days ago | IN | 0 ETH | 0.00106305 | ||||
Burn Keys | 15306851 | 695 days ago | IN | 0 ETH | 0.00093347 | ||||
Burn Keys | 15306825 | 695 days ago | IN | 0 ETH | 0.00093041 | ||||
Burn Keys | 15306679 | 695 days ago | IN | 0 ETH | 0.00089282 | ||||
Burn Keys | 15306634 | 695 days ago | IN | 0 ETH | 0.00102422 | ||||
Set Partial With... | 15303984 | 696 days ago | IN | 0 ETH | 0.00052249 | ||||
Begin Stake | 15303417 | 696 days ago | IN | 1 ETH | 0.01100406 | ||||
Admin_withdraw_c... | 15302540 | 696 days ago | IN | 0 ETH | 0.00216278 | ||||
Admin_withdraw_c... | 15302536 | 696 days ago | IN | 0 ETH | 0.00378012 | ||||
Burn Keys | 15300994 | 696 days ago | IN | 0 ETH | 0.00072389 | ||||
Begin Stake | 15300896 | 696 days ago | IN | 4.49 ETH | 0.00335399 | ||||
Admin_withdraw_c... | 15300878 | 696 days ago | IN | 0 ETH | 0.00089865 | ||||
Init Pool | 15300844 | 696 days ago | IN | 0 ETH | 0.00042518 | ||||
Admin_withdraw_c... | 15300834 | 696 days ago | IN | 0 ETH | 0.00072472 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
15308572 | 695 days ago | 0.595 ETH | ||||
15308458 | 695 days ago | 111.31937599 ETH | ||||
15307636 | 695 days ago | 0.105 ETH | ||||
15303417 | 696 days ago | 0.3 ETH | ||||
15300896 | 696 days ago | 1.347 ETH | ||||
15300878 | 696 days ago | 10.5 ETH | ||||
15300844 | 696 days ago | 0.5 ETH | ||||
15300834 | 696 days ago | 9.5 ETH | ||||
15300668 | 696 days ago | 0.5 ETH | ||||
15300138 | 696 days ago | 0.145 ETH | ||||
15296855 | 697 days ago | 0.03 ETH | ||||
15296681 | 697 days ago | 2.67 ETH | ||||
15290459 | 698 days ago | 1.5 ETH | ||||
15290353 | 698 days ago | 0.3 ETH | ||||
15288233 | 698 days ago | 0.03 ETH | ||||
15288178 | 698 days ago | 0.447 ETH | ||||
15284461 | 699 days ago | 0.03 ETH | ||||
15284453 | 699 days ago | 0.1 ETH | ||||
15284448 | 699 days ago | 0.03 ETH | ||||
15284422 | 699 days ago | 0.1 ETH | ||||
15284418 | 699 days ago | 0.03 ETH | ||||
15284387 | 699 days ago | 0.1 ETH | ||||
15284377 | 699 days ago | 0.03 ETH | ||||
15284316 | 699 days ago | 0.1 ETH | ||||
15284316 | 699 days ago | 0.1 ETH |
Loading...
Loading
Contract Name:
FlippingClubStakingContract
Compiler Version
v0.8.15+commit.e14f2714
Optimization Enabled:
Yes with 20000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // Copyright (c) 2022 Flipping Club - flippingclub.xyz /** * ______ _ _ _ _____ _ _ * | ____| (_) (_) / ____| | | | * | |__ | |_ _ __ _ __ _ _ __ __ _ | | | |_ _| |__ * | __| | | | '_ \| '_ \| | '_ \ / _` | | | | | | | | '_ \ * | | | | | |_) | |_) | | | | | (_| | | |____| | |_| | |_) | * |_| |_|_| .__/| .__/|_|_| |_|\__, | \_____|_|\__,_|_.__/ * | | | | __/ | * _____ _ |_| |_| _ |___/ _____ _ _ * / ____| | | | (_) / ____| | | | | * | (___ | |_ __ _| | ___ _ __ __ _ | | ___ _ __ | |_ _ __ __ _ ___| |_ * \___ \| __/ _` | |/ / | '_ \ / _` | | | / _ \| '_ \| __| '__/ _` |/ __| __| * ____) | || (_| | <| | | | | (_| | | |___| (_) | | | | |_| | | (_| | (__| |_ * |_____/ \__\__,_|_|\_\_|_| |_|\__, | \_____\___/|_| |_|\__|_| \__,_|\___|\__| * __/ | * |___/ * * @title Flipping Club Staking Contract v2.1 - flippingclub.xyz * @author Flipping Club Team * @dev Using v1 contract for burn function so a new Approval is not required. * @notice Direct interaction with this contract not recommended. Always use the frontend provided. */ pragma solidity 0.8.15; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import "@openzeppelin/contracts/utils/Context.sol"; import "@openzeppelin/contracts/security/Pausable.sol"; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "./stakeable.sol"; import "./IClaim.sol"; import "./NFTContractFunctions.sol"; import "./burnFunctions.sol"; contract FlippingClubStakingContract is Stakeable, Pausable, Ownable { using SafeMath for uint256; uint256 private maxAllowancePerKey = 5000000000000000000; bytes32 private constant ADMIN = keccak256(abi.encodePacked("ADMIN")); bytes32 private constant EXEC = keccak256(abi.encodePacked("EXEC")); bytes32 private constant CLAIM = keccak256(abi.encodePacked("CLAIM")); bool private delegateBurn = true; address private __checkKeys; address private __burnKeys; address private _claimContract; event LogDepositReceived(address indexed payee); event Claimed(uint256 indexed amount, address indexed payee); NFTContractFunctions private ERC721KeyCards; burnFunctions private ERC721KeyBurn; struct StakePackage { uint256 duration; uint256 reward; uint256 min; uint256 max; } mapping(uint256 => StakePackage[]) private Packages; constructor(address payable _newAdmin) { _grantRole(ADMIN, _newAdmin); _grantRole(EXEC, _newAdmin); } receive() external payable { emit LogDepositReceived(msg.sender); } function addPackage( uint256 _name, uint256 duration, uint256 reward, uint256 min, uint256 max ) public { Packages[_name].push(StakePackage(duration, reward, min, max)); } function getPackage(uint256 packageName) private view returns (StakePackage memory) { require(Packages[packageName].length > 0, "No Package"); StakePackage memory package = Packages[packageName][0]; return package; } function beginStake( uint256 _amount, uint256 _package, uint256[] memory _keysToBeUsed ) external payable nonReentrant whenNotPaused { _beginStake(_amount, _package, _keysToBeUsed, msg.sender); } function exec_beginStake( uint256 _amount, uint256 _package, uint256 _startTime, address _spender, uint256 _numKeys ) external payable nonReentrant onlyRole(EXEC) whenNotPaused { StakePackage memory package = getPackage(_package); uint256 _reward = package.reward; uint256 _timePeriodInSeconds = package.duration; uint256 _minStakeValue = package.min; uint256 _maxStakeValue = package.max; require( _amount >= _minStakeValue && _amount <= _maxStakeValue, "Value not in range" ); require( _amount.mul(_reward).div(100) <= _numKeys.mul(maxAllowancePerKey), "Not enough Keys." ); _admin_stake( _amount, _reward, _timePeriodInSeconds, _spender, _startTime, _numKeys ); } function _beginStake( uint256 _amount, uint256 _package, uint256[] memory _keysToBeUsed, address _spender ) private { StakePackage memory package = getPackage(_package); uint256 _reward = package.reward; uint256 _timePeriodInSeconds = package.duration; uint256 _minStakeValue = package.min; uint256 _maxStakeValue = package.max; require( _amount >= _minStakeValue && _amount <= _maxStakeValue, "Stake value not in range" ); require(msg.value == _amount, "Invalid amount sent."); require( checkTokens(_keysToBeUsed, _spender) == true, "Not all Keys owned by address." ); require(checkKey() >= 1, "Address have no Key."); require( _amount.mul(_reward).div(100) <= _keysToBeUsed.length.mul(maxAllowancePerKey), "Not enough Keys." ); delegateBurn ? burnKeys(_keysToBeUsed, _spender) : _burnKeys(_keysToBeUsed, _spender); _stake( _amount, _reward, _timePeriodInSeconds, _spender, _keysToBeUsed.length ); } function withdrawStake(bool all, uint256 index) external nonReentrant whenNotPaused { require(_hasStake(msg.sender, index), "No active positions."); _withdrawStake(all, index); } function admin_withdraw_close( uint256 stake_index, address payable _spender, bool refund ) external onlyRole(ADMIN) { require(_hasStake(_spender, stake_index), "Nothing available."); _admin_withdraw_close(stake_index, _spender, refund); } function checkTokens(uint256[] memory _tokenList, address _msgSender) private view returns (bool) { require(__checkKeys != address(0), "Key Contract not set."); for (uint256 i = 0; i < _tokenList.length; i++) { if (ERC721KeyCards.ownerOf(_tokenList[i]) != _msgSender) { return false; } } return true; } function burnKeys(uint256[] memory _keysToBeUsed, address _spender) public whenNotPaused { require(__burnKeys != address(0), "Delegated Burn not set."); ERC721KeyBurn.burnKeys(_keysToBeUsed, _spender); } function _burnKeys(uint256[] memory _keysToBeUsed, address _spender) public whenNotPaused { address burnAddress = 0x000000000000000000000000000000000000dEaD; for (uint256 i = 0; i < _keysToBeUsed.length; i++) { require( ERC721KeyCards.isApprovedForAll(_spender, address(this)) == true, "BurnKeys: Contract is not approved to spend Keys." ); ERC721KeyCards.safeTransferFrom( _spender, burnAddress, _keysToBeUsed[i] ); } } function checkKey() private view returns (uint256) { require(__checkKeys != address(0), "Key Contract not set."); return ERC721KeyCards.balanceOf(msg.sender); } function initPool(uint256 _amount, address _payee) external nonReentrant onlyRole(ADMIN) { payable(_payee).transfer(_amount); } function initClaim(uint256 _amount, address _payee) external nonReentrant whenNotPaused onlyRole(CLAIM) { require(address(this).balance > _amount, "Not enough balance."); payable(_payee).transfer(_amount); emit Claimed(_amount, _payee); } function broadcastClaim(address payable _payee, uint256 _amount) external payable onlyRole(EXEC) nonReentrant whenNotPaused { require(_claimContract != address(0), "Claim Contract not set."); IClaim(_claimContract).initClaim{value: msg.value}(_payee, _amount); emit Claimed(_amount, _payee); } function getBalance() external view returns (uint256) { return address(this).balance; } function setCheckKeysContractAddress(address KeysContract) external onlyRole(ADMIN) { __checkKeys = KeysContract; ERC721KeyCards = NFTContractFunctions(__checkKeys); } function setBurnContractAddress(address BurnContract) external onlyRole(ADMIN) { __burnKeys = BurnContract; ERC721KeyBurn = burnFunctions(__burnKeys); } function setClaimContract(address ClaimContract) external onlyRole(ADMIN) { _claimContract = ClaimContract; } function setmaxAllowancePerKey(uint256 _maxAllowancePerKey) external onlyRole(ADMIN) { maxAllowancePerKey = _maxAllowancePerKey; } function pause() external whenNotPaused onlyRole(ADMIN) { _pause(); } function unPause() external whenPaused onlyRole(ADMIN) { _unpause(); } function setDelegateBurn(bool status) external { delegateBurn = status; } function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external pure returns (bytes4) { return this.onERC721Received.selector; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.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; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // Copyright (c) 2022 Flipping Club - flippingclub.xyz /** * ______ _ _ _ _____ _ _ * | ____| (_) (_) / ____| | | | * | |__ | |_ _ __ _ __ _ _ __ __ _ | | | |_ _| |__ * | __| | | | '_ \| '_ \| | '_ \ / _` | | | | | | | | '_ \ * | | | | | |_) | |_) | | | | | (_| | | |____| | |_| | |_) | * |_| |_|_| .__/| .__/|_|_| |_|\__, | \_____|_|\__,_|_.__/ * | | | | __/ | * _____ _ |_| |_| _ |___/ _____ _ _ * / ____| | | | (_) / ____| | | | | * | (___ | |_ __ _| | ___ _ __ __ _ | | ___ _ __ | |_ _ __ __ _ ___| |_ * \___ \| __/ _` | |/ / | '_ \ / _` | | | / _ \| '_ \| __| '__/ _` |/ __| __| * ____) | || (_| | <| | | | | (_| | | |___| (_) | | | | |_| | | (_| | (__| |_ * |_____/ \__\__,_|_|\_\_|_| |_|\__, | \_____\___/|_| |_|\__|_| \__,_|\___|\__| * __/ | * |___/ * * @title Flipping Club Staking Contract - Dependency v2.0 - flippingclub.xyz * @author Flipping Club Team * @notice Direct interaction with this contract not recommended. Always use the frontend provided. */ import "@openzeppelin/contracts/utils/math/SafeMath.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; pragma solidity 0.8.15; contract Stakeable is ReentrancyGuard { using SafeMath for uint256; uint256 private initialTimestamp; uint256 private _maxAllowancePerKey = 5000000000000000000; uint256 private timePeriod; uint256 private maxPositions = 4; uint256 private MinStakeValueToClosePosition = 100000000000000000; uint256 private MovePercentageBasisNumber = 30; uint256 private minWithdraw = 100000000000000000; address private StakingAccount; bool private MoveFundsUponReceipt; bool private partialWithdraw = true; bool private MovePercentageOfFundsUponReceipt = true; bytes32 private constant ADMIN = keccak256(abi.encodePacked("ADMIN")); bytes32 private constant EXEC = keccak256(abi.encodePacked("EXEC")); bytes32 private constant CLAIM = keccak256(abi.encodePacked("CLAIM")); Stakeholder[] internal stakeholders; mapping(bytes32 => mapping(address => bool)) public roles; mapping(address => uint256) internal stakes; event GrantRole(bytes32 indexed role, address indexed account); event RevokeRole(bytes32 indexed role, address indexed account); event Withdrawn(address indexed, uint256 amount, uint256 timestamp); event Extended( address user, uint256 amount, uint256 since, uint256 reward, uint256 timePeriod, uint256 usedKeys ); event Staked( address indexed user, uint256 amount, uint256 index, uint256 timestamp, uint256 _plan, uint256 timePeriod, uint256 usedKeys ); struct Stake { address user; uint256 amount; uint256 since; uint256 totalReturn; uint256 timePeriod; uint256 reward; uint256 usedKeys; } struct Stakeholder { address user; Stake[] address_stakes; } struct StakingSummary { Stake[] stakes; } constructor() { stakeholders.push(); } function _addStakeholder(address staker) private returns (uint256) { stakeholders.push(); uint256 userIndex = stakeholders.length - 1; stakeholders[userIndex].user = staker; stakes[staker] = userIndex; return userIndex; } function _stake( uint256 _amount, uint256 _totalReturn, uint256 _timePeriodInSeconds, address _Sender, uint256 usedKeys ) internal { require(StakingAccount != address(0), "Staking account not set."); require(canStake(_Sender), "Max open positions."); if (MoveFundsUponReceipt) { payable(StakingAccount).transfer(_amount); } if (MovePercentageOfFundsUponReceipt) { payable(StakingAccount).transfer( (_amount.mul(MovePercentageBasisNumber)).div(100) ); } uint256 index = stakes[_Sender]; uint256 timestamp = block.timestamp; if (index == 0) { index = _addStakeholder(_Sender); } initialTimestamp = block.timestamp; timePeriod = initialTimestamp.add(_timePeriodInSeconds); stakeholders[index].address_stakes.push( Stake( payable(_Sender), _amount, timestamp, _totalReturn, timePeriod, 0, usedKeys ) ); emit Staked( _Sender, _amount, index, timestamp, _totalReturn, timePeriod, usedKeys ); } function _admin_stake( uint256 _amount, uint256 _totalReturn, uint256 _timePeriodInSeconds, address _Sender, uint256 _startTime, uint256 usedKeys ) internal { require(canStake(_Sender), "Max open positions."); uint256 index = stakes[_Sender]; uint256 timestamp = _startTime; if (index == 0) { index = _addStakeholder(_Sender); } initialTimestamp = _startTime; timePeriod = initialTimestamp.add(_timePeriodInSeconds); stakeholders[index].address_stakes.push( Stake( payable(_Sender), _amount, timestamp, _totalReturn, timePeriod, 0, usedKeys ) ); emit Staked( _Sender, _amount, index, timestamp, _totalReturn, timePeriod, usedKeys ); } function calculateStakeReward(Stake memory _current_stake) private view returns (uint256) { if (block.timestamp > _current_stake.timePeriod) { return (_current_stake.amount.mul(_current_stake.totalReturn)).div( 100 ); } return 0; } function _withdrawStake(bool all, uint256 index) internal { uint256 user_index = stakes[msg.sender]; uint256 _amount; require(user_index > 0, "Address not registered."); require(index <= maxPositions - 1, "Index out of range."); Stake memory current_stake = stakeholders[user_index].address_stakes[ index ]; require(current_stake.amount > 0, "No active positions."); require(address(this).balance > _amount, "Not enough balance."); require( block.timestamp >= current_stake.timePeriod, "Not matured yet." ); uint256 reward = current_stake.reward.add( calculateStakeReward(current_stake) ); require(reward > 0, "Claim not ready."); uint256 totalClaimable = current_stake.amount.add(reward); all ? _amount = totalClaimable : _amount = reward; require(_amount >= minWithdraw, "Amount is less than minimum"); if ( partialWithdraw && ( stakeholders[user_index] .address_stakes[index] .amount .mul( stakeholders[user_index] .address_stakes[index] .totalReturn ) .div(100) ).add( stakeholders[user_index].address_stakes[index].reward.add( reward ) ) <= stakeholders[user_index].address_stakes[index].usedKeys.mul( _maxAllowancePerKey ) ) { if ( stakeholders[user_index].address_stakes[index].amount.sub( _amount ) < MinStakeValueToClosePosition ) { delete current_stake; current_stake = stakeholders[user_index].address_stakes[ stakeholders[user_index].address_stakes.length - 1 ]; stakeholders[user_index].address_stakes.pop(); } else { stakeholders[user_index] .address_stakes[index] .amount = stakeholders[user_index] .address_stakes[index] .amount .sub(_amount); uint256 timeDiff = ( stakeholders[user_index].address_stakes[index].timePeriod ).sub(stakeholders[user_index].address_stakes[index].since); stakeholders[user_index].address_stakes[index].since = block .timestamp; stakeholders[user_index] .address_stakes[index] .timePeriod = block.timestamp.add(timeDiff); } payable(msg.sender).transfer(_amount); emit Withdrawn(msg.sender, _amount, block.timestamp); } else { delete stakeholders[user_index].address_stakes[index]; stakeholders[user_index].address_stakes[index] = stakeholders[ user_index ].address_stakes[ stakeholders[user_index].address_stakes.length - 1 ]; stakeholders[user_index].address_stakes.pop(); payable(msg.sender).transfer(_amount); emit Withdrawn(msg.sender, _amount, block.timestamp); } } function _admin_withdraw_close( uint256 index, address payable _spender, bool refund ) internal { uint256 user_index = stakes[_spender]; Stake memory current_stake = stakeholders[user_index].address_stakes[ index ]; uint256 reward = current_stake.reward.add( calculateStakeReward(current_stake) ); uint256 claimable = current_stake.amount.add(reward); delete stakeholders[user_index].address_stakes[index]; stakeholders[user_index].address_stakes[index] = stakeholders[ user_index ].address_stakes[stakeholders[user_index].address_stakes.length - 1]; stakeholders[user_index].address_stakes.pop(); if (refund) { require(address(this).balance >= claimable, "Not enough balance."); payable(_spender).transfer(claimable); } } function _extendStake(uint256 index) external returns (string memory) { uint256 user_index = stakes[msg.sender]; require(user_index > 0, "Address not registered."); require(index <= maxPositions - 1, "Index out of range."); Stake memory current_stake = stakeholders[user_index].address_stakes[ index ]; require(current_stake.amount > 0, "No active positions."); uint256 reward = calculateStakeReward(current_stake); require(reward > 0, "Reward not ready."); if ( ( stakeholders[user_index] .address_stakes[index] .amount .mul( stakeholders[user_index] .address_stakes[index] .totalReturn ) .div(100) ).add( stakeholders[user_index].address_stakes[index].reward.add( reward ) ) <= stakeholders[user_index].address_stakes[index].usedKeys.mul( _maxAllowancePerKey ) ) { uint256 timeDiff = ( stakeholders[user_index].address_stakes[index].timePeriod ).sub(stakeholders[user_index].address_stakes[index].since); stakeholders[user_index].address_stakes[index].since = block .timestamp; stakeholders[user_index].address_stakes[index].timePeriod = block .timestamp .add(timeDiff); stakeholders[user_index] .address_stakes[index] .reward = stakeholders[user_index] .address_stakes[index] .reward .add(reward); emit Extended( stakeholders[user_index].address_stakes[index].user, stakeholders[user_index].address_stakes[index].amount, stakeholders[user_index].address_stakes[index].since, stakeholders[user_index].address_stakes[index].reward, stakeholders[user_index].address_stakes[index].timePeriod, stakeholders[user_index].address_stakes[index].usedKeys ); return ("Extended."); } else { return ("Not enough allowance left."); } } function _stakeLength(address _staker) external view returns (uint256) { StakingSummary memory summary = StakingSummary( stakeholders[stakes[_staker]].address_stakes ); return summary.stakes.length; } function getAllStakes(address _staker) external view returns (StakingSummary memory) { StakingSummary memory summary = StakingSummary( stakeholders[stakes[_staker]].address_stakes ); for (uint256 s = 0; s < summary.stakes.length; s += 1) { uint256 availableReward = calculateStakeReward(summary.stakes[s]); summary.stakes[s].reward = summary.stakes[s].reward.add( availableReward ); } return summary; } function getSingleStake(address _staker, uint256 index) external view returns ( uint256, uint256, uint256, uint256, uint256, uint256 ) { require(index <= maxPositions - 1, "Index out of range."); StakingSummary memory summary = StakingSummary( stakeholders[stakes[_staker]].address_stakes ); require(summary.stakes.length > 0, "No active positions."); require(summary.stakes.length > index, "Index not valid."); for (uint256 s = 0; s < summary.stakes.length; s += 1) { uint256 availableReward = calculateStakeReward(summary.stakes[s]); summary.stakes[s].reward = summary.stakes[s].reward.add( availableReward ); } return ( summary.stakes[index].amount, summary.stakes[index].since, summary.stakes[index].totalReturn, summary.stakes[index].timePeriod, summary.stakes[index].reward, summary.stakes[index].usedKeys ); } function _hasStake(address _staker, uint256 index) internal view returns (bool) { require(index <= maxPositions - 1, "Index out of range."); StakingSummary memory summary = StakingSummary( stakeholders[stakes[_staker]].address_stakes ); if (summary.stakes.length > 0 && summary.stakes.length > index) { return true; } return false; } function canStake(address _staker) private view returns (bool result) { StakingSummary memory summary = StakingSummary( stakeholders[stakes[_staker]].address_stakes ); if (summary.stakes.length >= maxPositions) { return false; } return true; } function setMaxPositions(uint256 _maxPositions) external onlyRole(ADMIN) { maxPositions = _maxPositions; } function setMinStakeValueToClosePosition( uint256 _MinStakeValueToClosePosition ) external onlyRole(ADMIN) { MinStakeValueToClosePosition = _MinStakeValueToClosePosition; } function setStakingAccount(address _StakingAccount) external onlyRole(ADMIN) { StakingAccount = _StakingAccount; } function setMoveFundsUponReceipt(bool _MoveFundsUponReceipt) external onlyRole(ADMIN) { MoveFundsUponReceipt = _MoveFundsUponReceipt; } function setMovePercentageBasisNumber(uint256 _MovePercentageBasisNumber) external onlyRole(ADMIN) { MovePercentageBasisNumber = _MovePercentageBasisNumber; } function setPartialWithdraw(bool _partialWithdraw) external onlyRole(ADMIN) { partialWithdraw = _partialWithdraw; } function setMovePercentageOfFundsUponReceipt( bool _MovePercentageOfFundsUponReceipt ) external onlyRole(ADMIN) { MovePercentageOfFundsUponReceipt = _MovePercentageOfFundsUponReceipt; } modifier onlyRole(bytes32 _role) { require(roles[_role][msg.sender], "Not authorized."); _; } function _grantRole(bytes32 _role, address _account) internal { roles[_role][_account] = true; emit GrantRole(_role, _account); } function grantRole(bytes32 _role, address _account) external onlyRole(ADMIN) { _grantRole(_role, _account); } function _revokeRole(bytes32 _role, address _account) internal { roles[_role][_account] = false; emit RevokeRole(_role, _account); } function revokeRole(bytes32 _role, address _account) external onlyRole(ADMIN) { _revokeRole(_role, _account); } function set_maxAllowancePerKey(uint256 __maxAllowancePerKey) external onlyRole(ADMIN) { _maxAllowancePerKey = __maxAllowancePerKey; } function setMinWithdraw(uint256 _minWithdraw) external onlyRole(ADMIN) { minWithdraw = _minWithdraw; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.15; interface IClaim { function initClaim(address _payee, uint256 _amount) external payable; }
// SPDX-License-Identifier: MIT pragma solidity 0.8.15; interface NFTContractFunctions { function balanceOf(address owner) external view returns (uint256); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom( address from, address to, uint256 tokenId ) external; function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); function approve(address to, uint256 tokenId) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.8.15; interface burnFunctions { function burnKeys(uint256[] memory _keysToBeUsed, address _spender) external; }
{ "optimizer": { "enabled": true, "runs": 20000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address payable","name":"_newAdmin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"payee","type":"address"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"since","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timePeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usedKeys","type":"uint256"}],"name":"Extended","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"GrantRole","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payee","type":"address"}],"name":"LogDepositReceived","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"RevokeRole","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_plan","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timePeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usedKeys","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"uint256[]","name":"_keysToBeUsed","type":"uint256[]"},{"internalType":"address","name":"_spender","type":"address"}],"name":"_burnKeys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"_extendStake","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"_stakeLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_name","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"addPackage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stake_index","type":"uint256"},{"internalType":"address payable","name":"_spender","type":"address"},{"internalType":"bool","name":"refund","type":"bool"}],"name":"admin_withdraw_close","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_package","type":"uint256"},{"internalType":"uint256[]","name":"_keysToBeUsed","type":"uint256[]"}],"name":"beginStake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_payee","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"broadcastClaim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_keysToBeUsed","type":"uint256[]"},{"internalType":"address","name":"_spender","type":"address"}],"name":"burnKeys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_package","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_numKeys","type":"uint256"}],"name":"exec_beginStake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"getAllStakes","outputs":[{"components":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"since","type":"uint256"},{"internalType":"uint256","name":"totalReturn","type":"uint256"},{"internalType":"uint256","name":"timePeriod","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"usedKeys","type":"uint256"}],"internalType":"struct Stakeable.Stake[]","name":"stakes","type":"tuple[]"}],"internalType":"struct Stakeable.StakingSummary","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getSingleStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_role","type":"bytes32"},{"internalType":"address","name":"_account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_payee","type":"address"}],"name":"initClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_payee","type":"address"}],"name":"initPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_role","type":"bytes32"},{"internalType":"address","name":"_account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"roles","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"BurnContract","type":"address"}],"name":"setBurnContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"KeysContract","type":"address"}],"name":"setCheckKeysContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ClaimContract","type":"address"}],"name":"setClaimContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setDelegateBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPositions","type":"uint256"}],"name":"setMaxPositions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MinStakeValueToClosePosition","type":"uint256"}],"name":"setMinStakeValueToClosePosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minWithdraw","type":"uint256"}],"name":"setMinWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_MoveFundsUponReceipt","type":"bool"}],"name":"setMoveFundsUponReceipt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MovePercentageBasisNumber","type":"uint256"}],"name":"setMovePercentageBasisNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_MovePercentageOfFundsUponReceipt","type":"bool"}],"name":"setMovePercentageOfFundsUponReceipt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_partialWithdraw","type":"bool"}],"name":"setPartialWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_StakingAccount","type":"address"}],"name":"setStakingAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__maxAllowancePerKey","type":"uint256"}],"name":"set_maxAllowancePerKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxAllowancePerKey","type":"uint256"}],"name":"setmaxAllowancePerKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"all","type":"bool"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"withdrawStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052674563918244f4000060028190556004805567016345785d8a00006005819055601e6006556007556008805461ffff60a81b191661010160a81b179055600d55600e805460ff191660011790553480156200005e57600080fd5b5060405162005e2b38038062005e2b8339810160408190526200008191620001be565b6001600081815560098054909201825552600c805460ff19169055620000a73362000109565b6040516420a226a4a760d91b6020820152620000e4906025015b60405160208183030381529060405280519060200120826200016360201b60201c565b604051634558454360e01b60208201526200010290602401620000c1565b50620001f0565b600c80546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000828152600a602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551909184917f5a06360d65acf95e98445dc834f205063424c636e65418d928cdfabc33a953999190a35050565b600060208284031215620001d157600080fd5b81516001600160a01b0381168114620001e957600080fd5b9392505050565b615c2b80620002006000396000f3fe6080604052600436106102a45760003560e01c80638456cb591161016e578063b453a187116100cb578063ec5a82e41161007f578063f2fde38b11610064578063f2fde38b14610884578063f7b188a5146108a4578063f8fc08b9146108b957600080fd5b8063ec5a82e414610851578063eff350641461087157600080fd5b8063c80229c1116100b0578063c80229c1146107fe578063d0c4cab614610811578063d547741f1461083157600080fd5b8063b453a187146107be578063bb32fbb1146107de57600080fd5b8063a2e30f1511610122578063a865e8ce11610107578063a865e8ce1461075e578063a93e05231461077e578063b06113fe1461079e57600080fd5b8063a2e30f15146106bd578063a4ca8c7a1461073e57600080fd5b80638e699bc8116101535780638e699bc81461065057806399b1d9581461067d57806399d9af521461069d57600080fd5b80638456cb59146105eb5780638da5cb5b1461060057600080fd5b8063453875a01161021c57806368888dc3116101d0578063715018a6116101b5578063715018a61461059657806378174ec5146105ab57806381cdf766146105cb57600080fd5b806368888dc31461055657806369322c131461057657600080fd5b806350690fc01161020157806350690fc0146104c65780635c975abb146104e65780636721aa221461050a57600080fd5b8063453875a0146104935780634a30d3eb146104a657600080fd5b80631c8050c7116102735780632f2ff15d116102585780632f2ff15d1461043357806335aa134a146104535780633b2896651461047357600080fd5b80631c8050c7146103f1578063225891381461041357600080fd5b806304238994146102db57806312065fe014610311578063150b7a021461032e57806315914247146103a457600080fd5b366102d65760405133907f15382559391789f1865e10e9c8b51327a9cb0381eae89973ada229e7a78c08f390600090a2005b600080fd5b3480156102e757600080fd5b506102fb6102f636600461553b565b6108f4565b6040516103089190615558565b60405180910390f35b34801561031d57600080fd5b50475b604051908152602001610308565b34801561033a57600080fd5b506103736103493660046155fc565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610308565b3480156103b057600080fd5b506103c46103bf36600461569b565b610ab1565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610308565b3480156103fd57600080fd5b5061041161040c36600461553b565b610e20565b005b34801561041f57600080fd5b5061041161042e3660046156c7565b610f10565b34801561043f57600080fd5b5061041161044e3660046156c7565b6110f7565b34801561045f57600080fd5b5061041161046e3660046156f7565b6111ae565b34801561047f57600080fd5b5061041161048e36600461553b565b61125c565b6104116104a1366004615710565b611387565b3480156104b257600080fd5b506104116104c136600461553b565b61159f565b3480156104d257600080fd5b506104116104e1366004615823565b61168f565b3480156104f257600080fd5b50600c5460ff165b6040519015158152602001610308565b34801561051657600080fd5b50610411610525366004615878565b600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b34801561056257600080fd5b506104116105713660046156f7565b61178a565b34801561058257600080fd5b50610411610591366004615895565b611838565b3480156105a257600080fd5b50610411611900565b3480156105b757600080fd5b506104116105c6366004615823565b611914565b3480156105d757600080fd5b506104116105e636600461553b565b611b26565b3480156105f757600080fd5b50610411611c20565b34801561060c57600080fd5b50600c54610100900473ffffffffffffffffffffffffffffffffffffffff1660405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610308565b34801561065c57600080fd5b5061067061066b3660046156f7565b611cdb565b60405161030891906158b3565b34801561068957600080fd5b506104116106983660046156f7565b6124c1565b3480156106a957600080fd5b506104116106b8366004615878565b61256f565b3480156106c957600080fd5b506104116106d8366004615908565b60009485526013602090815260408087208151608081018352968752868301958652908601938452606086019283528054600181810183559188529190962094516004909102909401938455915193830193909355915160028201559051600390910155565b34801561074a57600080fd5b50610411610759366004615878565b612664565b34801561076a57600080fd5b506104116107793660046156f7565b612758565b34801561078a57600080fd5b506104116107993660046156c7565b612806565b3480156107aa57600080fd5b506104116107b9366004615878565b612953565b3480156107ca57600080fd5b506104116107d9366004615943565b612a46565b3480156107ea57600080fd5b506104116107f93660046156f7565b612b4f565b61041161080c36600461569b565b612bfd565b34801561081d57600080fd5b5061032061082c36600461553b565b612e44565b34801561083d57600080fd5b5061041161084c3660046156c7565b612f6c565b34801561085d57600080fd5b5061041161086c3660046156f7565b61301e565b61041161087f366004615985565b6130cc565b34801561089057600080fd5b5061041161089f36600461553b565b613141565b3480156108b057600080fd5b506104116131db565b3480156108c557600080fd5b506104fa6108d43660046156c7565b600a60209081526000928352604080842090915290825290205460ff1681565b604080516020810190915260608152604080516020808201835273ffffffffffffffffffffffffffffffffffffffff85166000908152600b90915291822054600980548392908110610948576109486159d5565b9060005260206000209060020201600101805480602002602001604051908101604052809291908181526020016000905b82821015610a015760008481526020908190206040805160e08101825260078602909201805473ffffffffffffffffffffffffffffffffffffffff168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460c08301529083529092019101610979565b505050915250905060005b815151811015610aaa576000610a3e83600001518381518110610a3157610a316159d5565b6020026020010151613293565b9050610a748184600001518481518110610a5a57610a5a6159d5565b602002602001015160a001516132cf90919063ffffffff16565b8351805184908110610a8857610a886159d5565b602090810291909101015160a0015250610aa3600182615a33565b9050610a0c565b5092915050565b6000806000806000806001600454610ac99190615a4b565b871115610b1d5760405162461bcd60e51b815260206004820152601360248201527f496e646578206f7574206f662072616e67652e0000000000000000000000000060448201526064015b60405180910390fd5b604080516020808201835273ffffffffffffffffffffffffffffffffffffffff8b166000908152600b90915291822054600980548392908110610b6257610b626159d5565b9060005260206000209060020201600101805480602002602001604051908101604052809291908181526020016000905b82821015610c1b5760008481526020908190206040805160e08101825260078602909201805473ffffffffffffffffffffffffffffffffffffffff168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460c08301529083529092019101610b93565b505050915250805151909150610c735760405162461bcd60e51b815260206004820152601460248201527f4e6f2061637469766520706f736974696f6e732e0000000000000000000000006044820152606401610b14565b8051518810610cc45760405162461bcd60e51b815260206004820152601060248201527f496e646578206e6f742076616c69642e000000000000000000000000000000006044820152606401610b14565b60005b815151811015610d3e576000610cec83600001518381518110610a3157610a316159d5565b9050610d088184600001518481518110610a5a57610a5a6159d5565b8351805184908110610d1c57610d1c6159d5565b602090810291909101015160a0015250610d37600182615a33565b9050610cc7565b508051805189908110610d5357610d536159d5565b60200260200101516020015181600001518981518110610d7557610d756159d5565b60200260200101516040015182600001518a81518110610d9757610d976159d5565b60200260200101516060015183600001518b81518110610db957610db96159d5565b60200260200101516080015184600001518c81518110610ddb57610ddb6159d5565b602002602001015160a0015185600001518d81518110610dfd57610dfd6159d5565b602002602001015160c00151965096509650965096509650509295509295509295565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff16610ec85760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600260005403610f625760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b14565b6002600055610f6f6132e2565b6040517f434c41494d000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166110175760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b8247116110665760405162461bcd60e51b815260206004820152601360248201527f4e6f7420656e6f7567682062616c616e63652e000000000000000000000000006044820152606401610b14565b60405173ffffffffffffffffffffffffffffffffffffffff83169084156108fc029085906000818181858888f193505050501580156110a9573d6000803e3d6000fd5b5060405173ffffffffffffffffffffffffffffffffffffffff83169084907f6aa3eac93d079e5e100b1029be716caa33586c96aa4baac390669fb5c2a2121290600090a35050600160005550565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff1661119f5760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b6111a98383613335565b505050565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166112565760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600755565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166113045760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905560118054919092049092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055565b6002600054036113d95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b14565b60026000556040517f4558454300000000000000000000000000000000000000000000000000000000602082015260240160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166114865760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b61148e6132e2565b6000611499866133bb565b60208101518151604083015160608401519394509192909190818b108015906114c25750808b11155b61150e5760405162461bcd60e51b815260206004820152601260248201527f56616c7565206e6f7420696e2072616e676500000000000000000000000000006044820152606401610b14565b600d5461151c9088906134ab565b611531606461152b8e886134ab565b906134b7565b111561157f5760405162461bcd60e51b815260206004820152601060248201527f4e6f7420656e6f756768204b6579732e000000000000000000000000000000006044820152606401610b14565b61158d8b85858b8d8c6134c3565b50506001600055505050505050505050565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166116475760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6116976132e2565b600f5473ffffffffffffffffffffffffffffffffffffffff166116fc5760405162461bcd60e51b815260206004820152601760248201527f44656c656761746564204275726e206e6f74207365742e0000000000000000006044820152606401610b14565b6012546040517f50690fc000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906350690fc0906117549085908590600401615a62565b600060405180830381600087803b15801561176e57600080fd5b505af1158015611782573d6000803e3d6000fd5b505050505050565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166118325760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600455565b60026000540361188a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b14565b60026000556118976132e2565b6118a1338261370c565b6118ed5760405162461bcd60e51b815260206004820152601460248201527f4e6f2061637469766520706f736974696f6e732e0000000000000000000000006044820152606401610b14565b6118f7828261389e565b50506001600055565b611908614463565b61191260006144d0565b565b61191c6132e2565b61dead60005b8351811015611b20576011546040517fe985e9c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301529091169063e985e9c590604401602060405180830381865afa1580156119a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c59190615ac3565b1515600114611a3c5760405162461bcd60e51b815260206004820152603160248201527f4275726e4b6579733a20436f6e7472616374206973206e6f7420617070726f7660448201527f656420746f207370656e64204b6579732e0000000000000000000000000000006064820152608401610b14565b601154845173ffffffffffffffffffffffffffffffffffffffff909116906342842e0e9085908590889086908110611a7657611a766159d5565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015611af557600080fd5b505af1158015611b09573d6000803e3d6000fd5b505050508080611b1890615ae0565b915050611922565b50505050565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff16611bce5760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600f805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790915560128054909216179055565b611c286132e2565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff16611cd05760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b611cd861454e565b50565b336000908152600b602052604090205460609080611d3b5760405162461bcd60e51b815260206004820152601760248201527f41646472657373206e6f7420726567697374657265642e0000000000000000006044820152606401610b14565b6001600454611d4a9190615a4b565b831115611d995760405162461bcd60e51b815260206004820152601360248201527f496e646578206f7574206f662072616e67652e000000000000000000000000006044820152606401610b14565b600060098281548110611dae57611dae6159d5565b90600052602060002090600202016001018481548110611dd057611dd06159d5565b60009182526020918290206040805160e0810182526007909302909101805473ffffffffffffffffffffffffffffffffffffffff16835260018101549383018490526002810154918301919091526003810154606083015260048101546080830152600581015460a08301526006015460c08201529150611e935760405162461bcd60e51b815260206004820152601460248201527f4e6f2061637469766520706f736974696f6e732e0000000000000000000000006044820152606401610b14565b6000611e9e82613293565b905060008111611ef05760405162461bcd60e51b815260206004820152601160248201527f526577617264206e6f742072656164792e0000000000000000000000000000006044820152606401610b14565b611f4b60025460098581548110611f0957611f096159d5565b90600052602060002090600202016001018781548110611f2b57611f2b6159d5565b9060005260206000209060070201600601546134ab90919063ffffffff16565b612051611fa78360098781548110611f6557611f656159d5565b90600052602060002090600202016001018981548110611f8757611f876159d5565b9060005260206000209060070201600501546132cf90919063ffffffff16565b61204b606461152b60098981548110611fc257611fc26159d5565b90600052602060002090600202016001018b81548110611fe457611fe46159d5565b90600052602060002090600702016003015460098a81548110612009576120096159d5565b90600052602060002090600202016001018c8154811061202b5761202b6159d5565b9060005260206000209060070201600101546134ab90919063ffffffff16565b906132cf565b116124845760006120f76009858154811061206e5761206e6159d5565b90600052602060002090600202016001018781548110612090576120906159d5565b906000526020600020906007020160020154600986815481106120b5576120b56159d5565b906000526020600020906002020160010188815481106120d7576120d76159d5565b9060005260206000209060070201600401546145d390919063ffffffff16565b9050426009858154811061210d5761210d6159d5565b9060005260206000209060020201600101878154811061212f5761212f6159d5565b600091825260209091206002600790920201015561214d42826132cf565b60098581548110612160576121606159d5565b90600052602060002090600202016001018781548110612182576121826159d5565b9060005260206000209060070201600401819055506121d082600986815481106121ae576121ae6159d5565b90600052602060002090600202016001018881548110611f8757611f876159d5565b600985815481106121e3576121e36159d5565b90600052602060002090600202016001018781548110612205576122056159d5565b9060005260206000209060070201600501819055507fd0dbdf5a9c6f6230b05ec9279bf9c69ad874fceb6c427e3a79ad9d08951abe276009858154811061224e5761224e6159d5565b90600052602060002090600202016001018781548110612270576122706159d5565b60009182526020909120600790910201546009805473ffffffffffffffffffffffffffffffffffffffff90921691879081106122ae576122ae6159d5565b906000526020600020906002020160010188815481106122d0576122d06159d5565b906000526020600020906007020160010154600987815481106122f5576122f56159d5565b90600052602060002090600202016001018981548110612317576123176159d5565b9060005260206000209060070201600201546009888154811061233c5761233c6159d5565b90600052602060002090600202016001018a8154811061235e5761235e6159d5565b90600052602060002090600702016005015460098981548110612383576123836159d5565b90600052602060002090600202016001018b815481106123a5576123a56159d5565b90600052602060002090600702016004015460098a815481106123ca576123ca6159d5565b90600052602060002090600202016001018c815481106123ec576123ec6159d5565b6000918252602091829020600660079092020101546040805173ffffffffffffffffffffffffffffffffffffffff9098168852918701959095528501929092526060840152608083015260a082015260c00160405180910390a1505060408051808201909152600981527f457874656e6465642e00000000000000000000000000000000000000000000006020820152949350505050565b505060408051808201909152601a81527f4e6f7420656e6f75676820616c6c6f77616e6365206c6566742e00000000000060208201529392505050565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166125695760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600255565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166126175760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b5060088054911515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff1661270c5760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600880549115157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166128005760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600555565b6002600054036128585760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b14565b60026000556040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166129055760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b60405173ffffffffffffffffffffffffffffffffffffffff83169084156108fc029085906000818181858888f19350505050158015612948573d6000803e3d6000fd5b505060016000555050565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166129fb5760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b506008805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff16612aee5760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b612af8838561370c565b612b445760405162461bcd60e51b815260206004820152601260248201527f4e6f7468696e6720617661696c61626c652e00000000000000000000000000006044820152606401610b14565b611b208484846145df565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff16612bf75760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600d55565b6040517f4558454300000000000000000000000000000000000000000000000000000000602082015260240160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff16612ca55760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b600260005403612cf75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b14565b6002600055612d046132e2565b60105473ffffffffffffffffffffffffffffffffffffffff16612d695760405162461bcd60e51b815260206004820152601760248201527f436c61696d20436f6e7472616374206e6f74207365742e0000000000000000006044820152606401610b14565b6010546040517fcafd84b400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590529091169063cafd84b49034906044016000604051808303818588803b158015612dde57600080fd5b505af1158015612df2573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871693508592507f6aa3eac93d079e5e100b1029be716caa33586c96aa4baac390669fb5c2a212129150600090a35050600160005550565b60008060405180602001604052806009600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110612ea457612ea46159d5565b9060005260206000209060020201600101805480602002602001604051908101604052809291908181526020016000905b82821015612f5d5760008481526020908190206040805160e08101825260078602909201805473ffffffffffffffffffffffffffffffffffffffff168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460c08301529083529092019101612ed5565b50505091525051519392505050565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166130145760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b6111a98383614a00565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166130c65760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600655565b60026000540361311e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b14565b600260005561312b6132e2565b61313783838333614a83565b5050600160005550565b613149614463565b73ffffffffffffffffffffffffffffffffffffffff81166131d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b14565b611cd8816144d0565b6131e3614cac565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff1661328b5760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b611cd8614cfe565b600081608001514211156132c7576132c1606461152b846060015185602001516134ab90919063ffffffff16565b92915050565b506000919050565b60006132db8284615a33565b9392505050565b600c5460ff16156119125760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b14565b6000828152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551909184917f5a06360d65acf95e98445dc834f205063424c636e65418d928cdfabc33a953999190a35050565b6133e66040518060800160405280600081526020016000815260200160008152602001600081525090565b6000828152601360205260409020546134415760405162461bcd60e51b815260206004820152600a60248201527f4e6f205061636b616765000000000000000000000000000000000000000000006044820152606401610b14565b60008281526013602052604081208054829061345f5761345f6159d5565b9060005260206000209060040201604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382015481525050905080915050919050565b60006132db8284615b18565b60006132db8284615b55565b6134cc83614d55565b6135185760405162461bcd60e51b815260206004820152601360248201527f4d6178206f70656e20706f736974696f6e732e000000000000000000000000006044820152606401610b14565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b60205260408120549083908290036135545761355185614e94565b91505b600184905561356384876132cf565b600355600980548390811061357a5761357a6159d5565b90600052602060002090600202016001016040518060e001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200183815260200189815260200160035481526020016000815260200185815250908060018154018082558091505060019003906000526020600020906007020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015550508473ffffffffffffffffffffffffffffffffffffffff167fc16be9a586414a157dd46b4d023aa9997a025dd1cbbaa67ac0c1b8273a5eaf558984848b600354896040516136fa96959493929190958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60405180910390a25050505050505050565b6000600160045461371d9190615a4b565b82111561376c5760405162461bcd60e51b815260206004820152601360248201527f496e646578206f7574206f662072616e67652e000000000000000000000000006044820152606401610b14565b604080516020808201835273ffffffffffffffffffffffffffffffffffffffff86166000908152600b909152918220546009805483929081106137b1576137b16159d5565b9060005260206000209060020201600101805480602002602001604051908101604052809291908181526020016000905b8282101561386a5760008481526020908190206040805160e08101825260078602909201805473ffffffffffffffffffffffffffffffffffffffff168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460c083015290835290920191016137e2565b50505091525080515190915015801590613885575080515183105b156138945760019150506132c1565b5060009392505050565b336000908152600b602052604081205490816138fc5760405162461bcd60e51b815260206004820152601760248201527f41646472657373206e6f7420726567697374657265642e0000000000000000006044820152606401610b14565b600160045461390b9190615a4b565b83111561395a5760405162461bcd60e51b815260206004820152601360248201527f496e646578206f7574206f662072616e67652e000000000000000000000000006044820152606401610b14565b60006009838154811061396f5761396f6159d5565b90600052602060002090600202016001018481548110613991576139916159d5565b60009182526020918290206040805160e0810182526007909302909101805473ffffffffffffffffffffffffffffffffffffffff16835260018101549383018490526002810154918301919091526003810154606083015260048101546080830152600581015460a08301526006015460c08201529150613a545760405162461bcd60e51b815260206004820152601460248201527f4e6f2061637469766520706f736974696f6e732e0000000000000000000000006044820152606401610b14565b814711613aa35760405162461bcd60e51b815260206004820152601360248201527f4e6f7420656e6f7567682062616c616e63652e000000000000000000000000006044820152606401610b14565b8060800151421015613af75760405162461bcd60e51b815260206004820152601060248201527f4e6f74206d617475726564207965742e000000000000000000000000000000006044820152606401610b14565b6000613b10613b0583613293565b60a0840151906132cf565b905060008111613b625760405162461bcd60e51b815260206004820152601060248201527f436c61696d206e6f742072656164792e000000000000000000000000000000006044820152606401610b14565b6020820151600090613b7490836132cf565b905086613b845781935083613b89565b809350835b50600754841015613bdc5760405162461bcd60e51b815260206004820152601b60248201527f416d6f756e74206973206c657373207468616e206d696e696d756d00000000006044820152606401610b14565b6008547501000000000000000000000000000000000000000000900460ff168015613d005750613c3d60025460098781548110613c1b57613c1b6159d5565b90600052602060002090600202016001018881548110611f2b57611f2b6159d5565b613cfd613c798460098981548110613c5757613c576159d5565b90600052602060002090600202016001018a81548110611f8757611f876159d5565b61204b606461152b60098b81548110613c9457613c946159d5565b90600052602060002090600202016001018c81548110613cb657613cb66159d5565b90600052602060002090600702016003015460098c81548110613cdb57613cdb6159d5565b90600052602060002090600202016001018d8154811061202b5761202b6159d5565b11155b1561416e57600554613d618560098881548110613d1f57613d1f6159d5565b90600052602060002090600202016001018981548110613d4157613d416159d5565b9060005260206000209060070201600101546145d390919063ffffffff16565b1015613f5b57613dbd6040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b925060098581548110613dd257613dd26159d5565b9060005260206000209060020201600101600160098781548110613df857613df86159d5565b906000526020600020906002020160010180549050613e179190615a4b565b81548110613e2757613e276159d5565b60009182526020918290206040805160e0810182526007909302909101805473ffffffffffffffffffffffffffffffffffffffff1683526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460c0820152600980549194509086908110613eb457613eb46159d5565b9060005260206000209060020201600101805480613ed457613ed4615b90565b60008281526020812060077fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019283020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001810182905560028101829055600381018290556004810182905560058101829055600601559055614101565b613f948460098781548110613f7257613f726159d5565b90600052602060002090600202016001018881548110613d4157613d416159d5565b60098681548110613fa757613fa76159d5565b90600052602060002090600202016001018781548110613fc957613fc96159d5565b906000526020600020906007020160010181905550600061405f60098781548110613ff657613ff66159d5565b90600052602060002090600202016001018881548110614018576140186159d5565b9060005260206000209060070201600201546009888154811061403d5761403d6159d5565b906000526020600020906002020160010189815481106120d7576120d76159d5565b90504260098781548110614075576140756159d5565b90600052602060002090600202016001018881548110614097576140976159d5565b60009182526020909120600260079092020101556140b542826132cf565b600987815481106140c8576140c86159d5565b906000526020600020906002020160010188815481106140ea576140ea6159d5565b906000526020600020906007020160040181905550505b604051339085156108fc029086906000818181858888f1935050505015801561412e573d6000803e3d6000fd5b506040805185815242602082015233917f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc6910160405180910390a261445a565b60098581548110614181576141816159d5565b906000526020600020906002020160010186815481106141a3576141a36159d5565b60009182526020822060079091020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001810182905560028101829055600381018290556004810182905560058101829055600601556009805486908110614213576142136159d5565b9060005260206000209060020201600101600160098781548110614239576142396159d5565b9060005260206000209060020201600101805490506142589190615a4b565b81548110614268576142686159d5565b906000526020600020906007020160098681548110614289576142896159d5565b906000526020600020906002020160010187815481106142ab576142ab6159d5565b60009182526020909120825460079092020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911781556001808301549082015560028083015490820155600380830154908201556004808301549082015560058083015490820155600691820154910155600980548690811061434e5761434e6159d5565b906000526020600020906002020160010180548061436e5761436e615b90565b60008281526020812060077fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019283020180547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560018101829055600281018290556003810182905560048101829055600581018290556006018190559155604051339186156108fc02918791818181858888f1935050505015801561441d573d6000803e3d6000fd5b506040805185815242602082015233917f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc691015b60405180910390a25b50505050505050565b600c5473ffffffffffffffffffffffffffffffffffffffff6101009091041633146119125760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b14565b600c805473ffffffffffffffffffffffffffffffffffffffff8381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff85161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6145566132e2565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586145a93390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60006132db8284615a4b565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600b6020526040812054600980549192918390811061461c5761461c6159d5565b9060005260206000209060020201600101858154811061463e5761463e6159d5565b600091825260208083206040805160e0810182526007909402909101805473ffffffffffffffffffffffffffffffffffffffff1684526001810154928401929092526002820154908301526003810154606083015260048101546080830152600581015460a08301526006015460c082015291506146be613b0583613293565b905060006146d98284602001516132cf90919063ffffffff16565b9050600984815481106146ee576146ee6159d5565b90600052602060002090600202016001018781548110614710576147106159d5565b60009182526020822060079091020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001810182905560028101829055600381018290556004810182905560058101829055600601556009805485908110614780576147806159d5565b90600052602060002090600202016001016001600986815481106147a6576147a66159d5565b9060005260206000209060020201600101805490506147c59190615a4b565b815481106147d5576147d56159d5565b9060005260206000209060070201600985815481106147f6576147f66159d5565b90600052602060002090600202016001018881548110614818576148186159d5565b60009182526020909120825460079092020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091178155600180830154908201556002808301549082015560038083015490820155600480830154908201556005808301549082015560069182015491015560098054859081106148bb576148bb6159d5565b90600052602060002090600202016001018054806148db576148db615b90565b60008281526020812060077fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019283020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001810182905560028101829055600381018290556004810182905560058101829055600601559055841561445a57804710156149b35760405162461bcd60e51b815260206004820152601360248201527f4e6f7420656e6f7567682062616c616e63652e000000000000000000000000006044820152606401610b14565b60405173ffffffffffffffffffffffffffffffffffffffff87169082156108fc029083906000818181858888f193505050501580156149f6573d6000803e3d6000fd5b5050505050505050565b6000828152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551909184917f76e6093c136cd7faa5a6d92b2b633f3b4595abd4a529b7a13917398355fea6949190a35050565b6000614a8e846133bb565b60208101518151604083015160608401519394509192909190818910801590614ab75750808911155b614b035760405162461bcd60e51b815260206004820152601860248201527f5374616b652076616c7565206e6f7420696e2072616e676500000000000000006044820152606401610b14565b883414614b525760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420616d6f756e742073656e742e0000000000000000000000006044820152606401610b14565b614b5c8787614f2f565b1515600114614bad5760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420616c6c204b657973206f776e656420627920616464726573732e00006044820152606401610b14565b6001614bb7615088565b1015614c055760405162461bcd60e51b815260206004820152601460248201527f416464726573732068617665206e6f204b65792e0000000000000000000000006044820152606401610b14565b600d548751614c13916134ab565b614c22606461152b8c886134ab565b1115614c705760405162461bcd60e51b815260206004820152601060248201527f4e6f7420656e6f756768204b6579732e000000000000000000000000000000006044820152606401610b14565b600e5460ff16614c8957614c848787611914565b614c93565b614c93878761168f565b614ca1898585898b5161518c565b505050505050505050565b600c5460ff166119125760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b14565b614d06614cac565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336145a9565b60008060405180602001604052806009600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110614db557614db56159d5565b9060005260206000209060020201600101805480602002602001604051908101604052809291908181526020016000905b82821015614e6e5760008481526020908190206040805160e08101825260078602909201805473ffffffffffffffffffffffffffffffffffffffff168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460c08301529083529092019101614de6565b50505091525060045481515191925011614e8b5750600092915050565b50600192915050565b60098054600190810180835560009283528291614eb091615a4b565b90508260098281548110614ec657614ec66159d5565b6000918252602080832060029290920290910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055949091168152600b90935260409092208290555090565b600e54600090610100900473ffffffffffffffffffffffffffffffffffffffff16614f9c5760405162461bcd60e51b815260206004820152601560248201527f4b657920436f6e7472616374206e6f74207365742e00000000000000000000006044820152606401610b14565b60005b835181101561507e57601154845173ffffffffffffffffffffffffffffffffffffffff808616921690636352211e90879085908110614fe057614fe06159d5565b60200260200101516040518263ffffffff1660e01b815260040161500691815260200190565b602060405180830381865afa158015615023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150479190615bbf565b73ffffffffffffffffffffffffffffffffffffffff161461506c5760009150506132c1565b8061507681615ae0565b915050614f9f565b5060019392505050565b600e54600090610100900473ffffffffffffffffffffffffffffffffffffffff166150f55760405162461bcd60e51b815260206004820152601560248201527f4b657920436f6e7472616374206e6f74207365742e00000000000000000000006044820152606401610b14565b6011546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015615163573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151879190615bdc565b905090565b60085473ffffffffffffffffffffffffffffffffffffffff166151f15760405162461bcd60e51b815260206004820152601860248201527f5374616b696e67206163636f756e74206e6f74207365742e00000000000000006044820152606401610b14565b6151fa82614d55565b6152465760405162461bcd60e51b815260206004820152601360248201527f4d6178206f70656e20706f736974696f6e732e000000000000000000000000006044820152606401610b14565b60085474010000000000000000000000000000000000000000900460ff16156152b25760085460405173ffffffffffffffffffffffffffffffffffffffff9091169086156108fc029087906000818181858888f193505050501580156152b0573d6000803e3d6000fd5b505b600854760100000000000000000000000000000000000000000000900460ff16156153365760085460065473ffffffffffffffffffffffffffffffffffffffff909116906108fc9061530c9060649061152b908a906134ab565b6040518115909202916000818181858888f19350505050158015615334573d6000803e3d6000fd5b505b73ffffffffffffffffffffffffffffffffffffffff82166000908152600b60205260408120549042908290036153725761536f84614e94565b91505b42600181905561538290866132cf565b6003556009805483908110615399576153996159d5565b90600052602060002090600202016001016040518060e001604052808673ffffffffffffffffffffffffffffffffffffffff16815260200189815260200183815260200188815260200160035481526020016000815260200185815250908060018154018082558091505060019003906000526020600020906007020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015550508373ffffffffffffffffffffffffffffffffffffffff167fc16be9a586414a157dd46b4d023aa9997a025dd1cbbaa67ac0c1b8273a5eaf558884848a6003548960405161445196959493929190958652602086019490945260408501929092526060840152608083015260a082015260c00190565b73ffffffffffffffffffffffffffffffffffffffff81168114611cd857600080fd5b60006020828403121561554d57600080fd5b81356132db81615519565b60006020808352604080840185518384870152818151808452606093508388019150858301925060005b818110156155ee578351805173ffffffffffffffffffffffffffffffffffffffff1684528781015188850152868101518785015285810151868501526080808201519085015260a0808201519085015260c090810151908401529286019260e090920191600101615582565b509098975050505050505050565b60008060008060006080868803121561561457600080fd5b853561561f81615519565b9450602086013561562f81615519565b935060408601359250606086013567ffffffffffffffff8082111561565357600080fd5b818801915088601f83011261566757600080fd5b81358181111561567657600080fd5b89602082850101111561568857600080fd5b9699959850939650602001949392505050565b600080604083850312156156ae57600080fd5b82356156b981615519565b946020939093013593505050565b600080604083850312156156da57600080fd5b8235915060208301356156ec81615519565b809150509250929050565b60006020828403121561570957600080fd5b5035919050565b600080600080600060a0868803121561572857600080fd5b853594506020860135935060408601359250606086013561574881615519565b949793965091946080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261579957600080fd5b8135602067ffffffffffffffff808311156157b6576157b6615759565b8260051b604051601f19603f830116810181811084821117156157db576157db615759565b6040529384528581018301938381019250878511156157f957600080fd5b83870191505b84821015615818578135835291830191908301906157ff565b979650505050505050565b6000806040838503121561583657600080fd5b823567ffffffffffffffff81111561584d57600080fd5b61585985828601615788565b92505060208301356156ec81615519565b8015158114611cd857600080fd5b60006020828403121561588a57600080fd5b81356132db8161586a565b600080604083850312156158a857600080fd5b82356156b98161586a565b600060208083528351808285015260005b818110156158e0578581018301518582016040015282016158c4565b818111156158f2576000604083870101525b50601f01601f1916929092016040019392505050565b600080600080600060a0868803121561592057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060006060848603121561595857600080fd5b83359250602084013561596a81615519565b9150604084013561597a8161586a565b809150509250925092565b60008060006060848603121561599a57600080fd5b8335925060208401359150604084013567ffffffffffffffff8111156159bf57600080fd5b6159cb86828701615788565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a4657615a46615a04565b500190565b600082821015615a5d57615a5d615a04565b500390565b604080825283519082018190526000906020906060840190828701845b82811015615a9b57815184529284019290840190600101615a7f565b50505073ffffffffffffffffffffffffffffffffffffffff9490941692019190915250919050565b600060208284031215615ad557600080fd5b81516132db8161586a565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615b1157615b11615a04565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615b5057615b50615a04565b500290565b600082615b8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060208284031215615bd157600080fd5b81516132db81615519565b600060208284031215615bee57600080fd5b505191905056fea2646970667358221220737b8f82400d9d87c399d3ef12433e536f042466d433c0e4d183da6386b9a30c64736f6c634300080f00330000000000000000000000005c76eb054b1b06a725be1715fbed9560ce5dba13
Deployed Bytecode
0x6080604052600436106102a45760003560e01c80638456cb591161016e578063b453a187116100cb578063ec5a82e41161007f578063f2fde38b11610064578063f2fde38b14610884578063f7b188a5146108a4578063f8fc08b9146108b957600080fd5b8063ec5a82e414610851578063eff350641461087157600080fd5b8063c80229c1116100b0578063c80229c1146107fe578063d0c4cab614610811578063d547741f1461083157600080fd5b8063b453a187146107be578063bb32fbb1146107de57600080fd5b8063a2e30f1511610122578063a865e8ce11610107578063a865e8ce1461075e578063a93e05231461077e578063b06113fe1461079e57600080fd5b8063a2e30f15146106bd578063a4ca8c7a1461073e57600080fd5b80638e699bc8116101535780638e699bc81461065057806399b1d9581461067d57806399d9af521461069d57600080fd5b80638456cb59146105eb5780638da5cb5b1461060057600080fd5b8063453875a01161021c57806368888dc3116101d0578063715018a6116101b5578063715018a61461059657806378174ec5146105ab57806381cdf766146105cb57600080fd5b806368888dc31461055657806369322c131461057657600080fd5b806350690fc01161020157806350690fc0146104c65780635c975abb146104e65780636721aa221461050a57600080fd5b8063453875a0146104935780634a30d3eb146104a657600080fd5b80631c8050c7116102735780632f2ff15d116102585780632f2ff15d1461043357806335aa134a146104535780633b2896651461047357600080fd5b80631c8050c7146103f1578063225891381461041357600080fd5b806304238994146102db57806312065fe014610311578063150b7a021461032e57806315914247146103a457600080fd5b366102d65760405133907f15382559391789f1865e10e9c8b51327a9cb0381eae89973ada229e7a78c08f390600090a2005b600080fd5b3480156102e757600080fd5b506102fb6102f636600461553b565b6108f4565b6040516103089190615558565b60405180910390f35b34801561031d57600080fd5b50475b604051908152602001610308565b34801561033a57600080fd5b506103736103493660046155fc565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610308565b3480156103b057600080fd5b506103c46103bf36600461569b565b610ab1565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610308565b3480156103fd57600080fd5b5061041161040c36600461553b565b610e20565b005b34801561041f57600080fd5b5061041161042e3660046156c7565b610f10565b34801561043f57600080fd5b5061041161044e3660046156c7565b6110f7565b34801561045f57600080fd5b5061041161046e3660046156f7565b6111ae565b34801561047f57600080fd5b5061041161048e36600461553b565b61125c565b6104116104a1366004615710565b611387565b3480156104b257600080fd5b506104116104c136600461553b565b61159f565b3480156104d257600080fd5b506104116104e1366004615823565b61168f565b3480156104f257600080fd5b50600c5460ff165b6040519015158152602001610308565b34801561051657600080fd5b50610411610525366004615878565b600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b34801561056257600080fd5b506104116105713660046156f7565b61178a565b34801561058257600080fd5b50610411610591366004615895565b611838565b3480156105a257600080fd5b50610411611900565b3480156105b757600080fd5b506104116105c6366004615823565b611914565b3480156105d757600080fd5b506104116105e636600461553b565b611b26565b3480156105f757600080fd5b50610411611c20565b34801561060c57600080fd5b50600c54610100900473ffffffffffffffffffffffffffffffffffffffff1660405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610308565b34801561065c57600080fd5b5061067061066b3660046156f7565b611cdb565b60405161030891906158b3565b34801561068957600080fd5b506104116106983660046156f7565b6124c1565b3480156106a957600080fd5b506104116106b8366004615878565b61256f565b3480156106c957600080fd5b506104116106d8366004615908565b60009485526013602090815260408087208151608081018352968752868301958652908601938452606086019283528054600181810183559188529190962094516004909102909401938455915193830193909355915160028201559051600390910155565b34801561074a57600080fd5b50610411610759366004615878565b612664565b34801561076a57600080fd5b506104116107793660046156f7565b612758565b34801561078a57600080fd5b506104116107993660046156c7565b612806565b3480156107aa57600080fd5b506104116107b9366004615878565b612953565b3480156107ca57600080fd5b506104116107d9366004615943565b612a46565b3480156107ea57600080fd5b506104116107f93660046156f7565b612b4f565b61041161080c36600461569b565b612bfd565b34801561081d57600080fd5b5061032061082c36600461553b565b612e44565b34801561083d57600080fd5b5061041161084c3660046156c7565b612f6c565b34801561085d57600080fd5b5061041161086c3660046156f7565b61301e565b61041161087f366004615985565b6130cc565b34801561089057600080fd5b5061041161089f36600461553b565b613141565b3480156108b057600080fd5b506104116131db565b3480156108c557600080fd5b506104fa6108d43660046156c7565b600a60209081526000928352604080842090915290825290205460ff1681565b604080516020810190915260608152604080516020808201835273ffffffffffffffffffffffffffffffffffffffff85166000908152600b90915291822054600980548392908110610948576109486159d5565b9060005260206000209060020201600101805480602002602001604051908101604052809291908181526020016000905b82821015610a015760008481526020908190206040805160e08101825260078602909201805473ffffffffffffffffffffffffffffffffffffffff168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460c08301529083529092019101610979565b505050915250905060005b815151811015610aaa576000610a3e83600001518381518110610a3157610a316159d5565b6020026020010151613293565b9050610a748184600001518481518110610a5a57610a5a6159d5565b602002602001015160a001516132cf90919063ffffffff16565b8351805184908110610a8857610a886159d5565b602090810291909101015160a0015250610aa3600182615a33565b9050610a0c565b5092915050565b6000806000806000806001600454610ac99190615a4b565b871115610b1d5760405162461bcd60e51b815260206004820152601360248201527f496e646578206f7574206f662072616e67652e0000000000000000000000000060448201526064015b60405180910390fd5b604080516020808201835273ffffffffffffffffffffffffffffffffffffffff8b166000908152600b90915291822054600980548392908110610b6257610b626159d5565b9060005260206000209060020201600101805480602002602001604051908101604052809291908181526020016000905b82821015610c1b5760008481526020908190206040805160e08101825260078602909201805473ffffffffffffffffffffffffffffffffffffffff168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460c08301529083529092019101610b93565b505050915250805151909150610c735760405162461bcd60e51b815260206004820152601460248201527f4e6f2061637469766520706f736974696f6e732e0000000000000000000000006044820152606401610b14565b8051518810610cc45760405162461bcd60e51b815260206004820152601060248201527f496e646578206e6f742076616c69642e000000000000000000000000000000006044820152606401610b14565b60005b815151811015610d3e576000610cec83600001518381518110610a3157610a316159d5565b9050610d088184600001518481518110610a5a57610a5a6159d5565b8351805184908110610d1c57610d1c6159d5565b602090810291909101015160a0015250610d37600182615a33565b9050610cc7565b508051805189908110610d5357610d536159d5565b60200260200101516020015181600001518981518110610d7557610d756159d5565b60200260200101516040015182600001518a81518110610d9757610d976159d5565b60200260200101516060015183600001518b81518110610db957610db96159d5565b60200260200101516080015184600001518c81518110610ddb57610ddb6159d5565b602002602001015160a0015185600001518d81518110610dfd57610dfd6159d5565b602002602001015160c00151965096509650965096509650509295509295509295565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff16610ec85760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600260005403610f625760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b14565b6002600055610f6f6132e2565b6040517f434c41494d000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166110175760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b8247116110665760405162461bcd60e51b815260206004820152601360248201527f4e6f7420656e6f7567682062616c616e63652e000000000000000000000000006044820152606401610b14565b60405173ffffffffffffffffffffffffffffffffffffffff83169084156108fc029085906000818181858888f193505050501580156110a9573d6000803e3d6000fd5b5060405173ffffffffffffffffffffffffffffffffffffffff83169084907f6aa3eac93d079e5e100b1029be716caa33586c96aa4baac390669fb5c2a2121290600090a35050600160005550565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff1661119f5760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b6111a98383613335565b505050565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166112565760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600755565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166113045760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905560118054919092049092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055565b6002600054036113d95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b14565b60026000556040517f4558454300000000000000000000000000000000000000000000000000000000602082015260240160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166114865760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b61148e6132e2565b6000611499866133bb565b60208101518151604083015160608401519394509192909190818b108015906114c25750808b11155b61150e5760405162461bcd60e51b815260206004820152601260248201527f56616c7565206e6f7420696e2072616e676500000000000000000000000000006044820152606401610b14565b600d5461151c9088906134ab565b611531606461152b8e886134ab565b906134b7565b111561157f5760405162461bcd60e51b815260206004820152601060248201527f4e6f7420656e6f756768204b6579732e000000000000000000000000000000006044820152606401610b14565b61158d8b85858b8d8c6134c3565b50506001600055505050505050505050565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166116475760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6116976132e2565b600f5473ffffffffffffffffffffffffffffffffffffffff166116fc5760405162461bcd60e51b815260206004820152601760248201527f44656c656761746564204275726e206e6f74207365742e0000000000000000006044820152606401610b14565b6012546040517f50690fc000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906350690fc0906117549085908590600401615a62565b600060405180830381600087803b15801561176e57600080fd5b505af1158015611782573d6000803e3d6000fd5b505050505050565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166118325760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600455565b60026000540361188a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b14565b60026000556118976132e2565b6118a1338261370c565b6118ed5760405162461bcd60e51b815260206004820152601460248201527f4e6f2061637469766520706f736974696f6e732e0000000000000000000000006044820152606401610b14565b6118f7828261389e565b50506001600055565b611908614463565b61191260006144d0565b565b61191c6132e2565b61dead60005b8351811015611b20576011546040517fe985e9c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301529091169063e985e9c590604401602060405180830381865afa1580156119a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c59190615ac3565b1515600114611a3c5760405162461bcd60e51b815260206004820152603160248201527f4275726e4b6579733a20436f6e7472616374206973206e6f7420617070726f7660448201527f656420746f207370656e64204b6579732e0000000000000000000000000000006064820152608401610b14565b601154845173ffffffffffffffffffffffffffffffffffffffff909116906342842e0e9085908590889086908110611a7657611a766159d5565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015611af557600080fd5b505af1158015611b09573d6000803e3d6000fd5b505050508080611b1890615ae0565b915050611922565b50505050565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff16611bce5760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600f805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790915560128054909216179055565b611c286132e2565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff16611cd05760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b611cd861454e565b50565b336000908152600b602052604090205460609080611d3b5760405162461bcd60e51b815260206004820152601760248201527f41646472657373206e6f7420726567697374657265642e0000000000000000006044820152606401610b14565b6001600454611d4a9190615a4b565b831115611d995760405162461bcd60e51b815260206004820152601360248201527f496e646578206f7574206f662072616e67652e000000000000000000000000006044820152606401610b14565b600060098281548110611dae57611dae6159d5565b90600052602060002090600202016001018481548110611dd057611dd06159d5565b60009182526020918290206040805160e0810182526007909302909101805473ffffffffffffffffffffffffffffffffffffffff16835260018101549383018490526002810154918301919091526003810154606083015260048101546080830152600581015460a08301526006015460c08201529150611e935760405162461bcd60e51b815260206004820152601460248201527f4e6f2061637469766520706f736974696f6e732e0000000000000000000000006044820152606401610b14565b6000611e9e82613293565b905060008111611ef05760405162461bcd60e51b815260206004820152601160248201527f526577617264206e6f742072656164792e0000000000000000000000000000006044820152606401610b14565b611f4b60025460098581548110611f0957611f096159d5565b90600052602060002090600202016001018781548110611f2b57611f2b6159d5565b9060005260206000209060070201600601546134ab90919063ffffffff16565b612051611fa78360098781548110611f6557611f656159d5565b90600052602060002090600202016001018981548110611f8757611f876159d5565b9060005260206000209060070201600501546132cf90919063ffffffff16565b61204b606461152b60098981548110611fc257611fc26159d5565b90600052602060002090600202016001018b81548110611fe457611fe46159d5565b90600052602060002090600702016003015460098a81548110612009576120096159d5565b90600052602060002090600202016001018c8154811061202b5761202b6159d5565b9060005260206000209060070201600101546134ab90919063ffffffff16565b906132cf565b116124845760006120f76009858154811061206e5761206e6159d5565b90600052602060002090600202016001018781548110612090576120906159d5565b906000526020600020906007020160020154600986815481106120b5576120b56159d5565b906000526020600020906002020160010188815481106120d7576120d76159d5565b9060005260206000209060070201600401546145d390919063ffffffff16565b9050426009858154811061210d5761210d6159d5565b9060005260206000209060020201600101878154811061212f5761212f6159d5565b600091825260209091206002600790920201015561214d42826132cf565b60098581548110612160576121606159d5565b90600052602060002090600202016001018781548110612182576121826159d5565b9060005260206000209060070201600401819055506121d082600986815481106121ae576121ae6159d5565b90600052602060002090600202016001018881548110611f8757611f876159d5565b600985815481106121e3576121e36159d5565b90600052602060002090600202016001018781548110612205576122056159d5565b9060005260206000209060070201600501819055507fd0dbdf5a9c6f6230b05ec9279bf9c69ad874fceb6c427e3a79ad9d08951abe276009858154811061224e5761224e6159d5565b90600052602060002090600202016001018781548110612270576122706159d5565b60009182526020909120600790910201546009805473ffffffffffffffffffffffffffffffffffffffff90921691879081106122ae576122ae6159d5565b906000526020600020906002020160010188815481106122d0576122d06159d5565b906000526020600020906007020160010154600987815481106122f5576122f56159d5565b90600052602060002090600202016001018981548110612317576123176159d5565b9060005260206000209060070201600201546009888154811061233c5761233c6159d5565b90600052602060002090600202016001018a8154811061235e5761235e6159d5565b90600052602060002090600702016005015460098981548110612383576123836159d5565b90600052602060002090600202016001018b815481106123a5576123a56159d5565b90600052602060002090600702016004015460098a815481106123ca576123ca6159d5565b90600052602060002090600202016001018c815481106123ec576123ec6159d5565b6000918252602091829020600660079092020101546040805173ffffffffffffffffffffffffffffffffffffffff9098168852918701959095528501929092526060840152608083015260a082015260c00160405180910390a1505060408051808201909152600981527f457874656e6465642e00000000000000000000000000000000000000000000006020820152949350505050565b505060408051808201909152601a81527f4e6f7420656e6f75676820616c6c6f77616e6365206c6566742e00000000000060208201529392505050565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166125695760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600255565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166126175760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b5060088054911515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff1661270c5760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600880549115157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166128005760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600555565b6002600054036128585760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b14565b60026000556040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166129055760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b60405173ffffffffffffffffffffffffffffffffffffffff83169084156108fc029085906000818181858888f19350505050158015612948573d6000803e3d6000fd5b505060016000555050565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166129fb5760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b506008805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff16612aee5760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b612af8838561370c565b612b445760405162461bcd60e51b815260206004820152601260248201527f4e6f7468696e6720617661696c61626c652e00000000000000000000000000006044820152606401610b14565b611b208484846145df565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff16612bf75760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600d55565b6040517f4558454300000000000000000000000000000000000000000000000000000000602082015260240160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff16612ca55760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b600260005403612cf75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b14565b6002600055612d046132e2565b60105473ffffffffffffffffffffffffffffffffffffffff16612d695760405162461bcd60e51b815260206004820152601760248201527f436c61696d20436f6e7472616374206e6f74207365742e0000000000000000006044820152606401610b14565b6010546040517fcafd84b400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590529091169063cafd84b49034906044016000604051808303818588803b158015612dde57600080fd5b505af1158015612df2573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871693508592507f6aa3eac93d079e5e100b1029be716caa33586c96aa4baac390669fb5c2a212129150600090a35050600160005550565b60008060405180602001604052806009600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110612ea457612ea46159d5565b9060005260206000209060020201600101805480602002602001604051908101604052809291908181526020016000905b82821015612f5d5760008481526020908190206040805160e08101825260078602909201805473ffffffffffffffffffffffffffffffffffffffff168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460c08301529083529092019101612ed5565b50505091525051519392505050565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166130145760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b6111a98383614a00565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff166130c65760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b50600655565b60026000540361311e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b14565b600260005561312b6132e2565b61313783838333614a83565b5050600160005550565b613149614463565b73ffffffffffffffffffffffffffffffffffffffff81166131d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b14565b611cd8816144d0565b6131e3614cac565b6040517f41444d494e000000000000000000000000000000000000000000000000000000602082015260250160408051601f1981840301815291815281516020928301206000818152600a845282812033825290935291205460ff1661328b5760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420617574686f72697a65642e00000000000000000000000000000000006044820152606401610b14565b611cd8614cfe565b600081608001514211156132c7576132c1606461152b846060015185602001516134ab90919063ffffffff16565b92915050565b506000919050565b60006132db8284615a33565b9392505050565b600c5460ff16156119125760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b14565b6000828152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551909184917f5a06360d65acf95e98445dc834f205063424c636e65418d928cdfabc33a953999190a35050565b6133e66040518060800160405280600081526020016000815260200160008152602001600081525090565b6000828152601360205260409020546134415760405162461bcd60e51b815260206004820152600a60248201527f4e6f205061636b616765000000000000000000000000000000000000000000006044820152606401610b14565b60008281526013602052604081208054829061345f5761345f6159d5565b9060005260206000209060040201604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382015481525050905080915050919050565b60006132db8284615b18565b60006132db8284615b55565b6134cc83614d55565b6135185760405162461bcd60e51b815260206004820152601360248201527f4d6178206f70656e20706f736974696f6e732e000000000000000000000000006044820152606401610b14565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b60205260408120549083908290036135545761355185614e94565b91505b600184905561356384876132cf565b600355600980548390811061357a5761357a6159d5565b90600052602060002090600202016001016040518060e001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200183815260200189815260200160035481526020016000815260200185815250908060018154018082558091505060019003906000526020600020906007020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015550508473ffffffffffffffffffffffffffffffffffffffff167fc16be9a586414a157dd46b4d023aa9997a025dd1cbbaa67ac0c1b8273a5eaf558984848b600354896040516136fa96959493929190958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60405180910390a25050505050505050565b6000600160045461371d9190615a4b565b82111561376c5760405162461bcd60e51b815260206004820152601360248201527f496e646578206f7574206f662072616e67652e000000000000000000000000006044820152606401610b14565b604080516020808201835273ffffffffffffffffffffffffffffffffffffffff86166000908152600b909152918220546009805483929081106137b1576137b16159d5565b9060005260206000209060020201600101805480602002602001604051908101604052809291908181526020016000905b8282101561386a5760008481526020908190206040805160e08101825260078602909201805473ffffffffffffffffffffffffffffffffffffffff168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460c083015290835290920191016137e2565b50505091525080515190915015801590613885575080515183105b156138945760019150506132c1565b5060009392505050565b336000908152600b602052604081205490816138fc5760405162461bcd60e51b815260206004820152601760248201527f41646472657373206e6f7420726567697374657265642e0000000000000000006044820152606401610b14565b600160045461390b9190615a4b565b83111561395a5760405162461bcd60e51b815260206004820152601360248201527f496e646578206f7574206f662072616e67652e000000000000000000000000006044820152606401610b14565b60006009838154811061396f5761396f6159d5565b90600052602060002090600202016001018481548110613991576139916159d5565b60009182526020918290206040805160e0810182526007909302909101805473ffffffffffffffffffffffffffffffffffffffff16835260018101549383018490526002810154918301919091526003810154606083015260048101546080830152600581015460a08301526006015460c08201529150613a545760405162461bcd60e51b815260206004820152601460248201527f4e6f2061637469766520706f736974696f6e732e0000000000000000000000006044820152606401610b14565b814711613aa35760405162461bcd60e51b815260206004820152601360248201527f4e6f7420656e6f7567682062616c616e63652e000000000000000000000000006044820152606401610b14565b8060800151421015613af75760405162461bcd60e51b815260206004820152601060248201527f4e6f74206d617475726564207965742e000000000000000000000000000000006044820152606401610b14565b6000613b10613b0583613293565b60a0840151906132cf565b905060008111613b625760405162461bcd60e51b815260206004820152601060248201527f436c61696d206e6f742072656164792e000000000000000000000000000000006044820152606401610b14565b6020820151600090613b7490836132cf565b905086613b845781935083613b89565b809350835b50600754841015613bdc5760405162461bcd60e51b815260206004820152601b60248201527f416d6f756e74206973206c657373207468616e206d696e696d756d00000000006044820152606401610b14565b6008547501000000000000000000000000000000000000000000900460ff168015613d005750613c3d60025460098781548110613c1b57613c1b6159d5565b90600052602060002090600202016001018881548110611f2b57611f2b6159d5565b613cfd613c798460098981548110613c5757613c576159d5565b90600052602060002090600202016001018a81548110611f8757611f876159d5565b61204b606461152b60098b81548110613c9457613c946159d5565b90600052602060002090600202016001018c81548110613cb657613cb66159d5565b90600052602060002090600702016003015460098c81548110613cdb57613cdb6159d5565b90600052602060002090600202016001018d8154811061202b5761202b6159d5565b11155b1561416e57600554613d618560098881548110613d1f57613d1f6159d5565b90600052602060002090600202016001018981548110613d4157613d416159d5565b9060005260206000209060070201600101546145d390919063ffffffff16565b1015613f5b57613dbd6040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b925060098581548110613dd257613dd26159d5565b9060005260206000209060020201600101600160098781548110613df857613df86159d5565b906000526020600020906002020160010180549050613e179190615a4b565b81548110613e2757613e276159d5565b60009182526020918290206040805160e0810182526007909302909101805473ffffffffffffffffffffffffffffffffffffffff1683526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460c0820152600980549194509086908110613eb457613eb46159d5565b9060005260206000209060020201600101805480613ed457613ed4615b90565b60008281526020812060077fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019283020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001810182905560028101829055600381018290556004810182905560058101829055600601559055614101565b613f948460098781548110613f7257613f726159d5565b90600052602060002090600202016001018881548110613d4157613d416159d5565b60098681548110613fa757613fa76159d5565b90600052602060002090600202016001018781548110613fc957613fc96159d5565b906000526020600020906007020160010181905550600061405f60098781548110613ff657613ff66159d5565b90600052602060002090600202016001018881548110614018576140186159d5565b9060005260206000209060070201600201546009888154811061403d5761403d6159d5565b906000526020600020906002020160010189815481106120d7576120d76159d5565b90504260098781548110614075576140756159d5565b90600052602060002090600202016001018881548110614097576140976159d5565b60009182526020909120600260079092020101556140b542826132cf565b600987815481106140c8576140c86159d5565b906000526020600020906002020160010188815481106140ea576140ea6159d5565b906000526020600020906007020160040181905550505b604051339085156108fc029086906000818181858888f1935050505015801561412e573d6000803e3d6000fd5b506040805185815242602082015233917f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc6910160405180910390a261445a565b60098581548110614181576141816159d5565b906000526020600020906002020160010186815481106141a3576141a36159d5565b60009182526020822060079091020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001810182905560028101829055600381018290556004810182905560058101829055600601556009805486908110614213576142136159d5565b9060005260206000209060020201600101600160098781548110614239576142396159d5565b9060005260206000209060020201600101805490506142589190615a4b565b81548110614268576142686159d5565b906000526020600020906007020160098681548110614289576142896159d5565b906000526020600020906002020160010187815481106142ab576142ab6159d5565b60009182526020909120825460079092020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911781556001808301549082015560028083015490820155600380830154908201556004808301549082015560058083015490820155600691820154910155600980548690811061434e5761434e6159d5565b906000526020600020906002020160010180548061436e5761436e615b90565b60008281526020812060077fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019283020180547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560018101829055600281018290556003810182905560048101829055600581018290556006018190559155604051339186156108fc02918791818181858888f1935050505015801561441d573d6000803e3d6000fd5b506040805185815242602082015233917f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc691015b60405180910390a25b50505050505050565b600c5473ffffffffffffffffffffffffffffffffffffffff6101009091041633146119125760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b14565b600c805473ffffffffffffffffffffffffffffffffffffffff8381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff85161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6145566132e2565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586145a93390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60006132db8284615a4b565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600b6020526040812054600980549192918390811061461c5761461c6159d5565b9060005260206000209060020201600101858154811061463e5761463e6159d5565b600091825260208083206040805160e0810182526007909402909101805473ffffffffffffffffffffffffffffffffffffffff1684526001810154928401929092526002820154908301526003810154606083015260048101546080830152600581015460a08301526006015460c082015291506146be613b0583613293565b905060006146d98284602001516132cf90919063ffffffff16565b9050600984815481106146ee576146ee6159d5565b90600052602060002090600202016001018781548110614710576147106159d5565b60009182526020822060079091020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001810182905560028101829055600381018290556004810182905560058101829055600601556009805485908110614780576147806159d5565b90600052602060002090600202016001016001600986815481106147a6576147a66159d5565b9060005260206000209060020201600101805490506147c59190615a4b565b815481106147d5576147d56159d5565b9060005260206000209060070201600985815481106147f6576147f66159d5565b90600052602060002090600202016001018881548110614818576148186159d5565b60009182526020909120825460079092020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091178155600180830154908201556002808301549082015560038083015490820155600480830154908201556005808301549082015560069182015491015560098054859081106148bb576148bb6159d5565b90600052602060002090600202016001018054806148db576148db615b90565b60008281526020812060077fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019283020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001810182905560028101829055600381018290556004810182905560058101829055600601559055841561445a57804710156149b35760405162461bcd60e51b815260206004820152601360248201527f4e6f7420656e6f7567682062616c616e63652e000000000000000000000000006044820152606401610b14565b60405173ffffffffffffffffffffffffffffffffffffffff87169082156108fc029083906000818181858888f193505050501580156149f6573d6000803e3d6000fd5b5050505050505050565b6000828152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551909184917f76e6093c136cd7faa5a6d92b2b633f3b4595abd4a529b7a13917398355fea6949190a35050565b6000614a8e846133bb565b60208101518151604083015160608401519394509192909190818910801590614ab75750808911155b614b035760405162461bcd60e51b815260206004820152601860248201527f5374616b652076616c7565206e6f7420696e2072616e676500000000000000006044820152606401610b14565b883414614b525760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420616d6f756e742073656e742e0000000000000000000000006044820152606401610b14565b614b5c8787614f2f565b1515600114614bad5760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420616c6c204b657973206f776e656420627920616464726573732e00006044820152606401610b14565b6001614bb7615088565b1015614c055760405162461bcd60e51b815260206004820152601460248201527f416464726573732068617665206e6f204b65792e0000000000000000000000006044820152606401610b14565b600d548751614c13916134ab565b614c22606461152b8c886134ab565b1115614c705760405162461bcd60e51b815260206004820152601060248201527f4e6f7420656e6f756768204b6579732e000000000000000000000000000000006044820152606401610b14565b600e5460ff16614c8957614c848787611914565b614c93565b614c93878761168f565b614ca1898585898b5161518c565b505050505050505050565b600c5460ff166119125760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b14565b614d06614cac565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336145a9565b60008060405180602001604052806009600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110614db557614db56159d5565b9060005260206000209060020201600101805480602002602001604051908101604052809291908181526020016000905b82821015614e6e5760008481526020908190206040805160e08101825260078602909201805473ffffffffffffffffffffffffffffffffffffffff168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a08401526006015460c08301529083529092019101614de6565b50505091525060045481515191925011614e8b5750600092915050565b50600192915050565b60098054600190810180835560009283528291614eb091615a4b565b90508260098281548110614ec657614ec66159d5565b6000918252602080832060029290920290910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055949091168152600b90935260409092208290555090565b600e54600090610100900473ffffffffffffffffffffffffffffffffffffffff16614f9c5760405162461bcd60e51b815260206004820152601560248201527f4b657920436f6e7472616374206e6f74207365742e00000000000000000000006044820152606401610b14565b60005b835181101561507e57601154845173ffffffffffffffffffffffffffffffffffffffff808616921690636352211e90879085908110614fe057614fe06159d5565b60200260200101516040518263ffffffff1660e01b815260040161500691815260200190565b602060405180830381865afa158015615023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150479190615bbf565b73ffffffffffffffffffffffffffffffffffffffff161461506c5760009150506132c1565b8061507681615ae0565b915050614f9f565b5060019392505050565b600e54600090610100900473ffffffffffffffffffffffffffffffffffffffff166150f55760405162461bcd60e51b815260206004820152601560248201527f4b657920436f6e7472616374206e6f74207365742e00000000000000000000006044820152606401610b14565b6011546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015615163573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151879190615bdc565b905090565b60085473ffffffffffffffffffffffffffffffffffffffff166151f15760405162461bcd60e51b815260206004820152601860248201527f5374616b696e67206163636f756e74206e6f74207365742e00000000000000006044820152606401610b14565b6151fa82614d55565b6152465760405162461bcd60e51b815260206004820152601360248201527f4d6178206f70656e20706f736974696f6e732e000000000000000000000000006044820152606401610b14565b60085474010000000000000000000000000000000000000000900460ff16156152b25760085460405173ffffffffffffffffffffffffffffffffffffffff9091169086156108fc029087906000818181858888f193505050501580156152b0573d6000803e3d6000fd5b505b600854760100000000000000000000000000000000000000000000900460ff16156153365760085460065473ffffffffffffffffffffffffffffffffffffffff909116906108fc9061530c9060649061152b908a906134ab565b6040518115909202916000818181858888f19350505050158015615334573d6000803e3d6000fd5b505b73ffffffffffffffffffffffffffffffffffffffff82166000908152600b60205260408120549042908290036153725761536f84614e94565b91505b42600181905561538290866132cf565b6003556009805483908110615399576153996159d5565b90600052602060002090600202016001016040518060e001604052808673ffffffffffffffffffffffffffffffffffffffff16815260200189815260200183815260200188815260200160035481526020016000815260200185815250908060018154018082558091505060019003906000526020600020906007020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015550508373ffffffffffffffffffffffffffffffffffffffff167fc16be9a586414a157dd46b4d023aa9997a025dd1cbbaa67ac0c1b8273a5eaf558884848a6003548960405161445196959493929190958652602086019490945260408501929092526060840152608083015260a082015260c00190565b73ffffffffffffffffffffffffffffffffffffffff81168114611cd857600080fd5b60006020828403121561554d57600080fd5b81356132db81615519565b60006020808352604080840185518384870152818151808452606093508388019150858301925060005b818110156155ee578351805173ffffffffffffffffffffffffffffffffffffffff1684528781015188850152868101518785015285810151868501526080808201519085015260a0808201519085015260c090810151908401529286019260e090920191600101615582565b509098975050505050505050565b60008060008060006080868803121561561457600080fd5b853561561f81615519565b9450602086013561562f81615519565b935060408601359250606086013567ffffffffffffffff8082111561565357600080fd5b818801915088601f83011261566757600080fd5b81358181111561567657600080fd5b89602082850101111561568857600080fd5b9699959850939650602001949392505050565b600080604083850312156156ae57600080fd5b82356156b981615519565b946020939093013593505050565b600080604083850312156156da57600080fd5b8235915060208301356156ec81615519565b809150509250929050565b60006020828403121561570957600080fd5b5035919050565b600080600080600060a0868803121561572857600080fd5b853594506020860135935060408601359250606086013561574881615519565b949793965091946080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261579957600080fd5b8135602067ffffffffffffffff808311156157b6576157b6615759565b8260051b604051601f19603f830116810181811084821117156157db576157db615759565b6040529384528581018301938381019250878511156157f957600080fd5b83870191505b84821015615818578135835291830191908301906157ff565b979650505050505050565b6000806040838503121561583657600080fd5b823567ffffffffffffffff81111561584d57600080fd5b61585985828601615788565b92505060208301356156ec81615519565b8015158114611cd857600080fd5b60006020828403121561588a57600080fd5b81356132db8161586a565b600080604083850312156158a857600080fd5b82356156b98161586a565b600060208083528351808285015260005b818110156158e0578581018301518582016040015282016158c4565b818111156158f2576000604083870101525b50601f01601f1916929092016040019392505050565b600080600080600060a0868803121561592057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060006060848603121561595857600080fd5b83359250602084013561596a81615519565b9150604084013561597a8161586a565b809150509250925092565b60008060006060848603121561599a57600080fd5b8335925060208401359150604084013567ffffffffffffffff8111156159bf57600080fd5b6159cb86828701615788565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a4657615a46615a04565b500190565b600082821015615a5d57615a5d615a04565b500390565b604080825283519082018190526000906020906060840190828701845b82811015615a9b57815184529284019290840190600101615a7f565b50505073ffffffffffffffffffffffffffffffffffffffff9490941692019190915250919050565b600060208284031215615ad557600080fd5b81516132db8161586a565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615b1157615b11615a04565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615b5057615b50615a04565b500290565b600082615b8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060208284031215615bd157600080fd5b81516132db81615519565b600060208284031215615bee57600080fd5b505191905056fea2646970667358221220737b8f82400d9d87c399d3ef12433e536f042466d433c0e4d183da6386b9a30c64736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005c76eb054b1b06a725be1715fbed9560ce5dba13
-----Decoded View---------------
Arg [0] : _newAdmin (address): 0x5C76Eb054B1b06A725be1715fbED9560cE5DbA13
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000005c76eb054b1b06a725be1715fbed9560ce5dba13
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.