Polygon Sponsored slots available. Book your slot here!
More Info
Private Name Tags
ContractCreator:
Latest 25 from a total of 8,194 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 52576409 | 67 days ago | IN | 0 MATIC | 0.00177272 | ||||
Withdraw | 45997471 | 235 days ago | IN | 0 MATIC | 0.00534982 | ||||
Withdraw | 45568339 | 245 days ago | IN | 0 MATIC | 0.00458898 | ||||
Withdraw | 44621445 | 269 days ago | IN | 0 MATIC | 0.00682194 | ||||
Withdraw | 44621373 | 269 days ago | IN | 0 MATIC | 0.00683865 | ||||
Withdraw | 44620563 | 269 days ago | IN | 0 MATIC | 0.00790277 | ||||
Withdraw | 44620349 | 269 days ago | IN | 0 MATIC | 0.00804782 | ||||
Withdraw | 44620289 | 269 days ago | IN | 0 MATIC | 0.00723122 | ||||
Withdraw | 44620065 | 269 days ago | IN | 0 MATIC | 0.00745311 | ||||
Withdraw | 44619952 | 269 days ago | IN | 0 MATIC | 0.00673716 | ||||
Withdraw | 44619817 | 269 days ago | IN | 0 MATIC | 0.00783091 | ||||
Withdraw | 44619589 | 269 days ago | IN | 0 MATIC | 0.00856189 | ||||
Withdraw | 44619100 | 269 days ago | IN | 0 MATIC | 0.00670438 | ||||
Withdraw | 42486099 | 324 days ago | IN | 0 MATIC | 0.01519892 | ||||
Withdraw | 41663942 | 345 days ago | IN | 0 MATIC | 0.01839516 | ||||
Withdraw | 40255784 | 382 days ago | IN | 0 MATIC | 0.00760639 | ||||
Withdraw | 39803959 | 394 days ago | IN | 0 MATIC | 0.02115516 | ||||
Withdraw | 39788901 | 394 days ago | IN | 0 MATIC | 0.01983785 | ||||
Withdraw | 38073729 | 439 days ago | IN | 0 MATIC | 0.00668849 | ||||
Withdraw | 38025950 | 440 days ago | IN | 0 MATIC | 0.00730032 | ||||
Transfer Ownersh... | 37871939 | 444 days ago | IN | 0 MATIC | 0.00173283 | ||||
Withdraw | 37142517 | 462 days ago | IN | 0 MATIC | 0.01346326 | ||||
Withdraw | 36955661 | 467 days ago | IN | 0 MATIC | 0.00170682 | ||||
Withdraw | 33834892 | 543 days ago | IN | 0 MATIC | 0.00221982 | ||||
Withdraw | 33649947 | 548 days ago | IN | 0 MATIC | 0.0017125 |
Loading...
Loading
Contract Name:
GoodGhostingPolygon
Compiler Version
v0.6.11+commit.5ef660b1
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-03-17 */ // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ 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) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { 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) { // 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) { 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) { 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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @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) { require(b <= a, "SafeMath: subtraction overflow"); 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) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @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. 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) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); 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) { require(b > 0, "SafeMath: modulo by zero"); 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) { 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. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * 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) { 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) { require(b > 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/aave/ILendingPoolAddressesProvider.sol pragma solidity 0.6.11; /** @title ILendingPoolAddressesProvider interface @notice provides the interface to fetch the LendingPoolCore address */ abstract contract ILendingPoolAddressesProvider { function getLendingPool() public virtual view returns (address); function setLendingPoolImpl(address _pool) public virtual; function getAddress(bytes32 id) public virtual view returns (address); function getLendingPoolCore() public virtual view returns (address payable); function setLendingPoolCoreImpl(address _lendingPoolCore) public virtual; function getLendingPoolConfigurator() public virtual view returns (address); function setLendingPoolConfiguratorImpl(address _configurator) public virtual; function getLendingPoolDataProvider() public virtual view returns (address); function setLendingPoolDataProviderImpl(address _provider) public virtual; function getLendingPoolParametersProvider() public virtual view returns (address); function setLendingPoolParametersProviderImpl(address _parametersProvider) public virtual; function getTokenDistributor() public virtual view returns (address); function setTokenDistributor(address _tokenDistributor) public virtual; function getFeeProvider() public virtual view returns (address); function setFeeProviderImpl(address _feeProvider) public virtual; function getLendingPoolLiquidationManager() public virtual view returns (address); function setLendingPoolLiquidationManager(address _manager) public virtual; function getLendingPoolManager() public virtual view returns (address); function setLendingPoolManager(address _lendingPoolManager) public virtual; function getPriceOracle() public virtual view returns (address); function setPriceOracle(address _priceOracle) public virtual; function getLendingRateOracle() public virtual view returns (address); function setLendingRateOracle(address _lendingRateOracle) public virtual; } // File: contracts/aave/ILendingPool.sol pragma solidity 0.6.11; interface ILendingPool { function deposit(address _reserve, uint256 _amount, address onBehalfOf, uint16 _referralCode) external; //see: https://github.com/aave/aave-protocol/blob/1ff8418eb5c73ce233ac44bfb7541d07828b273f/contracts/tokenization/AToken.sol#L218 function withdraw(address asset, uint amount, address to) external; } interface AaveProtocolDataProvider { function getReserveTokensAddresses(address asset) external view returns(address, address, address); } // File: contracts/aave/AToken.sol pragma solidity 0.6.11; interface AToken { /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); } // File: contracts/aave/IncentiveController.sol pragma solidity 0.6.11; interface IncentiveController { function getRewardsBalance(address[] calldata assets, address user) external view returns(uint256); function claimRewards( address[] calldata assets, uint256 amount, address to ) external returns (uint256); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity >=0.6.0 <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 GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/contracts/utils/Pausable.sol pragma solidity >=0.6.0 <0.8.0; /** * @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 () internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { 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()); } } // File: contracts/GoodGhosting.sol pragma solidity 0.6.11; /// @title GoodGhosting Game Contract /// @notice Used for games deployed on Ethereum Mainnet using Aave (v2) as the underlying pool, or for games deployed on Celo using Moola (v2) as the underlying pool /// @author Francis Odisi & Viraz Malhotra contract GoodGhosting is Ownable, Pausable { using SafeMath for uint256; /// @notice Ownership Control flag bool public allowRenouncingOwnership = false; /// @notice Controls if tokens were redeemed or not from the pool bool public redeemed; /// @notice controls if admin withdrew or not the performance fee. bool public adminWithdraw; /// @notice Address of the token used for depositing into the game by players (DAI) IERC20 public immutable daiToken; /// @notice Address of the interest bearing token received when funds are transferred to the external pool AToken public immutable adaiToken; /// @notice Which Aave instance we use to swap DAI to interest bearing aDAI ILendingPoolAddressesProvider public immutable lendingPoolAddressProvider; /// @notice Lending pool address ILendingPool public lendingPool; /// @notice Defines an optional token address used to provide additional incentives to users. Accepts "0x0" adresses when no incentive token exists. IERC20 public immutable incentiveToken; /// @notice total amount of incentive tokens to be distributed among winners uint256 public totalIncentiveAmount = 0; /// @notice Controls the amount of active players in the game (ignores players that early withdraw) uint256 public activePlayersCount = 0; /// @notice Stores the total amount of net interest received in the game. uint256 public totalGameInterest; /// @notice total principal amount uint256 public totalGamePrincipal; /// @notice performance fee amount allocated to the admin uint256 public adminFeeAmount; /// @notice The amount to be paid on each segment uint256 public immutable segmentPayment; /// @notice The number of segments in the game (segment count) uint256 public immutable lastSegment; /// @notice When the game started (deployed timestamp) uint256 public immutable firstSegmentStart; /// @notice The time duration (in seconds) of each segment uint256 public immutable segmentLength; /// @notice Defines the max quantity of players allowed in the game uint256 public immutable maxPlayersCount; /// @notice winner counter to track no of winners uint256 public winnerCount = 0; /// @notice The early withdrawal fee (percentage) uint8 public immutable earlyWithdrawalFee; /// @notice The performance admin fee (percentage) uint8 public immutable customFee; struct Player { bool withdrawn; bool canRejoin; bool isWinner; address addr; uint256 mostRecentSegmentPaid; uint256 amountPaid; uint256 winnerIndex; } /// @notice Stores info about the players in the game mapping(address => Player) public players; /// @notice controls the amount deposited in each segment that was not yet transferred to the external underlying pool /// @notice list of players address[] public iterablePlayers; /// @notice list of winners address[] public winners; event JoinedGame(address indexed player, uint256 amount); event Deposit( address indexed player, uint256 indexed segment, uint256 amount ); event Withdrawal( address indexed player, uint256 amount, uint256 playerReward, uint256 playerIncentive ); event FundsRedeemedFromExternalPool( uint256 totalAmount, uint256 totalGamePrincipal, uint256 totalGameInterest, uint256 rewards, uint256 totalIncentiveAmount ); event WinnersAnnouncement(address[] winners); event EarlyWithdrawal( address indexed player, uint256 amount, uint256 totalGamePrincipal ); event AdminWithdrawal( address indexed admin, uint256 totalGameInterest, uint256 adminFeeAmount, uint256 adminIncentiveAmount ); modifier whenGameIsCompleted() { require(isGameCompleted(), "Game is not completed"); _; } modifier whenGameIsNotCompleted() { require(!isGameCompleted(), "Game is already completed"); _; } /** Creates a new instance of GoodGhosting game @param _inboundCurrency Smart contract address of inbound currency used for the game. @param _lendingPoolAddressProvider Smart contract address of the lending pool adddress provider. @param _segmentCount Number of segments in the game. @param _segmentLength Lenght of each segment, in seconds (i.e., 180 (sec) => 3 minutes). @param _segmentPayment Amount of tokens each player needs to contribute per segment (i.e. 10*10**18 equals to 10 DAI - note that DAI uses 18 decimal places). @param _earlyWithdrawalFee Fee paid by users on early withdrawals (before the game completes). Used as an integer percentage (i.e., 10 represents 10%). @param _customFee performance fee charged by admin. Used as an integer percentage (i.e., 10 represents 10%). Does not accept "decimal" fees like "0.5". @param _dataProvider id for getting the data provider contract address 0x1 to be passed. @param _maxPlayersCount max quantity of players allowed to join the game @param _incentiveToken optional token address used to provide additional incentives to users. Accepts "0x0" adresses when no incentive token exists. */ constructor( IERC20 _inboundCurrency, ILendingPoolAddressesProvider _lendingPoolAddressProvider, uint256 _segmentCount, uint256 _segmentLength, uint256 _segmentPayment, uint8 _earlyWithdrawalFee, uint8 _customFee, address _dataProvider, uint256 _maxPlayersCount, IERC20 _incentiveToken ) public { require(_customFee <= 20, "_customFee must be less than or equal to 20%"); require(_earlyWithdrawalFee <= 10, "_earlyWithdrawalFee must be less than or equal to 10%"); require(_earlyWithdrawalFee > 0, "_earlyWithdrawalFee must be greater than zero"); require(_maxPlayersCount > 0, "_maxPlayersCount must be greater than zero"); require(address(_inboundCurrency) != address(0), "invalid _inboundCurrency address"); require(address(_lendingPoolAddressProvider) != address(0), "invalid _lendingPoolAddressProvider address"); require(_segmentCount > 0, "_segmentCount must be greater than zero"); require(_segmentLength > 0, "_segmentLength must be greater than zero"); require(_segmentPayment > 0, "_segmentPayment must be greater than zero"); require(_dataProvider != address(0), "invalid _dataProvider address"); // Initializes default variables firstSegmentStart = block.timestamp; //gets current time lastSegment = _segmentCount; segmentLength = _segmentLength; segmentPayment = _segmentPayment; earlyWithdrawalFee = _earlyWithdrawalFee; customFee = _customFee; daiToken = _inboundCurrency; lendingPoolAddressProvider = _lendingPoolAddressProvider; AaveProtocolDataProvider dataProvider = AaveProtocolDataProvider(_dataProvider); // lending pool needs to be approved in v2 since it is the core contract in v2 and not lending pool core lendingPool = ILendingPool( _lendingPoolAddressProvider.getLendingPool() ); // atoken address in v2 is fetched from data provider contract (address adaiTokenAddress, , ) = dataProvider.getReserveTokensAddresses(address(_inboundCurrency)); adaiToken = AToken(adaiTokenAddress); maxPlayersCount = _maxPlayersCount; incentiveToken = _incentiveToken; } /// @notice pauses the game. This function can be called only by the contract's admin. function pause() external onlyOwner whenNotPaused { _pause(); } /// @notice unpauses the game. This function can be called only by the contract's admin. function unpause() external onlyOwner whenPaused { _unpause(); } /// @notice Renounces Ownership. function renounceOwnership() public override onlyOwner { require(allowRenouncingOwnership, "Not allowed"); super.renounceOwnership(); } /// @notice Unlocks renounceOwnership. function unlockRenounceOwnership() external onlyOwner { allowRenouncingOwnership = true; } /// @notice Allows the admin to withdraw the performance fee, if applicable. This function can be called only by the contract's admin. /// @dev Cannot be called before the game ends. function adminFeeWithdraw() external virtual onlyOwner whenGameIsCompleted { require(redeemed, "Funds not redeemed from external pool"); require(!adminWithdraw, "Admin has already withdrawn"); adminWithdraw = true; // when there are no winners, admin will be able to withdraw the // additional incentives sent to the pool, avoiding locking the funds. uint256 adminIncentiveAmount = 0; if (winnerCount == 0 && totalIncentiveAmount > 0) { adminIncentiveAmount = totalIncentiveAmount; } emit AdminWithdrawal(owner(), totalGameInterest, adminFeeAmount, adminIncentiveAmount); if (adminFeeAmount > 0) { require( IERC20(daiToken).transfer(owner(), adminFeeAmount), "Fail to transfer ER20 tokens to admin" ); } if (adminIncentiveAmount > 0) { require( IERC20(incentiveToken).transfer(owner(), adminIncentiveAmount), "Fail to transfer ER20 incentive tokens to admin" ); } } /// @notice Allows a player to join the game function joinGame() external virtual whenNotPaused { _joinGame(); } /// @notice Allows a player to withdraw funds before the game ends. An early withdrawal fee is charged. /// @dev Cannot be called after the game is completed. function earlyWithdraw() external whenNotPaused whenGameIsNotCompleted { Player storage player = players[msg.sender]; require(player.amountPaid > 0, "Player does not exist"); require(!player.withdrawn, "Player has already withdrawn"); player.withdrawn = true; activePlayersCount = activePlayersCount.sub(1); if (winnerCount > 0 && player.isWinner) { winnerCount = winnerCount.sub(uint(1)); player.isWinner = false; winners[player.winnerIndex] = address(0); } // In an early withdraw, users get their principal minus the earlyWithdrawalFee % defined in the constructor. uint256 withdrawAmount = player.amountPaid.sub( player.amountPaid.mul(earlyWithdrawalFee).div(100) ); // Decreases the totalGamePrincipal on earlyWithdraw totalGamePrincipal = totalGamePrincipal.sub(player.amountPaid); uint256 currentSegment = getCurrentSegment(); // Users that early withdraw during the first segment, are allowed to rejoin. if (currentSegment == 0) { player.canRejoin = true; } emit EarlyWithdrawal(msg.sender, withdrawAmount, totalGamePrincipal); lendingPool.withdraw(address(daiToken), withdrawAmount, address(this)); require( IERC20(daiToken).transfer(msg.sender, withdrawAmount), "Fail to transfer ERC20 tokens on early withdraw" ); } /// @notice Allows player to withdraw their funds after the game ends with no loss (fee). Winners get a share of the interest earned. function withdraw() external virtual { Player storage player = players[msg.sender]; require(player.amountPaid > 0, "Player does not exist"); require(!player.withdrawn, "Player has already withdrawn"); player.withdrawn = true; // First player to withdraw redeems everyone's funds if (!redeemed) { redeemFromExternalPool(); } uint256 payout = player.amountPaid; uint256 playerIncentive = 0; if (player.mostRecentSegmentPaid == lastSegment.sub(1)) { // Player is a winner and gets a bonus! payout = payout.add(totalGameInterest.div(winnerCount)); // If there's additional incentives, distributes them to winners if (totalIncentiveAmount > 0) { playerIncentive = totalIncentiveAmount.div(winnerCount); } } emit Withdrawal(msg.sender, payout, 0, playerIncentive); require( IERC20(daiToken).transfer(msg.sender, payout), "Fail to transfer ERC20 tokens on withdraw" ); if (playerIncentive > 0) { require( IERC20(incentiveToken).transfer(msg.sender, playerIncentive), "Fail to transfer ERC20 incentive tokens on withdraw" ); } } /// @notice Allows players to make deposits for the game segments, after joining the game. function makeDeposit() external whenNotPaused { Player storage player = players[msg.sender]; require( !player.withdrawn, "Player already withdraw from game" ); // only registered players can deposit require( player.addr == msg.sender, "Sender is not a player" ); uint256 currentSegment = getCurrentSegment(); // User can only deposit between segment 1 and segment n-1 (where n is the number of segments for the game). // Details: // Segment 0 is paid when user joins the game (the first deposit window). // Last segment doesn't accept payments, because the payment window for the last // segment happens on segment n-1 (penultimate segment). // Any segment greater than the last segment means the game is completed, and cannot // receive payments require( currentSegment > 0 && currentSegment < lastSegment, "Deposit available only between segment 1 and segment n-1 (penultimate)" ); //check if current segment is currently unpaid require( player.mostRecentSegmentPaid != currentSegment, "Player already paid current segment" ); // check if player has made payments up to the previous segment require( player.mostRecentSegmentPaid == currentSegment.sub(1), "Player didn't pay the previous segment - game over!" ); emit Deposit(msg.sender, currentSegment, segmentPayment); _transferDaiToContract(); } /// @notice gets the number of players in the game /// @return number of players function getNumberOfPlayers() external view returns (uint256) { return iterablePlayers.length; } /// @notice Redeems funds from the external pool and updates the internal accounting controls related to the game stats. /// @dev Can only be called after the game is completed. function redeemFromExternalPool() public virtual whenGameIsCompleted { require(!redeemed, "Redeem operation already happened for the game"); redeemed = true; // Withdraws funds (principal + interest + rewards) from external pool if (adaiToken.balanceOf(address(this)) > 0) { lendingPool.withdraw( address(daiToken), type(uint256).max, address(this) ); } uint256 totalBalance = IERC20(daiToken).balanceOf(address(this)); // If there's an incentive token address defined, sets the total incentive amount to be distributed among winners. if (address(incentiveToken) != address(0)) { totalIncentiveAmount = IERC20(incentiveToken).balanceOf(address(this)); } // calculates gross interest uint256 grossInterest = 0; // Sanity check to avoid reverting due to overflow in the "subtraction" below. // This could only happen in case Aave changes the 1:1 ratio between // aToken vs. Token in the future (i.e., 1 aDAI is worth less than 1 DAI) if (totalBalance > totalGamePrincipal) { grossInterest = totalBalance.sub(totalGamePrincipal); } // calculates the performance/admin fee (takes a cut - the admin percentage fee - from the pool's interest). // calculates the "gameInterest" (net interest) that will be split among winners in the game uint256 _adminFeeAmount; if (customFee > 0) { _adminFeeAmount = (grossInterest.mul(customFee)).div(100); totalGameInterest = grossInterest.sub(_adminFeeAmount); } else { _adminFeeAmount = 0; totalGameInterest = grossInterest; } // when there's no winners, admin takes all the interest + rewards if (winnerCount == 0) { adminFeeAmount = grossInterest; } else { adminFeeAmount = _adminFeeAmount; } emit FundsRedeemedFromExternalPool( totalBalance, totalGamePrincipal, totalGameInterest, 0, totalIncentiveAmount ); emit WinnersAnnouncement(winners); } /// @notice Calculates the current segment of the game. /// @return current game segment function getCurrentSegment() public view returns (uint256) { return block.timestamp.sub(firstSegmentStart).div(segmentLength); } /// @notice Checks if the game is completed or not. /// @return "true" if completeted; otherwise, "false". function isGameCompleted() public view returns (bool) { // Game is completed when the current segment is greater than "lastSegment" of the game. return getCurrentSegment() > lastSegment; } /** @dev Manages the transfer of funds from the player to the contract, recording the required accounting operations to control the user's position in the pool. */ function _transferDaiToContract() internal { require( daiToken.allowance(msg.sender, address(this)) >= segmentPayment, "You need to have allowance to do transfer DAI on the smart contract" ); uint256 currentSegment = getCurrentSegment(); players[msg.sender].mostRecentSegmentPaid = currentSegment; players[msg.sender].amountPaid = players[msg.sender].amountPaid.add( segmentPayment ); // check if this is deposit for the last segment. If yes, the player is a winner. // since both join game and deposit method call this method so having it here if (currentSegment == lastSegment.sub(1)) { winners.push(msg.sender); // array indexes start from 0 players[msg.sender].winnerIndex = winners.length.sub(uint(1)); winnerCount = winnerCount.add(uint(1)); players[msg.sender].isWinner = true; } totalGamePrincipal = totalGamePrincipal.add(segmentPayment); require( daiToken.transferFrom(msg.sender, address(this), segmentPayment), "Transfer failed" ); // Allows the lending pool to convert DAI deposited on this contract to aDAI on lending pool uint256 contractBalance = daiToken.balanceOf(address(this)); require( daiToken.approve(address(lendingPool), contractBalance), "Fail to approve allowance to lending pool" ); lendingPool.deposit(address(daiToken), contractBalance, address(this), 155); } /// @notice Allows a player to join the game and controls function _joinGame() internal { require(getCurrentSegment() == 0, "Game has already started"); require( players[msg.sender].addr != msg.sender || players[msg.sender].canRejoin, "Cannot join the game more than once" ); activePlayersCount = activePlayersCount.add(1); require(activePlayersCount <= maxPlayersCount, "Reached max quantity of players allowed"); bool canRejoin = players[msg.sender].canRejoin; Player memory newPlayer = Player({ addr: msg.sender, mostRecentSegmentPaid: 0, amountPaid: 0, withdrawn: false, canRejoin: false, isWinner: false, winnerIndex: 0 }); players[msg.sender] = newPlayer; if (!canRejoin) { iterablePlayers.push(msg.sender); } emit JoinedGame(msg.sender, segmentPayment); _transferDaiToContract(); } } // File: contracts/GoodGhostingPolygon.sol pragma solidity 0.6.11; /// @title GoodGhosting Game Contract /// @author Francis Odisi & Viraz Malhotra /// @notice Used for the games deployed on Polygon using Aave as the underlying external pool. contract GoodGhostingPolygon is GoodGhosting { IncentiveController public incentiveController; IERC20 public immutable matic; uint256 public rewardsPerPlayer; /** Creates a new instance of GoodGhosting game @param _inboundCurrency Smart contract address of inbound currency used for the game. @param _lendingPoolAddressProvider Smart contract address of the lending pool adddress provider. @param _segmentCount Number of segments in the game. @param _segmentLength Lenght of each segment, in seconds (i.e., 180 (sec) => 3 minutes). @param _segmentPayment Amount of tokens each player needs to contribute per segment (i.e. 10*10**18 equals to 10 DAI - note that DAI uses 18 decimal places). @param _earlyWithdrawalFee Fee paid by users on early withdrawals (before the game completes). Used as an integer percentage (i.e., 10 represents 10%). Does not accept "decimal" fees like "0.5". @param _customFee performance fee charged by admin. Used as an integer percentage (i.e., 10 represents 10%). Does not accept "decimal" fees like "0.5". @param _dataProvider id for getting the data provider contract address 0x1 to be passed. @param _maxPlayersCount max quantity of players allowed to join the game @param _incentiveToken optional token address used to provide additional incentives to users. Accepts "0x0" adresses when no incentive token exists. @param _incentiveController matic reward claim contract. @param _matic matic token address. */ constructor( IERC20 _inboundCurrency, ILendingPoolAddressesProvider _lendingPoolAddressProvider, uint256 _segmentCount, uint256 _segmentLength, uint256 _segmentPayment, uint8 _earlyWithdrawalFee, uint8 _customFee, address _dataProvider, uint256 _maxPlayersCount, IERC20 _incentiveToken, address _incentiveController, IERC20 _matic ) public GoodGhosting( _inboundCurrency, _lendingPoolAddressProvider, _segmentCount, _segmentLength, _segmentPayment, _earlyWithdrawalFee, _customFee, _dataProvider, _maxPlayersCount, _incentiveToken ) { require(_incentiveController != address(0), "invalid _incentiveController address"); require(address(_matic) != address(0), "invalid _matic address"); // initializing incentiveController contract incentiveController = IncentiveController(_incentiveController); matic = _matic; } /// @notice Allows the admin to withdraw the performance fee, if applicable. This function can be called only by the contract's admin. /// @dev Cannot be called before the game ends. function adminFeeWithdraw() external override onlyOwner whenGameIsCompleted { require(redeemed, "Funds not redeemed from external pool"); require(!adminWithdraw, "Admin has already withdrawn"); adminWithdraw = true; // when there are no winners, admin will be able to withdraw the // additional incentives sent to the pool, avoiding locking the funds. uint256 adminIncentiveAmount = 0; if (winnerCount == 0 && totalIncentiveAmount > 0) { adminIncentiveAmount = totalIncentiveAmount; } emit AdminWithdrawal(owner(), totalGameInterest, adminFeeAmount, adminIncentiveAmount); if (adminFeeAmount > 0) { require( IERC20(daiToken).transfer(owner(), adminFeeAmount), "Fail to transfer ER20 tokens to admin" ); } if (adminIncentiveAmount > 0) { require( IERC20(incentiveToken).transfer(owner(), adminIncentiveAmount), "Fail to transfer ER20 incentive tokens to admin" ); } if (rewardsPerPlayer == 0) { uint256 balance = IERC20(matic).balanceOf(address(this)); require( IERC20(matic).transfer(owner(), balance), "Fail to transfer ERC20 rewards tokens to admin" ); } } /// @notice Allows player to withdraw their funds after the game ends with no loss (fee). Winners get a share of the interest earned. function withdraw() external override { Player storage player = players[msg.sender]; require(player.amountPaid > 0, "Player does not exist"); require(!player.withdrawn, "Player has already withdrawn"); player.withdrawn = true; // First player to withdraw redeems everyone's funds if (!redeemed) { redeemFromExternalPool(); } uint256 payout = player.amountPaid; uint256 playerIncentive = 0; uint256 playerReward = 0; if (player.mostRecentSegmentPaid == lastSegment.sub(1)) { // Player is a winner and gets a bonus! payout = payout.add(totalGameInterest.div(winnerCount)); playerReward = rewardsPerPlayer; // If there's additional incentives, distributes them to winners if (totalIncentiveAmount > 0) { playerIncentive = totalIncentiveAmount.div(winnerCount); } } emit Withdrawal(msg.sender, payout, playerReward, playerIncentive); require( IERC20(daiToken).transfer(msg.sender, payout), "Fail to transfer ERC20 tokens on withdraw" ); if (playerIncentive > 0) { require( IERC20(incentiveToken).transfer(msg.sender, playerIncentive), "Fail to transfer ERC20 incentive tokens on withdraw" ); } if (playerReward > 0) { require( IERC20(matic).transfer(msg.sender, playerReward), "Fail to transfer ERC20 rewards on withdraw" ); } } /// @notice Redeems funds from the external pool and updates the internal accounting controls related to the game stats. /// @dev Can only be called after the game is completed. function redeemFromExternalPool() public override whenGameIsCompleted { require(!redeemed, "Redeem operation already happened for the game"); redeemed = true; // Withdraws funds (principal + interest + rewards) from external pool if (adaiToken.balanceOf(address(this)) > 0) { lendingPool.withdraw( address(daiToken), type(uint256).max, address(this) ); // Claims the rewards from the external pool address[] memory assets = new address[](1); assets[0] = address(adaiToken); uint256 claimableRewards = incentiveController.getRewardsBalance( assets, address(this) ); if (claimableRewards > 0) { incentiveController.claimRewards( assets, claimableRewards, address(this) ); } } uint256 totalBalance = IERC20(daiToken).balanceOf(address(this)); uint256 rewardsAmount = IERC20(matic).balanceOf(address(this)); // If there's an incentive token address defined, sets the total incentive amount to be distributed among winners. if (address(incentiveToken) != address(0)) { totalIncentiveAmount = IERC20(incentiveToken).balanceOf(address(this)); } // calculates gross interest uint256 grossInterest = 0; // Sanity check to avoid reverting due to overflow in the "subtraction" below. // This could only happen in case Aave changes the 1:1 ratio between // aToken vs. Token in the future (i.e., 1 aDAI is worth less than 1 DAI) if (totalBalance > totalGamePrincipal) { grossInterest = totalBalance.sub(totalGamePrincipal); } // calculates the performance/admin fee (takes a cut - the admin percentage fee - from the pool's interest). // calculates the "gameInterest" (net interest) that will be split among winners in the game uint256 _adminFeeAmount; if (customFee > 0) { _adminFeeAmount = (grossInterest.mul(customFee)).div(100); totalGameInterest = grossInterest.sub(_adminFeeAmount); } else { _adminFeeAmount = 0; totalGameInterest = grossInterest; } // when there's no winners, admin takes all the interest + rewards if (winnerCount == 0) { rewardsPerPlayer = 0; adminFeeAmount = grossInterest; } else { rewardsPerPlayer = rewardsAmount.div(winnerCount); adminFeeAmount = _adminFeeAmount; } emit FundsRedeemedFromExternalPool( totalBalance, totalGamePrincipal, totalGameInterest, rewardsAmount, totalIncentiveAmount ); emit WinnersAnnouncement(winners); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_inboundCurrency","type":"address"},{"internalType":"contract ILendingPoolAddressesProvider","name":"_lendingPoolAddressProvider","type":"address"},{"internalType":"uint256","name":"_segmentCount","type":"uint256"},{"internalType":"uint256","name":"_segmentLength","type":"uint256"},{"internalType":"uint256","name":"_segmentPayment","type":"uint256"},{"internalType":"uint8","name":"_earlyWithdrawalFee","type":"uint8"},{"internalType":"uint8","name":"_customFee","type":"uint8"},{"internalType":"address","name":"_dataProvider","type":"address"},{"internalType":"uint256","name":"_maxPlayersCount","type":"uint256"},{"internalType":"contract IERC20","name":"_incentiveToken","type":"address"},{"internalType":"address","name":"_incentiveController","type":"address"},{"internalType":"contract IERC20","name":"_matic","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalGameInterest","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"adminFeeAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"adminIncentiveAmount","type":"uint256"}],"name":"AdminWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"segment","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalGamePrincipal","type":"uint256"}],"name":"EarlyWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalGamePrincipal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalGameInterest","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewards","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalIncentiveAmount","type":"uint256"}],"name":"FundsRedeemedFromExternalPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"JoinedGame","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"winners","type":"address[]"}],"name":"WinnersAnnouncement","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"playerReward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"playerIncentive","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[],"name":"activePlayersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adaiToken","outputs":[{"internalType":"contract AToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminFeeWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminWithdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowRenouncingOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"customFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daiToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyWithdrawalFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstSegmentStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentSegment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfPlayers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incentiveController","outputs":[{"internalType":"contract IncentiveController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incentiveToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isGameCompleted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"iterablePlayers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"joinGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastSegment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lendingPool","outputs":[{"internalType":"contract ILendingPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lendingPoolAddressProvider","outputs":[{"internalType":"contract ILendingPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"makeDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"matic","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPlayersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"","type":"address"}],"name":"players","outputs":[{"internalType":"bool","name":"withdrawn","type":"bool"},{"internalType":"bool","name":"canRejoin","type":"bool"},{"internalType":"bool","name":"isWinner","type":"bool"},{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"mostRecentSegmentPaid","type":"uint256"},{"internalType":"uint256","name":"amountPaid","type":"uint256"},{"internalType":"uint256","name":"winnerIndex","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeemFromExternalPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redeemed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsPerPlayer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"segmentLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"segmentPayment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalGameInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalGamePrincipal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalIncentiveAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockRenounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"winnerCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"winners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
61020060405260008060156101000a81548160ff0219169083151502179055506000600255600060035560006007553480156200003b57600080fd5b5060405162005d0338038062005d0383398181016040526101808110156200006257600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508b8b8b8b8b8b8b8b8b8b6000620000fd62000a9b60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060008060146101000a81548160ff02191690831515021790555060148460ff16111562000214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018062005b84602c913960400191505060405180910390fd5b600a8560ff16111562000273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603581526020018062005c7f6035913960400191505060405180910390fd5b60008560ff1611620002d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d81526020018062005c02602d913960400191505060405180910390fd5b600082116200032c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018062005bb0602a913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415620003d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f696e76616c6964205f696e626f756e6443757272656e6379206164647265737381525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16141562000458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018062005cb4602b913960400191505060405180910390fd5b60008811620004b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018062005c2f6027913960400191505060405180910390fd5b600087116200050e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018062005bda6028913960400191505060405180910390fd5b6000861162000569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018062005c566029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200060d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f696e76616c6964205f6461746150726f7669646572206164647265737300000081525060200191505060405180910390fd5b4261014081815250508761012081815250508661016081815250508561010081815250508460ff166101a08160ff1660f81b815250508360ff166101c08160ff1660f81b815250508973ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508873ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060008390508973ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200070f57600080fd5b505afa15801562000724573d6000803e3d6000fd5b505050506040513d60208110156200073b57600080fd5b8101908080519060200190929190505050600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008173ffffffffffffffffffffffffffffffffffffffff1663d2493b6c8d6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060606040518083038186803b1580156200080c57600080fd5b505afa15801562000821573d6000803e3d6000fd5b505050506040513d60608110156200083857600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505090508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508361018081815250508273ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505050505050505050505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018062005cdf6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000a10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f696e76616c6964205f6d6174696320616464726573730000000000000000000081525060200191505060405180910390fd5b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff166101e08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505050505050505050505050505062000aa3565b600033905090565b60805160601c60a05160601c60c05160601c60e05160601c61010051610120516101405161016051610180516101a05160f81c6101c05160f81c6101e05160601c614f8d62000bf760003980611596528061203e52806126c652806127a052806133c1525080611c2952806135f8528061362a525080610d145280611069525080611de252806148a35250806120bd5280612c565250806116d45280612c7a5250806109b852806112275280611a2d52806120885280613dae5250806109945280611bab5280613b175280613cf15280613f215280613f975280614b7a5250806114555280611c77528061257a52806134b352806134ef525080611c53525080611fde5280612dba5280613019525080610e565280610f2d5280611315528061206252806124305280612ed652806132e55280613b385280613f59528061410352806141dd52806143745250614f8d6000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c80638da5cb5b11610151578063d30858f1116100c3578063f18d20be11610087578063f18d20be146108dc578063f2fde38b146108fe578063f4ceab1c14610942578063f5c978671461094c578063f8dd5ad31461096a578063fd6673f51461097457610269565b8063d30858f1146107ce578063d4f77b1c146107ec578063e0236a18146107f6578063e231bff014610800578063e2eb41ff1461082257610269565b8063aad739f511610115578063aad739f51461066e578063b6b0b097146106dc578063be22f54614610726578063c39b583c14610770578063caa02e0814610792578063d013666e146107b057610269565b80638da5cb5b1461050457806395224b331461054e578063a2fb11751461056c578063a59a9973146105da578063a98a5c941461062457610269565b80635c975abb116101ea5780636a79328a116101ae5780636a79328a14610474578063715018a6146104925780637a23032c1461049c5780637c80e6da146104ba5780637e5f8476146104d85780638456cb59146104fa57610269565b80635c975abb1461037c5780635edafd5a1461039e5780635faeea37146103c257806363380300146103e0578063638126f81461042a57610269565b80633ccfd60b116102315780633ccfd60b146102f65780633e7433eb146103005780633f4ba83a1461031e57806340732c89146103285780635b9fe37f1461033257610269565b80630c8ac6451461026e57806311b2e2d91461028c57806315d74bb3146102aa57806316330d40146102b4578063250a2b0d146102d8575b600080fd5b610276610992565b6040518082815260200191505060405180910390f35b6102946109b6565b6040518082815260200191505060405180910390f35b6102b26109da565b005b6102bc611067565b604051808260ff1660ff16815260200191505060405180910390f35b6102e061108b565b6040518082815260200191505060405180910390f35b6102fe611091565b005b6103086116d2565b6040518082815260200191505060405180910390f35b6103266116f6565b005b610330611829565b005b61033a611beb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610384611c11565b604051808215151515815260200191505060405180910390f35b6103a6611c27565b604051808260ff1660ff16815260200191505060405180910390f35b6103ca611c4b565b6040518082815260200191505060405180910390f35b6103e8611c51565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610432611c75565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61047c611c99565b6040518082815260200191505060405180910390f35b61049a611c9f565b005b6104a4611dda565b6040518082815260200191505060405180910390f35b6104c2611de0565b6040518082815260200191505060405180910390f35b6104e0611e04565b604051808215151515815260200191505060405180910390f35b610502611e17565b005b61050c611f4b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610556611f74565b6040518082815260200191505060405180910390f35b6105986004803603602081101561058257600080fd5b8101908080359060200190929190505050611f7a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105e2611fb6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61062c611fdc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61069a6004803603602081101561068457600080fd5b8101908080359060200190929190505050612000565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106e461203c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61072e612060565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610778612084565b604051808215151515815260200191505060405180910390f35b61079a6120b5565b6040518082815260200191505060405180910390f35b6107b86120bb565b6040518082815260200191505060405180910390f35b6107d66120df565b6040518082815260200191505060405180910390f35b6107f46120e5565b005b6107fe61216a565b005b6108086128e1565b604051808215151515815260200191505060405180910390f35b6108646004803603602081101561083857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128f4565b604051808815151515815260200187151515158152602001861515151581526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200197505050505050505060405180910390f35b6108e461297d565b604051808215151515815260200191505060405180910390f35b6109406004803603602081101561091457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612990565b005b61094a612b83565b005b610954612c4f565b6040518082815260200191505060405180910390f35b610972612cbb565b005b61097c6137e6565b6040518082815260200191505060405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6109e2611c11565b15610a55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b610a5d612084565b15610ad0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f47616d6520697320616c726561647920636f6d706c657465640000000000000081525060200191505060405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816002015411610b8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f506c6179657220646f6573206e6f74206578697374000000000000000000000081525060200191505060405180910390fd5b8060000160009054906101000a900460ff1615610c12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506c617965722068617320616c72656164792077697468647261776e0000000081525060200191505060405180910390fd5b60018160000160006101000a81548160ff021916908315150217905550610c4560016003546137f390919063ffffffff16565b6003819055506000600754118015610c6b57508060000160029054906101000a900460ff165b15610d0557610c8660016007546137f390919063ffffffff16565b60078190555060008160000160026101000a81548160ff0219169083151502179055506000600a826003015481548110610cbc57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6000610d6a610d576064610d497f000000000000000000000000000000000000000000000000000000000000000060ff16866002015461387690919063ffffffff16565b6138fc90919063ffffffff16565b83600201546137f390919063ffffffff16565b9050610d8582600201546005546137f390919063ffffffff16565b6005819055506000610d95612c4f565b90506000811415610dbe5760018360000160016101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f1670585e36568ede58d159518ce92cad99f75ad41c7d8281df3dd4eaa0c855d083600554604051808381526020018281526020019250505060405180910390a2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166369328dec7f000000000000000000000000000000000000000000000000000000000000000084306040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b158015610f1357600080fd5b505af1158015610f27573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610fd257600080fd5b505af1158015610fe6573d6000803e3d6000fd5b505050506040513d6020811015610ffc57600080fd5b8101908080519060200190929190505050611062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614c3b602f913960400191505060405180910390fd5b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60035481565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600201541161114e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f506c6179657220646f6573206e6f74206578697374000000000000000000000081525060200191505060405180910390fd5b8060000160009054906101000a900460ff16156111d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506c617965722068617320616c72656164792077697468647261776e0000000081525060200191505060405180910390fd5b60018160000160006101000a81548160ff021916908315150217905550600060169054906101000a900460ff1661120d5761120c612cbb565b5b6000816002015490506000809050600080905061125460017f00000000000000000000000000000000000000000000000000000000000000006137f390919063ffffffff16565b846001015414156112b5576112886112796007546004546138fc90919063ffffffff16565b8461398590919063ffffffff16565b9250600c549050600060025411156112b4576112b16007546002546138fc90919063ffffffff16565b91505b5b3373ffffffffffffffffffffffffffffffffffffffff167f650fdf669e93aa6c8ff3defe2da9c12b64f1548e5e1e54e803f4c1beb6466c8e84838560405180848152602001838152602001828152602001935050505060405180910390a27f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113ba57600080fd5b505af11580156113ce573d6000803e3d6000fd5b505050506040513d60208110156113e457600080fd5b810190808051906020019092919050505061144a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614d776029913960400191505060405180910390fd5b600082111561158b577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156114fa57600080fd5b505af115801561150e573d6000803e3d6000fd5b505050506040513d602081101561152457600080fd5b810190808051906020019092919050505061158a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180614ef26033913960400191505060405180910390fd5b5b60008111156116cc577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561163b57600080fd5b505af115801561164f573d6000803e3d6000fd5b505050506040513d602081101561166557600080fd5b81019080805190602001909291905050506116cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614dc1602a913960400191505060405180910390fd5b5b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6116fe613a0d565b73ffffffffffffffffffffffffffffffffffffffff1661171c611f4b565b73ffffffffffffffffffffffffffffffffffffffff16146117a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6117ad611c11565b61181f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b611827613a15565b565b611831611c11565b156118a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000160009054906101000a900460ff161561194f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614e8b6021913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168160000160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53656e646572206973206e6f74206120706c617965720000000000000000000081525060200191505060405180910390fd5b6000611a1e612c4f565b9050600081118015611a4f57507f000000000000000000000000000000000000000000000000000000000000000081105b611aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526046815260200180614ce36046913960600191505060405180910390fd5b8082600101541415611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614ecf6023913960400191505060405180910390fd5b611b156001826137f390919063ffffffff16565b826001015414611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180614f256033913960400191505060405180910390fd5b803373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a157f00000000000000000000000000000000000000000000000000000000000000006040518082815260200191505060405180910390a3611be7613b15565b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060149054906101000a900460ff16905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b60055481565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025481565b611ca7613a0d565b73ffffffffffffffffffffffffffffffffffffffff16611cc5611f4b565b73ffffffffffffffffffffffffffffffffffffffff1614611d4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600060159054906101000a900460ff16611dd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f7420616c6c6f77656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b611dd861445a565b565b60065481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600060159054906101000a900460ff1681565b611e1f613a0d565b73ffffffffffffffffffffffffffffffffffffffff16611e3d611f4b565b73ffffffffffffffffffffffffffffffffffffffff1614611ec6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611ece611c11565b15611f41576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b611f496145c8565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60045481565b600a8181548110611f8757fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6009818154811061200d57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f00000000000000000000000000000000000000000000000000000000000000006120af612c4f565b11905090565b60075481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5481565b6120ed611c11565b15612160576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6121686146ca565b565b612172613a0d565b73ffffffffffffffffffffffffffffffffffffffff16612190611f4b565b73ffffffffffffffffffffffffffffffffffffffff1614612219576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612221612084565b612293576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f47616d65206973206e6f7420636f6d706c65746564000000000000000000000081525060200191505060405180910390fd5b600060169054906101000a900460ff166122f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614d296025913960400191505060405180910390fd5b600060179054906101000a900460ff161561237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f41646d696e2068617320616c72656164792077697468647261776e000000000081525060200191505060405180910390fd5b6001600060176101000a81548160ff021916908315150217905550600080905060006007541480156123af57506000600254115b156123ba5760025490505b6123c2611f4b565b73ffffffffffffffffffffffffffffffffffffffff167f80ebcacc706983394bb8fcc88ea7b9241338fb4617fffbea411b68b40ed5627e6004546006548460405180848152602001838152602001828152602001935050505060405180910390a26000600654111561256f577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612472611f4b565b6006546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124de57600080fd5b505af11580156124f2573d6000803e3d6000fd5b505050506040513d602081101561250857600080fd5b810190808051906020019092919050505061256e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614cbe6025913960400191505060405180910390fd5b5b60008111156126b7577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6125bc611f4b565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561262657600080fd5b505af115801561263a573d6000803e3d6000fd5b505050506040513d602081101561265057600080fd5b81019080805190602001909291905050506126b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614deb602f913960400191505060405180910390fd5b5b6000600c5414156128de5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561276157600080fd5b505afa158015612775573d6000803e3d6000fd5b505050506040513d602081101561278b57600080fd5b810190808051906020019092919050505090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6127e2611f4b565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561284c57600080fd5b505af1158015612860573d6000803e3d6000fd5b505050506040513d602081101561287657600080fd5b81019080805190602001909291905050506128dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614e1a602e913960400191505060405180910390fd5b505b50565b600060169054906101000a900460ff1681565b60086020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154905087565b600060179054906101000a900460ff1681565b612998613a0d565b73ffffffffffffffffffffffffffffffffffffffff166129b6611f4b565b73ffffffffffffffffffffffffffffffffffffffff1614612a3f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614c986026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612b8b613a0d565b73ffffffffffffffffffffffffffffffffffffffff16612ba9611f4b565b73ffffffffffffffffffffffffffffffffffffffff1614612c32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600060156101000a81548160ff021916908315150217905550565b6000612cb67f0000000000000000000000000000000000000000000000000000000000000000612ca87f0000000000000000000000000000000000000000000000000000000000000000426137f390919063ffffffff16565b6138fc90919063ffffffff16565b905090565b612cc3612084565b612d35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f47616d65206973206e6f7420636f6d706c65746564000000000000000000000081525060200191505060405180910390fd5b600060169054906101000a900460ff1615612d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614c6a602e913960400191505060405180910390fd5b6001600060166101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612e5557600080fd5b505afa158015612e69573d6000803e3d6000fd5b505050506040513d6020811015612e7f57600080fd5b810190808051906020019092919050505011156132e157600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166369328dec7f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff306040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b158015612fb357600080fd5b505af1158015612fc7573d6000803e3d6000fd5b505050506060600167ffffffffffffffff81118015612fe557600080fd5b506040519080825280602002602001820160405280156130145781602001602082028036833780820191505090505b5090507f00000000000000000000000000000000000000000000000000000000000000008160008151811061304557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b599f2683306040518363ffffffff1660e01b815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b8381101561314557808201518184015260208101905061312a565b50505050905001935050505060206040518083038186803b15801561316957600080fd5b505afa15801561317d573d6000803e3d6000fd5b505050506040513d602081101561319357600080fd5b8101908080519060200190929190505050905060008111156132de57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633111e7b38383306040518463ffffffff1660e01b815260040180806020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825285818151815260200191508051906020019060200280838360005b8381101561327a57808201518184015260208101905061325f565b50505050905001945050505050602060405180830381600087803b1580156132a157600080fd5b505af11580156132b5573d6000803e3d6000fd5b505050506040513d60208110156132cb57600080fd5b8101908080519060200190929190505050505b50505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561338057600080fd5b505afa158015613394573d6000803e3d6000fd5b505050506040513d60208110156133aa57600080fd5b8101908080519060200190929190505050905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561345c57600080fd5b505afa158015613470573d6000803e3d6000fd5b505050506040513d602081101561348657600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146135cc577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561358a57600080fd5b505afa15801561359e573d6000803e3d6000fd5b505050506040513d60208110156135b457600080fd5b81019080805190602001909291905050506002819055505b60008090506005548311156135f3576135f0600554846137f390919063ffffffff16565b90505b6000807f000000000000000000000000000000000000000000000000000000000000000060ff16111561368957613669606461365b7f000000000000000000000000000000000000000000000000000000000000000060ff168561387690919063ffffffff16565b6138fc90919063ffffffff16565b905061367e81836137f390919063ffffffff16565b600481905550613695565b60009050816004819055505b600060075414156136b4576000600c81905550816006819055506136d7565b6136c9600754846138fc90919063ffffffff16565b600c81905550806006819055505b7f28d72925fdcea205b246c820015bd35812a740d1ec1a5cdc84f7784b50940fbb8460055460045486600254604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a17fdbb9607e18553d40c255226e09883b48f92a108f6f895b0f37db6ae0d7fd56e6600a604051808060200182810382528381815481526020019150805480156137d257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613788575b50509250505060405180910390a150505050565b6000600980549050905090565b60008282111561386b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b60008083141561388957600090506138f6565b600082840290508284828161389a57fe5b04146138f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614da06021913960400191505060405180910390fd5b809150505b92915050565b6000808211613973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b81838161397c57fe5b04905092915050565b600080828401905083811015613a03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b613a1d611c11565b613a8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613ad2613a0d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015613c0757600080fd5b505afa158015613c1b573d6000803e3d6000fd5b505050506040513d6020811015613c3157600080fd5b81019080805190602001909291905050501015613c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526043815260200180614e486043913960600191505060405180910390fd5b6000613ca3612c4f565b905080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550613d617f0000000000000000000000000000000000000000000000000000000000000000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461398590919063ffffffff16565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550613ddb60017f00000000000000000000000000000000000000000000000000000000000000006137f390919063ffffffff16565b811415613f1c57600a339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613e5e6001600a805490506137f390919063ffffffff16565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550613eba600160075461398590919063ffffffff16565b6007819055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160026101000a81548160ff0219169083151502179055505b613f517f000000000000000000000000000000000000000000000000000000000000000060055461398590919063ffffffff16565b6005819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd33307f00000000000000000000000000000000000000000000000000000000000000006040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561405257600080fd5b505af1158015614066573d6000803e3d6000fd5b505050506040513d602081101561407c57600080fd5b81019080805190602001909291905050506140ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5472616e73666572206661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561419e57600080fd5b505afa1580156141b2573d6000803e3d6000fd5b505050506040513d60208110156141c857600080fd5b810190808051906020019092919050505090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156142a457600080fd5b505af11580156142b8573d6000803e3d6000fd5b505050506040513d60208110156142ce57600080fd5b8101908080519060200190929190505050614334576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614d4e6029913960400191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8eda9df7f00000000000000000000000000000000000000000000000000000000000000008330609b6040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff168152602001945050505050600060405180830381600087803b15801561443e57600080fd5b505af1158015614452573d6000803e3d6000fd5b505050505050565b614462613a0d565b73ffffffffffffffffffffffffffffffffffffffff16614480611f4b565b73ffffffffffffffffffffffffffffffffffffffff1614614509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6145d0611c11565b15614643576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614687613a0d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006146d4612c4f565b14614747576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f47616d652068617320616c72656164792073746172746564000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415806148305750600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff165b614885576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614eac6023913960400191505060405180910390fd5b61489b600160035461398590919063ffffffff16565b6003819055507f0000000000000000000000000000000000000000000000000000000000000000600354111561491c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614c146027913960400191505060405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff169050614978614bba565b6040518060e001604052806000151581526020016000151581526020016000151581526020013373ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815250905080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff02191690831515021790555060608201518160000160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506080820151816001015560a0820151816002015560c0820151816003015590505081614b40576009339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b3373ffffffffffffffffffffffffffffffffffffffff167f485fd86c2a7d2d9ca3bf02e2ba776ea24271bc62274265b0bd5f478b3b7a1ca47f00000000000000000000000000000000000000000000000000000000000000006040518082815260200191505060405180910390a2614bb6613b15565b5050565b6040518060e00160405280600015158152602001600015158152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152509056fe52656163686564206d6178207175616e74697479206f6620706c617965727320616c6c6f7765644661696c20746f207472616e7366657220455243323020746f6b656e73206f6e206561726c7920776974686472617752656465656d206f7065726174696f6e20616c72656164792068617070656e656420666f72207468652067616d654f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734661696c20746f207472616e73666572204552323020746f6b656e7320746f2061646d696e4465706f73697420617661696c61626c65206f6e6c79206265747765656e207365676d656e74203120616e64207365676d656e74206e2d31202870656e756c74696d6174652946756e6473206e6f742072656465656d65642066726f6d2065787465726e616c20706f6f6c4661696c20746f20617070726f766520616c6c6f77616e636520746f206c656e64696e6720706f6f6c4661696c20746f207472616e7366657220455243323020746f6b656e73206f6e207769746864726177536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774661696c20746f207472616e736665722045524332302072657761726473206f6e2077697468647261774661696c20746f207472616e73666572204552323020696e63656e7469766520746f6b656e7320746f2061646d696e4661696c20746f207472616e73666572204552433230207265776172647320746f6b656e7320746f2061646d696e596f75206e65656420746f206861766520616c6c6f77616e636520746f20646f207472616e7366657220444149206f6e2074686520736d61727420636f6e7472616374506c6179657220616c72656164792077697468647261772066726f6d2067616d6543616e6e6f74206a6f696e207468652067616d65206d6f7265207468616e206f6e6365506c6179657220616c726561647920706169642063757272656e74207365676d656e744661696c20746f207472616e7366657220455243323020696e63656e7469766520746f6b656e73206f6e207769746864726177506c61796572206469646e277420706179207468652070726576696f7573207365676d656e74202d2067616d65206f76657221a2646970667358221220bddeb097c2d4736ea4ab23f403afaee3e2866221e0f3d8c1a7c89f1e0503558e64736f6c634300060b00335f637573746f6d466565206d757374206265206c657373207468616e206f7220657175616c20746f203230255f6d6178506c6179657273436f756e74206d7573742062652067726561746572207468616e207a65726f5f7365676d656e744c656e677468206d7573742062652067726561746572207468616e207a65726f5f6561726c795769746864726177616c466565206d7573742062652067726561746572207468616e207a65726f5f7365676d656e74436f756e74206d7573742062652067726561746572207468616e207a65726f5f7365676d656e745061796d656e74206d7573742062652067726561746572207468616e207a65726f5f6561726c795769746864726177616c466565206d757374206265206c657373207468616e206f7220657175616c20746f20313025696e76616c6964205f6c656e64696e67506f6f6c4164647265737350726f76696465722061646472657373696e76616c6964205f696e63656e74697665436f6e74726f6c6c657220616464726573730000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a063000000000000000000000000d05e3e715d945b59290df0ae8ef85c1bdb68474400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000093a80000000000000000000000000000000000000000000000001158e460913d00000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000007551b5d2763519d4e37e8b81929d336de671d46d0000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000357d51124f59836ded84c8a1730d72b749d8bc230000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102695760003560e01c80638da5cb5b11610151578063d30858f1116100c3578063f18d20be11610087578063f18d20be146108dc578063f2fde38b146108fe578063f4ceab1c14610942578063f5c978671461094c578063f8dd5ad31461096a578063fd6673f51461097457610269565b8063d30858f1146107ce578063d4f77b1c146107ec578063e0236a18146107f6578063e231bff014610800578063e2eb41ff1461082257610269565b8063aad739f511610115578063aad739f51461066e578063b6b0b097146106dc578063be22f54614610726578063c39b583c14610770578063caa02e0814610792578063d013666e146107b057610269565b80638da5cb5b1461050457806395224b331461054e578063a2fb11751461056c578063a59a9973146105da578063a98a5c941461062457610269565b80635c975abb116101ea5780636a79328a116101ae5780636a79328a14610474578063715018a6146104925780637a23032c1461049c5780637c80e6da146104ba5780637e5f8476146104d85780638456cb59146104fa57610269565b80635c975abb1461037c5780635edafd5a1461039e5780635faeea37146103c257806363380300146103e0578063638126f81461042a57610269565b80633ccfd60b116102315780633ccfd60b146102f65780633e7433eb146103005780633f4ba83a1461031e57806340732c89146103285780635b9fe37f1461033257610269565b80630c8ac6451461026e57806311b2e2d91461028c57806315d74bb3146102aa57806316330d40146102b4578063250a2b0d146102d8575b600080fd5b610276610992565b6040518082815260200191505060405180910390f35b6102946109b6565b6040518082815260200191505060405180910390f35b6102b26109da565b005b6102bc611067565b604051808260ff1660ff16815260200191505060405180910390f35b6102e061108b565b6040518082815260200191505060405180910390f35b6102fe611091565b005b6103086116d2565b6040518082815260200191505060405180910390f35b6103266116f6565b005b610330611829565b005b61033a611beb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610384611c11565b604051808215151515815260200191505060405180910390f35b6103a6611c27565b604051808260ff1660ff16815260200191505060405180910390f35b6103ca611c4b565b6040518082815260200191505060405180910390f35b6103e8611c51565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610432611c75565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61047c611c99565b6040518082815260200191505060405180910390f35b61049a611c9f565b005b6104a4611dda565b6040518082815260200191505060405180910390f35b6104c2611de0565b6040518082815260200191505060405180910390f35b6104e0611e04565b604051808215151515815260200191505060405180910390f35b610502611e17565b005b61050c611f4b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610556611f74565b6040518082815260200191505060405180910390f35b6105986004803603602081101561058257600080fd5b8101908080359060200190929190505050611f7a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105e2611fb6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61062c611fdc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61069a6004803603602081101561068457600080fd5b8101908080359060200190929190505050612000565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106e461203c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61072e612060565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610778612084565b604051808215151515815260200191505060405180910390f35b61079a6120b5565b6040518082815260200191505060405180910390f35b6107b86120bb565b6040518082815260200191505060405180910390f35b6107d66120df565b6040518082815260200191505060405180910390f35b6107f46120e5565b005b6107fe61216a565b005b6108086128e1565b604051808215151515815260200191505060405180910390f35b6108646004803603602081101561083857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128f4565b604051808815151515815260200187151515158152602001861515151581526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200197505050505050505060405180910390f35b6108e461297d565b604051808215151515815260200191505060405180910390f35b6109406004803603602081101561091457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612990565b005b61094a612b83565b005b610954612c4f565b6040518082815260200191505060405180910390f35b610972612cbb565b005b61097c6137e6565b6040518082815260200191505060405180910390f35b7f000000000000000000000000000000000000000000000001158e460913d0000081565b7f000000000000000000000000000000000000000000000000000000000000000481565b6109e2611c11565b15610a55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b610a5d612084565b15610ad0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f47616d6520697320616c726561647920636f6d706c657465640000000000000081525060200191505060405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816002015411610b8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f506c6179657220646f6573206e6f74206578697374000000000000000000000081525060200191505060405180910390fd5b8060000160009054906101000a900460ff1615610c12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506c617965722068617320616c72656164792077697468647261776e0000000081525060200191505060405180910390fd5b60018160000160006101000a81548160ff021916908315150217905550610c4560016003546137f390919063ffffffff16565b6003819055506000600754118015610c6b57508060000160029054906101000a900460ff165b15610d0557610c8660016007546137f390919063ffffffff16565b60078190555060008160000160026101000a81548160ff0219169083151502179055506000600a826003015481548110610cbc57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6000610d6a610d576064610d497f000000000000000000000000000000000000000000000000000000000000000160ff16866002015461387690919063ffffffff16565b6138fc90919063ffffffff16565b83600201546137f390919063ffffffff16565b9050610d8582600201546005546137f390919063ffffffff16565b6005819055506000610d95612c4f565b90506000811415610dbe5760018360000160016101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f1670585e36568ede58d159518ce92cad99f75ad41c7d8281df3dd4eaa0c855d083600554604051808381526020018281526020019250505060405180910390a2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166369328dec7f0000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a06384306040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b158015610f1357600080fd5b505af1158015610f27573d6000803e3d6000fd5b505050507f0000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a06373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610fd257600080fd5b505af1158015610fe6573d6000803e3d6000fd5b505050506040513d6020811015610ffc57600080fd5b8101908080519060200190929190505050611062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614c3b602f913960400191505060405180910390fd5b505050565b7f000000000000000000000000000000000000000000000000000000000000000181565b60035481565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600201541161114e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f506c6179657220646f6573206e6f74206578697374000000000000000000000081525060200191505060405180910390fd5b8060000160009054906101000a900460ff16156111d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506c617965722068617320616c72656164792077697468647261776e0000000081525060200191505060405180910390fd5b60018160000160006101000a81548160ff021916908315150217905550600060169054906101000a900460ff1661120d5761120c612cbb565b5b6000816002015490506000809050600080905061125460017f00000000000000000000000000000000000000000000000000000000000000046137f390919063ffffffff16565b846001015414156112b5576112886112796007546004546138fc90919063ffffffff16565b8461398590919063ffffffff16565b9250600c549050600060025411156112b4576112b16007546002546138fc90919063ffffffff16565b91505b5b3373ffffffffffffffffffffffffffffffffffffffff167f650fdf669e93aa6c8ff3defe2da9c12b64f1548e5e1e54e803f4c1beb6466c8e84838560405180848152602001838152602001828152602001935050505060405180910390a27f0000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a06373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113ba57600080fd5b505af11580156113ce573d6000803e3d6000fd5b505050506040513d60208110156113e457600080fd5b810190808051906020019092919050505061144a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614d776029913960400191505060405180910390fd5b600082111561158b577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156114fa57600080fd5b505af115801561150e573d6000803e3d6000fd5b505050506040513d602081101561152457600080fd5b810190808051906020019092919050505061158a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180614ef26033913960400191505060405180910390fd5b5b60008111156116cc577f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561163b57600080fd5b505af115801561164f573d6000803e3d6000fd5b505050506040513d602081101561166557600080fd5b81019080805190602001909291905050506116cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614dc1602a913960400191505060405180910390fd5b5b50505050565b7f00000000000000000000000000000000000000000000000000000000621e8d9981565b6116fe613a0d565b73ffffffffffffffffffffffffffffffffffffffff1661171c611f4b565b73ffffffffffffffffffffffffffffffffffffffff16146117a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6117ad611c11565b61181f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b611827613a15565b565b611831611c11565b156118a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000160009054906101000a900460ff161561194f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614e8b6021913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168160000160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53656e646572206973206e6f74206120706c617965720000000000000000000081525060200191505060405180910390fd5b6000611a1e612c4f565b9050600081118015611a4f57507f000000000000000000000000000000000000000000000000000000000000000481105b611aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526046815260200180614ce36046913960600191505060405180910390fd5b8082600101541415611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614ecf6023913960400191505060405180910390fd5b611b156001826137f390919063ffffffff16565b826001015414611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180614f256033913960400191505060405180910390fd5b803373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a157f000000000000000000000000000000000000000000000001158e460913d000006040518082815260200191505060405180910390a3611be7613b15565b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060149054906101000a900460ff16905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b60055481565b7f000000000000000000000000d05e3e715d945b59290df0ae8ef85c1bdb68474481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025481565b611ca7613a0d565b73ffffffffffffffffffffffffffffffffffffffff16611cc5611f4b565b73ffffffffffffffffffffffffffffffffffffffff1614611d4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600060159054906101000a900460ff16611dd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f7420616c6c6f77656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b611dd861445a565b565b60065481565b7f0000000000000000000000000000000000000000000000000000000000000bb881565b600060159054906101000a900460ff1681565b611e1f613a0d565b73ffffffffffffffffffffffffffffffffffffffff16611e3d611f4b565b73ffffffffffffffffffffffffffffffffffffffff1614611ec6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611ece611c11565b15611f41576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b611f496145c8565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60045481565b600a8181548110611f8757fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000027f8d03b3a2196956ed754badc28d73be8830a6e81565b6009818154811061200d57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127081565b7f0000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a06381565b60007f00000000000000000000000000000000000000000000000000000000000000046120af612c4f565b11905090565b60075481565b7f0000000000000000000000000000000000000000000000000000000000093a8081565b600c5481565b6120ed611c11565b15612160576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6121686146ca565b565b612172613a0d565b73ffffffffffffffffffffffffffffffffffffffff16612190611f4b565b73ffffffffffffffffffffffffffffffffffffffff1614612219576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612221612084565b612293576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f47616d65206973206e6f7420636f6d706c65746564000000000000000000000081525060200191505060405180910390fd5b600060169054906101000a900460ff166122f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614d296025913960400191505060405180910390fd5b600060179054906101000a900460ff161561237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f41646d696e2068617320616c72656164792077697468647261776e000000000081525060200191505060405180910390fd5b6001600060176101000a81548160ff021916908315150217905550600080905060006007541480156123af57506000600254115b156123ba5760025490505b6123c2611f4b565b73ffffffffffffffffffffffffffffffffffffffff167f80ebcacc706983394bb8fcc88ea7b9241338fb4617fffbea411b68b40ed5627e6004546006548460405180848152602001838152602001828152602001935050505060405180910390a26000600654111561256f577f0000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a06373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612472611f4b565b6006546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124de57600080fd5b505af11580156124f2573d6000803e3d6000fd5b505050506040513d602081101561250857600080fd5b810190808051906020019092919050505061256e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614cbe6025913960400191505060405180910390fd5b5b60008111156126b7577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6125bc611f4b565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561262657600080fd5b505af115801561263a573d6000803e3d6000fd5b505050506040513d602081101561265057600080fd5b81019080805190602001909291905050506126b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614deb602f913960400191505060405180910390fd5b5b6000600c5414156128de5760007f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561276157600080fd5b505afa158015612775573d6000803e3d6000fd5b505050506040513d602081101561278b57600080fd5b810190808051906020019092919050505090507f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6127e2611f4b565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561284c57600080fd5b505af1158015612860573d6000803e3d6000fd5b505050506040513d602081101561287657600080fd5b81019080805190602001909291905050506128dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614e1a602e913960400191505060405180910390fd5b505b50565b600060169054906101000a900460ff1681565b60086020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154905087565b600060179054906101000a900460ff1681565b612998613a0d565b73ffffffffffffffffffffffffffffffffffffffff166129b6611f4b565b73ffffffffffffffffffffffffffffffffffffffff1614612a3f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614c986026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612b8b613a0d565b73ffffffffffffffffffffffffffffffffffffffff16612ba9611f4b565b73ffffffffffffffffffffffffffffffffffffffff1614612c32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600060156101000a81548160ff021916908315150217905550565b6000612cb67f0000000000000000000000000000000000000000000000000000000000093a80612ca87f00000000000000000000000000000000000000000000000000000000621e8d99426137f390919063ffffffff16565b6138fc90919063ffffffff16565b905090565b612cc3612084565b612d35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f47616d65206973206e6f7420636f6d706c65746564000000000000000000000081525060200191505060405180910390fd5b600060169054906101000a900460ff1615612d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614c6a602e913960400191505060405180910390fd5b6001600060166101000a81548160ff02191690831515021790555060007f00000000000000000000000027f8d03b3a2196956ed754badc28d73be8830a6e73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612e5557600080fd5b505afa158015612e69573d6000803e3d6000fd5b505050506040513d6020811015612e7f57600080fd5b810190808051906020019092919050505011156132e157600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166369328dec7f0000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a0637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff306040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b158015612fb357600080fd5b505af1158015612fc7573d6000803e3d6000fd5b505050506060600167ffffffffffffffff81118015612fe557600080fd5b506040519080825280602002602001820160405280156130145781602001602082028036833780820191505090505b5090507f00000000000000000000000027f8d03b3a2196956ed754badc28d73be8830a6e8160008151811061304557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b599f2683306040518363ffffffff1660e01b815260040180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b8381101561314557808201518184015260208101905061312a565b50505050905001935050505060206040518083038186803b15801561316957600080fd5b505afa15801561317d573d6000803e3d6000fd5b505050506040513d602081101561319357600080fd5b8101908080519060200190929190505050905060008111156132de57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633111e7b38383306040518463ffffffff1660e01b815260040180806020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825285818151815260200191508051906020019060200280838360005b8381101561327a57808201518184015260208101905061325f565b50505050905001945050505050602060405180830381600087803b1580156132a157600080fd5b505af11580156132b5573d6000803e3d6000fd5b505050506040513d60208110156132cb57600080fd5b8101908080519060200190929190505050505b50505b60007f0000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a06373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561338057600080fd5b505afa158015613394573d6000803e3d6000fd5b505050506040513d60208110156133aa57600080fd5b8101908080519060200190929190505050905060007f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561345c57600080fd5b505afa158015613470573d6000803e3d6000fd5b505050506040513d602081101561348657600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146135cc577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561358a57600080fd5b505afa15801561359e573d6000803e3d6000fd5b505050506040513d60208110156135b457600080fd5b81019080805190602001909291905050506002819055505b60008090506005548311156135f3576135f0600554846137f390919063ffffffff16565b90505b6000807f000000000000000000000000000000000000000000000000000000000000000060ff16111561368957613669606461365b7f000000000000000000000000000000000000000000000000000000000000000060ff168561387690919063ffffffff16565b6138fc90919063ffffffff16565b905061367e81836137f390919063ffffffff16565b600481905550613695565b60009050816004819055505b600060075414156136b4576000600c81905550816006819055506136d7565b6136c9600754846138fc90919063ffffffff16565b600c81905550806006819055505b7f28d72925fdcea205b246c820015bd35812a740d1ec1a5cdc84f7784b50940fbb8460055460045486600254604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a17fdbb9607e18553d40c255226e09883b48f92a108f6f895b0f37db6ae0d7fd56e6600a604051808060200182810382528381815481526020019150805480156137d257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613788575b50509250505060405180910390a150505050565b6000600980549050905090565b60008282111561386b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b60008083141561388957600090506138f6565b600082840290508284828161389a57fe5b04146138f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614da06021913960400191505060405180910390fd5b809150505b92915050565b6000808211613973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b81838161397c57fe5b04905092915050565b600080828401905083811015613a03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b613a1d611c11565b613a8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613ad2613a0d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b7f000000000000000000000000000000000000000000000001158e460913d000007f0000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a06373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015613c0757600080fd5b505afa158015613c1b573d6000803e3d6000fd5b505050506040513d6020811015613c3157600080fd5b81019080805190602001909291905050501015613c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526043815260200180614e486043913960600191505060405180910390fd5b6000613ca3612c4f565b905080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550613d617f000000000000000000000000000000000000000000000001158e460913d00000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461398590919063ffffffff16565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550613ddb60017f00000000000000000000000000000000000000000000000000000000000000046137f390919063ffffffff16565b811415613f1c57600a339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613e5e6001600a805490506137f390919063ffffffff16565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550613eba600160075461398590919063ffffffff16565b6007819055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160026101000a81548160ff0219169083151502179055505b613f517f000000000000000000000000000000000000000000000001158e460913d0000060055461398590919063ffffffff16565b6005819055507f0000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a06373ffffffffffffffffffffffffffffffffffffffff166323b872dd33307f000000000000000000000000000000000000000000000001158e460913d000006040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561405257600080fd5b505af1158015614066573d6000803e3d6000fd5b505050506040513d602081101561407c57600080fd5b81019080805190602001909291905050506140ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5472616e73666572206661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b60007f0000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a06373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561419e57600080fd5b505afa1580156141b2573d6000803e3d6000fd5b505050506040513d60208110156141c857600080fd5b810190808051906020019092919050505090507f0000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a06373ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156142a457600080fd5b505af11580156142b8573d6000803e3d6000fd5b505050506040513d60208110156142ce57600080fd5b8101908080519060200190929190505050614334576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614d4e6029913960400191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8eda9df7f0000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a0638330609b6040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018261ffff168152602001945050505050600060405180830381600087803b15801561443e57600080fd5b505af1158015614452573d6000803e3d6000fd5b505050505050565b614462613a0d565b73ffffffffffffffffffffffffffffffffffffffff16614480611f4b565b73ffffffffffffffffffffffffffffffffffffffff1614614509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6145d0611c11565b15614643576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614687613a0d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006146d4612c4f565b14614747576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f47616d652068617320616c72656164792073746172746564000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415806148305750600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff165b614885576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614eac6023913960400191505060405180910390fd5b61489b600160035461398590919063ffffffff16565b6003819055507f0000000000000000000000000000000000000000000000000000000000000bb8600354111561491c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614c146027913960400191505060405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff169050614978614bba565b6040518060e001604052806000151581526020016000151581526020016000151581526020013373ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815250905080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff02191690831515021790555060608201518160000160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506080820151816001015560a0820151816002015560c0820151816003015590505081614b40576009339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b3373ffffffffffffffffffffffffffffffffffffffff167f485fd86c2a7d2d9ca3bf02e2ba776ea24271bc62274265b0bd5f478b3b7a1ca47f000000000000000000000000000000000000000000000001158e460913d000006040518082815260200191505060405180910390a2614bb6613b15565b5050565b6040518060e00160405280600015158152602001600015158152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152509056fe52656163686564206d6178207175616e74697479206f6620706c617965727320616c6c6f7765644661696c20746f207472616e7366657220455243323020746f6b656e73206f6e206561726c7920776974686472617752656465656d206f7065726174696f6e20616c72656164792068617070656e656420666f72207468652067616d654f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734661696c20746f207472616e73666572204552323020746f6b656e7320746f2061646d696e4465706f73697420617661696c61626c65206f6e6c79206265747765656e207365676d656e74203120616e64207365676d656e74206e2d31202870656e756c74696d6174652946756e6473206e6f742072656465656d65642066726f6d2065787465726e616c20706f6f6c4661696c20746f20617070726f766520616c6c6f77616e636520746f206c656e64696e6720706f6f6c4661696c20746f207472616e7366657220455243323020746f6b656e73206f6e207769746864726177536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774661696c20746f207472616e736665722045524332302072657761726473206f6e2077697468647261774661696c20746f207472616e73666572204552323020696e63656e7469766520746f6b656e7320746f2061646d696e4661696c20746f207472616e73666572204552433230207265776172647320746f6b656e7320746f2061646d696e596f75206e65656420746f206861766520616c6c6f77616e636520746f20646f207472616e7366657220444149206f6e2074686520736d61727420636f6e7472616374506c6179657220616c72656164792077697468647261772066726f6d2067616d6543616e6e6f74206a6f696e207468652067616d65206d6f7265207468616e206f6e6365506c6179657220616c726561647920706169642063757272656e74207365676d656e744661696c20746f207472616e7366657220455243323020696e63656e7469766520746f6b656e73206f6e207769746864726177506c61796572206469646e277420706179207468652070726576696f7573207365676d656e74202d2067616d65206f76657221a2646970667358221220bddeb097c2d4736ea4ab23f403afaee3e2866221e0f3d8c1a7c89f1e0503558e64736f6c634300060b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a063000000000000000000000000d05e3e715d945b59290df0ae8ef85c1bdb68474400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000093a80000000000000000000000000000000000000000000000001158e460913d00000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000007551b5d2763519d4e37e8b81929d336de671d46d0000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000357d51124f59836ded84c8a1730d72b749d8bc230000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270
-----Decoded View---------------
Arg [0] : _inboundCurrency (address): 0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063
Arg [1] : _lendingPoolAddressProvider (address): 0xd05e3E715d945B59290df0ae8eF85c1BdB684744
Arg [2] : _segmentCount (uint256): 4
Arg [3] : _segmentLength (uint256): 604800
Arg [4] : _segmentPayment (uint256): 20000000000000000000
Arg [5] : _earlyWithdrawalFee (uint8): 1
Arg [6] : _customFee (uint8): 0
Arg [7] : _dataProvider (address): 0x7551b5D2763519d4e37e8B81929D336De671d46d
Arg [8] : _maxPlayersCount (uint256): 3000
Arg [9] : _incentiveToken (address): 0x0000000000000000000000000000000000000000
Arg [10] : _incentiveController (address): 0x357D51124f59836DeD84c8a1730D72B749d8BC23
Arg [11] : _matic (address): 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a063
Arg [1] : 000000000000000000000000d05e3e715d945b59290df0ae8ef85c1bdb684744
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [3] : 0000000000000000000000000000000000000000000000000000000000093a80
Arg [4] : 000000000000000000000000000000000000000000000001158e460913d00000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000007551b5d2763519d4e37e8b81929d336de671d46d
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000bb8
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [10] : 000000000000000000000000357d51124f59836ded84c8a1730d72b749d8bc23
Arg [11] : 0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270
Deployed Bytecode Sourcemap
41070:9420:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21187:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21301:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29755:1531;;;:::i;:::-;;21829:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20791:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45604:1664;;;:::i;:::-;;21404:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27640:78;;;:::i;:::-;;32895:1659;;;:::i;:::-;;41122:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17942:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21933:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20993:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20201:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20511:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20640:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27764:158;;;:::i;:::-;;21096:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21635:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19587:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27461:77;;;:::i;:::-;;15648:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20914:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22536:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20319:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20080:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22464:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;41175:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19929:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37632:211;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21737:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21517:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41211:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29465:113;;;:::i;:::-;;44002:1455;;;:::i;:::-;;19709:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22259:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19808:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16602:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27974:104;;;:::i;:::-;;37365:142;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47464:3023;;;:::i;:::-;;34653:110;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21187:39;;;:::o;21301:36::-;;;:::o;29755:1531::-;18268:8;:6;:8::i;:::-;18267:9;18259:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23654:17:::1;:15;:17::i;:::-;23653:18;23645:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;29837:21:::2;29861:7;:19;29869:10;29861:19;;;;;;;;;;;;;;;29837:43;;29919:1;29899:6;:17;;;:21;29891:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;29966:6;:16;;;;;;;;;;;;29965:17;29957:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;30045:4;30026:6;:16;;;:23;;;;;;;;;;;;;;;;;;30081:25;30104:1;30081:18;;:22;;:25;;;;:::i;:::-;30060:18;:46;;;;30135:1;30121:11;;:15;:34;;;;;30140:6;:15;;;;;;;;;;;;30121:34;30117:198;;;30186:24;30207:1;30186:11;;:15;;:24;;;;:::i;:::-;30172:11;:38;;;;30243:5;30225:6;:15;;;:23;;;;;;;;;;;;;;;;;;30301:1;30263:7;30271:6;:18;;;30263:27;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;30117:198;30446:22;30484:105;30524:50;30570:3;30524:41;30546:18;30524:41;;:6;:17;;;:21;;:41;;;;:::i;:::-;:45;;:50;;;;:::i;:::-;30484:6;:17;;;:21;;:105;;;;:::i;:::-;30446:143;;30683:41;30706:6;:17;;;30683:18;;:22;;:41;;;;:::i;:::-;30662:18;:62;;;;30735:22;30760:19;:17;:19::i;:::-;30735:44;;30901:1;30883:14;:19;30879:75;;;30938:4;30919:6;:16;;;:23;;;;;;;;;;;;;;;;;;30879:75;30987:10;30971:63;;;30999:14;31015:18;;30971:63;;;;;;;;;;;;;;;;;;;;;;;;31047:11;;;;;;;;;;;:20;;;31076:8;31087:14;31111:4;31047:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;31157:8;31150:25;;;31176:10;31188:14;31150:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;31128:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23712:1;;;29755:1531::o:0;21829:41::-;;;:::o;20791:37::-;;;;:::o;45604:1664::-;45653:21;45677:7;:19;45685:10;45677:19;;;;;;;;;;;;;;;45653:43;;45735:1;45715:6;:17;;;:21;45707:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45782:6;:16;;;;;;;;;;;;45781:17;45773:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45861:4;45842:6;:16;;;:23;;;;;;;;;;;;;;;;;;45945:8;;;;;;;;;;;45940:66;;45970:24;:22;:24::i;:::-;45940:66;46018:14;46035:6;:17;;;46018:34;;46063:23;46089:1;46063:27;;46101:20;46124:1;46101:24;;46172:18;46188:1;46172:11;:15;;:18;;;;:::i;:::-;46140:6;:28;;;:50;46136:449;;;46269:46;46280:34;46302:11;;46280:17;;:21;;:34;;;;:::i;:::-;46269:6;:10;;:46;;;;:::i;:::-;46260:55;;46345:16;;46330:31;;46481:1;46458:20;;:24;46454:120;;;46521:37;46546:11;;46521:20;;:24;;:37;;;;:::i;:::-;46503:55;;46454:120;46136:449;46611:10;46600:61;;;46623:6;46631:12;46645:15;46600:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46703:8;46696:25;;;46722:10;46734:6;46696:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46674:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46845:1;46827:15;:19;46823:225;;;46896:14;46889:31;;;46921:10;46933:15;46889:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46863:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46823:225;47079:1;47064:12;:16;47060:201;;;47130:5;47123:22;;;47146:10;47158:12;47123:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47097:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47060:201;45604:1664;;;;:::o;21404:42::-;;;:::o;27640:78::-;15879:12;:10;:12::i;:::-;15868:23;;:7;:5;:7::i;:::-;:23;;;15860:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18545:8:::1;:6;:8::i;:::-;18537:41;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27700:10:::2;:8;:10::i;:::-;27640:78::o:0;32895:1659::-;18268:8;:6;:8::i;:::-;18267:9;18259:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32952:21:::1;32976:7;:19;32984:10;32976:19;;;;;;;;;;;;;;;32952:43;;33029:6;:16;;;;;;;;;;;;33028:17;33006:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33202:10;33187:25;;:6;:11;;;;;;;;;;;;:25;;;33165:97;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33275:22;33300:19;:17;:19::i;:::-;33275:44;;33870:1;33853:14;:18;:50;;;;;33892:11;33875:14;:28;33853:50;33831:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34124:14;34092:6;:28;;;:46;;34070:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34341:21;34360:1;34341:14;:18;;:21;;;;:::i;:::-;34309:6;:28;;;:53;34287:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34480:14;34468:10;34460:51;;;34496:14;34460:51;;;;;;;;;;;;;;;;;;34522:24;:22;:24::i;:::-;18308:1;;32895:1659::o:0;41122:46::-;;;;;;;;;;;;;:::o;17942:86::-;17989:4;18013:7;;;;;;;;;;;18006:14;;17942:86;:::o;21933:32::-;;;:::o;20993:33::-;;;;:::o;20201:73::-;;;:::o;20511:38::-;;;:::o;20640:39::-;;;;:::o;27764:158::-;15879:12;:10;:12::i;:::-;15868:23;;:7;:5;:7::i;:::-;:23;;;15860:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27838:24:::1;;;;;;;;;;;27830:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27889:25;:23;:25::i;:::-;27764:158::o:0;21096:29::-;;;;:::o;21635:40::-;;;:::o;19587:44::-;;;;;;;;;;;;;:::o;27461:77::-;15879:12;:10;:12::i;:::-;15868:23;;:7;:5;:7::i;:::-;:23;;;15860:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18268:8:::1;:6;:8::i;:::-;18267:9;18259:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27522:8:::2;:6;:8::i;:::-;27461:77::o:0;15648:87::-;15694:7;15721:6;;;;;;;;;;;15714:13;;15648:87;:::o;20914:32::-;;;;:::o;22536:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20319:31::-;;;;;;;;;;;;;:::o;20080:33::-;;;:::o;22464:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41175:29::-;;;:::o;19929:32::-;;;:::o;37632:211::-;37680:4;37824:11;37802:19;:17;:19::i;:::-;:33;37795:40;;37632:211;:::o;21737:30::-;;;;:::o;21517:38::-;;;:::o;41211:31::-;;;;:::o;29465:113::-;18268:8;:6;:8::i;:::-;18267:9;18259:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29559:11:::1;:9;:11::i;:::-;29465:113::o:0;44002:1455::-;15879:12;:10;:12::i;:::-;15868:23;;:7;:5;:7::i;:::-;:23;;;15860:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23529:17:::1;:15;:17::i;:::-;23521:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;44138:8:::2;;;;;;;;;;;44130:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44208:13;;;;;;;;;;;44207:14;44199:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;44280:4;44264:13;;:20;;;;;;;;;;;;;;;;;;44451:28;44482:1:::0;44451:32:::2;;44513:1;44498:11;;:16;:44;;;;;44541:1;44518:20;;:24;44498:44;44494:120;;;44582:20;;44559:43;;44494:120;44647:7;:5;:7::i;:::-;44631:81;;;44656:17;;44675:14;;44691:20;44631:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44746:1;44729:14;;:18;44725:200;;;44797:8;44790:25;;;44816:7;:5;:7::i;:::-;44825:14;;44790:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;44764:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44725:200;44964:1;44941:20;:24;44937:228;;;45015:14;45008:31;;;45040:7;:5;:7::i;:::-;45049:20;45008:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;44982:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44937:228;45201:1;45181:16;;:21;45177:273;;;45219:15;45244:5;45237:23;;;45269:4;45237:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;45219:56;;45323:5;45316:22;;;45339:7;:5;:7::i;:::-;45348;45316:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;45290:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45177:273;;23583:1;44002:1455::o:0;19709:20::-;;;;;;;;;;;;;:::o;22259:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19808:25::-;;;;;;;;;;;;;:::o;16602:244::-;15879:12;:10;:12::i;:::-;15868:23;;:7;:5;:7::i;:::-;:23;;;15860:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16711:1:::1;16691:22;;:8;:22;;;;16683:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16801:8;16772:38;;16793:6;::::0;::::1;;;;;;;;;16772:38;;;;;;;;;;;;16830:8;16821:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16602:244:::0;:::o;27974:104::-;15879:12;:10;:12::i;:::-;15868:23;;:7;:5;:7::i;:::-;:23;;;15860:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28066:4:::1;28039:24;;:31;;;;;;;;;;;;;;;;;;27974:104::o:0;37365:142::-;37415:7;37442:57;37485:13;37442:38;37462:17;37442:15;:19;;:38;;;;:::i;:::-;:42;;:57;;;;:::i;:::-;37435:64;;37365:142;:::o;47464:3023::-;23529:17;:15;:17::i;:::-;23521:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47554:8:::1;;;;;;;;;;;47553:9;47545:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47635:4;47624:8;;:15;;;;;;;;;;;;;;;;;;47771:1;47734:9;:19;;;47762:4;47734:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:38;47730:751;;;47789:11;;;;;;;;;;;:20;;;47836:8;47864:17;47908:4;47789:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;48001:23;48041:1;48027:16;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48001:42;;48078:9;48058:6;48065:1;48058:9;;;;;;;;;;;;;:30;;;;;;;;;::::0;::::1;48103:24;48130:19;;;;;;;;;;;:37;;;48186:6;48219:4;48130:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;48103:136;;48277:1;48258:16;:20;48254:216;;;48299:19;;;;;;;;;;;:32;;;48354:6;48383:16;48430:4;48299:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;48254:216;47730:751;;;48493:20;48523:8;48516:26;;;48551:4;48516:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;48493:64;;48568:21;48599:5;48592:23;;;48624:4;48592:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;48568:62;;48804:1;48769:37;;48777:14;48769:37;;;48765:140;;48853:14;48846:32;;;48887:4;48846:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;48823:20;:70;;;;48765:140;48953:21;48977:1:::0;48953:25:::1;;49257:18;;49242:12;:33;49238:118;;;49308:36;49325:18;;49308:12;:16;;:36;;;;:::i;:::-;49292:52;;49238:118;49586:23;49636:1:::0;49624:9:::1;:13;;;49620:272;;;49672:39;49707:3;49673:28;49691:9;49673:28;;:13;:17;;:28;;;;:::i;:::-;49672:34;;:39;;;;:::i;:::-;49654:57;;49746:34;49764:15;49746:13;:17;;:34;;;;:::i;:::-;49726:17;:54;;;;49620:272;;;49831:1;49813:19;;49867:13;49847:17;:33;;;;49620:272;49999:1;49984:11;;:16;49980:243;;;50036:1;50017:16;:20;;;;50069:13;50052:14;:30;;;;49980:243;;;50134:30;50152:11;;50134:13;:17;;:30;;;;:::i;:::-;50115:16;:49;;;;50196:15;50179:14;:32;;;;49980:243;50240:195;50284:12;50311:18;;50344:17;;50376:13;50404:20;;50240:195;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50451:28;50471:7;50451:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23583:1;;;;47464:3023::o:0;34653:110::-;34706:7;34733:15;:22;;;;34726:29;;34653:110;:::o;3259:158::-;3317:7;3350:1;3345;:6;;3337:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3408:1;3404;:5;3397:12;;3259:158;;;;:::o;3676:220::-;3734:7;3763:1;3758;:6;3754:20;;;3773:1;3766:8;;;;3754:20;3785:9;3801:1;3797;:5;3785:17;;3830:1;3825;3821;:5;;;;;;:10;3813:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3887:1;3880:8;;;3676:220;;;;;:::o;4374:153::-;4432:7;4464:1;4460;:5;4452:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4518:1;4514;:5;;;;;;4507:12;;4374:153;;;;:::o;2797:179::-;2855:7;2875:9;2891:1;2887;:5;2875:17;;2916:1;2911;:6;;2903:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2967:1;2960:8;;;2797:179;;;;:::o;14183:106::-;14236:15;14271:10;14264:17;;14183:106;:::o;19001:120::-;18545:8;:6;:8::i;:::-;18537:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19070:5:::1;19060:7:::0;::::1;:15;;;;;;;;;;;;;;;;;;19091:22;19100:12;:10;:12::i;:::-;19091:22;;;;;;;;;;;;;;;;;;;;;;19001:120::o:0;38044:1630::-;38169:14;38120:8;:18;;;38139:10;38159:4;38120:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:63;;38098:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38291:22;38316:19;:17;:19::i;:::-;38291:44;;38390:14;38346:7;:19;38354:10;38346:19;;;;;;;;;;;;;;;:41;;:58;;;;38448:74;38497:14;38448:7;:19;38456:10;38448:19;;;;;;;;;;;;;;;:30;;;:34;;:74;;;;:::i;:::-;38415:7;:19;38423:10;38415:19;;;;;;;;;;;;;;;:30;;:107;;;;38733:18;38749:1;38733:11;:15;;:18;;;;:::i;:::-;38715:14;:36;38711:315;;;38768:7;38781:10;38768:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38884:27;38908:1;38884:7;:14;;;;:18;;:27;;;;:::i;:::-;38850:7;:19;38858:10;38850:19;;;;;;;;;;;;;;;:31;;:61;;;;38940:24;38961:1;38940:11;;:15;;:24;;;;:::i;:::-;38926:11;:38;;;;39010:4;38979:7;:19;38987:10;38979:19;;;;;;;;;;;;;;;:28;;;:35;;;;;;;;;;;;;;;;;;38711:315;39067:38;39090:14;39067:18;;:22;;:38;;;;:::i;:::-;39046:18;:59;;;;39138:8;:21;;;39160:10;39180:4;39187:14;39138:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39116:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39362:23;39388:8;:18;;;39415:4;39388:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39362:59;;39454:8;:16;;;39479:11;;;;;;;;;;;39493:15;39454:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39432:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39591:11;;;;;;;;;;;:19;;;39619:8;39630:15;39655:4;39662:3;39591:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38044:1630;;:::o;16299:148::-;15879:12;:10;:12::i;:::-;15868:23;;:7;:5;:7::i;:::-;:23;;;15860:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16406:1:::1;16369:40;;16390:6;::::0;::::1;;;;;;;;;16369:40;;;;;;;;;;;;16437:1;16420:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16299:148::o:0;18742:118::-;18268:8;:6;:8::i;:::-;18267:9;18259:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18812:4:::1;18802:7;;:14;;;;;;;;;;;;;;;;;;18832:20;18839:12;:10;:12::i;:::-;18832:20;;;;;;;;;;;;;;;;;;;;;;18742:118::o:0;39745:1048::-;39817:1;39794:19;:17;:19::i;:::-;:24;39786:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39908:10;39880:38;;:7;:19;39888:10;39880:19;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:38;;;;:88;;;;39939:7;:19;39947:10;39939:19;;;;;;;;;;;;;;;:29;;;;;;;;;;;;39880:88;39858:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40065:25;40088:1;40065:18;;:22;;:25;;;;:::i;:::-;40044:18;:46;;;;40131:15;40109:18;;:37;;40101:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40203:14;40220:7;:19;40228:10;40220:19;;;;;;;;;;;;;;;:29;;;;;;;;;;;;40203:46;;40260:23;;:::i;:::-;40299:270;;;;;;;;40446:5;40299:270;;;;;;40481:5;40299:270;;;;;;40515:5;40299:270;;;;;;40331:10;40299:270;;;;;;40383:1;40299:270;;;;40415:1;40299:270;;;;40552:1;40299:270;;;40260:309;;40602:9;40580:7;:19;40588:10;40580:19;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40627:9;40622:75;;40653:15;40674:10;40653:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40622:75;40723:10;40712:38;;;40735:14;40712:38;;;;;;;;;;;;;;;;;;40761:24;:22;:24::i;:::-;39745:1048;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://bddeb097c2d4736ea4ab23f403afaee3e2866221e0f3d8c1a7c89f1e0503558e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.