More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 14,446 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 22399592 | 316 days ago | IN | 0 ETH | 0.00001989 | ||||
| Approve | 22399584 | 316 days ago | IN | 0 ETH | 0.0000307 | ||||
| Approve | 21796653 | 401 days ago | IN | 0 ETH | 0.00004395 | ||||
| Approve | 21796640 | 401 days ago | IN | 0 ETH | 0.00004242 | ||||
| Approve | 21796613 | 401 days ago | IN | 0 ETH | 0.00006888 | ||||
| Approve | 21528174 | 438 days ago | IN | 0 ETH | 0.00016362 | ||||
| Approve | 21450415 | 449 days ago | IN | 0 ETH | 0.00021444 | ||||
| Approve | 21450406 | 449 days ago | IN | 0 ETH | 0.00022393 | ||||
| Approve | 21450395 | 449 days ago | IN | 0 ETH | 0.00035723 | ||||
| Approve | 21407668 | 455 days ago | IN | 0 ETH | 0.00033146 | ||||
| Approve | 21406530 | 455 days ago | IN | 0 ETH | 0.00034261 | ||||
| Approve | 21357508 | 462 days ago | IN | 0 ETH | 0.00044218 | ||||
| Approve | 21220529 | 481 days ago | IN | 0 ETH | 0.00049712 | ||||
| Approve | 21187208 | 486 days ago | IN | 0 ETH | 0.00124947 | ||||
| Approve | 21134698 | 493 days ago | IN | 0 ETH | 0.00041022 | ||||
| Approve | 21130679 | 493 days ago | IN | 0 ETH | 0.00079403 | ||||
| Approve | 21130612 | 494 days ago | IN | 0 ETH | 0.00088367 | ||||
| Approve | 21081138 | 500 days ago | IN | 0 ETH | 0.00036963 | ||||
| Approve | 21004272 | 511 days ago | IN | 0 ETH | 0.00022802 | ||||
| Approve | 20966335 | 516 days ago | IN | 0 ETH | 0.00097434 | ||||
| Approve | 20751603 | 546 days ago | IN | 0 ETH | 0.00006493 | ||||
| Approve | 20698133 | 554 days ago | IN | 0 ETH | 0.00013633 | ||||
| Approve | 20698120 | 554 days ago | IN | 0 ETH | 0.00016923 | ||||
| Approve | 20690498 | 555 days ago | IN | 0 ETH | 0.00011941 | ||||
| Approve | 20678172 | 557 days ago | IN | 0 ETH | 0.0004156 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 8981812 | 2305 days ago | 0.1 ETH | ||||
| - | 8836239 | 2328 days ago | 0.6 ETH | ||||
| - | 8680694 | 2353 days ago | 0.04 ETH | ||||
| - | 8601841 | 2365 days ago | 0.04 ETH | ||||
| - | 8522767 | 2378 days ago | 0.04 ETH | ||||
| - | 8461035 | 2387 days ago | 0.04 ETH | ||||
| - | 8459370 | 2388 days ago | 0.15 ETH | ||||
| - | 8413839 | 2395 days ago | 1 ETH | ||||
| - | 8371622 | 2401 days ago | 0.04 ETH | ||||
| - | 8358117 | 2403 days ago | 0.04 ETH | ||||
| - | 8343630 | 2406 days ago | 0.04 ETH | ||||
| - | 8324065 | 2409 days ago | 0.04 ETH | ||||
| - | 8300583 | 2412 days ago | 0.04 ETH | ||||
| - | 8293399 | 2413 days ago | 0.04 ETH | ||||
| - | 8284963 | 2415 days ago | 0.04 ETH | ||||
| - | 8279600 | 2415 days ago | 1.5 ETH | ||||
| - | 8252913 | 2420 days ago | 0.04 ETH | ||||
| - | 8248066 | 2420 days ago | 0.04 ETH | ||||
| - | 8247330 | 2420 days ago | 0.04 ETH | ||||
| - | 8197596 | 2428 days ago | 0.04 ETH | ||||
| - | 8195681 | 2429 days ago | 0.04 ETH | ||||
| - | 8186440 | 2430 days ago | 2 ETH | ||||
| - | 8176954 | 2431 days ago | 0.04 ETH | ||||
| - | 8173344 | 2432 days ago | 0.104 ETH | ||||
| - | 8149464 | 2436 days ago | 0.04 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ChibiFighters
Compiler Version
v0.4.23+commit.124ca40d
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2018-04-30
*/
pragma solidity ^0.4.21;
// ----------------------------------------------------------------------------
// Contract owner and transfer functions
// just in case someone wants to get my bacon
// ----------------------------------------------------------------------------
contract ContractOwned {
address public contract_owner;
address public contract_newOwner;
event OwnershipTransferred(address indexed _from, address indexed _to);
constructor() public {
contract_owner = msg.sender;
}
modifier contract_onlyOwner {
require(msg.sender == contract_owner);
_;
}
function transferOwnership(address _newOwner) public contract_onlyOwner {
contract_newOwner = _newOwner;
}
function acceptOwnership() public {
require(msg.sender == contract_newOwner);
emit OwnershipTransferred(contract_owner, contract_newOwner);
contract_owner = contract_newOwner;
contract_newOwner = address(0);
}
}
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Substracts two numbers, returns 0 if it would go into minus range.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
if (b >= a) {
return 0;
}
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
assert(c >= a);
return c;
}
}
/**
* ERC721 compatibility from
* https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721Token.sol
* plus our magic sauce
*/
/**
* @title Custom CustomEvents
* @dev some custom events specific to this contract
*/
contract CustomEvents {
event ChibiCreated(uint tokenId, address indexed _owner, bool founder, string _name, uint16[13] dna, uint father, uint mother, uint gen, uint adult, string infoUrl);
event ChibiForFusion(uint tokenId, uint price);
event ChibiForFusionCancelled(uint tokenId);
event WarriorCreated(uint tokenId, string battleRoar);
}
/**
* @title ERC721 interface
* @dev see https://github.com/ethereum/eips/issues/721
*/
contract ERC721 {
event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);
function balanceOf(address _owner) public view returns (uint256 _balance);
function ownerOf(uint256 _tokenId) public view returns (address _owner);
function transfer(address _to, uint256 _tokenId) public;
function approve(address _to, uint256 _tokenId) public;
function takeOwnership(uint256 _tokenId) public;
function tokenMetadata(uint256 _tokenId) constant public returns (string infoUrl);
function tokenURI(uint256 _tokenId) public view returns (string);
}
// interacting with gene contract
contract GeneInterface {
// creates genes when bought directly on this contract, they will always be superb
// address, seed, founder, tokenId
function createGenes(address, uint, bool, uint, uint) external view returns (
uint16[13] genes
);
// transfusion chamber, no one really knows what that crazy thing does
// except the scientists, but they giggle all day long
// address, seed, tokenId
function splitGenes(address, uint, uint) external view returns (
uint16[13] genes
);
function exhaustAfterFusion(uint _gen, uint _counter, uint _exhaustionTime) public pure returns (uint);
function exhaustAfterBattle(uint _gen, uint _exhaust) public pure returns (uint);
}
// interacting with fcf contract
contract FcfInterface {
function balanceOf(address) public pure returns (uint) {}
function transferFrom(address, address, uint) public pure returns (bool) {}
}
// interacting with battle contract
contract BattleInterface {
function addWarrior(address, uint, uint8, string) pure public returns (bool) {}
function isDead(uint) public pure returns (bool) {}
}
/**
* @title ERC721Token
* Generic implementation for the required functionality of the ERC721 standard
*/
contract ChibiFighters is ERC721, ContractOwned, CustomEvents {
using SafeMath for uint256;
// Total amount of tokens
uint256 private totalTokens;
// Mapping from token ID to owner
mapping (uint256 => address) private tokenOwner;
// Mapping from token ID to approved address
mapping (uint256 => address) private tokenApprovals;
// Mapping from owner to list of owned token IDs
mapping (address => uint256[]) private ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private ownedTokensIndex;
// interfaces for other contracts, so updates are possible
GeneInterface geneContract;
FcfInterface fcfContract;
BattleInterface battleContract;
address battleContractAddress;
// default price for 1 Chibi
uint public priceChibi;
// minimum price for fusion chibis
uint priceFusionChibi;
// counter that keeps upping with each token
uint uniqueCounter;
// time to become adult
uint adultTime;
// recovery time after each fusion
uint exhaustionTime;
// our comission
uint comission;
// battleRemoveContractAddress to remove from array
address battleRemoveContractAddress;
struct Chibi {
// address of current chibi owner
address owner;
// belongs to og
bool founder;
// name of the chibi, chibis need names
string nameChibi;
// the dna, specifies, bodyparts, etc.
// array is easier to decode, but we are not reinventing the wheel here
uint16[13] dna;
// originates from tokenIds, gen0s will return 0
// uint size only matters in structs
uint256 father;
uint256 mother;
// generations, gen0 is created from the incubator, they are pure
// but of course the funniest combos will come from the fusion chamber
uint gen;
// fusions, the beautiful fusion Chibis that came out of this one
uint256[] fusions;
// up for fusion?
bool forFusion;
// cost to fusion with this Chibi, can be set by player at will
uint256 fusionPrice;
// exhaustion after fusion
uint256 exhausted;
// block after which chibi is an adult
uint256 adult;
// info url
string infoUrl;
}
// the link to chibis website
string _infoUrlPrefix;
Chibi[] public chibies;
string public constant name = "Chibi Fighters";
string public constant symbol = "CBF";
// pause function so fusion and minting can be paused for updates
bool paused;
bool fcfPaused;
bool fusionPaused; // needed so founder can fuse while game is paused
/**
* @dev Run only once at contract creation
*/
constructor() public {
// a helping counter to keep chibis unique
uniqueCounter = 0;
// inital price in wei
priceChibi = 100000000000000000;
// default price to allow fusion
priceFusionChibi = 10000000000000000;
// time to become adult
adultTime = 2 hours;
//exhaustionTime = 3 hours;
exhaustionTime = 1 hours;
// start the contract paused
paused = true;
fcfPaused = true;
fusionPaused = true;
// set comission percentage 100-90 = 10%
comission = 90;
_infoUrlPrefix = "https://chibigame.io/chibis.php?idj=";
}
/**
* @dev Set Comission rate 100-x = %
* @param _comission Rate inverted
*/
function setComission(uint _comission) public contract_onlyOwner returns(bool success) {
comission = _comission;
return true;
}
/**
* @dev Set minimum price for fusion Chibis in Wei
*/
function setMinimumPriceFusion(uint _price) public contract_onlyOwner returns(bool success) {
priceFusionChibi = _price;
return true;
}
/**
* @dev Set time until Chibi is considered adult
* @param _adultTimeSecs Set time in seconds
*/
function setAdultTime(uint _adultTimeSecs) public contract_onlyOwner returns(bool success) {
adultTime = _adultTimeSecs;
return true;
}
/**
* @dev Fusion Chamber Cool down
* @param _exhaustionTime Set time in seconds
*/
function setExhaustionTime(uint _exhaustionTime) public contract_onlyOwner returns(bool success) {
exhaustionTime = _exhaustionTime;
return true;
}
/**
* @dev Set game state paused for updates, pauses the entire creation
* @param _setPaused Boolean sets the game paused or not
*/
function setGameState(bool _setPaused) public contract_onlyOwner returns(bool _paused) {
paused = _setPaused;
fcfPaused = _setPaused;
fusionPaused = _setPaused;
return paused;
}
/**
* @dev Set game state for fcf tokens only, so Founder can get Chibis pre launch
* @param _setPaused Boolean sets the game paused or not
*/
function setGameStateFCF(bool _setPaused) public contract_onlyOwner returns(bool _pausedFCF) {
fcfPaused = _setPaused;
return fcfPaused;
}
/**
* @dev unpause Fusions so Founder can Fuse
* @param _setPaused Boolean sets the game paused or not
*/
function setGameStateFusion(bool _setPaused) public contract_onlyOwner returns(bool _pausedFusions) {
fusionPaused = _setPaused;
return fusionPaused;
}
/**
* @dev Query game state. Paused (True) or not?
*/
function getGameState() public constant returns(bool _paused) {
return paused;
}
/**
* @dev Set url prefix
*/
function setInfoUrlPrefix(string prefix) external contract_onlyOwner returns (string infoUrlPrefix) {
_infoUrlPrefix = prefix;
return _infoUrlPrefix;
}
/**
* @dev Set infoUrl of chibi
*/
function changeInfoUrl(uint _tokenId, string _infoUrl) public returns (bool success) {
if (ownerOf(_tokenId) != msg.sender && msg.sender != contract_owner) revert();
chibies[_tokenId].infoUrl = _infoUrl;
return true;
}
/**
* @dev Connect to Founder contract so user can pay in FCF
*/
function setFcfContractAddress(address _address) external contract_onlyOwner returns (bool success) {
fcfContract = FcfInterface(_address);
return true;
}
/**
* @dev Connect to Battle contract
*/
function setBattleContractAddress(address _address) external contract_onlyOwner returns (bool success) {
battleContract = BattleInterface(_address);
battleContractAddress = _address;
return true;
}
/**
* @dev Connect to Battle contract
*/
function setBattleRemoveContractAddress(address _address) external contract_onlyOwner returns (bool success) {
battleRemoveContractAddress = _address;
return true;
}
/**
* @dev Rename a Chibi
* @param _tokenId ID of the Chibi
* @param _name Name of the Chibi
*/
function renameChibi(uint _tokenId, string _name) public returns (bool success){
require(ownerOf(_tokenId) == msg.sender);
chibies[_tokenId].nameChibi = _name;
return true;
}
/**
* @dev Has chibi necromancer trait?
* @param _tokenId ID of the chibi
*/
function isNecromancer(uint _tokenId) public view returns (bool) {
for (uint i=10; i<13; i++) {
if (chibies[_tokenId].dna[i] == 1000) {
return true;
}
}
return false;
}
/**
* @dev buy Chibis with Founders
*/
function buyChibiWithFcf(string _name, string _battleRoar, uint8 _region, uint _seed) public returns (bool success) {
// must own at least 1 FCF, only entire FCF can be swapped for Chibis
require(fcfContract.balanceOf(msg.sender) >= 1 * 10 ** 18);
require(fcfPaused == false);
// prevent hack
uint fcfBefore = fcfContract.balanceOf(address(this));
// user must approved Founders contract to take tokens from account
// oh my, this will need a tutorial video
// always only take 1 Founder at a time
if (fcfContract.transferFrom(msg.sender, this, 1 * 10 ** 18)) {
_mint(_name, _battleRoar, _region, _seed, true, 0);
}
// prevent hacking
assert(fcfBefore == fcfContract.balanceOf(address(this)) - 1 * 10 ** 18);
return true;
}
/**
* @dev Put Chibi up for fusion, this will not destroy your Chibi. Only adults can fuse.
* @param _tokenId Id of Chibi token that is for fusion
* @param _price Price for the chibi in wei
*/
function setChibiForFusion(uint _tokenId, uint _price) public returns (bool success) {
require(ownerOf(_tokenId) == msg.sender);
require(_price >= priceFusionChibi);
require(chibies[_tokenId].adult <= now);
require(chibies[_tokenId].exhausted <= now);
require(chibies[_tokenId].forFusion == false);
require(battleContract.isDead(_tokenId) == false);
chibies[_tokenId].forFusion = true;
chibies[_tokenId].fusionPrice = _price;
emit ChibiForFusion(_tokenId, _price);
return true;
}
function cancelChibiForFusion(uint _tokenId) public returns (bool success) {
if (ownerOf(_tokenId) != msg.sender && msg.sender != address(battleRemoveContractAddress)) {
revert();
}
require(chibies[_tokenId].forFusion == true);
chibies[_tokenId].forFusion = false;
emit ChibiForFusionCancelled(_tokenId);
return false;
}
/**
* @dev Connect to gene contract. That way we can update that contract and add more fighters.
*/
function setGeneContractAddress(address _address) external contract_onlyOwner returns (bool success) {
geneContract = GeneInterface(_address);
return true;
}
/**
* @dev Fusions cost too much so they are here
* @return All the fusions (babies) of tokenId
*/
function queryFusionData(uint _tokenId) public view returns (
uint256[] fusions,
bool forFusion,
uint256 costFusion,
uint256 adult,
uint exhausted
) {
return (
chibies[_tokenId].fusions,
chibies[_tokenId].forFusion,
chibies[_tokenId].fusionPrice,
chibies[_tokenId].adult,
chibies[_tokenId].exhausted
);
}
/**
* @dev Minimal query for battle contract
* @return If for fusion
*/
function queryFusionData_ext(uint _tokenId) public view returns (
bool forFusion,
uint fusionPrice
) {
return (
chibies[_tokenId].forFusion,
chibies[_tokenId].fusionPrice
);
}
/**
* @dev Triggers a Chibi event to get some data of token
* @return various
*/
function queryChibi(uint _tokenId) public view returns (
string nameChibi,
string infoUrl,
uint16[13] dna,
uint256 father,
uint256 mother,
uint gen,
uint adult
) {
return (
chibies[_tokenId].nameChibi,
chibies[_tokenId].infoUrl,
chibies[_tokenId].dna,
chibies[_tokenId].father,
chibies[_tokenId].mother,
chibies[_tokenId].gen,
chibies[_tokenId].adult
);
}
/**
* @dev Triggers a Chibi event getting some additional data
* @return various
*/
function queryChibiAdd(uint _tokenId) public view returns (
address owner,
bool founder
) {
return (
chibies[_tokenId].owner,
chibies[_tokenId].founder
);
}
// exhaust after battle
function exhaustBattle(uint _tokenId) internal view returns (uint) {
uint _exhaust = 0;
for (uint i=10; i<13; i++) {
if (chibies[_tokenId].dna[i] == 1) {
_exhaust += (exhaustionTime * 3);
}
if (chibies[_tokenId].dna[i] == 3) {
_exhaust += exhaustionTime.div(2);
}
}
_exhaust = geneContract.exhaustAfterBattle(chibies[_tokenId].gen, _exhaust);
return _exhaust;
}
// exhaust after fusion
function exhaustFusion(uint _tokenId) internal returns (uint) {
uint _exhaust = 0;
uint counter = chibies[_tokenId].dna[9];
// set dna here, that way boni still apply but not infinite fusions possible
// max value 9999
if (chibies[_tokenId].dna[9] < 9999) chibies[_tokenId].dna[9]++;
for (uint i=10; i<13; i++) {
if (chibies[_tokenId].dna[i] == 2) {
counter = counter.sub(1);
}
if (chibies[_tokenId].dna[i] == 4) {
counter++;
}
}
_exhaust = geneContract.exhaustAfterFusion(chibies[_tokenId].gen, counter, exhaustionTime);
return _exhaust;
}
/**
* @dev Exhaust Chibis after battle
*/
function exhaustChibis(uint _tokenId1, uint _tokenId2) public returns (bool success) {
require(msg.sender == battleContractAddress);
chibies[_tokenId1].exhausted = now.add(exhaustBattle(_tokenId1));
chibies[_tokenId2].exhausted = now.add(exhaustBattle(_tokenId2));
return true;
}
/**
* @dev Split traits between father and mother and leave the random at the _tokenId2
*/
function traits(uint16[13] memory genes, uint _seed, uint _fatherId, uint _motherId) internal view returns (uint16[13] memory) {
uint _switch = uint136(keccak256(_seed, block.coinbase, block.timestamp)) % 5;
if (_switch == 0) {
genes[10] = chibies[_fatherId].dna[10];
genes[11] = chibies[_motherId].dna[11];
}
if (_switch == 1) {
genes[10] = chibies[_motherId].dna[10];
genes[11] = chibies[_fatherId].dna[11];
}
if (_switch == 2) {
genes[10] = chibies[_fatherId].dna[10];
genes[11] = chibies[_fatherId].dna[11];
}
if (_switch == 3) {
genes[10] = chibies[_motherId].dna[10];
genes[11] = chibies[_motherId].dna[11];
}
return genes;
}
/**
* @dev The fusion chamber combines both dnas and adds a generation.
*/
function fusionChibis(uint _fatherId, uint _motherId, uint _seed, string _name, string _battleRoar, uint8 _region) payable public returns (bool success) {
require(fusionPaused == false);
require(ownerOf(_fatherId) == msg.sender);
require(ownerOf(_motherId) != msg.sender);
require(chibies[_fatherId].adult <= now);
require(chibies[_fatherId].exhausted <= now);
require(chibies[_motherId].adult <= now);
require(chibies[_motherId].exhausted <= now);
require(chibies[_motherId].forFusion == true);
require(chibies[_motherId].fusionPrice == msg.value);
// exhaust father and mother
chibies[_motherId].forFusion = false;
chibies[_motherId].exhausted = now.add(exhaustFusion(_motherId));
chibies[_fatherId].exhausted = now.add(exhaustFusion(_fatherId));
uint _gen = 0;
if (chibies[_fatherId].gen >= chibies[_motherId].gen) {
_gen = chibies[_fatherId].gen.add(1);
} else {
_gen = chibies[_motherId].gen.add(1);
}
// fusion chamber here we come
uint16[13] memory dna = traits(geneContract.splitGenes(address(this), _seed, uniqueCounter+1), _seed, _fatherId, _motherId);
// new Chibi is born!
addToken(msg.sender, uniqueCounter);
// father and mother get the chibi in their fusion list
chibies[_fatherId].fusions.push(uniqueCounter);
// only add if mother different than father, otherwise double entry
if (_fatherId != _motherId) {
chibies[_motherId].fusions.push(uniqueCounter);
}
// baby Chibi won't have fusions
uint[] memory _fusions;
// baby Chibis can't be fused
chibies.push(Chibi(
msg.sender,
false,
_name,
dna,
_fatherId,
_motherId,
_gen,
_fusions,
false,
priceFusionChibi,
0,
now.add(adultTime.mul((_gen.mul(_gen)).add(1))),
strConcat(_infoUrlPrefix, uint2str(uniqueCounter))
));
// fires chibi created event
emit ChibiCreated(
uniqueCounter,
chibies[uniqueCounter].owner,
chibies[uniqueCounter].founder,
chibies[uniqueCounter].nameChibi,
chibies[uniqueCounter].dna,
chibies[uniqueCounter].father,
chibies[uniqueCounter].mother,
chibies[uniqueCounter].gen,
chibies[uniqueCounter].adult,
chibies[uniqueCounter].infoUrl
);
// send transfer event
emit Transfer(0x0, msg.sender, uniqueCounter);
// create Warrior
if (battleContract.addWarrior(address(this), uniqueCounter, _region, _battleRoar) == false) revert();
uniqueCounter ++;
// transfer money to seller minus our share, remain stays in contract
uint256 amount = msg.value / 100 * comission;
chibies[_motherId].owner.transfer(amount);
return true;
}
/**
* @dev Guarantees msg.sender is owner of the given token
* @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender
*/
modifier onlyOwnerOf(uint256 _tokenId) {
require(ownerOf(_tokenId) == msg.sender);
_;
}
/**
* @dev Gets the total amount of tokens stored by the contract
* @return uint256 representing the total amount of tokens
*/
function totalSupply() public view returns (uint256) {
return totalTokens;
}
/**
* @dev Gets the balance of the specified address
* @param _owner address to query the balance of
* @return uint256 representing the amount owned by the passed address
*/
function balanceOf(address _owner) public view returns (uint256) {
return ownedTokens[_owner].length;
}
/**
* @dev Gets the list of tokens owned by a given address
* @param _owner address to query the tokens of
* @return uint256[] representing the list of tokens owned by the passed address
*/
function tokensOf(address _owner) public view returns (uint256[]) {
return ownedTokens[_owner];
}
/**
* @dev Gets the owner of the specified token ID
* @param _tokenId uint256 ID of the token to query the owner of
* @return owner address currently marked as the owner of the given token ID
*/
function ownerOf(uint256 _tokenId) public view returns (address) {
address owner = tokenOwner[_tokenId];
require(owner != address(0));
return owner;
}
/**
* @dev Gets the approved address to take ownership of a given token ID
* @param _tokenId uint256 ID of the token to query the approval of
* @return address currently approved to take ownership of the given token ID
*/
function approvedFor(uint256 _tokenId) public view returns (address) {
return tokenApprovals[_tokenId];
}
/**
* @dev Transfers the ownership of a given token ID to another address
* @param _to address to receive the ownership of the given token ID
* @param _tokenId uint256 ID of the token to be transferred
*/
function transfer(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) {
clearApprovalAndTransfer(msg.sender, _to, _tokenId);
}
/**
* @dev Approves another address to claim for the ownership of the given token ID
* @param _to address to be approved for the given token ID
* @param _tokenId uint256 ID of the token to be approved
*/
function approve(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) {
address owner = ownerOf(_tokenId);
require(_to != owner);
if (approvedFor(_tokenId) != 0 || _to != 0) {
tokenApprovals[_tokenId] = _to;
emit Approval(owner, _to, _tokenId);
}
}
/**
* @dev Claims the ownership of a given token ID
* @param _tokenId uint256 ID of the token being claimed by the msg.sender
*/
function takeOwnership(uint256 _tokenId) public {
require(isApprovedFor(msg.sender, _tokenId));
clearApprovalAndTransfer(ownerOf(_tokenId), msg.sender, _tokenId);
}
function mintSpecial(string _name, string _battleRoar, uint8 _region, uint _seed, uint _specialId) public contract_onlyOwner returns (bool success) {
// name can be empty
_mint(_name, _battleRoar, _region, _seed, false, _specialId);
return true;
}
/**
* @dev Mint token function
* @param _name name of the Chibi
*/
function _mint(string _name, string _battleRoar, uint8 _region, uint _seed, bool _founder, uint _specialId) internal {
require(msg.sender != address(0));
addToken(msg.sender, uniqueCounter);
// creates a gen0 Chibi, no father, mother, gen0
uint16[13] memory dna;
if (_specialId > 0) {
dna = geneContract.createGenes(address(this), _seed, _founder, uniqueCounter, _specialId);
} else {
dna = geneContract.createGenes(address(this), _seed, _founder, uniqueCounter, 0);
}
uint[] memory _fusions;
chibies.push(Chibi(
msg.sender,
_founder,
_name,
dna,
0,
0,
0,
_fusions,
false,
priceFusionChibi,
0,
now.add(adultTime),
strConcat(_infoUrlPrefix, uint2str(uniqueCounter))
));
// send transfer event
emit Transfer(0x0, msg.sender, uniqueCounter);
// create Warrior
if (battleContract.addWarrior(address(this), uniqueCounter, _region, _battleRoar) == false) revert();
// fires chibi created event
emit ChibiCreated(
uniqueCounter,
chibies[uniqueCounter].owner,
chibies[uniqueCounter].founder,
chibies[uniqueCounter].nameChibi,
chibies[uniqueCounter].dna,
chibies[uniqueCounter].father,
chibies[uniqueCounter].mother,
chibies[uniqueCounter].gen,
chibies[uniqueCounter].adult,
chibies[uniqueCounter].infoUrl
);
uniqueCounter ++;
}
/**
* @dev buy gen0 chibis
* @param _name name of the Chibi
*/
function buyGEN0Chibi(string _name, string _battleRoar, uint8 _region, uint _seed) payable public returns (bool success) {
require(paused == false);
// cost at least 100 wei
require(msg.value == priceChibi);
// name can be empty
_mint(_name, _battleRoar, _region, _seed, false, 0);
return true;
}
/**
* @dev set default sale price of Chibies
* @param _priceChibi price of 1 Chibi in Wei
*/
function setChibiGEN0Price(uint _priceChibi) public contract_onlyOwner returns (bool success) {
priceChibi = _priceChibi;
return true;
}
/**
* @dev Tells whether the msg.sender is approved for the given token ID or not
* This function is not private so it can be extended in further implementations like the operatable ERC721
* @param _owner address of the owner to query the approval of
* @param _tokenId uint256 ID of the token to query the approval of
* @return bool whether the msg.sender is approved for the given token ID or not
*/
function isApprovedFor(address _owner, uint256 _tokenId) internal view returns (bool) {
return approvedFor(_tokenId) == _owner;
}
/**
* @dev Internal function to clear current approval and transfer the ownership of a given token ID
* @param _from address which you want to send tokens from
* @param _to address which you want to transfer the token to
* @param _tokenId uint256 ID of the token to be transferred
*/
function clearApprovalAndTransfer(address _from, address _to, uint256 _tokenId) internal {
require(_to != address(0));
require(_to != ownerOf(_tokenId));
require(ownerOf(_tokenId) == _from);
clearApproval(_from, _tokenId);
removeToken(_from, _tokenId);
addToken(_to, _tokenId);
// Chibbi code
chibies[_tokenId].owner = _to;
chibies[_tokenId].forFusion = false;
emit Transfer(_from, _to, _tokenId);
}
/**
* @dev Internal function to clear current approval of a given token ID
* @param _tokenId uint256 ID of the token to be transferred
*/
function clearApproval(address _owner, uint256 _tokenId) private {
require(ownerOf(_tokenId) == _owner);
tokenApprovals[_tokenId] = 0;
emit Approval(_owner, 0, _tokenId);
}
/**
* @dev Internal function to add a token ID to the list of a given address
* @param _to address representing the new owner of the given token ID
* @param _tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function addToken(address _to, uint256 _tokenId) private {
require(tokenOwner[_tokenId] == address(0));
tokenOwner[_tokenId] = _to;
uint256 length = balanceOf(_to);
ownedTokens[_to].push(_tokenId);
ownedTokensIndex[_tokenId] = length;
totalTokens++;
}
/**
* @dev Internal function to remove a token ID from the list of a given address
* @param _from address representing the previous owner of the given token ID
* @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function removeToken(address _from, uint256 _tokenId) private {
require(ownerOf(_tokenId) == _from);
uint256 tokenIndex = ownedTokensIndex[_tokenId];
uint256 lastTokenIndex = balanceOf(_from).sub(1);
uint256 lastToken = ownedTokens[_from][lastTokenIndex];
tokenOwner[_tokenId] = 0;
ownedTokens[_from][tokenIndex] = lastToken;
ownedTokens[_from][lastTokenIndex] = 0;
// Note that this will handle single-element arrays. In that case, both tokenIndex and lastTokenIndex are going to
// be zero. Then we can make sure that we will remove _tokenId from the ownedTokens list since we are first swapping
// the lastToken to the first position, and then dropping the element placed in the last position of the list
ownedTokens[_from].length--;
ownedTokensIndex[_tokenId] = 0;
ownedTokensIndex[lastToken] = tokenIndex;
totalTokens = totalTokens.sub(1);
}
/**
* @dev Send Ether to owner
* @param _address Receiving address
* @param amount Amount in WEI to send
**/
function weiToOwner(address _address, uint amount) public contract_onlyOwner {
require(amount <= address(this).balance);
_address.transfer(amount);
}
/**
* @dev Return the infoUrl of Chibi
* @param _tokenId infoUrl of _tokenId
**/
function tokenMetadata(uint256 _tokenId) constant public returns (string infoUrl) {
return chibies[_tokenId].infoUrl;
}
function tokenURI(uint256 _tokenId) public view returns (string) {
return chibies[_tokenId].infoUrl;
}
//
// some helpful functions
// https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol
//
function uint2str(uint i) internal pure returns (string) {
if (i == 0) return "0";
uint j = i;
uint len;
while (j != 0){
len++;
j /= 10;
}
bytes memory bstr = new bytes(len);
uint k = len - 1;
while (i != 0){
bstr[k--] = byte(48 + i % 10);
i /= 10;
}
return string(bstr);
}
function strConcat(string _a, string _b) internal pure returns (string) {
bytes memory _ba = bytes(_a);
bytes memory _bb = bytes(_b);
string memory ab = new string(_ba.length + _bb.length);
bytes memory bab = bytes(ab);
uint k = 0;
for (uint i = 0; i < _ba.length; i++) bab[k++] = _ba[i];
for (i = 0; i < _bb.length; i++) bab[k++] = _bb[i];
return string(bab);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":false,"inputs":[{"name":"_tokenId1","type":"uint256"},{"name":"_tokenId2","type":"uint256"}],"name":"exhaustChibis","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_adultTimeSecs","type":"uint256"}],"name":"setAdultTime","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_comission","type":"uint256"}],"name":"setComission","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"amount","type":"uint256"}],"name":"weiToOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_setPaused","type":"bool"}],"name":"setGameStateFCF","outputs":[{"name":"_pausedFCF","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_price","type":"uint256"}],"name":"setChibiForFusion","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"chibies","outputs":[{"name":"owner","type":"address"},{"name":"founder","type":"bool"},{"name":"nameChibi","type":"string"},{"name":"father","type":"uint256"},{"name":"mother","type":"uint256"},{"name":"gen","type":"uint256"},{"name":"forFusion","type":"bool"},{"name":"fusionPrice","type":"uint256"},{"name":"exhausted","type":"uint256"},{"name":"adult","type":"uint256"},{"name":"infoUrl","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_priceChibi","type":"uint256"}],"name":"setChibiGEN0Price","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setGeneContractAddress","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"approvedFor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setBattleRemoveContractAddress","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_name","type":"string"}],"name":"renameChibi","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"contract_owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_setPaused","type":"bool"}],"name":"setGameState","outputs":[{"name":"_paused","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_fatherId","type":"uint256"},{"name":"_motherId","type":"uint256"},{"name":"_seed","type":"uint256"},{"name":"_name","type":"string"},{"name":"_battleRoar","type":"string"},{"name":"_region","type":"uint8"}],"name":"fusionChibis","outputs":[{"name":"success","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setBattleContractAddress","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_setPaused","type":"bool"}],"name":"setGameStateFusion","outputs":[{"name":"_pausedFusions","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOf","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"queryFusionData","outputs":[{"name":"fusions","type":"uint256[]"},{"name":"forFusion","type":"bool"},{"name":"costFusion","type":"uint256"},{"name":"adult","type":"uint256"},{"name":"exhausted","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenMetadata","outputs":[{"name":"infoUrl","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_exhaustionTime","type":"uint256"}],"name":"setExhaustionTime","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"isNecromancer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"cancelChibiForFusion","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"queryChibi","outputs":[{"name":"nameChibi","type":"string"},{"name":"infoUrl","type":"string"},{"name":"dna","type":"uint16[13]"},{"name":"father","type":"uint256"},{"name":"mother","type":"uint256"},{"name":"gen","type":"uint256"},{"name":"adult","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setFcfContractAddress","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_battleRoar","type":"string"},{"name":"_region","type":"uint8"},{"name":"_seed","type":"uint256"}],"name":"buyChibiWithFcf","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_battleRoar","type":"string"},{"name":"_region","type":"uint8"},{"name":"_seed","type":"uint256"}],"name":"buyGEN0Chibi","outputs":[{"name":"success","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_battleRoar","type":"string"},{"name":"_region","type":"uint8"},{"name":"_seed","type":"uint256"},{"name":"_specialId","type":"uint256"}],"name":"mintSpecial","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"contract_newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_price","type":"uint256"}],"name":"setMinimumPriceFusion","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"takeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getGameState","outputs":[{"name":"_paused","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_infoUrl","type":"string"}],"name":"changeInfoUrl","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"queryChibiAdd","outputs":[{"name":"owner","type":"address"},{"name":"founder","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"priceChibi","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"queryFusionData_ext","outputs":[{"name":"forFusion","type":"bool"},{"name":"fusionPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"prefix","type":"string"}],"name":"setInfoUrlPrefix","outputs":[{"name":"infoUrlPrefix","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":true,"name":"_owner","type":"address"},{"indexed":false,"name":"founder","type":"bool"},{"indexed":false,"name":"_name","type":"string"},{"indexed":false,"name":"dna","type":"uint16[13]"},{"indexed":false,"name":"father","type":"uint256"},{"indexed":false,"name":"mother","type":"uint256"},{"indexed":false,"name":"gen","type":"uint256"},{"indexed":false,"name":"adult","type":"uint256"},{"indexed":false,"name":"infoUrl","type":"string"}],"name":"ChibiCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"}],"name":"ChibiForFusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"ChibiForFusionCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"battleRoar","type":"string"}],"name":"WarriorCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"}]Contract Creation Code
60806040523480156200001157600080fd5b5060008054600160a060020a03191633600160a060020a0316178155600d5567016345785d8a0000600b55662386f26fc10000600c55611c20600e55610e10600f55601480546201000061010060ff1990921660011761ff0019169190911762ff00001916179055605a6010556040805160608101825260248082527f68747470733a2f2f636869626967616d652e696f2f6368696269732e7068703f602083019081527f69646a3d000000000000000000000000000000000000000000000000000000009290930191909152620000ec91601291620000f3565b5062000198565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200013657805160ff191683800117855562000166565b8280016001018555821562000166579182015b828111156200016657825182559160200191906001019062000149565b506200017492915062000178565b5090565b6200019591905b808211156200017457600081556001016200017f565b90565b61463380620001a86000396000f3006080604052600436106102215763ffffffff60e060020a600035041663031122ef8114610226578063060907381461025557806306fdde031461026d578063095ea7b3146102f75780630be80f391461031d5780630db5db26146103355780631119611714610359578063141316111461037357806318160ddd1461038e5780631e4d0caf146103b55780631e7de8cc146105045780632a2836071461051c5780632a6dd48f1461053d5780632adb232414610571578063363fa6b214610592578063384f58eb146105f057806338cc17ee146106055780633a38b90f1461061f57806346864cd8146106b85780635468e4e1146106d95780635a3f2672146106f35780635d01615f146107645780636352211e146107f05780636914db60146108085780636daa9f561461082057806370a08231146108385780637774c3941461085957806379ba5097146108715780637f486ca6146108865780638a3f8a231461089e5780638a95fbe8146109dc5780638b73c10e146109fd578063917fd83914610a9f578063954cbe3f14610b3457806395d89b4114610bda5780639727161514610bef578063a9059cbb14610c04578063ab02188414610c28578063b2e6ceeb14610c40578063b7d0628b14610c58578063c3af38fa14610c6d578063c87b56dd14610808578063cbf9a12514610ccb578063cf38b60914610d06578063dac3f6d214610d1b578063f1d9194214610d4e578063f2fde38b14610d6e575b600080fd5b34801561023257600080fd5b50610241600435602435610d8f565b604080519115158252519081900360200190f35b34801561026157600080fd5b50610241600435610e21565b34801561027957600080fd5b50610282610e46565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102bc5781810151838201526020016102a4565b50505050905090810190601f1680156102e95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030357600080fd5b5061031b600160a060020a0360043516602435610e7d565b005b34801561032957600080fd5b50610241600435610f61565b34801561034157600080fd5b5061031b600160a060020a0360043516602435610f86565b34801561036557600080fd5b506102416004351515610ff3565b34801561037f57600080fd5b5061024160043560243561102f565b34801561039a57600080fd5b506103a3611236565b60408051918252519081900360200190f35b3480156103c157600080fd5b506103cd60043561123d565b604051808c600160a060020a0316600160a060020a031681526020018b151515158152602001806020018a8152602001898152602001888152602001871515151581526020018681526020018581526020018481526020018060200183810383528c818151815260200191508051906020019080838360005b8381101561045e578181015183820152602001610446565b50505050905090810190601f16801561048b5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156104be5781810151838201526020016104a6565b50505050905090810190601f1680156104eb5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b34801561051057600080fd5b506102416004356113d0565b34801561052857600080fd5b50610241600160a060020a03600435166113f5565b34801561054957600080fd5b50610555600435611436565b60408051600160a060020a039092168252519081900360200190f35b34801561057d57600080fd5b50610241600160a060020a0360043516611451565b34801561059e57600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526102419583359536956044949193909101919081908401838280828437509497506114929650505050505050565b3480156105fc57600080fd5b506105556114f8565b34801561061157600080fd5b506102416004351515611507565b604080516020601f606435600481810135928301849004840285018401909552818452610241948035946024803595604435953695608494930191819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050923560ff16935061155992505050565b3480156106c457600080fd5b50610241600160a060020a03600435166120a7565b3480156106e557600080fd5b5061024160043515156120f6565b3480156106ff57600080fd5b50610714600160a060020a0360043516612134565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610750578181015183820152602001610738565b505050509050019250505060405180910390f35b34801561077057600080fd5b5061077c6004356121a0565b604051808060200186151515158152602001858152602001848152602001838152602001828103825287818151815260200191508051906020019060200280838360005b838110156107d85781810151838201526020016107c0565b50505050905001965050505050505060405180910390f35b3480156107fc57600080fd5b506105556004356122b8565b34801561081457600080fd5b506102826004356122e6565b34801561082c57600080fd5b5061024160043561238f565b34801561084457600080fd5b506103a3600160a060020a03600435166123b4565b34801561086557600080fd5b506102416004356123cf565b34801561087d57600080fd5b5061031b61244a565b34801561089257600080fd5b506102416004356124c9565b3480156108aa57600080fd5b506108b66004356125b9565b60405180806020018060200188600d60200280838360005b838110156108e65781810151838201526020016108ce565b5050505090500187815260200186815260200185815260200184815260200183810383528a818151815260200191508051906020019080838360005b8381101561093a578181015183820152602001610922565b50505050905090810190601f1680156109675780820380516001836020036101000a031916815260200191505b5083810382528951815289516020918201918b019080838360005b8381101561099a578181015183820152602001610982565b50505050905090810190601f1680156109c75780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b3480156109e857600080fd5b50610241600160a060020a036004351661283d565b348015610a0957600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261024194369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050833560ff1694505050602090910135905061287e565b6040805160206004803580820135601f810184900484028501840190955284845261024194369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050833560ff16945050506020909101359050612b48565b348015610b4057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261024194369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050833560ff1694505050602082013591604001359050612b83565b348015610be657600080fd5b50610282612bae565b348015610bfb57600080fd5b50610555612be5565b348015610c1057600080fd5b5061031b600160a060020a0360043516602435612bf4565b348015610c3457600080fd5b50610241600435612c26565b348015610c4c57600080fd5b5061031b600435612c4b565b348015610c6457600080fd5b50610241612c76565b348015610c7957600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610241958335953695604494919390910191908190840183828082843750949750612c7f9650505050505050565b348015610cd757600080fd5b50610ce3600435612cf8565b60408051600160a060020a03909316835290151560208301528051918290030190f35b348015610d1257600080fd5b506103a3612d5a565b348015610d2757600080fd5b50610d33600435612d60565b60408051921515835260208301919091528051918290030190f35b348015610d5a57600080fd5b506102826004803560248101910135612db5565b348015610d7a57600080fd5b5061031b600160a060020a0360043516612e73565b600a5460009033600160a060020a03908116911614610dad57600080fd5b610dc6610db984612eb0565b429063ffffffff61303a16565b6013805485908110610dd457fe5b90600052602060002090600c020160090181905550610df5610db983612eb0565b6013805484908110610e0357fe5b600091825260209091206009600c9092020101555060015b92915050565b6000805433600160a060020a03908116911614610e3d57600080fd5b50600e55600190565b60408051808201909152600e81527f4368696269204669676874657273000000000000000000000000000000000000602082015281565b60008133600160a060020a0316610e93826122b8565b600160a060020a031614610ea657600080fd5b610eaf836122b8565b9150600160a060020a038481169083161415610eca57600080fd5b610ed383611436565b600160a060020a0316151580610ef15750600160a060020a03841615155b15610f5b576000838152600460209081526040918290208054600160a060020a031916600160a060020a03888116918217909255835187815293519093918616927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35b50505050565b6000805433600160a060020a03908116911614610f7d57600080fd5b50601055600190565b60005433600160a060020a03908116911614610fa157600080fd5b600160a060020a03301631811115610fb857600080fd5b604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015610fee573d6000803e3d6000fd5b505050565b6000805433600160a060020a0390811691161461100f57600080fd5b506014805461ff0019166101009215158302179081905560ff9190041690565b600033600160a060020a0316611044846122b8565b600160a060020a03161461105757600080fd5b600c5482101561106657600080fd5b4260138481548110151561107657fe5b90600052602060002090600c0201600a01541115151561109557600080fd5b426013848154811015156110a557fe5b90600052602060002090600c020160090154111515156110c457600080fd5b60138054849081106110d257fe5b600091825260209091206007600c90920201015460ff16156110f357600080fd5b600954604080517f2dfd8ffe000000000000000000000000000000000000000000000000000000008152600481018690529051600160a060020a0390921691632dfd8ffe916024808201926020929091908290030181600087803b15801561115a57600080fd5b505af115801561116e573d6000803e3d6000fd5b505050506040513d602081101561118457600080fd5b50511561119057600080fd5b60016013848154811015156111a157fe5b90600052602060002090600c020160070160006101000a81548160ff021916908315150217905550816013848154811015156111d957fe5b90600052602060002090600c0201600801819055507f060023ee61664d6b053922edb042127ba48415d2ebf3a960e20faf9945999ae68383604051808381526020018281526020019250505060405180910390a150600192915050565b6002545b90565b601380548290811061124b57fe5b6000918252602091829020600c919091020180546001808301805460408051600261010095841615959095026000190190921693909304601f8101879004870282018701909352828152600160a060020a038416965060a060020a90930460ff16949091908301828280156113015780601f106112d657610100808354040283529160200191611301565b820191906000526020600020905b8154815290600101906020018083116112e457829003601f168201915b505050600384015460048501546005860154600787015460088801546009890154600a8a0154600b8b018054604080516020601f600260001960018716156101000201909516949094049384018190048102820181019092528281529c9d999c989b5096995060ff9095169793969295919490918301828280156113c65780601f1061139b576101008083540402835291602001916113c6565b820191906000526020600020905b8154815290600101906020018083116113a957829003601f168201915b505050505090508b565b6000805433600160a060020a039081169116146113ec57600080fd5b50600b55600190565b6000805433600160a060020a0390811691161461141157600080fd5b5060078054600160a060020a038316600160a060020a03199091161790556001919050565b600090815260046020526040902054600160a060020a031690565b6000805433600160a060020a0390811691161461146d57600080fd5b5060118054600160a060020a038316600160a060020a03199091161790556001919050565b600033600160a060020a03166114a7846122b8565b600160a060020a0316146114ba57600080fd5b816013848154811015156114ca57fe5b90600052602060002090600c020160010190805190602001906114ee9291906143d6565b5060019392505050565b600054600160a060020a031681565b6000805433600160a060020a0390811691161461152357600080fd5b506014805460ff191691151591821761ff00191661010083021762ff000019166201000092909202919091179081905560ff1690565b600080611564614454565b60145460609060009062010000900460ff161561158057600080fd5b33600160a060020a03166115938c6122b8565b600160a060020a0316146115a657600080fd5b33600160a060020a03166115b98b6122b8565b600160a060020a031614156115cd57600080fd5b4260138c8154811015156115dd57fe5b90600052602060002090600c0201600a0154111515156115fc57600080fd5b4260138c81548110151561160c57fe5b90600052602060002090600c0201600901541115151561162b57600080fd5b4260138b81548110151561163b57fe5b90600052602060002090600c0201600a01541115151561165a57600080fd5b4260138b81548110151561166a57fe5b90600052602060002090600c0201600901541115151561168957600080fd5b601380548b90811061169757fe5b600091825260209091206007600c90920201015460ff1615156001146116bc57600080fd5b3460138b8154811015156116cc57fe5b90600052602060002090600c0201600801541415156116ea57600080fd5b600060138b8154811015156116fb57fe5b60009182526020909120600c90910201600701805460ff1916911515919091179055611729610db98b613054565b601380548c90811061173757fe5b90600052602060002090600c020160090181905550611758610db98c613054565b601380548d90811061176657fe5b90600052602060002090600c0201600901819055506000935060138a81548110151561178e57fe5b90600052602060002090600c02016005015460138c8154811015156117af57fe5b90600052602060002090600c020160050154101515611803576117fc600160138d8154811015156117dc57fe5b90600052602060002090600c02016005015461303a90919063ffffffff16565b935061181a565b611817600160138c8154811015156117dc57fe5b93505b600754600d54604080517faebaf396000000000000000000000000000000000000000000000000000000008152600160a060020a033081166004830152602482018e90526001909301604482015290516118df93929092169163aebaf396916064808201926101a0929091908290030181600087803b15801561189c57600080fd5b505af11580156118b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101a08110156118d657600080fd5b508a8d8d6132cd565b92506118ed33600d546134ec565b601380548c9081106118fb57fe5b60009182526020808320600d54600c93909302016006018054600181018255908452922090910155898b1461196157601380548b90811061193857fe5b60009182526020808320600d54600c939093020160060180546001810182559084529220909101555b60136101a06040519081016040528033600160a060020a031681526020016000151581526020018a81526020018581526020018d81526020018c8152602001868152602001848152602001600015158152602001600c548152602001600081526020016119fd610db96119ee60016119e28b8c61358790919063ffffffff16565b9063ffffffff61303a16565b600e549063ffffffff61358716565b815260128054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815293810193611aa59390929091830182828015611a905780601f10611a6557610100808354040283529160200191611a90565b820191906000526020600020905b815481529060010190602001808311611a7357829003601f168201915b5050505050611aa0600d546135b2565b6136bd565b90528154600181810180855560009485526020948590208451600c90940201805486860151151560a060020a0274ff000000000000000000000000000000000000000019600160a060020a03909616600160a060020a03199092169190911794909416939093178355604084015180519195611b26938501929101906143d6565b506060820151611b3c906002830190600d614474565b506080820151600382015560a0820151600482015560c0820151600582015560e08201518051611b76916006840191602090910190614506565b5061010082015160078201805460ff191691151591909117905561012082015160088201556101408201516009820155610160820151600a8201556101808201518051611bcd91600b8401916020909101906143d6565b505050506013600d54815481101515611be257fe5b60009182526020909120600c9091020154600d5460138054600160a060020a03909316927ff6e9aabecc5287a729e3ca16a62e6c7b1b3d972e60b0fb93d9906585d4655a7192919082908110611c3457fe5b90600052602060002090600c020160000160149054906101000a900460ff166013600d54815481101515611c6457fe5b90600052602060002090600c02016001016013600d54815481101515611c8657fe5b90600052602060002090600c02016002016013600d54815481101515611ca857fe5b90600052602060002090600c0201600301546013600d54815481101515611ccb57fe5b90600052602060002090600c0201600401546013600d54815481101515611cee57fe5b90600052602060002090600c0201600501546013600d54815481101515611d1157fe5b90600052602060002090600c0201600a01546013600d54815481101515611d3457fe5b90600052602060002090600c0201600b01604051808a8152602001891515151581526020018060200188600d8015611da9576020028201916000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611d705790505b505087815260208101879052604081018690526060810185905260a0838203810183528a5460026001821615610100026000190190911604908201819052608082019160c001908b908015611e3f5780601f10611e1457610100808354040283529160200191611e3f565b820191906000526020600020905b815481529060010190602001808311611e2257829003601f168201915b5050838103825284546002600019610100600184161502019091160480825260209091019085908015611eb35780601f10611e8857610100808354040283529160200191611eb3565b820191906000526020600020905b815481529060010190602001808311611e9657829003601f168201915b50509b50505050505050505050505060405180910390a2600d546040805191825251600160a060020a033316916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3600954600d546040517f51dac0fd00000000000000000000000000000000000000000000000000000000815230600160a060020a03818116600484019081526024840185905260ff8c1660448501526080606485019081528d5160848601528d5192909616956351dac0fd9593948d938f93929160a40190602085019080838360005b83811015611fa8578181015183820152602001611f90565b50505050905090810190601f168015611fd55780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015611ff757600080fd5b505af115801561200b573d6000803e3d6000fd5b505050506040513d602081101561202157600080fd5b5051151561202e57600080fd5b600d805460010190556010546064340402905060138a81548110151561205057fe5b600091825260208220600c9091020154604051600160a060020a039091169183156108fc02918491818181858888f19350505050158015612095573d6000803e3d6000fd5b5060019b9a5050505050505050505050565b6000805433600160a060020a039081169116146120c357600080fd5b5060098054600160a060020a038316600160a060020a03199182168117909255600a805490911690911790556001919050565b6000805433600160a060020a0390811691161461211257600080fd5b506014805462ff00001916620100009215158302179081905560ff9190041690565b600160a060020a03811660009081526005602090815260409182902080548351818402810184019094528084526060939283018282801561219457602002820191906000526020600020905b815481526020019060010190808311612180575b50505050509050919050565b60606000806000806013868154811015156121b757fe5b90600052602060002090600c02016006016013878154811015156121d757fe5b600091825260209091206007600c9092020101546013805460ff90921691899081106121ff57fe5b90600052602060002090600c02016008015460138981548110151561222057fe5b90600052602060002090600c0201600a015460138a81548110151561224157fe5b90600052602060002090600c0201600901548480548060200260200160405190810160405280929190818152602001828054801561229e57602002820191906000526020600020905b81548152602001906001019080831161228a575b505050505094509450945094509450945091939590929450565b600081815260036020526040812054600160a060020a03168015156122dc57600080fd5b8091505b50919050565b60606013828154811015156122f757fe5b6000918252602091829020600b600c9092020101805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156121945780601f1061236257610100808354040283529160200191612194565b820191906000526020600020905b8154815290600101906020018083116123705750939695505050505050565b6000805433600160a060020a039081169116146123ab57600080fd5b50600f55600190565b600160a060020a031660009081526005602052604090205490565b6000600a5b600d8110156124415760138054849081106123eb57fe5b90600052602060002090600c020160020181600d8110151561240957fe5b601091828204019190066002029054906101000a900461ffff1661ffff166103e8141561243957600191506122e0565b6001016123d4565b50600092915050565b60015433600160a060020a0390811691161461246557600080fd5b60015460008054604051600160a060020a0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36001805460008054600160a060020a0319908116600160a060020a03841617909155169055565b600033600160a060020a03166124de836122b8565b600160a060020a031614158015612504575060115433600160a060020a03908116911614155b1561250e57600080fd5b601380548390811061251c57fe5b600091825260209091206007600c90920201015460ff16151560011461254157600080fd5b600060138381548110151561255257fe5b90600052602060002090600c020160070160006101000a81548160ff0219169083151502179055507f48c0848450dc82471d2b8d155ef9ca070ae64b4a6a26faeef472b7cbf773d1bb826040518082815260200191505060405180910390a1506000919050565b6060806125c4614454565b6000806000806013888154811015156125d957fe5b90600052602060002090600c02016001016013898154811015156125f957fe5b90600052602060002090600c0201600b0160138a81548110151561261957fe5b90600052602060002090600c020160020160138b81548110151561263957fe5b90600052602060002090600c02016003015460138c81548110151561265a57fe5b90600052602060002090600c02016004015460138d81548110151561267b57fe5b90600052602060002090600c02016005015460138e81548110151561269c57fe5b6000918252602091829020600a600c909202010154875460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815291928991908301828280156127375780601f1061270c57610100808354040283529160200191612737565b820191906000526020600020905b81548152906001019060200180831161271a57829003601f168201915b5050895460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152959c508b9450925084019050828280156127c55780601f1061279a576101008083540402835291602001916127c5565b820191906000526020600020905b8154815290600101906020018083116127a857829003601f168201915b5050604080516101a0810191829052949a50899350600d92509050826000855b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116127e5579050505050505094509650965096509650965096509650919395979092949650565b6000805433600160a060020a0390811691161461285957600080fd5b5060088054600160a060020a038316600160a060020a03199091161790556001919050565b600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a03338116600483015291516000938493670de0b6b3a7640000939116916370a082319160248082019260209290919082900301818887803b1580156128f357600080fd5b505af1158015612907573d6000803e3d6000fd5b505050506040513d602081101561291d57600080fd5b5051101561292a57600080fd5b601454610100900460ff161561293f57600080fd5b600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a033081166004830152915191909216916370a082319160248083019260209291908290030181600087803b1580156129a757600080fd5b505af11580156129bb573d6000803e3d6000fd5b505050506040513d60208110156129d157600080fd5b5051600854604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0333811660048301523081166024830152670de0b6b3a7640000604483015291519394509116916323b872dd916064808201926020929091908290030181600087803b158015612a5357600080fd5b505af1158015612a67573d6000803e3d6000fd5b505050506040513d6020811015612a7d57600080fd5b505115612a9457612a94868686866001600061380c565b600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a0330811660048301529151670de0b6b3a76400009392909216916370a08231916024808201926020929091908290030181600087803b158015612b0757600080fd5b505af1158015612b1b573d6000803e3d6000fd5b505050506040513d6020811015612b3157600080fd5b5051038114612b3c57fe5b50600195945050505050565b60145460009060ff1615612b5b57600080fd5b600b543414612b6957600080fd5b612b788585858560008061380c565b506001949350505050565b6000805433600160a060020a03908116911614612b9f57600080fd5b612b3c8686868660008761380c565b60408051808201909152600381527f4342460000000000000000000000000000000000000000000000000000000000602082015281565b600154600160a060020a031681565b8033600160a060020a0316612c08826122b8565b600160a060020a031614612c1b57600080fd5b610fee338484614054565b6000805433600160a060020a03908116911614612c4257600080fd5b50600c55600190565b612c553382614193565b1515612c6057600080fd5b612c73612c6c826122b8565b3383614054565b50565b60145460ff1690565b600033600160a060020a0316612c94846122b8565b600160a060020a031614158015612cba575060005433600160a060020a03908116911614155b15612cc457600080fd5b81601384815481101515612cd457fe5b90600052602060002090600c0201600b0190805190602001906114ee9291906143d6565b600080601383815481101515612d0a57fe5b60009182526020909120600c909102015460138054600160a060020a039092169185908110612d3557fe5b60009182526020909120600c9091020154909460a060020a90910460ff169350915050565b600b5481565b600080601383815481101515612d7257fe5b600091825260209091206007600c9092020101546013805460ff9092169185908110612d9a57fe5b90600052602060002090600c02016008015491509150915091565b60005460609033600160a060020a03908116911614612dd357600080fd5b612ddf60128484614540565b506012805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015612e665780601f10612e3b57610100808354040283529160200191612e66565b820191906000526020600020905b815481529060010190602001808311612e4957829003601f168201915b5050505050905092915050565b60005433600160a060020a03908116911614612e8e57600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b600080600a5b600d811015612f8f576013805485908110612ecd57fe5b90600052602060002090600c020160020181600d81101515612eeb57fe5b601091828204019190066002029054906101000a900461ffff1661ffff1660011415612f1c57600f54600302820191505b6013805485908110612f2a57fe5b90600052602060002090600c020160020181600d81101515612f4857fe5b601091828204019190066002029054906101000a900461ffff1661ffff1660031415612f8757600f54612f8290600263ffffffff6141b916565b820191505b600101612eb6565b60075460138054600160a060020a039092169163927f4be0919087908110612fb357fe5b90600052602060002090600c020160050154846040518363ffffffff1660e060020a0281526004018083815260200182815260200192505050602060405180830381600087803b15801561300657600080fd5b505af115801561301a573d6000803e3d6000fd5b505050506040513d602081101561303057600080fd5b5051949350505050565b60008282018381101561304957fe5b8091505b5092915050565b6000806000806000925060138581548110151561306d57fe5b600091825260209091206002600c90920201015460138054720100000000000000000000000000000000000090920461ffff16935061270f91879081106130b057fe5b600091825260209091206002600c9092020101547201000000000000000000000000000000000000900461ffff1610156131475760138054869081106130f257fe5b600091825260209091206002600c9092020101805473ffff00000000000000000000000000000000000019811661ffff7201000000000000000000000000000000000000928390048116600101169091021790555b50600a5b600d81101561321757601380548690811061316257fe5b90600052602060002090600c020160020181600d8110151561318057fe5b601081049091015461ffff6002600f90931683026101000a9091041614156131b6576131b382600163ffffffff6141d016565b91505b60138054869081106131c457fe5b90600052602060002090600c020160020181600d811015156131e257fe5b601091828204019190066002029054906101000a900461ffff1661ffff166004141561320f576001909101905b60010161314b565b60075460138054600160a060020a039092169163d3f8cc9591908890811061323b57fe5b90600052602060002090600c02016005015484600f546040518463ffffffff1660e060020a028152600401808481526020018381526020018281526020019350505050602060405180830381600087803b15801561329857600080fd5b505af11580156132ac573d6000803e3d6000fd5b505050506040513d60208110156132c257600080fd5b505195945050505050565b6132d5614454565b604080518581526c01000000000000000000000000600160a060020a0341160260208201524260348201529051908190036054019020600570ffffffffffffffffffffffffffffffffff918216061680151561339257601380548590811061333957fe5b600091825260209091206002600c90920201015460a060020a900461ffff16610140870152601380548490811061336c57fe5b600091825260209091206002600c90920201015460b060020a900461ffff166101608701525b80600114156134025760138054849081106133a957fe5b600091825260209091206002600c90920201015460a060020a900461ffff1661014087015260138054859081106133dc57fe5b600091825260209091206002600c90920201015460b060020a900461ffff166101608701525b806002141561347257601380548590811061341957fe5b600091825260209091206002600c90920201015460a060020a900461ffff16610140870152601380548590811061344c57fe5b600091825260209091206002600c90920201015460b060020a900461ffff166101608701525b80600314156134e257601380548490811061348957fe5b600091825260209091206002600c90920201015460a060020a900461ffff1661014087015260138054849081106134bc57fe5b600091825260209091206002600c90920201015460b060020a900461ffff166101608701525b5093949350505050565b600081815260036020526040812054600160a060020a03161561350e57600080fd5b60008281526003602052604090208054600160a060020a031916600160a060020a03851617905561353e836123b4565b600160a060020a03909316600090815260056020908152604080832080546001818101835591855283852001869055948352600690915290209290925560028054909101905550565b60008083151561359a576000915061304d565b508282028284828115156135aa57fe5b041461304957fe5b606060008082818515156135fb5760408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015294506136b4565b8593505b831561361657600190920191600a840493506135ff565b826040519080825280601f01601f191660200182016040528015613644578160200160208202803883390190505b5091505060001982015b85156136b057815160001982019160f860020a6030600a8a06010291849190811061367557fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8604955061364e565b8194505b50505050919050565b606080606080606060008088955087945084518651016040519080825280601f01601f191660200182016040528015613700578160200160208202803883390190505b50935083925060009150600090505b855181101561378557858181518110151561372657fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561374d57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060010161370f565b5060005b84518110156137ff5784818151811015156137a057fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156137c757fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613789565b5090979650505050505050565b613814614454565b606033600160a060020a0316151561382b57600080fd5b61383733600d546134ec565b600083111561390c57600754600d54604080517fc6296765000000000000000000000000000000000000000000000000000000008152600160a060020a033081166004830152602482018a905288151560448301526064820193909352608481018790529051919092169163c62967659160a4808301926101a09291908290030181600087803b1580156138ca57600080fd5b505af11580156138de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101a081101561390457600080fd5b5091506139d6565b600754600d54604080517fc6296765000000000000000000000000000000000000000000000000000000008152600160a060020a033081166004830152602482018a9052881515604483015260648201939093526000608482018190529151929093169263c62967659260a4808301936101a09383900390910190829087803b15801561399857600080fd5b505af11580156139ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101a08110156139d257600080fd5b5091505b60136101a06040519081016040528033600160a060020a0316815260200186151581526020018a8152602001848152602001600081526020016000815260200160008152602001838152602001600015158152602001600c54815260200160008152602001613a50600e544261303a90919063ffffffff16565b815260128054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815293810193613ab89390929091830182828015611a905780601f10611a6557610100808354040283529160200191611a90565b90528154600181810180855560009485526020948590208451600c90940201805486860151151560a060020a0274ff000000000000000000000000000000000000000019600160a060020a03909616600160a060020a03199092169190911794909416939093178355604084015180519195613b39938501929101906143d6565b506060820151613b4f906002830190600d614474565b506080820151600382015560a0820151600482015560c0820151600582015560e08201518051613b89916006840191602090910190614506565b5061010082015160078201805460ff191691151591909117905561012082015160088201556101408201516009820155610160820151600a8201556101808201518051613be091600b8401916020909101906143d6565b5050600d546040805191825251600160a060020a0333169350600092507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3600954600d546040517f51dac0fd00000000000000000000000000000000000000000000000000000000815230600160a060020a03818116600484019081526024840185905260ff8c1660448501526080606485019081528d5160848601528d5192909616956351dac0fd9593948d938f93929160a40190602085019080838360005b83811015613cc2578181015183820152602001613caa565b50505050905090810190601f168015613cef5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015613d1157600080fd5b505af1158015613d25573d6000803e3d6000fd5b505050506040513d6020811015613d3b57600080fd5b50511515613d4857600080fd5b6013600d54815481101515613d5957fe5b60009182526020909120600c9091020154600d5460138054600160a060020a03909316927ff6e9aabecc5287a729e3ca16a62e6c7b1b3d972e60b0fb93d9906585d4655a7192919082908110613dab57fe5b90600052602060002090600c020160000160149054906101000a900460ff166013600d54815481101515613ddb57fe5b90600052602060002090600c02016001016013600d54815481101515613dfd57fe5b90600052602060002090600c02016002016013600d54815481101515613e1f57fe5b90600052602060002090600c0201600301546013600d54815481101515613e4257fe5b90600052602060002090600c0201600401546013600d54815481101515613e6557fe5b90600052602060002090600c0201600501546013600d54815481101515613e8857fe5b90600052602060002090600c0201600a01546013600d54815481101515613eab57fe5b90600052602060002090600c0201600b01604051808a8152602001891515151581526020018060200188600d8015613f20576020028201916000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411613ee75790505b505087815260208101879052604081018690526060810185905260a0838203810183528a5460026001821615610100026000190190911604908201819052608082019160c001908b908015613fb65780601f10613f8b57610100808354040283529160200191613fb6565b820191906000526020600020905b815481529060010190602001808311613f9957829003601f168201915b505083810382528454600260001961010060018416150201909116048082526020909101908590801561402a5780601f10613fff5761010080835404028352916020019161402a565b820191906000526020600020905b81548152906001019060200180831161400d57829003601f168201915b50509b50505050505050505050505060405180910390a25050600d80546001019055505050505050565b600160a060020a038216151561406957600080fd5b614072816122b8565b600160a060020a038381169116141561408a57600080fd5b82600160a060020a031661409d826122b8565b600160a060020a0316146140b057600080fd5b6140ba83826141e7565b6140c4838261426a565b6140ce82826134ec565b816013828154811015156140de57fe5b600091825260208220600c91909102018054600160a060020a031916600160a060020a039390931692909217909155601380548390811061411b57fe5b90600052602060002090600c020160070160006101000a81548160ff02191690831515021790555081600160a060020a031683600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600082600160a060020a03166141a883611436565b600160a060020a0316149392505050565b60008082848115156141c757fe5b04949350505050565b60008282106141e157506000610e1b565b50900390565b81600160a060020a03166141fa826122b8565b600160a060020a03161461420d57600080fd5b60008181526004602090815260408083208054600160a060020a031916905580518481529051600160a060020a038616927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35050565b600080600084600160a060020a0316614282856122b8565b600160a060020a03161461429557600080fd5b60008481526006602052604090205492506142c060016142b4876123b4565b9063ffffffff6141d016565b600160a060020a0386166000908152600560205260409020805491935090839081106142e857fe5b60009182526020808320909101548683526003825260408084208054600160a060020a0319169055600160a060020a038916845260059092529120805491925082918590811061433457fe5b6000918252602080832090910192909255600160a060020a038716815260059091526040812080548490811061436657fe5b6000918252602080832090910192909255600160a060020a038716815260059091526040902080549061439d9060001983016145ae565b5060008481526006602052604080822082905582825290208390556002546143cc90600163ffffffff6141d016565b6002555050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061441757805160ff1916838001178555614444565b82800160010185558215614444579182015b82811115614444578251825591602001919060010190614429565b506144509291506145ce565b5090565b6101a060405190810160405280600d906020820280388339509192915050565b6001830191839082156144fa5791602002820160005b838211156144ca57835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030261448a565b80156144f85782816101000a81549061ffff02191690556002016020816001010492830192600103026144ca565b505b506144509291506145e8565b8280548282559060005260206000209081019282156144445791602002820182811115614444578251825591602001919060010190614429565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106145815782800160ff19823516178555614444565b82800160010185558215614444579182015b82811115614444578235825591602001919060010190614593565b815481835581811115610fee57600083815260209020610fee9181019083015b61123a91905b8082111561445057600081556001016145d4565b61123a91905b8082111561445057805461ffff191681556001016145ee5600a165627a7a72305820ef67d6321542ac2083a13f0fba267b4b4b6b00f0a19bf67cecf47adfaaf932be0029
Deployed Bytecode
0x6080604052600436106102215763ffffffff60e060020a600035041663031122ef8114610226578063060907381461025557806306fdde031461026d578063095ea7b3146102f75780630be80f391461031d5780630db5db26146103355780631119611714610359578063141316111461037357806318160ddd1461038e5780631e4d0caf146103b55780631e7de8cc146105045780632a2836071461051c5780632a6dd48f1461053d5780632adb232414610571578063363fa6b214610592578063384f58eb146105f057806338cc17ee146106055780633a38b90f1461061f57806346864cd8146106b85780635468e4e1146106d95780635a3f2672146106f35780635d01615f146107645780636352211e146107f05780636914db60146108085780636daa9f561461082057806370a08231146108385780637774c3941461085957806379ba5097146108715780637f486ca6146108865780638a3f8a231461089e5780638a95fbe8146109dc5780638b73c10e146109fd578063917fd83914610a9f578063954cbe3f14610b3457806395d89b4114610bda5780639727161514610bef578063a9059cbb14610c04578063ab02188414610c28578063b2e6ceeb14610c40578063b7d0628b14610c58578063c3af38fa14610c6d578063c87b56dd14610808578063cbf9a12514610ccb578063cf38b60914610d06578063dac3f6d214610d1b578063f1d9194214610d4e578063f2fde38b14610d6e575b600080fd5b34801561023257600080fd5b50610241600435602435610d8f565b604080519115158252519081900360200190f35b34801561026157600080fd5b50610241600435610e21565b34801561027957600080fd5b50610282610e46565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102bc5781810151838201526020016102a4565b50505050905090810190601f1680156102e95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030357600080fd5b5061031b600160a060020a0360043516602435610e7d565b005b34801561032957600080fd5b50610241600435610f61565b34801561034157600080fd5b5061031b600160a060020a0360043516602435610f86565b34801561036557600080fd5b506102416004351515610ff3565b34801561037f57600080fd5b5061024160043560243561102f565b34801561039a57600080fd5b506103a3611236565b60408051918252519081900360200190f35b3480156103c157600080fd5b506103cd60043561123d565b604051808c600160a060020a0316600160a060020a031681526020018b151515158152602001806020018a8152602001898152602001888152602001871515151581526020018681526020018581526020018481526020018060200183810383528c818151815260200191508051906020019080838360005b8381101561045e578181015183820152602001610446565b50505050905090810190601f16801561048b5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156104be5781810151838201526020016104a6565b50505050905090810190601f1680156104eb5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b34801561051057600080fd5b506102416004356113d0565b34801561052857600080fd5b50610241600160a060020a03600435166113f5565b34801561054957600080fd5b50610555600435611436565b60408051600160a060020a039092168252519081900360200190f35b34801561057d57600080fd5b50610241600160a060020a0360043516611451565b34801561059e57600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526102419583359536956044949193909101919081908401838280828437509497506114929650505050505050565b3480156105fc57600080fd5b506105556114f8565b34801561061157600080fd5b506102416004351515611507565b604080516020601f606435600481810135928301849004840285018401909552818452610241948035946024803595604435953695608494930191819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050923560ff16935061155992505050565b3480156106c457600080fd5b50610241600160a060020a03600435166120a7565b3480156106e557600080fd5b5061024160043515156120f6565b3480156106ff57600080fd5b50610714600160a060020a0360043516612134565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610750578181015183820152602001610738565b505050509050019250505060405180910390f35b34801561077057600080fd5b5061077c6004356121a0565b604051808060200186151515158152602001858152602001848152602001838152602001828103825287818151815260200191508051906020019060200280838360005b838110156107d85781810151838201526020016107c0565b50505050905001965050505050505060405180910390f35b3480156107fc57600080fd5b506105556004356122b8565b34801561081457600080fd5b506102826004356122e6565b34801561082c57600080fd5b5061024160043561238f565b34801561084457600080fd5b506103a3600160a060020a03600435166123b4565b34801561086557600080fd5b506102416004356123cf565b34801561087d57600080fd5b5061031b61244a565b34801561089257600080fd5b506102416004356124c9565b3480156108aa57600080fd5b506108b66004356125b9565b60405180806020018060200188600d60200280838360005b838110156108e65781810151838201526020016108ce565b5050505090500187815260200186815260200185815260200184815260200183810383528a818151815260200191508051906020019080838360005b8381101561093a578181015183820152602001610922565b50505050905090810190601f1680156109675780820380516001836020036101000a031916815260200191505b5083810382528951815289516020918201918b019080838360005b8381101561099a578181015183820152602001610982565b50505050905090810190601f1680156109c75780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b3480156109e857600080fd5b50610241600160a060020a036004351661283d565b348015610a0957600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261024194369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050833560ff1694505050602090910135905061287e565b6040805160206004803580820135601f810184900484028501840190955284845261024194369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050833560ff16945050506020909101359050612b48565b348015610b4057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261024194369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050833560ff1694505050602082013591604001359050612b83565b348015610be657600080fd5b50610282612bae565b348015610bfb57600080fd5b50610555612be5565b348015610c1057600080fd5b5061031b600160a060020a0360043516602435612bf4565b348015610c3457600080fd5b50610241600435612c26565b348015610c4c57600080fd5b5061031b600435612c4b565b348015610c6457600080fd5b50610241612c76565b348015610c7957600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610241958335953695604494919390910191908190840183828082843750949750612c7f9650505050505050565b348015610cd757600080fd5b50610ce3600435612cf8565b60408051600160a060020a03909316835290151560208301528051918290030190f35b348015610d1257600080fd5b506103a3612d5a565b348015610d2757600080fd5b50610d33600435612d60565b60408051921515835260208301919091528051918290030190f35b348015610d5a57600080fd5b506102826004803560248101910135612db5565b348015610d7a57600080fd5b5061031b600160a060020a0360043516612e73565b600a5460009033600160a060020a03908116911614610dad57600080fd5b610dc6610db984612eb0565b429063ffffffff61303a16565b6013805485908110610dd457fe5b90600052602060002090600c020160090181905550610df5610db983612eb0565b6013805484908110610e0357fe5b600091825260209091206009600c9092020101555060015b92915050565b6000805433600160a060020a03908116911614610e3d57600080fd5b50600e55600190565b60408051808201909152600e81527f4368696269204669676874657273000000000000000000000000000000000000602082015281565b60008133600160a060020a0316610e93826122b8565b600160a060020a031614610ea657600080fd5b610eaf836122b8565b9150600160a060020a038481169083161415610eca57600080fd5b610ed383611436565b600160a060020a0316151580610ef15750600160a060020a03841615155b15610f5b576000838152600460209081526040918290208054600160a060020a031916600160a060020a03888116918217909255835187815293519093918616927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35b50505050565b6000805433600160a060020a03908116911614610f7d57600080fd5b50601055600190565b60005433600160a060020a03908116911614610fa157600080fd5b600160a060020a03301631811115610fb857600080fd5b604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015610fee573d6000803e3d6000fd5b505050565b6000805433600160a060020a0390811691161461100f57600080fd5b506014805461ff0019166101009215158302179081905560ff9190041690565b600033600160a060020a0316611044846122b8565b600160a060020a03161461105757600080fd5b600c5482101561106657600080fd5b4260138481548110151561107657fe5b90600052602060002090600c0201600a01541115151561109557600080fd5b426013848154811015156110a557fe5b90600052602060002090600c020160090154111515156110c457600080fd5b60138054849081106110d257fe5b600091825260209091206007600c90920201015460ff16156110f357600080fd5b600954604080517f2dfd8ffe000000000000000000000000000000000000000000000000000000008152600481018690529051600160a060020a0390921691632dfd8ffe916024808201926020929091908290030181600087803b15801561115a57600080fd5b505af115801561116e573d6000803e3d6000fd5b505050506040513d602081101561118457600080fd5b50511561119057600080fd5b60016013848154811015156111a157fe5b90600052602060002090600c020160070160006101000a81548160ff021916908315150217905550816013848154811015156111d957fe5b90600052602060002090600c0201600801819055507f060023ee61664d6b053922edb042127ba48415d2ebf3a960e20faf9945999ae68383604051808381526020018281526020019250505060405180910390a150600192915050565b6002545b90565b601380548290811061124b57fe5b6000918252602091829020600c919091020180546001808301805460408051600261010095841615959095026000190190921693909304601f8101879004870282018701909352828152600160a060020a038416965060a060020a90930460ff16949091908301828280156113015780601f106112d657610100808354040283529160200191611301565b820191906000526020600020905b8154815290600101906020018083116112e457829003601f168201915b505050600384015460048501546005860154600787015460088801546009890154600a8a0154600b8b018054604080516020601f600260001960018716156101000201909516949094049384018190048102820181019092528281529c9d999c989b5096995060ff9095169793969295919490918301828280156113c65780601f1061139b576101008083540402835291602001916113c6565b820191906000526020600020905b8154815290600101906020018083116113a957829003601f168201915b505050505090508b565b6000805433600160a060020a039081169116146113ec57600080fd5b50600b55600190565b6000805433600160a060020a0390811691161461141157600080fd5b5060078054600160a060020a038316600160a060020a03199091161790556001919050565b600090815260046020526040902054600160a060020a031690565b6000805433600160a060020a0390811691161461146d57600080fd5b5060118054600160a060020a038316600160a060020a03199091161790556001919050565b600033600160a060020a03166114a7846122b8565b600160a060020a0316146114ba57600080fd5b816013848154811015156114ca57fe5b90600052602060002090600c020160010190805190602001906114ee9291906143d6565b5060019392505050565b600054600160a060020a031681565b6000805433600160a060020a0390811691161461152357600080fd5b506014805460ff191691151591821761ff00191661010083021762ff000019166201000092909202919091179081905560ff1690565b600080611564614454565b60145460609060009062010000900460ff161561158057600080fd5b33600160a060020a03166115938c6122b8565b600160a060020a0316146115a657600080fd5b33600160a060020a03166115b98b6122b8565b600160a060020a031614156115cd57600080fd5b4260138c8154811015156115dd57fe5b90600052602060002090600c0201600a0154111515156115fc57600080fd5b4260138c81548110151561160c57fe5b90600052602060002090600c0201600901541115151561162b57600080fd5b4260138b81548110151561163b57fe5b90600052602060002090600c0201600a01541115151561165a57600080fd5b4260138b81548110151561166a57fe5b90600052602060002090600c0201600901541115151561168957600080fd5b601380548b90811061169757fe5b600091825260209091206007600c90920201015460ff1615156001146116bc57600080fd5b3460138b8154811015156116cc57fe5b90600052602060002090600c0201600801541415156116ea57600080fd5b600060138b8154811015156116fb57fe5b60009182526020909120600c90910201600701805460ff1916911515919091179055611729610db98b613054565b601380548c90811061173757fe5b90600052602060002090600c020160090181905550611758610db98c613054565b601380548d90811061176657fe5b90600052602060002090600c0201600901819055506000935060138a81548110151561178e57fe5b90600052602060002090600c02016005015460138c8154811015156117af57fe5b90600052602060002090600c020160050154101515611803576117fc600160138d8154811015156117dc57fe5b90600052602060002090600c02016005015461303a90919063ffffffff16565b935061181a565b611817600160138c8154811015156117dc57fe5b93505b600754600d54604080517faebaf396000000000000000000000000000000000000000000000000000000008152600160a060020a033081166004830152602482018e90526001909301604482015290516118df93929092169163aebaf396916064808201926101a0929091908290030181600087803b15801561189c57600080fd5b505af11580156118b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101a08110156118d657600080fd5b508a8d8d6132cd565b92506118ed33600d546134ec565b601380548c9081106118fb57fe5b60009182526020808320600d54600c93909302016006018054600181018255908452922090910155898b1461196157601380548b90811061193857fe5b60009182526020808320600d54600c939093020160060180546001810182559084529220909101555b60136101a06040519081016040528033600160a060020a031681526020016000151581526020018a81526020018581526020018d81526020018c8152602001868152602001848152602001600015158152602001600c548152602001600081526020016119fd610db96119ee60016119e28b8c61358790919063ffffffff16565b9063ffffffff61303a16565b600e549063ffffffff61358716565b815260128054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815293810193611aa59390929091830182828015611a905780601f10611a6557610100808354040283529160200191611a90565b820191906000526020600020905b815481529060010190602001808311611a7357829003601f168201915b5050505050611aa0600d546135b2565b6136bd565b90528154600181810180855560009485526020948590208451600c90940201805486860151151560a060020a0274ff000000000000000000000000000000000000000019600160a060020a03909616600160a060020a03199092169190911794909416939093178355604084015180519195611b26938501929101906143d6565b506060820151611b3c906002830190600d614474565b506080820151600382015560a0820151600482015560c0820151600582015560e08201518051611b76916006840191602090910190614506565b5061010082015160078201805460ff191691151591909117905561012082015160088201556101408201516009820155610160820151600a8201556101808201518051611bcd91600b8401916020909101906143d6565b505050506013600d54815481101515611be257fe5b60009182526020909120600c9091020154600d5460138054600160a060020a03909316927ff6e9aabecc5287a729e3ca16a62e6c7b1b3d972e60b0fb93d9906585d4655a7192919082908110611c3457fe5b90600052602060002090600c020160000160149054906101000a900460ff166013600d54815481101515611c6457fe5b90600052602060002090600c02016001016013600d54815481101515611c8657fe5b90600052602060002090600c02016002016013600d54815481101515611ca857fe5b90600052602060002090600c0201600301546013600d54815481101515611ccb57fe5b90600052602060002090600c0201600401546013600d54815481101515611cee57fe5b90600052602060002090600c0201600501546013600d54815481101515611d1157fe5b90600052602060002090600c0201600a01546013600d54815481101515611d3457fe5b90600052602060002090600c0201600b01604051808a8152602001891515151581526020018060200188600d8015611da9576020028201916000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611d705790505b505087815260208101879052604081018690526060810185905260a0838203810183528a5460026001821615610100026000190190911604908201819052608082019160c001908b908015611e3f5780601f10611e1457610100808354040283529160200191611e3f565b820191906000526020600020905b815481529060010190602001808311611e2257829003601f168201915b5050838103825284546002600019610100600184161502019091160480825260209091019085908015611eb35780601f10611e8857610100808354040283529160200191611eb3565b820191906000526020600020905b815481529060010190602001808311611e9657829003601f168201915b50509b50505050505050505050505060405180910390a2600d546040805191825251600160a060020a033316916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3600954600d546040517f51dac0fd00000000000000000000000000000000000000000000000000000000815230600160a060020a03818116600484019081526024840185905260ff8c1660448501526080606485019081528d5160848601528d5192909616956351dac0fd9593948d938f93929160a40190602085019080838360005b83811015611fa8578181015183820152602001611f90565b50505050905090810190601f168015611fd55780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015611ff757600080fd5b505af115801561200b573d6000803e3d6000fd5b505050506040513d602081101561202157600080fd5b5051151561202e57600080fd5b600d805460010190556010546064340402905060138a81548110151561205057fe5b600091825260208220600c9091020154604051600160a060020a039091169183156108fc02918491818181858888f19350505050158015612095573d6000803e3d6000fd5b5060019b9a5050505050505050505050565b6000805433600160a060020a039081169116146120c357600080fd5b5060098054600160a060020a038316600160a060020a03199182168117909255600a805490911690911790556001919050565b6000805433600160a060020a0390811691161461211257600080fd5b506014805462ff00001916620100009215158302179081905560ff9190041690565b600160a060020a03811660009081526005602090815260409182902080548351818402810184019094528084526060939283018282801561219457602002820191906000526020600020905b815481526020019060010190808311612180575b50505050509050919050565b60606000806000806013868154811015156121b757fe5b90600052602060002090600c02016006016013878154811015156121d757fe5b600091825260209091206007600c9092020101546013805460ff90921691899081106121ff57fe5b90600052602060002090600c02016008015460138981548110151561222057fe5b90600052602060002090600c0201600a015460138a81548110151561224157fe5b90600052602060002090600c0201600901548480548060200260200160405190810160405280929190818152602001828054801561229e57602002820191906000526020600020905b81548152602001906001019080831161228a575b505050505094509450945094509450945091939590929450565b600081815260036020526040812054600160a060020a03168015156122dc57600080fd5b8091505b50919050565b60606013828154811015156122f757fe5b6000918252602091829020600b600c9092020101805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156121945780601f1061236257610100808354040283529160200191612194565b820191906000526020600020905b8154815290600101906020018083116123705750939695505050505050565b6000805433600160a060020a039081169116146123ab57600080fd5b50600f55600190565b600160a060020a031660009081526005602052604090205490565b6000600a5b600d8110156124415760138054849081106123eb57fe5b90600052602060002090600c020160020181600d8110151561240957fe5b601091828204019190066002029054906101000a900461ffff1661ffff166103e8141561243957600191506122e0565b6001016123d4565b50600092915050565b60015433600160a060020a0390811691161461246557600080fd5b60015460008054604051600160a060020a0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36001805460008054600160a060020a0319908116600160a060020a03841617909155169055565b600033600160a060020a03166124de836122b8565b600160a060020a031614158015612504575060115433600160a060020a03908116911614155b1561250e57600080fd5b601380548390811061251c57fe5b600091825260209091206007600c90920201015460ff16151560011461254157600080fd5b600060138381548110151561255257fe5b90600052602060002090600c020160070160006101000a81548160ff0219169083151502179055507f48c0848450dc82471d2b8d155ef9ca070ae64b4a6a26faeef472b7cbf773d1bb826040518082815260200191505060405180910390a1506000919050565b6060806125c4614454565b6000806000806013888154811015156125d957fe5b90600052602060002090600c02016001016013898154811015156125f957fe5b90600052602060002090600c0201600b0160138a81548110151561261957fe5b90600052602060002090600c020160020160138b81548110151561263957fe5b90600052602060002090600c02016003015460138c81548110151561265a57fe5b90600052602060002090600c02016004015460138d81548110151561267b57fe5b90600052602060002090600c02016005015460138e81548110151561269c57fe5b6000918252602091829020600a600c909202010154875460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815291928991908301828280156127375780601f1061270c57610100808354040283529160200191612737565b820191906000526020600020905b81548152906001019060200180831161271a57829003601f168201915b5050895460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152959c508b9450925084019050828280156127c55780601f1061279a576101008083540402835291602001916127c5565b820191906000526020600020905b8154815290600101906020018083116127a857829003601f168201915b5050604080516101a0810191829052949a50899350600d92509050826000855b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116127e5579050505050505094509650965096509650965096509650919395979092949650565b6000805433600160a060020a0390811691161461285957600080fd5b5060088054600160a060020a038316600160a060020a03199091161790556001919050565b600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a03338116600483015291516000938493670de0b6b3a7640000939116916370a082319160248082019260209290919082900301818887803b1580156128f357600080fd5b505af1158015612907573d6000803e3d6000fd5b505050506040513d602081101561291d57600080fd5b5051101561292a57600080fd5b601454610100900460ff161561293f57600080fd5b600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a033081166004830152915191909216916370a082319160248083019260209291908290030181600087803b1580156129a757600080fd5b505af11580156129bb573d6000803e3d6000fd5b505050506040513d60208110156129d157600080fd5b5051600854604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0333811660048301523081166024830152670de0b6b3a7640000604483015291519394509116916323b872dd916064808201926020929091908290030181600087803b158015612a5357600080fd5b505af1158015612a67573d6000803e3d6000fd5b505050506040513d6020811015612a7d57600080fd5b505115612a9457612a94868686866001600061380c565b600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a0330811660048301529151670de0b6b3a76400009392909216916370a08231916024808201926020929091908290030181600087803b158015612b0757600080fd5b505af1158015612b1b573d6000803e3d6000fd5b505050506040513d6020811015612b3157600080fd5b5051038114612b3c57fe5b50600195945050505050565b60145460009060ff1615612b5b57600080fd5b600b543414612b6957600080fd5b612b788585858560008061380c565b506001949350505050565b6000805433600160a060020a03908116911614612b9f57600080fd5b612b3c8686868660008761380c565b60408051808201909152600381527f4342460000000000000000000000000000000000000000000000000000000000602082015281565b600154600160a060020a031681565b8033600160a060020a0316612c08826122b8565b600160a060020a031614612c1b57600080fd5b610fee338484614054565b6000805433600160a060020a03908116911614612c4257600080fd5b50600c55600190565b612c553382614193565b1515612c6057600080fd5b612c73612c6c826122b8565b3383614054565b50565b60145460ff1690565b600033600160a060020a0316612c94846122b8565b600160a060020a031614158015612cba575060005433600160a060020a03908116911614155b15612cc457600080fd5b81601384815481101515612cd457fe5b90600052602060002090600c0201600b0190805190602001906114ee9291906143d6565b600080601383815481101515612d0a57fe5b60009182526020909120600c909102015460138054600160a060020a039092169185908110612d3557fe5b60009182526020909120600c9091020154909460a060020a90910460ff169350915050565b600b5481565b600080601383815481101515612d7257fe5b600091825260209091206007600c9092020101546013805460ff9092169185908110612d9a57fe5b90600052602060002090600c02016008015491509150915091565b60005460609033600160a060020a03908116911614612dd357600080fd5b612ddf60128484614540565b506012805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015612e665780601f10612e3b57610100808354040283529160200191612e66565b820191906000526020600020905b815481529060010190602001808311612e4957829003601f168201915b5050505050905092915050565b60005433600160a060020a03908116911614612e8e57600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b600080600a5b600d811015612f8f576013805485908110612ecd57fe5b90600052602060002090600c020160020181600d81101515612eeb57fe5b601091828204019190066002029054906101000a900461ffff1661ffff1660011415612f1c57600f54600302820191505b6013805485908110612f2a57fe5b90600052602060002090600c020160020181600d81101515612f4857fe5b601091828204019190066002029054906101000a900461ffff1661ffff1660031415612f8757600f54612f8290600263ffffffff6141b916565b820191505b600101612eb6565b60075460138054600160a060020a039092169163927f4be0919087908110612fb357fe5b90600052602060002090600c020160050154846040518363ffffffff1660e060020a0281526004018083815260200182815260200192505050602060405180830381600087803b15801561300657600080fd5b505af115801561301a573d6000803e3d6000fd5b505050506040513d602081101561303057600080fd5b5051949350505050565b60008282018381101561304957fe5b8091505b5092915050565b6000806000806000925060138581548110151561306d57fe5b600091825260209091206002600c90920201015460138054720100000000000000000000000000000000000090920461ffff16935061270f91879081106130b057fe5b600091825260209091206002600c9092020101547201000000000000000000000000000000000000900461ffff1610156131475760138054869081106130f257fe5b600091825260209091206002600c9092020101805473ffff00000000000000000000000000000000000019811661ffff7201000000000000000000000000000000000000928390048116600101169091021790555b50600a5b600d81101561321757601380548690811061316257fe5b90600052602060002090600c020160020181600d8110151561318057fe5b601081049091015461ffff6002600f90931683026101000a9091041614156131b6576131b382600163ffffffff6141d016565b91505b60138054869081106131c457fe5b90600052602060002090600c020160020181600d811015156131e257fe5b601091828204019190066002029054906101000a900461ffff1661ffff166004141561320f576001909101905b60010161314b565b60075460138054600160a060020a039092169163d3f8cc9591908890811061323b57fe5b90600052602060002090600c02016005015484600f546040518463ffffffff1660e060020a028152600401808481526020018381526020018281526020019350505050602060405180830381600087803b15801561329857600080fd5b505af11580156132ac573d6000803e3d6000fd5b505050506040513d60208110156132c257600080fd5b505195945050505050565b6132d5614454565b604080518581526c01000000000000000000000000600160a060020a0341160260208201524260348201529051908190036054019020600570ffffffffffffffffffffffffffffffffff918216061680151561339257601380548590811061333957fe5b600091825260209091206002600c90920201015460a060020a900461ffff16610140870152601380548490811061336c57fe5b600091825260209091206002600c90920201015460b060020a900461ffff166101608701525b80600114156134025760138054849081106133a957fe5b600091825260209091206002600c90920201015460a060020a900461ffff1661014087015260138054859081106133dc57fe5b600091825260209091206002600c90920201015460b060020a900461ffff166101608701525b806002141561347257601380548590811061341957fe5b600091825260209091206002600c90920201015460a060020a900461ffff16610140870152601380548590811061344c57fe5b600091825260209091206002600c90920201015460b060020a900461ffff166101608701525b80600314156134e257601380548490811061348957fe5b600091825260209091206002600c90920201015460a060020a900461ffff1661014087015260138054849081106134bc57fe5b600091825260209091206002600c90920201015460b060020a900461ffff166101608701525b5093949350505050565b600081815260036020526040812054600160a060020a03161561350e57600080fd5b60008281526003602052604090208054600160a060020a031916600160a060020a03851617905561353e836123b4565b600160a060020a03909316600090815260056020908152604080832080546001818101835591855283852001869055948352600690915290209290925560028054909101905550565b60008083151561359a576000915061304d565b508282028284828115156135aa57fe5b041461304957fe5b606060008082818515156135fb5760408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015294506136b4565b8593505b831561361657600190920191600a840493506135ff565b826040519080825280601f01601f191660200182016040528015613644578160200160208202803883390190505b5091505060001982015b85156136b057815160001982019160f860020a6030600a8a06010291849190811061367557fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8604955061364e565b8194505b50505050919050565b606080606080606060008088955087945084518651016040519080825280601f01601f191660200182016040528015613700578160200160208202803883390190505b50935083925060009150600090505b855181101561378557858181518110151561372657fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561374d57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060010161370f565b5060005b84518110156137ff5784818151811015156137a057fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156137c757fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613789565b5090979650505050505050565b613814614454565b606033600160a060020a0316151561382b57600080fd5b61383733600d546134ec565b600083111561390c57600754600d54604080517fc6296765000000000000000000000000000000000000000000000000000000008152600160a060020a033081166004830152602482018a905288151560448301526064820193909352608481018790529051919092169163c62967659160a4808301926101a09291908290030181600087803b1580156138ca57600080fd5b505af11580156138de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101a081101561390457600080fd5b5091506139d6565b600754600d54604080517fc6296765000000000000000000000000000000000000000000000000000000008152600160a060020a033081166004830152602482018a9052881515604483015260648201939093526000608482018190529151929093169263c62967659260a4808301936101a09383900390910190829087803b15801561399857600080fd5b505af11580156139ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101a08110156139d257600080fd5b5091505b60136101a06040519081016040528033600160a060020a0316815260200186151581526020018a8152602001848152602001600081526020016000815260200160008152602001838152602001600015158152602001600c54815260200160008152602001613a50600e544261303a90919063ffffffff16565b815260128054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815293810193613ab89390929091830182828015611a905780601f10611a6557610100808354040283529160200191611a90565b90528154600181810180855560009485526020948590208451600c90940201805486860151151560a060020a0274ff000000000000000000000000000000000000000019600160a060020a03909616600160a060020a03199092169190911794909416939093178355604084015180519195613b39938501929101906143d6565b506060820151613b4f906002830190600d614474565b506080820151600382015560a0820151600482015560c0820151600582015560e08201518051613b89916006840191602090910190614506565b5061010082015160078201805460ff191691151591909117905561012082015160088201556101408201516009820155610160820151600a8201556101808201518051613be091600b8401916020909101906143d6565b5050600d546040805191825251600160a060020a0333169350600092507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3600954600d546040517f51dac0fd00000000000000000000000000000000000000000000000000000000815230600160a060020a03818116600484019081526024840185905260ff8c1660448501526080606485019081528d5160848601528d5192909616956351dac0fd9593948d938f93929160a40190602085019080838360005b83811015613cc2578181015183820152602001613caa565b50505050905090810190601f168015613cef5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015613d1157600080fd5b505af1158015613d25573d6000803e3d6000fd5b505050506040513d6020811015613d3b57600080fd5b50511515613d4857600080fd5b6013600d54815481101515613d5957fe5b60009182526020909120600c9091020154600d5460138054600160a060020a03909316927ff6e9aabecc5287a729e3ca16a62e6c7b1b3d972e60b0fb93d9906585d4655a7192919082908110613dab57fe5b90600052602060002090600c020160000160149054906101000a900460ff166013600d54815481101515613ddb57fe5b90600052602060002090600c02016001016013600d54815481101515613dfd57fe5b90600052602060002090600c02016002016013600d54815481101515613e1f57fe5b90600052602060002090600c0201600301546013600d54815481101515613e4257fe5b90600052602060002090600c0201600401546013600d54815481101515613e6557fe5b90600052602060002090600c0201600501546013600d54815481101515613e8857fe5b90600052602060002090600c0201600a01546013600d54815481101515613eab57fe5b90600052602060002090600c0201600b01604051808a8152602001891515151581526020018060200188600d8015613f20576020028201916000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411613ee75790505b505087815260208101879052604081018690526060810185905260a0838203810183528a5460026001821615610100026000190190911604908201819052608082019160c001908b908015613fb65780601f10613f8b57610100808354040283529160200191613fb6565b820191906000526020600020905b815481529060010190602001808311613f9957829003601f168201915b505083810382528454600260001961010060018416150201909116048082526020909101908590801561402a5780601f10613fff5761010080835404028352916020019161402a565b820191906000526020600020905b81548152906001019060200180831161400d57829003601f168201915b50509b50505050505050505050505060405180910390a25050600d80546001019055505050505050565b600160a060020a038216151561406957600080fd5b614072816122b8565b600160a060020a038381169116141561408a57600080fd5b82600160a060020a031661409d826122b8565b600160a060020a0316146140b057600080fd5b6140ba83826141e7565b6140c4838261426a565b6140ce82826134ec565b816013828154811015156140de57fe5b600091825260208220600c91909102018054600160a060020a031916600160a060020a039390931692909217909155601380548390811061411b57fe5b90600052602060002090600c020160070160006101000a81548160ff02191690831515021790555081600160a060020a031683600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600082600160a060020a03166141a883611436565b600160a060020a0316149392505050565b60008082848115156141c757fe5b04949350505050565b60008282106141e157506000610e1b565b50900390565b81600160a060020a03166141fa826122b8565b600160a060020a03161461420d57600080fd5b60008181526004602090815260408083208054600160a060020a031916905580518481529051600160a060020a038616927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35050565b600080600084600160a060020a0316614282856122b8565b600160a060020a03161461429557600080fd5b60008481526006602052604090205492506142c060016142b4876123b4565b9063ffffffff6141d016565b600160a060020a0386166000908152600560205260409020805491935090839081106142e857fe5b60009182526020808320909101548683526003825260408084208054600160a060020a0319169055600160a060020a038916845260059092529120805491925082918590811061433457fe5b6000918252602080832090910192909255600160a060020a038716815260059091526040812080548490811061436657fe5b6000918252602080832090910192909255600160a060020a038716815260059091526040902080549061439d9060001983016145ae565b5060008481526006602052604080822082905582825290208390556002546143cc90600163ffffffff6141d016565b6002555050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061441757805160ff1916838001178555614444565b82800160010185558215614444579182015b82811115614444578251825591602001919060010190614429565b506144509291506145ce565b5090565b6101a060405190810160405280600d906020820280388339509192915050565b6001830191839082156144fa5791602002820160005b838211156144ca57835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030261448a565b80156144f85782816101000a81549061ffff02191690556002016020816001010492830192600103026144ca565b505b506144509291506145e8565b8280548282559060005260206000209081019282156144445791602002820182811115614444578251825591602001919060010190614429565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106145815782800160ff19823516178555614444565b82800160010185558215614444579182015b82811115614444578235825591602001919060010190614593565b815481835581811115610fee57600083815260209020610fee9181019083015b61123a91905b8082111561445057600081556001016145d4565b61123a91905b8082111561445057805461ffff191681556001016145ee5600a165627a7a72305820ef67d6321542ac2083a13f0fba267b4b4b6b00f0a19bf67cecf47adfaaf932be0029
Swarm Source
bzzr://ef67d6321542ac2083a13f0fba267b4b4b6b00f0a19bf67cecf47adfaaf932be
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.56
Net Worth in ETH
0.000265
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,111.19 | 0.000265 | $0.559466 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.