More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 46 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 11779669 | 1419 days ago | IN | 0 ETH | 0.01528303 | ||||
Claim | 11757223 | 1422 days ago | IN | 0 ETH | 0.01420252 | ||||
Claim | 11757223 | 1422 days ago | IN | 0 ETH | 0.01466936 | ||||
Claim | 11732090 | 1426 days ago | IN | 0 ETH | 0.01477062 | ||||
Claim | 11730333 | 1426 days ago | IN | 0 ETH | 0.01288931 | ||||
Claim | 11722956 | 1428 days ago | IN | 0 ETH | 0.01211948 | ||||
Claim | 11721035 | 1428 days ago | IN | 0 ETH | 0.01638783 | ||||
Claim | 11721005 | 1428 days ago | IN | 0 ETH | 0.01363086 | ||||
Claim | 11721003 | 1428 days ago | IN | 0 ETH | 0.01344505 | ||||
Announce Winners | 11720989 | 1428 days ago | IN | 0 ETH | 0.03710928 | ||||
Pick Winner1 | 11714302 | 1429 days ago | IN | 0 ETH | 0.00923148 | ||||
Buy Ticket | 11710693 | 1429 days ago | IN | 0.02117944 ETH | 0.028 | ||||
Buy Ticket | 11710548 | 1429 days ago | IN | 0.01963373 ETH | 0.02307174 | ||||
Buy Ticket | 11710538 | 1429 days ago | IN | 0.0196193 ETH | 0.02486632 | ||||
Buy Ticket | 11709791 | 1430 days ago | IN | 0.01920283 ETH | 0.02149855 | ||||
Buy Ticket | 11704465 | 1430 days ago | IN | 0.02936728 ETH | 0.03754568 | ||||
Buy Ticket | 11704448 | 1430 days ago | IN | 0.02934086 ETH | 0.03012792 | ||||
Buy Ticket | 11704437 | 1430 days ago | IN | 0.02931447 ETH | 0.03803035 | ||||
Buy Ticket | 11703089 | 1431 days ago | IN | 0.02928812 ETH | 0.05557386 | ||||
Buy Ticket | 11702796 | 1431 days ago | IN | 0.02928812 ETH | 0.052049 | ||||
Buy Ticket | 11701080 | 1431 days ago | IN | 0.03043267 ETH | 0.02388372 | ||||
Buy Ticket | 11701072 | 1431 days ago | IN | 0.0304048 ETH | 0.023859 | ||||
Buy Ticket | 11698330 | 1431 days ago | IN | 0.02868045 ETH | 0.01930257 | ||||
Buy Ticket | 11697600 | 1431 days ago | IN | 0.02865494 ETH | 0.02089399 | ||||
Buy Ticket | 11695714 | 1432 days ago | IN | 0.0343852 ETH | 0.02553786 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
11710693 | 1429 days ago | 0.00054489 ETH | ||||
11710693 | 1429 days ago | 0.00054489 ETH | ||||
11710693 | 1429 days ago | 0.02117944 ETH | ||||
11710548 | 1429 days ago | 0.00178488 ETH | ||||
11710548 | 1429 days ago | 0.00178488 ETH | ||||
11710548 | 1429 days ago | 0.01963373 ETH | ||||
11710538 | 1429 days ago | 0.00178357 ETH | ||||
11710538 | 1429 days ago | 0.00178357 ETH | ||||
11710538 | 1429 days ago | 0.0196193 ETH | ||||
11709791 | 1430 days ago | 0.00174571 ETH | ||||
11709791 | 1430 days ago | 0.00174571 ETH | ||||
11709791 | 1430 days ago | 0.01920283 ETH | ||||
11704465 | 1430 days ago | 0.00266975 ETH | ||||
11704465 | 1430 days ago | 0.00266975 ETH | ||||
11704465 | 1430 days ago | 0.02936728 ETH | ||||
11704448 | 1430 days ago | 0.00266735 ETH | ||||
11704448 | 1430 days ago | 0.00266735 ETH | ||||
11704448 | 1430 days ago | 0.02934086 ETH | ||||
11704437 | 1430 days ago | 0.00266495 ETH | ||||
11704437 | 1430 days ago | 0.00266495 ETH | ||||
11704437 | 1430 days ago | 0.02931447 ETH | ||||
11703089 | 1431 days ago | 0.00266255 ETH | ||||
11703089 | 1431 days ago | 0.00266255 ETH | ||||
11703089 | 1431 days ago | 0.02928812 ETH | ||||
11702796 | 1431 days ago | 0.02928812 ETH |
Loading...
Loading
Contract Name:
Offertory
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-19 */ // SPDX-License-Identifier: MIT pragma solidity ^0.6.12; pragma experimental ABIEncoderV2; 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; } } 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 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; } } abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } library SafeMath { /** * @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) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * 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); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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); } library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } interface LinkTokenInterface { function allowance(address owner, address spender) external view returns (uint256 remaining); function approve(address spender, uint256 value) external returns (bool success); function balanceOf(address owner) external view returns (uint256 balance); function decimals() external view returns (uint8 decimalPlaces); function decreaseApproval(address spender, uint256 addedValue) external returns (bool success); function increaseApproval(address spender, uint256 subtractedValue) external; function name() external view returns (string memory tokenName); function symbol() external view returns (string memory tokenSymbol); function totalSupply() external view returns (uint256 totalTokensIssued); function transfer(address to, uint256 value) external returns (bool success); function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool success); function transferFrom(address from, address to, uint256 value) external returns (bool success); } contract VRFRequestIDBase { function makeVRFInputSeed(bytes32 _keyHash, uint256 _userSeed, address _requester, uint256 _nonce) internal pure returns (uint256) { return uint256(keccak256(abi.encode(_keyHash, _userSeed, _requester, _nonce))); } function makeRequestId( bytes32 _keyHash, uint256 _vRFInputSeed) internal pure returns (bytes32) { return keccak256(abi.encodePacked(_keyHash, _vRFInputSeed)); } } abstract contract VRFConsumerBase is VRFRequestIDBase { using SafeMath for uint256; function fulfillRandomness(bytes32 requestId, uint256 randomness) internal virtual; function requestRandomness(bytes32 _keyHash, uint256 _fee, uint256 _seed) internal returns (bytes32 requestId) { LINK.transferAndCall(vrfCoordinator, _fee, abi.encode(_keyHash, _seed)); uint256 vRFSeed = makeVRFInputSeed(_keyHash, _seed, address(this), nonces[_keyHash]); nonces[_keyHash] = nonces[_keyHash].add(1); return makeRequestId(_keyHash, vRFSeed); } LinkTokenInterface immutable internal LINK; address immutable private vrfCoordinator; mapping(bytes32 /* keyHash */ => uint256 /* nonce */) private nonces; constructor(address _vrfCoordinator, address _link) public { vrfCoordinator = _vrfCoordinator; LINK = LinkTokenInterface(_link); } function rawFulfillRandomness(bytes32 requestId, uint256 randomness) external { require(msg.sender == vrfCoordinator, "Only VRFCoordinator can fulfill"); fulfillRandomness(requestId, randomness); } } contract RandomNumberConsumer is VRFConsumerBase { bytes32 internal keyHash; uint256 internal fee; uint256 private currentTarget = 0; uint256 private winner1 = 0; uint256 private winner2 = 0; uint256 private winner3 = 0; /** * Constructor inherits VRFConsumerBase * * Network: Kovan * Chainlink VRF Coordinator address: 0xdD3782915140c8f3b190B5D67eAc6dc5760C46E9 * LINK token address: 0xa36085F69e2889c224210F603D836748e7dC0088 * Key Hash: 0x6c3699283bda56ad74f6b855546325b68d482e983852a7a82979cc4807b641f4 */ constructor() VRFConsumerBase( 0xf0d54349aDdcf704F77AE15b96510dEA15cb7952, // VRF Coordinator 0x514910771AF9Ca656af840dff83E8264EcF986CA // LINK Token ) public { keyHash = 0xAA77729D3466CA35AE8D28B3BBAC7CC36A5031EFDC430821C02BC31A238AF445; fee = 2 * 10 ** 18; // 2 LINK } /** * Requests randomness from a user-provided seed */ function getRandomNumber(uint256 userProvidedSeed) public returns (bytes32 requestId) { require(LINK.balanceOf(address(this)) >= fee, "Not enough LINK - fill contract with faucet"); currentTarget = userProvidedSeed; return requestRandomness(keyHash, fee, userProvidedSeed); } /** * Callback function used by VRF Coordinator */ function fulfillRandomness(bytes32 requestId, uint256 randomness) internal override { requestId = 0; if(currentTarget == 1) winner1 = randomness; else if(currentTarget == 2) winner2 = randomness; else if(currentTarget == 3) winner3 = randomness; } function getWinners() external view returns (uint256, uint256, uint256) { return (winner1, winner2, winner3); } function getCurrentTarget() external view returns (uint256) { return currentTarget; } function initialize() external { currentTarget = 0; winner1 = 0; winner2 = 0; winner3 = 0; } } contract DateTime { /* * Date and Time utilities for ethereum contracts * */ struct _DateTime { uint16 year; uint8 month; uint8 day; } uint constant DAY_IN_SECONDS = 86400; uint constant YEAR_IN_SECONDS = 31536000; uint constant LEAP_YEAR_IN_SECONDS = 31622400; uint constant HOUR_IN_SECONDS = 3600; uint constant MINUTE_IN_SECONDS = 60; uint16 constant ORIGIN_YEAR = 1970; function isLeapYear(uint16 year) public pure returns (bool) { if (year % 4 != 0) { return false; } if (year % 100 != 0) { return true; } if (year % 400 != 0) { return false; } return true; } function leapYearsBefore(uint year) public pure returns (uint) { year -= 1; return year / 4 - year / 100 + year / 400; } function getDaysInMonth(uint8 month, uint16 year) public pure returns (uint8) { if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { return 31; } else if (month == 4 || month == 6 || month == 9 || month == 11) { return 30; } else if (isLeapYear(year)) { return 29; } else { return 28; } } function parseTimestamp(uint timestamp) public pure returns (_DateTime memory dt) { uint secondsAccountedFor = 0; uint buf; uint8 i; // Year dt.year = getYear(timestamp); buf = leapYearsBefore(dt.year) - leapYearsBefore(ORIGIN_YEAR); secondsAccountedFor += LEAP_YEAR_IN_SECONDS * buf; secondsAccountedFor += YEAR_IN_SECONDS * (dt.year - ORIGIN_YEAR - buf); // Month uint secondsInMonth; for (i = 1; i <= 12; i++) { secondsInMonth = DAY_IN_SECONDS * getDaysInMonth(i, dt.year); if (secondsInMonth + secondsAccountedFor > timestamp) { dt.month = i; break; } secondsAccountedFor += secondsInMonth; } // Day for (i = 1; i <= getDaysInMonth(dt.month, dt.year); i++) { if (DAY_IN_SECONDS + secondsAccountedFor > timestamp) { dt.day = i; break; } secondsAccountedFor += DAY_IN_SECONDS; } } function getYear(uint timestamp) public pure returns (uint16) { uint secondsAccountedFor = 0; uint16 year; uint numLeapYears; // Year year = uint16(ORIGIN_YEAR + timestamp / YEAR_IN_SECONDS); numLeapYears = leapYearsBefore(year) - leapYearsBefore(ORIGIN_YEAR); secondsAccountedFor += LEAP_YEAR_IN_SECONDS * numLeapYears; secondsAccountedFor += YEAR_IN_SECONDS * (year - ORIGIN_YEAR - numLeapYears); while (secondsAccountedFor > timestamp) { if (isLeapYear(uint16(year - 1))) { secondsAccountedFor -= LEAP_YEAR_IN_SECONDS; } else { secondsAccountedFor -= YEAR_IN_SECONDS; } year -= 1; } return year; } } interface IUniswapV2Router02 { function WETH() external pure returns (address); function swapETHForExactTokens( uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function getAmountsIn( uint amountOut, address[] memory path) external view returns (uint[] memory amounts); } abstract contract ContractGuard { using Address for address; modifier noContract(address account) { require(Address.isContract(account) == false, "Contracts are not allowed to interact with the Offertory"); _; } } contract Offertory is Ownable, ReentrancyGuard, ContractGuard { using SafeMath for uint256; using Address for address; using SafeERC20 for IERC20; RandomNumberConsumer public rnGenerator = new RandomNumberConsumer(); DateTime dTime = new DateTime(); IUniswapV2Router02 public immutable uniswapV2Router; address private immutable prophetContract; address[] private uniswapPairPath; address private dealerWallet; uint256 private minDealerDepositAmount = 100e9; uint256 private dealerDepositAmount; bool private gameInProgress; uint256 private lotteryStartTime; uint256 private lotteryEndTime; uint256 private ticketPrice = 100e9; uint256 private minPlayerCount = 10; uint256 private maxBuyableTicketCountInDay = 2; uint256 private winnerPrizePct1 = 60; uint256 private winnerPrizePct2 = 25; uint256 private winnerPrizePct3 = 15; uint256 private refundPct = 90; uint256 private announceFee = 10e9; uint256 private totalAmountToRefund; address private winner1Address; address private winner2Address; address private winner3Address; uint256 private prizeAmountAtAnnounce; uint256 private winnerMode = 1; mapping (address => uint256) private playerBalance; // map for players balance address[] private players; TICKET_INFO[] private tickets; bool newGameStart; struct TICKET_INFO { address player; DateTime._DateTime date; } // Events event DealerWalletUpdated(address indexed dealerWallet); event MinDealerDepositAmountUpdated(uint256 minDealerDepositAmount); event LotteryStartTimeUpdated(uint256 lotteryStartTime); event LotteryEndTimeUpdated(uint256 lotteryEndTime); event WinnerPrizeUpdated(uint256 winnerPrizePct1, uint256 winnerPrizePct2, uint256 winnerPrizePct3); event TicketPriceUpdated(uint256 ticketPrice); event MinPlayerCountUpdated(uint256 minPlayerCount); event RefundPctUpdated(uint256 refundPct); event BoughtTicket(address indexed player, uint256 amount); event Claimed(address indexed player, uint256 amount); event PlayerGaveup(address indexed player, uint256 amount); event DealerDeposited(address indexed dealerWallet, uint256 amount); event AnnounceFeeUpdated(uint256 announceFee); event AnnouncedWinners(address indexed winner1, address indexed winner2, address indexed winner3); event MaxBuyableTicketCountInDayUpdated(uint256 maxBuyableTicketCountInDay); event WinnerModeUpdated(uint256 winnerMode); constructor ( IUniswapV2Router02 _uniswapV2Router, address _prophetContract, address _dealerWallet, uint256 _ticketPrice, uint256 _minPlayerCount, uint256 _winnerPrizePct1, uint256 _winnerPrizePct2, uint256 _winnerPrizePct3, uint256 _refundPct, uint256 _announceFee) public { uniswapV2Router = _uniswapV2Router; prophetContract = _prophetContract; uniswapPairPath = new address[](2); uniswapPairPath[0] = _uniswapV2Router.WETH(); uniswapPairPath[1] = _prophetContract; setDealerWallet(_dealerWallet); setTicketPrice(_ticketPrice); setMinPlayerCount(_minPlayerCount); setWinnerPrizePct(_winnerPrizePct1, _winnerPrizePct2, _winnerPrizePct3); setRefundPct(_refundPct); setAnnounceFee(_announceFee); } function setDealerWallet(address _dealerWallet) public onlyOwner() nonReentrant noContract(msg.sender) { require(_dealerWallet != address(0), 'Prophet Lottery: dealerWallet is zero.'); dealerWallet = _dealerWallet; emit DealerWalletUpdated(_dealerWallet); } function setMinDealerDepositAmount(uint256 _minDealerDepositAmount) public onlyOwner() nonReentrant noContract(msg.sender) { require(_minDealerDepositAmount >= 100e9, 'Prophet Lottery: minDealerDepositAmount is less than 100e9.'); minDealerDepositAmount = _minDealerDepositAmount; emit MinDealerDepositAmountUpdated(_minDealerDepositAmount); } function setLotteryStartTime(uint256 _lotteryStartTime) public onlyOwner() nonReentrant noContract(msg.sender) { require(_lotteryStartTime >= now, 'Prophet Lottery: lotteryStartTime is ahead of now.'); require(players.length == 0 || (!gameInProgress && now > lotteryEndTime + 3 days), 'Prophet Lottery: we can not start new game now.'); lotteryStartTime = _lotteryStartTime; newGameStart = true; gameInProgress = false; emit LotteryStartTimeUpdated(_lotteryStartTime); } function setWinnerMode(uint256 _winnerMode) public onlyOwner() nonReentrant noContract(msg.sender) { require(_winnerMode == 1 || _winnerMode == 3, 'Prophet Lottery: winnerMode should be 1 or 3.'); winnerMode = _winnerMode; emit WinnerModeUpdated(_winnerMode); } function setLotteryEndTime(uint256 _lotteryEndTime) public onlyOwner() nonReentrant noContract(msg.sender) { require(newGameStart , 'Prophet Lottery: game is not started yet.'); require(_lotteryEndTime >= lotteryStartTime + 2 days && _lotteryEndTime <= lotteryStartTime + 30 days, 'Prophet Lottery: lotteryEndTime should be in 2 ~ 30 days since start.'); require(_lotteryEndTime >= now, 'Prophet Lottery: lotteryEndTime is ahead of now.'); lotteryEndTime = _lotteryEndTime; winner1Address = address(0); winner2Address = address(0); winner3Address = address(0); prizeAmountAtAnnounce = 0; dealerDepositAmount = 0; totalAmountToRefund = 0; rnGenerator.initialize(); for(uint i=players.length; i>0; i--) { playerBalance[players[i-1]] = 0; players.pop(); } for(uint i=tickets.length; i>0; i--) { tickets.pop(); } gameInProgress = true; emit LotteryEndTimeUpdated(_lotteryEndTime); } function setWinnerPrizePct(uint256 _winnerPrizePct1, uint256 _winnerPrizePct2, uint256 _winnerPrizePct3) public onlyOwner() nonReentrant { require(_winnerPrizePct1.add(_winnerPrizePct2).add(_winnerPrizePct3) == 100, 'Prophet Lottery: sum of winner prize percentages is not 100.'); require(_winnerPrizePct1 >= _winnerPrizePct2 && _winnerPrizePct2 >= _winnerPrizePct3, 'Prophet Lottery: winner prize percentages should be set properly by order.'); winnerPrizePct1 = _winnerPrizePct1; winnerPrizePct2 = _winnerPrizePct2; winnerPrizePct3 = _winnerPrizePct3; emit WinnerPrizeUpdated(_winnerPrizePct1, _winnerPrizePct2, _winnerPrizePct3); } function setMinPlayerCount(uint256 _minPlayerCount) public onlyOwner() nonReentrant { require(_minPlayerCount >= 10, 'Prophet Lottery: minPlayerCount is less than 10.'); minPlayerCount = _minPlayerCount; emit MinPlayerCountUpdated(_minPlayerCount); } function setAnnounceFee(uint256 _announceFee) public onlyOwner() nonReentrant { require(_announceFee >= 10e9 && _announceFee <= 100e9, 'Prophet Lottery: announceFee should be in 10e9 ~ 100e9.'); announceFee = _announceFee; emit AnnounceFeeUpdated(_announceFee); } function setMaxBuyableTicketCountInDay(uint256 _maxBuyableTicketCountInDay) public onlyOwner() nonReentrant { require(_maxBuyableTicketCountInDay >= 1 && _maxBuyableTicketCountInDay <= 10, 'Prophet Lottery: maxBuyableTicketCountInDay should be in 1 ~ 10.'); maxBuyableTicketCountInDay = _maxBuyableTicketCountInDay; emit MaxBuyableTicketCountInDayUpdated(_maxBuyableTicketCountInDay); } function setTicketPrice(uint256 _ticketPrice) private { require(_ticketPrice >= 100e9, 'Prophet Lottery: ticketPrice is less than 100e9.'); ticketPrice = _ticketPrice; emit TicketPriceUpdated(_ticketPrice); } function setRefundPct(uint256 _refundPct) private { require(players.length == 0, 'Prophet Lottery: game is in progress now.'); require(_refundPct >= 33 && _refundPct <= 97, 'Prophet Lottery: refundPct should be in 33 ~ 97.'); refundPct = _refundPct; emit RefundPctUpdated(_refundPct); } function getTicketCountInSameDate(address player, DateTime._DateTime memory dt) private view returns (uint256) { uint256 ticketCountInSameDate = 0; for(uint i=0; i<tickets.length; i++) { if(tickets[i].player == player && tickets[i].date.year == dt.year && tickets[i].date.month == dt.month && tickets[i].date.day == dt.day) { ticketCountInSameDate++; } } return ticketCountInSameDate; } receive() external payable {} function buyTicket() external payable nonReentrant noContract(msg.sender) { require( gameInProgress, "Prophet Lottery: game is not started yet." ); uint256 currentTarget = rnGenerator.getCurrentTarget(); require( currentTarget == 0, "Prophet Lottery: it is too late to buy ticket now." ); DateTime._DateTime memory dt = dTime.parseTimestamp(now); require( getTicketCountInSameDate(_msgSender(), dt) < maxBuyableTicketCountInDay, "Prophet Lottery: you already bought max tickets today." ); TICKET_INFO memory ticket; ticket.player = _msgSender(); ticket.date = dt; tickets.push(ticket); uniswapV2Router .swapETHForExactTokens{value: msg.value}( ticketPrice, uniswapPairPath, address(this), block.timestamp + 15 ); (bool success,) = _msgSender().call{ value: address(this).balance }(""); require(success, "refund failed"); if(playerBalance[_msgSender()] == 0) players.push(_msgSender()); playerBalance[_msgSender()] = playerBalance[_msgSender()].add(ticketPrice.mul(refundPct).div(100)); totalAmountToRefund = totalAmountToRefund.add(ticketPrice.mul(refundPct).div(100)); BoughtTicket(_msgSender(), ticketPrice); } function claim() external nonReentrant noContract(msg.sender) { require( !gameInProgress, "Prophet Lottery: game is in progress now." ); require( playerBalance[_msgSender()] > 0, "Prophet Lottery: your balance is 0." ); uint256 returnAmount = playerBalance[_msgSender()]; removePlayerFromList(); require( IERC20(prophetContract).transfer( _msgSender(), returnAmount ), "Prophet Lottery: exit failed." ); Claimed(_msgSender(), playerBalance[_msgSender()]); } function removePlayerFromList() private { playerBalance[_msgSender()] = 0; for(uint i=0; i<players.length; i++) { if(players[i] == _msgSender()) { players[i] = players[players.length-1]; players.pop(); break; } } } function dealerDeposit(uint256 amount) external nonReentrant noContract(msg.sender) { require( _msgSender() == dealerWallet, "Prophet Lottery: only dealer wallet can deposit." ); require( dealerDepositAmount.add(amount) >= minDealerDepositAmount, "Prophet Lottery: dealerDepositAmount is less than minDealerDepositAmount." ); require( IERC20(prophetContract).transferFrom( _msgSender(), address(this), amount ), "Prophet Lottery: dealer deposit failed." ); dealerDepositAmount = dealerDepositAmount.add(amount); DealerDeposited(_msgSender(), amount); } function pickWinner1() external nonReentrant noContract(msg.sender) { require( gameInProgress && now >= lotteryEndTime, "Prophet Lottery: it is not a time to pick winner." ); require( dealerDepositAmount >= minDealerDepositAmount, "Prophet Lottery: dealerDepositAmount is less than minDealerDepositAmount." ); require( players.length >= minPlayerCount, "Prophet Lottery: player count is less than minPlayerCount." ); uint256 currentTarget = rnGenerator.getCurrentTarget(); require(currentTarget == 0, "Prophet Lottery: we can't pick winner1 now."); rnGenerator.getRandomNumber(1); } function pickWinner2() external nonReentrant noContract(msg.sender) { uint256 currentTarget = rnGenerator.getCurrentTarget(); (uint256 winner1,,) = rnGenerator.getWinners(); require(currentTarget == 1 && winner1 != 0, "Prophet Lottery: we can't pick winner2 now."); rnGenerator.getRandomNumber(2); } function pickWinner3() external nonReentrant noContract(msg.sender) { uint256 currentTarget = rnGenerator.getCurrentTarget(); (,uint256 winner2,) = rnGenerator.getWinners(); require(currentTarget == 2 && winner2 != 0, "Prophet Lottery: we can't pick winner3 now."); rnGenerator.getRandomNumber(3); } function announceWinners() external nonReentrant noContract(msg.sender) { uint256 ticketCount = tickets.length; uint256 playerCount = players.length; require( gameInProgress && now >= lotteryEndTime, "Prophet Lottery: it is not a time to announce winner." ); require( dealerDepositAmount >= minDealerDepositAmount, "Prophet Lottery: dealerDepositAmount is less than minDealerDepositAmount." ); if(playerCount >= minPlayerCount) { (uint256 winner1, uint256 winner2, uint256 winner3) = rnGenerator.getWinners(); if(winnerMode == 1) require( winner1 != 0, "Prophet Lottery: Not picked all wineres yet." ); else require( winner1 != 0 && winner2 != 0 && winner3 != 0, "Prophet Lottery: Not picked all wineres yet." ); prizeAmountAtAnnounce = IERC20(prophetContract).balanceOf(address(this)).sub(totalAmountToRefund).sub(announceFee); uint256 winnerPrize1 = prizeAmountAtAnnounce.mul(winnerPrizePct1).div(100); uint256 winnerPrize2 = prizeAmountAtAnnounce.mul(winnerPrizePct2).div(100); uint256 winnerPrize3 = prizeAmountAtAnnounce.sub(winnerPrize1).sub(winnerPrize2); TICKET_INFO[] memory ticketList = tickets; winner1 = winner1.mod(playerCount); winner1Address = ticketList[winner1].player; playerBalance[winner1Address] = playerBalance[winner1Address].add(winnerPrize1); ticketList[winner1] = ticketList[ticketCount - 1]; ticketCount--; winner2 = winner2.mod(playerCount); winner2Address = ticketList[winner2].player; playerBalance[winner2Address] = playerBalance[winner2Address].add(winnerPrize2); ticketList[winner2] = ticketList[ticketCount - 1]; ticketCount--; winner3 = winner3.mod(playerCount); winner3Address = ticketList[winner3].player; playerBalance[winner3Address] = playerBalance[winner3Address].add(winnerPrize3); require( IERC20(prophetContract).transfer( _msgSender(), announceFee ), "Prophet Lottery: announceFee transfer failed." ); newGameStart = false; gameInProgress = false; AnnouncedWinners(winner1Address, winner2Address, winner3Address); } else { if(dealerDepositAmount > 0) { IERC20(prophetContract).transfer( dealerWallet, dealerDepositAmount.mul(refundPct) ); } if(IERC20(prophetContract).balanceOf(address(this)).sub(totalAmountToRefund) >= announceFee) { IERC20(prophetContract).transfer( _msgSender(), announceFee ); } dealerDepositAmount = 0; newGameStart = false; gameInProgress = false; } } function getBalance(address player) external view returns (uint256) { return playerBalance[player]; } function getPlayerCount() external view returns (uint256) { return players.length; } function getPlayers() external view returns (address [] memory) { return players; } function getEstimatedETHforTicket() external view returns (uint[] memory) { return uniswapV2Router.getAmountsIn(ticketPrice, uniswapPairPath); } function getTicketCountOfToday(address player) external view returns (uint256) { DateTime._DateTime memory dt = dTime.parseTimestamp(now); return getTicketCountInSameDate(player, dt); } function getTicketCountOfPlayer(address player) external view returns (uint256) { uint256 ticketCountOfPlayer = 0; for(uint i=0; i<tickets.length; i++) { if(tickets[i].player == player) { ticketCountOfPlayer++; } } return ticketCountOfPlayer; } function getTicketCount() external view returns (uint256) { return tickets.length; } function getWinner1() external view returns (address) { return winner1Address; } function getWinner2() external view returns (address) { return winner2Address; } function getWinner3() external view returns (address) { return winner3Address; } function getWinners() external view returns (uint256, uint256, uint256) { return rnGenerator.getWinners(); } function getCurrentTarget() external view returns (uint256) { return rnGenerator.getCurrentTarget(); } function getDealerDepositAmount() external view returns (uint256) { return dealerDepositAmount; } function getLotteryStartTime() external view returns (uint256) { return lotteryStartTime; } function getLotteryEndTime() external view returns (uint256) { return lotteryEndTime; } function getTicketPrice() external view returns (uint256) { return ticketPrice; } function getMinPlayerCount() external view returns (uint256) { return minPlayerCount; } function getWinnerPrizePct1() external view returns (uint256) { return winnerPrizePct1; } function getWinnerPrizePct2() external view returns (uint256) { return winnerPrizePct2; } function getWinnerPrizePct3() external view returns (uint256) { return winnerPrizePct3; } function getRefundPct() external view returns (uint256) { return refundPct; } function getAnnounceFee() external view returns (uint256) { return announceFee; } function getGameInProgress() external view returns (bool) { return gameInProgress; } function getDealerWallet() external view returns (address) { return dealerWallet; } function getMinDealerDepositAmount() external view returns (uint256) { return minDealerDepositAmount; } function getWinnerMode() external view returns(uint256) { return winnerMode; } function getTotalPrizeAmount() external view returns (uint256) { if(IERC20(prophetContract).balanceOf(address(this)).sub(totalAmountToRefund) >= announceFee) return IERC20(prophetContract).balanceOf(address(this)).sub(totalAmountToRefund).sub(announceFee); return 0; } function getTotalPrizeAmountAtAnnounce() external view returns (uint256) { return prizeAmountAtAnnounce; } function getMaxBuyableTicketCountInDay() external view returns (uint256) { return maxBuyableTicketCountInDay; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IUniswapV2Router02","name":"_uniswapV2Router","type":"address"},{"internalType":"address","name":"_prophetContract","type":"address"},{"internalType":"address","name":"_dealerWallet","type":"address"},{"internalType":"uint256","name":"_ticketPrice","type":"uint256"},{"internalType":"uint256","name":"_minPlayerCount","type":"uint256"},{"internalType":"uint256","name":"_winnerPrizePct1","type":"uint256"},{"internalType":"uint256","name":"_winnerPrizePct2","type":"uint256"},{"internalType":"uint256","name":"_winnerPrizePct3","type":"uint256"},{"internalType":"uint256","name":"_refundPct","type":"uint256"},{"internalType":"uint256","name":"_announceFee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"announceFee","type":"uint256"}],"name":"AnnounceFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"winner1","type":"address"},{"indexed":true,"internalType":"address","name":"winner2","type":"address"},{"indexed":true,"internalType":"address","name":"winner3","type":"address"}],"name":"AnnouncedWinners","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BoughtTicket","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dealerWallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DealerDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dealerWallet","type":"address"}],"name":"DealerWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"lotteryEndTime","type":"uint256"}],"name":"LotteryEndTimeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"lotteryStartTime","type":"uint256"}],"name":"LotteryStartTimeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxBuyableTicketCountInDay","type":"uint256"}],"name":"MaxBuyableTicketCountInDayUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minDealerDepositAmount","type":"uint256"}],"name":"MinDealerDepositAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minPlayerCount","type":"uint256"}],"name":"MinPlayerCountUpdated","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":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PlayerGaveup","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"refundPct","type":"uint256"}],"name":"RefundPctUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ticketPrice","type":"uint256"}],"name":"TicketPriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"winnerMode","type":"uint256"}],"name":"WinnerModeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"winnerPrizePct1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"winnerPrizePct2","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"winnerPrizePct3","type":"uint256"}],"name":"WinnerPrizeUpdated","type":"event"},{"inputs":[],"name":"announceWinners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTicket","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"dealerDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAnnounceFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDealerDepositAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDealerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEstimatedETHforTicket","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGameInProgress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLotteryEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLotteryStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxBuyableTicketCountInDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinDealerDepositAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinPlayerCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPlayerCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPlayers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRefundPct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTicketCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"getTicketCountOfPlayer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"getTicketCountOfToday","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTicketPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalPrizeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalPrizeAmountAtAnnounce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWinner1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWinner2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWinner3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWinnerMode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWinnerPrizePct1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWinnerPrizePct2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWinnerPrizePct3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWinners","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pickWinner1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pickWinner2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pickWinner3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rnGenerator","outputs":[{"internalType":"contract RandomNumberConsumer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_announceFee","type":"uint256"}],"name":"setAnnounceFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dealerWallet","type":"address"}],"name":"setDealerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lotteryEndTime","type":"uint256"}],"name":"setLotteryEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lotteryStartTime","type":"uint256"}],"name":"setLotteryStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyableTicketCountInDay","type":"uint256"}],"name":"setMaxBuyableTicketCountInDay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minDealerDepositAmount","type":"uint256"}],"name":"setMinDealerDepositAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPlayerCount","type":"uint256"}],"name":"setMinPlayerCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_winnerMode","type":"uint256"}],"name":"setWinnerMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_winnerPrizePct1","type":"uint256"},{"internalType":"uint256","name":"_winnerPrizePct2","type":"uint256"},{"internalType":"uint256","name":"_winnerPrizePct3","type":"uint256"}],"name":"setWinnerPrizePct","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052604051620000129062000827565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b03929092169190911790556040516200005e9062000835565b604051809103906000f0801580156200007b573d6000803e3d6000fd5b50600360006101000a8154816001600160a01b0302191690836001600160a01b0316021790555064174876e80060065564174876e800600b55600a600c556002600d55603c600e556019600f55600f601055605a6011556402540be4006012556001601855348015620000ed57600080fd5b5060405162005cef38038062005cef8339810160408190526200011091620008ed565b60006200011c620002f5565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001805560608a811b6001600160601b03199081166080528a821b1660a0526040805160028082529281018252919060208301908036833750508151620001b592600492506020019062000843565b50896001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001f057600080fd5b505afa15801562000205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022b9190620008ce565b60046000815481106200023a57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508860046001815481106200027857fe5b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055620002ac88620002f9565b620002b78762000419565b620002c28662000483565b620002cf85858562000552565b620002da8262000690565b620002e5816200071c565b5050505050505050505062000d67565b3390565b62000303620002f5565b6000546001600160a01b039081169116146200033c5760405162461bcd60e51b8152600401620003339062000b0d565b60405180910390fd5b60026001541415620003625760405162461bcd60e51b8152600401620003339062000cf8565b6002600181905550336200038181620007f260201b62002f181760201c565b15620003a15760405162461bcd60e51b8152600401620003339062000a0d565b6001600160a01b038216620003ca5760405162461bcd60e51b8152600401620003339062000a6a565b600580546001600160a01b0319166001600160a01b0384169081179091556040517fc4e8ce8414f504a2dc0906ca3306e3268d2060988468b5125cad4c8af5a46f9f90600090a2505060018055565b64174876e800811015620004415760405162461bcd60e51b8152600401620003339062000be8565b600b8190556040517f7429795511c1ec5ebcc0e6839095ec18f13fce25cdc7c90da9d8a016584a1dbe906200047890839062000d2f565b60405180910390a150565b6200048d620002f5565b6000546001600160a01b03908116911614620004bd5760405162461bcd60e51b8152600401620003339062000b0d565b60026001541415620004e35760405162461bcd60e51b8152600401620003339062000cf8565b6002600155600a8110156200050c5760405162461bcd60e51b8152600401620003339062000c38565b600c8190556040517f2c0421c8237e58bcb2596dd964b1ec8b90fdafed56f2821ceb715cc68320ae03906200054390839062000d2f565b60405180910390a15060018055565b6200055c620002f5565b6000546001600160a01b039081169116146200058c5760405162461bcd60e51b8152600401620003339062000b0d565b60026001541415620005b25760405162461bcd60e51b8152600401620003339062000cf8565b6002600155620005e881620005d48585620007f8602090811b62002f1e17901c565b620007f860201b62002f1e1790919060201c565b6064146200060a5760405162461bcd60e51b8152600401620003339062000b42565b8183101580156200061b5750808210155b6200063a5760405162461bcd60e51b8152600401620003339062000c88565b600e839055600f82905560108190556040517f769567d75cd1e61ae966a5845997a71173e816898c9563e7ecd3b19d0a170335906200067f9085908590859062000d38565b60405180910390a150506001805550565b601a5415620006b35760405162461bcd60e51b8152600401620003339062000b9f565b60218110158015620006c6575060618111155b620006e55760405162461bcd60e51b81526004016200033390620009bd565b60118190556040517ff152a94432800bf41861e9f48473afc80829b2f5702756abf3541b25c636d8ed906200047890839062000d2f565b62000726620002f5565b6000546001600160a01b03908116911614620007565760405162461bcd60e51b8152600401620003339062000b0d565b600260015414156200077c5760405162461bcd60e51b8152600401620003339062000cf8565b60026001556402540be40081108015906200079c575064174876e8008111155b620007bb5760405162461bcd60e51b8152600401620003339062000ab0565b60128190556040517f90af693cc974d0895c909f807f417684ade4e1694d372dda6a9aa7312084ef10906200054390839062000d2f565b3b151590565b600082820183811015620008205760405162461bcd60e51b8152600401620003339062000986565b9392505050565b61075e806200505b83390190565b61053680620057b983390190565b8280548282559060005260206000209081019282156200089b579160200282015b828111156200089b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000864565b50620008a9929150620008ad565b5090565b5b80821115620008a95780546001600160a01b0319168155600101620008ae565b600060208284031215620008e0578081fd5b8151620008208162000d4e565b6000806000806000806000806000806101408b8d0312156200090d578586fd5b8a516200091a8162000d4e565b60208c0151909a506200092d8162000d4e565b60408c0151909950620009408162000d4e565b8098505060608b0151965060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b015190509295989b9194979a5092959850565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526030908201527f50726f70686574204c6f74746572793a20726566756e645063742073686f756c60408201526f321031329034b7101999903f101c9b9760811b606082015260800190565b60208082526038908201527f436f6e74726163747320617265206e6f7420616c6c6f77656420746f20696e7460408201527f6572616374207769746820746865204f66666572746f72790000000000000000606082015260800190565b60208082526026908201527f50726f70686574204c6f74746572793a206465616c657257616c6c6574206973604082015265103d32b9379760d11b606082015260800190565b60208082526037908201527f50726f70686574204c6f74746572793a20616e6e6f756e63654665652073686f60408201527f756c6420626520696e2031306539207e2031303065392e000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252603c908201527f50726f70686574204c6f74746572793a2073756d206f662077696e6e6572207060408201527f72697a652070657263656e7461676573206973206e6f74203130302e00000000606082015260800190565b60208082526029908201527f50726f70686574204c6f74746572793a2067616d6520697320696e2070726f676040820152683932b9b9903737bb9760b91b606082015260800190565b60208082526030908201527f50726f70686574204c6f74746572793a207469636b657450726963652069732060408201526f3632b9b9903a3430b710189818329c9760811b606082015260800190565b60208082526030908201527f50726f70686574204c6f74746572793a206d696e506c61796572436f756e742060408201526f34b9903632b9b9903a3430b71018981760811b606082015260800190565b6020808252604a908201527f50726f70686574204c6f74746572793a2077696e6e6572207072697a6520706560408201527f7263656e74616765732073686f756c64206265207365742070726f7065726c7960608201526910313c9037b93232b91760b11b608082015260a00190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b6001600160a01b038116811462000d6457600080fd5b50565b60805160601c60a05160601c61429862000dc3600039806111a6528061198e5280611a415280611de9528061211c528061225a528061230a528061235b5280612754525080610db852806114f05280612b2652506142986000f3fe6080604052600436106102cd5760003560e01c80638422510211610175578063b79e76f4116100dc578063e05e92d211610095578063f2fde38b1161006f578063f2fde38b14610766578063f6b58b1014610786578063f8b2cb4f1461079b578063f8c3189e146107bb576102d4565b8063e05e92d214610729578063edca914c14610749578063f161102c14610751576102d4565b8063b79e76f41461069c578063bedef3e0146106b1578063c2e52206146106c6578063c5b00428146106db578063cdbc6f18146106f0578063df15c37e14610705576102d4565b806396645ed71161012e57806396645ed714610613578063a451876214610633578063a55a0f1314610648578063a848e2fa1461065d578063aae59cf614610672578063b1fb13f314610687576102d4565b8063842251021461057d57806387bb7ae0146105925780638b5b9ccc146105a75780638da5cb5b146105c95780638f32b000146105de5780638f5611f6146105f3576102d4565b80634d3d4457116102345780635b04a54b116101ed57806366c7d79c116101c757806366c7d79c1461051e578063715018a61461053357806378132b1314610548578063814ca4ad14610568576102d4565b80635b04a54b146104c95780636202cf8a146104e9578063648cc5fc14610509576102d4565b80634d3d4457146104265780634e328c4c1461043b5780634e71d92d1461045d578063515a978e1461047257806357a9efe41461048757806357d9a9fa146104a9576102d4565b80631d6284e0116102865780631d6284e0146103a857806321c63a47146103bd57806323d01c29146103d25780632d0304ec146103e757806334360c6d146103fc5780634094a8f414610411576102d4565b806303788617146102d957806304273770146102fb5780630b5f79101461031b5780630b7ab3931461033b5780631694505e1461035b57806317c900ec14610386576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f43660046134b3565b6107db565b005b34801561030757600080fd5b506102f96103163660046134b3565b610925565b34801561032757600080fd5b506102f96103363660046134cb565b610a09565b34801561034757600080fd5b506102f96103563660046134b3565b610b19565b34801561036757600080fd5b50610370610db6565b60405161037d9190613569565b60405180910390f35b34801561039257600080fd5b5061039b610dda565b60405161037d919061364a565b3480156103b457600080fd5b5061039b610de1565b3480156103c957600080fd5b5061039b610de7565b3480156103de57600080fd5b5061039b610ded565b3480156103f357600080fd5b50610370610e6f565b34801561040857600080fd5b5061039b610e7e565b34801561041d57600080fd5b506102f9610e84565b34801561043257600080fd5b50610370611095565b34801561044757600080fd5b506104506110a4565b60405161037d919061363f565b34801561046957600080fd5b506102f96110ad565b34801561047e57600080fd5b506102f96112e3565b34801561049357600080fd5b5061049c6114d3565b60405161037d9190613607565b3480156104b557600080fd5b506102f96104c43660046134b3565b611579565b3480156104d557600080fd5b506102f96104e43660046134b3565b611657565b3480156104f557600080fd5b506102f9610504366004613366565b61172e565b34801561051557600080fd5b5061039b611827565b34801561052a57600080fd5b5061039b61182d565b34801561053f57600080fd5b506102f9611833565b34801561055457600080fd5b506102f96105633660046134b3565b6118b2565b34801561057457600080fd5b50610370611972565b34801561058957600080fd5b5061039b611981565b34801561059e57600080fd5b5061039b611a98565b3480156105b357600080fd5b506105bc611a9e565b60405161037d91906135ba565b3480156105d557600080fd5b50610370611b00565b3480156105ea57600080fd5b5061039b611b0f565b3480156105ff57600080fd5b5061039b61060e366004613366565b611b15565b34801561061f57600080fd5b506102f961062e3660046134b3565b611b71565b34801561063f57600080fd5b5061039b611c24565b34801561065457600080fd5b5061039b611c2a565b34801561066957600080fd5b5061039b611c30565b34801561067e57600080fd5b506102f9611c36565b34801561069357600080fd5b5061039b612428565b3480156106a857600080fd5b5061039b61242e565b3480156106bd57600080fd5b5061039b612434565b3480156106d257600080fd5b5061039b61243a565b3480156106e757600080fd5b506102f9612440565b3480156106fc57600080fd5b506103706125f6565b34801561071157600080fd5b5061071a612605565b60405161037d93929190614205565b34801561073557600080fd5b506102f96107443660046134b3565b61269b565b6102f9612867565b34801561075d57600080fd5b5061039b612d95565b34801561077257600080fd5b506102f9610781366004613366565b612d9b565b34801561079257600080fd5b50610370612e51565b3480156107a757600080fd5b5061039b6107b6366004613366565b612e60565b3480156107c757600080fd5b5061039b6107d6366004613366565b612e7b565b6107e3612f4c565b6000546001600160a01b039081169116146108195760405162461bcd60e51b815260040161081090613cb8565b60405180910390fd5b6002600154141561083c5760405162461bcd60e51b8152600401610810906140af565b60026001553361084b81612f18565b156108685760405162461bcd60e51b8152600401610810906138f4565b428210156108885760405162461bcd60e51b815260040161081090613eb4565b601a5415806108ab575060085460ff161580156108ab5750600a546203f4800142115b6108c75760405162461bcd60e51b8152600401610810906136f1565b6009829055601c805460ff199081166001179091556008805490911690556040517f14e7df51f1b8fbd1f423c8162e7cee59ad00c91369bef1a613f7c257296cb3fc9061091590849061364a565b60405180910390a1505060018055565b61092d612f4c565b6000546001600160a01b0390811691161461095a5760405162461bcd60e51b815260040161081090613cb8565b6002600154141561097d5760405162461bcd60e51b8152600401610810906140af565b60026001553361098c81612f18565b156109a95760405162461bcd60e51b8152600401610810906138f4565b81600114806109b85750816003145b6109d45760405162461bcd60e51b8152600401610810906140e6565b60188290556040517fb0aa08e999a14ce8a5e85d94d4151bf26af7a9145b7cee0b5eb3c4c70396198d9061091590849061364a565b610a11612f4c565b6000546001600160a01b03908116911614610a3e5760405162461bcd60e51b815260040161081090613cb8565b60026001541415610a615760405162461bcd60e51b8152600401610810906140af565b6002600155610a7a81610a748585612f1e565b90612f1e565b606414610a995760405162461bcd60e51b815260040161081090613d5c565b818310158015610aa95750808210155b610ac55760405162461bcd60e51b815260040161081090613fee565b600e839055600f82905560108190556040517f769567d75cd1e61ae966a5845997a71173e816898c9563e7ecd3b19d0a17033590610b0890859085908590614205565b60405180910390a150506001805550565b610b21612f4c565b6000546001600160a01b03908116911614610b4e5760405162461bcd60e51b815260040161081090613cb8565b60026001541415610b715760405162461bcd60e51b8152600401610810906140af565b600260015533610b8081612f18565b15610b9d5760405162461bcd60e51b8152600401610810906138f4565b601c5460ff16610bbf5760405162461bcd60e51b815260040161081090613997565b6009546202a300018210158015610bdd575060095462278d00018211155b610bf95760405162461bcd60e51b815260040161081090613e49565b42821015610c195760405162461bcd60e51b815260040161081090613b7f565b600a829055601480546001600160a01b0319908116909155601580548216905560168054909116905560006017819055600781905560138190556002546040805163204a7f0760e21b815290516001600160a01b0390921692638129fc1c9260048381019382900301818387803b158015610c9357600080fd5b505af1158015610ca7573d6000803e3d6000fd5b5050601a549150505b8015610d2757600060196000601a6001850381548110610ccc57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902055601a805480610cfc57fe5b600082815260209020810160001990810180546001600160a01b031916905590810190915501610cb0565b50601b545b8015610d7857601b805480610d3d57fe5b6000828152602090206000199182016002810290910180546001600160a01b0319168155600101805463ffffffff1916905590915501610d2c565b506008805460ff191660011790556040517fb3cfe1b5955f1137df0fde145639f79f9e9e1ae1f432a34a3f5401074ced70ea9061091590849061364a565b7f000000000000000000000000000000000000000000000000000000000000000081565b600f545b90565b600d5490565b601b5490565b600254604080516323d01c2960e01b815290516000926001600160a01b0316916323d01c29916004808301926020929190829003018186803b158015610e3257600080fd5b505afa158015610e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6a9190613442565b905090565b6016546001600160a01b031690565b60175490565b60026001541415610ea75760405162461bcd60e51b8152600401610810906140af565b600260015533610eb681612f18565b15610ed35760405162461bcd60e51b8152600401610810906138f4565b600254604080516323d01c2960e01b815290516000926001600160a01b0316916323d01c29916004808301926020929190829003018186803b158015610f1857600080fd5b505afa158015610f2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f509190613442565b90506000600260009054906101000a90046001600160a01b03166001600160a01b031663df15c37e6040518163ffffffff1660e01b815260040160606040518083038186803b158015610fa257600080fd5b505afa158015610fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fda91906134f6565b50509050816001148015610fed57508015155b6110095760405162461bcd60e51b815260040161081090613bcf565b60028054604051632cdc85e960e21b81526001600160a01b039091169163b37217a491611039919060040161364a565b602060405180830381600087803b15801561105357600080fd5b505af1158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190613442565b5050600180555050565b6002546001600160a01b031681565b60085460ff1690565b600260015414156110d05760405162461bcd60e51b8152600401610810906140af565b6002600155336110df81612f18565b156110fc5760405162461bcd60e51b8152600401610810906138f4565b60085460ff161561111f5760405162461bcd60e51b815260040161081090613e00565b60006019600061112d612f4c565b6001600160a01b03166001600160a01b03168152602001908152602001600020541161116b5760405162461bcd60e51b815260040161081090613a89565b600060196000611179612f4c565b6001600160a01b03166001600160a01b031681526020019081526020016000205490506111a4612f50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6111db612f4c565b836040518363ffffffff1660e01b81526004016111f99291906135a1565b602060405180830381600087803b15801561121357600080fd5b505af1158015611227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124b9190613422565b6112675760405162461bcd60e51b815260040161081090613790565b61126f612f4c565b6001600160a01b03167fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a601960006112a5612f4c565b6001600160a01b03166001600160a01b03168152602001908152602001600020546040516112d3919061364a565b60405180910390a2505060018055565b600260015414156113065760405162461bcd60e51b8152600401610810906140af565b60026001553361131581612f18565b156113325760405162461bcd60e51b8152600401610810906138f4565b60085460ff1680156113465750600a544210155b6113625760405162461bcd60e51b81526004016108109061405e565b60065460075410156113865760405162461bcd60e51b815260040161081090613ced565b600c54601a5410156113aa5760405162461bcd60e51b815260040161081090613acc565b600254604080516323d01c2960e01b815290516000926001600160a01b0316916323d01c29916004808301926020929190829003018186803b1580156113ef57600080fd5b505afa158015611403573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114279190613442565b905080156114475760405162461bcd60e51b815260040161081090613fa3565b600254604051632cdc85e960e21b81526001600160a01b039091169063b37217a4906114789060019060040161364a565b602060405180830381600087803b15801561149257600080fd5b505af11580156114a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ca9190613442565b50506001805550565b600b546040516307c0329d60e21b81526060916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691631f00ca74916115259160049081016141af565b60006040518083038186803b15801561153d57600080fd5b505afa158015611551573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e6a919081019061338d565b611581612f4c565b6000546001600160a01b039081169116146115ae5760405162461bcd60e51b815260040161081090613cb8565b600260015414156115d15760405162461bcd60e51b8152600401610810906140af565b6002600155336115e081612f18565b156115fd5760405162461bcd60e51b8152600401610810906138f4565b64174876e8008210156116225760405162461bcd60e51b815260040161081090613c5b565b60068290556040517fddc668da508cd1144da061b15b5e32ad792512221c3e8c17a3a366a3e6a527849061091590849061364a565b61165f612f4c565b6000546001600160a01b0390811691161461168c5760405162461bcd60e51b815260040161081090613cb8565b600260015414156116af5760405162461bcd60e51b8152600401610810906140af565b60026001556402540be40081108015906116ce575064174876e8008111155b6116ea5760405162461bcd60e51b8152600401610810906139e0565b60128190556040517f90af693cc974d0895c909f807f417684ade4e1694d372dda6a9aa7312084ef109061171f90839061364a565b60405180910390a15060018055565b611736612f4c565b6000546001600160a01b039081169116146117635760405162461bcd60e51b815260040161081090613cb8565b600260015414156117865760405162461bcd60e51b8152600401610810906140af565b60026001553361179581612f18565b156117b25760405162461bcd60e51b8152600401610810906138f4565b6001600160a01b0382166117d85760405162461bcd60e51b815260040161081090613951565b600580546001600160a01b0319166001600160a01b0384169081179091556040517fc4e8ce8414f504a2dc0906ca3306e3268d2060988468b5125cad4c8af5a46f9f90600090a2505060018055565b60125490565b60115490565b61183b612f4c565b6000546001600160a01b039081169116146118685760405162461bcd60e51b815260040161081090613cb8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6118ba612f4c565b6000546001600160a01b039081169116146118e75760405162461bcd60e51b815260040161081090613cb8565b6002600154141561190a5760405162461bcd60e51b8152600401610810906140af565b6002600190815581108015906119215750600a8111155b61193d5760405162461bcd60e51b815260040161081090613896565b600d8190556040517fcb15c7f956fa72f4b03fcf350f0be251e64c2a6a9ef26f9e63f0c15eadae11189061171f90839061364a565b6005546001600160a01b031690565b6000601254611a2e6013547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016119d89190613569565b60206040518083038186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a289190613442565b9061306b565b10611a9257611a8b601254611a286013547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016119d89190613569565b9050610dde565b50600090565b600b5490565b6060601a805480602002602001604051908101604052809291908181526020018280548015611af657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611ad8575b5050505050905090565b6000546001600160a01b031690565b60185490565b600080805b601b54811015611b6a57836001600160a01b0316601b8281548110611b3b57fe5b60009182526020909120600290910201546001600160a01b03161415611b62576001909101905b600101611b1a565b5092915050565b611b79612f4c565b6000546001600160a01b03908116911614611ba65760405162461bcd60e51b815260040161081090613cb8565b60026001541415611bc95760405162461bcd60e51b8152600401610810906140af565b6002600155600a811015611bef5760405162461bcd60e51b815260040161081090613f53565b600c8190556040517f2c0421c8237e58bcb2596dd964b1ec8b90fdafed56f2821ceb715cc68320ae039061171f90839061364a565b60065490565b600a5490565b600c5490565b60026001541415611c595760405162461bcd60e51b8152600401610810906140af565b600260015533611c6881612f18565b15611c855760405162461bcd60e51b8152600401610810906138f4565b601b54601a5460085460ff168015611c9f5750600a544210155b611cbb5760405162461bcd60e51b815260040161081090614133565b6006546007541015611cdf5760405162461bcd60e51b815260040161081090613ced565b600c54811061223f576000806000600260009054906101000a90046001600160a01b03166001600160a01b031663df15c37e6040518163ffffffff1660e01b815260040160606040518083038186803b158015611d3b57600080fd5b505afa158015611d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7391906134f6565b92509250925060185460011415611da65782611da15760405162461bcd60e51b815260040161081090613a3d565b611ddb565b8215801590611db457508115155b8015611dbf57508015155b611ddb5760405162461bcd60e51b815260040161081090613a3d565b611e33601254611a286013547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016119d89190613569565b6017819055600e54600091611e5491606491611e4e916130ad565b906130e7565b90506000611e746064611e4e600f546017546130ad90919063ffffffff16565b90506000611e9182611a288560175461306b90919063ffffffff16565b90506060601b805480602002602001604051908101604052809291908181526020016000905b82821015611f2e5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352815160608101835260019182015461ffff8116825260ff62010000820481168388015263010000009091041692810192909252828401919091529083529092019101611eb7565b505050509050611f47888861312990919063ffffffff16565b9650808781518110611f5557fe5b60209081029190910181015151601480546001600160a01b0319166001600160a01b03928316179081905516600090815260199091526040902054611f9a9085612f1e565b6014546001600160a01b0316600090815260196020526040902055805181906000198b01908110611fc757fe5b6020026020010151818881518110611fdb57fe5b602090810291909101015260001990980197611ff78689613129565b955080868151811061200557fe5b60209081029190910181015151601580546001600160a01b0319166001600160a01b0392831617908190551660009081526019909152604090205461204a9084612f1e565b6015546001600160a01b0316600090815260196020526040902055805181906000198b0190811061207757fe5b602002602001015181878151811061208b57fe5b6020908102919091010152600019909801976120a78589613129565b94508085815181106120b557fe5b60209081029190910181015151601680546001600160a01b0319166001600160a01b039283161790819055166000908152601990915260409020546120fa9083612f1e565b6016546001600160a01b039081166000908152601960205260409020919091557f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb612149612f4c565b6012546040518363ffffffff1660e01b81526004016121699291906135a1565b602060405180830381600087803b15801561218357600080fd5b505af1158015612197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bb9190613422565b6121d75760405162461bcd60e51b815260040161081090613f06565b601c805460ff199081169091556008805490911690556016546015546014546040516001600160a01b039384169392831692909116907f30869c8cbe8f2fecdadce29ec329c235eb102065b37eb02001e4d4ab9b8ed62990600090a4505050505050506114ca565b600754156122ff576005546011546007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169363a9059cbb9391169161228e916130ad565b6040518363ffffffff1660e01b81526004016122ab9291906135a1565b602060405180830381600087803b1580156122c557600080fd5b505af11580156122d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fd9190613422565b505b6012546123546013547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016119d89190613569565b10612404577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612390612f4c565b6012546040518363ffffffff1660e01b81526004016123b09291906135a1565b602060405180830381600087803b1580156123ca57600080fd5b505af11580156123de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124029190613422565b505b6000600755601c805460ff1990811690915560088054909116905550506001805550565b600e5490565b60075490565b60105490565b601a5490565b600260015414156124635760405162461bcd60e51b8152600401610810906140af565b60026001553361247281612f18565b1561248f5760405162461bcd60e51b8152600401610810906138f4565b600254604080516323d01c2960e01b815290516000926001600160a01b0316916323d01c29916004808301926020929190829003018186803b1580156124d457600080fd5b505afa1580156124e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250c9190613442565b90506000600260009054906101000a90046001600160a01b03166001600160a01b031663df15c37e6040518163ffffffff1660e01b815260040160606040518083038186803b15801561255e57600080fd5b505afa158015612572573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259691906134f6565b509150508160021480156125a957508015155b6125c55760405162461bcd60e51b8152600401610810906136a6565b600254604051632cdc85e960e21b81526001600160a01b039091169063b37217a4906110399060039060040161364a565b6015546001600160a01b031690565b6000806000600260009054906101000a90046001600160a01b03166001600160a01b031663df15c37e6040518163ffffffff1660e01b815260040160606040518083038186803b15801561265857600080fd5b505afa15801561266c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269091906134f6565b925092509250909192565b600260015414156126be5760405162461bcd60e51b8152600401610810906140af565b6002600155336126cd81612f18565b156126ea5760405162461bcd60e51b8152600401610810906138f4565b6005546001600160a01b03166126fe612f4c565b6001600160a01b0316146127245760405162461bcd60e51b815260040161081090613740565b6006546007546127349084612f1e565b10156127525760405162461bcd60e51b815260040161081090613ced565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd612789612f4c565b30856040518463ffffffff1660e01b81526004016127a99392919061357d565b602060405180830381600087803b1580156127c357600080fd5b505af11580156127d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fb9190613422565b6128175760405162461bcd60e51b815260040161081090613db9565b6007546128249083612f1e565b60075561282f612f4c565b6001600160a01b03167f7c98c6af7eeabb8c5c97d39ba3545faefef86e3f4f54f587ab321d19a2eac7e7836040516112d3919061364a565b6002600154141561288a5760405162461bcd60e51b8152600401610810906140af565b60026001553361289981612f18565b156128b65760405162461bcd60e51b8152600401610810906138f4565b60085460ff166128d85760405162461bcd60e51b815260040161081090613997565b600254604080516323d01c2960e01b815290516000926001600160a01b0316916323d01c29916004808301926020929190829003018186803b15801561291d57600080fd5b505afa158015612931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129559190613442565b905080156129755760405162461bcd60e51b815260040161081090613844565b61297d61330d565b60035460405163f97d059160e01b81526001600160a01b039091169063f97d0591906129ad90429060040161364a565b60606040518083038186803b1580156129c557600080fd5b505afa1580156129d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fd919061345a565b9050600d54612a13612a0d612f4c565b8361316b565b10612a305760405162461bcd60e51b815260040161081090613b29565b612a3861332d565b612a40612f4c565b6001600160a01b0390811682526020808301848152601b805460018101825560009190915284517f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1600290920291820180546001600160a01b031916918616919091179055905180517f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc290920180549382015160409283015161ffff1990951661ffff9094169390931762ff000019166201000060ff948516021763ff000000191663010000009390941692909202929092179055600b54905163fb3bdb4160e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163fb3bdb41913491612b679190600490309042600f019083016141d0565b6000604051808303818588803b158015612b8057600080fd5b505af1158015612b94573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612bbd919081019061338d565b506000612bc8612f4c565b6001600160a01b031647604051612bde90610dde565b60006040518083038185875af1925050503d8060008114612c1b576040519150601f19603f3d011682016040523d82523d6000602084013e612c20565b606091505b5050905080612c415760405162461bcd60e51b815260040161081090614188565b60196000612c4d612f4c565b6001600160a01b03168152602081019190915260400160002054612ca857601a612c75612f4c565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b039092169190911790555b612cf3612cc76064611e4e601154600b546130ad90919063ffffffff16565b60196000612cd3612f4c565b6001600160a01b0316815260208101919091526040016000205490612f1e565b60196000612cff612f4c565b6001600160a01b03168152602081019190915260400160002055601154600b54612d3d91612d3491606491611e4e91906130ad565b60135490612f1e565b601355612d48612f4c565b6001600160a01b03167f3618b0a7469bf1ba864e8b1926f16621c49ae96b79cdeb0e8acd0c6f0ec92364600b54604051612d82919061364a565b60405180910390a2505060018055505050565b60095490565b612da3612f4c565b6000546001600160a01b03908116911614612dd05760405162461bcd60e51b815260040161081090613cb8565b6001600160a01b038116612df65760405162461bcd60e51b8152600401610810906137c7565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6014546001600160a01b031690565b6001600160a01b031660009081526019602052604090205490565b6000612e8561330d565b60035460405163f97d059160e01b81526001600160a01b039091169063f97d059190612eb590429060040161364a565b60606040518083038186803b158015612ecd57600080fd5b505afa158015612ee1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f05919061345a565b9050612f11838261316b565b9392505050565b3b151590565b600082820183811015612f435760405162461bcd60e51b81526004016108109061380d565b90505b92915050565b3390565b600060196000612f5e612f4c565b6001600160a01b03166001600160a01b031681526020019081526020016000208190555060005b601a5481101561306857612f97612f4c565b6001600160a01b0316601a8281548110612fad57fe5b6000918252602090912001546001600160a01b0316141561306057601a80546000198101908110612fda57fe5b600091825260209091200154601a80546001600160a01b03909216918390811061300057fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601a80548061303957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055613068565b600101612f85565b50565b6000612f4383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613276565b6000826130bc57506000612f46565b828202828482816130c957fe5b0414612f435760405162461bcd60e51b815260040161081090613c1a565b6000612f4383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132a2565b6000612f4383836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506132d9565b600080805b601b5481101561326e57846001600160a01b0316601b828154811061319157fe5b60009182526020909120600290910201546001600160a01b03161480156131e35750836000015161ffff16601b82815481106131c957fe5b600091825260209091206001600290920201015461ffff16145b801561321e5750836020015160ff16601b82815481106131ff57fe5b600091825260209091206002909102016001015462010000900460ff16145b801561325a5750836040015160ff16601b828154811061323a57fe5b60009182526020909120600290910201600101546301000000900460ff16145b15613266576001909101905b600101613170565b509392505050565b6000818484111561329a5760405162461bcd60e51b81526004016108109190613653565b505050900390565b600081836132c35760405162461bcd60e51b81526004016108109190613653565b5060008385816132cf57fe5b0495945050505050565b600081836132fa5760405162461bcd60e51b81526004016108109190613653565b5082848161330457fe5b06949350505050565b604080516060810182526000808252602082018190529181019190915290565b604051806040016040528060006001600160a01b0316815260200161335061330d565b905290565b805160ff81168114612f4657600080fd5b600060208284031215613377578081fd5b81356001600160a01b0381168114612f43578182fd5b6000602080838503121561339f578182fd5b825167ffffffffffffffff8111156133b5578283fd5b8301601f810185136133c5578283fd5b80516133d86133d382614242565b61421b565b81815283810190838501858402850186018910156133f4578687fd5b8694505b838510156134165780518352600194909401939185019185016133f8565b50979650505050505050565b600060208284031215613433578081fd5b81518015158114612f43578182fd5b600060208284031215613453578081fd5b5051919050565b60006060828403121561346b578081fd5b613475606061421b565b825161ffff81168114613486578283fd5b81526134958460208501613355565b60208201526134a78460408501613355565b60408201529392505050565b6000602082840312156134c4578081fd5b5035919050565b6000806000606084860312156134df578182fd5b505081359360208301359350604090920135919050565b60008060006060848603121561350a578283fd5b8351925060208401519150604084015190509250925092565b6000815480845260208085019450838352808320835b8381101561355e5781546001600160a01b031687529582019560019182019101613539565b509495945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156135fb5783516001600160a01b0316835292840192918401916001016135d6565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156135fb57835183529284019291840191600101613623565b901515815260200190565b90815260200190565b6000602080835283518082850152825b8181101561367f57858101830151858201604001528201613663565b818111156136905783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602b908201527f50726f70686574204c6f74746572793a2077652063616e2774207069636b207760408201526a34b73732b919903737bb9760a91b606082015260800190565b6020808252602f908201527f50726f70686574204c6f74746572793a2077652063616e206e6f74207374617260408201526e3a103732bb9033b0b6b2903737bb9760891b606082015260800190565b60208082526030908201527f50726f70686574204c6f74746572793a206f6e6c79206465616c65722077616c60408201526f3632ba1031b0b7103232b837b9b4ba1760811b606082015260800190565b6020808252601d908201527f50726f70686574204c6f74746572793a2065786974206661696c65642e000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526032908201527f50726f70686574204c6f74746572793a20697420697320746f6f206c617465206040820152713a3790313abc903a34b1b5b2ba103737bb9760711b606082015260800190565b602080825260409082018190527f50726f70686574204c6f74746572793a206d617842757961626c655469636b65908201527f74436f756e74496e4461792073686f756c6420626520696e2031207e2031302e606082015260800190565b60208082526038908201527f436f6e74726163747320617265206e6f7420616c6c6f77656420746f20696e7460408201527f6572616374207769746820746865204f66666572746f72790000000000000000606082015260800190565b60208082526026908201527f50726f70686574204c6f74746572793a206465616c657257616c6c6574206973604082015265103d32b9379760d11b606082015260800190565b60208082526029908201527f50726f70686574204c6f74746572793a2067616d65206973206e6f7420737461604082015268393a32b2103cb2ba1760b91b606082015260800190565b60208082526037908201527f50726f70686574204c6f74746572793a20616e6e6f756e63654665652073686f60408201527f756c6420626520696e2031306539207e2031303065392e000000000000000000606082015260800190565b6020808252602c908201527f50726f70686574204c6f74746572793a204e6f74207069636b656420616c6c2060408201526b3bb4b732b932b9903cb2ba1760a11b606082015260800190565b60208082526023908201527f50726f70686574204c6f74746572793a20796f75722062616c616e636520697360408201526210181760e91b606082015260800190565b6020808252603a908201527f50726f70686574204c6f74746572793a20706c6179657220636f756e7420697360408201527f206c657373207468616e206d696e506c61796572436f756e742e000000000000606082015260800190565b60208082526036908201527f50726f70686574204c6f74746572793a20796f7520616c726561647920626f7560408201527533b43a1036b0bc103a34b1b5b2ba39903a37b230bc9760511b606082015260800190565b60208082526030908201527f50726f70686574204c6f74746572793a206c6f7474657279456e6454696d652060408201526f34b99030b432b0b21037b3103737bb9760811b606082015260800190565b6020808252602b908201527f50726f70686574204c6f74746572793a2077652063616e2774207069636b207760408201526a34b73732b919103737bb9760a91b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252603b908201527f50726f70686574204c6f74746572793a206d696e4465616c65724465706f736960408201527f74416d6f756e74206973206c657373207468616e2031303065392e0000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526049908201527f50726f70686574204c6f74746572793a206465616c65724465706f736974416d60408201527f6f756e74206973206c657373207468616e206d696e4465616c65724465706f7360608201526834ba20b6b7bab73a1760b91b608082015260a00190565b6020808252603c908201527f50726f70686574204c6f74746572793a2073756d206f662077696e6e6572207060408201527f72697a652070657263656e7461676573206973206e6f74203130302e00000000606082015260800190565b60208082526027908201527f50726f70686574204c6f74746572793a206465616c6572206465706f736974206040820152663330b4b632b21760c91b606082015260800190565b60208082526029908201527f50726f70686574204c6f74746572793a2067616d6520697320696e2070726f676040820152683932b9b9903737bb9760b91b606082015260800190565b60208082526045908201527f50726f70686574204c6f74746572793a206c6f7474657279456e6454696d652060408201527f73686f756c6420626520696e2032207e20333020646179732073696e636520736060820152643a30b93a1760d91b608082015260a00190565b60208082526032908201527f50726f70686574204c6f74746572793a206c6f7474657279537461727454696d604082015271329034b99030b432b0b21037b3103737bb9760711b606082015260800190565b6020808252602d908201527f50726f70686574204c6f74746572793a20616e6e6f756e63654665652074726160408201526c3739b332b9103330b4b632b21760991b606082015260800190565b60208082526030908201527f50726f70686574204c6f74746572793a206d696e506c61796572436f756e742060408201526f34b9903632b9b9903a3430b71018981760811b606082015260800190565b6020808252602b908201527f50726f70686574204c6f74746572793a2077652063616e2774207069636b207760408201526a34b73732b918903737bb9760a91b606082015260800190565b6020808252604a908201527f50726f70686574204c6f74746572793a2077696e6e6572207072697a6520706560408201527f7263656e74616765732073686f756c64206265207365742070726f7065726c7960608201526910313c9037b93232b91760b11b608082015260a00190565b60208082526031908201527f50726f70686574204c6f74746572793a206974206973206e6f7420612074696d60408201527032903a37903834b1b5903bb4b73732b91760791b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252602d908201527f50726f70686574204c6f74746572793a2077696e6e65724d6f64652073686f7560408201526c363210313290189037b910199760991b606082015260800190565b60208082526035908201527f50726f70686574204c6f74746572793a206974206973206e6f7420612074696d60408201527432903a379030b73737bab731b2903bb4b73732b91760591b606082015260800190565b6020808252600d908201526c1c99599d5b990819985a5b1959609a1b604082015260600190565b6000838252604060208301526141c86040830184613523565b949350505050565b6000858252608060208301526141e96080830186613523565b6001600160a01b03949094166040830152506060015292915050565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff8111828210171561423a57600080fd5b604052919050565b600067ffffffffffffffff821115614258578081fd5b506020908102019056fea2646970667358221220a3c3e72d9788801379312c26543bd36cd16f48eb837ffc7c4737353e2ac006c464736f6c634300060c003360c0604052600060035560006004556000600555600060065534801561002457600080fd5b507ff0d54349addcf704f77ae15b96510dea15cb795200000000000000000000000060a0527f514910771af9ca656af840dff83e8264ecf986ca0000000000000000000000006080527faa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af445600155671bc16d674ec8000060025573514910771af9ca656af840dff83e8264ecf986ca73f0d54349addcf704f77ae15b96510dea15cb79526106716100ed6000398060e85280610297525080610143528061026852506106716000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806323d01c291461005c5780638129fc1c1461007a57806394985ddd14610084578063b37217a414610097578063df15c37e146100aa575b600080fd5b6100646100c1565b604051610071919061053f565b60405180910390f35b6100826100c7565b005b610082610092366004610462565b6100dd565b6100646100a5366004610483565b61013c565b6100b2610217565b60405161007193929190610625565b60035490565b6000600381905560048190556005819055600655565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461012e5760405162461bcd60e51b8152600401610125906105ee565b60405180910390fd5b6101388282610225565b5050565b60006002547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161018d91906104c1565b60206040518083038186803b1580156101a557600080fd5b505afa1580156101b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101dd919061049b565b10156101fb5760405162461bcd60e51b8152600401610125906105a3565b8160038190555061021160015460025484610264565b92915050565b600454600554600654909192565b600354600092506001141561023e576004819055610138565b60035460021415610253576005819055610138565b600354600314156101385760065550565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634000aea07f00000000000000000000000000000000000000000000000000000000000000008587866040516020016102ca9291906104b3565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016102f7939291906104d5565b602060405180830381600087803b15801561031157600080fd5b505af1158015610325573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103499190610442565b50600061036a8584306000808a8152602001908152602001600020546103a9565b6000868152602081905260409020549091506103879060016103e3565b6000868152602081905260409020556103a0858261040f565b95945050505050565b6000848484846040516020016103c29493929190610548565b60408051601f19818403018152919052805160209091012095945050505050565b6000828201838110156104085760405162461bcd60e51b81526004016101259061056c565b9392505050565b600082826040516020016104249291906104b3565b60405160208183030381529060405280519060200120905092915050565b600060208284031215610453578081fd5b81518015158114610408578182fd5b60008060408385031215610474578081fd5b50508035926020909101359150565b600060208284031215610494578081fd5b5035919050565b6000602082840312156104ac578081fd5b5051919050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b600060018060a01b038516825260208481840152606060408401528351806060850152825b81811015610516578581018301518582016080015282016104fa565b818111156105275783608083870101525b50601f01601f19169290920160800195945050505050565b90815260200190565b93845260208401929092526001600160a01b03166040830152606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252602b908201527f4e6f7420656e6f756768204c494e4b202d2066696c6c20636f6e74726163742060408201526a1dda5d1a0819985d58d95d60aa1b606082015260800190565b6020808252601f908201527f4f6e6c7920565246436f6f7264696e61746f722063616e2066756c66696c6c00604082015260600190565b928352602083019190915260408201526060019056fea26469706673582212206528074206ceeb487a95d386d96fd39b5ddf37a31c86624399ffb1fe6d8359ac64736f6c634300060c0033608060405234801561001057600080fd5b50610516806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806392d663131461005c578063a6f0e57714610085578063b1999937146100a5578063b238ad0e146100c5578063f97d0591146100e5575b600080fd5b61006f61006a366004610417565b610105565b60405161007c91906104a7565b60405180910390f35b6100986100933660046103f4565b610197565b60405161007c919061046c565b6100b86100b3366004610417565b6101e9565b60405161007c91906104b6565b6100d86100d336600461042f565b610204565b60405161007c91906104bf565b6100f86100f3366004610417565b6102cc565b60405161007c9190610477565b6000806107b26301e1338084048101908290610120906101e9565b61012d8361ffff166101e9565b039050806301e285000283019250806107b2830361ffff16036301e1338002830192505b8483111561018d5761016560018303610197565b15610178576301e2850083039250610182565b6301e13380830392505b600182039150610151565b509150505b919050565b600060038216156101aa57506000610192565b606461ffff83160661ffff166000146101c557506001610192565b61019061ffff83160661ffff166000146101e157506000610192565b506001919050565b60001901600061019082046064830460048404030192915050565b60008260ff166001148061021b57508260ff166003145b8061022957508260ff166005145b8061023757508260ff166007145b8061024557508260ff166008145b8061025357508260ff16600a145b8061026157508260ff16600c145b1561026e5750601f6102c6565b8260ff166004148061028357508260ff166006145b8061029157508260ff166009145b8061029f57508260ff16600b145b156102ac5750601e6102c6565b6102b582610197565b156102c25750601d6102c6565b50601c5b92915050565b6102d46103d4565b600080806102e185610105565b61ffff1684526102f26107b26101e9565b84516103019061ffff166101e9565b039150816301e285000283019250816107b285600001510361ffff16036301e1338002830192506000600191505b600c8260ff161161037957610348828660000151610204565b60ff166201518002905085848201111561036a5760ff82166020860152610379565b9283019260019091019061032f565b600191505b61039085602001518660000151610204565b60ff168260ff16116103cb578584620151800111156103b75760ff821660408601526103cb565b62015180939093019260019091019061037e565b50505050919050565b604080516060810182526000808252602082018190529181019190915290565b600060208284031215610405578081fd5b8135610410816104cd565b9392505050565b600060208284031215610428578081fd5b5035919050565b60008060408385031215610441578081fd5b823560ff81168114610451578182fd5b91506020830135610461816104cd565b809150509250929050565b901515815260200190565b600060608201905061ffff835116825260ff602084015116602083015260ff604084015116604083015292915050565b61ffff91909116815260200190565b90815260200190565b60ff91909116815260200190565b61ffff811681146104dd57600080fd5b5056fea2646970667358221220cf4fbf9163d892d5f767e3bdc21f2a4fd87d8163ccaa61259c2640a46e8e72a164736f6c634300060c00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000008d5db0c1f0681071cb38a382ae6704588d9da587000000000000000000000000448b9e94cfbe7fbabcefef50f46cda5cc21cc302000000000000000000000000000000000000000000000000000000174876e800000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000ba43b7400
Deployed Bytecode
0x6080604052600436106102cd5760003560e01c80638422510211610175578063b79e76f4116100dc578063e05e92d211610095578063f2fde38b1161006f578063f2fde38b14610766578063f6b58b1014610786578063f8b2cb4f1461079b578063f8c3189e146107bb576102d4565b8063e05e92d214610729578063edca914c14610749578063f161102c14610751576102d4565b8063b79e76f41461069c578063bedef3e0146106b1578063c2e52206146106c6578063c5b00428146106db578063cdbc6f18146106f0578063df15c37e14610705576102d4565b806396645ed71161012e57806396645ed714610613578063a451876214610633578063a55a0f1314610648578063a848e2fa1461065d578063aae59cf614610672578063b1fb13f314610687576102d4565b8063842251021461057d57806387bb7ae0146105925780638b5b9ccc146105a75780638da5cb5b146105c95780638f32b000146105de5780638f5611f6146105f3576102d4565b80634d3d4457116102345780635b04a54b116101ed57806366c7d79c116101c757806366c7d79c1461051e578063715018a61461053357806378132b1314610548578063814ca4ad14610568576102d4565b80635b04a54b146104c95780636202cf8a146104e9578063648cc5fc14610509576102d4565b80634d3d4457146104265780634e328c4c1461043b5780634e71d92d1461045d578063515a978e1461047257806357a9efe41461048757806357d9a9fa146104a9576102d4565b80631d6284e0116102865780631d6284e0146103a857806321c63a47146103bd57806323d01c29146103d25780632d0304ec146103e757806334360c6d146103fc5780634094a8f414610411576102d4565b806303788617146102d957806304273770146102fb5780630b5f79101461031b5780630b7ab3931461033b5780631694505e1461035b57806317c900ec14610386576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f43660046134b3565b6107db565b005b34801561030757600080fd5b506102f96103163660046134b3565b610925565b34801561032757600080fd5b506102f96103363660046134cb565b610a09565b34801561034757600080fd5b506102f96103563660046134b3565b610b19565b34801561036757600080fd5b50610370610db6565b60405161037d9190613569565b60405180910390f35b34801561039257600080fd5b5061039b610dda565b60405161037d919061364a565b3480156103b457600080fd5b5061039b610de1565b3480156103c957600080fd5b5061039b610de7565b3480156103de57600080fd5b5061039b610ded565b3480156103f357600080fd5b50610370610e6f565b34801561040857600080fd5b5061039b610e7e565b34801561041d57600080fd5b506102f9610e84565b34801561043257600080fd5b50610370611095565b34801561044757600080fd5b506104506110a4565b60405161037d919061363f565b34801561046957600080fd5b506102f96110ad565b34801561047e57600080fd5b506102f96112e3565b34801561049357600080fd5b5061049c6114d3565b60405161037d9190613607565b3480156104b557600080fd5b506102f96104c43660046134b3565b611579565b3480156104d557600080fd5b506102f96104e43660046134b3565b611657565b3480156104f557600080fd5b506102f9610504366004613366565b61172e565b34801561051557600080fd5b5061039b611827565b34801561052a57600080fd5b5061039b61182d565b34801561053f57600080fd5b506102f9611833565b34801561055457600080fd5b506102f96105633660046134b3565b6118b2565b34801561057457600080fd5b50610370611972565b34801561058957600080fd5b5061039b611981565b34801561059e57600080fd5b5061039b611a98565b3480156105b357600080fd5b506105bc611a9e565b60405161037d91906135ba565b3480156105d557600080fd5b50610370611b00565b3480156105ea57600080fd5b5061039b611b0f565b3480156105ff57600080fd5b5061039b61060e366004613366565b611b15565b34801561061f57600080fd5b506102f961062e3660046134b3565b611b71565b34801561063f57600080fd5b5061039b611c24565b34801561065457600080fd5b5061039b611c2a565b34801561066957600080fd5b5061039b611c30565b34801561067e57600080fd5b506102f9611c36565b34801561069357600080fd5b5061039b612428565b3480156106a857600080fd5b5061039b61242e565b3480156106bd57600080fd5b5061039b612434565b3480156106d257600080fd5b5061039b61243a565b3480156106e757600080fd5b506102f9612440565b3480156106fc57600080fd5b506103706125f6565b34801561071157600080fd5b5061071a612605565b60405161037d93929190614205565b34801561073557600080fd5b506102f96107443660046134b3565b61269b565b6102f9612867565b34801561075d57600080fd5b5061039b612d95565b34801561077257600080fd5b506102f9610781366004613366565b612d9b565b34801561079257600080fd5b50610370612e51565b3480156107a757600080fd5b5061039b6107b6366004613366565b612e60565b3480156107c757600080fd5b5061039b6107d6366004613366565b612e7b565b6107e3612f4c565b6000546001600160a01b039081169116146108195760405162461bcd60e51b815260040161081090613cb8565b60405180910390fd5b6002600154141561083c5760405162461bcd60e51b8152600401610810906140af565b60026001553361084b81612f18565b156108685760405162461bcd60e51b8152600401610810906138f4565b428210156108885760405162461bcd60e51b815260040161081090613eb4565b601a5415806108ab575060085460ff161580156108ab5750600a546203f4800142115b6108c75760405162461bcd60e51b8152600401610810906136f1565b6009829055601c805460ff199081166001179091556008805490911690556040517f14e7df51f1b8fbd1f423c8162e7cee59ad00c91369bef1a613f7c257296cb3fc9061091590849061364a565b60405180910390a1505060018055565b61092d612f4c565b6000546001600160a01b0390811691161461095a5760405162461bcd60e51b815260040161081090613cb8565b6002600154141561097d5760405162461bcd60e51b8152600401610810906140af565b60026001553361098c81612f18565b156109a95760405162461bcd60e51b8152600401610810906138f4565b81600114806109b85750816003145b6109d45760405162461bcd60e51b8152600401610810906140e6565b60188290556040517fb0aa08e999a14ce8a5e85d94d4151bf26af7a9145b7cee0b5eb3c4c70396198d9061091590849061364a565b610a11612f4c565b6000546001600160a01b03908116911614610a3e5760405162461bcd60e51b815260040161081090613cb8565b60026001541415610a615760405162461bcd60e51b8152600401610810906140af565b6002600155610a7a81610a748585612f1e565b90612f1e565b606414610a995760405162461bcd60e51b815260040161081090613d5c565b818310158015610aa95750808210155b610ac55760405162461bcd60e51b815260040161081090613fee565b600e839055600f82905560108190556040517f769567d75cd1e61ae966a5845997a71173e816898c9563e7ecd3b19d0a17033590610b0890859085908590614205565b60405180910390a150506001805550565b610b21612f4c565b6000546001600160a01b03908116911614610b4e5760405162461bcd60e51b815260040161081090613cb8565b60026001541415610b715760405162461bcd60e51b8152600401610810906140af565b600260015533610b8081612f18565b15610b9d5760405162461bcd60e51b8152600401610810906138f4565b601c5460ff16610bbf5760405162461bcd60e51b815260040161081090613997565b6009546202a300018210158015610bdd575060095462278d00018211155b610bf95760405162461bcd60e51b815260040161081090613e49565b42821015610c195760405162461bcd60e51b815260040161081090613b7f565b600a829055601480546001600160a01b0319908116909155601580548216905560168054909116905560006017819055600781905560138190556002546040805163204a7f0760e21b815290516001600160a01b0390921692638129fc1c9260048381019382900301818387803b158015610c9357600080fd5b505af1158015610ca7573d6000803e3d6000fd5b5050601a549150505b8015610d2757600060196000601a6001850381548110610ccc57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902055601a805480610cfc57fe5b600082815260209020810160001990810180546001600160a01b031916905590810190915501610cb0565b50601b545b8015610d7857601b805480610d3d57fe5b6000828152602090206000199182016002810290910180546001600160a01b0319168155600101805463ffffffff1916905590915501610d2c565b506008805460ff191660011790556040517fb3cfe1b5955f1137df0fde145639f79f9e9e1ae1f432a34a3f5401074ced70ea9061091590849061364a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600f545b90565b600d5490565b601b5490565b600254604080516323d01c2960e01b815290516000926001600160a01b0316916323d01c29916004808301926020929190829003018186803b158015610e3257600080fd5b505afa158015610e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6a9190613442565b905090565b6016546001600160a01b031690565b60175490565b60026001541415610ea75760405162461bcd60e51b8152600401610810906140af565b600260015533610eb681612f18565b15610ed35760405162461bcd60e51b8152600401610810906138f4565b600254604080516323d01c2960e01b815290516000926001600160a01b0316916323d01c29916004808301926020929190829003018186803b158015610f1857600080fd5b505afa158015610f2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f509190613442565b90506000600260009054906101000a90046001600160a01b03166001600160a01b031663df15c37e6040518163ffffffff1660e01b815260040160606040518083038186803b158015610fa257600080fd5b505afa158015610fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fda91906134f6565b50509050816001148015610fed57508015155b6110095760405162461bcd60e51b815260040161081090613bcf565b60028054604051632cdc85e960e21b81526001600160a01b039091169163b37217a491611039919060040161364a565b602060405180830381600087803b15801561105357600080fd5b505af1158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190613442565b5050600180555050565b6002546001600160a01b031681565b60085460ff1690565b600260015414156110d05760405162461bcd60e51b8152600401610810906140af565b6002600155336110df81612f18565b156110fc5760405162461bcd60e51b8152600401610810906138f4565b60085460ff161561111f5760405162461bcd60e51b815260040161081090613e00565b60006019600061112d612f4c565b6001600160a01b03166001600160a01b03168152602001908152602001600020541161116b5760405162461bcd60e51b815260040161081090613a89565b600060196000611179612f4c565b6001600160a01b03166001600160a01b031681526020019081526020016000205490506111a4612f50565b7f0000000000000000000000008d5db0c1f0681071cb38a382ae6704588d9da5876001600160a01b031663a9059cbb6111db612f4c565b836040518363ffffffff1660e01b81526004016111f99291906135a1565b602060405180830381600087803b15801561121357600080fd5b505af1158015611227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124b9190613422565b6112675760405162461bcd60e51b815260040161081090613790565b61126f612f4c565b6001600160a01b03167fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a601960006112a5612f4c565b6001600160a01b03166001600160a01b03168152602001908152602001600020546040516112d3919061364a565b60405180910390a2505060018055565b600260015414156113065760405162461bcd60e51b8152600401610810906140af565b60026001553361131581612f18565b156113325760405162461bcd60e51b8152600401610810906138f4565b60085460ff1680156113465750600a544210155b6113625760405162461bcd60e51b81526004016108109061405e565b60065460075410156113865760405162461bcd60e51b815260040161081090613ced565b600c54601a5410156113aa5760405162461bcd60e51b815260040161081090613acc565b600254604080516323d01c2960e01b815290516000926001600160a01b0316916323d01c29916004808301926020929190829003018186803b1580156113ef57600080fd5b505afa158015611403573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114279190613442565b905080156114475760405162461bcd60e51b815260040161081090613fa3565b600254604051632cdc85e960e21b81526001600160a01b039091169063b37217a4906114789060019060040161364a565b602060405180830381600087803b15801561149257600080fd5b505af11580156114a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ca9190613442565b50506001805550565b600b546040516307c0329d60e21b81526060916001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1691631f00ca74916115259160049081016141af565b60006040518083038186803b15801561153d57600080fd5b505afa158015611551573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e6a919081019061338d565b611581612f4c565b6000546001600160a01b039081169116146115ae5760405162461bcd60e51b815260040161081090613cb8565b600260015414156115d15760405162461bcd60e51b8152600401610810906140af565b6002600155336115e081612f18565b156115fd5760405162461bcd60e51b8152600401610810906138f4565b64174876e8008210156116225760405162461bcd60e51b815260040161081090613c5b565b60068290556040517fddc668da508cd1144da061b15b5e32ad792512221c3e8c17a3a366a3e6a527849061091590849061364a565b61165f612f4c565b6000546001600160a01b0390811691161461168c5760405162461bcd60e51b815260040161081090613cb8565b600260015414156116af5760405162461bcd60e51b8152600401610810906140af565b60026001556402540be40081108015906116ce575064174876e8008111155b6116ea5760405162461bcd60e51b8152600401610810906139e0565b60128190556040517f90af693cc974d0895c909f807f417684ade4e1694d372dda6a9aa7312084ef109061171f90839061364a565b60405180910390a15060018055565b611736612f4c565b6000546001600160a01b039081169116146117635760405162461bcd60e51b815260040161081090613cb8565b600260015414156117865760405162461bcd60e51b8152600401610810906140af565b60026001553361179581612f18565b156117b25760405162461bcd60e51b8152600401610810906138f4565b6001600160a01b0382166117d85760405162461bcd60e51b815260040161081090613951565b600580546001600160a01b0319166001600160a01b0384169081179091556040517fc4e8ce8414f504a2dc0906ca3306e3268d2060988468b5125cad4c8af5a46f9f90600090a2505060018055565b60125490565b60115490565b61183b612f4c565b6000546001600160a01b039081169116146118685760405162461bcd60e51b815260040161081090613cb8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6118ba612f4c565b6000546001600160a01b039081169116146118e75760405162461bcd60e51b815260040161081090613cb8565b6002600154141561190a5760405162461bcd60e51b8152600401610810906140af565b6002600190815581108015906119215750600a8111155b61193d5760405162461bcd60e51b815260040161081090613896565b600d8190556040517fcb15c7f956fa72f4b03fcf350f0be251e64c2a6a9ef26f9e63f0c15eadae11189061171f90839061364a565b6005546001600160a01b031690565b6000601254611a2e6013547f0000000000000000000000008d5db0c1f0681071cb38a382ae6704588d9da5876001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016119d89190613569565b60206040518083038186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a289190613442565b9061306b565b10611a9257611a8b601254611a286013547f0000000000000000000000008d5db0c1f0681071cb38a382ae6704588d9da5876001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016119d89190613569565b9050610dde565b50600090565b600b5490565b6060601a805480602002602001604051908101604052809291908181526020018280548015611af657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611ad8575b5050505050905090565b6000546001600160a01b031690565b60185490565b600080805b601b54811015611b6a57836001600160a01b0316601b8281548110611b3b57fe5b60009182526020909120600290910201546001600160a01b03161415611b62576001909101905b600101611b1a565b5092915050565b611b79612f4c565b6000546001600160a01b03908116911614611ba65760405162461bcd60e51b815260040161081090613cb8565b60026001541415611bc95760405162461bcd60e51b8152600401610810906140af565b6002600155600a811015611bef5760405162461bcd60e51b815260040161081090613f53565b600c8190556040517f2c0421c8237e58bcb2596dd964b1ec8b90fdafed56f2821ceb715cc68320ae039061171f90839061364a565b60065490565b600a5490565b600c5490565b60026001541415611c595760405162461bcd60e51b8152600401610810906140af565b600260015533611c6881612f18565b15611c855760405162461bcd60e51b8152600401610810906138f4565b601b54601a5460085460ff168015611c9f5750600a544210155b611cbb5760405162461bcd60e51b815260040161081090614133565b6006546007541015611cdf5760405162461bcd60e51b815260040161081090613ced565b600c54811061223f576000806000600260009054906101000a90046001600160a01b03166001600160a01b031663df15c37e6040518163ffffffff1660e01b815260040160606040518083038186803b158015611d3b57600080fd5b505afa158015611d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7391906134f6565b92509250925060185460011415611da65782611da15760405162461bcd60e51b815260040161081090613a3d565b611ddb565b8215801590611db457508115155b8015611dbf57508015155b611ddb5760405162461bcd60e51b815260040161081090613a3d565b611e33601254611a286013547f0000000000000000000000008d5db0c1f0681071cb38a382ae6704588d9da5876001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016119d89190613569565b6017819055600e54600091611e5491606491611e4e916130ad565b906130e7565b90506000611e746064611e4e600f546017546130ad90919063ffffffff16565b90506000611e9182611a288560175461306b90919063ffffffff16565b90506060601b805480602002602001604051908101604052809291908181526020016000905b82821015611f2e5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352815160608101835260019182015461ffff8116825260ff62010000820481168388015263010000009091041692810192909252828401919091529083529092019101611eb7565b505050509050611f47888861312990919063ffffffff16565b9650808781518110611f5557fe5b60209081029190910181015151601480546001600160a01b0319166001600160a01b03928316179081905516600090815260199091526040902054611f9a9085612f1e565b6014546001600160a01b0316600090815260196020526040902055805181906000198b01908110611fc757fe5b6020026020010151818881518110611fdb57fe5b602090810291909101015260001990980197611ff78689613129565b955080868151811061200557fe5b60209081029190910181015151601580546001600160a01b0319166001600160a01b0392831617908190551660009081526019909152604090205461204a9084612f1e565b6015546001600160a01b0316600090815260196020526040902055805181906000198b0190811061207757fe5b602002602001015181878151811061208b57fe5b6020908102919091010152600019909801976120a78589613129565b94508085815181106120b557fe5b60209081029190910181015151601680546001600160a01b0319166001600160a01b039283161790819055166000908152601990915260409020546120fa9083612f1e565b6016546001600160a01b039081166000908152601960205260409020919091557f0000000000000000000000008d5db0c1f0681071cb38a382ae6704588d9da5871663a9059cbb612149612f4c565b6012546040518363ffffffff1660e01b81526004016121699291906135a1565b602060405180830381600087803b15801561218357600080fd5b505af1158015612197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bb9190613422565b6121d75760405162461bcd60e51b815260040161081090613f06565b601c805460ff199081169091556008805490911690556016546015546014546040516001600160a01b039384169392831692909116907f30869c8cbe8f2fecdadce29ec329c235eb102065b37eb02001e4d4ab9b8ed62990600090a4505050505050506114ca565b600754156122ff576005546011546007546001600160a01b037f0000000000000000000000008d5db0c1f0681071cb38a382ae6704588d9da58781169363a9059cbb9391169161228e916130ad565b6040518363ffffffff1660e01b81526004016122ab9291906135a1565b602060405180830381600087803b1580156122c557600080fd5b505af11580156122d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fd9190613422565b505b6012546123546013547f0000000000000000000000008d5db0c1f0681071cb38a382ae6704588d9da5876001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016119d89190613569565b10612404577f0000000000000000000000008d5db0c1f0681071cb38a382ae6704588d9da5876001600160a01b031663a9059cbb612390612f4c565b6012546040518363ffffffff1660e01b81526004016123b09291906135a1565b602060405180830381600087803b1580156123ca57600080fd5b505af11580156123de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124029190613422565b505b6000600755601c805460ff1990811690915560088054909116905550506001805550565b600e5490565b60075490565b60105490565b601a5490565b600260015414156124635760405162461bcd60e51b8152600401610810906140af565b60026001553361247281612f18565b1561248f5760405162461bcd60e51b8152600401610810906138f4565b600254604080516323d01c2960e01b815290516000926001600160a01b0316916323d01c29916004808301926020929190829003018186803b1580156124d457600080fd5b505afa1580156124e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250c9190613442565b90506000600260009054906101000a90046001600160a01b03166001600160a01b031663df15c37e6040518163ffffffff1660e01b815260040160606040518083038186803b15801561255e57600080fd5b505afa158015612572573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259691906134f6565b509150508160021480156125a957508015155b6125c55760405162461bcd60e51b8152600401610810906136a6565b600254604051632cdc85e960e21b81526001600160a01b039091169063b37217a4906110399060039060040161364a565b6015546001600160a01b031690565b6000806000600260009054906101000a90046001600160a01b03166001600160a01b031663df15c37e6040518163ffffffff1660e01b815260040160606040518083038186803b15801561265857600080fd5b505afa15801561266c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269091906134f6565b925092509250909192565b600260015414156126be5760405162461bcd60e51b8152600401610810906140af565b6002600155336126cd81612f18565b156126ea5760405162461bcd60e51b8152600401610810906138f4565b6005546001600160a01b03166126fe612f4c565b6001600160a01b0316146127245760405162461bcd60e51b815260040161081090613740565b6006546007546127349084612f1e565b10156127525760405162461bcd60e51b815260040161081090613ced565b7f0000000000000000000000008d5db0c1f0681071cb38a382ae6704588d9da5876001600160a01b03166323b872dd612789612f4c565b30856040518463ffffffff1660e01b81526004016127a99392919061357d565b602060405180830381600087803b1580156127c357600080fd5b505af11580156127d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fb9190613422565b6128175760405162461bcd60e51b815260040161081090613db9565b6007546128249083612f1e565b60075561282f612f4c565b6001600160a01b03167f7c98c6af7eeabb8c5c97d39ba3545faefef86e3f4f54f587ab321d19a2eac7e7836040516112d3919061364a565b6002600154141561288a5760405162461bcd60e51b8152600401610810906140af565b60026001553361289981612f18565b156128b65760405162461bcd60e51b8152600401610810906138f4565b60085460ff166128d85760405162461bcd60e51b815260040161081090613997565b600254604080516323d01c2960e01b815290516000926001600160a01b0316916323d01c29916004808301926020929190829003018186803b15801561291d57600080fd5b505afa158015612931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129559190613442565b905080156129755760405162461bcd60e51b815260040161081090613844565b61297d61330d565b60035460405163f97d059160e01b81526001600160a01b039091169063f97d0591906129ad90429060040161364a565b60606040518083038186803b1580156129c557600080fd5b505afa1580156129d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fd919061345a565b9050600d54612a13612a0d612f4c565b8361316b565b10612a305760405162461bcd60e51b815260040161081090613b29565b612a3861332d565b612a40612f4c565b6001600160a01b0390811682526020808301848152601b805460018101825560009190915284517f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1600290920291820180546001600160a01b031916918616919091179055905180517f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc290920180549382015160409283015161ffff1990951661ffff9094169390931762ff000019166201000060ff948516021763ff000000191663010000009390941692909202929092179055600b54905163fb3bdb4160e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9092169163fb3bdb41913491612b679190600490309042600f019083016141d0565b6000604051808303818588803b158015612b8057600080fd5b505af1158015612b94573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612bbd919081019061338d565b506000612bc8612f4c565b6001600160a01b031647604051612bde90610dde565b60006040518083038185875af1925050503d8060008114612c1b576040519150601f19603f3d011682016040523d82523d6000602084013e612c20565b606091505b5050905080612c415760405162461bcd60e51b815260040161081090614188565b60196000612c4d612f4c565b6001600160a01b03168152602081019190915260400160002054612ca857601a612c75612f4c565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b039092169190911790555b612cf3612cc76064611e4e601154600b546130ad90919063ffffffff16565b60196000612cd3612f4c565b6001600160a01b0316815260208101919091526040016000205490612f1e565b60196000612cff612f4c565b6001600160a01b03168152602081019190915260400160002055601154600b54612d3d91612d3491606491611e4e91906130ad565b60135490612f1e565b601355612d48612f4c565b6001600160a01b03167f3618b0a7469bf1ba864e8b1926f16621c49ae96b79cdeb0e8acd0c6f0ec92364600b54604051612d82919061364a565b60405180910390a2505060018055505050565b60095490565b612da3612f4c565b6000546001600160a01b03908116911614612dd05760405162461bcd60e51b815260040161081090613cb8565b6001600160a01b038116612df65760405162461bcd60e51b8152600401610810906137c7565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6014546001600160a01b031690565b6001600160a01b031660009081526019602052604090205490565b6000612e8561330d565b60035460405163f97d059160e01b81526001600160a01b039091169063f97d059190612eb590429060040161364a565b60606040518083038186803b158015612ecd57600080fd5b505afa158015612ee1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f05919061345a565b9050612f11838261316b565b9392505050565b3b151590565b600082820183811015612f435760405162461bcd60e51b81526004016108109061380d565b90505b92915050565b3390565b600060196000612f5e612f4c565b6001600160a01b03166001600160a01b031681526020019081526020016000208190555060005b601a5481101561306857612f97612f4c565b6001600160a01b0316601a8281548110612fad57fe5b6000918252602090912001546001600160a01b0316141561306057601a80546000198101908110612fda57fe5b600091825260209091200154601a80546001600160a01b03909216918390811061300057fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601a80548061303957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055613068565b600101612f85565b50565b6000612f4383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613276565b6000826130bc57506000612f46565b828202828482816130c957fe5b0414612f435760405162461bcd60e51b815260040161081090613c1a565b6000612f4383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132a2565b6000612f4383836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506132d9565b600080805b601b5481101561326e57846001600160a01b0316601b828154811061319157fe5b60009182526020909120600290910201546001600160a01b03161480156131e35750836000015161ffff16601b82815481106131c957fe5b600091825260209091206001600290920201015461ffff16145b801561321e5750836020015160ff16601b82815481106131ff57fe5b600091825260209091206002909102016001015462010000900460ff16145b801561325a5750836040015160ff16601b828154811061323a57fe5b60009182526020909120600290910201600101546301000000900460ff16145b15613266576001909101905b600101613170565b509392505050565b6000818484111561329a5760405162461bcd60e51b81526004016108109190613653565b505050900390565b600081836132c35760405162461bcd60e51b81526004016108109190613653565b5060008385816132cf57fe5b0495945050505050565b600081836132fa5760405162461bcd60e51b81526004016108109190613653565b5082848161330457fe5b06949350505050565b604080516060810182526000808252602082018190529181019190915290565b604051806040016040528060006001600160a01b0316815260200161335061330d565b905290565b805160ff81168114612f4657600080fd5b600060208284031215613377578081fd5b81356001600160a01b0381168114612f43578182fd5b6000602080838503121561339f578182fd5b825167ffffffffffffffff8111156133b5578283fd5b8301601f810185136133c5578283fd5b80516133d86133d382614242565b61421b565b81815283810190838501858402850186018910156133f4578687fd5b8694505b838510156134165780518352600194909401939185019185016133f8565b50979650505050505050565b600060208284031215613433578081fd5b81518015158114612f43578182fd5b600060208284031215613453578081fd5b5051919050565b60006060828403121561346b578081fd5b613475606061421b565b825161ffff81168114613486578283fd5b81526134958460208501613355565b60208201526134a78460408501613355565b60408201529392505050565b6000602082840312156134c4578081fd5b5035919050565b6000806000606084860312156134df578182fd5b505081359360208301359350604090920135919050565b60008060006060848603121561350a578283fd5b8351925060208401519150604084015190509250925092565b6000815480845260208085019450838352808320835b8381101561355e5781546001600160a01b031687529582019560019182019101613539565b509495945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156135fb5783516001600160a01b0316835292840192918401916001016135d6565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156135fb57835183529284019291840191600101613623565b901515815260200190565b90815260200190565b6000602080835283518082850152825b8181101561367f57858101830151858201604001528201613663565b818111156136905783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602b908201527f50726f70686574204c6f74746572793a2077652063616e2774207069636b207760408201526a34b73732b919903737bb9760a91b606082015260800190565b6020808252602f908201527f50726f70686574204c6f74746572793a2077652063616e206e6f74207374617260408201526e3a103732bb9033b0b6b2903737bb9760891b606082015260800190565b60208082526030908201527f50726f70686574204c6f74746572793a206f6e6c79206465616c65722077616c60408201526f3632ba1031b0b7103232b837b9b4ba1760811b606082015260800190565b6020808252601d908201527f50726f70686574204c6f74746572793a2065786974206661696c65642e000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526032908201527f50726f70686574204c6f74746572793a20697420697320746f6f206c617465206040820152713a3790313abc903a34b1b5b2ba103737bb9760711b606082015260800190565b602080825260409082018190527f50726f70686574204c6f74746572793a206d617842757961626c655469636b65908201527f74436f756e74496e4461792073686f756c6420626520696e2031207e2031302e606082015260800190565b60208082526038908201527f436f6e74726163747320617265206e6f7420616c6c6f77656420746f20696e7460408201527f6572616374207769746820746865204f66666572746f72790000000000000000606082015260800190565b60208082526026908201527f50726f70686574204c6f74746572793a206465616c657257616c6c6574206973604082015265103d32b9379760d11b606082015260800190565b60208082526029908201527f50726f70686574204c6f74746572793a2067616d65206973206e6f7420737461604082015268393a32b2103cb2ba1760b91b606082015260800190565b60208082526037908201527f50726f70686574204c6f74746572793a20616e6e6f756e63654665652073686f60408201527f756c6420626520696e2031306539207e2031303065392e000000000000000000606082015260800190565b6020808252602c908201527f50726f70686574204c6f74746572793a204e6f74207069636b656420616c6c2060408201526b3bb4b732b932b9903cb2ba1760a11b606082015260800190565b60208082526023908201527f50726f70686574204c6f74746572793a20796f75722062616c616e636520697360408201526210181760e91b606082015260800190565b6020808252603a908201527f50726f70686574204c6f74746572793a20706c6179657220636f756e7420697360408201527f206c657373207468616e206d696e506c61796572436f756e742e000000000000606082015260800190565b60208082526036908201527f50726f70686574204c6f74746572793a20796f7520616c726561647920626f7560408201527533b43a1036b0bc103a34b1b5b2ba39903a37b230bc9760511b606082015260800190565b60208082526030908201527f50726f70686574204c6f74746572793a206c6f7474657279456e6454696d652060408201526f34b99030b432b0b21037b3103737bb9760811b606082015260800190565b6020808252602b908201527f50726f70686574204c6f74746572793a2077652063616e2774207069636b207760408201526a34b73732b919103737bb9760a91b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252603b908201527f50726f70686574204c6f74746572793a206d696e4465616c65724465706f736960408201527f74416d6f756e74206973206c657373207468616e2031303065392e0000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526049908201527f50726f70686574204c6f74746572793a206465616c65724465706f736974416d60408201527f6f756e74206973206c657373207468616e206d696e4465616c65724465706f7360608201526834ba20b6b7bab73a1760b91b608082015260a00190565b6020808252603c908201527f50726f70686574204c6f74746572793a2073756d206f662077696e6e6572207060408201527f72697a652070657263656e7461676573206973206e6f74203130302e00000000606082015260800190565b60208082526027908201527f50726f70686574204c6f74746572793a206465616c6572206465706f736974206040820152663330b4b632b21760c91b606082015260800190565b60208082526029908201527f50726f70686574204c6f74746572793a2067616d6520697320696e2070726f676040820152683932b9b9903737bb9760b91b606082015260800190565b60208082526045908201527f50726f70686574204c6f74746572793a206c6f7474657279456e6454696d652060408201527f73686f756c6420626520696e2032207e20333020646179732073696e636520736060820152643a30b93a1760d91b608082015260a00190565b60208082526032908201527f50726f70686574204c6f74746572793a206c6f7474657279537461727454696d604082015271329034b99030b432b0b21037b3103737bb9760711b606082015260800190565b6020808252602d908201527f50726f70686574204c6f74746572793a20616e6e6f756e63654665652074726160408201526c3739b332b9103330b4b632b21760991b606082015260800190565b60208082526030908201527f50726f70686574204c6f74746572793a206d696e506c61796572436f756e742060408201526f34b9903632b9b9903a3430b71018981760811b606082015260800190565b6020808252602b908201527f50726f70686574204c6f74746572793a2077652063616e2774207069636b207760408201526a34b73732b918903737bb9760a91b606082015260800190565b6020808252604a908201527f50726f70686574204c6f74746572793a2077696e6e6572207072697a6520706560408201527f7263656e74616765732073686f756c64206265207365742070726f7065726c7960608201526910313c9037b93232b91760b11b608082015260a00190565b60208082526031908201527f50726f70686574204c6f74746572793a206974206973206e6f7420612074696d60408201527032903a37903834b1b5903bb4b73732b91760791b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252602d908201527f50726f70686574204c6f74746572793a2077696e6e65724d6f64652073686f7560408201526c363210313290189037b910199760991b606082015260800190565b60208082526035908201527f50726f70686574204c6f74746572793a206974206973206e6f7420612074696d60408201527432903a379030b73737bab731b2903bb4b73732b91760591b606082015260800190565b6020808252600d908201526c1c99599d5b990819985a5b1959609a1b604082015260600190565b6000838252604060208301526141c86040830184613523565b949350505050565b6000858252608060208301526141e96080830186613523565b6001600160a01b03949094166040830152506060015292915050565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff8111828210171561423a57600080fd5b604052919050565b600067ffffffffffffffff821115614258578081fd5b506020908102019056fea2646970667358221220a3c3e72d9788801379312c26543bd36cd16f48eb837ffc7c4737353e2ac006c464736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000008d5db0c1f0681071cb38a382ae6704588d9da587000000000000000000000000448b9e94cfbe7fbabcefef50f46cda5cc21cc302000000000000000000000000000000000000000000000000000000174876e800000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000ba43b7400
-----Decoded View---------------
Arg [0] : _uniswapV2Router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _prophetContract (address): 0x8D5DB0c1f0681071Cb38A382AE6704588D9DA587
Arg [2] : _dealerWallet (address): 0x448B9E94CFBe7FbabcEfEF50f46CdA5CC21CC302
Arg [3] : _ticketPrice (uint256): 100000000000
Arg [4] : _minPlayerCount (uint256): 10
Arg [5] : _winnerPrizePct1 (uint256): 100
Arg [6] : _winnerPrizePct2 (uint256): 0
Arg [7] : _winnerPrizePct3 (uint256): 0
Arg [8] : _refundPct (uint256): 97
Arg [9] : _announceFee (uint256): 50000000000
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000008d5db0c1f0681071cb38a382ae6704588d9da587
Arg [2] : 000000000000000000000000448b9e94cfbe7fbabcefef50f46cda5cc21cc302
Arg [3] : 000000000000000000000000000000000000000000000000000000174876e800
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000061
Arg [9] : 0000000000000000000000000000000000000000000000000000000ba43b7400
Deployed Bytecode Sourcemap
32688:21735:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37079:529;;;;;;;;;;-1:-1:-1;37079:529:0;;;;;:::i;:::-;;:::i;:::-;;37620:293;;;;;;;;;;-1:-1:-1;37620:293:0;;;;;:::i;:::-;;:::i;39042:693::-;;;;;;;;;;-1:-1:-1;39042:693:0;;;;;:::i;:::-;;:::i;37925:1105::-;;;;;;;;;;-1:-1:-1;37925:1105:0;;;;;:::i;:::-;;:::i;32976:51::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52955:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;54295:125::-;;;;;;;;;;;;;:::i;51577:98::-;;;;;;;;;;;;;:::i;52139:116::-;;;;;;;;;;;;;:::i;51899:94::-;;;;;;;;;;;;;:::i;54163:120::-;;;;;;;;;;;;;:::i;46188:340::-;;;;;;;;;;;;;:::i;32857:68::-;;;;;;;;;;;;;:::i;53395:98::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;43511:708::-;;;;;;;;;;;;;:::i;45387:789::-;;;;;;;;;;;;;:::i;50827:158::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36692:375::-;;;;;;;;;;-1:-1:-1;36692:375:0;;;;;:::i;:::-;;:::i;40041:295::-;;;;;;;;;;-1:-1:-1;40041:295:0;;;;;:::i;:::-;;:::i;36395:289::-;;;;;;;;;;-1:-1:-1;36395:289:0;;;;;:::i;:::-;;:::i;53288:95::-;;;;;;;;;;;;;:::i;53185:91::-;;;;;;;;;;;;;:::i;1637:148::-;;;;;;;;;;;;;:::i;40348:418::-;;;;;;;;;;-1:-1:-1;40348:418:0;;;;;:::i;:::-;;:::i;53505:97::-;;;;;;;;;;;;;:::i;53847:304::-;;;;;;;;;;;;;:::i;52620:95::-;;;;;;;;;;;;;:::i;50722:97::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;995:79::-;;;;;;;;;;;;;:::i;53743:92::-;;;;;;;;;;;;;:::i;51217:348::-;;;;;;;;;;-1:-1:-1;51217:348:0;;;;;:::i;:::-;;:::i;39747:282::-;;;;;;;;;;-1:-1:-1;39747:282:0;;;;;:::i;:::-;;:::i;53614:117::-;;;;;;;;;;;;;:::i;52507:101::-;;;;;;;;;;;;;:::i;52727:::-;;;;;;;;;;;;;:::i;46892:3581::-;;;;;;;;;;;;;:::i;52840:103::-;;;;;;;;;;;;;:::i;52267:111::-;;;;;;;;;;;;;:::i;53070:103::-;;;;;;;;;;;;;:::i;50612:98::-;;;;;;;;;;;;;:::i;46540:340::-;;;;;;;;;;;;;:::i;51793:94::-;;;;;;;;;;;;;:::i;52005:122::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;44576:803::-;;;;;;;;;;-1:-1:-1;44576:803:0;;;;;:::i;:::-;;:::i;41960:1539::-;;;:::i;52390:105::-;;;;;;;;;;;;;:::i;1940:244::-;;;;;;;;;;-1:-1:-1;1940:244:0;;;;;:::i;:::-;;:::i;51687:94::-;;;;;;;;;;;;;:::i;50485:115::-;;;;;;;;;;-1:-1:-1;50485:115:0;;;;;:::i;:::-;;:::i;50997:208::-;;;;;;;;;;-1:-1:-1;50997:208:0;;;;;:::i;:::-;;:::i;37079:529::-;1217:12;:10;:12::i;:::-;1207:6;;-1:-1:-1;;;;;1207:6:0;;;:22;;;1199:67;;;;-1:-1:-1;;;1199:67:0;;;;;;;:::i;:::-;;;;;;;;;3075:1:::1;3681:7;;:19;;3673:63;;;;-1:-1:-1::0;;;3673:63:0::1;;;;;;;:::i;:::-;3075:1;3814:7;:18:::0;37178:10:::2;32564:27;37178:10:::0;32564:18:::2;:27::i;:::-;:36;32556:105;;;;-1:-1:-1::0;;;32556:105:0::2;;;;;;;:::i;:::-;37230:3:::3;37209:17;:24;;37201:87;;;;-1:-1:-1::0;;;37201:87:0::3;;;;;;;:::i;:::-;37307:7;:14:::0;:19;;:73:::3;;-1:-1:-1::0;37332:14:0::3;::::0;::::3;;37331:15;:48:::0;::::3;;;;37356:14;;37373:6;37356:23;37350:3;:29;37331:48;37299:133;;;;-1:-1:-1::0;;;37299:133:0::3;;;;;;;:::i;:::-;37443:16;:36:::0;;;37490:12:::3;:19:::0;;-1:-1:-1;;37490:19:0;;::::3;37505:4;37490:19;::::0;;;37520:14:::3;:22:::0;;;;::::3;::::0;;37558:42:::3;::::0;::::3;::::0;::::3;::::0;37462:17;;37558:42:::3;:::i;:::-;;;;;;;;-1:-1:-1::0;;3031:1:0::1;3993:22:::0;;37079:529::o;37620:293::-;1217:12;:10;:12::i;:::-;1207:6;;-1:-1:-1;;;;;1207:6:0;;;:22;;;1199:67;;;;-1:-1:-1;;;1199:67:0;;;;;;;:::i;:::-;3075:1:::1;3681:7;;:19;;3673:63;;;;-1:-1:-1::0;;;3673:63:0::1;;;;;;;:::i;:::-;3075:1;3814:7;:18:::0;37707:10:::2;32564:27;37707:10:::0;32564:18:::2;:27::i;:::-;:36;32556:105;;;;-1:-1:-1::0;;;32556:105:0::2;;;;;;;:::i;:::-;37738:11:::3;37753:1;37738:16;:36;;;;37758:11;37773:1;37758:16;37738:36;37730:94;;;;-1:-1:-1::0;;;37730:94:0::3;;;;;;;:::i;:::-;37835:10;:24:::0;;;37875:30:::3;::::0;::::3;::::0;::::3;::::0;37848:11;;37875:30:::3;:::i;39042:693::-:0;1217:12;:10;:12::i;:::-;1207:6;;-1:-1:-1;;;;;1207:6:0;;;:22;;;1199:67;;;;-1:-1:-1;;;1199:67:0;;;;;;;:::i;:::-;3075:1:::1;3681:7;;:19;;3673:63;;;;-1:-1:-1::0;;;3673:63:0::1;;;;;;;:::i;:::-;3075:1;3814:7;:18:::0;39198:60:::2;39241:16:::0;39198:38:::2;:16:::0;39219;39198:20:::2;:38::i;:::-;:42:::0;::::2;:60::i;:::-;39262:3;39198:67;39190:140;;;;-1:-1:-1::0;;;39190:140:0::2;;;;;;;:::i;:::-;39369:16;39349;:36;;:76;;;;;39409:16;39389;:36;;39349:76;39341:163;;;;-1:-1:-1::0;;;39341:163:0::2;;;;;;;:::i;:::-;39515:15;:34:::0;;;39560:15:::2;:34:::0;;;39605:15:::2;:34:::0;;;39655:72:::2;::::0;::::2;::::0;::::2;::::0;39533:16;;39578;;39623;;39655:72:::2;:::i;:::-;;;;;;;;-1:-1:-1::0;;3031:1:0::1;3993:22:::0;;-1:-1:-1;39042:693:0:o;37925:1105::-;1217:12;:10;:12::i;:::-;1207:6;;-1:-1:-1;;;;;1207:6:0;;;:22;;;1199:67;;;;-1:-1:-1;;;1199:67:0;;;;;;;:::i;:::-;3075:1:::1;3681:7;;:19;;3673:63;;;;-1:-1:-1::0;;;3673:63:0::1;;;;;;;:::i;:::-;3075:1;3814:7;:18:::0;38020:10:::2;32564:27;38020:10:::0;32564:18:::2;:27::i;:::-;:36;32556:105;;;;-1:-1:-1::0;;;32556:105:0::2;;;;;;;:::i;:::-;38051:12:::3;::::0;::::3;;38043:67;;;;-1:-1:-1::0;;;38043:67:0::3;;;;;;;:::i;:::-;38148:16;;38167:6;38148:25;38129:15;:44;;:93;;;;;38196:16;;38215:7;38196:26;38177:15;:45;;38129:93;38121:175;;;;-1:-1:-1::0;;;38121:175:0::3;;;;;;;:::i;:::-;38334:3;38315:15;:22;;38307:83;;;;-1:-1:-1::0;;;38307:83:0::3;;;;;;;:::i;:::-;38401:14;:32:::0;;;38444:14:::3;:27:::0;;-1:-1:-1;;;;;;38444:27:0;;::::3;::::0;;;38482:14:::3;:27:::0;;;::::3;::::0;;38520:14:::3;:27:::0;;;;::::3;::::0;;-1:-1:-1;38558:21:0::3;:25:::0;;;38594:19:::3;:23:::0;;;38628:19:::3;:23:::0;;;-1:-1:-1;38662:11:0;:24:::3;::::0;;-1:-1:-1;;;38662:24:0;;;;-1:-1:-1;;;;;38662:11:0;;::::3;::::0;:22:::3;::::0;-1:-1:-1;38662:24:0;;::::3;::::0;;;;;;-1:-1:-1;38662:11:0;:24;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;;38718:7:0::3;:14:::0;;-1:-1:-1;;38707:123:0::3;38734:3:::0;;38707:123:::3;;38789:1;38759:13;:27;38773:7;38783:1;38781;:3;38773:12;;;;;;;;;::::0;;;::::3;::::0;;;;;::::3;::::0;-1:-1:-1;;;;;38773:12:0::3;38759:27:::0;;;::::3;::::0;;;;;;;;:31;38805:7:::3;:13:::0;;;::::3;;;;;::::0;;;::::3;::::0;;;;-1:-1:-1;;38805:13:0;;;;;-1:-1:-1;;;;;;38805:13:0::3;::::0;;;;;;;;38739:3;38707:123:::3;;;-1:-1:-1::0;38861:7:0::3;:14:::0;38850:77:::3;38877:3:::0;;38850:77:::3;;38902:7;:13;;;;;;;;::::0;;;::::3;::::0;;-1:-1:-1;;38902:13:0;;;::::3;::::0;::::3;::::0;;::::3;::::0;;-1:-1:-1;;;;;;38902:13:0::3;::::0;;-1:-1:-1;38902:13:0::3;::::0;;-1:-1:-1;;38902:13:0;;;;;;38882:3;38850:77:::3;;;-1:-1:-1::0;38947:14:0::3;:21:::0;;-1:-1:-1;;38947:21:0::3;38964:4;38947:21;::::0;;38984:38:::3;::::0;::::3;::::0;::::3;::::0;39006:15;;38984:38:::3;:::i;32976:51::-:0;;;:::o;52955:103::-;53035:15;;52955:103;;:::o;54295:125::-;54386:26;;54295:125;:::o;51577:98::-;51653:7;:14;51577:98;:::o;52139:116::-;52217:11;;:30;;;-1:-1:-1;;;52217:30:0;;;;52190:7;;-1:-1:-1;;;;;52217:11:0;;:28;;:30;;;;;;;;;;;;;;:11;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52210:37;;52139:116;:::o;51899:94::-;51971:14;;-1:-1:-1;;;;;51971:14:0;51899:94;:::o;54163:120::-;54254:21;;54163:120;:::o;46188:340::-;3075:1;3681:7;;:19;;3673:63;;;;-1:-1:-1;;;3673:63:0;;;;;;;:::i;:::-;3075:1;3814:7;:18;46244:10:::1;32564:27;46244:10:::0;32564:18:::1;:27::i;:::-;:36;32556:105;;;;-1:-1:-1::0;;;32556:105:0::1;;;;;;;:::i;:::-;46291:11:::2;::::0;:30:::2;::::0;;-1:-1:-1;;;46291:30:0;;;;46267:21:::2;::::0;-1:-1:-1;;;;;46291:11:0::2;::::0;:28:::2;::::0;:30:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;:11;:30;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46267:54;;46333:15;46354:11;;;;;;;;;-1:-1:-1::0;;;;;46354:11:0::2;-1:-1:-1::0;;;;;46354:22:0::2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46332:46;;;;46397:13;46414:1;46397:18;:34;;;;-1:-1:-1::0;46419:12:0;;::::2;46397:34;46389:90;;;;-1:-1:-1::0;;;46389:90:0::2;;;;;;;:::i;:::-;46490:11;::::0;;:30:::2;::::0;-1:-1:-1;;;46490:30:0;;-1:-1:-1;;;;;46490:11:0;;::::2;::::0;:27:::2;::::0;:30:::2;::::0;:11;:30:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;3031:1:0;3993:22;;-1:-1:-1;;46188:340:0:o;32857:68::-;;;-1:-1:-1;;;;;32857:68:0;;:::o;53395:98::-;53471:14;;;;53395:98;:::o;43511:708::-;3075:1;3681:7;;:19;;3673:63;;;;-1:-1:-1;;;3673:63:0;;;;;;;:::i;:::-;3075:1;3814:7;:18;43561:10:::1;32564:27;43561:10:::0;32564:18:::1;:27::i;:::-;:36;32556:105;;;;-1:-1:-1::0;;;32556:105:0::1;;;;;;;:::i;:::-;43607:14:::2;::::0;::::2;;43606:15;43584:106;;;;-1:-1:-1::0;;;43584:106:0::2;;;;;;;:::i;:::-;43763:1;43733:13;:27;43747:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;43733:27:0::2;-1:-1:-1::0;;;;;43733:27:0::2;;;;;;;;;;;;;:31;43711:116;;;;-1:-1:-1::0;;;43711:116:0::2;;;;;;;:::i;:::-;43848:20;43871:13;:27;43885:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;43871:27:0::2;-1:-1:-1::0;;;;;43871:27:0::2;;;;;;;;;;;;;43848:50;;43909:22;:20;:22::i;:::-;43981:15;-1:-1:-1::0;;;;;43974:32:0::2;;44025:12;:10;:12::i;:::-;44056;43974:109;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43952:188;;;;-1:-1:-1::0;;;43952:188:0::2;;;;;;;:::i;:::-;44169:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;44161:50:0::2;;44183:13;:27;44197:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;44183:27:0::2;-1:-1:-1::0;;;;;44183:27:0::2;;;;;;;;;;;;;44161:50;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;3031:1:0;3993:22;;43511:708::o;45387:789::-;3075:1;3681:7;;:19;;3673:63;;;;-1:-1:-1;;;3673:63:0;;;;;;;:::i;:::-;3075:1;3814:7;:18;45443:10:::1;32564:27;45443:10:::0;32564:18:::1;:27::i;:::-;:36;32556:105;;;;-1:-1:-1::0;;;32556:105:0::1;;;;;;;:::i;:::-;45488:14:::2;::::0;::::2;;:52:::0;::::2;;;;45526:14;;45519:3;:21;;45488:52;45466:151;;;;-1:-1:-1::0;;;45466:151:0::2;;;;;;;:::i;:::-;45683:22;;45660:19;;:45;;45638:168;;;;-1:-1:-1::0;;;45638:168:0::2;;;;;;;:::i;:::-;45867:14;::::0;45849:7:::2;:14:::0;:32:::2;;45827:140;;;;-1:-1:-1::0;;;45827:140:0::2;;;;;;;:::i;:::-;46012:11;::::0;:30:::2;::::0;;-1:-1:-1;;;46012:30:0;;;;45988:21:::2;::::0;-1:-1:-1;;;;;46012:11:0::2;::::0;:28:::2;::::0;:30:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;:11;:30;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45988:54:::0;-1:-1:-1;46061:18:0;;46053:74:::2;;;;-1:-1:-1::0;;;46053:74:0::2;;;;;;;:::i;:::-;46138:11;::::0;:30:::2;::::0;-1:-1:-1;;;46138:30:0;;-1:-1:-1;;;;;46138:11:0;;::::2;::::0;:27:::2;::::0;:30:::2;::::0;:11;;:30:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;3031:1:0;3993:22;;-1:-1:-1;45387:789:0:o;50827:158::-;50948:11;;50919:58;;-1:-1:-1;;;50919:58:0;;50886:13;;-1:-1:-1;;;;;50919:15:0;:28;;;;:58;;50961:15;;50919:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;50919:58:0;;;;;;;;;;;;:::i;36692:375::-;1217:12;:10;:12::i;:::-;1207:6;;-1:-1:-1;;;;;1207:6:0;;;:22;;;1199:67;;;;-1:-1:-1;;;1199:67:0;;;;;;;:::i;:::-;3075:1:::1;3681:7;;:19;;3673:63;;;;-1:-1:-1::0;;;3673:63:0::1;;;;;;;:::i;:::-;3075:1;3814:7;:18:::0;36803:10:::2;32564:27;36803:10:::0;32564:18:::2;:27::i;:::-;:36;32556:105;;;;-1:-1:-1::0;;;32556:105:0::2;;;;;;;:::i;:::-;36861:5:::3;36834:23;:32;;36826:104;;;;-1:-1:-1::0;;;36826:104:0::3;;;;;;;:::i;:::-;36941:22;:48:::0;;;37005:54:::3;::::0;::::3;::::0;::::3;::::0;36966:23;;37005:54:::3;:::i;40041:295::-:0;1217:12;:10;:12::i;:::-;1207:6;;-1:-1:-1;;;;;1207:6:0;;;:22;;;1199:67;;;;-1:-1:-1;;;1199:67:0;;;;;;;:::i;:::-;3075:1:::1;3681:7;;:19;;3673:63;;;;-1:-1:-1::0;;;3673:63:0::1;;;;;;;:::i;:::-;3075:1;3814:7;:18:::0;40154:4:::2;40138:20:::0;::::2;::::0;::::2;::::0;:45:::2;;;40178:5;40162:12;:21;;40138:45;40130:113;;;;-1:-1:-1::0;;;40130:113:0::2;;;;;;;:::i;:::-;40254:11;:26:::0;;;40296:32:::2;::::0;::::2;::::0;::::2;::::0;40268:12;;40296:32:::2;:::i;:::-;;;;;;;;-1:-1:-1::0;3031:1:0::1;3993:22:::0;;40041:295::o;36395:289::-;1217:12;:10;:12::i;:::-;1207:6;;-1:-1:-1;;;;;1207:6:0;;;:22;;;1199:67;;;;-1:-1:-1;;;1199:67:0;;;;;;;:::i;:::-;3075:1:::1;3681:7;;:19;;3673:63;;;;-1:-1:-1::0;;;3673:63:0::1;;;;;;;:::i;:::-;3075:1;3814:7;:18:::0;36486:10:::2;32564:27;36486:10:::0;32564:18:::2;:27::i;:::-;:36;32556:105;;;;-1:-1:-1::0;;;32556:105:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36517:27:0;::::3;36509:78;;;;-1:-1:-1::0;;;36509:78:0::3;;;;;;;:::i;:::-;36598:12;:28:::0;;-1:-1:-1;;;;;;36598:28:0::3;-1:-1:-1::0;;;;;36598:28:0;::::3;::::0;;::::3;::::0;;;36642:34:::3;::::0;::::3;::::0;-1:-1:-1;;36642:34:0::3;-1:-1:-1::0;;3031:1:0::1;3993:22:::0;;36395:289::o;53288:95::-;53364:11;;53288:95;:::o;53185:91::-;53259:9;;53185:91;:::o;1637:148::-;1217:12;:10;:12::i;:::-;1207:6;;-1:-1:-1;;;;;1207:6:0;;;:22;;;1199:67;;;;-1:-1:-1;;;1199:67:0;;;;;;;:::i;:::-;1744:1:::1;1728:6:::0;;1707:40:::1;::::0;-1:-1:-1;;;;;1728:6:0;;::::1;::::0;1707:40:::1;::::0;1744:1;;1707:40:::1;1775:1;1758:19:::0;;-1:-1:-1;;;;;;1758:19:0::1;::::0;;1637:148::o;40348:418::-;1217:12;:10;:12::i;:::-;1207:6;;-1:-1:-1;;;;;1207:6:0;;;:22;;;1199:67;;;;-1:-1:-1;;;1199:67:0;;;;;;;:::i;:::-;3075:1:::1;3681:7;;:19;;3673:63;;;;-1:-1:-1::0;;;3673:63:0::1;;;;;;;:::i;:::-;3075:1;3814:7;:18:::0;;;40475:32;::::2;::::0;::::2;::::0;:69:::2;;;40542:2;40511:27;:33;;40475:69;40467:146;;;;-1:-1:-1::0;;;40467:146:0::2;;;;;;;:::i;:::-;40624:26;:56:::0;;;40696:62:::2;::::0;::::2;::::0;::::2;::::0;40653:27;;40696:62:::2;:::i;53505:97::-:0;53582:12;;-1:-1:-1;;;;;53582:12:0;53505:97;:::o;53847:304::-;53901:7;54001:11;;53924:73;53977:19;;53931:15;-1:-1:-1;;;;;53924:33:0;;53966:4;53924:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;:73::i;:::-;:88;53921:203;;54034:90;54112:11;;54034:73;54087:19;;54041:15;-1:-1:-1;;;;;54034:33:0;;54076:4;54034:48;;;;;;;;;;;;;;;:::i;:90::-;54027:97;;;;53921:203;-1:-1:-1;54142:1:0;53847:304;:::o;52620:95::-;52696:11;;52620:95;:::o;50722:97::-;50767:17;50804:7;50797:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50797:14:0;;;;;;;;;;;;;;;;;;;;;;;50722:97;:::o;995:79::-;1033:7;1060:6;-1:-1:-1;;;;;1060:6:0;995:79;:::o;53743:92::-;53817:10;;53743:92;:::o;51217:348::-;51288:7;;;51360:151;51376:7;:14;51374:16;;51360:151;;;51436:6;-1:-1:-1;;;;;51415:27:0;:7;51423:1;51415:10;;;;;;;;;;;;;;;;;;;;;:17;-1:-1:-1;;;;;51415:17:0;:27;51412:88;;;51463:21;;;;;51412:88;51392:3;;51360:151;;;-1:-1:-1;51538:19:0;51217:348;-1:-1:-1;;51217:348:0:o;39747:282::-;1217:12;:10;:12::i;:::-;1207:6;;-1:-1:-1;;;;;1207:6:0;;;:22;;;1199:67;;;;-1:-1:-1;;;1199:67:0;;;;;;;:::i;:::-;3075:1:::1;3681:7;;:19;;3673:63;;;;-1:-1:-1::0;;;3673:63:0::1;;;;;;;:::i;:::-;3075:1;3814:7;:18:::0;39869:2:::2;39850:21:::0;::::2;;39842:82;;;;-1:-1:-1::0;;;39842:82:0::2;;;;;;;:::i;:::-;39935:14;:32:::0;;;39983:38:::2;::::0;::::2;::::0;::::2;::::0;39952:15;;39983:38:::2;:::i;53614:117::-:0;53701:22;;53614:117;:::o;52507:101::-;52586:14;;52507:101;:::o;52727:::-;52806:14;;52727:101;:::o;46892:3581::-;3075:1;3681:7;;:19;;3673:63;;;;-1:-1:-1;;;3673:63:0;;;;;;;:::i;:::-;3075:1;3814:7;:18;46952:10:::1;32564:27;46952:10:::0;32564:18:::1;:27::i;:::-;:36;32556:105;;;;-1:-1:-1::0;;;32556:105:0::1;;;;;;;:::i;:::-;46997:7:::2;:14:::0;47044:7:::2;:14:::0;47093::::2;::::0;::::2;;:52:::0;::::2;;;;47131:14;;47124:3;:21;;47093:52;47071:155;;;;-1:-1:-1::0;;;47071:155:0::2;;;;;;;:::i;:::-;47292:22;;47269:19;;:45;;47247:168;;;;-1:-1:-1::0;;;47247:168:0::2;;;;;;;:::i;:::-;47454:14;;47439:11;:29;47436:3030;;47486:15;47503::::0;47520::::2;47539:11;;;;;;;;;-1:-1:-1::0;;;;;47539:11:0::2;-1:-1:-1::0;;;;;47539:22:0::2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47485:78;;;;;;47581:10;;47595:1;47581:15;47578:408;;;47645:12:::0;47615:130:::2;;;;-1:-1:-1::0;;;47615:130:0::2;;;;;;;:::i;:::-;47578:408;;;47812:12:::0;;;::::2;::::0;:49:::2;;-1:-1:-1::0;47849:12:0;;::::2;47812:49;:86;;;;-1:-1:-1::0;47886:12:0;;::::2;47812:86;47782:204;;;;-1:-1:-1::0;;;47782:204:0::2;;;;;;;:::i;:::-;48035:90;48113:11;;48035:73;48088:19;;48042:15;-1:-1:-1::0;;;;;48035:33:0::2;;48077:4;48035:48;;;;;;;;;;;;;;;:::i;:90::-;48011:21;:114:::0;;;48189:15:::2;::::0;48140:20:::2;::::0;48163:51:::2;::::0;48210:3:::2;::::0;48163:42:::2;::::0;:25:::2;:42::i;:::-;:46:::0;::::2;:51::i;:::-;48140:74;;48229:20;48252:51;48299:3;48252:42;48278:15;;48252:21;;:25;;:42;;;;:::i;:51::-;48229:74;;48318:20;48341:57;48385:12;48341:39;48367:12;48341:21;;:25;;:39;;;;:::i;:57::-;48318:80;;48441:31;48475:7;48441:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;;::::2;::::0;;;;::::2;::::0;;;;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;;-1:-1:-1;;;;;48441:41:0::2;::::0;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;;;;::::2;;::::0;;;;;;;;;::::2;::::0;;;;;;;;;::::2;::::0;::::2;;;;;;;;;;48521:24;48533:11;48521:7;:11;;:24;;;;:::i;:::-;48511:34;;48577:10;48588:7;48577:19;;;;;;;;;::::0;;::::2;::::0;;;;;;;:26;48560:14:::2;:43:::0;;-1:-1:-1;;;;;;48560:43:0::2;-1:-1:-1::0;;;;;48560:43:0;;::::2;;::::0;;;;48664:14:::2;-1:-1:-1::0;48650:29:0;;;:13:::2;:29:::0;;;;;;;:47:::2;::::0;48684:12;48650:33:::2;:47::i;:::-;48632:14;::::0;-1:-1:-1;;;;;48632:14:0::2;48618:29;::::0;;;:13:::2;:29;::::0;;;;:79;48762:27;;:10;;-1:-1:-1;;48773:15:0;;;48762:27;::::2;;;;;;;;;;;48740:10;48751:7;48740:19;;;;;;;;;::::0;;::::2;::::0;;;;;:49;-1:-1:-1;;48804:13:0;;;;48856:24:::2;:7:::0;48868:11;48856::::2;:24::i;:::-;48846:34;;48912:10;48923:7;48912:19;;;;;;;;;::::0;;::::2;::::0;;;;;;;:26;48895:14:::2;:43:::0;;-1:-1:-1;;;;;;48895:43:0::2;-1:-1:-1::0;;;;;48895:43:0;;::::2;;::::0;;;;48999:14:::2;-1:-1:-1::0;48985:29:0;;;:13:::2;:29:::0;;;;;;;:47:::2;::::0;49019:12;48985:33:::2;:47::i;:::-;48967:14;::::0;-1:-1:-1;;;;;48967:14:0::2;48953:29;::::0;;;:13:::2;:29;::::0;;;;:79;49097:27;;:10;;-1:-1:-1;;49108:15:0;;;49097:27;::::2;;;;;;;;;;;49075:10;49086:7;49075:19;;;;;;;;;::::0;;::::2;::::0;;;;;:49;-1:-1:-1;;49139:13:0;;;;49191:24:::2;:7:::0;49203:11;49191::::2;:24::i;:::-;49181:34;;49247:10;49258:7;49247:19;;;;;;;;;::::0;;::::2;::::0;;;;;;;:26;49230:14:::2;:43:::0;;-1:-1:-1;;;;;;49230:43:0::2;-1:-1:-1::0;;;;;49230:43:0;;::::2;;::::0;;;;49334:14:::2;-1:-1:-1::0;49320:29:0;;;:13:::2;:29:::0;;;;;;;:47:::2;::::0;49354:12;49320:33:::2;:47::i;:::-;49302:14;::::0;-1:-1:-1;;;;;49302:14:0;;::::2;49288:29;::::0;;;:13:::2;:29;::::0;;;;:79;;;;49429:15:::2;49422:32;;49477:12;:10;:12::i;:::-;49512:11;;49422:120;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49396:227;;;;-1:-1:-1::0;;;49396:227:0::2;;;;;;;:::i;:::-;49652:12;:20:::0;;-1:-1:-1;;49652:20:0;;::::2;::::0;;;49687:14:::2;:22:::0;;;;::::2;::::0;;49787:14:::2;::::0;49771::::2;::::0;-1:-1:-1;49755:14:0;49738:64:::2;::::0;-1:-1:-1;;;;;49787:14:0;;::::2;::::0;49771;;::::2;::::0;49755;;::::2;::::0;49738:64:::2;::::0;-1:-1:-1;;49738:64:0::2;47436:3030;;;;;;;;;;49838:19;::::0;:23;49835:206:::2;;49937:12;::::0;49996:9:::2;::::0;49972:19:::2;::::0;-1:-1:-1;;;;;49889:15:0::2;49882:32:::0;::::2;::::0;::::2;::::0;49937:12;::::2;::::0;49972:34:::2;::::0;:23:::2;:34::i;:::-;49882:143;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;49835:206;50149:11;;50072:73;50125:19;;50079:15;-1:-1:-1::0;;;;;50072:33:0::2;;50114:4;50072:48;;;;;;;;;;;;;;;:::i;:73::-;:88;50069:248;;50188:15;-1:-1:-1::0;;;;;50181:32:0::2;;50236:12;:10;:12::i;:::-;50271:11;;50181:120;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;50069:248;50367:1;50345:19;:23:::0;50397:12:::2;:20:::0;;-1:-1:-1;;50397:20:0;;::::2;::::0;;;50432:14:::2;:22:::0;;;;::::2;::::0;;-1:-1:-1;;3031:1:0;3993:22;;-1:-1:-1;46892:3581:0:o;52840:103::-;52920:15;;52840:103;:::o;52267:111::-;52351:19;;52267:111;:::o;53070:103::-;53150:15;;53070:103;:::o;50612:98::-;50688:7;:14;50612:98;:::o;46540:340::-;3075:1;3681:7;;:19;;3673:63;;;;-1:-1:-1;;;3673:63:0;;;;;;;:::i;:::-;3075:1;3814:7;:18;46596:10:::1;32564:27;46596:10:::0;32564:18:::1;:27::i;:::-;:36;32556:105;;;;-1:-1:-1::0;;;32556:105:0::1;;;;;;;:::i;:::-;46643:11:::2;::::0;:30:::2;::::0;;-1:-1:-1;;;46643:30:0;;;;46619:21:::2;::::0;-1:-1:-1;;;;;46643:11:0::2;::::0;:28:::2;::::0;:30:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;:11;:30;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46619:54;;46686:15;46706:11;;;;;;;;;-1:-1:-1::0;;;;;46706:11:0::2;-1:-1:-1::0;;;;;46706:22:0::2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46684:46;;;;46749:13;46766:1;46749:18;:34;;;;-1:-1:-1::0;46771:12:0;;::::2;46749:34;46741:90;;;;-1:-1:-1::0;;;46741:90:0::2;;;;;;;:::i;:::-;46842:11;::::0;:30:::2;::::0;-1:-1:-1;;;46842:30:0;;-1:-1:-1;;;;;46842:11:0;;::::2;::::0;:27:::2;::::0;:30:::2;::::0;46870:1:::2;::::0;46842:30:::2;;;:::i;51793:94::-:0;51865:14;;-1:-1:-1;;;;;51865:14:0;51793:94;:::o;52005:122::-;52050:7;52059;52068;52095:11;;;;;;;;;-1:-1:-1;;;;;52095:11:0;-1:-1:-1;;;;;52095:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52088:31;;;;;;52005:122;;;:::o;44576:803::-;3075:1;3681:7;;:19;;3673:63;;;;-1:-1:-1;;;3673:63:0;;;;;;;:::i;:::-;3075:1;3814:7;:18;44648:10:::1;32564:27;44648:10:::0;32564:18:::1;:27::i;:::-;:36;32556:105;;;;-1:-1:-1::0;;;32556:105:0::1;;;;;;;:::i;:::-;44709:12:::2;::::0;-1:-1:-1;;;;;44709:12:0::2;44693;:10;:12::i;:::-;-1:-1:-1::0;;;;;44693:28:0::2;;44671:126;;;;-1:-1:-1::0;;;44671:126:0::2;;;;;;;:::i;:::-;44875:22;::::0;44840:19:::2;::::0;:31:::2;::::0;44864:6;44840:23:::2;:31::i;:::-;:57;;44818:180;;;;-1:-1:-1::0;;;44818:180:0::2;;;;;;;:::i;:::-;45048:15;-1:-1:-1::0;;;;;45041:36:0::2;;45096:12;:10;:12::i;:::-;45135:4;45159:6;45041:139;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45019:228;;;;-1:-1:-1::0;;;45019:228:0::2;;;;;;;:::i;:::-;45282:19;::::0;:31:::2;::::0;45306:6;45282:23:::2;:31::i;:::-;45260:19;:53:::0;45350:12:::2;:10;:12::i;:::-;-1:-1:-1::0;;;;;45334:37:0::2;;45364:6;45334:37;;;;;;:::i;41960:1539::-:0;3075:1;3681:7;;:19;;3673:63;;;;-1:-1:-1;;;3673:63:0;;;;;;;:::i;:::-;3075:1;3814:7;:18;42022:10:::1;32564:27;42022:10:::0;32564:18:::1;:27::i;:::-;:36;32556:105;;;;-1:-1:-1::0;;;32556:105:0::1;;;;;;;:::i;:::-;42067:14:::2;::::0;::::2;;42045:105;;;;-1:-1:-1::0;;;42045:105:0::2;;;;;;;:::i;:::-;42195:11;::::0;:30:::2;::::0;;-1:-1:-1;;;42195:30:0;;;;42171:21:::2;::::0;-1:-1:-1;;;;;42195:11:0::2;::::0;:28:::2;::::0;:30:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;:11;:30;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42171:54:::0;-1:-1:-1;42258:18:0;;42236:118:::2;;;;-1:-1:-1::0;;;42236:118:0::2;;;;;;;:::i;:::-;42375:28;;:::i;:::-;42406:5;::::0;:25:::2;::::0;-1:-1:-1;;;42406:25:0;;-1:-1:-1;;;;;42406:5:0;;::::2;::::0;:20:::2;::::0;:25:::2;::::0;42427:3:::2;::::0;42406:25:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42375:56;;42509:26;;42464:42;42489:12;:10;:12::i;:::-;42503:2;42464:24;:42::i;:::-;:71;42442:175;;;;-1:-1:-1::0;;;42442:175:0::2;;;;;;;:::i;:::-;42638:25;;:::i;:::-;42690:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;42674:28:0;;::::2;::::0;;42713:11:::2;::::0;;::::2;:16:::0;;;42740:7:::2;:20:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;42740:20:0;;;;;;;::::2;::::0;;::::2;::::0;;::::2;::::0;;-1:-1:-1;;;;;;42740:20:0::2;::::0;;::::2;::::0;;;::::2;::::0;;;;;;;;;;;;;;::::2;::::0;::::2;::::0;;::::2;::::0;-1:-1:-1;;42740:20:0;;::::2;;::::0;;::::2;::::0;;;::::2;-1:-1:-1::0;;42740:20:0::2;::::0;::::2;::::0;;::::2;;;-1:-1:-1::0;;42740:20:0::2;::::0;;;;::::2;::::0;;;::::2;::::0;;;::::2;::::0;;42861:11:::2;::::0;42773:219;;-1:-1:-1;;;42773:219:0;;:15:::2;:51:::0;;::::2;::::0;::::2;::::0;42832:9:::2;::::0;42773:219:::2;::::0;42861:11;42891:15:::2;::::0;42933:4:::2;::::0;42957:15:::2;42975:2;42957:20;::::0;42773:219;::::2;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;::::0;;::::2;-1:-1:-1::0;;42773:219:0::2;::::0;::::2;;::::0;::::2;::::0;;;::::2;::::0;::::2;:::i;:::-;;43006:12;43023;:10;:12::i;:::-;-1:-1:-1::0;;;;;43023:17:0::2;43049:21;43023:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43005:71;;;43095:7;43087:33;;;;-1:-1:-1::0;;;43087:33:0::2;;;;;;;:::i;:::-;43144:13;:27;43158:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;43144:27:0::2;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;43144:27:0;;43141:76:::2;;43191:7;43204:12;:10;:12::i;:::-;43191:26:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;43191:26:0;;;::::2;::::0;;;;;::::2;::::0;;-1:-1:-1;;;;;;43191:26:0::2;-1:-1:-1::0;;;;;43191:26:0;;::::2;::::0;;;::::2;::::0;;43141:76:::2;43260:68;43292:35;43323:3;43292:26;43308:9;;43292:11;;:15;;:26;;;;:::i;:35::-;43260:13;:27;43274:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;43260:27:0::2;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;43260:27:0;;;:31:::2;:68::i;:::-;43230:13;:27;43244:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;43230:27:0::2;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;43230:27:0;:98;43411:9:::2;::::0;43395:11:::2;::::0;43371:60:::2;::::0;43395:35:::2;::::0;43426:3:::2;::::0;43395:26:::2;::::0;:11;:15:::2;:26::i;:35::-;43371:19;::::0;;:23:::2;:60::i;:::-;43349:19;:82:::0;43465:12:::2;:10;:12::i;:::-;-1:-1:-1::0;;;;;43452:39:0::2;;43479:11;;43452:39;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;3031:1:0;3993:22;;-1:-1:-1;;;41960:1539:0:o;52390:105::-;52471:16;;52390:105;:::o;1940:244::-;1217:12;:10;:12::i;:::-;1207:6;;-1:-1:-1;;;;;1207:6:0;;;:22;;;1199:67;;;;-1:-1:-1;;;1199:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2029:22:0;::::1;2021:73;;;;-1:-1:-1::0;;;2021:73:0::1;;;;;;;:::i;:::-;2131:6;::::0;;2110:38:::1;::::0;-1:-1:-1;;;;;2110:38:0;;::::1;::::0;2131:6;::::1;::::0;2110:38:::1;::::0;::::1;2159:6;:17:::0;;-1:-1:-1;;;;;;2159:17:0::1;-1:-1:-1::0;;;;;2159:17:0;;;::::1;::::0;;;::::1;::::0;;1940:244::o;51687:94::-;51759:14;;-1:-1:-1;;;;;51759:14:0;51687:94;:::o;50485:115::-;-1:-1:-1;;;;;50571:21:0;50544:7;50571:21;;;:13;:21;;;;;;;50485:115::o;50997:208::-;51067:7;51087:28;;:::i;:::-;51118:5;;:25;;-1:-1:-1;;;51118:25:0;;-1:-1:-1;;;;;51118:5:0;;;;:20;;:25;;51139:3;;51118:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51087:56;;51161:36;51186:6;51194:2;51161:24;:36::i;:::-;51154:43;50997:208;-1:-1:-1;;;50997:208:0:o;10058:422::-;10425:20;10464:8;;;10058:422::o;4988:181::-;5046:7;5078:5;;;5102:6;;;;5094:46;;;;-1:-1:-1;;;5094:46:0;;;;;;;:::i;:::-;5160:1;-1:-1:-1;4988:181:0;;;;;:::o;131:106::-;219:10;131:106;:::o;44231:333::-;44312:1;44282:13;:27;44296:12;:10;:12::i;:::-;-1:-1:-1;;;;;44282:27:0;-1:-1:-1;;;;;44282:27:0;;;;;;;;;;;;:31;;;;44338:6;44334:223;44350:7;:14;44348:16;;44334:223;;;44403:12;:10;:12::i;:::-;-1:-1:-1;;;;;44389:26:0;:7;44397:1;44389:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44389:10:0;:26;44386:160;;;44449:7;44457:14;;-1:-1:-1;;44457:16:0;;;44449:25;;;;;;;;;;;;;;;;44436:7;:10;;-1:-1:-1;;;;;44449:25:0;;;;44444:1;;44436:10;;;;;;;;;;;;;;:38;;;;;-1:-1:-1;;;;;44436:38:0;;;;;-1:-1:-1;;;;;44436:38:0;;;;;;44493:7;:13;;;;;;;;;;;;;;;;-1:-1:-1;;44493:13:0;;;;;-1:-1:-1;;;;;;44493:13:0;;;;;;44525:5;;44386:160;44366:3;;44334:223;;;;44231:333::o;5452:136::-;5510:7;5537:43;5541:1;5544;5537:43;;;;;;;;;;;;;;;;;:3;:43::i;6342:471::-;6400:7;6645:6;6641:47;;-1:-1:-1;6675:1:0;6668:8;;6641:47;6712:5;;;6716:1;6712;:5;:1;6736:5;;;;;:10;6728:56;;;;-1:-1:-1;;;6728:56:0;;;;;;;:::i;7289:132::-;7347:7;7374:39;7378:1;7381;7374:39;;;;;;;;;;;;;;;;;:3;:39::i;8660:130::-;8718:7;8745:37;8749:1;8752;8745:37;;;;;;;;;;;;;;;;;:3;:37::i;41365:542::-;41467:7;;;41541:310;41557:7;:14;41555:16;;41541:310;;;41617:6;-1:-1:-1;;;;;41596:27:0;:7;41604:1;41596:10;;;;;;;;;;;;;;;;;;;;;:17;-1:-1:-1;;;;;41596:17:0;:27;:80;;;;;41669:2;:7;;;41645:31;;:7;41653:1;41645:10;;;;;;;;;;;;;;;;:15;:10;;;;;:15;:20;;;:31;41596:80;:134;;;;;41722:2;:8;;;41697:33;;:7;41705:1;41697:10;;;;;;;;;;;;;;;;;;;;;:15;;:21;;;;;;:33;41596:134;:184;;;;;41774:2;:6;;;41751:29;;:7;41759:1;41751:10;;;;;;;;;;;;;;;;;;;;;:15;;:19;;;;;;:29;41596:184;41593:247;;;41801:23;;;;;41593:247;41573:3;;41541:310;;;-1:-1:-1;41878:21:0;41365:542;-1:-1:-1;;;41365:542:0:o;5891:192::-;5977:7;6013:12;6005:6;;;;5997:29;;;;-1:-1:-1;;;5997:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;6049:5:0;;;5891:192::o;7917:278::-;8003:7;8038:12;8031:5;8023:28;;;;-1:-1:-1;;;8023:28:0;;;;;;;;:::i;:::-;;8062:9;8078:1;8074;:5;;;;;;;7917:278;-1:-1:-1;;;;;7917:278:0:o;9275:166::-;9361:7;9397:12;9389:6;9381:29;;;;-1:-1:-1;;;9381:29:0;;;;;;;;:::i;:::-;;9432:1;9428;:5;;;;;;;9275:166;-1:-1:-1;;;;9275:166:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;2274:130::-;2350:13;;49503:4;49492:16;;52396:33;;52386:2;;52443:1;;52433:12;2411:241;;2515:2;2503:9;2494:7;2490:23;2486:32;2483:2;;;-1:-1;;2521:12;2483:2;72:20;;-1:-1;;;;;48799:54;;51786:35;;51776:2;;-1:-1;;51825:12;2659:392;;2799:2;;2787:9;2778:7;2774:23;2770:32;2767:2;;;-1:-1;;2805:12;2767:2;2856:17;2850:24;2894:18;2886:6;2883:30;2880:2;;;-1:-1;;2916:12;2880:2;3003:22;;281:4;269:17;;265:27;-1:-1;255:2;;-1:-1;;296:12;255:2;336:6;330:13;358:80;373:64;430:6;373:64;:::i;:::-;358:80;:::i;:::-;466:21;;;523:14;;;;498:17;;;612;;;603:27;;;;600:36;-1:-1;597:2;;;-1:-1;;639:12;597:2;-1:-1;665:10;;659:217;684:6;681:1;678:13;659:217;;;2211:13;;752:61;;706:1;699:9;;;;;827:14;;;;855;;659:217;;;-1:-1;2936:99;2761:290;-1:-1;;;;;;;2761:290::o;3058:257::-;;3170:2;3158:9;3149:7;3145:23;3141:32;3138:2;;;-1:-1;;3176:12;3138:2;971:6;965:13;51932:5;49029:13;49022:21;51910:5;51907:32;51897:2;;-1:-1;;51943:12;3322:263;;3437:2;3425:9;3416:7;3412:23;3408:32;3405:2;;;-1:-1;;3443:12;3405:2;-1:-1;1103:13;;3399:186;-1:-1;3399:186::o;3592:317::-;;3734:2;3722:9;3713:7;3709:23;3705:32;3702:2;;;-1:-1;;3740:12;3702:2;1361:20;3734:2;1361:20;:::i;:::-;1940:6;1934:13;49206:6;52178:5;49195:18;52154:5;52151:34;52141:2;;-1:-1;;52189:12;52141:2;1438:85;;1618:58;1672:3;1585:2;1648:22;;1618:58;:::i;:::-;1585:2;1604:5;1600:16;1593:84;1770:58;1824:3;1737:2;1804:9;1800:22;1770:58;:::i;:::-;1737:2;1752:16;;1745:84;1756:5;3696:213;-1:-1;;;3696:213::o;3916:241::-;;4020:2;4008:9;3999:7;3995:23;3991:32;3988:2;;;-1:-1;;4026:12;3988:2;-1:-1;2063:20;;3982:175;-1:-1;3982:175::o;4434:491::-;;;;4572:2;4560:9;4551:7;4547:23;4543:32;4540:2;;;-1:-1;;4578:12;4540:2;-1:-1;;2063:20;;;4730:2;4769:22;;2063:20;;-1:-1;4838:2;4877:22;;;2063:20;;4534:391;-1:-1;4534:391::o;4932:535::-;;;;5081:2;5069:9;5060:7;5056:23;5052:32;5049:2;;;-1:-1;;5087:12;5049:2;2217:6;2211:13;5139:74;;5250:2;5304:9;5300:22;2211:13;5258:74;;5369:2;5423:9;5419:22;2211:13;5377:74;;5043:424;;;;;:::o;6977:709::-;;7164:5;47368:12;48156:6;48151:3;48144:19;48193:4;;48188:3;48184:14;7176:93;;46900:3;-1:-1;46890:14;48193:4;-1:-1;46919:18;-1:-1;7376:288;7401:6;7398:1;7395:13;7376:288;;;51488:11;;-1:-1;;;;;48799:54;6048:37;;5628:14;;;;48810:42;47884:14;;;;7416:9;7376:288;;;-1:-1;7670:10;;7098:588;-1:-1;;;;;7098:588::o;24691:222::-;-1:-1;;;;;48799:54;;;;6048:37;;24818:2;24803:18;;24789:124::o;25165:476::-;-1:-1;;;;;48799:54;;;5917:58;;48799:54;;;;25544:2;25529:18;;5917:58;25627:2;25612:18;;24136:37;;;;25364:2;25349:18;;25335:306::o;25648:349::-;-1:-1;;;;;48799:54;;;;5917:58;;25983:2;25968:18;;24136:37;25811:2;25796:18;;25782:215::o;26344:370::-;26521:2;26535:47;;;47221:12;;26506:18;;;48144:19;;;26344:370;;26521:2;46737:14;;;;48184;;;;26344:370;6656:260;6681:6;6678:1;6675:13;6656:260;;;6742:13;;-1:-1;;;;;48799:54;6048:37;;47772:14;;;;5628;;;;48810:42;6696:9;6656:260;;;-1:-1;26588:116;;26492:222;-1:-1;;;;;;26492:222::o;26721:370::-;26898:2;26912:47;;;47221:12;;26883:18;;;48144:19;;;26721:370;;26898:2;46737:14;;;;48184;;;;26721:370;8133:260;8158:6;8155:1;8152:13;8133:260;;;8219:13;;24136:37;;47772:14;;;;5810;;;;8180:1;8173:9;8133:260;;27098:210;49029:13;;49022:21;8488:34;;27219:2;27204:18;;27190:118::o;27885:238::-;8991:58;;;28020:2;28005:18;;27991:132::o;28620:310::-;;28767:2;;28788:17;28781:47;9504:5;47221:12;48156:6;28767:2;28756:9;28752:18;48144:19;-1:-1;50995:101;51009:6;51006:1;51003:13;50995:101;;;51076:11;;;;;51070:18;51057:11;;;48184:14;51057:11;51050:39;51024:10;;50995:101;;;51111:6;51108:1;51105:13;51102:2;;;-1:-1;48184:14;51167:6;28756:9;51158:16;;51151:27;51102:2;-1:-1;51596:7;51580:14;-1:-1;;51576:28;9662:39;;;;48184:14;9662:39;;28738:192;-1:-1;;;28738:192::o;28937:416::-;29137:2;29151:47;;;9938:2;29122:18;;;48144:19;9974:34;48184:14;;;9954:55;-1:-1;;;10029:12;;;10022:35;10076:12;;;29108:245::o;29360:416::-;29560:2;29574:47;;;10327:2;29545:18;;;48144:19;10363:34;48184:14;;;10343:55;-1:-1;;;10418:12;;;10411:39;10469:12;;;29531:245::o;29783:416::-;29983:2;29997:47;;;10720:2;29968:18;;;48144:19;10756:34;48184:14;;;10736:55;-1:-1;;;10811:12;;;10804:40;10863:12;;;29954:245::o;30206:416::-;30406:2;30420:47;;;11114:2;30391:18;;;48144:19;11150:31;48184:14;;;11130:52;11201:12;;;30377:245::o;30629:416::-;30829:2;30843:47;;;11452:2;30814:18;;;48144:19;11488:34;48184:14;;;11468:55;-1:-1;;;11543:12;;;11536:30;11585:12;;;30800:245::o;31052:416::-;31252:2;31266:47;;;11836:2;31237:18;;;48144:19;11872:29;48184:14;;;11852:50;11921:12;;;31223:245::o;31475:416::-;31675:2;31689:47;;;12172:2;31660:18;;;48144:19;12208:34;48184:14;;;12188:55;-1:-1;;;12263:12;;;12256:42;12317:12;;;31646:245::o;31898:416::-;32098:2;32112:47;;;12568:2;32083:18;;;48144:19;;;12604:34;48184:14;;;12584:55;12673:34;12659:12;;;12652:56;12727:12;;;32069:245::o;32321:416::-;32521:2;32535:47;;;12978:2;32506:18;;;48144:19;13014:34;48184:14;;;12994:55;13083:26;13069:12;;;13062:48;13129:12;;;32492:245::o;32744:416::-;32944:2;32958:47;;;13380:2;32929:18;;;48144:19;13416:34;48184:14;;;13396:55;-1:-1;;;13471:12;;;13464:30;13513:12;;;32915:245::o;33167:416::-;33367:2;33381:47;;;13764:2;33352:18;;;48144:19;13800:34;48184:14;;;13780:55;-1:-1;;;13855:12;;;13848:33;13900:12;;;33338:245::o;33590:416::-;33790:2;33804:47;;;14151:2;33775:18;;;48144:19;14187:34;48184:14;;;14167:55;14256:25;14242:12;;;14235:47;14301:12;;;33761:245::o;34013:416::-;34213:2;34227:47;;;14552:2;34198:18;;;48144:19;14588:34;48184:14;;;14568:55;-1:-1;;;14643:12;;;14636:36;14691:12;;;34184:245::o;34436:416::-;34636:2;34650:47;;;14942:2;34621:18;;;48144:19;14978:34;48184:14;;;14958:55;-1:-1;;;15033:12;;;15026:27;15072:12;;;34607:245::o;34859:416::-;35059:2;35073:47;;;15323:2;35044:18;;;48144:19;15359:34;48184:14;;;15339:55;15428:28;15414:12;;;15407:50;15476:12;;;35030:245::o;35282:416::-;35482:2;35496:47;;;15727:2;35467:18;;;48144:19;15763:34;48184:14;;;15743:55;-1:-1;;;15818:12;;;15811:46;15876:12;;;35453:245::o;35705:416::-;35905:2;35919:47;;;16127:2;35890:18;;;48144:19;16163:34;48184:14;;;16143:55;-1:-1;;;16218:12;;;16211:40;16270:12;;;35876:245::o;36128:416::-;36328:2;36342:47;;;16521:2;36313:18;;;48144:19;16557:34;48184:14;;;16537:55;-1:-1;;;16612:12;;;16605:35;16659:12;;;36299:245::o;36551:416::-;36751:2;36765:47;;;16910:2;36736:18;;;48144:19;16946:34;48184:14;;;16926:55;-1:-1;;;17001:12;;;16994:25;17038:12;;;36722:245::o;36974:416::-;37174:2;37188:47;;;17289:2;37159:18;;;48144:19;17325:34;48184:14;;;17305:55;17394:29;17380:12;;;17373:51;17443:12;;;37145:245::o;37397:416::-;37597:2;37611:47;;;37582:18;;;48144:19;17730:34;48184:14;;;17710:55;17784:12;;;37568:245::o;37820:416::-;38020:2;38034:47;;;18035:2;38005:18;;;48144:19;18071:34;48184:14;;;18051:55;18140:34;18126:12;;;18119:56;-1:-1;;;18195:12;;;18188:33;18240:12;;;37991:245::o;38243:416::-;38443:2;38457:47;;;18491:2;38428:18;;;48144:19;18527:34;48184:14;;;18507:55;18596:30;18582:12;;;18575:52;18646:12;;;38414:245::o;38666:416::-;38866:2;38880:47;;;18897:2;38851:18;;;48144:19;18933:34;48184:14;;;18913:55;-1:-1;;;18988:12;;;18981:31;19031:12;;;38837:245::o;39089:416::-;39289:2;39303:47;;;19282:2;39274:18;;;48144:19;19318:34;48184:14;;;19298:55;-1:-1;;;19373:12;;;19366:33;19418:12;;;39260:245::o;39512:416::-;39712:2;39726:47;;;19974:2;39697:18;;;48144:19;20010:34;48184:14;;;19990:55;20079:34;20065:12;;;20058:56;-1:-1;;;20134:12;;;20127:29;20175:12;;;39683:245::o;39935:416::-;40135:2;40149:47;;;20426:2;40120:18;;;48144:19;20462:34;48184:14;;;20442:55;-1:-1;;;20517:12;;;20510:42;20571:12;;;40106:245::o;40358:416::-;40558:2;40572:47;;;20822:2;40543:18;;;48144:19;20858:34;48184:14;;;20838:55;-1:-1;;;20913:12;;;20906:37;20962:12;;;40529:245::o;40781:416::-;40981:2;40995:47;;;21213:2;40966:18;;;48144:19;21249:34;48184:14;;;21229:55;-1:-1;;;21304:12;;;21297:40;21356:12;;;40952:245::o;41204:416::-;41404:2;41418:47;;;21607:2;41389:18;;;48144:19;21643:34;48184:14;;;21623:55;-1:-1;;;21698:12;;;21691:35;21745:12;;;41375:245::o;41627:416::-;41827:2;41841:47;;;21996:2;41812:18;;;48144:19;22032:34;48184:14;;;22012:55;22101:34;22087:12;;;22080:56;-1:-1;;;22156:12;;;22149:34;22202:12;;;41798:245::o;42050:416::-;42250:2;42264:47;;;22453:2;42235:18;;;48144:19;22489:34;48184:14;;;22469:55;-1:-1;;;22544:12;;;22537:41;22597:12;;;42221:245::o;42473:416::-;42673:2;42687:47;;;22848:2;42658:18;;;48144:19;22884:33;48184:14;;;22864:54;22937:12;;;42644:245::o;42896:416::-;43096:2;43110:47;;;23188:2;43081:18;;;48144:19;23224:34;48184:14;;;23204:55;-1:-1;;;23279:12;;;23272:37;23328:12;;;43067:245::o;43319:416::-;43519:2;43533:47;;;23579:2;43504:18;;;48144:19;23615:34;48184:14;;;23595:55;-1:-1;;;23670:12;;;23663:45;23727:12;;;43490:245::o;43742:416::-;43942:2;43956:47;;;23978:2;43927:18;;;48144:19;-1:-1;;;48184:14;;;23994:36;24049:12;;;43913:245::o;44394:475::-;;24166:5;24143:3;24136:37;44596:2;44714;44703:9;44699:18;44692:48;44754:105;44596:2;44585:9;44581:18;44845:6;44754:105;:::i;:::-;44746:113;44567:302;-1:-1;;;;44567:302::o;44876:714::-;;24166:5;24143:3;24136:37;45142:3;45261:2;45250:9;45246:18;45239:48;45301:105;45142:3;45131:9;45127:19;45392:6;45301:105;:::i;:::-;-1:-1;;;;;48799:54;;;;45493:2;45478:18;;5917:58;-1:-1;45576:2;45561:18;24136:37;45293:113;45113:477;-1:-1;;45113:477::o;45597:444::-;24136:37;;;45944:2;45929:18;;24136:37;;;;46027:2;46012:18;;24136:37;45780:2;45765:18;;45751:290::o;46048:256::-;46110:2;46104:9;46136:17;;;46211:18;46196:34;;46232:22;;;46193:62;46190:2;;;46268:1;;46258:12;46190:2;46110;46277:22;46088:216;;-1:-1;46088:216::o;46311:304::-;;46470:18;46462:6;46459:30;46456:2;;;-1:-1;;46492:12;46456:2;-1:-1;46537:4;46525:17;;;46590:15;;46393:222::o
Swarm Source
ipfs://cf4fbf9163d892d5f767e3bdc21f2a4fd87d8163ccaa61259c2640a46e8e72a1
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.000431 | 630.2283 | $0.2715 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.