More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,163 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Tokens | 21747796 | 72 days ago | IN | 0 ETH | 0.00019559 | ||||
Withdraw Tokens | 21747789 | 72 days ago | IN | 0 ETH | 0.00014419 | ||||
Change Fund Wall... | 21747782 | 72 days ago | IN | 0 ETH | 0.00007128 | ||||
Pause Presale | 21747778 | 72 days ago | IN | 0 ETH | 0.00011372 | ||||
Buy With Eth | 21747764 | 72 days ago | IN | 0.01 ETH | 0.00040369 | ||||
Buy With Eth | 21747722 | 72 days ago | IN | 0.02 ETH | 0.00073049 | ||||
Buy With Eth | 21747672 | 72 days ago | IN | 0.028 ETH | 0.00054072 | ||||
Buy With Eth | 21747659 | 72 days ago | IN | 0.03002 ETH | 0.00085663 | ||||
Buy With Eth | 21747641 | 72 days ago | IN | 0.025 ETH | 0.001075 | ||||
Buy With Eth | 21747633 | 72 days ago | IN | 0.16 ETH | 0.00110376 | ||||
Buy With Eth | 21747617 | 72 days ago | IN | 0.03 ETH | 0.00097108 | ||||
Buy With Eth | 21747582 | 72 days ago | IN | 0.012 ETH | 0.00091846 | ||||
Buy With Eth | 21747498 | 72 days ago | IN | 0.097 ETH | 0.00049021 | ||||
Buy With Eth | 21747435 | 72 days ago | IN | 0.15 ETH | 0.00052823 | ||||
Buy With Eth | 21747434 | 72 days ago | IN | 0.01 ETH | 0.00080264 | ||||
Buy With Eth | 21747430 | 72 days ago | IN | 0.038 ETH | 0.00077225 | ||||
Buy With USDT | 21747424 | 72 days ago | IN | 0 ETH | 0.00026662 | ||||
Buy With USDT | 21747416 | 72 days ago | IN | 0 ETH | 0.00029596 | ||||
Buy With USDT | 21747405 | 72 days ago | IN | 0 ETH | 0.00032622 | ||||
Buy With Eth | 21747398 | 72 days ago | IN | 0.028437 ETH | 0.00063814 | ||||
Buy With Eth | 21747366 | 72 days ago | IN | 0.015 ETH | 0.00064919 | ||||
Buy With Eth | 21747358 | 72 days ago | IN | 0.076 ETH | 0.00059586 | ||||
Buy With Eth | 21747327 | 72 days ago | IN | 0.3 ETH | 0.00089709 | ||||
Buy With USDT | 21747316 | 72 days ago | IN | 0 ETH | 0.0002684 | ||||
Buy With Eth | 21747309 | 72 days ago | IN | 0.177 ETH | 0.00057052 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Transfer | 21747764 | 72 days ago | 0.01 ETH | ||||
Transfer | 21747722 | 72 days ago | 0.02 ETH | ||||
Transfer | 21747672 | 72 days ago | 0.028 ETH | ||||
Transfer | 21747659 | 72 days ago | 0.03002 ETH | ||||
Transfer | 21747641 | 72 days ago | 0.025 ETH | ||||
Transfer | 21747633 | 72 days ago | 0.16 ETH | ||||
Transfer | 21747617 | 72 days ago | 0.03 ETH | ||||
Transfer | 21747582 | 72 days ago | 0.012 ETH | ||||
Transfer | 21747498 | 72 days ago | 0.097 ETH | ||||
Transfer | 21747435 | 72 days ago | 0.15 ETH | ||||
Transfer | 21747434 | 72 days ago | 0.01 ETH | ||||
Transfer | 21747430 | 72 days ago | 0.038 ETH | ||||
Transfer | 21747403 | 72 days ago | 0.061 ETH | ||||
Buy With Eth | 21747403 | 72 days ago | 0.061 ETH | ||||
Transfer | 21747398 | 72 days ago | 0.028437 ETH | ||||
Transfer | 21747366 | 72 days ago | 0.015 ETH | ||||
Transfer | 21747358 | 72 days ago | 0.076 ETH | ||||
Transfer | 21747327 | 72 days ago | 0.3 ETH | ||||
Transfer | 21747309 | 72 days ago | 0.177 ETH | ||||
Transfer | 21747300 | 72 days ago | 0.015 ETH | ||||
Transfer | 21747281 | 72 days ago | 0.03079142 ETH | ||||
Transfer | 21747279 | 72 days ago | 0.01 ETH | ||||
Transfer | 21747279 | 72 days ago | 0.05 ETH | ||||
Transfer | 21747276 | 72 days ago | 0.073 ETH | ||||
Transfer | 21747267 | 72 days ago | 0.033 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Panshibi_Presale
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "@openzeppelin/[email protected]/security/ReentrancyGuard.sol"; import "@openzeppelin/[email protected]/access/Ownable.sol"; import "@openzeppelin/[email protected]/utils/Address.sol"; import "@openzeppelin/[email protected]/interfaces/IERC20.sol"; import "@openzeppelin/[email protected]/interfaces/IERC20Metadata.sol"; interface Aggregator { function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); } contract Panshibi_Presale is ReentrancyGuard, Ownable { uint256 public overalllRaised; uint256 public presaleId; uint256 public USDT_MULTIPLIER; uint256 public ETH_MULTIPLIER; address public fundReceiver; uint256 public uniqueBuyers; struct PresaleData { uint256 startTime; uint256 endTime; uint256 price; uint256 nextStagePrice; uint256 tokensSold; uint256 tokensToSell; uint256 usdtHardcap; uint256 amountRaised; bool Active; } struct UserData { uint256 investedAmount; uint256 receivedTokenAmount; } IERC20Metadata public USDTInterface; Aggregator internal aggregatorInterface; mapping(uint256 => bool) public paused; mapping(uint256 => PresaleData) public presale; mapping(address => mapping(uint256 => UserData)) public userData; mapping(address => bool) public isExcludeMinToken; mapping(address => bool) public isBlackList; mapping(address => bool) public isExist; uint256 public minTokenTobuy; uint256 public currentSale; address public saleToken; event PresaleCreated( uint256 indexed _id, uint256 _totalTokens, uint256 _startTime, uint256 _endTime ); event PresaleUpdated( bytes32 indexed key, uint256 prevValue, uint256 newValue, uint256 timestamp ); event TokensBought( address indexed user, uint256 indexed id, address indexed purchaseToken, uint256 tokensBought, uint256 amountPaid, uint256 timestamp ); event TokensClaimed( address indexed user, uint256 indexed id, uint256 amount, uint256 timestamp ); event PresalePaused(uint256 indexed id, uint256 timestamp); event PresaleUnpaused(uint256 indexed id, uint256 timestamp); constructor( address _oracle, address _usdt, address _saleToken, address _fundReceiver, uint256 _minTokenTobuy ) { aggregatorInterface = Aggregator(_oracle); fundReceiver = _fundReceiver; saleToken = _saleToken; minTokenTobuy = _minTokenTobuy; USDTInterface = IERC20Metadata(_usdt); ETH_MULTIPLIER = (10**18); USDT_MULTIPLIER = (10**6); } function createPresale( uint256 _price, uint256 _nextStagePrice, uint256 _tokensToSell, uint256 _usdtHardcap ) external onlyOwner { require(_price > 0, "Zero price"); require(_tokensToSell > 0, "Zero tokens to sell"); presaleId++; presale[presaleId] = PresaleData( 0, 0, _price, _nextStagePrice, 0, _tokensToSell, _usdtHardcap, 0, false ); emit PresaleCreated(presaleId, _tokensToSell, 0, 0); } function setPresaleStage(uint256 _id) public onlyOwner { require(presale[_id].tokensToSell > 0, "Presale don't exist"); if (currentSale != 0) { presale[currentSale].endTime = block.timestamp; presale[currentSale].Active = false; } presale[_id].startTime = block.timestamp; presale[_id].Active = true; currentSale = _id; } function updatePresale( uint256 _id, uint256 _price, uint256 _nextStagePrice, uint256 _tokensToSell, uint256 _usdtHardcap ) external onlyOwner { require(_price > 0, "Zero price"); require(_tokensToSell > 0, "Zero tokens to sell"); require(_usdtHardcap > 0, "Zero harcap"); presale[_id].price = _price; presale[_id].nextStagePrice = _nextStagePrice; presale[_id].tokensToSell = _tokensToSell; presale[_id].usdtHardcap = _usdtHardcap; } function changeFundWallet(address _wallet) external onlyOwner { require(_wallet != address(0), "Invalid parameters"); fundReceiver = _wallet; } function changeUSDTToken(address _newAddress) external onlyOwner { require(_newAddress != address(0), "Zero token address"); USDTInterface = IERC20Metadata(_newAddress); } function pausePresale(uint256 _id) external checkPresaleId(_id) onlyOwner { require(!paused[_id], "Already paused"); paused[_id] = true; emit PresalePaused(_id, block.timestamp); } function unPausePresale(uint256 _id) external checkPresaleId(_id) onlyOwner { require(paused[_id], "Not paused"); paused[_id] = false; emit PresaleUnpaused(_id, block.timestamp); } function getLatestPrice() public view returns (uint256) { (, int256 price, , , ) = aggregatorInterface.latestRoundData(); price = (price * (10**10)); return uint256(price); } modifier checkPresaleId(uint256 _id) { require(_id > 0 && _id == currentSale, "Invalid presale id"); _; } modifier checkSaleState(uint256 _id, uint256 amount) { require(presale[_id].Active == true, "preSAle not Active"); require( amount > 0 && amount <= presale[_id].tokensToSell - presale[_id].tokensSold, "Invalid sale amount" ); _; } function ExcludeAccouctFromMinBuy(address _user, bool _status) external onlyOwner { isExcludeMinToken[_user] = _status; } function blackListUser(address _user, bool _value) public onlyOwner { isBlackList[_user] = _value; } function buyWithUSDT(uint256 usdAmount) external checkPresaleId(currentSale) checkSaleState(currentSale, usdToTokens(currentSale, usdAmount)) nonReentrant returns (bool) { require(!paused[currentSale], "Presale paused"); require( presale[currentSale].Active == true, "Presale is not active yet" ); require(!isBlackList[msg.sender], "Account is blackListed"); require( presale[currentSale].amountRaised + usdAmount <= presale[currentSale].usdtHardcap, "Amount should be less than leftHardcap" ); if (!isExist[msg.sender]) { isExist[msg.sender] = true; uniqueBuyers++; } uint256 tokens = usdToTokens(currentSale, usdAmount); presale[currentSale].tokensSold += tokens; presale[currentSale].amountRaised += usdAmount; overalllRaised += usdAmount; if (isExcludeMinToken[msg.sender] == false) { require(tokens >= minTokenTobuy, "Less than min amount"); } userData[_msgSender()][currentSale].investedAmount += usdAmount; userData[_msgSender()][currentSale].receivedTokenAmount += tokens; uint256 ourAllowance = USDTInterface.allowance( _msgSender(), address(this) ); require(usdAmount <= ourAllowance, "Make sure to add enough allowance"); (bool success, ) = address(USDTInterface).call( abi.encodeWithSignature( "transferFrom(address,address,uint256)", _msgSender(), fundReceiver, usdAmount ) ); require(success, "Token payment failed"); bool status = IERC20(saleToken).transfer( _msgSender(), tokens ); require(status, "Token transfer failed"); emit TokensBought( _msgSender(), currentSale, address(USDTInterface), tokens, usdAmount, block.timestamp ); return true; } function buyWithEth() external payable checkPresaleId(currentSale) checkSaleState(currentSale, ethToTokens(currentSale, msg.value)) nonReentrant returns (bool) { uint256 usdAmount = (msg.value * getLatestPrice() * USDT_MULTIPLIER) / (ETH_MULTIPLIER * ETH_MULTIPLIER); require( presale[currentSale].amountRaised + usdAmount <= presale[currentSale].usdtHardcap, "Amount should be less than leftHardcap" ); require(!isBlackList[msg.sender], "Account is blackListed"); require(!paused[currentSale], "Presale paused"); require( presale[currentSale].Active == true, "Presale is not active yet" ); if (!isExist[msg.sender]) { isExist[msg.sender] = true; uniqueBuyers++; } uint256 tokens = usdToTokens(currentSale, usdAmount); if (isExcludeMinToken[msg.sender] == false) { require(tokens >= minTokenTobuy, "Insufficient Amount!"); } presale[currentSale].tokensSold += tokens; presale[currentSale].amountRaised += usdAmount; overalllRaised += usdAmount; userData[_msgSender()][currentSale].investedAmount += usdAmount; userData[_msgSender()][currentSale].receivedTokenAmount += tokens; sendValue(payable(fundReceiver), msg.value); bool status = IERC20(saleToken).transfer( _msgSender(), tokens ); require(status, "Token transfer failed"); emit TokensBought( _msgSender(), currentSale, address(0), tokens, msg.value, block.timestamp ); return true; } function ethBuyHelper(uint256 _id, uint256 amount) external view returns (uint256 ethAmount) { uint256 usdPrice = (amount * presale[_id].price); ethAmount = (usdPrice * ETH_MULTIPLIER) / (getLatestPrice() * 10**IERC20Metadata(saleToken).decimals()); } function usdBuyHelper(uint256 _id, uint256 amount) external view returns (uint256 usdPrice) { usdPrice = (amount * presale[_id].price) / 10**IERC20Metadata(saleToken).decimals(); } function ethToTokens(uint256 _id, uint256 amount) public view returns (uint256 _tokens) { uint256 usdAmount = (amount * getLatestPrice() * USDT_MULTIPLIER) / (ETH_MULTIPLIER * ETH_MULTIPLIER); _tokens = usdToTokens(_id, usdAmount); } function usdToTokens(uint256 _id, uint256 amount) public view returns (uint256 _tokens) { _tokens = (amount * presale[_id].price) / USDT_MULTIPLIER; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Low balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "ETH Payment failed"); } function WithdrawTokens(address _token, uint256 amount) external onlyOwner { IERC20(_token).transfer(fundReceiver, amount); } function WithdrawContractFunds(uint256 amount) external onlyOwner { sendValue(payable(fundReceiver), amount); } function ChangeSaleToken(address _token) public onlyOwner { saleToken = _token; } function ChangeMinTokenToBuy(uint256 _amount) public onlyOwner { minTokenTobuy = _amount; } function ChangeOracleAddress(address _oracle) public onlyOwner { aggregatorInterface = Aggregator(_oracle); } function blockTimeStamp() public view returns(uint256) { return block.timestamp; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../token/ERC20/extensions/IERC20Metadata.sol";
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol) pragma solidity ^0.8.0; import "../token/ERC20/IERC20.sol";
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ 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 * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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://consensys.net/diligence/blog/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.8.0/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"); (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 functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ 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.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "remappings": [] }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_oracle","type":"address"},{"internalType":"address","name":"_usdt","type":"address"},{"internalType":"address","name":"_saleToken","type":"address"},{"internalType":"address","name":"_fundReceiver","type":"address"},{"internalType":"uint256","name":"_minTokenTobuy","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_totalTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"PresaleCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresalePaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresaleUnpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresaleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"purchaseToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ChangeMinTokenToBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"ChangeOracleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"ChangeSaleToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ETH_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludeAccouctFromMinBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"USDTInterface","outputs":[{"internalType":"contract IERC20Metadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawContractFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"blackListUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blockTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyWithEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"usdAmount","type":"uint256"}],"name":"buyWithUSDT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"changeFundWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"changeUSDTToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_nextStagePrice","type":"uint256"},{"internalType":"uint256","name":"_tokensToSell","type":"uint256"},{"internalType":"uint256","name":"_usdtHardcap","type":"uint256"}],"name":"createPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ethBuyHelper","outputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ethToTokens","outputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludeMinToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenTobuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"overalllRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"pausePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"presale","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"nextStagePrice","type":"uint256"},{"internalType":"uint256","name":"tokensSold","type":"uint256"},{"internalType":"uint256","name":"tokensToSell","type":"uint256"},{"internalType":"uint256","name":"usdtHardcap","type":"uint256"},{"internalType":"uint256","name":"amountRaised","type":"uint256"},{"internalType":"bool","name":"Active","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"setPresaleStage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"unPausePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniqueBuyers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_nextStagePrice","type":"uint256"},{"internalType":"uint256","name":"_tokensToSell","type":"uint256"},{"internalType":"uint256","name":"_usdtHardcap","type":"uint256"}],"name":"updatePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"usdBuyHelper","outputs":[{"internalType":"uint256","name":"usdPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"usdToTokens","outputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userData","outputs":[{"internalType":"uint256","name":"investedAmount","type":"uint256"},{"internalType":"uint256","name":"receivedTokenAmount","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561000f575f80fd5b50604051614626380380614626833981810160405281019061003191906102d9565b60015f8190555061005461004961017e60201b60201c565b61018560201b60201c565b8460095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806010819055508360085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a7640000600581905550620f42406004819055505050505050610350565b5f33905090565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102758261024c565b9050919050565b6102858161026b565b811461028f575f80fd5b50565b5f815190506102a08161027c565b92915050565b5f819050919050565b6102b8816102a6565b81146102c2575f80fd5b50565b5f815190506102d3816102af565b92915050565b5f805f805f60a086880312156102f2576102f1610248565b5b5f6102ff88828901610292565b955050602061031088828901610292565b945050604061032188828901610292565b935050606061033288828901610292565b9250506080610343888289016102c5565b9150509295509295909350565b6142c98061035d5f395ff3fe608060405260043610610243575f3560e01c8063715018a611610138578063b36d6919116100b5578063e18e84f911610079578063e18e84f91461087e578063e6ab1434146108a8578063e985e367146108ec578063f2fde38b14610916578063f597573f1461093e578063fb4aa0a11461096857610243565b8063b36d69191461078e578063d01608c1146107ca578063d099850a146107f2578063df5bc83b1461081a578063e0cef1b01461085657610243565b80638e15f473116100fc5780638e15f473146106ac5780639752f3cb146106d6578063a05d03fd146106fe578063a7c6016014610728578063aa1c3aa51461076457610243565b8063715018a6146105e0578063718a1962146105f65780637cde403d146106325780638561c3151461065a5780638da5cb5b1461068257610243565b80633c05eca1116101c6578063582b57231161018a578063582b57231461051457806358f985851461053c578063680f2e4f146105665780636f891f821461058e5780636fb4adff146105b857610243565b80633c05eca11461041f5780634216d6501461045c57806348bf4fcf146104985780634a6413f7146104c257806351695859146104ea57610243565b806311b5444f1161020d57806311b5444f146103375780631d5de91c146103555780631ed0c9541461037d5780632127fe04146103b957806339764363146103f557610243565b806213eb4b14610247578062dde10e1461028357806303fcd9ac146102bf5780630d07cc30146102e75780630d2d1f521461030f575b5f80fd5b348015610252575f80fd5b5061026d60048036038101906102689190612d04565b610992565b60405161027a9190612d49565b60405180910390f35b34801561028e575f80fd5b506102a960048036038101906102a49190612d95565b6109af565b6040516102b69190612d49565b60405180910390f35b3480156102ca575f80fd5b506102e560048036038101906102e09190612dea565b6109cc565b005b3480156102f2575f80fd5b5061030d60048036038101906103089190612d04565b610a2c565b005b34801561031a575f80fd5b5061033560048036038101906103309190612d04565b610a77565b005b61033f610ac2565b60405161034c9190612d49565b60405180910390f35b348015610360575f80fd5b5061037b60048036038101906103769190612d95565b611266565b005b348015610388575f80fd5b506103a3600480360381019061039e9190612d04565b611278565b6040516103b09190612d49565b60405180910390f35b3480156103c4575f80fd5b506103df60048036038101906103da9190612e28565b611295565b6040516103ec9190612e75565b60405180910390f35b348015610400575f80fd5b50610409611386565b6040516104169190612e75565b60405180910390f35b34801561042a575f80fd5b5061044560048036038101906104409190612e8e565b61138c565b604051610453929190612ecc565b60405180910390f35b348015610467575f80fd5b50610482600480360381019061047d9190612e28565b6113b7565b60405161048f9190612e75565b60405180910390f35b3480156104a3575f80fd5b506104ac6113ed565b6040516104b99190612e75565b60405180910390f35b3480156104cd575f80fd5b506104e860048036038101906104e39190612d95565b6113f3565b005b3480156104f5575f80fd5b506104fe61150e565b60405161050b9190612e75565b60405180910390f35b34801561051f575f80fd5b5061053a60048036038101906105359190612d95565b611514565b005b348015610547575f80fd5b5061055061154a565b60405161055d9190612e75565b60405180910390f35b348015610571575f80fd5b5061058c60048036038101906105879190612e8e565b611550565b005b348015610599575f80fd5b506105a26115f9565b6040516105af9190612e75565b60405180910390f35b3480156105c3575f80fd5b506105de60048036038101906105d99190612d04565b611600565b005b3480156105eb575f80fd5b506105f46116b9565b005b348015610601575f80fd5b5061061c60048036038101906106179190612e28565b6116cc565b6040516106299190612e75565b60405180910390f35b34801561063d575f80fd5b5061065860048036038101906106539190612d95565b61171d565b005b348015610665575f80fd5b50610680600480360381019061067b9190612d04565b61181b565b005b34801561068d575f80fd5b506106966118d4565b6040516106a39190612f02565b60405180910390f35b3480156106b7575f80fd5b506106c06118fc565b6040516106cd9190612e75565b60405180910390f35b3480156106e1575f80fd5b506106fc60048036038101906106f79190612f1b565b6119ac565b005b348015610709575f80fd5b50610712611ae5565b60405161071f9190612e75565b60405180910390f35b348015610733575f80fd5b5061074e60048036038101906107499190612d95565b611aeb565b60405161075b9190612d49565b60405180910390f35b34801561076f575f80fd5b506107786124b5565b6040516107859190612e75565b60405180910390f35b348015610799575f80fd5b506107b460048036038101906107af9190612d04565b6124bb565b6040516107c19190612d49565b60405180910390f35b3480156107d5575f80fd5b506107f060048036038101906107eb9190612d95565b6124d8565b005b3480156107fd575f80fd5b5061081860048036038101906108139190612f92565b6125f1565b005b348015610825575f80fd5b50610840600480360381019061083b9190612e28565b61279e565b60405161084d9190612e75565b60405180910390f35b348015610861575f80fd5b5061087c60048036038101906108779190612dea565b61286b565b005b348015610889575f80fd5b506108926128cb565b60405161089f9190612e75565b60405180910390f35b3480156108b3575f80fd5b506108ce60048036038101906108c99190612d95565b6128d1565b6040516108e399989796959493929190612ff6565b60405180910390f35b3480156108f7575f80fd5b50610900612927565b60405161090d9190612f02565b60405180910390f35b348015610921575f80fd5b5061093c60048036038101906109379190612d04565b61294c565b005b348015610949575f80fd5b506109526129ce565b60405161095f91906130dc565b60405180910390f35b348015610973575f80fd5b5061097c6129f3565b6040516109899190612f02565b60405180910390f35b600f602052805f5260405f205f915054906101000a900460ff1681565b600a602052805f5260405f205f915054906101000a900460ff1681565b6109d4612a18565b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b610a34612a18565b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610a7f612a18565b8060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f6011545f81118015610ad6575060115481145b610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c9061314f565b60405180910390fd5b601154610b24601154346116cc565b60011515600b5f8481526020019081526020015f206008015f9054906101000a900460ff16151514610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b82906131b7565b60405180910390fd5b5f81118015610bcd5750600b5f8381526020019081526020015f2060040154600b5f8481526020019081526020015f2060050154610bc99190613202565b8111155b610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c039061327f565b60405180910390fd5b610c14612a96565b5f600554600554610c25919061329d565b600454610c306118fc565b34610c3b919061329d565b610c45919061329d565b610c4f919061330b565b9050600b5f60115481526020019081526020015f206006015481600b5f60115481526020019081526020015f2060070154610c8a919061333b565b1115610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc2906133de565b60405180910390fd5b600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90613446565b60405180910390fd5b600a5f60115481526020019081526020015f205f9054906101000a900460ff1615610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac906134ae565b60405180910390fd5b60011515600b5f60115481526020019081526020015f206008015f9054906101000a900460ff16151514610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590613516565b60405180910390fd5b600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610ed9576001600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060075f815480929190610ed390613534565b91905055505b5f610ee6601154836113b7565b90505f1515600d5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610f8257601054811015610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f78906135c5565b60405180910390fd5b5b80600b5f60115481526020019081526020015f206004015f828254610fa7919061333b565b9250508190555081600b5f60115481526020019081526020015f206007015f828254610fd3919061333b565b925050819055508160025f828254610feb919061333b565b9250508190555081600c5f610ffe612ae3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60115481526020019081526020015f205f015f828254611058919061333b565b9250508190555080600c5f61106b612ae3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60115481526020019081526020015f206001015f8282546110c6919061333b565b925050819055506110f860065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634612aea565b5f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61113e612ae3565b846040518363ffffffff1660e01b815260040161115c9291906135e3565b6020604051808303815f875af1158015611178573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061119c919061361e565b9050806111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590613693565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16601154611200612ae3565b73ffffffffffffffffffffffffffffffffffffffff167f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d36853442604051611249939291906136b1565b60405180910390a460019650505050611260612bda565b50505090565b61126e612a18565b8060108190555050565b600d602052805f5260405f205f915054906101000a900460ff1681565b5f80600b5f8581526020019081526020015f2060020154836112b7919061329d565b905060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611323573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611347919061371c565b600a6113539190613876565b61135b6118fc565b611365919061329d565b60055482611373919061329d565b61137d919061330b565b91505092915050565b60055481565b600c602052815f5260405f20602052805f5260405f205f9150915050805f0154908060010154905082565b5f600454600b5f8581526020019081526020015f2060020154836113db919061329d565b6113e5919061330b565b905092915050565b60045481565b805f81118015611404575060115481145b611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a9061314f565b60405180910390fd5b61144b612a18565b600a5f8381526020019081526020015f205f9054906101000a900460ff16156114a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a09061390a565b60405180910390fd5b6001600a5f8481526020019081526020015f205f6101000a81548160ff021916908315150217905550817f927e6cd2dce24f32508868820cdc35f09d9de0f4b44e945114110125196fba9f426040516115029190612e75565b60405180910390a25050565b60105481565b61151c612a18565b61154760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612aea565b50565b60025481565b611558612a18565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016115b49291906135e3565b6020604051808303815f875af11580156115d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f4919061361e565b505050565b5f42905090565b611608612a18565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d90613972565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116c1612a18565b6116ca5f612be3565b565b5f806005546005546116de919061329d565b6004546116e96118fc565b856116f4919061329d565b6116fe919061329d565b611708919061330b565b905061171484826113b7565b91505092915050565b611725612a18565b5f600b5f8381526020019081526020015f20600501541161177b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611772906139da565b60405180910390fd5b5f601154146117cd5742600b5f60115481526020019081526020015f20600101819055505f600b5f60115481526020019081526020015f206008015f6101000a81548160ff0219169083151502179055505b42600b5f8381526020019081526020015f205f01819055506001600b5f8381526020019081526020015f206008015f6101000a81548160ff0219169083151502179055508060118190555050565b611823612a18565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188890613a42565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f8060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611968573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061198c9190613ae6565b5050509150506402540be400816119a39190613b5d565b90508091505090565b6119b4612a18565b5f84116119f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ed90613c1d565b60405180910390fd5b5f8211611a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2f90613c85565b60405180910390fd5b5f8111611a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7190613ced565b60405180910390fd5b83600b5f8781526020019081526020015f206002018190555082600b5f8781526020019081526020015f206003018190555081600b5f8781526020019081526020015f206005018190555080600b5f8781526020019081526020015f20600601819055505050505050565b60115481565b5f6011545f81118015611aff575060115481145b611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b359061314f565b60405180910390fd5b601154611b4d601154856113b7565b60011515600b5f8481526020019081526020015f206008015f9054906101000a900460ff16151514611bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bab906131b7565b60405180910390fd5b5f81118015611bf65750600b5f8381526020019081526020015f2060040154600b5f8481526020019081526020015f2060050154611bf29190613202565b8111155b611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c9061327f565b60405180910390fd5b611c3d612a96565b600a5f60115481526020019081526020015f205f9054906101000a900460ff1615611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c94906134ae565b60405180910390fd5b60011515600b5f60115481526020019081526020015f206008015f9054906101000a900460ff16151514611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd90613516565b60405180910390fd5b600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8790613446565b60405180910390fd5b600b5f60115481526020019081526020015f206006015485600b5f60115481526020019081526020015f2060070154611dc9919061333b565b1115611e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e01906133de565b60405180910390fd5b600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611ec5576001600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060075f815480929190611ebf90613534565b91905055505b5f611ed2601154876113b7565b905080600b5f60115481526020019081526020015f206004015f828254611ef9919061333b565b9250508190555085600b5f60115481526020019081526020015f206007015f828254611f25919061333b565b925050819055508560025f828254611f3d919061333b565b925050819055505f1515600d5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611fde57601054811015611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490613d55565b60405180910390fd5b5b85600c5f611fea612ae3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60115481526020019081526020015f205f015f828254612044919061333b565b9250508190555080600c5f612057612ae3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60115481526020019081526020015f206001015f8282546120b2919061333b565b925050819055505f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e6120ff612ae3565b306040518363ffffffff1660e01b815260040161211d929190613d73565b602060405180830381865afa158015612138573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061215c9190613d9a565b9050808711156121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219890613e35565b60405180910390fd5b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166121e2612ae3565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168a60405160240161221793929190613e53565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516122a19190613eda565b5f604051808303815f865af19150503d805f81146122da576040519150601f19603f3d011682016040523d82523d5f602084013e6122df565b606091505b5050905080612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231a90613f3a565b60405180910390fd5b5f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612369612ae3565b866040518363ffffffff1660e01b81526004016123879291906135e3565b6020604051808303815f875af11580156123a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123c7919061361e565b905080612409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240090613693565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660115461244c612ae3565b73ffffffffffffffffffffffffffffffffffffffff167f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d36878d42604051612495939291906136b1565b60405180910390a460019750505050506124ad612bda565b505050919050565b60075481565b600e602052805f5260405f205f915054906101000a900460ff1681565b805f811180156124e9575060115481145b612528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251f9061314f565b60405180910390fd5b612530612a18565b600a5f8381526020019081526020015f205f9054906101000a900460ff1661258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490613fa2565b60405180910390fd5b5f600a5f8481526020019081526020015f205f6101000a81548160ff021916908315150217905550817ff608654a6d8e1785594639dd55babb61d7ae157382015f904a24224e50333b1d426040516125e59190612e75565b60405180910390a25050565b6125f9612a18565b5f841161263b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263290613c1d565b60405180910390fd5b5f821161267d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267490613c85565b60405180910390fd5b60035f81548092919061268f90613534565b91905055506040518061012001604052805f81526020015f81526020018581526020018481526020015f81526020018381526020018281526020015f81526020015f1515815250600b5f60035481526020019081526020015f205f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070155610100820151816008015f6101000a81548160ff0219169083151502179055509050506003547f6a00651728a92841411081673eaa4eddbed06d102a590e050c22def40d4dd0b8835f8060405161279093929190613ff9565b60405180910390a250505050565b5f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612809573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061282d919061371c565b600a6128399190613876565b600b5f8581526020019081526020015f206002015483612859919061329d565b612863919061330b565b905092915050565b612873612a18565b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60035481565b600b602052805f5260405f205f91509050805f015490806001015490806002015490806003015490806004015490806005015490806006015490806007015490806008015f9054906101000a900460ff16905089565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612954612a18565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b99061409e565b60405180910390fd5b6129cb81612be3565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612a20612ae3565b73ffffffffffffffffffffffffffffffffffffffff16612a3e6118d4565b73ffffffffffffffffffffffffffffffffffffffff1614612a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8b90614106565b60405180910390fd5b565b60025f5403612ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad19061416e565b60405180910390fd5b60025f81905550565b5f33905090565b80471015612b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b24906141d6565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff1682604051612b5290614217565b5f6040518083038185875af1925050503d805f8114612b8c576040519150601f19603f3d011682016040523d82523d5f602084013e612b91565b606091505b5050905080612bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcc90614275565b60405180910390fd5b505050565b60015f81905550565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612cd382612caa565b9050919050565b612ce381612cc9565b8114612ced575f80fd5b50565b5f81359050612cfe81612cda565b92915050565b5f60208284031215612d1957612d18612ca6565b5b5f612d2684828501612cf0565b91505092915050565b5f8115159050919050565b612d4381612d2f565b82525050565b5f602082019050612d5c5f830184612d3a565b92915050565b5f819050919050565b612d7481612d62565b8114612d7e575f80fd5b50565b5f81359050612d8f81612d6b565b92915050565b5f60208284031215612daa57612da9612ca6565b5b5f612db784828501612d81565b91505092915050565b612dc981612d2f565b8114612dd3575f80fd5b50565b5f81359050612de481612dc0565b92915050565b5f8060408385031215612e0057612dff612ca6565b5b5f612e0d85828601612cf0565b9250506020612e1e85828601612dd6565b9150509250929050565b5f8060408385031215612e3e57612e3d612ca6565b5b5f612e4b85828601612d81565b9250506020612e5c85828601612d81565b9150509250929050565b612e6f81612d62565b82525050565b5f602082019050612e885f830184612e66565b92915050565b5f8060408385031215612ea457612ea3612ca6565b5b5f612eb185828601612cf0565b9250506020612ec285828601612d81565b9150509250929050565b5f604082019050612edf5f830185612e66565b612eec6020830184612e66565b9392505050565b612efc81612cc9565b82525050565b5f602082019050612f155f830184612ef3565b92915050565b5f805f805f60a08688031215612f3457612f33612ca6565b5b5f612f4188828901612d81565b9550506020612f5288828901612d81565b9450506040612f6388828901612d81565b9350506060612f7488828901612d81565b9250506080612f8588828901612d81565b9150509295509295909350565b5f805f8060808587031215612faa57612fa9612ca6565b5b5f612fb787828801612d81565b9450506020612fc887828801612d81565b9350506040612fd987828801612d81565b9250506060612fea87828801612d81565b91505092959194509250565b5f6101208201905061300a5f83018c612e66565b613017602083018b612e66565b613024604083018a612e66565b6130316060830189612e66565b61303e6080830188612e66565b61304b60a0830187612e66565b61305860c0830186612e66565b61306560e0830185612e66565b613073610100830184612d3a565b9a9950505050505050505050565b5f819050919050565b5f6130a461309f61309a84612caa565b613081565b612caa565b9050919050565b5f6130b58261308a565b9050919050565b5f6130c6826130ab565b9050919050565b6130d6816130bc565b82525050565b5f6020820190506130ef5f8301846130cd565b92915050565b5f82825260208201905092915050565b7f496e76616c69642070726573616c6520696400000000000000000000000000005f82015250565b5f6131396012836130f5565b915061314482613105565b602082019050919050565b5f6020820190508181035f8301526131668161312d565b9050919050565b7f70726553416c65206e6f742041637469766500000000000000000000000000005f82015250565b5f6131a16012836130f5565b91506131ac8261316d565b602082019050919050565b5f6020820190508181035f8301526131ce81613195565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61320c82612d62565b915061321783612d62565b925082820390508181111561322f5761322e6131d5565b5b92915050565b7f496e76616c69642073616c6520616d6f756e74000000000000000000000000005f82015250565b5f6132696013836130f5565b915061327482613235565b602082019050919050565b5f6020820190508181035f8301526132968161325d565b9050919050565b5f6132a782612d62565b91506132b283612d62565b92508282026132c081612d62565b915082820484148315176132d7576132d66131d5565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61331582612d62565b915061332083612d62565b9250826133305761332f6132de565b5b828204905092915050565b5f61334582612d62565b915061335083612d62565b9250828201905080821115613368576133676131d5565b5b92915050565b7f416d6f756e742073686f756c64206265206c657373207468616e206c656674485f8201527f6172646361700000000000000000000000000000000000000000000000000000602082015250565b5f6133c86026836130f5565b91506133d38261336e565b604082019050919050565b5f6020820190508181035f8301526133f5816133bc565b9050919050565b7f4163636f756e7420697320626c61636b4c6973746564000000000000000000005f82015250565b5f6134306016836130f5565b915061343b826133fc565b602082019050919050565b5f6020820190508181035f83015261345d81613424565b9050919050565b7f50726573616c65207061757365640000000000000000000000000000000000005f82015250565b5f613498600e836130f5565b91506134a382613464565b602082019050919050565b5f6020820190508181035f8301526134c58161348c565b9050919050565b7f50726573616c65206973206e6f742061637469766520796574000000000000005f82015250565b5f6135006019836130f5565b915061350b826134cc565b602082019050919050565b5f6020820190508181035f83015261352d816134f4565b9050919050565b5f61353e82612d62565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135705761356f6131d5565b5b600182019050919050565b7f496e73756666696369656e7420416d6f756e74210000000000000000000000005f82015250565b5f6135af6014836130f5565b91506135ba8261357b565b602082019050919050565b5f6020820190508181035f8301526135dc816135a3565b9050919050565b5f6040820190506135f65f830185612ef3565b6136036020830184612e66565b9392505050565b5f8151905061361881612dc0565b92915050565b5f6020828403121561363357613632612ca6565b5b5f6136408482850161360a565b91505092915050565b7f546f6b656e207472616e73666572206661696c656400000000000000000000005f82015250565b5f61367d6015836130f5565b915061368882613649565b602082019050919050565b5f6020820190508181035f8301526136aa81613671565b9050919050565b5f6060820190506136c45f830186612e66565b6136d16020830185612e66565b6136de6040830184612e66565b949350505050565b5f60ff82169050919050565b6136fb816136e6565b8114613705575f80fd5b50565b5f81519050613716816136f2565b92915050565b5f6020828403121561373157613730612ca6565b5b5f61373e84828501613708565b91505092915050565b5f8160011c9050919050565b5f808291508390505b600185111561379c57808604811115613778576137776131d5565b5b60018516156137875780820291505b808102905061379585613747565b945061375c565b94509492505050565b5f826137b4576001905061386f565b816137c1575f905061386f565b81600181146137d757600281146137e157613810565b600191505061386f565b60ff8411156137f3576137f26131d5565b5b8360020a91508482111561380a576138096131d5565b5b5061386f565b5060208310610133831016604e8410600b84101617156138455782820a9050838111156138405761383f6131d5565b5b61386f565b6138528484846001613753565b92509050818404811115613869576138686131d5565b5b81810290505b9392505050565b5f61388082612d62565b915061388b836136e6565b92506138b87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846137a5565b905092915050565b7f416c7265616479207061757365640000000000000000000000000000000000005f82015250565b5f6138f4600e836130f5565b91506138ff826138c0565b602082019050919050565b5f6020820190508181035f830152613921816138e8565b9050919050565b7f496e76616c696420706172616d657465727300000000000000000000000000005f82015250565b5f61395c6012836130f5565b915061396782613928565b602082019050919050565b5f6020820190508181035f83015261398981613950565b9050919050565b7f50726573616c6520646f6e2774206578697374000000000000000000000000005f82015250565b5f6139c46013836130f5565b91506139cf82613990565b602082019050919050565b5f6020820190508181035f8301526139f1816139b8565b9050919050565b7f5a65726f20746f6b656e206164647265737300000000000000000000000000005f82015250565b5f613a2c6012836130f5565b9150613a37826139f8565b602082019050919050565b5f6020820190508181035f830152613a5981613a20565b9050919050565b5f69ffffffffffffffffffff82169050919050565b613a7e81613a60565b8114613a88575f80fd5b50565b5f81519050613a9981613a75565b92915050565b5f819050919050565b613ab181613a9f565b8114613abb575f80fd5b50565b5f81519050613acc81613aa8565b92915050565b5f81519050613ae081612d6b565b92915050565b5f805f805f60a08688031215613aff57613afe612ca6565b5b5f613b0c88828901613a8b565b9550506020613b1d88828901613abe565b9450506040613b2e88828901613ad2565b9350506060613b3f88828901613ad2565b9250506080613b5088828901613a8b565b9150509295509295909350565b5f613b6782613a9f565b9150613b7283613a9f565b9250828202613b8081613a9f565b91507f800000000000000000000000000000000000000000000000000000000000000084145f84121615613bb757613bb66131d5565b5b8282058414831517613bcc57613bcb6131d5565b5b5092915050565b7f5a65726f207072696365000000000000000000000000000000000000000000005f82015250565b5f613c07600a836130f5565b9150613c1282613bd3565b602082019050919050565b5f6020820190508181035f830152613c3481613bfb565b9050919050565b7f5a65726f20746f6b656e7320746f2073656c6c000000000000000000000000005f82015250565b5f613c6f6013836130f5565b9150613c7a82613c3b565b602082019050919050565b5f6020820190508181035f830152613c9c81613c63565b9050919050565b7f5a65726f206861726361700000000000000000000000000000000000000000005f82015250565b5f613cd7600b836130f5565b9150613ce282613ca3565b602082019050919050565b5f6020820190508181035f830152613d0481613ccb565b9050919050565b7f4c657373207468616e206d696e20616d6f756e740000000000000000000000005f82015250565b5f613d3f6014836130f5565b9150613d4a82613d0b565b602082019050919050565b5f6020820190508181035f830152613d6c81613d33565b9050919050565b5f604082019050613d865f830185612ef3565b613d936020830184612ef3565b9392505050565b5f60208284031215613daf57613dae612ca6565b5b5f613dbc84828501613ad2565b91505092915050565b7f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e635f8201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e1f6021836130f5565b9150613e2a82613dc5565b604082019050919050565b5f6020820190508181035f830152613e4c81613e13565b9050919050565b5f606082019050613e665f830186612ef3565b613e736020830185612ef3565b613e806040830184612e66565b949350505050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f613eb482613e88565b613ebe8185613e92565b9350613ece818560208601613e9c565b80840191505092915050565b5f613ee58284613eaa565b915081905092915050565b7f546f6b656e207061796d656e74206661696c65640000000000000000000000005f82015250565b5f613f246014836130f5565b9150613f2f82613ef0565b602082019050919050565b5f6020820190508181035f830152613f5181613f18565b9050919050565b7f4e6f7420706175736564000000000000000000000000000000000000000000005f82015250565b5f613f8c600a836130f5565b9150613f9782613f58565b602082019050919050565b5f6020820190508181035f830152613fb981613f80565b9050919050565b5f819050919050565b5f613fe3613fde613fd984613fc0565b613081565b612d62565b9050919050565b613ff381613fc9565b82525050565b5f60608201905061400c5f830186612e66565b6140196020830185613fea565b6140266040830184613fea565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6140886026836130f5565b91506140938261402e565b604082019050919050565b5f6020820190508181035f8301526140b58161407c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6140f06020836130f5565b91506140fb826140bc565b602082019050919050565b5f6020820190508181035f83015261411d816140e4565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f614158601f836130f5565b915061416382614124565b602082019050919050565b5f6020820190508181035f8301526141858161414c565b9050919050565b7f4c6f772062616c616e63650000000000000000000000000000000000000000005f82015250565b5f6141c0600b836130f5565b91506141cb8261418c565b602082019050919050565b5f6020820190508181035f8301526141ed816141b4565b9050919050565b50565b5f6142025f83613e92565b915061420d826141f4565b5f82019050919050565b5f614221826141f7565b9150819050919050565b7f455448205061796d656e74206661696c656400000000000000000000000000005f82015250565b5f61425f6012836130f5565b915061426a8261422b565b602082019050919050565b5f6020820190508181035f83015261428c81614253565b905091905056fea2646970667358221220736ebf0c55f86da46dfc0a7efedf7273612928dca6fc626818cc4b13c2e3cc0564736f6c634300081a00330000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000ebc2c701bca0c26767e9dcadeb0bfdd9932692180000000000000000000000004c4052007ccea0e62b8faa818019f817296f53540000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode
0x608060405260043610610243575f3560e01c8063715018a611610138578063b36d6919116100b5578063e18e84f911610079578063e18e84f91461087e578063e6ab1434146108a8578063e985e367146108ec578063f2fde38b14610916578063f597573f1461093e578063fb4aa0a11461096857610243565b8063b36d69191461078e578063d01608c1146107ca578063d099850a146107f2578063df5bc83b1461081a578063e0cef1b01461085657610243565b80638e15f473116100fc5780638e15f473146106ac5780639752f3cb146106d6578063a05d03fd146106fe578063a7c6016014610728578063aa1c3aa51461076457610243565b8063715018a6146105e0578063718a1962146105f65780637cde403d146106325780638561c3151461065a5780638da5cb5b1461068257610243565b80633c05eca1116101c6578063582b57231161018a578063582b57231461051457806358f985851461053c578063680f2e4f146105665780636f891f821461058e5780636fb4adff146105b857610243565b80633c05eca11461041f5780634216d6501461045c57806348bf4fcf146104985780634a6413f7146104c257806351695859146104ea57610243565b806311b5444f1161020d57806311b5444f146103375780631d5de91c146103555780631ed0c9541461037d5780632127fe04146103b957806339764363146103f557610243565b806213eb4b14610247578062dde10e1461028357806303fcd9ac146102bf5780630d07cc30146102e75780630d2d1f521461030f575b5f80fd5b348015610252575f80fd5b5061026d60048036038101906102689190612d04565b610992565b60405161027a9190612d49565b60405180910390f35b34801561028e575f80fd5b506102a960048036038101906102a49190612d95565b6109af565b6040516102b69190612d49565b60405180910390f35b3480156102ca575f80fd5b506102e560048036038101906102e09190612dea565b6109cc565b005b3480156102f2575f80fd5b5061030d60048036038101906103089190612d04565b610a2c565b005b34801561031a575f80fd5b5061033560048036038101906103309190612d04565b610a77565b005b61033f610ac2565b60405161034c9190612d49565b60405180910390f35b348015610360575f80fd5b5061037b60048036038101906103769190612d95565b611266565b005b348015610388575f80fd5b506103a3600480360381019061039e9190612d04565b611278565b6040516103b09190612d49565b60405180910390f35b3480156103c4575f80fd5b506103df60048036038101906103da9190612e28565b611295565b6040516103ec9190612e75565b60405180910390f35b348015610400575f80fd5b50610409611386565b6040516104169190612e75565b60405180910390f35b34801561042a575f80fd5b5061044560048036038101906104409190612e8e565b61138c565b604051610453929190612ecc565b60405180910390f35b348015610467575f80fd5b50610482600480360381019061047d9190612e28565b6113b7565b60405161048f9190612e75565b60405180910390f35b3480156104a3575f80fd5b506104ac6113ed565b6040516104b99190612e75565b60405180910390f35b3480156104cd575f80fd5b506104e860048036038101906104e39190612d95565b6113f3565b005b3480156104f5575f80fd5b506104fe61150e565b60405161050b9190612e75565b60405180910390f35b34801561051f575f80fd5b5061053a60048036038101906105359190612d95565b611514565b005b348015610547575f80fd5b5061055061154a565b60405161055d9190612e75565b60405180910390f35b348015610571575f80fd5b5061058c60048036038101906105879190612e8e565b611550565b005b348015610599575f80fd5b506105a26115f9565b6040516105af9190612e75565b60405180910390f35b3480156105c3575f80fd5b506105de60048036038101906105d99190612d04565b611600565b005b3480156105eb575f80fd5b506105f46116b9565b005b348015610601575f80fd5b5061061c60048036038101906106179190612e28565b6116cc565b6040516106299190612e75565b60405180910390f35b34801561063d575f80fd5b5061065860048036038101906106539190612d95565b61171d565b005b348015610665575f80fd5b50610680600480360381019061067b9190612d04565b61181b565b005b34801561068d575f80fd5b506106966118d4565b6040516106a39190612f02565b60405180910390f35b3480156106b7575f80fd5b506106c06118fc565b6040516106cd9190612e75565b60405180910390f35b3480156106e1575f80fd5b506106fc60048036038101906106f79190612f1b565b6119ac565b005b348015610709575f80fd5b50610712611ae5565b60405161071f9190612e75565b60405180910390f35b348015610733575f80fd5b5061074e60048036038101906107499190612d95565b611aeb565b60405161075b9190612d49565b60405180910390f35b34801561076f575f80fd5b506107786124b5565b6040516107859190612e75565b60405180910390f35b348015610799575f80fd5b506107b460048036038101906107af9190612d04565b6124bb565b6040516107c19190612d49565b60405180910390f35b3480156107d5575f80fd5b506107f060048036038101906107eb9190612d95565b6124d8565b005b3480156107fd575f80fd5b5061081860048036038101906108139190612f92565b6125f1565b005b348015610825575f80fd5b50610840600480360381019061083b9190612e28565b61279e565b60405161084d9190612e75565b60405180910390f35b348015610861575f80fd5b5061087c60048036038101906108779190612dea565b61286b565b005b348015610889575f80fd5b506108926128cb565b60405161089f9190612e75565b60405180910390f35b3480156108b3575f80fd5b506108ce60048036038101906108c99190612d95565b6128d1565b6040516108e399989796959493929190612ff6565b60405180910390f35b3480156108f7575f80fd5b50610900612927565b60405161090d9190612f02565b60405180910390f35b348015610921575f80fd5b5061093c60048036038101906109379190612d04565b61294c565b005b348015610949575f80fd5b506109526129ce565b60405161095f91906130dc565b60405180910390f35b348015610973575f80fd5b5061097c6129f3565b6040516109899190612f02565b60405180910390f35b600f602052805f5260405f205f915054906101000a900460ff1681565b600a602052805f5260405f205f915054906101000a900460ff1681565b6109d4612a18565b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b610a34612a18565b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610a7f612a18565b8060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f6011545f81118015610ad6575060115481145b610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c9061314f565b60405180910390fd5b601154610b24601154346116cc565b60011515600b5f8481526020019081526020015f206008015f9054906101000a900460ff16151514610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b82906131b7565b60405180910390fd5b5f81118015610bcd5750600b5f8381526020019081526020015f2060040154600b5f8481526020019081526020015f2060050154610bc99190613202565b8111155b610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c039061327f565b60405180910390fd5b610c14612a96565b5f600554600554610c25919061329d565b600454610c306118fc565b34610c3b919061329d565b610c45919061329d565b610c4f919061330b565b9050600b5f60115481526020019081526020015f206006015481600b5f60115481526020019081526020015f2060070154610c8a919061333b565b1115610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc2906133de565b60405180910390fd5b600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90613446565b60405180910390fd5b600a5f60115481526020019081526020015f205f9054906101000a900460ff1615610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac906134ae565b60405180910390fd5b60011515600b5f60115481526020019081526020015f206008015f9054906101000a900460ff16151514610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590613516565b60405180910390fd5b600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610ed9576001600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060075f815480929190610ed390613534565b91905055505b5f610ee6601154836113b7565b90505f1515600d5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610f8257601054811015610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f78906135c5565b60405180910390fd5b5b80600b5f60115481526020019081526020015f206004015f828254610fa7919061333b565b9250508190555081600b5f60115481526020019081526020015f206007015f828254610fd3919061333b565b925050819055508160025f828254610feb919061333b565b9250508190555081600c5f610ffe612ae3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60115481526020019081526020015f205f015f828254611058919061333b565b9250508190555080600c5f61106b612ae3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60115481526020019081526020015f206001015f8282546110c6919061333b565b925050819055506110f860065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634612aea565b5f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61113e612ae3565b846040518363ffffffff1660e01b815260040161115c9291906135e3565b6020604051808303815f875af1158015611178573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061119c919061361e565b9050806111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590613693565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16601154611200612ae3565b73ffffffffffffffffffffffffffffffffffffffff167f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d36853442604051611249939291906136b1565b60405180910390a460019650505050611260612bda565b50505090565b61126e612a18565b8060108190555050565b600d602052805f5260405f205f915054906101000a900460ff1681565b5f80600b5f8581526020019081526020015f2060020154836112b7919061329d565b905060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611323573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611347919061371c565b600a6113539190613876565b61135b6118fc565b611365919061329d565b60055482611373919061329d565b61137d919061330b565b91505092915050565b60055481565b600c602052815f5260405f20602052805f5260405f205f9150915050805f0154908060010154905082565b5f600454600b5f8581526020019081526020015f2060020154836113db919061329d565b6113e5919061330b565b905092915050565b60045481565b805f81118015611404575060115481145b611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a9061314f565b60405180910390fd5b61144b612a18565b600a5f8381526020019081526020015f205f9054906101000a900460ff16156114a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a09061390a565b60405180910390fd5b6001600a5f8481526020019081526020015f205f6101000a81548160ff021916908315150217905550817f927e6cd2dce24f32508868820cdc35f09d9de0f4b44e945114110125196fba9f426040516115029190612e75565b60405180910390a25050565b60105481565b61151c612a18565b61154760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612aea565b50565b60025481565b611558612a18565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016115b49291906135e3565b6020604051808303815f875af11580156115d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f4919061361e565b505050565b5f42905090565b611608612a18565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d90613972565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116c1612a18565b6116ca5f612be3565b565b5f806005546005546116de919061329d565b6004546116e96118fc565b856116f4919061329d565b6116fe919061329d565b611708919061330b565b905061171484826113b7565b91505092915050565b611725612a18565b5f600b5f8381526020019081526020015f20600501541161177b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611772906139da565b60405180910390fd5b5f601154146117cd5742600b5f60115481526020019081526020015f20600101819055505f600b5f60115481526020019081526020015f206008015f6101000a81548160ff0219169083151502179055505b42600b5f8381526020019081526020015f205f01819055506001600b5f8381526020019081526020015f206008015f6101000a81548160ff0219169083151502179055508060118190555050565b611823612a18565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188890613a42565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f8060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611968573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061198c9190613ae6565b5050509150506402540be400816119a39190613b5d565b90508091505090565b6119b4612a18565b5f84116119f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ed90613c1d565b60405180910390fd5b5f8211611a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2f90613c85565b60405180910390fd5b5f8111611a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7190613ced565b60405180910390fd5b83600b5f8781526020019081526020015f206002018190555082600b5f8781526020019081526020015f206003018190555081600b5f8781526020019081526020015f206005018190555080600b5f8781526020019081526020015f20600601819055505050505050565b60115481565b5f6011545f81118015611aff575060115481145b611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b359061314f565b60405180910390fd5b601154611b4d601154856113b7565b60011515600b5f8481526020019081526020015f206008015f9054906101000a900460ff16151514611bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bab906131b7565b60405180910390fd5b5f81118015611bf65750600b5f8381526020019081526020015f2060040154600b5f8481526020019081526020015f2060050154611bf29190613202565b8111155b611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c9061327f565b60405180910390fd5b611c3d612a96565b600a5f60115481526020019081526020015f205f9054906101000a900460ff1615611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c94906134ae565b60405180910390fd5b60011515600b5f60115481526020019081526020015f206008015f9054906101000a900460ff16151514611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd90613516565b60405180910390fd5b600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8790613446565b60405180910390fd5b600b5f60115481526020019081526020015f206006015485600b5f60115481526020019081526020015f2060070154611dc9919061333b565b1115611e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e01906133de565b60405180910390fd5b600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611ec5576001600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060075f815480929190611ebf90613534565b91905055505b5f611ed2601154876113b7565b905080600b5f60115481526020019081526020015f206004015f828254611ef9919061333b565b9250508190555085600b5f60115481526020019081526020015f206007015f828254611f25919061333b565b925050819055508560025f828254611f3d919061333b565b925050819055505f1515600d5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611fde57601054811015611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490613d55565b60405180910390fd5b5b85600c5f611fea612ae3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60115481526020019081526020015f205f015f828254612044919061333b565b9250508190555080600c5f612057612ae3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60115481526020019081526020015f206001015f8282546120b2919061333b565b925050819055505f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e6120ff612ae3565b306040518363ffffffff1660e01b815260040161211d929190613d73565b602060405180830381865afa158015612138573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061215c9190613d9a565b9050808711156121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219890613e35565b60405180910390fd5b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166121e2612ae3565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168a60405160240161221793929190613e53565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516122a19190613eda565b5f604051808303815f865af19150503d805f81146122da576040519150601f19603f3d011682016040523d82523d5f602084013e6122df565b606091505b5050905080612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231a90613f3a565b60405180910390fd5b5f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612369612ae3565b866040518363ffffffff1660e01b81526004016123879291906135e3565b6020604051808303815f875af11580156123a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123c7919061361e565b905080612409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240090613693565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660115461244c612ae3565b73ffffffffffffffffffffffffffffffffffffffff167f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d36878d42604051612495939291906136b1565b60405180910390a460019750505050506124ad612bda565b505050919050565b60075481565b600e602052805f5260405f205f915054906101000a900460ff1681565b805f811180156124e9575060115481145b612528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251f9061314f565b60405180910390fd5b612530612a18565b600a5f8381526020019081526020015f205f9054906101000a900460ff1661258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490613fa2565b60405180910390fd5b5f600a5f8481526020019081526020015f205f6101000a81548160ff021916908315150217905550817ff608654a6d8e1785594639dd55babb61d7ae157382015f904a24224e50333b1d426040516125e59190612e75565b60405180910390a25050565b6125f9612a18565b5f841161263b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263290613c1d565b60405180910390fd5b5f821161267d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267490613c85565b60405180910390fd5b60035f81548092919061268f90613534565b91905055506040518061012001604052805f81526020015f81526020018581526020018481526020015f81526020018381526020018281526020015f81526020015f1515815250600b5f60035481526020019081526020015f205f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070155610100820151816008015f6101000a81548160ff0219169083151502179055509050506003547f6a00651728a92841411081673eaa4eddbed06d102a590e050c22def40d4dd0b8835f8060405161279093929190613ff9565b60405180910390a250505050565b5f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612809573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061282d919061371c565b600a6128399190613876565b600b5f8581526020019081526020015f206002015483612859919061329d565b612863919061330b565b905092915050565b612873612a18565b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60035481565b600b602052805f5260405f205f91509050805f015490806001015490806002015490806003015490806004015490806005015490806006015490806007015490806008015f9054906101000a900460ff16905089565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612954612a18565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b99061409e565b60405180910390fd5b6129cb81612be3565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612a20612ae3565b73ffffffffffffffffffffffffffffffffffffffff16612a3e6118d4565b73ffffffffffffffffffffffffffffffffffffffff1614612a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8b90614106565b60405180910390fd5b565b60025f5403612ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad19061416e565b60405180910390fd5b60025f81905550565b5f33905090565b80471015612b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b24906141d6565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff1682604051612b5290614217565b5f6040518083038185875af1925050503d805f8114612b8c576040519150601f19603f3d011682016040523d82523d5f602084013e612b91565b606091505b5050905080612bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcc90614275565b60405180910390fd5b505050565b60015f81905550565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612cd382612caa565b9050919050565b612ce381612cc9565b8114612ced575f80fd5b50565b5f81359050612cfe81612cda565b92915050565b5f60208284031215612d1957612d18612ca6565b5b5f612d2684828501612cf0565b91505092915050565b5f8115159050919050565b612d4381612d2f565b82525050565b5f602082019050612d5c5f830184612d3a565b92915050565b5f819050919050565b612d7481612d62565b8114612d7e575f80fd5b50565b5f81359050612d8f81612d6b565b92915050565b5f60208284031215612daa57612da9612ca6565b5b5f612db784828501612d81565b91505092915050565b612dc981612d2f565b8114612dd3575f80fd5b50565b5f81359050612de481612dc0565b92915050565b5f8060408385031215612e0057612dff612ca6565b5b5f612e0d85828601612cf0565b9250506020612e1e85828601612dd6565b9150509250929050565b5f8060408385031215612e3e57612e3d612ca6565b5b5f612e4b85828601612d81565b9250506020612e5c85828601612d81565b9150509250929050565b612e6f81612d62565b82525050565b5f602082019050612e885f830184612e66565b92915050565b5f8060408385031215612ea457612ea3612ca6565b5b5f612eb185828601612cf0565b9250506020612ec285828601612d81565b9150509250929050565b5f604082019050612edf5f830185612e66565b612eec6020830184612e66565b9392505050565b612efc81612cc9565b82525050565b5f602082019050612f155f830184612ef3565b92915050565b5f805f805f60a08688031215612f3457612f33612ca6565b5b5f612f4188828901612d81565b9550506020612f5288828901612d81565b9450506040612f6388828901612d81565b9350506060612f7488828901612d81565b9250506080612f8588828901612d81565b9150509295509295909350565b5f805f8060808587031215612faa57612fa9612ca6565b5b5f612fb787828801612d81565b9450506020612fc887828801612d81565b9350506040612fd987828801612d81565b9250506060612fea87828801612d81565b91505092959194509250565b5f6101208201905061300a5f83018c612e66565b613017602083018b612e66565b613024604083018a612e66565b6130316060830189612e66565b61303e6080830188612e66565b61304b60a0830187612e66565b61305860c0830186612e66565b61306560e0830185612e66565b613073610100830184612d3a565b9a9950505050505050505050565b5f819050919050565b5f6130a461309f61309a84612caa565b613081565b612caa565b9050919050565b5f6130b58261308a565b9050919050565b5f6130c6826130ab565b9050919050565b6130d6816130bc565b82525050565b5f6020820190506130ef5f8301846130cd565b92915050565b5f82825260208201905092915050565b7f496e76616c69642070726573616c6520696400000000000000000000000000005f82015250565b5f6131396012836130f5565b915061314482613105565b602082019050919050565b5f6020820190508181035f8301526131668161312d565b9050919050565b7f70726553416c65206e6f742041637469766500000000000000000000000000005f82015250565b5f6131a16012836130f5565b91506131ac8261316d565b602082019050919050565b5f6020820190508181035f8301526131ce81613195565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61320c82612d62565b915061321783612d62565b925082820390508181111561322f5761322e6131d5565b5b92915050565b7f496e76616c69642073616c6520616d6f756e74000000000000000000000000005f82015250565b5f6132696013836130f5565b915061327482613235565b602082019050919050565b5f6020820190508181035f8301526132968161325d565b9050919050565b5f6132a782612d62565b91506132b283612d62565b92508282026132c081612d62565b915082820484148315176132d7576132d66131d5565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61331582612d62565b915061332083612d62565b9250826133305761332f6132de565b5b828204905092915050565b5f61334582612d62565b915061335083612d62565b9250828201905080821115613368576133676131d5565b5b92915050565b7f416d6f756e742073686f756c64206265206c657373207468616e206c656674485f8201527f6172646361700000000000000000000000000000000000000000000000000000602082015250565b5f6133c86026836130f5565b91506133d38261336e565b604082019050919050565b5f6020820190508181035f8301526133f5816133bc565b9050919050565b7f4163636f756e7420697320626c61636b4c6973746564000000000000000000005f82015250565b5f6134306016836130f5565b915061343b826133fc565b602082019050919050565b5f6020820190508181035f83015261345d81613424565b9050919050565b7f50726573616c65207061757365640000000000000000000000000000000000005f82015250565b5f613498600e836130f5565b91506134a382613464565b602082019050919050565b5f6020820190508181035f8301526134c58161348c565b9050919050565b7f50726573616c65206973206e6f742061637469766520796574000000000000005f82015250565b5f6135006019836130f5565b915061350b826134cc565b602082019050919050565b5f6020820190508181035f83015261352d816134f4565b9050919050565b5f61353e82612d62565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135705761356f6131d5565b5b600182019050919050565b7f496e73756666696369656e7420416d6f756e74210000000000000000000000005f82015250565b5f6135af6014836130f5565b91506135ba8261357b565b602082019050919050565b5f6020820190508181035f8301526135dc816135a3565b9050919050565b5f6040820190506135f65f830185612ef3565b6136036020830184612e66565b9392505050565b5f8151905061361881612dc0565b92915050565b5f6020828403121561363357613632612ca6565b5b5f6136408482850161360a565b91505092915050565b7f546f6b656e207472616e73666572206661696c656400000000000000000000005f82015250565b5f61367d6015836130f5565b915061368882613649565b602082019050919050565b5f6020820190508181035f8301526136aa81613671565b9050919050565b5f6060820190506136c45f830186612e66565b6136d16020830185612e66565b6136de6040830184612e66565b949350505050565b5f60ff82169050919050565b6136fb816136e6565b8114613705575f80fd5b50565b5f81519050613716816136f2565b92915050565b5f6020828403121561373157613730612ca6565b5b5f61373e84828501613708565b91505092915050565b5f8160011c9050919050565b5f808291508390505b600185111561379c57808604811115613778576137776131d5565b5b60018516156137875780820291505b808102905061379585613747565b945061375c565b94509492505050565b5f826137b4576001905061386f565b816137c1575f905061386f565b81600181146137d757600281146137e157613810565b600191505061386f565b60ff8411156137f3576137f26131d5565b5b8360020a91508482111561380a576138096131d5565b5b5061386f565b5060208310610133831016604e8410600b84101617156138455782820a9050838111156138405761383f6131d5565b5b61386f565b6138528484846001613753565b92509050818404811115613869576138686131d5565b5b81810290505b9392505050565b5f61388082612d62565b915061388b836136e6565b92506138b87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846137a5565b905092915050565b7f416c7265616479207061757365640000000000000000000000000000000000005f82015250565b5f6138f4600e836130f5565b91506138ff826138c0565b602082019050919050565b5f6020820190508181035f830152613921816138e8565b9050919050565b7f496e76616c696420706172616d657465727300000000000000000000000000005f82015250565b5f61395c6012836130f5565b915061396782613928565b602082019050919050565b5f6020820190508181035f83015261398981613950565b9050919050565b7f50726573616c6520646f6e2774206578697374000000000000000000000000005f82015250565b5f6139c46013836130f5565b91506139cf82613990565b602082019050919050565b5f6020820190508181035f8301526139f1816139b8565b9050919050565b7f5a65726f20746f6b656e206164647265737300000000000000000000000000005f82015250565b5f613a2c6012836130f5565b9150613a37826139f8565b602082019050919050565b5f6020820190508181035f830152613a5981613a20565b9050919050565b5f69ffffffffffffffffffff82169050919050565b613a7e81613a60565b8114613a88575f80fd5b50565b5f81519050613a9981613a75565b92915050565b5f819050919050565b613ab181613a9f565b8114613abb575f80fd5b50565b5f81519050613acc81613aa8565b92915050565b5f81519050613ae081612d6b565b92915050565b5f805f805f60a08688031215613aff57613afe612ca6565b5b5f613b0c88828901613a8b565b9550506020613b1d88828901613abe565b9450506040613b2e88828901613ad2565b9350506060613b3f88828901613ad2565b9250506080613b5088828901613a8b565b9150509295509295909350565b5f613b6782613a9f565b9150613b7283613a9f565b9250828202613b8081613a9f565b91507f800000000000000000000000000000000000000000000000000000000000000084145f84121615613bb757613bb66131d5565b5b8282058414831517613bcc57613bcb6131d5565b5b5092915050565b7f5a65726f207072696365000000000000000000000000000000000000000000005f82015250565b5f613c07600a836130f5565b9150613c1282613bd3565b602082019050919050565b5f6020820190508181035f830152613c3481613bfb565b9050919050565b7f5a65726f20746f6b656e7320746f2073656c6c000000000000000000000000005f82015250565b5f613c6f6013836130f5565b9150613c7a82613c3b565b602082019050919050565b5f6020820190508181035f830152613c9c81613c63565b9050919050565b7f5a65726f206861726361700000000000000000000000000000000000000000005f82015250565b5f613cd7600b836130f5565b9150613ce282613ca3565b602082019050919050565b5f6020820190508181035f830152613d0481613ccb565b9050919050565b7f4c657373207468616e206d696e20616d6f756e740000000000000000000000005f82015250565b5f613d3f6014836130f5565b9150613d4a82613d0b565b602082019050919050565b5f6020820190508181035f830152613d6c81613d33565b9050919050565b5f604082019050613d865f830185612ef3565b613d936020830184612ef3565b9392505050565b5f60208284031215613daf57613dae612ca6565b5b5f613dbc84828501613ad2565b91505092915050565b7f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e635f8201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e1f6021836130f5565b9150613e2a82613dc5565b604082019050919050565b5f6020820190508181035f830152613e4c81613e13565b9050919050565b5f606082019050613e665f830186612ef3565b613e736020830185612ef3565b613e806040830184612e66565b949350505050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f613eb482613e88565b613ebe8185613e92565b9350613ece818560208601613e9c565b80840191505092915050565b5f613ee58284613eaa565b915081905092915050565b7f546f6b656e207061796d656e74206661696c65640000000000000000000000005f82015250565b5f613f246014836130f5565b9150613f2f82613ef0565b602082019050919050565b5f6020820190508181035f830152613f5181613f18565b9050919050565b7f4e6f7420706175736564000000000000000000000000000000000000000000005f82015250565b5f613f8c600a836130f5565b9150613f9782613f58565b602082019050919050565b5f6020820190508181035f830152613fb981613f80565b9050919050565b5f819050919050565b5f613fe3613fde613fd984613fc0565b613081565b612d62565b9050919050565b613ff381613fc9565b82525050565b5f60608201905061400c5f830186612e66565b6140196020830185613fea565b6140266040830184613fea565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6140886026836130f5565b91506140938261402e565b604082019050919050565b5f6020820190508181035f8301526140b58161407c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6140f06020836130f5565b91506140fb826140bc565b602082019050919050565b5f6020820190508181035f83015261411d816140e4565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f614158601f836130f5565b915061416382614124565b602082019050919050565b5f6020820190508181035f8301526141858161414c565b9050919050565b7f4c6f772062616c616e63650000000000000000000000000000000000000000005f82015250565b5f6141c0600b836130f5565b91506141cb8261418c565b602082019050919050565b5f6020820190508181035f8301526141ed816141b4565b9050919050565b50565b5f6142025f83613e92565b915061420d826141f4565b5f82019050919050565b5f614221826141f7565b9150819050919050565b7f455448205061796d656e74206661696c656400000000000000000000000000005f82015250565b5f61425f6012836130f5565b915061426a8261422b565b602082019050919050565b5f6020820190508181035f83015261428c81614253565b905091905056fea2646970667358221220736ebf0c55f86da46dfc0a7efedf7273612928dca6fc626818cc4b13c2e3cc0564736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000ebc2c701bca0c26767e9dcadeb0bfdd9932692180000000000000000000000004c4052007ccea0e62b8faa818019f817296f53540000000000000000000000000000000000000000000000000000000000000001
-----Decoded View---------------
Arg [0] : _oracle (address): 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419
Arg [1] : _usdt (address): 0xdAC17F958D2ee523a2206206994597C13D831ec7
Arg [2] : _saleToken (address): 0xEBc2c701BcA0C26767E9dcAdEB0BFDD993269218
Arg [3] : _fundReceiver (address): 0x4c4052007CCEA0E62B8FaA818019F817296F5354
Arg [4] : _minTokenTobuy (uint256): 1
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419
Arg [1] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [2] : 000000000000000000000000ebc2c701bca0c26767e9dcadeb0bfdd993269218
Arg [3] : 0000000000000000000000004c4052007ccea0e62b8faa818019f817296f5354
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.