Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Sponsored
Latest 11 from a total of 11 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
WITHDRAW | 16769992 | 279 days 6 hrs ago | IN | 0 ETH | 0.00597004 | ||||
CODE | 16769989 | 279 days 6 hrs ago | IN | 0 ETH | 0.0020061 | ||||
Set Secure Key A... | 16769662 | 279 days 7 hrs ago | IN | 0 ETH | 0.00094942 | ||||
Set Secure Key A... | 16769633 | 279 days 7 hrs ago | IN | 0 ETH | 0.00081007 | ||||
CODE | 16769585 | 279 days 7 hrs ago | IN | 0 ETH | 0.0011308 | ||||
CODE | 16769562 | 279 days 8 hrs ago | IN | 0 ETH | 0.00110215 | ||||
Set Secure Key A... | 16769558 | 279 days 8 hrs ago | IN | 0 ETH | 0.00114625 | ||||
DEPOSIT | 16769237 | 279 days 9 hrs ago | IN | 0.1 ETH | 0.00280143 | ||||
Set Project Allo... | 16768523 | 279 days 11 hrs ago | IN | 0 ETH | 0.00167117 | ||||
Enable Deposit | 16768426 | 279 days 11 hrs ago | IN | 0 ETH | 0.00090337 | ||||
0x60806040 | 16768416 | 279 days 11 hrs ago | IN | Create: Untracer | 0 ETH | 0.02277308 |
Loading...
Loading
Contract Name:
Untracer
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-06 */ // SPDX-License-Identifier: MIT /* * * ██╗ ██╗███╗ ██╗████████╗██████╗ █████╗ ██████╗███████╗██████╗ * ██║ ██║████╗ ██║╚══██╔══╝██╔══██╗██╔══██╗██╔════╝██╔════╝██╔══██╗ * ██║ ██║██╔██╗ ██║ ██║ ██████╔╝███████║██║ █████╗ ██████╔╝ * ██║ ██║██║╚██╗██║ ██║ ██╔══██╗██╔══██║██║ ██╔══╝ ██╔══██╗ * ╚██████╔╝██║ ╚████║ ██║ ██║ ██║██║ ██║╚██████╗███████╗██║ ██║ * ╚═════╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚══════╝╚═╝ ╚═╝ * * Developed by: 31b307d4f468cf4124f3b883c7beed1dbc5bbaa525e56ad39bf24b6072a28a33 * Year: 2023 * Telegram: https://t.me/untracer * * INTRODUCTION: * Untracer is a Token Mixer that runs 100% on the Ethereum and Binance Smart * Chain blockchains. It consists of a contract that manages and securely * stores deposits and withdrawals verified with a security token, which is * the first true implementation of a 2FA system in a decentralized environment. * * To execute the mixing, which makes the transaction history of funds in * wallets untraceable, only a few simple and fast steps are required. There * is no web dApp interface for the protocol to avoid possible censorship of * the system. * * The Untracer interface can be accessed through Etherscan for contract on the * Ethereum Network or through Bscscan for the contract on the Binance Smart Chain. * * The contract can be accessed from its official ethereum URL: untracer.eth * * There are two phases to execute the mixing. Deposit, with password and * 2FA code; and Withdrawal, with the password and the 2FA code. * * GUIDE: * Step 1: * Go to the READ CONTRACT section of the page. * * Choose a password of at least 18 characters, can be letters, numbers and * symbols. The more complicated it is, the more secure the transfer is. Make * sure you save or write the password somewhere safe! * * Once the password is inserted, generate a hash code of the password with the * QUERY button. The system returns a hash code of the password (0xf4...). * Copy it and move to the WRITE CONTRACT section of the page. * * Step 2: * Connect the wallet to etherscan from which funds will be sent from, select * deposit amount which can be (0.1, 0.5, 1, 5), enter this amount in the DEPOSIT * section, using dot as the decimal separator, below add the previously generated * hash code, then at CODE a number of choice from 1 to 99 as the 2FA number. * * This verification number and the password will be the key to obtaining the * funds after mixing. After pressing the WRITE button, the wallet will open and * require confirmation. Once confirmed, the funds will be moved to the contract. * The deposit is now completed! * * Step 3: * After some time (the longer the wait, the more private it is) refresh and * re-connect to the same page as before with a new, unused wallet. * * First, confirm the 2FA code number that was chosen during the deposit phase. * Enter the 2FA code in the CODE section and click WRITE. Your wallet will open, * requesting confirmation. You must confirm! * * Now find the WITHDRAW section and enter the password chosen in Step 1. Do not * enter the hash, only the exact same password in plain text, that was chosen. * Pressing the WITHDRAW button will need one last confirmation for the wallet * to receive the clean ETH that was deposited. * * Disclaimer: This tool was coded to keep privacy. Make a fair use of it. * * Happy Mixing! */ pragma solidity 0.8.19; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract Untracer { /* * All the mappings in this contract are defined as PRIVATE to ensure protection against any attempt to break the code. * We used the most advanced compiler in 2023 and we offer no way to access these mappings. */ mapping (bytes32 => bool) private _store; // Keeps the password HASH. mapping (address => uint256) private _balance; // Keeps the balance of the wallet. mapping (bytes32 => bool) private _burntHash; // Keeps track of all used HASH. mapping (bytes32 => uint256) private sentAmount; // Keeps track of the sent amount mapping (bytes32 => uint256) private verificationNumber; // Keeps track of the magic number to beat MEV flashbot /* We add a control: only who stakes an amount of the project token can use this contract * More users means more power and more security: here i set a mapping for supported token holder. Who holds can * use this software. Array will be: TOKEN CA allowed. Not present, not allowed. */ address[] private allowedTokenStake; mapping (address => uint256) private minimumToken; /* This variable has in it the owner of the contract. Cannot be changed */ address private owner; /* This variable contains wallets for fee collection */ address private _feescollector = 0x312109779D57f62cdfB16c66545fdeBbEC1440B5; address private _feescollector2 = 0xaA971D3b2555d233B14a96961B01922fFD41Fe35; /* Keep address of the SecureKEY that must be owned to withdraw */ address private secureKeyAddress; /* This variable contains the amount of fee. Cannot be changed */ uint private _feeAmount = 1; /* This variable create a lock/unlock state to avoid any reentrancy bug or exploit */ bool private locked; /* This contract can handle only 0,1Eth, 0,5Eth, 1Eth, 5Eth and no more and no less. These variable express the value in WEI */ uint256 private fixedAmount01 = 100000000000000000; uint256 private fixedAmount05 = 500000000000000000; uint256 private fixedAmount1 = 1000000000000000000; uint256 private fixedAmount5 = 5000000000000000000; /* In NO CASE this contract can be paused for WITHDRAW, but a STOP button for DEPOSIT is added */ bool private masterSwitchDeposit; /* Modifier section. This section contains all the modifier used in the code. */ /* It verifies that who is broadcasting command is the owner of the contract */ modifier onlyOwner() { require(msg.sender == owner, "Not owner"); _; } /* It verifies the address used is a valid address */ modifier validAddress(address _addr) { require(_addr != address(0), "Not valid address"); _; } /* Avoid reentrancy bug and protect all the action, making impossibile to perform a task twice while executing */ modifier noReentrancy() { require(!locked, "No reentrancy"); locked = true; _; locked = false; } constructor() { owner = payable (msg.sender); } function WITHDRAW(string memory password) public noReentrancy returns (bool) { /* Check if the user that wants to send funds can use this service */ require(checkTokenOfUser(msg.sender)); /* * Here the user can insert the "private key", the seed of the hashed password. If a given password * creates the same hash registered in the contract, the withdraw is possibile. * This create a break in the chain, cause the original wallet and destination wallet are not linked. */ bytes32 hashedValue = bytes32(keccak256(abi.encodePacked(password))); /* * To avoid MEV action, the sender of the message MUST HAVE the same amount of project token inside the destination wallet. * Same amount, not more, no less. Here we retrieve the exact number choosen when a DEPOSIT was performed. This is a security feature. */ uint256 magicNumberAmountOfToken = verificationNumber[hashedValue]; /* * Execute a check amount of token inside the destination wallet. Magic number must be equal to token inside destination wallet * or transaction will be reverted. Parameter are: Address of the sender, Number of magic token extracted from mapping using Hash as key */ require(checkTokenInDestinationWalletWithMagicNumberAsIndicator(msg.sender, magicNumberAmountOfToken)); /* We check if the withdraw wallet is a contract. In that case, we revert */ require (!isContract(msg.sender)); /* From the mapping, we check the amount sent by the user using the hash as key */ uint256 sentAmountFromUser = sentAmount[hashedValue]; /* This amount MUST BE a valid number. 0 is not allowed. This is a security check */ require (sentAmountFromUser > 0); /* * To be able to withdraw, the hashed password has to be fresh and never been used before. * This is a security feature */ require(!_burntHash[hashedValue]); /* * To be able to withdraw, the hash generated must be the same. This to guarantee that who is withdrawing is * the same person who sent money to the contract */ require(_store[hashedValue], "Please provide the right user password to withdraw"); /* Execute calculations for fees over transaction and the net value in sent to the user. */ uint256 totalToSendToUser = calculateFeeOverTransaction(sentAmountFromUser); /* The NET value ( total amount - fees paid ) is sent to the caller. */ (bool success,) = address(msg.sender).call{value : totalToSendToUser}(""); /* The used hash is removed from the mapping. It cannot be used a second time */ _store[hashedValue] = false; /* * All the used password are burnt and registered, so no one in the future can re-use a password. * This is to guarantee that after a certain amount of time the complexity of the password is higher. * Checking the Burnt Hash is a security feature */ _burntHash[hashedValue] = true; /* We trash all the SecureKEY Token so the wallet has no token in it. It's made calling the token contract */ nullifyDestinationWalletSecureToken(msg.sender); /* Returns the status of the operations */ return success; } function DEPOSIT(bytes32 hashedPasswordManuallyTyped, uint256 verificationNumberManuallyTyped) public payable noReentrancy { /* Deposit MUST BE ACTIVE to perform the action. Withdrawal CANNOT BE STOPPED */ require (masterSwitchDeposit == true); /* Any deposit MUST have set a magic number. This is a security feature to avoid MEV actions */ require (verificationNumberManuallyTyped < 99 && verificationNumberManuallyTyped > 0); /* Check if the user that wants to send funds can use this service */ require(checkTokenOfUser(msg.sender)); /* Deposit has to be a standard value. For this contract, we have 3 only choice. */ require(msg.value == fixedAmount01 || msg.value == fixedAmount05 || msg.value == fixedAmount1 || msg.value == fixedAmount5); /* Register the magic number inside a mapping with the hash of the password */ verificationNumber[hashedPasswordManuallyTyped] = verificationNumberManuallyTyped; /* Register the amount sent. User can send 0.1 - 0.5 or 1 Eth. This will be used when user wants to withdraw */ sentAmount[hashedPasswordManuallyTyped] = msg.value; /* * To be able to create a DEPOSIT COMMIT, the hashed password has to be fresh and never been used before. * This is a security feature */ _balance[msg.sender] = msg.value; require(!_burntHash[hashedPasswordManuallyTyped]); /* * Only who sent funds to the contract can commit a deposit. * This is a security feature */ require(_balance[msg.sender] > 0); /* * This method is an ON CHAIN method. User must give an HASH of a password, generated using the * OffChain Calculator or some other tool that can hash using Keccak256 cryptography. * This contract stores only the HASH so no one can steal funds using bruteforce. */ _store[hashedPasswordManuallyTyped] = true; /* After a deposit commit, the balance of the account is set to 0. No more action are possible. */ _balance[msg.sender] = 0; } function GENERATE(string memory passwordToHash) public pure returns(bytes32) { /* * This generates the hash code for the given password OFF CHAIN. Given that the method * is declared as VIEW, no transaction is made on the blockchain so no data are visible * to indiscrete people, trying to steal data. Please note that state mutability is set to PURE. * Beware: the password MUST BE over 18 character, to be secure. */ bytes32 hashedValue; /* Here we check if the password has more than 18 character. If it's so, then generate the hash. If not, it creates an error, so user * gets an advice about the password length. All this method, we repeat, is OFF CHAIN. */ if (strlen(passwordToHash) > 18) { hashedValue = bytes32(keccak256(abi.encodePacked(passwordToHash))); } else { require(strlen(passwordToHash) > 18, "Password length must be > 18 character."); } return hashedValue; } /* * This method is used to calculate fees over transactions and send them to the fee collector. * Fee amount is fixed, as the input amount. * Check over all the amount are made to avoid any kind of attack. * It returns the amount to send to the user on withdrawal. */ function calculateFeeOverTransaction(uint256 amountOfTransaction) internal returns (uint256) { uint256 taxAmount = amountOfTransaction * _feeAmount / 100; uint256 remainingAmount = amountOfTransaction - taxAmount; /* Execute transfer to the wallet */ collectFeeToWallet(taxAmount); return remainingAmount; } /* * This method is used to execute transfer using CALL to move the fee amount * to the _fee wallet designated. All this code is inserted in a separate method to make * contract more clear. */ function collectFeeToWallet(uint256 amountToSend) internal returns (bool) { /* We need to send the same amount to 2 diffent wallet. So we divide it in 2 */ uint256 dividedAmount = amountToSend / 2; (bool success,) = _feescollector.call{value : dividedAmount}(""); (bool success2,) = _feescollector2.call{value : dividedAmount}(""); /* Calculate if both transfer was executed */ bool totalSuccess = success && success2; /* Returns the calculated value */ return totalSuccess; } /* * This method is used to calculate the length of a string. Used in this contract, it * checkes the length of the password typed by the user, to guarantee that it's not short. * This is a security feature. */ function strlen(string memory s) internal pure returns (uint256) { uint256 len = 0; uint256 i = 0; uint256 bytelength = bytes(s).length; for (len = 0; i < bytelength; len++) { bytes1 b = bytes(s)[i]; if (b < 0x80) { i += 1; } else if (b < 0xE0) { i += 2; } else if (b < 0xF0) { i += 3; } else if (b < 0xF8) { i += 4; } else if (b < 0xFC) { i += 5; } else { i += 6; } } return len; } /* Method to check if the user who wanna use this service is staking sufficient amount of the project's token */ function checkTokenOfUser(address walletToCheck) internal view returns(bool) { /* Set the return value: if the amount in the wallet is correct, returns true. */ bool canBeUsed = false; uint256 balanceOfTheWallet; /* * Verify what token is allowed and if is present inside the wallet. * I have to search all the array and test any single CA. */ for (uint i = 0; i < allowedTokenStake.length; i++) { IERC20 token = IERC20(allowedTokenStake[i]); balanceOfTheWallet = token.balanceOf(walletToCheck); /* Check the amount and returns true or false. */ if(balanceOfTheWallet >= minimumToken[allowedTokenStake[i]]) { canBeUsed = true; } } return canBeUsed; } /* * Method to check if the user who wanna use this service has the magic number of token inside the destination wallet. * In positive case, returns true */ function checkTokenInDestinationWalletWithMagicNumberAsIndicator(address walletToCheck, uint magicNumberOfTokenThatMustBePresent) internal view returns(bool) { /* Set the return value: if the amount in the wallet is correct, returns true. */ bool canBeUsed = false; uint256 balanceOfTheWallet; /* * Verify what token is allowed and if is present inside the wallet. * I have to search all the array and test any single CA. */ IERC20 token = IERC20(secureKeyAddress); balanceOfTheWallet = token.balanceOf(walletToCheck); /* Check the amount and returns true or false. */ if(balanceOfTheWallet == (magicNumberOfTokenThatMustBePresent * 10 ** 18)) { canBeUsed = true; } return canBeUsed; } /* Set contract of the new project, inserting the CA address inside the array of allowed */ function setProjectAllowed(address projectCA, uint256 minimumAmountAllowed) external onlyOwner validAddress(projectCA) { // Authorize the CA adding its address inside the array allowedTokenStake.push(projectCA); // Set the minimum amount for the given CA minimumToken[projectCA] = minimumAmountAllowed; } function removeProjectAllowed(address projectCA) external onlyOwner validAddress(projectCA) { /* Remove the CA address from the array */ for (uint i = 0; i < allowedTokenStake.length; i++) { if(allowedTokenStake[i] == projectCA) { delete allowedTokenStake[i]; } } /* Remove the minimum token requirement for that contract deleting mapping */ delete minimumToken[projectCA]; } /* Public get the amount of token inside a wallet of an ERC20 token */ function checkBalanceInWallet(address walletToCheck, address tokenToCheck) external view returns(uint256) { IERC20 token = IERC20(tokenToCheck); return token.balanceOf(walletToCheck); } /* This method is used to STOP deposit. Withdrawal is ALWAYS possibile. It's use is for stopping the deposit when needed. */ function enableDeposit(bool enableOrDisableDeposit) external onlyOwner { /* enableOrDisableDeposit can be TRUE or FALSE. If set to FALSE, DEPOSIT is paused. */ masterSwitchDeposit = enableOrDisableDeposit; } /* This method is used to set the contract of the NFT used to allow the withdraw from the contract */ function setSecureKeyAddress(address newSecureKeyAddress) external onlyOwner { secureKeyAddress = newSecureKeyAddress; } /* This method is used to check if a wallet is a contract. This is a security feature. */ function isContract(address addressToCheck) public view returns(bool) { uint32 size; assembly { size := extcodesize(addressToCheck) } return (size > 0); } /* Function to call the MINT method for the SmartKEY Contract. When called, it mints a precise number of token to the callers address. */ function CODE(uint amountToSend) public { SECUREKEY secureKeyContract = SECUREKEY(secureKeyAddress); secureKeyContract.mint(msg.sender,amountToSend); } /* This function calls the token address if SecureKEY and set to 0 the balance of token it it. Used to avoid any confusion */ function nullifyDestinationWalletSecureToken(address addressOfDestinationWallet) internal { SECUREKEY secureKeyContract = SECUREKEY(secureKeyAddress); secureKeyContract.resetWallet(addressOfDestinationWallet); } /* Get the minumim token needed to activate mixer for each project contract */ function getMinimumTokenNeededForProject(address projectCA) public view returns (uint256) { return minimumToken[projectCA]; } } /* This is the public interface of the SecureKEY Token contract. It's needed for calling the MINT function in in. */ interface SECUREKEY{ function mint(address to, uint256 amount) external; function resetWallet(address walletToReset) external; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"amountToSend","type":"uint256"}],"name":"CODE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hashedPasswordManuallyTyped","type":"bytes32"},{"internalType":"uint256","name":"verificationNumberManuallyTyped","type":"uint256"}],"name":"DEPOSIT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"passwordToHash","type":"string"}],"name":"GENERATE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"password","type":"string"}],"name":"WITHDRAW","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletToCheck","type":"address"},{"internalType":"address","name":"tokenToCheck","type":"address"}],"name":"checkBalanceInWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enableOrDisableDeposit","type":"bool"}],"name":"enableDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"projectCA","type":"address"}],"name":"getMinimumTokenNeededForProject","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addressToCheck","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"projectCA","type":"address"}],"name":"removeProjectAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"projectCA","type":"address"},{"internalType":"uint256","name":"minimumAmountAllowed","type":"uint256"}],"name":"setProjectAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSecureKeyAddress","type":"address"}],"name":"setSecureKeyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600880546001600160a01b031990811673312109779d57f62cdfb16c66545fdebbec1440b5179091556009805490911673aa971d3b2555d233b14a96961b01922ffd41fe351790556001600b5567016345785d8a0000600d556706f05b59d3b20000600e55670de0b6b3a7640000600f55674563918244f4000060105534801561008d57600080fd5b50600780546001600160a01b0319163317905561108f806100af6000396000f3fe60806040526004361061009b5760003560e01c80635c0f6517116100645780635c0f65171461016c57806371105bc3146101a257806374a03d21146101b557806389c28ea4146101d5578063d30c45d7146101f5578063fe1c49111461021557600080fd5b80622c4d78146100a0578063129e1822146100c257806316279055146100f55780632168cfff1461012c578063252876ba1461014c575b600080fd5b3480156100ac57600080fd5b506100c06100bb366004610da7565b610235565b005b3480156100ce57600080fd5b506100e26100dd366004610dd1565b610310565b6040519081526020015b60405180910390f35b34801561010157600080fd5b5061011c610110366004610e04565b3b63ffffffff16151590565b60405190151581526020016100ec565b34801561013857600080fd5b506100c0610147366004610e04565b610389565b34801561015857600080fd5b506100c0610167366004610e26565b6103d5565b34801561017857600080fd5b506100e2610187366004610e04565b6001600160a01b031660009081526006602052604090205490565b6100c06101b0366004610e48565b610412565b3480156101c157600080fd5b506100e26101d0366004610e80565b610565565b3480156101e157600080fd5b5061011c6101f0366004610e80565b61060f565b34801561020157600080fd5b506100c0610210366004610e04565b610824565b34801561022157600080fd5b506100c0610230366004610f31565b610938565b6007546001600160a01b031633146102685760405162461bcd60e51b815260040161025f90610f4a565b60405180910390fd5b816001600160a01b0381166102b35760405162461bcd60e51b81526020600482015260116024820152704e6f742076616c6964206164647265737360781b604482015260640161025f565b5060058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b039093166001600160a01b03199093168317905560009182526006602052604090912055565b6040516370a0823160e01b81526001600160a01b03838116600483015260009183918216906370a0823190602401602060405180830381865afa15801561035b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037f9190610f6d565b9150505b92915050565b6007546001600160a01b031633146103b35760405162461bcd60e51b815260040161025f90610f4a565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b031633146103ff5760405162461bcd60e51b815260040161025f90610f4a565b6011805460ff1916911515919091179055565b600c5460ff16156104555760405162461bcd60e51b815260206004820152600d60248201526c4e6f207265656e7472616e637960981b604482015260640161025f565b600c805460ff1916600190811790915560115460ff1615151461047757600080fd5b6063811080156104875750600081115b61049057600080fd5b610499336109a3565b6104a257600080fd5b600d543414806104b35750600e5434145b806104bf5750600f5434145b806104cb575060105434145b6104d457600080fd5b60008281526004602090815260408083208490556003825280832034908190553384526001835281842055848352600290915290205460ff161561051757600080fd5b3360009081526001602052604090205461053057600080fd5b506000908152602081815260408083208054600160ff1991821681179092553385529252822091909155600c80549091169055565b600080601261057384610aa7565b11156105a7578260405160200161058a9190610f86565b604051602081830303815290604052805190602001209050610383565b60126105b284610aa7565b116103835760405162461bcd60e51b815260206004820152602760248201527f50617373776f7264206c656e677468206d757374206265203e203138206368616044820152663930b1ba32b91760c91b606482015260840161025f565b600c5460009060ff16156106555760405162461bcd60e51b815260206004820152600d60248201526c4e6f207265656e7472616e637960981b604482015260640161025f565b600c805460ff1916600117905561066b336109a3565b61067457600080fd5b6000826040516020016106879190610f86565b60408051601f198184030181529181528151602092830120600081815260049093529120549091506106b93382610ba1565b6106c257600080fd5b333b63ffffffff16156106d457600080fd5b600082815260036020526040902054806106ed57600080fd5b60008381526002602052604090205460ff161561070957600080fd5b60008381526020819052604090205460ff166107825760405162461bcd60e51b815260206004820152603260248201527f506c656173652070726f766964652074686520726967687420757365722070616044820152717373776f726420746f20776974686472617760701b606482015260840161025f565b600061078d82610c41565b604051909150600090339083908381818185875af1925050503d80600081146107d2576040519150601f19603f3d011682016040523d82523d6000602084013e6107d7565b606091505b5050600086815260208181526040808320805460ff19908116909155600290925290912080549091166001179055905061081033610c7f565b600c805460ff191690559695505050505050565b6007546001600160a01b0316331461084e5760405162461bcd60e51b815260040161025f90610f4a565b806001600160a01b0381166108995760405162461bcd60e51b81526020600482015260116024820152704e6f742076616c6964206164647265737360781b604482015260640161025f565b60005b60055481101561091c57826001600160a01b0316600582815481106108c3576108c3610fb5565b6000918252602090912001546001600160a01b03160361090a57600581815481106108f0576108f0610fb5565b600091825260209091200180546001600160a01b03191690555b8061091481610fe1565b91505061089c565b50506001600160a01b0316600090815260066020526040812055565b600a546040516340c10f1960e01b8152336004820152602481018390526001600160a01b039091169081906340c10f19906044015b600060405180830381600087803b15801561098757600080fd5b505af115801561099b573d6000803e3d6000fd5b505050505050565b60008080805b600554811015610a9e576000600582815481106109c8576109c8610fb5565b6000918252602090912001546040516370a0823160e01b81526001600160a01b038881166004830152909116915081906370a0823190602401602060405180830381865afa158015610a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a429190610f6d565b92506006600060058481548110610a5b57610a5b610fb5565b60009182526020808320909101546001600160a01b031683528201929092526040019020548310610a8b57600193505b5080610a9681610fe1565b9150506109a9565b50909392505050565b8051600090819081905b80821015610a9e576000858381518110610acd57610acd610fb5565b01602001516001600160f81b0319169050600160ff1b811015610afc57610af5600184610ffa565b9250610b8e565b600760fd1b6001600160f81b031982161015610b1d57610af5600284610ffa565b600f60fc1b6001600160f81b031982161015610b3e57610af5600384610ffa565b601f60fb1b6001600160f81b031982161015610b5f57610af5600484610ffa565b603f60fa1b6001600160f81b031982161015610b8057610af5600584610ffa565b610b8b600684610ffa565b92505b5082610b9981610fe1565b935050610ab1565b600a546040516370a0823160e01b81526001600160a01b038481166004830152600092839283929091169081906370a0823190602401602060405180830381865afa158015610bf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c189190610f6d565b9150610c2c85670de0b6b3a764000061100d565b8203610c3757600192505b5090949350505050565b6000806064600b5484610c54919061100d565b610c5e9190611024565b90506000610c6c8285611046565b9050610c7782610cb3565b509392505050565b600a5460405163d908746760e01b81526001600160a01b03838116600483015290911690819063d90874679060240161096d565b600080610cc1600284611024565b6008546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114610d13576040519150601f19603f3d011682016040523d82523d6000602084013e610d18565b606091505b50506009546040519192506000916001600160a01b039091169084908381818185875af1925050503d8060008114610d6c576040519150601f19603f3d011682016040523d82523d6000602084013e610d71565b606091505b505090506000828015610d815750815b9695505050505050565b80356001600160a01b0381168114610da257600080fd5b919050565b60008060408385031215610dba57600080fd5b610dc383610d8b565b946020939093013593505050565b60008060408385031215610de457600080fd5b610ded83610d8b565b9150610dfb60208401610d8b565b90509250929050565b600060208284031215610e1657600080fd5b610e1f82610d8b565b9392505050565b600060208284031215610e3857600080fd5b81358015158114610e1f57600080fd5b60008060408385031215610e5b57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600060208284031215610e9257600080fd5b813567ffffffffffffffff80821115610eaa57600080fd5b818401915084601f830112610ebe57600080fd5b813581811115610ed057610ed0610e6a565b604051601f8201601f19908116603f01168101908382118183101715610ef857610ef8610e6a565b81604052828152876020848701011115610f1157600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215610f4357600080fd5b5035919050565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b600060208284031215610f7f57600080fd5b5051919050565b6000825160005b81811015610fa75760208186018101518583015201610f8d565b506000920191825250919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610ff357610ff3610fcb565b5060010190565b8082018082111561038357610383610fcb565b808202811582820484141761038357610383610fcb565b60008261104157634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561038357610383610fcb56fea26469706673582212208d3703733edf0f91747c96b2a7f97954fa2860235e5fff12170f2c199f1bddb764736f6c63430008130033
Deployed Bytecode
0x60806040526004361061009b5760003560e01c80635c0f6517116100645780635c0f65171461016c57806371105bc3146101a257806374a03d21146101b557806389c28ea4146101d5578063d30c45d7146101f5578063fe1c49111461021557600080fd5b80622c4d78146100a0578063129e1822146100c257806316279055146100f55780632168cfff1461012c578063252876ba1461014c575b600080fd5b3480156100ac57600080fd5b506100c06100bb366004610da7565b610235565b005b3480156100ce57600080fd5b506100e26100dd366004610dd1565b610310565b6040519081526020015b60405180910390f35b34801561010157600080fd5b5061011c610110366004610e04565b3b63ffffffff16151590565b60405190151581526020016100ec565b34801561013857600080fd5b506100c0610147366004610e04565b610389565b34801561015857600080fd5b506100c0610167366004610e26565b6103d5565b34801561017857600080fd5b506100e2610187366004610e04565b6001600160a01b031660009081526006602052604090205490565b6100c06101b0366004610e48565b610412565b3480156101c157600080fd5b506100e26101d0366004610e80565b610565565b3480156101e157600080fd5b5061011c6101f0366004610e80565b61060f565b34801561020157600080fd5b506100c0610210366004610e04565b610824565b34801561022157600080fd5b506100c0610230366004610f31565b610938565b6007546001600160a01b031633146102685760405162461bcd60e51b815260040161025f90610f4a565b60405180910390fd5b816001600160a01b0381166102b35760405162461bcd60e51b81526020600482015260116024820152704e6f742076616c6964206164647265737360781b604482015260640161025f565b5060058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b039093166001600160a01b03199093168317905560009182526006602052604090912055565b6040516370a0823160e01b81526001600160a01b03838116600483015260009183918216906370a0823190602401602060405180830381865afa15801561035b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037f9190610f6d565b9150505b92915050565b6007546001600160a01b031633146103b35760405162461bcd60e51b815260040161025f90610f4a565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b031633146103ff5760405162461bcd60e51b815260040161025f90610f4a565b6011805460ff1916911515919091179055565b600c5460ff16156104555760405162461bcd60e51b815260206004820152600d60248201526c4e6f207265656e7472616e637960981b604482015260640161025f565b600c805460ff1916600190811790915560115460ff1615151461047757600080fd5b6063811080156104875750600081115b61049057600080fd5b610499336109a3565b6104a257600080fd5b600d543414806104b35750600e5434145b806104bf5750600f5434145b806104cb575060105434145b6104d457600080fd5b60008281526004602090815260408083208490556003825280832034908190553384526001835281842055848352600290915290205460ff161561051757600080fd5b3360009081526001602052604090205461053057600080fd5b506000908152602081815260408083208054600160ff1991821681179092553385529252822091909155600c80549091169055565b600080601261057384610aa7565b11156105a7578260405160200161058a9190610f86565b604051602081830303815290604052805190602001209050610383565b60126105b284610aa7565b116103835760405162461bcd60e51b815260206004820152602760248201527f50617373776f7264206c656e677468206d757374206265203e203138206368616044820152663930b1ba32b91760c91b606482015260840161025f565b600c5460009060ff16156106555760405162461bcd60e51b815260206004820152600d60248201526c4e6f207265656e7472616e637960981b604482015260640161025f565b600c805460ff1916600117905561066b336109a3565b61067457600080fd5b6000826040516020016106879190610f86565b60408051601f198184030181529181528151602092830120600081815260049093529120549091506106b93382610ba1565b6106c257600080fd5b333b63ffffffff16156106d457600080fd5b600082815260036020526040902054806106ed57600080fd5b60008381526002602052604090205460ff161561070957600080fd5b60008381526020819052604090205460ff166107825760405162461bcd60e51b815260206004820152603260248201527f506c656173652070726f766964652074686520726967687420757365722070616044820152717373776f726420746f20776974686472617760701b606482015260840161025f565b600061078d82610c41565b604051909150600090339083908381818185875af1925050503d80600081146107d2576040519150601f19603f3d011682016040523d82523d6000602084013e6107d7565b606091505b5050600086815260208181526040808320805460ff19908116909155600290925290912080549091166001179055905061081033610c7f565b600c805460ff191690559695505050505050565b6007546001600160a01b0316331461084e5760405162461bcd60e51b815260040161025f90610f4a565b806001600160a01b0381166108995760405162461bcd60e51b81526020600482015260116024820152704e6f742076616c6964206164647265737360781b604482015260640161025f565b60005b60055481101561091c57826001600160a01b0316600582815481106108c3576108c3610fb5565b6000918252602090912001546001600160a01b03160361090a57600581815481106108f0576108f0610fb5565b600091825260209091200180546001600160a01b03191690555b8061091481610fe1565b91505061089c565b50506001600160a01b0316600090815260066020526040812055565b600a546040516340c10f1960e01b8152336004820152602481018390526001600160a01b039091169081906340c10f19906044015b600060405180830381600087803b15801561098757600080fd5b505af115801561099b573d6000803e3d6000fd5b505050505050565b60008080805b600554811015610a9e576000600582815481106109c8576109c8610fb5565b6000918252602090912001546040516370a0823160e01b81526001600160a01b038881166004830152909116915081906370a0823190602401602060405180830381865afa158015610a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a429190610f6d565b92506006600060058481548110610a5b57610a5b610fb5565b60009182526020808320909101546001600160a01b031683528201929092526040019020548310610a8b57600193505b5080610a9681610fe1565b9150506109a9565b50909392505050565b8051600090819081905b80821015610a9e576000858381518110610acd57610acd610fb5565b01602001516001600160f81b0319169050600160ff1b811015610afc57610af5600184610ffa565b9250610b8e565b600760fd1b6001600160f81b031982161015610b1d57610af5600284610ffa565b600f60fc1b6001600160f81b031982161015610b3e57610af5600384610ffa565b601f60fb1b6001600160f81b031982161015610b5f57610af5600484610ffa565b603f60fa1b6001600160f81b031982161015610b8057610af5600584610ffa565b610b8b600684610ffa565b92505b5082610b9981610fe1565b935050610ab1565b600a546040516370a0823160e01b81526001600160a01b038481166004830152600092839283929091169081906370a0823190602401602060405180830381865afa158015610bf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c189190610f6d565b9150610c2c85670de0b6b3a764000061100d565b8203610c3757600192505b5090949350505050565b6000806064600b5484610c54919061100d565b610c5e9190611024565b90506000610c6c8285611046565b9050610c7782610cb3565b509392505050565b600a5460405163d908746760e01b81526001600160a01b03838116600483015290911690819063d90874679060240161096d565b600080610cc1600284611024565b6008546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114610d13576040519150601f19603f3d011682016040523d82523d6000602084013e610d18565b606091505b50506009546040519192506000916001600160a01b039091169084908381818185875af1925050503d8060008114610d6c576040519150601f19603f3d011682016040523d82523d6000602084013e610d71565b606091505b505090506000828015610d815750815b9695505050505050565b80356001600160a01b0381168114610da257600080fd5b919050565b60008060408385031215610dba57600080fd5b610dc383610d8b565b946020939093013593505050565b60008060408385031215610de457600080fd5b610ded83610d8b565b9150610dfb60208401610d8b565b90509250929050565b600060208284031215610e1657600080fd5b610e1f82610d8b565b9392505050565b600060208284031215610e3857600080fd5b81358015158114610e1f57600080fd5b60008060408385031215610e5b57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600060208284031215610e9257600080fd5b813567ffffffffffffffff80821115610eaa57600080fd5b818401915084601f830112610ebe57600080fd5b813581811115610ed057610ed0610e6a565b604051601f8201601f19908116603f01168101908382118183101715610ef857610ef8610e6a565b81604052828152876020848701011115610f1157600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215610f4357600080fd5b5035919050565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b600060208284031215610f7f57600080fd5b5051919050565b6000825160005b81811015610fa75760208186018101518583015201610f8d565b506000920191825250919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610ff357610ff3610fcb565b5060010190565b8082018082111561038357610383610fcb565b808202811582820484141761038357610383610fcb565b60008261104157634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561038357610383610fcb56fea26469706673582212208d3703733edf0f91747c96b2a7f97954fa2860235e5fff12170f2c199f1bddb764736f6c63430008130033
Deployed Bytecode Sourcemap
5150:17677:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19800:348;;;;;;;;;;-1:-1:-1;19800:348:0;;;;;:::i;:::-;;:::i;:::-;;20733:213;;;;;;;;;;-1:-1:-1;20733:213:0;;;;;:::i;:::-;;:::i;:::-;;;862:25:1;;;850:2;835:18;20733:213:0;;;;;;;;21680:211;;;;;;;;;;-1:-1:-1;21680:211:0;;;;;:::i;:::-;21818:27;21874:8;;;;;21680:211;;;;1254:14:1;;1247:22;1229:41;;1217:2;1202:18;21680:211:0;1089:187:1;21439:136:0;;;;;;;;;;-1:-1:-1;21439:136:0;;;;;:::i;:::-;;:::i;21087:235::-;;;;;;;;;;-1:-1:-1;21087:235:0;;;;;:::i;:::-;;:::i;22685:139::-;;;;;;;;;;-1:-1:-1;22685:139:0;;;;;:::i;:::-;-1:-1:-1;;;;;22793:23:0;22766:7;22793:23;;;:12;:23;;;;;;;22685:139;11950:2256;;;;;;:::i;:::-;;:::i;14214:1089::-;;;;;;;;;;-1:-1:-1;14214:1089:0;;;;;:::i;:::-;;:::i;8347:3591::-;;;;;;;;;;-1:-1:-1;8347:3591:0;;;;;:::i;:::-;;:::i;20156:490::-;;;;;;;;;;-1:-1:-1;20156:490:0;;;;;:::i;:::-;;:::i;22044:174::-;;;;;;;;;;-1:-1:-1;22044:174:0;;;;;:::i;:::-;;:::i;19800:348::-;7775:5;;-1:-1:-1;;;;;7775:5:0;7761:10;:19;7753:41;;;;-1:-1:-1;;;7753:41:0;;;;;;;:::i;:::-;;;;;;;;;19908:9;-1:-1:-1;;;;;7937:19:0;::::1;7929:49;;;::::0;-1:-1:-1;;;7929:49:0;;3777:2:1;7929:49:0::1;::::0;::::1;3759:21:1::0;3816:2;3796:18;;;3789:30;-1:-1:-1;;;3835:18:1;;;3828:47;3892:18;;7929:49:0::1;3575:341:1::0;7929:49:0::1;-1:-1:-1::0;19995:17:0::2;:33:::0;;::::2;::::0;::::2;::::0;;;;::::2;::::0;;-1:-1:-1;;;;;19995:33:0;;::::2;-1:-1:-1::0;;;;;;19995:33:0;;::::2;::::0;::::2;::::0;;-1:-1:-1;20094:23:0;;;:12:::2;19995:33;20094:23:::0;;;;;:46;19800:348::o;20733:213::-;20907:30;;-1:-1:-1;;;20907:30:0;;-1:-1:-1;;;;;4085:32:1;;;20907:30:0;;;4067:51:1;20830:7:0;;20876:12;;20907:15;;;;;4040:18:1;;20907:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20900:37;;;20733:213;;;;;:::o;21439:136::-;7775:5;;-1:-1:-1;;;;;7775:5:0;7761:10;:19;7753:41;;;;-1:-1:-1;;;7753:41:0;;;;;;;:::i;:::-;21529:16:::1;:38:::0;;-1:-1:-1;;;;;;21529:38:0::1;-1:-1:-1::0;;;;;21529:38:0;;;::::1;::::0;;;::::1;::::0;;21439:136::o;21087:235::-;7775:5;;-1:-1:-1;;;;;7775:5:0;7761:10;:19;7753:41;;;;-1:-1:-1;;;7753:41:0;;;;;;;:::i;:::-;21270:19:::1;:44:::0;;-1:-1:-1;;21270:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21087:235::o;11950:2256::-;8173:6;;;;8172:7;8164:33;;;;-1:-1:-1;;;8164:33:0;;4520:2:1;8164:33:0;;;4502:21:1;4559:2;4539:18;;;4532:30;-1:-1:-1;;;4578:18:1;;;4571:43;4631:18;;8164:33:0;4318:337:1;8164:33:0;8210:6;:13;;-1:-1:-1;;8210:13:0;8219:4;8210:13;;;;;;12196:19:::1;::::0;8210:13;12196:19:::1;:27;;;12187:37;;;::::0;::::1;;12395:2;12361:31;:36;:75;;;;;12435:1;12401:31;:35;12361:75;12352:85;;;::::0;::::1;;12544:28;12561:10;12544:16;:28::i;:::-;12536:37;;;::::0;::::1;;12698:13;;12685:9;:26;:56;;;;12728:13;;12715:9;:26;12685:56;:85;;;;12758:12;;12745:9;:25;12685:85;:114;;;;12787:12;;12774:9;:25;12685:114;12677:123;;;::::0;::::1;;12904:47;::::0;;;:18:::1;:47;::::0;;;;;;;:81;;;13119:10:::1;:39:::0;;;;;13161:9:::1;13119:51:::0;;;;13372:10:::1;13363:20:::0;;:8:::1;:20:::0;;;;;:32;13417:39;;;:10:::1;:39:::0;;;;;;::::1;;13416:40;13408:49;;;::::0;::::1;;13632:10;13646:1;13623:20:::0;;;:8:::1;:20;::::0;;;;;13615:33:::1;;;::::0;::::1;;-1:-1:-1::0;13988:6:0::1;:35:::0;;;::::1;::::0;;;;;;;:42;;14026:4:::1;-1:-1:-1::0;;13988:42:0;;::::1;::::0;::::1;::::0;;;14181:10:::1;14172:20:::0;;;;;;:24;;;;8246:6;:14;;;;;;;11950:2256::o;14214:1089::-;14282:7;14725:19;15041:2;15016:22;15023:14;15016:6;:22::i;:::-;:27;15012:253;;;15112:14;15095:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;15085:43;;;;;;15063:66;;15012:253;;;15207:2;15182:22;15189:14;15182:6;:22::i;:::-;:27;15174:79;;;;-1:-1:-1;;;15174:79:0;;5281:2:1;15174:79:0;;;5263:21:1;5320:2;5300:18;;;5293:30;5359:34;5339:18;;;5332:62;-1:-1:-1;;;5410:18:1;;;5403:37;5457:19;;15174:79:0;5079:403:1;8347:3591:0;8173:6;;8418:4;;8173:6;;8172:7;8164:33;;;;-1:-1:-1;;;8164:33:0;;4520:2:1;8164:33:0;;;4502:21:1;4559:2;4539:18;;;4532:30;-1:-1:-1;;;4578:18:1;;;4571:43;4631:18;;8164:33:0;4318:337:1;8164:33:0;8210:6;:13;;-1:-1:-1;;8210:13:0;8219:4;8210:13;;;8522:28:::1;8539:10;8522:16;:28::i;:::-;8514:37;;;::::0;::::1;;8910:19;8967:8;8950:26;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;8950:26:0;;::::1;::::0;;;;;;8940:37;;8950:26:::1;8940:37:::0;;::::1;::::0;9301:32:::1;9336:31:::0;;;:18:::1;:31:::0;;;;;;8940:37;;-1:-1:-1;9699:93:0::1;9755:10;9336:31:::0;9699:55:::1;:93::i;:::-;9691:102;;;::::0;::::1;;9916:10;21818:27:::0;21874:8;;;9895:33:::1;;;::::0;::::1;;10047:26;10076:23:::0;;;:10:::1;:23;::::0;;;;;10229:22;10220:32:::1;;;::::0;::::1;;10451:23;::::0;;;:10:::1;:23;::::0;;;;;::::1;;10450:24;10442:33;;;::::0;::::1;;10710:6;:19:::0;;;::::1;::::0;;;;;;;::::1;;10702:82;;;::::0;-1:-1:-1;;;10702:82:0;;5689:2:1;10702:82:0::1;::::0;::::1;5671:21:1::0;5728:2;5708:18;;;5701:30;5767:34;5747:18;;;5740:62;-1:-1:-1;;;5818:18:1;;;5811:48;5876:19;;10702:82:0::1;5487:414:1::0;10702:82:0::1;10912:25;10940:47;10968:18;10940:27;:47::i;:::-;11113:55;::::0;10912:75;;-1:-1:-1;11096:12:0::1;::::0;11121:10:::1;::::0;10912:75;;11096:12;11113:55;11096:12;11113:55;10912:75;11121:10;11113:55:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;11305:5:0::1;11283:19:::0;;;::::1;::::0;;;;;;;:27;;-1:-1:-1;;11283:27:0;;::::1;::::0;;;11637:10:::1;:23:::0;;;;;;:30;;;;::::1;11283:27:::0;11637:30:::1;::::0;;11095:73;-1:-1:-1;11799:47:0::1;11835:10;11799:35;:47::i;:::-;8246:6:::0;:14;;-1:-1:-1;;8246:14:0;;;11923:7;8347:3591;-1:-1:-1;;;;;;8347:3591:0:o;20156:490::-;7775:5;;-1:-1:-1;;;;;7775:5:0;7761:10;:19;7753:41;;;;-1:-1:-1;;;7753:41:0;;;;;;;:::i;:::-;20237:9;-1:-1:-1;;;;;7937:19:0;::::1;7929:49;;;::::0;-1:-1:-1;;;7929:49:0;;3777:2:1;7929:49:0::1;::::0;::::1;3759:21:1::0;3816:2;3796:18;;;3789:30;-1:-1:-1;;;3835:18:1;;;3828:47;3892:18;;7929:49:0::1;3575:341:1::0;7929:49:0::1;20318:6:::2;20313:188;20334:17;:24:::0;20330:28;::::2;20313:188;;;20416:9;-1:-1:-1::0;;;;;20392:33:0::2;:17;20410:1;20392:20;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;::::2;::::0;-1:-1:-1;;;;;20392:20:0::2;:33:::0;20389:101:::2;;20454:17;20472:1;20454:20;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;::::2;20447:27:::0;;-1:-1:-1;;;;;;20447:27:0::2;::::0;;20389:101:::2;20360:3:::0;::::2;::::0;::::2;:::i;:::-;;;;20313:188;;;-1:-1:-1::0;;;;;;;20615:23:0::2;;::::0;;;:12:::2;:23;::::0;;;;20608:30;20156:490::o;22044:174::-;22135:16;;22163:47;;-1:-1:-1;;;22163:47:0;;22186:10;22163:47;;;6694:51:1;6761:18;;;6754:34;;;-1:-1:-1;;;;;22135:16:0;;;;;;22163:22;;6667:18:1;;22163:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22084:134;22044:174;:::o;17766:879::-;17837:4;;;;18196:412;18217:17;:24;18213:28;;18196:412;;;18273:12;18295:17;18313:1;18295:20;;;;;;;;:::i;:::-;;;;;;;;;;;18352:30;;-1:-1:-1;;;18352:30:0;;-1:-1:-1;;;;;4085:32:1;;;18352:30:0;;;4067:51:1;18295:20:0;;;;-1:-1:-1;18295:20:0;;18352:15;;4040:18:1;;18352:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18331:51;;18509:12;:34;18522:17;18540:1;18522:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;18522:20:0;18509:34;;;;;;;;;;;;;18487:56;;18484:113;;18577:4;18565:16;;18484:113;-1:-1:-1;18243:3:0;;;;:::i;:::-;;;;18196:412;;;-1:-1:-1;18627:9:0;;17766:879;-1:-1:-1;;;17766:879:0:o;17103:534::-;17250:15;;17159:7;;;;;;17276:333;17294:10;17290:1;:14;17276:333;;;17328:8;17345:1;17348;17339:11;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;17339:11:0;;-1:-1:-1;;;;17369:8:0;;17365:233;;;17381:6;17386:1;17381:6;;:::i;:::-;;;17365:233;;;-1:-1:-1;;;;;;;;;17413:8:0;;;17409:189;;;17425:6;17430:1;17425:6;;:::i;17409:189::-;-1:-1:-1;;;;;;;;;17457:8:0;;;17453:145;;;17469:6;17474:1;17469:6;;:::i;17453:145::-;-1:-1:-1;;;;;;;;;17501:8:0;;;17497:101;;;17513:6;17518:1;17513:6;;:::i;17497:101::-;-1:-1:-1;;;;;;;;;17546:8:0;;;17542:56;;;17558:6;17563:1;17558:6;;:::i;17542:56::-;17589:6;17594:1;17589:6;;:::i;:::-;;;17542:56;-1:-1:-1;17306:5:0;;;;:::i;:::-;;;;17276:333;;18842:846;19377:16;;19426:30;;-1:-1:-1;;;19426:30:0;;-1:-1:-1;;;;;4085:32:1;;;19426:30:0;;;4067:51:1;18994:4:0;;;;;;19377:16;;;;;;19426:15;;4040:18:1;;19426:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19405:51;-1:-1:-1;19556:46:0;:35;19594:8;19556:46;:::i;:::-;19533:18;:70;19530:121;;19635:4;19623:16;;19530:121;-1:-1:-1;19670:9:0;;18842:846;-1:-1:-1;;;;18842:846:0:o;15622:379::-;15706:7;15728:17;15783:3;15770:10;;15748:19;:32;;;;:::i;:::-;:38;;;;:::i;:::-;15728:58;-1:-1:-1;15797:23:0;15823:31;15728:58;15823:19;:31;:::i;:::-;15797:57;;15931:29;15950:9;15931:18;:29::i;:::-;-1:-1:-1;15978:15:0;15622:379;-1:-1:-1;;;15622:379:0:o;22357:236::-;22500:16;;22528:57;;-1:-1:-1;;;22528:57:0;;-1:-1:-1;;;;;4085:32:1;;;22528:57:0;;;4067:51:1;22500:16:0;;;;;;22528:29;;4040:18:1;;22528:57:0;3921:203:1;16235:608:0;16303:4;;16446:16;16461:1;16446:12;:16;:::i;:::-;16501:14;;:46;;16422:40;;-1:-1:-1;16484:12:0;;-1:-1:-1;;;;;16501:14:0;;;;16422:40;;16484:12;16501:46;16484:12;16501:46;16422:40;16501:14;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16577:15:0;;:47;;16483:64;;-1:-1:-1;16559:13:0;;-1:-1:-1;;;;;16577:15:0;;;;16606:13;;16559;16577:47;16559:13;16577:47;16606:13;16577:15;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16558:66;;;16710:17;16730:7;:19;;;;;16741:8;16730:19;16710:39;16235:608;-1:-1:-1;;;;;;16235:608:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:1:o;451:260::-;519:6;527;580:2;568:9;559:7;555:23;551:32;548:52;;;596:1;593;586:12;548:52;619:29;638:9;619:29;:::i;:::-;609:39;;667:38;701:2;690:9;686:18;667:38;:::i;:::-;657:48;;451:260;;;;;:::o;898:186::-;957:6;1010:2;998:9;989:7;985:23;981:32;978:52;;;1026:1;1023;1016:12;978:52;1049:29;1068:9;1049:29;:::i;:::-;1039:39;898:186;-1:-1:-1;;;898:186:1:o;1281:273::-;1337:6;1390:2;1378:9;1369:7;1365:23;1361:32;1358:52;;;1406:1;1403;1396:12;1358:52;1445:9;1432:23;1498:5;1491:13;1484:21;1477:5;1474:32;1464:60;;1520:1;1517;1510:12;1559:248;1627:6;1635;1688:2;1676:9;1667:7;1663:23;1659:32;1656:52;;;1704:1;1701;1694:12;1656:52;-1:-1:-1;;1727:23:1;;;1797:2;1782:18;;;1769:32;;-1:-1:-1;1559:248:1:o;1812:127::-;1873:10;1868:3;1864:20;1861:1;1854:31;1904:4;1901:1;1894:15;1928:4;1925:1;1918:15;1944:922;2013:6;2066:2;2054:9;2045:7;2041:23;2037:32;2034:52;;;2082:1;2079;2072:12;2034:52;2122:9;2109:23;2151:18;2192:2;2184:6;2181:14;2178:34;;;2208:1;2205;2198:12;2178:34;2246:6;2235:9;2231:22;2221:32;;2291:7;2284:4;2280:2;2276:13;2272:27;2262:55;;2313:1;2310;2303:12;2262:55;2349:2;2336:16;2371:2;2367;2364:10;2361:36;;;2377:18;;:::i;:::-;2452:2;2446:9;2420:2;2506:13;;-1:-1:-1;;2502:22:1;;;2526:2;2498:31;2494:40;2482:53;;;2550:18;;;2570:22;;;2547:46;2544:72;;;2596:18;;:::i;:::-;2636:10;2632:2;2625:22;2671:2;2663:6;2656:18;2711:7;2706:2;2701;2697;2693:11;2689:20;2686:33;2683:53;;;2732:1;2729;2722:12;2683:53;2788:2;2783;2779;2775:11;2770:2;2762:6;2758:15;2745:46;2833:1;2811:15;;;2828:2;2807:24;2800:35;;;;-1:-1:-1;2815:6:1;1944:922;-1:-1:-1;;;;;1944:922:1:o;3053:180::-;3112:6;3165:2;3153:9;3144:7;3140:23;3136:32;3133:52;;;3181:1;3178;3171:12;3133:52;-1:-1:-1;3204:23:1;;3053:180;-1:-1:-1;3053:180:1:o;3238:332::-;3440:2;3422:21;;;3479:1;3459:18;;;3452:29;-1:-1:-1;;;3512:2:1;3497:18;;3490:39;3561:2;3546:18;;3238:332::o;4129:184::-;4199:6;4252:2;4240:9;4231:7;4227:23;4223:32;4220:52;;;4268:1;4265;4258:12;4220:52;-1:-1:-1;4291:16:1;;4129:184;-1:-1:-1;4129:184:1:o;4660:414::-;4791:3;4829:6;4823:13;4854:1;4864:129;4878:6;4875:1;4872:13;4864:129;;;4976:4;4960:14;;;4956:25;;4950:32;4937:11;;;4930:53;4893:12;4864:129;;;-1:-1:-1;5048:1:1;5012:16;;5037:13;;;-1:-1:-1;5012:16:1;4660:414;-1:-1:-1;4660:414:1:o;6116:127::-;6177:10;6172:3;6168:20;6165:1;6158:31;6208:4;6205:1;6198:15;6232:4;6229:1;6222:15;6248:127;6309:10;6304:3;6300:20;6297:1;6290:31;6340:4;6337:1;6330:15;6364:4;6361:1;6354:15;6380:135;6419:3;6440:17;;;6437:43;;6460:18;;:::i;:::-;-1:-1:-1;6507:1:1;6496:13;;6380:135::o;6799:125::-;6864:9;;;6885:10;;;6882:36;;;6898:18;;:::i;6929:168::-;7002:9;;;7033;;7050:15;;;7044:22;;7030:37;7020:71;;7071:18;;:::i;7102:217::-;7142:1;7168;7158:132;;7212:10;7207:3;7203:20;7200:1;7193:31;7247:4;7244:1;7237:15;7275:4;7272:1;7265:15;7158:132;-1:-1:-1;7304:9:1;;7102:217::o;7324:128::-;7391:9;;;7412:11;;;7409:37;;;7426:18;;:::i
Swarm Source
ipfs://8d3703733edf0f91747c96b2a7f97954fa2860235e5fff12170f2c199f1bddb7
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.
[ 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.