Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Add Game | 6022480 | 2395 days ago | IN | 0 ETH | 0.00601953 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
6170242 | 2370 days ago | 0.01 ETH | ||||
6170242 | 2370 days ago | 0.01 ETH | ||||
6168091 | 2371 days ago | 0.01 ETH | ||||
6168091 | 2371 days ago | 0.01 ETH | ||||
6073778 | 2386 days ago | 0.01 ETH | ||||
6073778 | 2386 days ago | 0.01 ETH | ||||
6072786 | 2387 days ago | 0.01 ETH | ||||
6072786 | 2387 days ago | 0.01 ETH | ||||
6072678 | 2387 days ago | 0.01 ETH | ||||
6072678 | 2387 days ago | 0.01 ETH | ||||
6072673 | 2387 days ago | 0.01 ETH | ||||
6072673 | 2387 days ago | 0.01 ETH | ||||
6072671 | 2387 days ago | 0.01 ETH | ||||
6072671 | 2387 days ago | 0.01 ETH | ||||
6072671 | 2387 days ago | 0.01 ETH | ||||
6072671 | 2387 days ago | 0.01 ETH | ||||
6072671 | 2387 days ago | 0.01 ETH | ||||
6072669 | 2387 days ago | 0.01 ETH | ||||
6072669 | 2387 days ago | 0.01 ETH | ||||
6072669 | 2387 days ago | 0.01 ETH | ||||
6072669 | 2387 days ago | 0.01 ETH | ||||
6072669 | 2387 days ago | 0.01 ETH | ||||
6072669 | 2387 days ago | 0.01 ETH | ||||
6072667 | 2387 days ago | 0.01 ETH | ||||
6072667 | 2387 days ago | 0.01 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
PlayerBook
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-07-25 */ pragma solidity ^0.4.24; /* * -PlayerBook - v0.3.14 * ┌┬┐┌─┐┌─┐┌┬┐ ╦╦ ╦╔═╗╔╦╗ ┌─┐┬─┐┌─┐┌─┐┌─┐┌┐┌┌┬┐┌─┐ * │ ├┤ ├─┤│││ ║║ ║╚═╗ ║ ├─┘├┬┘├┤ └─┐├┤ │││ │ └─┐ * ┴ └─┘┴ ┴┴ ┴ ╚╝╚═╝╚═╝ ╩ ┴ ┴└─└─┘└─┘└─┘┘└┘ ┴ └─┘ * _____ _____ * (, / /) /) /) (, / /) /) * ┌─┐ / _ (/_ // // / _ // _ __ _(/ * ├─┤ ___/___(/_/(__(_/_(/_(/_ ___/__/_)_(/_(_(_/ (_(_(_ * ┴ ┴ / / .-/ _____ (__ / * (__ / (_/ (, / /)™ * / __ __ __ __ _ __ __ _ _/_ _ _(/ * ┌─┐┬─┐┌─┐┌┬┐┬ ┬┌─┐┌┬┐ /__/ (_(__(_)/ (_/_)_(_)/ (_(_(_(__(/_(_(_ * ├─┘├┬┘│ │ │││ ││ │ (__ / .-/ © Jekyll Island Inc. 2018 * ┴ ┴└─└─┘─┴┘└─┘└─┘ ┴ (_/ * ______ _ ______ _ *====(_____ \=| |===============================(____ \===============| |=============* * _____) )| | _____ _ _ _____ ____ ____) ) ___ ___ | | _ * | ____/ | | (____ || | | || ___ | / ___) | __ ( / _ \ / _ \ | |_/ ) * | | | | / ___ || |_| || ____|| | | |__) )| |_| || |_| || _ ( *====|_|=======\_)\_____|=\__ ||_____)|_|======|______/==\___/==\___/=|_|=\_)=========* * (____/ * ╔═╗┌─┐┌┐┌┌┬┐┬─┐┌─┐┌─┐┌┬┐ ╔═╗┌─┐┌┬┐┌─┐ ┌──────────┐ * ║ │ ││││ │ ├┬┘├─┤│ │ ║ │ │ ││├┤ │ Inventor │ * ╚═╝└─┘┘└┘ ┴ ┴└─┴ ┴└─┘ ┴ ╚═╝└─┘─┴┘└─┘ └──────────┘ */ interface JIincForwarderInterface { function deposit() external payable returns(bool); function status() external view returns(address, address, bool); function startMigration(address _newCorpBank) external returns(bool); function cancelMigration() external returns(bool); function finishMigration() external returns(bool); function setup(address _firstCorpBank) external; } interface PlayerBookReceiverInterface { function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external; function receivePlayerNameList(uint256 _pID, bytes32 _name) external; } interface TeamJustInterface { function requiredSignatures() external view returns(uint256); function requiredDevSignatures() external view returns(uint256); function adminCount() external view returns(uint256); function devCount() external view returns(uint256); function adminName(address _who) external view returns(bytes32); function isAdmin(address _who) external view returns(bool); function isDev(address _who) external view returns(bool); } contract PlayerBook { using NameFilter for string; using SafeMath for uint256; // Hack 闭源合约 // JIincForwarderInterface constant private Jekyll_Island_Inc = JIincForwarderInterface(0x548e2295fc38b69000ff43a730933919b08c2562); TeamJustInterface constant private TeamJust = TeamJustInterface(0x1599470505ec590a2aa85ef8d7dfed7833a60831); address constant private reward = 0x30D4d6079829082e5A4bCaAbf6887362527B8838; MSFun.Data private msData; function multiSigDev(bytes32 _whatFunction) private returns (bool) {return(MSFun.multiSig(msData, TeamJust.requiredDevSignatures(), _whatFunction));} function deleteProposal(bytes32 _whatFunction) private {MSFun.deleteProposal(msData, _whatFunction);} function deleteAnyProposal(bytes32 _whatFunction) onlyDevs() public {MSFun.deleteProposal(msData, _whatFunction);} function checkData(bytes32 _whatFunction) onlyDevs() public view returns(bytes32, uint256) {return(MSFun.checkMsgData(msData, _whatFunction), MSFun.checkCount(msData, _whatFunction));} function checkSignersByAddress(bytes32 _whatFunction, uint256 _signerA, uint256 _signerB, uint256 _signerC) onlyDevs() public view returns(address, address, address) {return(MSFun.checkSigner(msData, _whatFunction, _signerA), MSFun.checkSigner(msData, _whatFunction, _signerB), MSFun.checkSigner(msData, _whatFunction, _signerC));} function checkSignersByName(bytes32 _whatFunction, uint256 _signerA, uint256 _signerB, uint256 _signerC) onlyDevs() public view returns(bytes32, bytes32, bytes32) {return(TeamJust.adminName(MSFun.checkSigner(msData, _whatFunction, _signerA)), TeamJust.adminName(MSFun.checkSigner(msData, _whatFunction, _signerB)), TeamJust.adminName(MSFun.checkSigner(msData, _whatFunction, _signerC)));} //============================================================================== // _| _ _|_ _ _ _ _|_ _ . // (_|(_| | (_| _\(/_ | |_||_) . //=============================|================================================ uint256 public registrationFee_ = 10 finney; // price to register a name mapping(uint256 => PlayerBookReceiverInterface) public games_; // mapping of our game interfaces for sending your account info to games mapping(address => bytes32) public gameNames_; // lookup a games name mapping(address => uint256) public gameIDs_; // lokup a games ID uint256 public gID_; // total number of games uint256 public pID_; // total number of players mapping (address => uint256) public pIDxAddr_; // (addr => pID) returns player id by address mapping (bytes32 => uint256) public pIDxName_; // (name => pID) returns player id by name mapping (uint256 => Player) public plyr_; // (pID => data) player data mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; // (pID => name => bool) list of names a player owns. (used so you can change your display name amoungst any name you own) mapping (uint256 => mapping (uint256 => bytes32)) public plyrNameList_; // (pID => nameNum => name) list of names a player owns struct Player { address addr; bytes32 name; uint256 laff; uint256 names; } //============================================================================== // _ _ _ __|_ _ __|_ _ _ . // (_(_)| |_\ | | |_|(_ | (_)| . (initial data setup upon contract deploy) //============================================================================== constructor() public { // premine the dev names (sorry not sorry) // No keys are purchased with this method, it's simply locking our addresses, // PID's and names for referral codes. plyr_[1].addr = 0x3D3B33b8F50AB9e8F5a9Ff369853F0e638450aDB; plyr_[1].name = "justo"; plyr_[1].names = 1; pIDxAddr_[0x3D3B33b8F50AB9e8F5a9Ff369853F0e638450aDB] = 1; pIDxName_["justo"] = 1; plyrNames_[1]["justo"] = true; plyrNameList_[1][1] = "justo"; plyr_[2].addr = 0xE54c005c9eF185CfE70209AD825301F9a84534A8; plyr_[2].name = "mantso"; plyr_[2].names = 1; pIDxAddr_[0xE54c005c9eF185CfE70209AD825301F9a84534A8] = 2; pIDxName_["mantso"] = 2; plyrNames_[2]["mantso"] = true; plyrNameList_[2][1] = "mantso"; plyr_[3].addr = 0x5f4D36184A3264454CACE497B0c346E9A51F5eaB; plyr_[3].name = "sumpunk"; plyr_[3].names = 1; pIDxAddr_[0x5f4D36184A3264454CACE497B0c346E9A51F5eaB] = 3; pIDxName_["sumpunk"] = 3; plyrNames_[3]["sumpunk"] = true; plyrNameList_[3][1] = "sumpunk"; plyr_[4].addr = 0x28C0F6142D1232C9E663e29cc0a6F8F087269373; plyr_[4].name = "inventor"; plyr_[4].names = 1; pIDxAddr_[0x28C0F6142D1232C9E663e29cc0a6F8F087269373] = 4; pIDxName_["inventor"] = 4; plyrNames_[4]["inventor"] = true; plyrNameList_[4][1] = "inventor"; pID_ = 4; } //============================================================================== // _ _ _ _|. |`. _ _ _ . // | | |(_)(_||~|~|(/_| _\ . (these are safety checks) //============================================================================== /** * @dev prevents contracts from interacting with fomo3d */ modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, "sorry humans only"); _; } modifier onlyDevs() { require(TeamJust.isDev(msg.sender) == true, "msg sender is not a dev"); _; } modifier isRegisteredGame() { require(gameIDs_[msg.sender] != 0); _; } //============================================================================== // _ _ _ _|_ _ . // (/_\/(/_| | | _\ . //============================================================================== // fired whenever a player registers a name event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); //============================================================================== // _ _ _|__|_ _ _ _ . // (_|(/_ | | (/_| _\ . (for UI & viewing things on etherscan) //=====_|======================================================================= function checkIfNameValid(string _nameStr) public view returns(bool) { bytes32 _name = _nameStr.nameFilter(); if (pIDxName_[_name] == 0) return (true); else return (false); } //============================================================================== // _ |_ |. _ |` _ __|_. _ _ _ . // |_)|_||_)||(_ ~|~|_|| |(_ | |(_)| |_\ . (use these to interact with contract) //====|========================================================================= /** * @dev registers a name. UI will always display the last name you registered. * but you will still own all previously registered names to use as affiliate * links. * - must pay a registration fee. * - name must be unique * - names will be converted to lowercase * - name cannot start or end with a space * - cannot have more than 1 space in a row * - cannot be only numbers * - cannot start with 0x * - name must be at least 1 char * - max length of 32 characters long * - allowed characters: a-z, 0-9, and space * -functionhash- 0x921dec21 (using ID for affiliate) * -functionhash- 0x3ddd4698 (using address for affiliate) * -functionhash- 0x685ffd83 (using name for affiliate) * @param _nameString players desired name * @param _affCode affiliate ID, address, or name of who refered you * @param _all set to true if you want this to push your info to all games * (this might cost a lot of gas) */ function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, "umm..... you have to pay the name fee"); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given, no new affiliate code was given, or the // player tried to use their own pID as an affiliate code, lolz if (_affCode != 0 && _affCode != plyr_[_pID].laff && _affCode != _pID) { // update last affiliate plyr_[_pID].laff = _affCode; } else if (_affCode == _pID) { _affCode = 0; } // register name registerNameCore(_pID, _addr, _affCode, _name, _isNewPlayer, _all); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, "umm..... you have to pay the name fee"); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != address(0) && _affCode != _addr) { // get affiliate ID from aff Code _affID = pIDxAddr_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, "umm..... you have to pay the name fee"); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != "" && _affCode != _name) { // get affiliate ID from aff Code _affID = pIDxName_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } /** * @dev players, if you registered a profile, before a game was released, or * set the all bool to false when you registered, use this function to push * your profile to a single game. also, if you've updated your name, you * can use this to push your name to games of your choosing. * -functionhash- 0x81c5b206 * @param _gameID game id */ function addMeToGame(uint256 _gameID) isHuman() public { require(_gameID <= gID_, "silly player, that game doesn't exist yet"); address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, "hey there buddy, you dont even have an account"); uint256 _totalNames = plyr_[_pID].names; // add players profile and most recent name games_[_gameID].receivePlayerInfo(_pID, _addr, plyr_[_pID].name, plyr_[_pID].laff); // add list of all names if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[_gameID].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } /** * @dev players, use this to push your player profile to all registered games. * -functionhash- 0x0c6940ea */ function addMeToAllGames() isHuman() public { address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, "hey there buddy, you dont even have an account"); uint256 _laff = plyr_[_pID].laff; uint256 _totalNames = plyr_[_pID].names; bytes32 _name = plyr_[_pID].name; for (uint256 i = 1; i <= gID_; i++) { games_[i].receivePlayerInfo(_pID, _addr, _name, _laff); if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[i].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } } /** * @dev players use this to change back to one of your old names. tip, you'll * still need to push that info to existing games. * -functionhash- 0xb9291296 * @param _nameString the name you want to use */ function useMyOldName(string _nameString) isHuman() public { // filter name, and get pID bytes32 _name = _nameString.nameFilter(); uint256 _pID = pIDxAddr_[msg.sender]; // make sure they own the name require(plyrNames_[_pID][_name] == true, "umm... thats not a name you own"); // update their current name plyr_[_pID].name = _name; } //============================================================================== // _ _ _ _ | _ _ . _ . // (_(_)| (/_ |(_)(_||(_ . //=====================_|======================================================= function registerNameCore(uint256 _pID, address _addr, uint256 _affID, bytes32 _name, bool _isNewPlayer, bool _all) private { // if names already has been used, require that current msg sender owns the name if (pIDxName_[_name] != 0) require(plyrNames_[_pID][_name] == true, "sorry that names already taken"); // add name to player profile, registry, and name book plyr_[_pID].name = _name; pIDxName_[_name] = _pID; if (plyrNames_[_pID][_name] == false) { plyrNames_[_pID][_name] = true; plyr_[_pID].names++; plyrNameList_[_pID][plyr_[_pID].names] = _name; } // registration fee goes directly to community rewards // Jekyll_Island_Inc.deposit.value(address(this).balance)(); reward.send(address(this).balance); // push player info to games if (_all == true) for (uint256 i = 1; i <= gID_; i++) games_[i].receivePlayerInfo(_pID, _addr, _name, _affID); // fire event emit onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, msg.value, now); } //============================================================================== // _|_ _ _ | _ . // | (_)(_)|_\ . //============================================================================== function determinePID(address _addr) private returns (bool) { if (pIDxAddr_[_addr] == 0) { pID_++; pIDxAddr_[_addr] = pID_; plyr_[pID_].addr = _addr; // set the new player bool to true return (true); } else { return (false); } } //============================================================================== // _ _|_ _ _ _ _ | _ _ || _ . // (/_>< | (/_| | |(_|| (_(_|||_\ . //============================================================================== function getPlayerID(address _addr) isRegisteredGame() external returns (uint256) { determinePID(_addr); return (pIDxAddr_[_addr]); } function getPlayerName(uint256 _pID) external view returns (bytes32) { return (plyr_[_pID].name); } function getPlayerLAff(uint256 _pID) external view returns (uint256) { return (plyr_[_pID].laff); } function getPlayerAddr(uint256 _pID) external view returns (address) { return (plyr_[_pID].addr); } function getNameFee() external view returns (uint256) { return(registrationFee_); } function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, "umm..... you have to pay the name fee"); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given, no new affiliate code was given, or the // player tried to use their own pID as an affiliate code, lolz uint256 _affID = _affCode; if (_affID != 0 && _affID != plyr_[_pID].laff && _affID != _pID) { // update last affiliate plyr_[_pID].laff = _affID; } else if (_affID == _pID) { _affID = 0; } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, "umm..... you have to pay the name fee"); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != address(0) && _affCode != _addr) { // get affiliate ID from aff Code _affID = pIDxAddr_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, "umm..... you have to pay the name fee"); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != "" && _affCode != _name) { // get affiliate ID from aff Code _affID = pIDxName_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } //============================================================================== // _ _ _|_ _ . // _\(/_ | |_||_) . //=============|================================================================ function addGame(address _gameAddress, string _gameNameStr) onlyDevs() public { require(gameIDs_[_gameAddress] == 0, "derp, that games already been registered"); if (multiSigDev("addGame") == true) {deleteProposal("addGame"); gID_++; bytes32 _name = _gameNameStr.nameFilter(); gameIDs_[_gameAddress] = gID_; gameNames_[_gameAddress] = _name; games_[gID_] = PlayerBookReceiverInterface(_gameAddress); games_[gID_].receivePlayerInfo(1, plyr_[1].addr, plyr_[1].name, 0); games_[gID_].receivePlayerInfo(2, plyr_[2].addr, plyr_[2].name, 0); games_[gID_].receivePlayerInfo(3, plyr_[3].addr, plyr_[3].name, 0); games_[gID_].receivePlayerInfo(4, plyr_[4].addr, plyr_[4].name, 0); } } function setRegistrationFee(uint256 _fee) onlyDevs() public { if (multiSigDev("setRegistrationFee") == true) {deleteProposal("setRegistrationFee"); registrationFee_ = _fee; } } } /** * @title -Name Filter- v0.1.9 * ┌┬┐┌─┐┌─┐┌┬┐ ╦╦ ╦╔═╗╔╦╗ ┌─┐┬─┐┌─┐┌─┐┌─┐┌┐┌┌┬┐┌─┐ * │ ├┤ ├─┤│││ ║║ ║╚═╗ ║ ├─┘├┬┘├┤ └─┐├┤ │││ │ └─┐ * ┴ └─┘┴ ┴┴ ┴ ╚╝╚═╝╚═╝ ╩ ┴ ┴└─└─┘└─┘└─┘┘└┘ ┴ └─┘ * _____ _____ * (, / /) /) /) (, / /) /) * ┌─┐ / _ (/_ // // / _ // _ __ _(/ * ├─┤ ___/___(/_/(__(_/_(/_(/_ ___/__/_)_(/_(_(_/ (_(_(_ * ┴ ┴ / / .-/ _____ (__ / * (__ / (_/ (, / /)™ * / __ __ __ __ _ __ __ _ _/_ _ _(/ * ┌─┐┬─┐┌─┐┌┬┐┬ ┬┌─┐┌┬┐ /__/ (_(__(_)/ (_/_)_(_)/ (_(_(_(__(/_(_(_ * ├─┘├┬┘│ │ │││ ││ │ (__ / .-/ © Jekyll Island Inc. 2018 * ┴ ┴└─└─┘─┴┘└─┘└─┘ ┴ (_/ * _ __ _ ____ ____ _ _ _____ ____ ___ *=============| |\ | / /\ | |\/| | |_ =====| |_ | | | | | | | |_ | |_)==============* *=============|_| \| /_/--\ |_| | |_|__=====|_| |_| |_|__ |_| |_|__ |_| \==============* * * ╔═╗┌─┐┌┐┌┌┬┐┬─┐┌─┐┌─┐┌┬┐ ╔═╗┌─┐┌┬┐┌─┐ ┌──────────┐ * ║ │ ││││ │ ├┬┘├─┤│ │ ║ │ │ ││├┤ │ Inventor │ * ╚═╝└─┘┘└┘ ┴ ┴└─┴ ┴└─┘ ┴ ╚═╝└─┘─┴┘└─┘ └──────────┘ */ library NameFilter { /** * @dev filters name strings * -converts uppercase to lower case. * -makes sure it does not start/end with a space * -makes sure it does not contain multiple spaces in a row * -cannot be only numbers * -cannot start with 0x * -restricts characters to A-Z, a-z, 0-9, and space. * @return reprocessed string in bytes32 format */ function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; //sorry limited to 32 characters require (_length <= 32 && _length > 0, "string must be between 1 and 32 characters"); // make sure it doesnt start with or end with space require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, "string cannot start or end with space"); // make sure first two characters are not 0x if (_temp[0] == 0x30) { require(_temp[1] != 0x78, "string cannot start with 0x"); require(_temp[1] != 0x58, "string cannot start with 0X"); } // create a bool to track if we have a non number character bool _hasNonNumber; // convert & check for (uint256 i = 0; i < _length; i++) { // if its uppercase A-Z if (_temp[i] > 0x40 && _temp[i] < 0x5b) { // convert to lower case a-z _temp[i] = byte(uint(_temp[i]) + 32); // we have a non number if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( // require character is a space _temp[i] == 0x20 || // OR lowercase a-z (_temp[i] > 0x60 && _temp[i] < 0x7b) || // or 0-9 (_temp[i] > 0x2f && _temp[i] < 0x3a), "string contains invalid characters" ); // make sure theres not 2x spaces in a row if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, "string cannot contain consecutive spaces"); // see if we have a character other than a number if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, "string cannot be only numbers"); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } /** * @title SafeMath v0.1.9 * @dev Math operations with safety checks that throw on error * change notes: original SafeMath library from OpenZeppelin modified by Inventor * - added sqrt * - added sq * - added pwr * - changed asserts to requires with error log outputs * - removed div, its useless */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, "SafeMath mul failed"); return c; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath sub failed"); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, "SafeMath add failed"); return c; } /** * @dev gives square root of given x. */ function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } /** * @dev gives square. multiplies x by x */ function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } /** * @dev x to the power of y */ function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } } /** @title -MSFun- v0.2.4 * ┌┬┐┌─┐┌─┐┌┬┐ ╦╦ ╦╔═╗╔╦╗ ┌─┐┬─┐┌─┐┌─┐┌─┐┌┐┌┌┬┐┌─┐ * │ ├┤ ├─┤│││ ║║ ║╚═╗ ║ ├─┘├┬┘├┤ └─┐├┤ │││ │ └─┐ * ┴ └─┘┴ ┴┴ ┴ ╚╝╚═╝╚═╝ ╩ ┴ ┴└─└─┘└─┘└─┘┘└┘ ┴ └─┘ * _____ _____ * (, / /) /) /) (, / /) /) * ┌─┐ / _ (/_ // // / _ // _ __ _(/ * ├─┤ ___/___(/_/(__(_/_(/_(/_ ___/__/_)_(/_(_(_/ (_(_(_ * ┴ ┴ / / .-/ _____ (__ / * (__ / (_/ (, / /)™ * / __ __ __ __ _ __ __ _ _/_ _ _(/ * ┌─┐┬─┐┌─┐┌┬┐┬ ┬┌─┐┌┬┐ /__/ (_(__(_)/ (_/_)_(_)/ (_(_(_(__(/_(_(_ * ├─┘├┬┘│ │ │││ ││ │ (__ / .-/ © Jekyll Island Inc. 2018 * ┴ ┴└─└─┘─┴┘└─┘└─┘ ┴ (_/ * _ _ _ _ _ _ _ _ _ _ _ *=(_) _ _ (_)==========_(_)(_)(_)(_)_==========(_)(_)(_)(_)(_)================================* * (_)(_) (_)(_) (_) (_) (_) _ _ _ _ _ _ * (_) (_)_(_) (_) (_)_ _ _ _ (_) _ _ (_) (_) (_)(_)(_)(_)_ * (_) (_) (_) (_)(_)(_)(_)_ (_)(_)(_)(_) (_) (_) (_) * (_) (_) _ _ _ (_) _ _ (_) (_) (_) (_) (_) _ _ *=(_)=========(_)=(_)(_)==(_)_ _ _ _(_)=(_)(_)==(_)======(_)_ _ _(_)_ (_)========(_)=(_)(_)==* * (_) (_) (_)(_) (_)(_)(_)(_) (_)(_) (_) (_)(_)(_) (_)(_) (_) (_)(_) * * ╔═╗┌─┐┌┐┌┌┬┐┬─┐┌─┐┌─┐┌┬┐ ╔═╗┌─┐┌┬┐┌─┐ ┌──────────┐ * ║ │ ││││ │ ├┬┘├─┤│ │ ║ │ │ ││├┤ │ Inventor │ * ╚═╝└─┘┘└┘ ┴ ┴└─┴ ┴└─┘ ┴ ╚═╝└─┘─┴┘└─┘ └──────────┘ * * ┌──────────────────────────────────────────────────────────────────────┐ * │ MSFun, is an importable library that gives your contract the ability │ * │ add multiSig requirement to functions. │ * └──────────────────────────────────────────────────────────────────────┘ * ┌────────────────────┐ * │ Setup Instructions │ * └────────────────────┘ * (Step 1) import the library into your contract * * import "./MSFun.sol"; * * (Step 2) set up the signature data for msFun * * MSFun.Data private msData; * ┌────────────────────┐ * │ Usage Instructions │ * └────────────────────┘ * at the beginning of a function * * function functionName() * { * if (MSFun.multiSig(msData, required signatures, "functionName") == true) * { * MSFun.deleteProposal(msData, "functionName"); * * // put function body here * } * } * ┌────────────────────────────────┐ * │ Optional Wrappers For TeamJust │ * └────────────────────────────────┘ * multiSig wrapper function (cuts down on inputs, improves readability) * this wrapper is HIGHLY recommended * * function multiSig(bytes32 _whatFunction) private returns (bool) {return(MSFun.multiSig(msData, TeamJust.requiredSignatures(), _whatFunction));} * function multiSigDev(bytes32 _whatFunction) private returns (bool) {return(MSFun.multiSig(msData, TeamJust.requiredDevSignatures(), _whatFunction));} * * wrapper for delete proposal (makes code cleaner) * * function deleteProposal(bytes32 _whatFunction) private {MSFun.deleteProposal(msData, _whatFunction);} * ┌────────────────────────────┐ * │ Utility & Vanity Functions │ * └────────────────────────────┘ * delete any proposal is highly recommended. without it, if an admin calls a multiSig * function, with argument inputs that the other admins do not agree upon, the function * can never be executed until the undesirable arguments are approved. * * function deleteAnyProposal(bytes32 _whatFunction) onlyDevs() public {MSFun.deleteProposal(msData, _whatFunction);} * * for viewing who has signed a proposal & proposal data * * function checkData(bytes32 _whatFunction) onlyAdmins() public view returns(bytes32, uint256) {return(MSFun.checkMsgData(msData, _whatFunction), MSFun.checkCount(msData, _whatFunction));} * * lets you check address of up to 3 signers (address) * * function checkSignersByAddress(bytes32 _whatFunction, uint256 _signerA, uint256 _signerB, uint256 _signerC) onlyAdmins() public view returns(address, address, address) {return(MSFun.checkSigner(msData, _whatFunction, _signerA), MSFun.checkSigner(msData, _whatFunction, _signerB), MSFun.checkSigner(msData, _whatFunction, _signerC));} * * same as above but will return names in string format. * * function checkSignersByName(bytes32 _whatFunction, uint256 _signerA, uint256 _signerB, uint256 _signerC) onlyAdmins() public view returns(bytes32, bytes32, bytes32) {return(TeamJust.adminName(MSFun.checkSigner(msData, _whatFunction, _signerA)), TeamJust.adminName(MSFun.checkSigner(msData, _whatFunction, _signerB)), TeamJust.adminName(MSFun.checkSigner(msData, _whatFunction, _signerC)));} * ┌──────────────────────────┐ * │ Functions In Depth Guide │ * └──────────────────────────┘ * In the following examples, the Data is the proposal set for this library. And * the bytes32 is the name of the function. * * MSFun.multiSig(Data, uint256, bytes32) - Manages creating/updating multiSig * proposal for the function being called. The uint256 is the required * number of signatures needed before the multiSig will return true. * Upon first call, multiSig will create a proposal and store the arguments * passed with the function call as msgData. Any admins trying to sign the * function call will need to send the same argument values. Once required * number of signatures is reached this will return a bool of true. * * MSFun.deleteProposal(Data, bytes32) - once multiSig unlocks the function body, * you will want to delete the proposal data. This does that. * * MSFun.checkMsgData(Data, bytes32) - checks the message data for any given proposal * * MSFun.checkCount(Data, bytes32) - checks the number of admins that have signed * the proposal * * MSFun.checkSigners(data, bytes32, uint256) - checks the address of a given signer. * the uint256, is the log number of the signer (ie 1st signer, 2nd signer) */ library MSFun { //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // DATA SETS //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // contact data setup struct Data { mapping (bytes32 => ProposalData) proposal_; } struct ProposalData { // a hash of msg.data bytes32 msgData; // number of signers uint256 count; // tracking of wither admins have signed mapping (address => bool) admin; // list of admins who have signed mapping (uint256 => address) log; } //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // MULTI SIG FUNCTIONS //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function multiSig(Data storage self, uint256 _requiredSignatures, bytes32 _whatFunction) internal returns(bool) { // our proposal key will be a hash of our function name + our contracts address // by adding our contracts address to this, we prevent anyone trying to circumvent // the proposal's security via external calls. bytes32 _whatProposal = whatProposal(_whatFunction); // this is just done to make the code more readable. grabs the signature count uint256 _currentCount = self.proposal_[_whatProposal].count; // store the address of the person sending the function call. we use msg.sender // here as a layer of security. in case someone imports our contract and tries to // circumvent function arguments. still though, our contract that imports this // library and calls multisig, needs to use onlyAdmin modifiers or anyone who // calls the function will be a signer. address _whichAdmin = msg.sender; // prepare our msg data. by storing this we are able to verify that all admins // are approving the same argument input to be executed for the function. we hash // it and store in bytes32 so its size is known and comparable bytes32 _msgData = keccak256(msg.data); // check to see if this is a new execution of this proposal or not if (_currentCount == 0) { // if it is, lets record the original signers data self.proposal_[_whatProposal].msgData = _msgData; // record original senders signature self.proposal_[_whatProposal].admin[_whichAdmin] = true; // update log (used to delete records later, and easy way to view signers) // also useful if the calling function wants to give something to a // specific signer. self.proposal_[_whatProposal].log[_currentCount] = _whichAdmin; // track number of signatures self.proposal_[_whatProposal].count += 1; // if we now have enough signatures to execute the function, lets // return a bool of true. we put this here in case the required signatures // is set to 1. if (self.proposal_[_whatProposal].count == _requiredSignatures) { return(true); } // if its not the first execution, lets make sure the msgData matches } else if (self.proposal_[_whatProposal].msgData == _msgData) { // msgData is a match // make sure admin hasnt already signed if (self.proposal_[_whatProposal].admin[_whichAdmin] == false) { // record their signature self.proposal_[_whatProposal].admin[_whichAdmin] = true; // update log (used to delete records later, and easy way to view signers) self.proposal_[_whatProposal].log[_currentCount] = _whichAdmin; // track number of signatures self.proposal_[_whatProposal].count += 1; } // if we now have enough signatures to execute the function, lets // return a bool of true. // we put this here for a few reasons. (1) in normal operation, if // that last recorded signature got us to our required signatures. we // need to return bool of true. (2) if we have a situation where the // required number of signatures was adjusted to at or lower than our current // signature count, by putting this here, an admin who has already signed, // can call the function again to make it return a true bool. but only if // they submit the correct msg data if (self.proposal_[_whatProposal].count == _requiredSignatures) { return(true); } } } // deletes proposal signature data after successfully executing a multiSig function function deleteProposal(Data storage self, bytes32 _whatFunction) internal { //done for readability sake bytes32 _whatProposal = whatProposal(_whatFunction); address _whichAdmin; //delete the admins votes & log. i know for loops are terrible. but we have to do this //for our data stored in mappings. simply deleting the proposal itself wouldn't accomplish this. for (uint256 i=0; i < self.proposal_[_whatProposal].count; i++) { _whichAdmin = self.proposal_[_whatProposal].log[i]; delete self.proposal_[_whatProposal].admin[_whichAdmin]; delete self.proposal_[_whatProposal].log[i]; } //delete the rest of the data in the record delete self.proposal_[_whatProposal]; } //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // HELPER FUNCTIONS //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function whatProposal(bytes32 _whatFunction) private view returns(bytes32) { return(keccak256(abi.encodePacked(_whatFunction,this))); } //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // VANITY FUNCTIONS //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // returns a hashed version of msg.data sent by original signer for any given function function checkMsgData (Data storage self, bytes32 _whatFunction) internal view returns (bytes32 msg_data) { bytes32 _whatProposal = whatProposal(_whatFunction); return (self.proposal_[_whatProposal].msgData); } // returns number of signers for any given function function checkCount (Data storage self, bytes32 _whatFunction) internal view returns (uint256 signature_count) { bytes32 _whatProposal = whatProposal(_whatFunction); return (self.proposal_[_whatProposal].count); } // returns address of an admin who signed for any given function function checkSigner (Data storage self, bytes32 _whatFunction, uint256 _signer) internal view returns (address signer) { require(_signer > 0, "MSFun checkSigner failed - 0 not allowed"); bytes32 _whatProposal = whatProposal(_whatFunction); return (self.proposal_[_whatProposal].log[_signer - 1]); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[],"name":"addMeToAllGames","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_whatFunction","type":"bytes32"}],"name":"deleteAnyProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"pIDxAddr_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"registrationFee_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getNameFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"bytes32"}],"name":"plyrNames_","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"gameNames_","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"pIDxName_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"address"},{"name":"_all","type":"bool"}],"name":"registerNameXaddr","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_gameAddress","type":"address"},{"name":"_gameNameStr","type":"string"}],"name":"addGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pID_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_pID","type":"uint256"}],"name":"getPlayerAddr","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"bytes32"},{"name":"_all","type":"bool"}],"name":"registerNameXname","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_nameStr","type":"string"}],"name":"checkIfNameValid","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_name","type":"bytes32"},{"name":"_affCode","type":"bytes32"},{"name":"_all","type":"bool"}],"name":"registerNameXnameFromDapp","outputs":[{"name":"","type":"bool"},{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_whatFunction","type":"bytes32"},{"name":"_signerA","type":"uint256"},{"name":"_signerB","type":"uint256"},{"name":"_signerC","type":"uint256"}],"name":"checkSignersByAddress","outputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_gameID","type":"uint256"}],"name":"addMeToGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_pID","type":"uint256"}],"name":"getPlayerName","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"uint256"},{"name":"_all","type":"bool"}],"name":"registerNameXID","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"plyrNameList_","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_whatFunction","type":"bytes32"}],"name":"checkData","outputs":[{"name":"","type":"bytes32"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_name","type":"bytes32"},{"name":"_affCode","type":"address"},{"name":"_all","type":"bool"}],"name":"registerNameXaddrFromDapp","outputs":[{"name":"","type":"bool"},{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"}],"name":"useMyOldName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gID_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_name","type":"bytes32"},{"name":"_affCode","type":"uint256"},{"name":"_all","type":"bool"}],"name":"registerNameXIDFromDapp","outputs":[{"name":"","type":"bool"},{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_fee","type":"uint256"}],"name":"setRegistrationFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"games_","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"gameIDs_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"plyr_","outputs":[{"name":"addr","type":"address"},{"name":"name","type":"bytes32"},{"name":"laff","type":"uint256"},{"name":"names","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_pID","type":"uint256"}],"name":"getPlayerLAff","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"getPlayerID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_whatFunction","type":"bytes32"},{"name":"_signerA","type":"uint256"},{"name":"_signerB","type":"uint256"},{"name":"_signerC","type":"uint256"}],"name":"checkSignersByName","outputs":[{"name":"","type":"bytes32"},{"name":"","type":"bytes32"},{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerID","type":"uint256"},{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":true,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"isNewPlayer","type":"bool"},{"indexed":false,"name":"affiliateID","type":"uint256"},{"indexed":false,"name":"affiliateAddress","type":"address"},{"indexed":false,"name":"affiliateName","type":"bytes32"},{"indexed":false,"name":"amountPaid","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onNewName","type":"event"}]
Contract Creation Code
6080604052662386f26fc1000060015534801561001b57600080fd5b507f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a368054600160a060020a0319908116733d3b33b8f50ab9e8f5a9ff369853f0e638450adb179091557f6a7573746f0000000000000000000000000000000000000000000000000000007f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3781905560017f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a398190557f9ce3ac1204cd1f89e7720f62d3017c8dbc4121337868ded9859a84f6d2ad99f48190557f762d6d82485f8ba728a5500d760dfdb7168471b2894400e1df49c93b495b4f888190557f16d8e9bd91f15d01a7566839f41a231f80f11c69224644ab0930ac26636557c7805460ff1990811683179091557f6bd9ce7c7c44b510ee825857e9b7d0dbc77ffc0dcbb487d9763a092e420c9a18929092557f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c38054841673e54c005c9ef185cfe70209ad825301f9a84534a81790557f6d616e74736f00000000000000000000000000000000000000000000000000007f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c48190557f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c682905560027fa952e105dbb2ef21af560e81c70dff08911caa7f1c47c79f5df1433fd8396d8f8190557f6580451f8c1533c98975a12cfa65f28f7e3151f60699355b6b7674c57d81c21a557fe8fcf9acd692d87e1f7051e6b260929b78ae5d958b2e3fdea5b77a29f79fd95080548416831790557f5ec873723cdc64ab6619ea2fcbca33beef9a820510f97aa9ecb9e3ff0f638853557fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e780548416735f4d36184a3264454cace497b0c346e9a51f5eab1790557f73756d70756e6b000000000000000000000000000000000000000000000000007fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e88190557fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61ea82905560037f28c2d145e68e313036ac3c07965818a55059a0dc451e91a71a6930995dd7c4d58190557f26bda8dc9fb5cccb812d17f150de8a6180eab480db7f39d0f264318349138645557f41d6a92976668d608e8cb8d112aced96732d01f6081942e52ea08ab8277f341880548416831790557f960add1d2a4af75b2cd16bfb54d92ee5d4c29427a1bf605fa9b667906b27d701557f8dc18c4ccfd75f5c815b63770fa542fd953e8fef7e0e44bbdd4913470ce7e9cb80549093167328c0f6142d1232c9e663e29cc0a6f8f087269373179092557f696e76656e746f720000000000000000000000000000000000000000000000007f8dc18c4ccfd75f5c815b63770fa542fd953e8fef7e0e44bbdd4913470ce7e9cc8190557f8dc18c4ccfd75f5c815b63770fa542fd953e8fef7e0e44bbdd4913470ce7e9ce83905560047f626076a25876ee7e9b066d898780539c6aa3500ffae97408617a6d1067e3973b8190557f3b067eeadfc88d599c85e61eaac8075a0e270e6830b20fa50e1f309ebbfe9c468190557fa766fb1d802397cd20bbb5606a44354e813d310108e6e51ed92a4ae966722d53805490931684179092556000929092527f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c7846020527f2c4ff72984b96d6e24887abcd47b1c2fb2b1bd600b7f7d037d1a2ac35568baab919091556006556132a78061055a6000396000f30060806040526004361061017c5763ffffffff60e060020a6000350416630c6940ea81146101815780630efcf2951461019857806310f01eba146101b0578063180603eb146101e35780632614195f146101f85780632660316e1461020d57806327249e611461023c5780632e19ebdc1461025d5780633ddd4698146102755780633fda926e146102d15780634b227176146103385780634d0d35ff1461034d578063685ffd83146103815780636c52660d146103d4578063745ea0c11461042d578063768f930d1461046757806381c5b206146104b357806382e37b2c146104cb578063921dec21146104e3578063a448ed4b14610536578063a553506e14610551578063aa4d490b14610582578063b9291296146105a5578063b9eca0c8146105fe578063c0942dfd14610613578063c320c72714610632578063d52412791461064a578063dbbcaa9714610662578063de7874f314610683578063e3c08adf146106cb578063e56556a9146106e3578063ed3643d614610704575b600080fd5b34801561018d57600080fd5b50610196610743565b005b3480156101a457600080fd5b506101966004356109b1565b3480156101bc57600080fd5b506101d1600160a060020a0360043516610a88565b60408051918252519081900360200190f35b3480156101ef57600080fd5b506101d1610a9a565b34801561020457600080fd5b506101d1610aa0565b34801561021957600080fd5b50610228600435602435610aa6565b604080519115158252519081900360200190f35b34801561024857600080fd5b506101d1600160a060020a0360043516610ac6565b34801561026957600080fd5b506101d1600435610ad8565b6040805160206004803580820135601f810184900484028501840190955284845261019694369492936024939284019190819084018382808284375094975050600160a060020a03853516955050505050602001351515610aea565b3480156102dd57600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610196958335600160a060020a0316953695604494919390910191908190840183828082843750949750610c549650505050505050565b34801561034457600080fd5b506101d16111c0565b34801561035957600080fd5b506103656004356111c6565b60408051600160a060020a039092168252519081900360200190f35b6040805160206004803580820135601f81018490048402850184019095528484526101969436949293602493928401919081908401838280828437509497505084359550505050506020013515156111e4565b3480156103e057600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102289436949293602493928401919081908401838280828437509497506113229650505050505050565b61044c600160a060020a0360043516602435604435606435151561135a565b60408051921515835260208301919091528051918290030190f35b34801561047357600080fd5b5061048860043560243560443560643561146e565b60408051600160a060020a039485168152928416602084015292168183015290519081900360600190f35b3480156104bf57600080fd5b50610196600435611572565b3480156104d757600080fd5b506101d160043561183f565b6040805160206004803580820135601f8101849004840285018401909552848452610196943694929360249392840191908190840183828082843750949750508435955050505050602001351515611854565b34801561054257600080fd5b506101d1600435602435611996565b34801561055d57600080fd5b506105696004356119b3565b6040805192835260208301919091528051918290030190f35b61044c600160a060020a0360043581169060243590604435166064351515611a9f565b3480156105b157600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610196943694929360249392840191908190840183828082843750949750611bc29650505050505050565b34801561060a57600080fd5b506101d1611cb4565b61044c600160a060020a03600435166024356044356064351515611cba565b34801561063e57600080fd5b50610196600435611dc6565b34801561065657600080fd5b50610365600435611ef0565b34801561066e57600080fd5b506101d1600160a060020a0360043516611f0b565b34801561068f57600080fd5b5061069b600435611f1d565b60408051600160a060020a0390951685526020850193909352838301919091526060830152519081900360800190f35b3480156106d757600080fd5b506101d1600435611f4e565b3480156106ef57600080fd5b506101d1600160a060020a0360043516611f63565b34801561071057600080fd5b50610725600435602435604435606435611fa4565b60408051938452602084019290925282820152519081900360600190f35b600080808080808033803b8015610792576040805160e560020a62461bcd028152602060048201526011602482015260008051602061325c833981519152604482015290519081900360640190fd5b336000818152600760205260409020549099509750871515610824576040805160e560020a62461bcd02815260206004820152602e60248201527f6865792074686572652062756464792c20796f7520646f6e74206576656e206860448201527f61766520616e206163636f756e74000000000000000000000000000000000000606482015290519081900360840190fd5b6000888152600960205260409020600281015460038201546001928301549199509750955093505b60055484116109a65760008481526002602052604080822054815160e060020a6349cc635d028152600481018c9052600160a060020a038d81166024830152604482018a9052606482018c9052925192909116926349cc635d9260848084019382900301818387803b1580156108c157600080fd5b505af11580156108d5573d6000803e3d6000fd5b50505050600186111561099b57600192505b85831161099b576000848152600260209081526040808320548b8452600b83528184208785529092528083205481517f8f7140ea000000000000000000000000000000000000000000000000000000008152600481018d905260248101919091529051600160a060020a0390921692638f7140ea9260448084019382900301818387803b15801561097757600080fd5b505af115801561098b573d6000803e3d6000fd5b5050600190940193506108e79050565b60019093019261084c565b505050505050505050565b6040805160e060020a630c3f64bf0281523360048201529051731599470505ec590a2aa85ef8d7dfed7833a6083191630c3f64bf9160248083019260209291908290030181600087803b158015610a0757600080fd5b505af1158015610a1b573d6000803e3d6000fd5b505050506040513d6020811015610a3157600080fd5b50511515600114610a7a576040805160e560020a62461bcd028152602060048201526017602482015260008051602061321c833981519152604482015290519081900360640190fd5b610a8560008261225b565b50565b60076020526000908152604090205481565b60015481565b60015490565b600a60209081526000928352604080842090915290825290205460ff1681565b60036020526000908152604090205481565b60086020526000908152604090205481565b60008080808033803b8015610b37576040805160e560020a62461bcd028152602060048201526011602482015260008051602061325c833981519152604482015290519081900360640190fd5b600154341015610b93576040805160e560020a62461bcd02815260206004820152602660248201526000805160206131fc833981519152604482015260008051602061323c833981519152606482015290519081900360840190fd5b610b9c8a61230d565b9650339550610baa86612b20565b600160a060020a03808816600090815260076020526040902054919650909450891615801590610bec575085600160a060020a031689600160a060020a031614155b15610c3a57600160a060020a0389166000908152600760209081526040808320548784526009909252909120600201549093508314610c3a5760008481526009602052604090206002018390555b610c488487858a898d612ba2565b50505050505050505050565b6040805160e060020a630c3f64bf0281523360048201529051600091731599470505ec590a2aa85ef8d7dfed7833a6083191630c3f64bf9160248082019260209290919082900301818787803b158015610cad57600080fd5b505af1158015610cc1573d6000803e3d6000fd5b505050506040513d6020811015610cd757600080fd5b50511515600114610d20576040805160e560020a62461bcd028152602060048201526017602482015260008051602061321c833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526004602052604090205415610db4576040805160e560020a62461bcd02815260206004820152602860248201527f646572702c20746861742067616d657320616c7265616479206265656e20726560448201527f6769737465726564000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b610ddd7f61646447616d6500000000000000000000000000000000000000000000000000612e17565b1515600114156111bb57610e107f61646447616d6500000000000000000000000000000000000000000000000000610a7a565b600580546001019055610e228261230d565b60058054600160a060020a03808716600081815260046020818152604080842096909655600381528583208890558654835260028152858320805473ffffffffffffffffffffffffffffffffffffffff19169094179093559454815283812054600180835260099093527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a36547f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3754865160e060020a6349cc635d0281529788019490945284166024870152604486019290925260648501819052925194955016926349cc635d92608480820193929182900301818387803b158015610f2657600080fd5b505af1158015610f3a573d6000803e3d6000fd5b505060055460009081526002602081815260408084205483855260099092527f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c3547f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c454825160e060020a6349cc635d0281526004810195909552600160a060020a0391821660248601526044850152606484018590529051911694506349cc635d93506084808301939282900301818387803b158015610ff957600080fd5b505af115801561100d573d6000803e3d6000fd5b5050600554600090815260026020908152604080832054600380855260099093527fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e7547fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e854835160e060020a6349cc635d0281526004810195909552600160a060020a0391821660248601526044850152606484018590529151911694506349cc635d93506084808301939282900301818387803b1580156110ce57600080fd5b505af11580156110e2573d6000803e3d6000fd5b5050600554600090815260026020908152604080832054600480855260099093527f8dc18c4ccfd75f5c815b63770fa542fd953e8fef7e0e44bbdd4913470ce7e9cb547f8dc18c4ccfd75f5c815b63770fa542fd953e8fef7e0e44bbdd4913470ce7e9cc54835160e060020a6349cc635d02815280860195909552600160a060020a0391821660248601526044850152606484018590529151911694506349cc635d93506084808301939282900301818387803b1580156111a257600080fd5b505af11580156111b6573d6000803e3d6000fd5b505050505b505050565b60065481565b600081815260096020526040902054600160a060020a03165b919050565b60008080808033803b8015611231576040805160e560020a62461bcd028152602060048201526011602482015260008051602061325c833981519152604482015290519081900360640190fd5b60015434101561128d576040805160e560020a62461bcd02815260206004820152602660248201526000805160206131fc833981519152604482015260008051602061323c833981519152606482015290519081900360840190fd5b6112968a61230d565b96503395506112a486612b20565b600160a060020a038716600090815260076020526040902054909550935088158015906112d15750888714155b15610c3a576000898152600860209081526040808320548784526009909252909120600201549093508314610c3a576000848152600960205260409020600201839055610c488487858a898d612ba2565b60008061132e8361230d565b600081815260086020526040902054909150151561134f5760019150611354565b600091505b50919050565b336000908152600460205260408120548190819081908190151561137d57600080fd5b6001543410156113d9576040805160e560020a62461bcd02815260206004820152602660248201526000805160206131fc833981519152604482015260008051602061323c833981519152606482015290519081900360840190fd5b6113e289612b20565b600160a060020a038a166000908152600760205260409020549093509150861580159061140f5750868814155b15611451575060008681526008602090815260408083205484845260099092529091206002015481146114515760008281526009602052604090206002018190555b61145f828a838b878b612ba2565b91989197509095505050505050565b6040805160e060020a630c3f64bf028152336004820152905160009182918291731599470505ec590a2aa85ef8d7dfed7833a6083191630c3f64bf9160248082019260209290919082900301818787803b1580156114cb57600080fd5b505af11580156114df573d6000803e3d6000fd5b505050506040513d60208110156114f557600080fd5b5051151560011461153e576040805160e560020a62461bcd028152602060048201526017602482015260008051602061321c833981519152604482015290519081900360640190fd5b61154a60008888612ea8565b61155660008988612ea8565b61156260008a88612ea8565b9250925092509450945094915050565b600080808033803b80156115be576040805160e560020a62461bcd028152602060048201526011602482015260008051602061325c833981519152604482015290519081900360640190fd5b60055487111561163e576040805160e560020a62461bcd02815260206004820152602960248201527f73696c6c7920706c617965722c20746861742067616d6520646f65736e27742060448201527f6578697374207965740000000000000000000000000000000000000000000000606482015290519081900360840190fd5b3360008181526007602052604090205490965094508415156116d0576040805160e560020a62461bcd02815260206004820152602e60248201527f6865792074686572652062756464792c20796f7520646f6e74206576656e206860448201527f61766520616e206163636f756e74000000000000000000000000000000000000606482015290519081900360840190fd5b600085815260096020818152604080842060038101548c86526002808552838720548c88529590945260018201549390910154825160e060020a6349cc635d028152600481018c9052600160a060020a038d8116602483015260448201959095526064810191909152915190985091909216926349cc635d926084808201939182900301818387803b15801561176557600080fd5b505af1158015611779573d6000803e3d6000fd5b5050505060018411156111b657600192505b8383116111b657600087815260026020908152604080832054888452600b83528184208785529092528083205481517f8f7140ea000000000000000000000000000000000000000000000000000000008152600481018a905260248101919091529051600160a060020a0390921692638f7140ea9260448084019382900301818387803b15801561181b57600080fd5b505af115801561182f573d6000803e3d6000fd5b50506001909401935061178b9050565b60009081526009602052604090206001015490565b600080808033803b80156118a0576040805160e560020a62461bcd028152602060048201526011602482015260008051602061325c833981519152604482015290519081900360640190fd5b6001543410156118fc576040805160e560020a62461bcd02815260206004820152602660248201526000805160206131fc833981519152604482015260008051602061323c833981519152606482015290519081900360840190fd5b6119058961230d565b955033945061191385612b20565b600160a060020a0386166000908152600760205260409020549094509250871580159061195157506000838152600960205260409020600201548814155b801561195d5750828814155b1561197b576000838152600960205260409020600201889055611988565b8288141561198857600097505b6109a683868a89888c612ba2565b600b60209081526000928352604080842090915290825290205481565b6040805160e060020a630c3f64bf02815233600482015290516000918291731599470505ec590a2aa85ef8d7dfed7833a6083191630c3f64bf91602480830192602092919082900301818787803b158015611a0d57600080fd5b505af1158015611a21573d6000803e3d6000fd5b505050506040513d6020811015611a3757600080fd5b50511515600114611a80576040805160e560020a62461bcd028152602060048201526017602482015260008051602061321c833981519152604482015290519081900360640190fd5b611a8b600084612f65565b611a96600085612f89565b91509150915091565b3360009081526004602052604081205481908190819081901515611ac257600080fd5b600154341015611b1e576040805160e560020a62461bcd02815260206004820152602660248201526000805160206131fc833981519152604482015260008051602061323c833981519152606482015290519081900360840190fd5b611b2789612b20565b600160a060020a03808b16600090815260076020526040902054919450909250871615801590611b69575088600160a060020a031687600160a060020a031614155b156114515750600160a060020a038616600090815260076020908152604080832054848452600990925290912060020154811461145157600082815260096020526040902060020181905561145f828a838b878b612ba2565b60008033803b8015611c0c576040805160e560020a62461bcd028152602060048201526011602482015260008051602061325c833981519152604482015290519081900360640190fd5b611c158561230d565b33600090815260076020908152604080832054808452600a835281842085855290925290912054919550935060ff161515600114611c9d576040805160e560020a62461bcd02815260206004820152601f60248201527f756d6d2e2e2e207468617473206e6f742061206e616d6520796f75206f776e00604482015290519081900360640190fd5b505060009081526009602052604090206001015550565b60055481565b3360009081526004602052604081205481908190819081901515611cdd57600080fd5b600154341015611d39576040805160e560020a62461bcd02815260206004820152602660248201526000805160206131fc833981519152604482015260008051602061323c833981519152606482015290519081900360840190fd5b611d4289612b20565b600160a060020a038a1660009081526007602052604090205490935091508690508015801590611d8357506000828152600960205260409020600201548114155b8015611d8f5750818114155b15611dad576000828152600960205260409020600201819055611451565b818114156114515750600061145f828a838b878b612ba2565b6040805160e060020a630c3f64bf0281523360048201529051731599470505ec590a2aa85ef8d7dfed7833a6083191630c3f64bf9160248083019260209291908290030181600087803b158015611e1c57600080fd5b505af1158015611e30573d6000803e3d6000fd5b505050506040513d6020811015611e4657600080fd5b50511515600114611e8f576040805160e560020a62461bcd028152602060048201526017602482015260008051602061321c833981519152604482015290519081900360640190fd5b611eb87f736574526567697374726174696f6e4665650000000000000000000000000000612e17565b151560011415610a8557611eeb7f736574526567697374726174696f6e4665650000000000000000000000000000610a7a565b600155565b600260205260009081526040902054600160a060020a031681565b60046020526000908152604090205481565b6009602052600090815260409020805460018201546002830154600390930154600160a060020a0390921692909184565b60009081526009602052604090206002015490565b336000908152600460205260408120541515611f7e57600080fd5b611f8782612b20565b5050600160a060020a031660009081526007602052604090205490565b6040805160e060020a630c3f64bf028152336004820152905160009182918291731599470505ec590a2aa85ef8d7dfed7833a6083191630c3f64bf9160248082019260209290919082900301818787803b15801561200157600080fd5b505af1158015612015573d6000803e3d6000fd5b505050506040513d602081101561202b57600080fd5b50511515600114612074576040805160e560020a62461bcd028152602060048201526017602482015260008051602061321c833981519152604482015290519081900360640190fd5b731599470505ec590a2aa85ef8d7dfed7833a6083163af1c084d61209a60008a8a612ea8565b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b1580156120e557600080fd5b505af11580156120f9573d6000803e3d6000fd5b505050506040513d602081101561210f57600080fd5b5051731599470505ec590a2aa85ef8d7dfed7833a6083163af1c084d61213760008b8a612ea8565b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561218257600080fd5b505af1158015612196573d6000803e3d6000fd5b505050506040513d60208110156121ac57600080fd5b5051731599470505ec590a2aa85ef8d7dfed7833a6083163af1c084d6121d460008c8a612ea8565b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561221f57600080fd5b505af1158015612233573d6000803e3d6000fd5b505050506040513d602081101561224957600080fd5b50519199909850909650945050505050565b600080600061226984612fb0565b9250600090505b6000838152602086905260409020600101548110156122f257600083815260208681526040808320848452600381018084528285208054600160a060020a031680875260029093018552928520805460ff191690559385905292909152805473ffffffffffffffffffffffffffffffffffffffff191690559150600101612270565b50506000908152602092909252506040812081815560010155565b80516000908290828080602084118015906123285750600084115b15156123a4576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b8460008151811015156123b357fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021415801561241a575084600185038151811015156123f257fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515612496576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8460008151811015156124a557fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a0214156125e8578460018151811015156124df57fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a021415151561255c576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b84600181518110151561256b57fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a02141515156125e8576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b83821015612ab85784517f40000000000000000000000000000000000000000000000000000000000000009086908490811061262557fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015612699575084517f5b000000000000000000000000000000000000000000000000000000000000009086908490811061267a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b156127065784828151811015156126ac57fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a0285838151811015156126dd57fe5b906020010190600160f860020a031916908160001a90535082151561270157600192505b612aad565b848281518110151561271457fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214806127e4575084517f60000000000000000000000000000000000000000000000000000000000000009086908490811061277057fe5b90602001015160f860020a900460f860020a02600160f860020a0319161180156127e4575084517f7b00000000000000000000000000000000000000000000000000000000000000908690849081106127c557fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b8061288e575084517f2f000000000000000000000000000000000000000000000000000000000000009086908490811061281a57fe5b90602001015160f860020a900460f860020a02600160f860020a03191611801561288e575084517f3a000000000000000000000000000000000000000000000000000000000000009086908490811061286f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b151561290a576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b848281518110151561291857fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214156129f757848260010181518110151561295457fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a02141515156129f7576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b82158015612aa3575084517f300000000000000000000000000000000000000000000000000000000000000090869084908110612a3057fe5b90602001015160f860020a900460f860020a02600160f860020a0319161080612aa3575084517f390000000000000000000000000000000000000000000000000000000000000090869084908110612a8457fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b15612aad57600192505b6001909101906125ed565b600183151514612b12576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b600160a060020a0381166000908152600760205260408120541515612b9a575060068054600190810191829055600160a060020a03831660008181526007602090815260408083208690559482526009905292909220805473ffffffffffffffffffffffffffffffffffffffff19169092179091556111df565b5060006111df565b60008381526008602052604081205415612c2c576000878152600a6020908152604080832087845290915290205460ff161515600114612c2c576040805160e560020a62461bcd02815260206004820152601e60248201527f736f7272792074686174206e616d657320616c72656164792074616b656e0000604482015290519081900360640190fd5b6000878152600960209081526040808320600101879055868352600882528083208a9055898352600a825280832087845290915290205460ff161515612cbc576000878152600a602090815260408083208784528252808320805460ff191660019081179091558a845260098352818420600301805490910190819055600b835281842090845290915290208490555b6040517330d4d6079829082e5a4bcaabf6887362527b883890303180156108fc02916000818181858888f1505050505081151560011415612d94575060015b6005548111612d945760008181526002602052604080822054815160e060020a6349cc635d028152600481018b9052600160a060020a038a8116602483015260448201899052606482018a9052925192909116926349cc635d9260848084019382900301818387803b158015612d7057600080fd5b505af1158015612d84573d6000803e3d6000fd5b505060019092019150612cfb9050565b600085815260096020908152604091829020805460019091015483518715158152928301899052600160a060020a039182168385015260608301523460808301524260a0830152915186928916918a917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e644429181900360c00190a450505050505050565b6000612ea26000731599470505ec590a2aa85ef8d7dfed7833a60831600160a060020a031663fcf2f85f6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015612e7057600080fd5b505af1158015612e84573d6000803e3d6000fd5b505050506040513d6020811015612e9a57600080fd5b505184613044565b92915050565b600080808311612f28576040805160e560020a62461bcd02815260206004820152602860248201527f4d5346756e20636865636b5369676e6572206661696c6564202d2030206e6f7460448201527f20616c6c6f776564000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b612f3184612fb0565b60008181526020878152604080832060001988018452600301909152902054600160a060020a031692509050509392505050565b600080612f7183612fb0565b60009081526020949094525050604090912054919050565b600080612f9583612fb0565b60009081526020949094525050604090912060010154919050565b6040805160208082018490526c01000000000000000000000000300282840152825160348184030181526054909201928390528151600093918291908401908083835b602083106130125780518252601f199092019160209182019101612ff3565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912095945050505050565b600080600080600061305586612fb0565b600081815260208a90526040808220600101549051929650945033935090369080838380828437604051920182900390912094505050841515915061311f905057600084815260208981526040808320848155600160a060020a038616808552600282018452828520805460ff19166001908117909155888652600383018552928520805473ffffffffffffffffffffffffffffffffffffffff1916909117905592879052908a905290810180549091019081905587141561311a57600194506131f0565b6131f0565b6000848152602089905260409020548114156131f057600084815260208981526040808320600160a060020a038616845260020190915290205460ff1615156131d257600084815260208981526040808320600160a060020a038616808552600282018452828520805460ff19166001908117909155888652600383018552928520805473ffffffffffffffffffffffffffffffffffffffff1916909117905592879052908a9052908101805490910190555b6000848152602089905260409020600101548714156131f057600194505b5050505093925050505600756d6d2e2e2e2e2e2020796f75206861766520746f2070617920746865206e616d73672073656e646572206973206e6f742061206465760000000000000000006d65206665650000000000000000000000000000000000000000000000000000736f7272792068756d616e73206f6e6c79000000000000000000000000000000a165627a7a72305820811355eda4c7fdf4bbf3c87c8781f3eb97bec70fd351900a0f9bc626313ff11a0029
Deployed Bytecode
0x60806040526004361061017c5763ffffffff60e060020a6000350416630c6940ea81146101815780630efcf2951461019857806310f01eba146101b0578063180603eb146101e35780632614195f146101f85780632660316e1461020d57806327249e611461023c5780632e19ebdc1461025d5780633ddd4698146102755780633fda926e146102d15780634b227176146103385780634d0d35ff1461034d578063685ffd83146103815780636c52660d146103d4578063745ea0c11461042d578063768f930d1461046757806381c5b206146104b357806382e37b2c146104cb578063921dec21146104e3578063a448ed4b14610536578063a553506e14610551578063aa4d490b14610582578063b9291296146105a5578063b9eca0c8146105fe578063c0942dfd14610613578063c320c72714610632578063d52412791461064a578063dbbcaa9714610662578063de7874f314610683578063e3c08adf146106cb578063e56556a9146106e3578063ed3643d614610704575b600080fd5b34801561018d57600080fd5b50610196610743565b005b3480156101a457600080fd5b506101966004356109b1565b3480156101bc57600080fd5b506101d1600160a060020a0360043516610a88565b60408051918252519081900360200190f35b3480156101ef57600080fd5b506101d1610a9a565b34801561020457600080fd5b506101d1610aa0565b34801561021957600080fd5b50610228600435602435610aa6565b604080519115158252519081900360200190f35b34801561024857600080fd5b506101d1600160a060020a0360043516610ac6565b34801561026957600080fd5b506101d1600435610ad8565b6040805160206004803580820135601f810184900484028501840190955284845261019694369492936024939284019190819084018382808284375094975050600160a060020a03853516955050505050602001351515610aea565b3480156102dd57600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610196958335600160a060020a0316953695604494919390910191908190840183828082843750949750610c549650505050505050565b34801561034457600080fd5b506101d16111c0565b34801561035957600080fd5b506103656004356111c6565b60408051600160a060020a039092168252519081900360200190f35b6040805160206004803580820135601f81018490048402850184019095528484526101969436949293602493928401919081908401838280828437509497505084359550505050506020013515156111e4565b3480156103e057600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102289436949293602493928401919081908401838280828437509497506113229650505050505050565b61044c600160a060020a0360043516602435604435606435151561135a565b60408051921515835260208301919091528051918290030190f35b34801561047357600080fd5b5061048860043560243560443560643561146e565b60408051600160a060020a039485168152928416602084015292168183015290519081900360600190f35b3480156104bf57600080fd5b50610196600435611572565b3480156104d757600080fd5b506101d160043561183f565b6040805160206004803580820135601f8101849004840285018401909552848452610196943694929360249392840191908190840183828082843750949750508435955050505050602001351515611854565b34801561054257600080fd5b506101d1600435602435611996565b34801561055d57600080fd5b506105696004356119b3565b6040805192835260208301919091528051918290030190f35b61044c600160a060020a0360043581169060243590604435166064351515611a9f565b3480156105b157600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610196943694929360249392840191908190840183828082843750949750611bc29650505050505050565b34801561060a57600080fd5b506101d1611cb4565b61044c600160a060020a03600435166024356044356064351515611cba565b34801561063e57600080fd5b50610196600435611dc6565b34801561065657600080fd5b50610365600435611ef0565b34801561066e57600080fd5b506101d1600160a060020a0360043516611f0b565b34801561068f57600080fd5b5061069b600435611f1d565b60408051600160a060020a0390951685526020850193909352838301919091526060830152519081900360800190f35b3480156106d757600080fd5b506101d1600435611f4e565b3480156106ef57600080fd5b506101d1600160a060020a0360043516611f63565b34801561071057600080fd5b50610725600435602435604435606435611fa4565b60408051938452602084019290925282820152519081900360600190f35b600080808080808033803b8015610792576040805160e560020a62461bcd028152602060048201526011602482015260008051602061325c833981519152604482015290519081900360640190fd5b336000818152600760205260409020549099509750871515610824576040805160e560020a62461bcd02815260206004820152602e60248201527f6865792074686572652062756464792c20796f7520646f6e74206576656e206860448201527f61766520616e206163636f756e74000000000000000000000000000000000000606482015290519081900360840190fd5b6000888152600960205260409020600281015460038201546001928301549199509750955093505b60055484116109a65760008481526002602052604080822054815160e060020a6349cc635d028152600481018c9052600160a060020a038d81166024830152604482018a9052606482018c9052925192909116926349cc635d9260848084019382900301818387803b1580156108c157600080fd5b505af11580156108d5573d6000803e3d6000fd5b50505050600186111561099b57600192505b85831161099b576000848152600260209081526040808320548b8452600b83528184208785529092528083205481517f8f7140ea000000000000000000000000000000000000000000000000000000008152600481018d905260248101919091529051600160a060020a0390921692638f7140ea9260448084019382900301818387803b15801561097757600080fd5b505af115801561098b573d6000803e3d6000fd5b5050600190940193506108e79050565b60019093019261084c565b505050505050505050565b6040805160e060020a630c3f64bf0281523360048201529051731599470505ec590a2aa85ef8d7dfed7833a6083191630c3f64bf9160248083019260209291908290030181600087803b158015610a0757600080fd5b505af1158015610a1b573d6000803e3d6000fd5b505050506040513d6020811015610a3157600080fd5b50511515600114610a7a576040805160e560020a62461bcd028152602060048201526017602482015260008051602061321c833981519152604482015290519081900360640190fd5b610a8560008261225b565b50565b60076020526000908152604090205481565b60015481565b60015490565b600a60209081526000928352604080842090915290825290205460ff1681565b60036020526000908152604090205481565b60086020526000908152604090205481565b60008080808033803b8015610b37576040805160e560020a62461bcd028152602060048201526011602482015260008051602061325c833981519152604482015290519081900360640190fd5b600154341015610b93576040805160e560020a62461bcd02815260206004820152602660248201526000805160206131fc833981519152604482015260008051602061323c833981519152606482015290519081900360840190fd5b610b9c8a61230d565b9650339550610baa86612b20565b600160a060020a03808816600090815260076020526040902054919650909450891615801590610bec575085600160a060020a031689600160a060020a031614155b15610c3a57600160a060020a0389166000908152600760209081526040808320548784526009909252909120600201549093508314610c3a5760008481526009602052604090206002018390555b610c488487858a898d612ba2565b50505050505050505050565b6040805160e060020a630c3f64bf0281523360048201529051600091731599470505ec590a2aa85ef8d7dfed7833a6083191630c3f64bf9160248082019260209290919082900301818787803b158015610cad57600080fd5b505af1158015610cc1573d6000803e3d6000fd5b505050506040513d6020811015610cd757600080fd5b50511515600114610d20576040805160e560020a62461bcd028152602060048201526017602482015260008051602061321c833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526004602052604090205415610db4576040805160e560020a62461bcd02815260206004820152602860248201527f646572702c20746861742067616d657320616c7265616479206265656e20726560448201527f6769737465726564000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b610ddd7f61646447616d6500000000000000000000000000000000000000000000000000612e17565b1515600114156111bb57610e107f61646447616d6500000000000000000000000000000000000000000000000000610a7a565b600580546001019055610e228261230d565b60058054600160a060020a03808716600081815260046020818152604080842096909655600381528583208890558654835260028152858320805473ffffffffffffffffffffffffffffffffffffffff19169094179093559454815283812054600180835260099093527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a36547f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3754865160e060020a6349cc635d0281529788019490945284166024870152604486019290925260648501819052925194955016926349cc635d92608480820193929182900301818387803b158015610f2657600080fd5b505af1158015610f3a573d6000803e3d6000fd5b505060055460009081526002602081815260408084205483855260099092527f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c3547f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c454825160e060020a6349cc635d0281526004810195909552600160a060020a0391821660248601526044850152606484018590529051911694506349cc635d93506084808301939282900301818387803b158015610ff957600080fd5b505af115801561100d573d6000803e3d6000fd5b5050600554600090815260026020908152604080832054600380855260099093527fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e7547fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e854835160e060020a6349cc635d0281526004810195909552600160a060020a0391821660248601526044850152606484018590529151911694506349cc635d93506084808301939282900301818387803b1580156110ce57600080fd5b505af11580156110e2573d6000803e3d6000fd5b5050600554600090815260026020908152604080832054600480855260099093527f8dc18c4ccfd75f5c815b63770fa542fd953e8fef7e0e44bbdd4913470ce7e9cb547f8dc18c4ccfd75f5c815b63770fa542fd953e8fef7e0e44bbdd4913470ce7e9cc54835160e060020a6349cc635d02815280860195909552600160a060020a0391821660248601526044850152606484018590529151911694506349cc635d93506084808301939282900301818387803b1580156111a257600080fd5b505af11580156111b6573d6000803e3d6000fd5b505050505b505050565b60065481565b600081815260096020526040902054600160a060020a03165b919050565b60008080808033803b8015611231576040805160e560020a62461bcd028152602060048201526011602482015260008051602061325c833981519152604482015290519081900360640190fd5b60015434101561128d576040805160e560020a62461bcd02815260206004820152602660248201526000805160206131fc833981519152604482015260008051602061323c833981519152606482015290519081900360840190fd5b6112968a61230d565b96503395506112a486612b20565b600160a060020a038716600090815260076020526040902054909550935088158015906112d15750888714155b15610c3a576000898152600860209081526040808320548784526009909252909120600201549093508314610c3a576000848152600960205260409020600201839055610c488487858a898d612ba2565b60008061132e8361230d565b600081815260086020526040902054909150151561134f5760019150611354565b600091505b50919050565b336000908152600460205260408120548190819081908190151561137d57600080fd5b6001543410156113d9576040805160e560020a62461bcd02815260206004820152602660248201526000805160206131fc833981519152604482015260008051602061323c833981519152606482015290519081900360840190fd5b6113e289612b20565b600160a060020a038a166000908152600760205260409020549093509150861580159061140f5750868814155b15611451575060008681526008602090815260408083205484845260099092529091206002015481146114515760008281526009602052604090206002018190555b61145f828a838b878b612ba2565b91989197509095505050505050565b6040805160e060020a630c3f64bf028152336004820152905160009182918291731599470505ec590a2aa85ef8d7dfed7833a6083191630c3f64bf9160248082019260209290919082900301818787803b1580156114cb57600080fd5b505af11580156114df573d6000803e3d6000fd5b505050506040513d60208110156114f557600080fd5b5051151560011461153e576040805160e560020a62461bcd028152602060048201526017602482015260008051602061321c833981519152604482015290519081900360640190fd5b61154a60008888612ea8565b61155660008988612ea8565b61156260008a88612ea8565b9250925092509450945094915050565b600080808033803b80156115be576040805160e560020a62461bcd028152602060048201526011602482015260008051602061325c833981519152604482015290519081900360640190fd5b60055487111561163e576040805160e560020a62461bcd02815260206004820152602960248201527f73696c6c7920706c617965722c20746861742067616d6520646f65736e27742060448201527f6578697374207965740000000000000000000000000000000000000000000000606482015290519081900360840190fd5b3360008181526007602052604090205490965094508415156116d0576040805160e560020a62461bcd02815260206004820152602e60248201527f6865792074686572652062756464792c20796f7520646f6e74206576656e206860448201527f61766520616e206163636f756e74000000000000000000000000000000000000606482015290519081900360840190fd5b600085815260096020818152604080842060038101548c86526002808552838720548c88529590945260018201549390910154825160e060020a6349cc635d028152600481018c9052600160a060020a038d8116602483015260448201959095526064810191909152915190985091909216926349cc635d926084808201939182900301818387803b15801561176557600080fd5b505af1158015611779573d6000803e3d6000fd5b5050505060018411156111b657600192505b8383116111b657600087815260026020908152604080832054888452600b83528184208785529092528083205481517f8f7140ea000000000000000000000000000000000000000000000000000000008152600481018a905260248101919091529051600160a060020a0390921692638f7140ea9260448084019382900301818387803b15801561181b57600080fd5b505af115801561182f573d6000803e3d6000fd5b50506001909401935061178b9050565b60009081526009602052604090206001015490565b600080808033803b80156118a0576040805160e560020a62461bcd028152602060048201526011602482015260008051602061325c833981519152604482015290519081900360640190fd5b6001543410156118fc576040805160e560020a62461bcd02815260206004820152602660248201526000805160206131fc833981519152604482015260008051602061323c833981519152606482015290519081900360840190fd5b6119058961230d565b955033945061191385612b20565b600160a060020a0386166000908152600760205260409020549094509250871580159061195157506000838152600960205260409020600201548814155b801561195d5750828814155b1561197b576000838152600960205260409020600201889055611988565b8288141561198857600097505b6109a683868a89888c612ba2565b600b60209081526000928352604080842090915290825290205481565b6040805160e060020a630c3f64bf02815233600482015290516000918291731599470505ec590a2aa85ef8d7dfed7833a6083191630c3f64bf91602480830192602092919082900301818787803b158015611a0d57600080fd5b505af1158015611a21573d6000803e3d6000fd5b505050506040513d6020811015611a3757600080fd5b50511515600114611a80576040805160e560020a62461bcd028152602060048201526017602482015260008051602061321c833981519152604482015290519081900360640190fd5b611a8b600084612f65565b611a96600085612f89565b91509150915091565b3360009081526004602052604081205481908190819081901515611ac257600080fd5b600154341015611b1e576040805160e560020a62461bcd02815260206004820152602660248201526000805160206131fc833981519152604482015260008051602061323c833981519152606482015290519081900360840190fd5b611b2789612b20565b600160a060020a03808b16600090815260076020526040902054919450909250871615801590611b69575088600160a060020a031687600160a060020a031614155b156114515750600160a060020a038616600090815260076020908152604080832054848452600990925290912060020154811461145157600082815260096020526040902060020181905561145f828a838b878b612ba2565b60008033803b8015611c0c576040805160e560020a62461bcd028152602060048201526011602482015260008051602061325c833981519152604482015290519081900360640190fd5b611c158561230d565b33600090815260076020908152604080832054808452600a835281842085855290925290912054919550935060ff161515600114611c9d576040805160e560020a62461bcd02815260206004820152601f60248201527f756d6d2e2e2e207468617473206e6f742061206e616d6520796f75206f776e00604482015290519081900360640190fd5b505060009081526009602052604090206001015550565b60055481565b3360009081526004602052604081205481908190819081901515611cdd57600080fd5b600154341015611d39576040805160e560020a62461bcd02815260206004820152602660248201526000805160206131fc833981519152604482015260008051602061323c833981519152606482015290519081900360840190fd5b611d4289612b20565b600160a060020a038a1660009081526007602052604090205490935091508690508015801590611d8357506000828152600960205260409020600201548114155b8015611d8f5750818114155b15611dad576000828152600960205260409020600201819055611451565b818114156114515750600061145f828a838b878b612ba2565b6040805160e060020a630c3f64bf0281523360048201529051731599470505ec590a2aa85ef8d7dfed7833a6083191630c3f64bf9160248083019260209291908290030181600087803b158015611e1c57600080fd5b505af1158015611e30573d6000803e3d6000fd5b505050506040513d6020811015611e4657600080fd5b50511515600114611e8f576040805160e560020a62461bcd028152602060048201526017602482015260008051602061321c833981519152604482015290519081900360640190fd5b611eb87f736574526567697374726174696f6e4665650000000000000000000000000000612e17565b151560011415610a8557611eeb7f736574526567697374726174696f6e4665650000000000000000000000000000610a7a565b600155565b600260205260009081526040902054600160a060020a031681565b60046020526000908152604090205481565b6009602052600090815260409020805460018201546002830154600390930154600160a060020a0390921692909184565b60009081526009602052604090206002015490565b336000908152600460205260408120541515611f7e57600080fd5b611f8782612b20565b5050600160a060020a031660009081526007602052604090205490565b6040805160e060020a630c3f64bf028152336004820152905160009182918291731599470505ec590a2aa85ef8d7dfed7833a6083191630c3f64bf9160248082019260209290919082900301818787803b15801561200157600080fd5b505af1158015612015573d6000803e3d6000fd5b505050506040513d602081101561202b57600080fd5b50511515600114612074576040805160e560020a62461bcd028152602060048201526017602482015260008051602061321c833981519152604482015290519081900360640190fd5b731599470505ec590a2aa85ef8d7dfed7833a6083163af1c084d61209a60008a8a612ea8565b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b1580156120e557600080fd5b505af11580156120f9573d6000803e3d6000fd5b505050506040513d602081101561210f57600080fd5b5051731599470505ec590a2aa85ef8d7dfed7833a6083163af1c084d61213760008b8a612ea8565b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561218257600080fd5b505af1158015612196573d6000803e3d6000fd5b505050506040513d60208110156121ac57600080fd5b5051731599470505ec590a2aa85ef8d7dfed7833a6083163af1c084d6121d460008c8a612ea8565b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561221f57600080fd5b505af1158015612233573d6000803e3d6000fd5b505050506040513d602081101561224957600080fd5b50519199909850909650945050505050565b600080600061226984612fb0565b9250600090505b6000838152602086905260409020600101548110156122f257600083815260208681526040808320848452600381018084528285208054600160a060020a031680875260029093018552928520805460ff191690559385905292909152805473ffffffffffffffffffffffffffffffffffffffff191690559150600101612270565b50506000908152602092909252506040812081815560010155565b80516000908290828080602084118015906123285750600084115b15156123a4576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b8460008151811015156123b357fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021415801561241a575084600185038151811015156123f257fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515612496576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8460008151811015156124a557fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a0214156125e8578460018151811015156124df57fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a021415151561255c576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b84600181518110151561256b57fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a02141515156125e8576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b83821015612ab85784517f40000000000000000000000000000000000000000000000000000000000000009086908490811061262557fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015612699575084517f5b000000000000000000000000000000000000000000000000000000000000009086908490811061267a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b156127065784828151811015156126ac57fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a0285838151811015156126dd57fe5b906020010190600160f860020a031916908160001a90535082151561270157600192505b612aad565b848281518110151561271457fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214806127e4575084517f60000000000000000000000000000000000000000000000000000000000000009086908490811061277057fe5b90602001015160f860020a900460f860020a02600160f860020a0319161180156127e4575084517f7b00000000000000000000000000000000000000000000000000000000000000908690849081106127c557fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b8061288e575084517f2f000000000000000000000000000000000000000000000000000000000000009086908490811061281a57fe5b90602001015160f860020a900460f860020a02600160f860020a03191611801561288e575084517f3a000000000000000000000000000000000000000000000000000000000000009086908490811061286f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b151561290a576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b848281518110151561291857fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214156129f757848260010181518110151561295457fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a02141515156129f7576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b82158015612aa3575084517f300000000000000000000000000000000000000000000000000000000000000090869084908110612a3057fe5b90602001015160f860020a900460f860020a02600160f860020a0319161080612aa3575084517f390000000000000000000000000000000000000000000000000000000000000090869084908110612a8457fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b15612aad57600192505b6001909101906125ed565b600183151514612b12576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b600160a060020a0381166000908152600760205260408120541515612b9a575060068054600190810191829055600160a060020a03831660008181526007602090815260408083208690559482526009905292909220805473ffffffffffffffffffffffffffffffffffffffff19169092179091556111df565b5060006111df565b60008381526008602052604081205415612c2c576000878152600a6020908152604080832087845290915290205460ff161515600114612c2c576040805160e560020a62461bcd02815260206004820152601e60248201527f736f7272792074686174206e616d657320616c72656164792074616b656e0000604482015290519081900360640190fd5b6000878152600960209081526040808320600101879055868352600882528083208a9055898352600a825280832087845290915290205460ff161515612cbc576000878152600a602090815260408083208784528252808320805460ff191660019081179091558a845260098352818420600301805490910190819055600b835281842090845290915290208490555b6040517330d4d6079829082e5a4bcaabf6887362527b883890303180156108fc02916000818181858888f1505050505081151560011415612d94575060015b6005548111612d945760008181526002602052604080822054815160e060020a6349cc635d028152600481018b9052600160a060020a038a8116602483015260448201899052606482018a9052925192909116926349cc635d9260848084019382900301818387803b158015612d7057600080fd5b505af1158015612d84573d6000803e3d6000fd5b505060019092019150612cfb9050565b600085815260096020908152604091829020805460019091015483518715158152928301899052600160a060020a039182168385015260608301523460808301524260a0830152915186928916918a917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e644429181900360c00190a450505050505050565b6000612ea26000731599470505ec590a2aa85ef8d7dfed7833a60831600160a060020a031663fcf2f85f6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015612e7057600080fd5b505af1158015612e84573d6000803e3d6000fd5b505050506040513d6020811015612e9a57600080fd5b505184613044565b92915050565b600080808311612f28576040805160e560020a62461bcd02815260206004820152602860248201527f4d5346756e20636865636b5369676e6572206661696c6564202d2030206e6f7460448201527f20616c6c6f776564000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b612f3184612fb0565b60008181526020878152604080832060001988018452600301909152902054600160a060020a031692509050509392505050565b600080612f7183612fb0565b60009081526020949094525050604090912054919050565b600080612f9583612fb0565b60009081526020949094525050604090912060010154919050565b6040805160208082018490526c01000000000000000000000000300282840152825160348184030181526054909201928390528151600093918291908401908083835b602083106130125780518252601f199092019160209182019101612ff3565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912095945050505050565b600080600080600061305586612fb0565b600081815260208a90526040808220600101549051929650945033935090369080838380828437604051920182900390912094505050841515915061311f905057600084815260208981526040808320848155600160a060020a038616808552600282018452828520805460ff19166001908117909155888652600383018552928520805473ffffffffffffffffffffffffffffffffffffffff1916909117905592879052908a905290810180549091019081905587141561311a57600194506131f0565b6131f0565b6000848152602089905260409020548114156131f057600084815260208981526040808320600160a060020a038616845260020190915290205460ff1615156131d257600084815260208981526040808320600160a060020a038616808552600282018452828520805460ff19166001908117909155888652600383018552928520805473ffffffffffffffffffffffffffffffffffffffff1916909117905592879052908a9052908101805490910190555b6000848152602089905260409020600101548714156131f057600194505b5050505093925050505600756d6d2e2e2e2e2e2020796f75206861766520746f2070617920746865206e616d73672073656e646572206973206e6f742061206465760000000000000000006d65206665650000000000000000000000000000000000000000000000000000736f7272792068756d616e73206f6e6c79000000000000000000000000000000a165627a7a72305820811355eda4c7fdf4bbf3c87c8781f3eb97bec70fd351900a0f9bc626313ff11a0029
Swarm Source
bzzr://811355eda4c7fdf4bbf3c87c8781f3eb97bec70fd351900a0f9bc626313ff11a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.