ETH Price: $2,529.60 (-0.12%)

Token

ChickenHuntStock (CHS)
 

Overview

Max Total Supply

3.607966 CHS

Holders

368

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ChickenHunt

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-06-25
*/

pragma solidity 0.4.24;


library SafeMath {

  function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
    if (a == 0) {
      return 0;
    }
    c = a * b;
    assert(c / a == b);
  }

  function square(uint256 a) internal pure returns (uint256) {
    return mul(a, a);
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
    c = a + b;
    assert(c >= a);
  }

}


contract ERC20Interface {

  event Transfer(
    address indexed from,
    address indexed to,
    uint256 value
  );

  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );

  function totalSupply() public view returns (uint256);
  function balanceOf(address _owner) public view returns (uint256);
  function transfer(address _to, uint256 _value) public returns (bool);
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool);
  function approve(address _spender, uint256 _value) public returns (bool);
  function allowance( address _owner, address _spender) public view returns (uint256);

}


/**
 * @title CHStock
 * @author M.H. Kang
 */
contract CHStock is ERC20Interface {

  using SafeMath for uint256;

  /* EVENT */

  event RedeemShares(
    address indexed user,
    uint256 shares,
    uint256 dividends
  );

  /* STORAGE */

  string public name = "ChickenHuntStock";
  string public symbol = "CHS";
  uint8 public decimals = 18;
  uint256 public totalShares;
  uint256 public dividendsPerShare;
  uint256 public constant CORRECTION = 1 << 64;
  mapping (address => uint256) public ethereumBalance;
  mapping (address => uint256) internal shares;
  mapping (address => uint256) internal refund;
  mapping (address => uint256) internal deduction;
  mapping (address => mapping (address => uint256)) internal allowed;

  /* FUNCTION */

  function redeemShares() public {
    uint256 _shares = shares[msg.sender];
    uint256 _dividends = dividendsOf(msg.sender);

    delete shares[msg.sender];
    delete refund[msg.sender];
    delete deduction[msg.sender];
    totalShares = totalShares.sub(_shares);
    ethereumBalance[msg.sender] = ethereumBalance[msg.sender].add(_dividends);

    emit RedeemShares(msg.sender, _shares, _dividends);
  }

  function transfer(address _to, uint256 _value) public returns (bool) {
    _transfer(msg.sender, _to, _value);
    return true;
  }

  function transferFrom(address _from, address _to, uint256 _value)
    public
    returns (bool)
  {
    require(_value <= allowed[_from][msg.sender]);
    allowed[_from][msg.sender] -= _value;
    _transfer(_from, _to, _value);
    return true;
  }

  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    emit Approval(msg.sender, _spender, _value);
    return true;
  }

  function dividendsOf(address _shareholder) public view returns (uint256) {
    return dividendsPerShare.mul(shares[_shareholder]).add(refund[_shareholder]).sub(deduction[_shareholder]) / CORRECTION;
  }

  function totalSupply() public view returns (uint256) {
    return totalShares;
  }

  function balanceOf(address _owner) public view returns (uint256) {
    return shares[_owner];
  }

  function allowance(address _owner, address _spender)
    public
    view
    returns (uint256)
  {
    return allowed[_owner][_spender];
  }

  /* INTERNAL FUNCTION */

  function _giveShares(address _user, uint256 _ethereum) internal {
    if (_ethereum > 0) {
      totalShares = totalShares.add(_ethereum);
      deduction[_user] = deduction[_user].add(dividendsPerShare.mul(_ethereum));
      shares[_user] = shares[_user].add(_ethereum);
      dividendsPerShare = dividendsPerShare.add(_ethereum.mul(CORRECTION) / totalShares);

      emit Transfer(address(0), _user, _ethereum);
    }
  }

  function _transfer(address _from, address _to, uint256 _value) internal {
    require(_to != address(0));
    require(_value <= shares[_from]);
    uint256 _rawProfit = dividendsPerShare.mul(_value);

    uint256 _refund = refund[_from].add(_rawProfit);
    uint256 _min = _refund < deduction[_from] ? _refund : deduction[_from];
    refund[_from] = _refund.sub(_min);
    deduction[_from] = deduction[_from].sub(_min);
    deduction[_to] = deduction[_to].add(_rawProfit);

    shares[_from] = shares[_from].sub(_value);
    shares[_to] = shares[_to].add(_value);

    emit Transfer(_from, _to, _value);
  }

}


/**
 * @title CHGameBase
 * @author M.H. Kang
 */
contract CHGameBase is CHStock {

  /* DATA STRUCT */

  struct House {
    Hunter hunter;
    uint256 huntingPower;
    uint256 offensePower;
    uint256 defensePower;
    uint256 huntingMultiplier;
    uint256 offenseMultiplier;
    uint256 defenseMultiplier;
    uint256 depots;
    uint256[] pets;
  }

  struct Hunter {
    uint256 strength;
    uint256 dexterity;
    uint256 constitution;
    uint256 resistance;
  }

  struct Store {
    address owner;
    uint256 cut;
    uint256 cost;
    uint256 balance;
  }

  /* STORAGE */

  Store public store;
  uint256 public devCut;
  uint256 public devFee;
  uint256 public altarCut;
  uint256 public altarFund;
  uint256 public dividendRate;
  uint256 public totalChicken;
  address public chickenTokenDelegator;
  mapping (address => uint256) public lastSaveTime;
  mapping (address => uint256) public savedChickenOf;
  mapping (address => House) internal houses;

  /* FUNCTION */

  function saveChickenOf(address _user) public returns (uint256) {
    uint256 _unclaimedChicken = _unclaimedChickenOf(_user);
    totalChicken = totalChicken.add(_unclaimedChicken);
    uint256 _chicken = savedChickenOf[_user].add(_unclaimedChicken);
    savedChickenOf[_user] = _chicken;
    lastSaveTime[_user] = block.timestamp;
    return _chicken;
  }

  function transferChickenFrom(address _from, address _to, uint256 _value)
    public
    returns (bool)
  {
    require(msg.sender == chickenTokenDelegator);
    require(saveChickenOf(_from) >= _value);
    savedChickenOf[_from] = savedChickenOf[_from] - _value;
    savedChickenOf[_to] = savedChickenOf[_to].add(_value);

    return true;
  }

  function chickenOf(address _user) public view returns (uint256) {
    return savedChickenOf[_user].add(_unclaimedChickenOf(_user));
  }

  /* INTERNAL FUNCTION */

  function _payChicken(address _user, uint256 _chicken) internal {
    uint256 _unclaimedChicken = _unclaimedChickenOf(_user);
    uint256 _extraChicken;

    if (_chicken > _unclaimedChicken) {
      _extraChicken = _chicken - _unclaimedChicken;
      require(savedChickenOf[_user] >= _extraChicken);
      savedChickenOf[_user] -= _extraChicken;
      totalChicken -= _extraChicken;
    } else {
      _extraChicken = _unclaimedChicken - _chicken;
      totalChicken = totalChicken.add(_extraChicken);
      savedChickenOf[_user] += _extraChicken;
    }

    lastSaveTime[_user] = block.timestamp;
  }

  function _payEthereumAndDistribute(uint256 _cost) internal {
    require(_cost * 100 / 100 == _cost);
    _payEthereum(_cost);

    uint256 _toShareholders = _cost * dividendRate / 100;
    uint256 _toAltar = _cost * altarCut / 100;
    uint256 _toStore = _cost * store.cut / 100;
    devFee = devFee.add(_cost - _toShareholders - _toAltar - _toStore);

    _giveShares(msg.sender, _toShareholders);
    altarFund = altarFund.add(_toAltar);
    store.balance = store.balance.add(_toStore);
  }

  function _payEthereum(uint256 _cost) internal {
    uint256 _extra;
    if (_cost > msg.value) {
      _extra = _cost - msg.value;
      require(ethereumBalance[msg.sender] >= _extra);
      ethereumBalance[msg.sender] -= _extra;
    } else {
      _extra = msg.value - _cost;
      ethereumBalance[msg.sender] = ethereumBalance[msg.sender].add(_extra);
    }
  }

  function _unclaimedChickenOf(address _user) internal view returns (uint256) {
    uint256 _timestamp = lastSaveTime[_user];
    if (_timestamp > 0 && _timestamp < block.timestamp) {
      return houses[_user].huntingPower.mul(
        houses[_user].huntingMultiplier
      ).mul(block.timestamp - _timestamp) / 100;
    } else {
      return 0;
    }
  }

  function _houseOf(address _user)
    internal
    view
    returns (House storage _house)
  {
    _house = houses[_user];
    require(_house.depots > 0);
  }

}


/**
 * @title CHHunter
 * @author M.H. Kang
 */
contract CHHunter is CHGameBase {

  /* EVENT */

  event UpgradeHunter(
    address indexed user,
    string attribute,
    uint256 to
  );

  /* DATA STRUCT */

  struct Config {
    uint256 chicken;
    uint256 ethereum;
    uint256 max;
  }

  /* STORAGE */

  Config public typeA;
  Config public typeB;

  /* FUNCTION */

  function upgradeStrength(uint256 _to) external payable {
    House storage _house = _houseOf(msg.sender);
    uint256 _from = _house.hunter.strength;
    require(typeA.max >= _to && _to > _from);
    _payForUpgrade(_from, _to, typeA);

    uint256 _increment = _house.hunter.dexterity.mul(2).add(8).mul(_to.square() - _from ** 2);
    _house.hunter.strength = _to;
    _house.huntingPower = _house.huntingPower.add(_increment);
    _house.offensePower = _house.offensePower.add(_increment);

    emit UpgradeHunter(msg.sender, "strength", _to);
  }

  function upgradeDexterity(uint256 _to) external payable {
    House storage _house = _houseOf(msg.sender);
    uint256 _from = _house.hunter.dexterity;
    require(typeB.max >= _to && _to > _from);
    _payForUpgrade(_from, _to, typeB);

    uint256 _increment = _house.hunter.strength.square().mul((_to - _from).mul(2));
    _house.hunter.dexterity = _to;
    _house.huntingPower = _house.huntingPower.add(_increment);
    _house.offensePower = _house.offensePower.add(_increment);

    emit UpgradeHunter(msg.sender, "dexterity", _to);
  }

  function upgradeConstitution(uint256 _to) external payable {
    House storage _house = _houseOf(msg.sender);
    uint256 _from = _house.hunter.constitution;
    require(typeA.max >= _to && _to > _from);
    _payForUpgrade(_from, _to, typeA);

    uint256 _increment = _house.hunter.resistance.mul(2).add(8).mul(_to.square() - _from ** 2);
    _house.hunter.constitution = _to;
    _house.defensePower = _house.defensePower.add(_increment);

    emit UpgradeHunter(msg.sender, "constitution", _to);
  }

  function upgradeResistance(uint256 _to) external payable {
    House storage _house = _houseOf(msg.sender);
    uint256 _from = _house.hunter.resistance;
    require(typeB.max >= _to && _to > _from);
    _payForUpgrade(_from, _to, typeB);

    uint256 _increment = _house.hunter.constitution.square().mul((_to - _from).mul(2));
    _house.hunter.resistance = _to;
    _house.defensePower = _house.defensePower.add(_increment);

    emit UpgradeHunter(msg.sender, "resistance", _to);
  }

  /* INTERNAL FUNCTION */

  function _payForUpgrade(uint256 _from, uint256 _to, Config _type) internal {
    uint256 _chickenCost = _type.chicken.mul(_gapOfCubeSum(_from, _to));
    _payChicken(msg.sender, _chickenCost);
    uint256 _ethereumCost = _type.ethereum.mul(_gapOfSquareSum(_from, _to));
    _payEthereumAndDistribute(_ethereumCost);
  }

  function _gapOfSquareSum(uint256 _before, uint256 _after)
    internal
    pure
    returns (uint256)
  {
    // max value is capped to uint32
    return (_after * (_after - 1) * (2 * _after - 1) - _before * (_before - 1) * (2 * _before - 1)) / 6;
  }

  function _gapOfCubeSum(uint256 _before, uint256 _after)
    internal
    pure
    returns (uint256)
  {
    // max value is capped to uint32
    return ((_after * (_after - 1)) ** 2 - (_before * (_before - 1)) ** 2) >> 2;
  }

}


/**
 * @title CHHouse
 * @author M.H. Kang
 */
contract CHHouse is CHHunter {

  /* EVENT */

  event UpgradePet(
    address indexed user,
    uint256 id,
    uint256 to
  );

  event UpgradeDepot(
    address indexed user,
    uint256 to
  );

  event BuyItem(
    address indexed from,
    address indexed to,
    uint256 indexed id,
    uint256 cost
  );

  event BuyStore(
    address indexed from,
    address indexed to,
    uint256 cost
  );

  /* DATA STRUCT */

  struct Pet {
    uint256 huntingPower;
    uint256 offensePower;
    uint256 defensePower;
    uint256 chicken;
    uint256 ethereum;
    uint256 max;
  }

  struct Item {
    address owner;
    uint256 huntingMultiplier;
    uint256 offenseMultiplier;
    uint256 defenseMultiplier;
    uint256 cost;
  }

  struct Depot {
    uint256 ethereum;
    uint256 max;
  }

  /* STORAGE */

  uint256 public constant INCREMENT_RATE = 12; // 120% for Item and Store
  Depot public depot;
  Pet[] public pets;
  Item[] public items;

  /* FUNCTION */

  function buyDepots(uint256 _amount) external payable {
    House storage _house = _houseOf(msg.sender);
    _house.depots = _house.depots.add(_amount);
    require(_house.depots <= depot.max);
    _payEthereumAndDistribute(_amount.mul(depot.ethereum));

    emit UpgradeDepot(msg.sender, _house.depots);
  }

  function buyPets(uint256 _id, uint256 _amount) external payable {
    require(_id < pets.length);
    Pet memory _pet = pets[_id];
    uint256 _chickenCost = _amount * _pet.chicken;
    _payChicken(msg.sender, _chickenCost);
    uint256 _ethereumCost = _amount * _pet.ethereum;
    _payEthereumAndDistribute(_ethereumCost);

    House storage _house = _houseOf(msg.sender);
    if (_house.pets.length < _id + 1) {
      _house.pets.length = _id + 1;
    }
    _house.pets[_id] = _house.pets[_id].add(_amount);
    require(_house.pets[_id] <= _pet.max);

    _house.huntingPower = _house.huntingPower.add(_pet.huntingPower * _amount);
    _house.offensePower = _house.offensePower.add(_pet.offensePower * _amount);
    _house.defensePower = _house.defensePower.add(_pet.defensePower * _amount);

    emit UpgradePet(msg.sender, _id, _house.pets[_id]);
  }

  // This is independent of Stock and Altar.
  function buyItem(uint256 _id) external payable {
    Item storage _item = items[_id];
    address _from = _item.owner;
    uint256 _price = _item.cost.mul(INCREMENT_RATE) / 10;
    _payEthereum(_price);

    saveChickenOf(_from);
    House storage _fromHouse = _houseOf(_from);
    _fromHouse.huntingMultiplier = _fromHouse.huntingMultiplier.sub(_item.huntingMultiplier);
    _fromHouse.offenseMultiplier = _fromHouse.offenseMultiplier.sub(_item.offenseMultiplier);
    _fromHouse.defenseMultiplier = _fromHouse.defenseMultiplier.sub(_item.defenseMultiplier);

    saveChickenOf(msg.sender);
    House storage _toHouse = _houseOf(msg.sender);
    _toHouse.huntingMultiplier = _toHouse.huntingMultiplier.add(_item.huntingMultiplier);
    _toHouse.offenseMultiplier = _toHouse.offenseMultiplier.add(_item.offenseMultiplier);
    _toHouse.defenseMultiplier = _toHouse.defenseMultiplier.add(_item.defenseMultiplier);

    uint256 _halfMargin = _price.sub(_item.cost) / 2;
    devFee = devFee.add(_halfMargin);
    ethereumBalance[_from] = ethereumBalance[_from].add(_price - _halfMargin);

    items[_id].cost = _price;
    items[_id].owner = msg.sender;

    emit BuyItem(_from, msg.sender, _id, _price);
  }

  // This is independent of Stock and Altar.
  function buyStore() external payable {
    address _from = store.owner;
    uint256 _price = store.cost.mul(INCREMENT_RATE) / 10;
    _payEthereum(_price);

    uint256 _halfMargin = (_price - store.cost) / 2;
    devFee = devFee.add(_halfMargin);
    ethereumBalance[_from] = ethereumBalance[_from].add(_price - _halfMargin).add(store.balance);

    store.cost = _price;
    store.owner = msg.sender;
    delete store.balance;

    emit BuyStore(_from, msg.sender, _price);
  }

  function withdrawStoreBalance() public {
    ethereumBalance[store.owner] = ethereumBalance[store.owner].add(store.balance);
    delete store.balance;
  }

}


/**
 * @title CHArena
 * @author M.H. Kang
 */
contract CHArena is CHHouse {

  /* EVENT */

  event Attack(
    address indexed attacker,
    address indexed defender,
    uint256 booty
  );

  /* STORAGE */

  mapping(address => uint256) public attackCooldown;
  uint256 public cooldownTime;

  /* FUNCTION */

  function attack(address _target) external {
    require(attackCooldown[msg.sender] < block.timestamp);
    House storage _attacker = houses[msg.sender];
    House storage _defender = houses[_target];
    if (_attacker.offensePower.mul(_attacker.offenseMultiplier)
        > _defender.defensePower.mul(_defender.defenseMultiplier)) {
      uint256 _chicken = saveChickenOf(_target);
      _chicken = _defender.depots > 0 ? _chicken / _defender.depots : _chicken;
      savedChickenOf[_target] = savedChickenOf[_target] - _chicken;
      savedChickenOf[msg.sender] = savedChickenOf[msg.sender].add(_chicken);
      attackCooldown[msg.sender] = block.timestamp + cooldownTime;

      emit Attack(msg.sender, _target, _chicken);
    }
  }

}


/**
 * @title CHAltar
 * @author M.H. Kang
 */
contract CHAltar is CHArena {

  /* EVENT */

  event NewAltarRecord(uint256 id, uint256 ethereum);
  event ChickenToAltar(address indexed user, uint256 id, uint256 chicken);
  event EthereumFromAltar(address indexed user, uint256 id, uint256 ethereum);

  /* DATA STRUCT */

  struct AltarRecord {
    uint256 ethereum;
    uint256 chicken;
  }

  struct TradeBook {
    uint256 altarRecordId;
    uint256 chicken;
  }

  /* STORAGE */

  uint256 public genesis;
  mapping (uint256 => AltarRecord) public altarRecords;
  mapping (address => TradeBook) public tradeBooks;

  /* FUNCTION */

  function chickenToAltar(uint256 _chicken) external {
    require(_chicken > 0);

    _payChicken(msg.sender, _chicken);
    uint256 _id = _getCurrentAltarRecordId();
    AltarRecord storage _altarRecord = _getAltarRecord(_id);
    require(_altarRecord.ethereum * _chicken / _chicken == _altarRecord.ethereum);
    TradeBook storage _tradeBook = tradeBooks[msg.sender];
    if (_tradeBook.altarRecordId < _id) {
      _resolveTradeBook(_tradeBook);
      _tradeBook.altarRecordId = _id;
    }
    _altarRecord.chicken = _altarRecord.chicken.add(_chicken);
    _tradeBook.chicken += _chicken;

    emit ChickenToAltar(msg.sender, _id, _chicken);
  }

  function ethereumFromAltar() external {
    uint256 _id = _getCurrentAltarRecordId();
    TradeBook storage _tradeBook = tradeBooks[msg.sender];
    require(_tradeBook.altarRecordId < _id);
    _resolveTradeBook(_tradeBook);
  }

  function tradeBookOf(address _user)
    public
    view
    returns (
      uint256 _id,
      uint256 _ethereum,
      uint256 _totalChicken,
      uint256 _chicken,
      uint256 _income
    )
  {
    TradeBook memory _tradeBook = tradeBooks[_user];
    _id = _tradeBook.altarRecordId;
    _chicken = _tradeBook.chicken;
    AltarRecord memory _altarRecord = altarRecords[_id];
    _totalChicken = _altarRecord.chicken;
    _ethereum = _altarRecord.ethereum;
    _income = _totalChicken > 0 ? _ethereum.mul(_chicken) / _totalChicken : 0;
  }

  /* INTERNAL FUNCTION */

  function _resolveTradeBook(TradeBook storage _tradeBook) internal {
    if (_tradeBook.chicken > 0) {
      AltarRecord memory _oldAltarRecord = altarRecords[_tradeBook.altarRecordId];
      uint256 _ethereum = _oldAltarRecord.ethereum.mul(_tradeBook.chicken) / _oldAltarRecord.chicken;
      delete _tradeBook.chicken;
      ethereumBalance[msg.sender] = ethereumBalance[msg.sender].add(_ethereum);

      emit EthereumFromAltar(msg.sender, _tradeBook.altarRecordId, _ethereum);
    }
  }

  function _getCurrentAltarRecordId() internal view returns (uint256) {
    return (block.timestamp - genesis) / 86400;
  }

  function _getAltarRecord(uint256 _id) internal returns (AltarRecord storage _altarRecord) {
    _altarRecord = altarRecords[_id];
    if (_altarRecord.ethereum == 0) {
      uint256 _ethereum = altarFund / 10;
      _altarRecord.ethereum = _ethereum;
      altarFund -= _ethereum;

      emit NewAltarRecord(_id, _ethereum);
    }
  }

}


/**
 * @title CHCommittee
 * @author M.H. Kang
 */
contract CHCommittee is CHAltar {

  /* EVENT */

  event NewPet(
    uint256 id,
    uint256 huntingPower,
    uint256 offensePower,
    uint256 defense,
    uint256 chicken,
    uint256 ethereum,
    uint256 max
  );

  event ChangePet(
    uint256 id,
    uint256 chicken,
    uint256 ethereum,
    uint256 max
  );

  event NewItem(
    uint256 id,
    uint256 huntingMultiplier,
    uint256 offenseMultiplier,
    uint256 defenseMultiplier,
    uint256 ethereum
  );

  event SetDepot(uint256 ethereum, uint256 max);

  event SetConfiguration(
    uint256 chickenA,
    uint256 ethereumA,
    uint256 maxA,
    uint256 chickenB,
    uint256 ethereumB,
    uint256 maxB
  );

  event SetDistribution(
    uint256 dividendRate,
    uint256 altarCut,
    uint256 storeCut,
    uint256 devCut
  );

  event SetCooldownTime(uint256 cooldownTime);
  event SetNameAndSymbol(string name, string symbol);
  event SetDeveloper(address developer);
  event SetCommittee(address committee);

  /* STORAGE */

  address public committee;
  address public developer;

  /* FUNCTION */

  function callFor(address _to, uint256 _value, uint256 _gas, bytes _code)
    external
    payable
    onlyCommittee
    returns (bool)
  {
    return _to.call.value(_value).gas(_gas)(_code);
  }

  function addPet(
    uint256 _huntingPower,
    uint256 _offensePower,
    uint256 _defense,
    uint256 _chicken,
    uint256 _ethereum,
    uint256 _max
  )
    public
    onlyCommittee
  {
    require(_max > 0);
    require(_max == uint256(uint32(_max)));
    uint256 _newLength = pets.push(
      Pet(_huntingPower, _offensePower, _defense, _chicken, _ethereum, _max)
    );

    emit NewPet(
      _newLength - 1,
      _huntingPower,
      _offensePower,
      _defense,
      _chicken,
      _ethereum,
      _max
    );
  }

  function changePet(
    uint256 _id,
    uint256 _chicken,
    uint256 _ethereum,
    uint256 _max
  )
    public
    onlyCommittee
  {
    require(_id < pets.length);
    Pet storage _pet = pets[_id];
    require(_max >= _pet.max && _max == uint256(uint32(_max)));

    _pet.chicken = _chicken;
    _pet.ethereum = _ethereum;
    _pet.max = _max;

    emit ChangePet(_id, _chicken, _ethereum, _max);
  }

  function addItem(
    uint256 _huntingMultiplier,
    uint256 _offenseMultiplier,
    uint256 _defenseMultiplier,
    uint256 _price
  )
    public
    onlyCommittee
  {
    uint256 _cap = 1 << 16;
    require(
      _huntingMultiplier < _cap &&
      _offenseMultiplier < _cap &&
      _defenseMultiplier < _cap
    );
    saveChickenOf(committee);
    House storage _house = _houseOf(committee);
    _house.huntingMultiplier = _house.huntingMultiplier.add(_huntingMultiplier);
    _house.offenseMultiplier = _house.offenseMultiplier.add(_offenseMultiplier);
    _house.defenseMultiplier = _house.defenseMultiplier.add(_defenseMultiplier);

    uint256 _newLength = items.push(
      Item(
        committee,
        _huntingMultiplier,
        _offenseMultiplier,
        _defenseMultiplier,
        _price
      )
    );

    emit NewItem(
      _newLength - 1,
      _huntingMultiplier,
      _offenseMultiplier,
      _defenseMultiplier,
      _price
    );
  }

  function setDepot(uint256 _price, uint256 _max) public onlyCommittee {
    require(_max >= depot.max);

    depot.ethereum = _price;
    depot.max = _max;

    emit SetDepot(_price, _max);
  }

  function setConfiguration(
    uint256 _chickenA,
    uint256 _ethereumA,
    uint256 _maxA,
    uint256 _chickenB,
    uint256 _ethereumB,
    uint256 _maxB
  )
    public
    onlyCommittee
  {
    require(_maxA >= typeA.max && (_maxA == uint256(uint32(_maxA))));
    require(_maxB >= typeB.max && (_maxB == uint256(uint32(_maxB))));

    typeA.chicken = _chickenA;
    typeA.ethereum = _ethereumA;
    typeA.max = _maxA;

    typeB.chicken = _chickenB;
    typeB.ethereum = _ethereumB;
    typeB.max = _maxB;

    emit SetConfiguration(_chickenA, _ethereumA, _maxA, _chickenB, _ethereumB, _maxB);
  }

  function setDistribution(
    uint256 _dividendRate,
    uint256 _altarCut,
    uint256 _storeCut,
    uint256 _devCut
  )
    public
    onlyCommittee
  {
    require(_storeCut > 0);
    require(
      _dividendRate.add(_altarCut).add(_storeCut).add(_devCut) == 100
    );

    dividendRate = _dividendRate;
    altarCut = _altarCut;
    store.cut = _storeCut;
    devCut = _devCut;

    emit SetDistribution(_dividendRate, _altarCut, _storeCut, _devCut);
  }

  function setCooldownTime(uint256 _cooldownTime) public onlyCommittee {
    cooldownTime = _cooldownTime;

    emit SetCooldownTime(_cooldownTime);
  }

  function setNameAndSymbol(string _name, string _symbol)
    public
    onlyCommittee
  {
    name = _name;
    symbol = _symbol;

    emit SetNameAndSymbol(_name, _symbol);
  }

  function setDeveloper(address _developer) public onlyCommittee {
    require(_developer != address(0));
    withdrawDevFee();
    developer = _developer;

    emit SetDeveloper(_developer);
  }

  function setCommittee(address _committee) public onlyCommittee {
    require(_committee != address(0));
    committee = _committee;

    emit SetCommittee(_committee);
  }

  function withdrawDevFee() public {
    ethereumBalance[developer] = ethereumBalance[developer].add(devFee);
    delete devFee;
  }

  /* MODIFIER */

  modifier onlyCommittee {
    require(msg.sender == committee);
    _;
  }

}


/**
 * @title ChickenHunt
 * @author M.H. Kang
 */
contract ChickenHunt is CHCommittee {

  /* EVENT */

  event Join(address user);

  /* CONSTRUCTOR */

  constructor() public {
    committee = msg.sender;
    developer = msg.sender;
  }

  /* FUNCTION */

  function init(address _chickenTokenDelegator) external onlyCommittee {
    require(chickenTokenDelegator == address(0));
    chickenTokenDelegator = _chickenTokenDelegator;
    genesis = 1525791600;
    join();
    store.owner = msg.sender;
    store.cost = 0.1 ether;
    setConfiguration(100, 0.00001 ether, 99, 100000, 0.001 ether, 9);
    setDistribution(20, 75, 1, 4);
    setCooldownTime(600);
    setDepot(0.05 ether, 9);
    addItem(5, 5, 0, 0.01 ether);
    addItem(0, 0, 5, 0.01 ether);
    addPet(1000, 0, 0, 100000, 0.01 ether, 9);
    addPet(0, 1000, 0, 100000, 0.01 ether, 9);
    addPet(0, 0, 1000, 202500, 0.01 ether, 9);
  }

  function withdraw() external {
    uint256 _ethereum = ethereumBalance[msg.sender];
    delete ethereumBalance[msg.sender];
    msg.sender.transfer(_ethereum);
  }

  function join() public {
    House storage _house = houses[msg.sender];
    require(_house.depots == 0);
    _house.hunter = Hunter(1, 1, 1, 1);
    _house.depots = 1;
    _house.huntingPower = 10;
    _house.offensePower = 10;
    _house.defensePower = 110;
    _house.huntingMultiplier = 10;
    _house.offenseMultiplier = 10;
    _house.defenseMultiplier = 10;
    lastSaveTime[msg.sender] = block.timestamp;

    emit Join(msg.sender);
  }

  function hunterOf(address _user)
    public
    view
    returns (
      uint256 _strength,
      uint256 _dexterity,
      uint256 _constitution,
      uint256 _resistance
    )
  {
    Hunter memory _hunter = houses[_user].hunter;
    return (
      _hunter.strength,
      _hunter.dexterity,
      _hunter.constitution,
      _hunter.resistance
    );
  }

  function detailsOf(address _user)
    public
    view
    returns (
      uint256[2] _hunting,
      uint256[2] _offense,
      uint256[2] _defense,
      uint256[4] _hunter,
      uint256[] _pets,
      uint256 _depots,
      uint256 _savedChicken,
      uint256 _lastSaveTime,
      uint256 _cooldown
    )
  {
    House memory _house = houses[_user];

    _hunting = [_house.huntingPower, _house.huntingMultiplier];
    _offense = [_house.offensePower, _house.offenseMultiplier];
    _defense = [_house.defensePower, _house.defenseMultiplier];
    _hunter = [
      _house.hunter.strength,
      _house.hunter.dexterity,
      _house.hunter.constitution,
      _house.hunter.resistance
    ];
    _pets = _house.pets;
    _depots = _house.depots;
    _savedChicken = savedChickenOf[_user];
    _lastSaveTime = lastSaveTime[_user];
    _cooldown = attackCooldown[_user];
  }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_shareholder","type":"address"}],"name":"dividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"depot","outputs":[{"name":"ethereum","type":"uint256"},{"name":"max","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_amount","type":"uint256"}],"name":"buyPets","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"}],"name":"detailsOf","outputs":[{"name":"_hunting","type":"uint256[2]"},{"name":"_offense","type":"uint256[2]"},{"name":"_defense","type":"uint256[2]"},{"name":"_hunter","type":"uint256[4]"},{"name":"_pets","type":"uint256[]"},{"name":"_depots","type":"uint256"},{"name":"_savedChicken","type":"uint256"},{"name":"_lastSaveTime","type":"uint256"},{"name":"_cooldown","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dividendRate","type":"uint256"},{"name":"_altarCut","type":"uint256"},{"name":"_storeCut","type":"uint256"},{"name":"_devCut","type":"uint256"}],"name":"setDistribution","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_chickenTokenDelegator","type":"address"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"uint256"}],"name":"upgradeDexterity","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"altarCut","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawStoreBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"typeB","outputs":[{"name":"chicken","type":"uint256"},{"name":"ethereum","type":"uint256"},{"name":"max","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalShares","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_chicken","type":"uint256"}],"name":"chickenToAltar","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"buyStore","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"uint256"}],"name":"upgradeConstitution","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_huntingMultiplier","type":"uint256"},{"name":"_offenseMultiplier","type":"uint256"},{"name":"_defenseMultiplier","type":"uint256"},{"name":"_price","type":"uint256"}],"name":"addItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"uint256"}],"name":"upgradeResistance","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"}],"name":"setNameAndSymbol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"INCREMENT_RATE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"ethereumBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"}],"name":"chickenOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"devFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cooldownTime","type":"uint256"}],"name":"setCooldownTime","outputs":[],"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":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"buyDepots","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"typeA","outputs":[{"name":"chicken","type":"uint256"},{"name":"ethereum","type":"uint256"},{"name":"max","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_price","type":"uint256"},{"name":"_max","type":"uint256"}],"name":"setDepot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"savedChickenOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_huntingPower","type":"uint256"},{"name":"_offensePower","type":"uint256"},{"name":"_defense","type":"uint256"},{"name":"_chicken","type":"uint256"},{"name":"_ethereum","type":"uint256"},{"name":"_max","type":"uint256"}],"name":"addPet","outputs":[],"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":"store","outputs":[{"name":"owner","type":"address"},{"name":"cut","type":"uint256"},{"name":"cost","type":"uint256"},{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"ethereumFromAltar","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"devCut","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"genesis","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"}],"name":"hunterOf","outputs":[{"name":"_strength","type":"uint256"},{"name":"_dexterity","type":"uint256"},{"name":"_constitution","type":"uint256"},{"name":"_resistance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"altarRecords","outputs":[{"name":"ethereum","type":"uint256"},{"name":"chicken","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cooldownTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"redeemShares","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_chickenA","type":"uint256"},{"name":"_ethereumA","type":"uint256"},{"name":"_maxA","type":"uint256"},{"name":"_chickenB","type":"uint256"},{"name":"_ethereumB","type":"uint256"},{"name":"_maxB","type":"uint256"}],"name":"setConfiguration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"join","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tradeBooks","outputs":[{"name":"altarRecordId","type":"uint256"},{"name":"chicken","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_committee","type":"address"}],"name":"setCommittee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"items","outputs":[{"name":"owner","type":"address"},{"name":"huntingMultiplier","type":"uint256"},{"name":"offenseMultiplier","type":"uint256"},{"name":"defenseMultiplier","type":"uint256"},{"name":"cost","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalChicken","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gas","type":"uint256"},{"name":"_code","type":"bytes"}],"name":"callFor","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferChickenFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"developer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawDevFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"CORRECTION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"pets","outputs":[{"name":"huntingPower","type":"uint256"},{"name":"offensePower","type":"uint256"},{"name":"defensePower","type":"uint256"},{"name":"chicken","type":"uint256"},{"name":"ethereum","type":"uint256"},{"name":"max","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"}],"name":"attack","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"}],"name":"tradeBookOf","outputs":[{"name":"_id","type":"uint256"},{"name":"_ethereum","type":"uint256"},{"name":"_totalChicken","type":"uint256"},{"name":"_chicken","type":"uint256"},{"name":"_income","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"uint256"}],"name":"upgradeStrength","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"dividendRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"committee","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"chickenTokenDelegator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"}],"name":"saveChickenOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dividendsPerShare","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"buyItem","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"altarFund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"lastSaveTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"attackCooldown","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_chicken","type":"uint256"},{"name":"_ethereum","type":"uint256"},{"name":"_max","type":"uint256"}],"name":"changePet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_developer","type":"address"}],"name":"setDeveloper","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address"}],"name":"Join","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"huntingPower","type":"uint256"},{"indexed":false,"name":"offensePower","type":"uint256"},{"indexed":false,"name":"defense","type":"uint256"},{"indexed":false,"name":"chicken","type":"uint256"},{"indexed":false,"name":"ethereum","type":"uint256"},{"indexed":false,"name":"max","type":"uint256"}],"name":"NewPet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"chicken","type":"uint256"},{"indexed":false,"name":"ethereum","type":"uint256"},{"indexed":false,"name":"max","type":"uint256"}],"name":"ChangePet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"huntingMultiplier","type":"uint256"},{"indexed":false,"name":"offenseMultiplier","type":"uint256"},{"indexed":false,"name":"defenseMultiplier","type":"uint256"},{"indexed":false,"name":"ethereum","type":"uint256"}],"name":"NewItem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"ethereum","type":"uint256"},{"indexed":false,"name":"max","type":"uint256"}],"name":"SetDepot","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"chickenA","type":"uint256"},{"indexed":false,"name":"ethereumA","type":"uint256"},{"indexed":false,"name":"maxA","type":"uint256"},{"indexed":false,"name":"chickenB","type":"uint256"},{"indexed":false,"name":"ethereumB","type":"uint256"},{"indexed":false,"name":"maxB","type":"uint256"}],"name":"SetConfiguration","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"dividendRate","type":"uint256"},{"indexed":false,"name":"altarCut","type":"uint256"},{"indexed":false,"name":"storeCut","type":"uint256"},{"indexed":false,"name":"devCut","type":"uint256"}],"name":"SetDistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"cooldownTime","type":"uint256"}],"name":"SetCooldownTime","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"symbol","type":"string"}],"name":"SetNameAndSymbol","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"developer","type":"address"}],"name":"SetDeveloper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"committee","type":"address"}],"name":"SetCommittee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"ethereum","type":"uint256"}],"name":"NewAltarRecord","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"chicken","type":"uint256"}],"name":"ChickenToAltar","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"ethereum","type":"uint256"}],"name":"EthereumFromAltar","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"attacker","type":"address"},{"indexed":true,"name":"defender","type":"address"},{"indexed":false,"name":"booty","type":"uint256"}],"name":"Attack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"to","type":"uint256"}],"name":"UpgradePet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"to","type":"uint256"}],"name":"UpgradeDepot","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"id","type":"uint256"},{"indexed":false,"name":"cost","type":"uint256"}],"name":"BuyItem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"cost","type":"uint256"}],"name":"BuyStore","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"attribute","type":"string"},{"indexed":false,"name":"to","type":"uint256"}],"name":"UpgradeHunter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"shares","type":"uint256"},{"indexed":false,"name":"dividends","type":"uint256"}],"name":"RedeemShares","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

60c0604052601060808190527f436869636b656e48756e7453746f636b0000000000000000000000000000000060a0908152620000409160009190620000cb565b506040805180820190915260038082527f434853000000000000000000000000000000000000000000000000000000000060209092019182526200008791600191620000cb565b506002805460ff19166012179055348015620000a257600080fd5b506027805433600160a060020a0319918216811790925560288054909116909117905562000170565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200010e57805160ff19168380011785556200013e565b828001600101855582156200013e579182015b828111156200013e57825182559160200191906001019062000121565b506200014c92915062000150565b5090565b6200016d91905b808211156200014c576000815560010162000157565b90565b613b8b80620001806000396000f3006080604052600436106103415763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166265318b8114610346578063016899de14610379578063045f955b146103a757806306fdde03146103b7578063095ea7b3146104415780630adae972146104795780630fc709e5146105ba57806318160ddd146105db57806319ab453c146105f05780631fa087551461061157806323b872dd1461061c57806327bb020a1461064657806328b8b1081461065b5780632b2e715914610670578063313ce567146106a35780633a98ef39146106ce5780633ccfd60b146106e357806341ad3f57146106f8578063463ac31b146107105780634c97c83614610718578063572b130f146107235780635996228e146107445780635a4462151461074f5780635baef4f3146107e65780635c5c1285146107fb57806363fd7eb01461081c5780636827e7641461083d5780636ff732011461085257806370a082311461086a578063765878471461088b5780637ebd02f8146108965780638e7a1697146108ab578063910ab259146108c6578063916a4b57146108e757806395d89b411461090e578063975057e71461092357806398d714ac146109685780639c2868371461097d578063a7f0b3de14610992578063a9059cbb146109a7578063a9782954146109cb578063aaa363c914610a12578063b319c6b714610a2a578063b460481d14610a3f578063b48fcdc014610a54578063b688a36314610a7b578063b92c404f14610a90578063bddae40e14610ab1578063bfb231d214610ad2578063c3ba65e714610b1f578063c60c3aca14610b34578063ca1a308614610b5c578063ca4b208b14610b86578063cb93f7ef14610bb7578063ce5e9ffb14610bcc578063cfb869bf14610be1578063d018db3e14610c2c578063d1a6102514610c4d578063d583644b14610c99578063d6a3f37414610ca4578063d864e74014610cb9578063dba8be6e14610cce578063dd62ed3e14610ce3578063de2f827e14610d0a578063e2d2e21914610d2b578063e7fb74c714610d40578063eb4eecec14610d4b578063efab37bf14610d60578063f0bb754014610d81578063f67501f714610da2578063ff70fa4914610dc3575b600080fd5b34801561035257600080fd5b50610367600160a060020a0360043516610de4565b60408051918252519081900360200190f35b34801561038557600080fd5b5061038e610e61565b6040805192835260208301919091528051918290030190f35b6103b5600435602435610e6a565b005b3480156103c357600080fd5b506103cc611074565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104065781810151838201526020016103ee565b50505050905090810190601f1680156104335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561044d57600080fd5b50610465600160a060020a0360043516602435611102565b604080519115158252519081900360200190f35b34801561048557600080fd5b5061049a600160a060020a0360043516611169565b604051808a600260200280838360005b838110156104c25781810151838201526020016104aa565b5050505090500189600260200280838360005b838110156104ed5781810151838201526020016104d5565b5050505090500188600260200280838360005b83811015610518578181015183820152602001610500565b5050505090500187600460200280838360005b8381101561054357818101518382015260200161052b565b5050505090500180602001868152602001858152602001848152602001838152602001828103825287818151815260200191508051906020019060200280838360005b8381101561059e578181015183820152602001610586565b505050509050019a505050505050505050505060405180910390f35b3480156105c657600080fd5b506103b56004356024356044356064356113c0565b3480156105e757600080fd5b50610367611467565b3480156105fc57600080fd5b506103b5600160a060020a036004351661146e565b6103b56004356115b4565b34801561062857600080fd5b50610465600160a060020a03600435811690602435166044356116de565b34801561065257600080fd5b5061036761174d565b34801561066757600080fd5b506103b5611753565b34801561067c57600080fd5b506106856117a3565b60408051938452602084019290925282820152519081900360600190f35b3480156106af57600080fd5b506106b86117af565b6040805160ff9092168252519081900360200190f35b3480156106da57600080fd5b506103676117b8565b3480156106ef57600080fd5b506103b56117be565b34801561070457600080fd5b506103b5600435611803565b6103b56118d9565b6103b56004356119e5565b34801561072f57600080fd5b506103b5600435602435604435606435611af9565b6103b5600435611d36565b34801561075b57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103b594369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750611e3d9650505050505050565b3480156107f257600080fd5b50610367611f80565b34801561080757600080fd5b50610367600160a060020a0360043516611f85565b34801561082857600080fd5b50610367600160a060020a0360043516611f97565b34801561084957600080fd5b50610367611fca565b34801561085e57600080fd5b506103b5600435611fd0565b34801561087657600080fd5b50610367600160a060020a0360043516612022565b6103b560043561203d565b3480156108a257600080fd5b506106856120d0565b3480156108b757600080fd5b506103b56004356024356120dc565b3480156108d257600080fd5b50610367600160a060020a036004351661214b565b3480156108f357600080fd5b506103b560043560243560443560643560843560a43561215d565b34801561091a57600080fd5b506103cc612328565b34801561092f57600080fd5b50610938612382565b60408051600160a060020a0390951685526020850193909352838301919091526060830152519081900360800190f35b34801561097457600080fd5b506103b561239d565b34801561098957600080fd5b506103676123d2565b34801561099e57600080fd5b506103676123d8565b3480156109b357600080fd5b50610465600160a060020a03600435166024356123de565b3480156109d757600080fd5b506109ec600160a060020a03600435166123f4565b604080519485526020850193909352838301919091526060830152519081900360800190f35b348015610a1e57600080fd5b5061038e60043561245d565b348015610a3657600080fd5b50610367612476565b348015610a4b57600080fd5b506103b561247c565b348015610a6057600080fd5b506103b560043560243560443560643560843560a43561254b565b348015610a8757600080fd5b506103b5612621565b348015610a9c57600080fd5b5061038e600160a060020a03600435166126f0565b348015610abd57600080fd5b506103b5600160a060020a0360043516612709565b348015610ade57600080fd5b50610aea600435612789565b60408051600160a060020a03909616865260208601949094528484019290925260608401526080830152519081900360a00190f35b348015610b2b57600080fd5b506103676127d2565b61046560048035600160a060020a0316906024803591604435916064359081019101356127d8565b348015610b6857600080fd5b50610465600160a060020a036004358116906024351660443561282f565b348015610b9257600080fd5b50610b9b6128b9565b60408051600160a060020a039092168252519081900360200190f35b348015610bc357600080fd5b506103b56128c8565b348015610bd857600080fd5b50610367612918565b348015610bed57600080fd5b50610bf9600435612925565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b348015610c3857600080fd5b506103b5600160a060020a0360043516612969565b348015610c5957600080fd5b50610c6e600160a060020a0360043516612ab6565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6103b5600435612b66565b348015610cb057600080fd5b50610367612c8d565b348015610cc557600080fd5b50610b9b612c93565b348015610cda57600080fd5b50610b9b612ca2565b348015610cef57600080fd5b50610367600160a060020a0360043581169060243516612cb1565b348015610d1657600080fd5b50610367600160a060020a0360043516612cdc565b348015610d3757600080fd5b50610367612d5e565b6103b5600435612d64565b348015610d5757600080fd5b50610367612fd4565b348015610d6c57600080fd5b50610367600160a060020a0360043516612fda565b348015610d8d57600080fd5b50610367600160a060020a0360043516612fec565b348015610dae57600080fd5b506103b5600435602435604435606435612ffe565b348015610dcf57600080fd5b506103b5600160a060020a03600435166130cb565b600160a060020a03811660009081526008602090815260408083205460078352818420546006909352908320546004546801000000000000000093610e4f9392610e4392610e379163ffffffff61315316565b9063ffffffff61317c16565b9063ffffffff61318916565b811515610e5857fe5b0490505b919050565b601e54601f5482565b610e7261397f565b602054600090819081908610610e8757600080fd5b6020805487908110610e9557fe5b906000526020600020906006020160c0604051908101604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815250509350836060015185029250610f00338461319b565b836080015185029150610f1282613261565b610f1b336132fb565b600b810154909150600187011115610f405760018601610f3e600b8301826139b6565b505b610f6e8582600b0188815481101515610f5557fe5b906000526020600020015461317c90919063ffffffff16565b600b8201805488908110610f7e57fe5b60009182526020909120015560a0840151600b8201805488908110610f9f57fe5b906000526020600020015411151515610fb757600080fd5b83516004820154610fcf91870263ffffffff61317c16565b600482015560208401516005820154610fef91870263ffffffff61317c16565b60058201556040840151600682015461100f91870263ffffffff61317c16565b6006820155600b8101805433917f16ab5780b3810d9cdc9a1ed37ce0fa7ea98e877c6f8a257fb37b16833bcba471918991908290811061104b57fe5b6000918252602091829020015460408051938452918301528051918290030190a2505050505050565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110fa5780601f106110cf576101008083540402835291602001916110fa565b820191906000526020600020905b8154815290600101906020018083116110dd57829003601f168201915b505050505081565b336000818152600960209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6111716139da565b6111796139da565b6111816139da565b6111896139f5565b6060600080600080611199613a14565b600160a060020a038b1660009081526017602090815260409182902082516101a0810184528154610120820190815260018301546101408301526002830154610160830152600383015461018083015281526004820154818401526005820154818501526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b8201805485518186028101860190965280865291949293610100860193929083018282801561127f57602002820191906000526020600020905b81548152602001906001019080831161126b575b5050505050815250509050604080519081016040528082602001518152602001826080015181525099506040805190810160405280826040015181526020018260a0015181525098506040805190810160405280826060015181526020018260c001518152509750608060405190810160405280826000015160000151815260200182600001516020015181526020018260000151604001518152602001826000015160600151815250965080610100015195508060e001519450601660008c600160a060020a0316600160a060020a03168152602001908152602001600020549350601560008c600160a060020a0316600160a060020a03168152602001908152602001600020549250602260008c600160a060020a0316600160a060020a03168152602001908152602001600020549150509193959799909294969850565b602754600160a060020a031633146113d757600080fd5b600082116113e457600080fd5b6113fa81610e378481888863ffffffff61317c16565b60641461140657600080fd5b60128490556010839055600b829055600e81905560408051858152602081018590528082018490526060810183905290517f19b0c2b62f3fec0fb2a4ad13aa46c5627e326ae04dd8fba61a5b905cd53f7eb79181900360800190a150505050565b6003545b90565b602754600160a060020a0316331461148557600080fd5b601454600160a060020a03161561149b57600080fd5b60148054600160a060020a031916600160a060020a038316179055635af1bb706024556114c6612621565b600a8054600160a060020a0319163317905567016345785d8a0000600c5561150560646509184e72a0006063620186a066038d7ea4c68000600961254b565b6115156014604b600160046113c0565b611520610258611fd0565b61153266b1a2bc2ec5000060096120dc565b6115476005806000662386f26fc10000611af9565b61155c6000806005662386f26fc10000611af9565b6115786103e8600080620186a0662386f26fc10000600961215d565b61159560006103e86000620186a0662386f26fc10000600961215d565b6115b16000806103e862031704662386f26fc10000600961215d565b50565b60008060006115c2336132fb565b6001810154601d54919450925084118015906115dd57508184115b15156115e857600080fd5b60408051606081018252601b548152601c546020820152601d54918101919091526116169083908690613324565b61164361162c838603600263ffffffff61315316565b84546116379061337e565b9063ffffffff61315316565b600184018590556004840154909150611662908263ffffffff61317c16565b6004840155600583015461167c908263ffffffff61317c16565b600584015560408051602081018690528181526009818301527f6465787465726974790000000000000000000000000000000000000000000000606082015290513391600080516020613b40833981519152919081900360800190a250505050565b600160a060020a038316600090815260096020908152604080832033845290915281205482111561170e57600080fd5b600160a060020a038416600090815260096020908152604080832033845290915290208054839003905561174384848461338a565b5060019392505050565b60105481565b600d54600a54600160a060020a03166000908152600560205260409020546117809163ffffffff61317c16565b600a54600160a060020a0316600090815260056020526040812091909155600d55565b601b54601c54601d5483565b60025460ff1681565b60035481565b33600081815260056020526040808220805490839055905190929183156108fc02918491818181858888f193505050501580156117ff573d6000803e3d6000fd5b5050565b6000808080841161181357600080fd5b61181d338561319b565b611825613595565b9250611830836135a5565b80549092508480820281151561184257fe5b041461184d57600080fd5b5033600090815260266020526040902080548311156118735761186f81613614565b8281555b6001820154611888908563ffffffff61317c16565b60018084019190915581018054850190556040805184815260208101869052815133927f249d3c255987361d5d69f32914f89ba3b6617f290ed9e435126a39a7cff6d996928290030190a250505050565b600a8054600c8054600160a060020a03909216926000928392611902919063ffffffff61315316565b81151561190b57fe5b049150611917826136fd565b600c54600290830304905061193781600f5461317c90919063ffffffff16565b600f55600d54600160a060020a03841660009081526005602052604090205461196d9190610e379084860363ffffffff61317c16565b600160a060020a038416600081815260056020908152604080832094909455600c869055600a8054600160a060020a03191633908117909155600d929092558351868152935191937f0f24f9f79a489f214543721c774ce6b52901934b07e7da8c77642f1866f0e841929081900390910190a3505050565b60008060006119f3336132fb565b6002810154601a5491945092508411801590611a0e57508184115b1515611a1957600080fd5b6040805160608101825260185481526019546020820152601a5491810191909152611a479083908690613324565b611a786002830a611a578661337e565b036116376008610e376002886000016003015461315390919063ffffffff16565b600284018590556006840154909150611a97908263ffffffff61317c16565b60068401556040805160208101869052818152600c818301527f636f6e737469747574696f6e0000000000000000000000000000000000000000606082015290513391600080516020613b40833981519152919081900360800190a250505050565b60275460009081908190600160a060020a03163314611b1757600080fd5b6201000092508287108015611b2b57508286105b8015611b3657508285105b1515611b4157600080fd5b602754611b5690600160a060020a0316612cdc565b50602754611b6c90600160a060020a03166132fb565b6007810154909250611b84908863ffffffff61317c16565b60078301556008820154611b9e908763ffffffff61317c16565b60088301556009820154611bb8908663ffffffff61317c16565b6009830155506040805160a08082018352602754600160a060020a03908116835260208084018b81528486018b815260608087018c815260808089018d815260218054600181018083556000929092529a517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57060058d029081018054600160a060020a03191692909b169190911790995595517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57189015593517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57288015590517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57387015591517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5749095019490945586519586529185018c90528486018b9052918401899052830187905292517f2f770e091da1eb4be223d793b34fcd1b5cbff2f4c74ad7f2d7d55c1eceda488d9281900390910190a150505050505050565b6000806000611d44336132fb565b6003810154601d5491945092508411801590611d5f57508184115b1515611d6a57600080fd5b60408051606081018252601b548152601c546020820152601d5491810191909152611d989083908690613324565b611dbc611dae838603600263ffffffff61315316565b60028501546116379061337e565b600384018590556006840154909150611ddb908263ffffffff61317c16565b60068401556040805160208101869052818152600a818301527f726573697374616e636500000000000000000000000000000000000000000000606082015290513391600080516020613b40833981519152919081900360800190a250505050565b602754600160a060020a03163314611e5457600080fd5b8151611e67906000906020850190613a67565b508051611e7b906001906020840190613a67565b507fd150542982eaa18f20ceb10f524c418899e6a331a81ee4a70daa921f976fab3b8282604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ee0578181015183820152602001611ec8565b50505050905090810190601f168015611f0d5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611f40578181015183820152602001611f28565b50505050905090810190601f168015611f6d5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15050565b600c81565b60056020526000908152604090205481565b6000611163611fa58361377d565b600160a060020a0384166000908152601660205260409020549063ffffffff61317c16565b600f5481565b602754600160a060020a03163314611fe757600080fd5b60238190556040805182815290517ff1f62fb53f063eeed657f6ed8c238c2e61ef9547b206dac91c836599fb8f7a339181900360200190a150565b600160a060020a031660009081526006602052604090205490565b6000612048336132fb565b600a810154909150612060908363ffffffff61317c16565b600a8201819055601f54101561207557600080fd5b601e546120929061208d90849063ffffffff61315316565b613261565b600a810154604080519182525133917f088f18ecb97af8211f9549cddf9227ee53f8fda22b969dab5621461c80fc7d50919081900360200190a25050565b601854601954601a5483565b602754600160a060020a031633146120f357600080fd5b601f5481101561210257600080fd5b601e829055601f819055604080518381526020810183905281517f25e5d03ea9004bbd99c954a40cefdb9a23e87966152ac725e8c44386f6e11798929181900390910190a15050565b60166020526000908152604090205481565b602754600090600160a060020a0316331461217757600080fd5b6000821161218457600080fd5b63ffffffff8216821461219657600080fd5b506040805160c08181018352888252602082810189815283850189815260608086018a815260808088018b815260a0808a018c8152885460018101808b5560008b90529b51600682027fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb81019190915598517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bc8a015596517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bd89015593517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866be88015590517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bf87015591517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866c09095019490945587519283529382018d90528187018c905281018a9052908101889052908101869052908101849052915190917f825cf2439eaf73dfac2c09fd8f2d837fad3d41ae9997922036b523f11e6c1226919081900360e00190a150505050505050565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110fa5780601f106110cf576101008083540402835291602001916110fa565b600a54600b54600c54600d54600160a060020a039093169284565b6000806123a8613595565b3360009081526026602052604090208054919350915082116123c957600080fd5b6117ff81613614565b600e5481565b60245481565b60006123eb33848461338a565b50600192915050565b600080600080612402613ae5565b50505050600160a060020a039190911660009081526017602090815260409182902082516080810184528154808252600183015493820184905260028301549482018590526003909201546060909101819052909491935090565b6025602052600090815260409020805460019091015482565b60235481565b336000818152600660205260408120549161249690610de4565b3360009081526006602090815260408083208390556007825280832083905560089091528120556003549091506124d3908363ffffffff61318916565b600355336000908152600560205260409020546124f6908263ffffffff61317c16565b33600081815260056020908152604091829020939093558051858152928301849052805191927fef7fb21fed1701a6c82b78d78bad1ddab67e41025c2d5078a1be2a3a238b4e62929081900390910190a25050565b602754600160a060020a0316331461256257600080fd5b601a54841080159061257957508363ffffffff1684145b151561258457600080fd5b601d54811080159061259b57508063ffffffff1681145b15156125a657600080fd5b60188690556019859055601a849055601b839055601c829055601d8190556040805187815260208101879052808201869052606081018590526080810184905260a0810183905290517fdd7612d23bf1ba260c41948384c8a672815d6e6f03705f4ccb8db39d01bb49d09181900360c00190a1505050505050565b336000908152601760205260409020600a8101541561263f57600080fd5b604080516080810182526001808252602080830182905282840182905260609092018190528084558381018190556002840181905560038401819055600a808501919091556004840181905560058401819055606e60068501556007840181905560088401819055600984015533600081815260158352839020429055825190815291517f0764c80c4165f118547b301a0b4b91eac21bd2f2d9b61d0ac723ff0aab27bb799281900390910190a150565b6026602052600090815260409020805460019091015482565b602754600160a060020a0316331461272057600080fd5b600160a060020a038116151561273557600080fd5b60278054600160a060020a038316600160a060020a0319909116811790915560408051918252517f22a3400c609e52ea781540daed872a0ff7b79a428f634be082c24c2faf0684639181900360200190a150565b602180548290811061279757fe5b600091825260209091206005909102018054600182015460028301546003840154600490940154600160a060020a0390931694509092909185565b60135481565b602754600090600160a060020a031633146127f257600080fd5b85600160a060020a0316858590858560405180838380828437820191505092505050600060405180830381858888f19a9950505050505050505050565b601454600090600160a060020a0316331461284957600080fd5b8161285385612cdc565b101561285e57600080fd5b600160a060020a038085166000908152601660205260408082208054869003905591851681522054612896908363ffffffff61317c16565b600160a060020a0384166000908152601660205260409020555060019392505050565b602854600160a060020a031681565b600f54602854600160a060020a03166000908152600560205260409020546128f59163ffffffff61317c16565b602854600160a060020a0316600090815260056020526040812091909155600f55565b6801000000000000000081565b602080548290811061293357fe5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501549395509193909286565b3360009081526022602052604081205481908190421161298857600080fd5b33600090815260176020526040808220600160a060020a03871683529120600981015460068201549295509093506129c6919063ffffffff61315316565b600884015460058501546129df9163ffffffff61315316565b1115612ab0576129ee84612cdc565b9050600082600a015411612a025780612a13565b81600a015481811515612a1157fe5b045b600160a060020a03851660009081526016602052604080822080548490039055338252902054909150612a4c908263ffffffff61317c16565b3360008181526016602090815260408083209490945560235460228252918490204290920190915582518481529251600160a060020a038816937f07fc6d85ef6db5c911f925dd0be5e0b6139a4d732479327729330fcf4ab15e2d92908290030190a35b50505050565b6000806000806000612ac6613b0e565b612ace613b0e565b5050600160a060020a03861660009081526026602090815260408083208151808301835281548082526001928301548286018190528187526025865284872085518087019096528054808752940154958501869052909a50919850929650945090918511612b3d576000612b59565b84612b4e878663ffffffff61315316565b811515612b5757fe5b045b9250505091939590929450565b6000806000612b74336132fb565b8054601a5491945092508411801590612b8c57508184115b1515612b9757600080fd5b6040805160608101825260185481526019546020820152601a5491810191909152612bc59083908690613324565b612bf66002830a612bd58661337e565b036116376008610e376002886000016001015461315390919063ffffffff16565b8484556004840154909150612c11908263ffffffff61317c16565b60048401556005830154612c2b908263ffffffff61317c16565b600584015560408051602081018690528181526008818301527f737472656e677468000000000000000000000000000000000000000000000000606082015290513391600080516020613b40833981519152919081900360800190a250505050565b60125481565b602754600160a060020a031681565b601454600160a060020a031681565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b6000806000612cea8461377d565b601354909250612d00908363ffffffff61317c16565b601355600160a060020a038416600090815260166020526040902054612d2c908363ffffffff61317c16565b600160a060020a0394909416600090815260166020908152604080832087905560159091529020429055509192915050565b60045481565b600080600080600080602187815481101515612d7c57fe5b6000918252602090912060059091020180546004820154919750600160a060020a03169550600a90612db590600c63ffffffff61315316565b811515612dbe57fe5b049350612dca846136fd565b612dd385612cdc565b50612ddd856132fb565b9250612dfa8660010154846007015461318990919063ffffffff16565b600784015560028601546008840154612e189163ffffffff61318916565b600884015560038601546009840154612e369163ffffffff61318916565b6009840155612e4433612cdc565b50612e4e336132fb565b9150612e6b8660010154836007015461317c90919063ffffffff16565b600783015560028601546008830154612e899163ffffffff61317c16565b600883015560038601546009830154612ea79163ffffffff61317c16565b60098301556004860154600290612ec590869063ffffffff61318916565b811515612ece57fe5b049050612ee681600f5461317c90919063ffffffff16565b600f55600160a060020a038516600090815260056020526040902054612f149082860363ffffffff61317c16565b600160a060020a0386166000908152600560205260409020556021805485919089908110612f3e57fe5b90600052602060002090600502016004018190555033602188815481101515612f6357fe5b6000918252602091829020600591909102018054600160a060020a031916600160a060020a039384161790556040805187815290518a933393908a16927fc6d7a5e59f38ae48e0f1577ce4627ba9b270bfd4c2c0c7be609c429421bc3d68929081900390910190a450505050505050565b60115481565b60156020526000908152604090205481565b60226020526000908152604090205481565b602754600090600160a060020a0316331461301857600080fd5b602054851061302657600080fd5b602080548690811061303457fe5b906000526020600020906006020190508060050154821015801561305d57508163ffffffff1682145b151561306857600080fd5b60038101849055600481018390556005810182905560408051868152602081018690528082018590526060810184905290517f2c2e9072543dfe5f0b03fabc22ced8ddd4e6f976a64f2f4726c4ea72cf8d31c09181900360800190a15050505050565b602754600160a060020a031633146130e257600080fd5b600160a060020a03811615156130f757600080fd5b6130ff6128c8565b60288054600160a060020a038316600160a060020a0319909116811790915560408051918252517f8aaf3a0823afdd08e2480f3fac4af353fad0c1e1aeffae73284c2295e441fc939181900360200190a150565b600082151561316457506000611163565b5081810281838281151561317457fe5b041461116357fe5b8181018281101561116357fe5b60008282111561319557fe5b50900390565b6000806131a78461377d565b9150818311156132085750600160a060020a038316600090815260166020526040902054818303908111156131db57600080fd5b600160a060020a038416600090815260166020526040902080548290039055601380548290039055613242565b5060135482820390613220908263ffffffff61317c16565b601355600160a060020a03841660009081526016602052604090208054820190555b505050600160a060020a03166000908152601560205260409020429055565b60008080836064808202041461327657600080fd5b61327f846136fd565b601254601054606491860282900494508502600b54919004925060649085020490506132bc81838587030303600f5461317c90919063ffffffff16565b600f556132c93384613802565b6011546132dc908363ffffffff61317c16565b601155600d546132f2908263ffffffff61317c16565b600d5550505050565b600160a060020a0381166000908152601760205260408120600a810154909110610e5c57600080fd5b600080613342613334868661392d565b84519063ffffffff61315316565b915061334e338361319b565b61336c61335b868661394d565b60208501519063ffffffff61315316565b905061337781613261565b5050505050565b60006111638283613153565b60008080600160a060020a03851615156133a357600080fd5b600160a060020a0386166000908152600660205260409020548411156133c857600080fd5b6004546133db908563ffffffff61315316565b600160a060020a038716600090815260076020526040902054909350613407908463ffffffff61317c16565b600160a060020a038716600090815260086020526040902054909250821061344757600160a060020a038616600090815260086020526040902054613449565b815b905061345b828263ffffffff61318916565b600160a060020a038716600090815260076020908152604080832093909355600890522054613490908263ffffffff61318916565b600160a060020a0380881660009081526008602052604080822093909355908716815220546134c5908463ffffffff61317c16565b600160a060020a03808716600090815260086020908152604080832094909455918916815260069091522054613501908563ffffffff61318916565b600160a060020a038088166000908152600660205260408082209390935590871681522054613536908563ffffffff61317c16565b600160a060020a0380871660008181526006602090815260409182902094909455805188815290519193928a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050505050565b6024546201518042919091030490565b60008181526025602052604081208054909190151561360e575060118054600a90048083558154819003909155604080518481526020810183905281517f3d823e1b0137c31466d0d26831c5b359c4eab1d1237ead4a8ff564264d9a2c53929181900390910190a15b50919050565b61361c613b0e565b600080836001015411156136f857825460009081526025602090815260409182902082518084019093528054808452600191820154928401839052908601549294509091613670919063ffffffff61315316565b81151561367957fe5b6000600186018190553381526005602052604090205491900491506136a4908263ffffffff61317c16565b336000818152600560209081526040918290209390935585548151908152928301849052805191927f1999f960f6c1318254fc32602ac8ba7ebe18123b1bfe4d21cb9b5ac24761aae4929081900390910190a25b505050565b6000348211156137435750336000908152600560205260409020543482039081111561372857600080fd5b336000908152600560205260409020805482900390556117ff565b50336000908152600560205260409020543482900390613769908263ffffffff61317c16565b336000908152600560205260409020555050565b600160a060020a03811660009081526015602052604081205481811180156137a457504281105b156137f957600160a060020a038316600090815260176020526040902060078101546004909101546064916137e8914285900391611637919063ffffffff61315316565b8115156137f157fe5b04915061360e565b6000915061360e565b60008111156117ff5760035461381e908263ffffffff61317c16565b60035560045461385d90613838908363ffffffff61315316565b600160a060020a0384166000908152600860205260409020549063ffffffff61317c16565b600160a060020a038316600090815260086020908152604080832093909355600690522054613892908263ffffffff61317c16565b600160a060020a0383166000908152600660205260409020556003546138e5906138cb836801000000000000000063ffffffff61315316565b8115156138d457fe5b60045491900463ffffffff61317c16565b600455604080518281529051600160a060020a038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60046002600019808501850282900a90840184029190910a030492915050565b60006006600184600202036001850385020260018460020203600185038502020381151561397757fe5b049392505050565b60c0604051908101604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8154818355818111156136f8576000838152602090206136f8918101908301613b25565b60408051808201825290600290829080388339509192915050565b6080604051908101604052806004906020820280388339509192915050565b61018060405190810160405280613a29613ae5565b815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613aa857805160ff1916838001178555613ad5565b82800160010185558215613ad5579182015b82811115613ad5578251825591602001919060010190613aba565b50613ae1929150613b25565b5090565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b604080518082019091526000808252602082015290565b61146b91905b80821115613ae15760008155600101613b2b56009a18b08f786ded2f49322290bcefb5a9ad611fae6a3c2cdf63c46a8a4573bf17a165627a7a72305820b6f087fe4031eb79d8bd609c9571aea4625e9f63c3da4813d397f2c390ef85cf0029

Deployed Bytecode

0x6080604052600436106103415763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166265318b8114610346578063016899de14610379578063045f955b146103a757806306fdde03146103b7578063095ea7b3146104415780630adae972146104795780630fc709e5146105ba57806318160ddd146105db57806319ab453c146105f05780631fa087551461061157806323b872dd1461061c57806327bb020a1461064657806328b8b1081461065b5780632b2e715914610670578063313ce567146106a35780633a98ef39146106ce5780633ccfd60b146106e357806341ad3f57146106f8578063463ac31b146107105780634c97c83614610718578063572b130f146107235780635996228e146107445780635a4462151461074f5780635baef4f3146107e65780635c5c1285146107fb57806363fd7eb01461081c5780636827e7641461083d5780636ff732011461085257806370a082311461086a578063765878471461088b5780637ebd02f8146108965780638e7a1697146108ab578063910ab259146108c6578063916a4b57146108e757806395d89b411461090e578063975057e71461092357806398d714ac146109685780639c2868371461097d578063a7f0b3de14610992578063a9059cbb146109a7578063a9782954146109cb578063aaa363c914610a12578063b319c6b714610a2a578063b460481d14610a3f578063b48fcdc014610a54578063b688a36314610a7b578063b92c404f14610a90578063bddae40e14610ab1578063bfb231d214610ad2578063c3ba65e714610b1f578063c60c3aca14610b34578063ca1a308614610b5c578063ca4b208b14610b86578063cb93f7ef14610bb7578063ce5e9ffb14610bcc578063cfb869bf14610be1578063d018db3e14610c2c578063d1a6102514610c4d578063d583644b14610c99578063d6a3f37414610ca4578063d864e74014610cb9578063dba8be6e14610cce578063dd62ed3e14610ce3578063de2f827e14610d0a578063e2d2e21914610d2b578063e7fb74c714610d40578063eb4eecec14610d4b578063efab37bf14610d60578063f0bb754014610d81578063f67501f714610da2578063ff70fa4914610dc3575b600080fd5b34801561035257600080fd5b50610367600160a060020a0360043516610de4565b60408051918252519081900360200190f35b34801561038557600080fd5b5061038e610e61565b6040805192835260208301919091528051918290030190f35b6103b5600435602435610e6a565b005b3480156103c357600080fd5b506103cc611074565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104065781810151838201526020016103ee565b50505050905090810190601f1680156104335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561044d57600080fd5b50610465600160a060020a0360043516602435611102565b604080519115158252519081900360200190f35b34801561048557600080fd5b5061049a600160a060020a0360043516611169565b604051808a600260200280838360005b838110156104c25781810151838201526020016104aa565b5050505090500189600260200280838360005b838110156104ed5781810151838201526020016104d5565b5050505090500188600260200280838360005b83811015610518578181015183820152602001610500565b5050505090500187600460200280838360005b8381101561054357818101518382015260200161052b565b5050505090500180602001868152602001858152602001848152602001838152602001828103825287818151815260200191508051906020019060200280838360005b8381101561059e578181015183820152602001610586565b505050509050019a505050505050505050505060405180910390f35b3480156105c657600080fd5b506103b56004356024356044356064356113c0565b3480156105e757600080fd5b50610367611467565b3480156105fc57600080fd5b506103b5600160a060020a036004351661146e565b6103b56004356115b4565b34801561062857600080fd5b50610465600160a060020a03600435811690602435166044356116de565b34801561065257600080fd5b5061036761174d565b34801561066757600080fd5b506103b5611753565b34801561067c57600080fd5b506106856117a3565b60408051938452602084019290925282820152519081900360600190f35b3480156106af57600080fd5b506106b86117af565b6040805160ff9092168252519081900360200190f35b3480156106da57600080fd5b506103676117b8565b3480156106ef57600080fd5b506103b56117be565b34801561070457600080fd5b506103b5600435611803565b6103b56118d9565b6103b56004356119e5565b34801561072f57600080fd5b506103b5600435602435604435606435611af9565b6103b5600435611d36565b34801561075b57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103b594369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750611e3d9650505050505050565b3480156107f257600080fd5b50610367611f80565b34801561080757600080fd5b50610367600160a060020a0360043516611f85565b34801561082857600080fd5b50610367600160a060020a0360043516611f97565b34801561084957600080fd5b50610367611fca565b34801561085e57600080fd5b506103b5600435611fd0565b34801561087657600080fd5b50610367600160a060020a0360043516612022565b6103b560043561203d565b3480156108a257600080fd5b506106856120d0565b3480156108b757600080fd5b506103b56004356024356120dc565b3480156108d257600080fd5b50610367600160a060020a036004351661214b565b3480156108f357600080fd5b506103b560043560243560443560643560843560a43561215d565b34801561091a57600080fd5b506103cc612328565b34801561092f57600080fd5b50610938612382565b60408051600160a060020a0390951685526020850193909352838301919091526060830152519081900360800190f35b34801561097457600080fd5b506103b561239d565b34801561098957600080fd5b506103676123d2565b34801561099e57600080fd5b506103676123d8565b3480156109b357600080fd5b50610465600160a060020a03600435166024356123de565b3480156109d757600080fd5b506109ec600160a060020a03600435166123f4565b604080519485526020850193909352838301919091526060830152519081900360800190f35b348015610a1e57600080fd5b5061038e60043561245d565b348015610a3657600080fd5b50610367612476565b348015610a4b57600080fd5b506103b561247c565b348015610a6057600080fd5b506103b560043560243560443560643560843560a43561254b565b348015610a8757600080fd5b506103b5612621565b348015610a9c57600080fd5b5061038e600160a060020a03600435166126f0565b348015610abd57600080fd5b506103b5600160a060020a0360043516612709565b348015610ade57600080fd5b50610aea600435612789565b60408051600160a060020a03909616865260208601949094528484019290925260608401526080830152519081900360a00190f35b348015610b2b57600080fd5b506103676127d2565b61046560048035600160a060020a0316906024803591604435916064359081019101356127d8565b348015610b6857600080fd5b50610465600160a060020a036004358116906024351660443561282f565b348015610b9257600080fd5b50610b9b6128b9565b60408051600160a060020a039092168252519081900360200190f35b348015610bc357600080fd5b506103b56128c8565b348015610bd857600080fd5b50610367612918565b348015610bed57600080fd5b50610bf9600435612925565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b348015610c3857600080fd5b506103b5600160a060020a0360043516612969565b348015610c5957600080fd5b50610c6e600160a060020a0360043516612ab6565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6103b5600435612b66565b348015610cb057600080fd5b50610367612c8d565b348015610cc557600080fd5b50610b9b612c93565b348015610cda57600080fd5b50610b9b612ca2565b348015610cef57600080fd5b50610367600160a060020a0360043581169060243516612cb1565b348015610d1657600080fd5b50610367600160a060020a0360043516612cdc565b348015610d3757600080fd5b50610367612d5e565b6103b5600435612d64565b348015610d5757600080fd5b50610367612fd4565b348015610d6c57600080fd5b50610367600160a060020a0360043516612fda565b348015610d8d57600080fd5b50610367600160a060020a0360043516612fec565b348015610dae57600080fd5b506103b5600435602435604435606435612ffe565b348015610dcf57600080fd5b506103b5600160a060020a03600435166130cb565b600160a060020a03811660009081526008602090815260408083205460078352818420546006909352908320546004546801000000000000000093610e4f9392610e4392610e379163ffffffff61315316565b9063ffffffff61317c16565b9063ffffffff61318916565b811515610e5857fe5b0490505b919050565b601e54601f5482565b610e7261397f565b602054600090819081908610610e8757600080fd5b6020805487908110610e9557fe5b906000526020600020906006020160c0604051908101604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815250509350836060015185029250610f00338461319b565b836080015185029150610f1282613261565b610f1b336132fb565b600b810154909150600187011115610f405760018601610f3e600b8301826139b6565b505b610f6e8582600b0188815481101515610f5557fe5b906000526020600020015461317c90919063ffffffff16565b600b8201805488908110610f7e57fe5b60009182526020909120015560a0840151600b8201805488908110610f9f57fe5b906000526020600020015411151515610fb757600080fd5b83516004820154610fcf91870263ffffffff61317c16565b600482015560208401516005820154610fef91870263ffffffff61317c16565b60058201556040840151600682015461100f91870263ffffffff61317c16565b6006820155600b8101805433917f16ab5780b3810d9cdc9a1ed37ce0fa7ea98e877c6f8a257fb37b16833bcba471918991908290811061104b57fe5b6000918252602091829020015460408051938452918301528051918290030190a2505050505050565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110fa5780601f106110cf576101008083540402835291602001916110fa565b820191906000526020600020905b8154815290600101906020018083116110dd57829003601f168201915b505050505081565b336000818152600960209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6111716139da565b6111796139da565b6111816139da565b6111896139f5565b6060600080600080611199613a14565b600160a060020a038b1660009081526017602090815260409182902082516101a0810184528154610120820190815260018301546101408301526002830154610160830152600383015461018083015281526004820154818401526005820154818501526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b8201805485518186028101860190965280865291949293610100860193929083018282801561127f57602002820191906000526020600020905b81548152602001906001019080831161126b575b5050505050815250509050604080519081016040528082602001518152602001826080015181525099506040805190810160405280826040015181526020018260a0015181525098506040805190810160405280826060015181526020018260c001518152509750608060405190810160405280826000015160000151815260200182600001516020015181526020018260000151604001518152602001826000015160600151815250965080610100015195508060e001519450601660008c600160a060020a0316600160a060020a03168152602001908152602001600020549350601560008c600160a060020a0316600160a060020a03168152602001908152602001600020549250602260008c600160a060020a0316600160a060020a03168152602001908152602001600020549150509193959799909294969850565b602754600160a060020a031633146113d757600080fd5b600082116113e457600080fd5b6113fa81610e378481888863ffffffff61317c16565b60641461140657600080fd5b60128490556010839055600b829055600e81905560408051858152602081018590528082018490526060810183905290517f19b0c2b62f3fec0fb2a4ad13aa46c5627e326ae04dd8fba61a5b905cd53f7eb79181900360800190a150505050565b6003545b90565b602754600160a060020a0316331461148557600080fd5b601454600160a060020a03161561149b57600080fd5b60148054600160a060020a031916600160a060020a038316179055635af1bb706024556114c6612621565b600a8054600160a060020a0319163317905567016345785d8a0000600c5561150560646509184e72a0006063620186a066038d7ea4c68000600961254b565b6115156014604b600160046113c0565b611520610258611fd0565b61153266b1a2bc2ec5000060096120dc565b6115476005806000662386f26fc10000611af9565b61155c6000806005662386f26fc10000611af9565b6115786103e8600080620186a0662386f26fc10000600961215d565b61159560006103e86000620186a0662386f26fc10000600961215d565b6115b16000806103e862031704662386f26fc10000600961215d565b50565b60008060006115c2336132fb565b6001810154601d54919450925084118015906115dd57508184115b15156115e857600080fd5b60408051606081018252601b548152601c546020820152601d54918101919091526116169083908690613324565b61164361162c838603600263ffffffff61315316565b84546116379061337e565b9063ffffffff61315316565b600184018590556004840154909150611662908263ffffffff61317c16565b6004840155600583015461167c908263ffffffff61317c16565b600584015560408051602081018690528181526009818301527f6465787465726974790000000000000000000000000000000000000000000000606082015290513391600080516020613b40833981519152919081900360800190a250505050565b600160a060020a038316600090815260096020908152604080832033845290915281205482111561170e57600080fd5b600160a060020a038416600090815260096020908152604080832033845290915290208054839003905561174384848461338a565b5060019392505050565b60105481565b600d54600a54600160a060020a03166000908152600560205260409020546117809163ffffffff61317c16565b600a54600160a060020a0316600090815260056020526040812091909155600d55565b601b54601c54601d5483565b60025460ff1681565b60035481565b33600081815260056020526040808220805490839055905190929183156108fc02918491818181858888f193505050501580156117ff573d6000803e3d6000fd5b5050565b6000808080841161181357600080fd5b61181d338561319b565b611825613595565b9250611830836135a5565b80549092508480820281151561184257fe5b041461184d57600080fd5b5033600090815260266020526040902080548311156118735761186f81613614565b8281555b6001820154611888908563ffffffff61317c16565b60018084019190915581018054850190556040805184815260208101869052815133927f249d3c255987361d5d69f32914f89ba3b6617f290ed9e435126a39a7cff6d996928290030190a250505050565b600a8054600c8054600160a060020a03909216926000928392611902919063ffffffff61315316565b81151561190b57fe5b049150611917826136fd565b600c54600290830304905061193781600f5461317c90919063ffffffff16565b600f55600d54600160a060020a03841660009081526005602052604090205461196d9190610e379084860363ffffffff61317c16565b600160a060020a038416600081815260056020908152604080832094909455600c869055600a8054600160a060020a03191633908117909155600d929092558351868152935191937f0f24f9f79a489f214543721c774ce6b52901934b07e7da8c77642f1866f0e841929081900390910190a3505050565b60008060006119f3336132fb565b6002810154601a5491945092508411801590611a0e57508184115b1515611a1957600080fd5b6040805160608101825260185481526019546020820152601a5491810191909152611a479083908690613324565b611a786002830a611a578661337e565b036116376008610e376002886000016003015461315390919063ffffffff16565b600284018590556006840154909150611a97908263ffffffff61317c16565b60068401556040805160208101869052818152600c818301527f636f6e737469747574696f6e0000000000000000000000000000000000000000606082015290513391600080516020613b40833981519152919081900360800190a250505050565b60275460009081908190600160a060020a03163314611b1757600080fd5b6201000092508287108015611b2b57508286105b8015611b3657508285105b1515611b4157600080fd5b602754611b5690600160a060020a0316612cdc565b50602754611b6c90600160a060020a03166132fb565b6007810154909250611b84908863ffffffff61317c16565b60078301556008820154611b9e908763ffffffff61317c16565b60088301556009820154611bb8908663ffffffff61317c16565b6009830155506040805160a08082018352602754600160a060020a03908116835260208084018b81528486018b815260608087018c815260808089018d815260218054600181018083556000929092529a517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57060058d029081018054600160a060020a03191692909b169190911790995595517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57189015593517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57288015590517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57387015591517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5749095019490945586519586529185018c90528486018b9052918401899052830187905292517f2f770e091da1eb4be223d793b34fcd1b5cbff2f4c74ad7f2d7d55c1eceda488d9281900390910190a150505050505050565b6000806000611d44336132fb565b6003810154601d5491945092508411801590611d5f57508184115b1515611d6a57600080fd5b60408051606081018252601b548152601c546020820152601d5491810191909152611d989083908690613324565b611dbc611dae838603600263ffffffff61315316565b60028501546116379061337e565b600384018590556006840154909150611ddb908263ffffffff61317c16565b60068401556040805160208101869052818152600a818301527f726573697374616e636500000000000000000000000000000000000000000000606082015290513391600080516020613b40833981519152919081900360800190a250505050565b602754600160a060020a03163314611e5457600080fd5b8151611e67906000906020850190613a67565b508051611e7b906001906020840190613a67565b507fd150542982eaa18f20ceb10f524c418899e6a331a81ee4a70daa921f976fab3b8282604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ee0578181015183820152602001611ec8565b50505050905090810190601f168015611f0d5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611f40578181015183820152602001611f28565b50505050905090810190601f168015611f6d5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15050565b600c81565b60056020526000908152604090205481565b6000611163611fa58361377d565b600160a060020a0384166000908152601660205260409020549063ffffffff61317c16565b600f5481565b602754600160a060020a03163314611fe757600080fd5b60238190556040805182815290517ff1f62fb53f063eeed657f6ed8c238c2e61ef9547b206dac91c836599fb8f7a339181900360200190a150565b600160a060020a031660009081526006602052604090205490565b6000612048336132fb565b600a810154909150612060908363ffffffff61317c16565b600a8201819055601f54101561207557600080fd5b601e546120929061208d90849063ffffffff61315316565b613261565b600a810154604080519182525133917f088f18ecb97af8211f9549cddf9227ee53f8fda22b969dab5621461c80fc7d50919081900360200190a25050565b601854601954601a5483565b602754600160a060020a031633146120f357600080fd5b601f5481101561210257600080fd5b601e829055601f819055604080518381526020810183905281517f25e5d03ea9004bbd99c954a40cefdb9a23e87966152ac725e8c44386f6e11798929181900390910190a15050565b60166020526000908152604090205481565b602754600090600160a060020a0316331461217757600080fd5b6000821161218457600080fd5b63ffffffff8216821461219657600080fd5b506040805160c08181018352888252602082810189815283850189815260608086018a815260808088018b815260a0808a018c8152885460018101808b5560008b90529b51600682027fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb81019190915598517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bc8a015596517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bd89015593517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866be88015590517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bf87015591517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866c09095019490945587519283529382018d90528187018c905281018a9052908101889052908101869052908101849052915190917f825cf2439eaf73dfac2c09fd8f2d837fad3d41ae9997922036b523f11e6c1226919081900360e00190a150505050505050565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110fa5780601f106110cf576101008083540402835291602001916110fa565b600a54600b54600c54600d54600160a060020a039093169284565b6000806123a8613595565b3360009081526026602052604090208054919350915082116123c957600080fd5b6117ff81613614565b600e5481565b60245481565b60006123eb33848461338a565b50600192915050565b600080600080612402613ae5565b50505050600160a060020a039190911660009081526017602090815260409182902082516080810184528154808252600183015493820184905260028301549482018590526003909201546060909101819052909491935090565b6025602052600090815260409020805460019091015482565b60235481565b336000818152600660205260408120549161249690610de4565b3360009081526006602090815260408083208390556007825280832083905560089091528120556003549091506124d3908363ffffffff61318916565b600355336000908152600560205260409020546124f6908263ffffffff61317c16565b33600081815260056020908152604091829020939093558051858152928301849052805191927fef7fb21fed1701a6c82b78d78bad1ddab67e41025c2d5078a1be2a3a238b4e62929081900390910190a25050565b602754600160a060020a0316331461256257600080fd5b601a54841080159061257957508363ffffffff1684145b151561258457600080fd5b601d54811080159061259b57508063ffffffff1681145b15156125a657600080fd5b60188690556019859055601a849055601b839055601c829055601d8190556040805187815260208101879052808201869052606081018590526080810184905260a0810183905290517fdd7612d23bf1ba260c41948384c8a672815d6e6f03705f4ccb8db39d01bb49d09181900360c00190a1505050505050565b336000908152601760205260409020600a8101541561263f57600080fd5b604080516080810182526001808252602080830182905282840182905260609092018190528084558381018190556002840181905560038401819055600a808501919091556004840181905560058401819055606e60068501556007840181905560088401819055600984015533600081815260158352839020429055825190815291517f0764c80c4165f118547b301a0b4b91eac21bd2f2d9b61d0ac723ff0aab27bb799281900390910190a150565b6026602052600090815260409020805460019091015482565b602754600160a060020a0316331461272057600080fd5b600160a060020a038116151561273557600080fd5b60278054600160a060020a038316600160a060020a0319909116811790915560408051918252517f22a3400c609e52ea781540daed872a0ff7b79a428f634be082c24c2faf0684639181900360200190a150565b602180548290811061279757fe5b600091825260209091206005909102018054600182015460028301546003840154600490940154600160a060020a0390931694509092909185565b60135481565b602754600090600160a060020a031633146127f257600080fd5b85600160a060020a0316858590858560405180838380828437820191505092505050600060405180830381858888f19a9950505050505050505050565b601454600090600160a060020a0316331461284957600080fd5b8161285385612cdc565b101561285e57600080fd5b600160a060020a038085166000908152601660205260408082208054869003905591851681522054612896908363ffffffff61317c16565b600160a060020a0384166000908152601660205260409020555060019392505050565b602854600160a060020a031681565b600f54602854600160a060020a03166000908152600560205260409020546128f59163ffffffff61317c16565b602854600160a060020a0316600090815260056020526040812091909155600f55565b6801000000000000000081565b602080548290811061293357fe5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501549395509193909286565b3360009081526022602052604081205481908190421161298857600080fd5b33600090815260176020526040808220600160a060020a03871683529120600981015460068201549295509093506129c6919063ffffffff61315316565b600884015460058501546129df9163ffffffff61315316565b1115612ab0576129ee84612cdc565b9050600082600a015411612a025780612a13565b81600a015481811515612a1157fe5b045b600160a060020a03851660009081526016602052604080822080548490039055338252902054909150612a4c908263ffffffff61317c16565b3360008181526016602090815260408083209490945560235460228252918490204290920190915582518481529251600160a060020a038816937f07fc6d85ef6db5c911f925dd0be5e0b6139a4d732479327729330fcf4ab15e2d92908290030190a35b50505050565b6000806000806000612ac6613b0e565b612ace613b0e565b5050600160a060020a03861660009081526026602090815260408083208151808301835281548082526001928301548286018190528187526025865284872085518087019096528054808752940154958501869052909a50919850929650945090918511612b3d576000612b59565b84612b4e878663ffffffff61315316565b811515612b5757fe5b045b9250505091939590929450565b6000806000612b74336132fb565b8054601a5491945092508411801590612b8c57508184115b1515612b9757600080fd5b6040805160608101825260185481526019546020820152601a5491810191909152612bc59083908690613324565b612bf66002830a612bd58661337e565b036116376008610e376002886000016001015461315390919063ffffffff16565b8484556004840154909150612c11908263ffffffff61317c16565b60048401556005830154612c2b908263ffffffff61317c16565b600584015560408051602081018690528181526008818301527f737472656e677468000000000000000000000000000000000000000000000000606082015290513391600080516020613b40833981519152919081900360800190a250505050565b60125481565b602754600160a060020a031681565b601454600160a060020a031681565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b6000806000612cea8461377d565b601354909250612d00908363ffffffff61317c16565b601355600160a060020a038416600090815260166020526040902054612d2c908363ffffffff61317c16565b600160a060020a0394909416600090815260166020908152604080832087905560159091529020429055509192915050565b60045481565b600080600080600080602187815481101515612d7c57fe5b6000918252602090912060059091020180546004820154919750600160a060020a03169550600a90612db590600c63ffffffff61315316565b811515612dbe57fe5b049350612dca846136fd565b612dd385612cdc565b50612ddd856132fb565b9250612dfa8660010154846007015461318990919063ffffffff16565b600784015560028601546008840154612e189163ffffffff61318916565b600884015560038601546009840154612e369163ffffffff61318916565b6009840155612e4433612cdc565b50612e4e336132fb565b9150612e6b8660010154836007015461317c90919063ffffffff16565b600783015560028601546008830154612e899163ffffffff61317c16565b600883015560038601546009830154612ea79163ffffffff61317c16565b60098301556004860154600290612ec590869063ffffffff61318916565b811515612ece57fe5b049050612ee681600f5461317c90919063ffffffff16565b600f55600160a060020a038516600090815260056020526040902054612f149082860363ffffffff61317c16565b600160a060020a0386166000908152600560205260409020556021805485919089908110612f3e57fe5b90600052602060002090600502016004018190555033602188815481101515612f6357fe5b6000918252602091829020600591909102018054600160a060020a031916600160a060020a039384161790556040805187815290518a933393908a16927fc6d7a5e59f38ae48e0f1577ce4627ba9b270bfd4c2c0c7be609c429421bc3d68929081900390910190a450505050505050565b60115481565b60156020526000908152604090205481565b60226020526000908152604090205481565b602754600090600160a060020a0316331461301857600080fd5b602054851061302657600080fd5b602080548690811061303457fe5b906000526020600020906006020190508060050154821015801561305d57508163ffffffff1682145b151561306857600080fd5b60038101849055600481018390556005810182905560408051868152602081018690528082018590526060810184905290517f2c2e9072543dfe5f0b03fabc22ced8ddd4e6f976a64f2f4726c4ea72cf8d31c09181900360800190a15050505050565b602754600160a060020a031633146130e257600080fd5b600160a060020a03811615156130f757600080fd5b6130ff6128c8565b60288054600160a060020a038316600160a060020a0319909116811790915560408051918252517f8aaf3a0823afdd08e2480f3fac4af353fad0c1e1aeffae73284c2295e441fc939181900360200190a150565b600082151561316457506000611163565b5081810281838281151561317457fe5b041461116357fe5b8181018281101561116357fe5b60008282111561319557fe5b50900390565b6000806131a78461377d565b9150818311156132085750600160a060020a038316600090815260166020526040902054818303908111156131db57600080fd5b600160a060020a038416600090815260166020526040902080548290039055601380548290039055613242565b5060135482820390613220908263ffffffff61317c16565b601355600160a060020a03841660009081526016602052604090208054820190555b505050600160a060020a03166000908152601560205260409020429055565b60008080836064808202041461327657600080fd5b61327f846136fd565b601254601054606491860282900494508502600b54919004925060649085020490506132bc81838587030303600f5461317c90919063ffffffff16565b600f556132c93384613802565b6011546132dc908363ffffffff61317c16565b601155600d546132f2908263ffffffff61317c16565b600d5550505050565b600160a060020a0381166000908152601760205260408120600a810154909110610e5c57600080fd5b600080613342613334868661392d565b84519063ffffffff61315316565b915061334e338361319b565b61336c61335b868661394d565b60208501519063ffffffff61315316565b905061337781613261565b5050505050565b60006111638283613153565b60008080600160a060020a03851615156133a357600080fd5b600160a060020a0386166000908152600660205260409020548411156133c857600080fd5b6004546133db908563ffffffff61315316565b600160a060020a038716600090815260076020526040902054909350613407908463ffffffff61317c16565b600160a060020a038716600090815260086020526040902054909250821061344757600160a060020a038616600090815260086020526040902054613449565b815b905061345b828263ffffffff61318916565b600160a060020a038716600090815260076020908152604080832093909355600890522054613490908263ffffffff61318916565b600160a060020a0380881660009081526008602052604080822093909355908716815220546134c5908463ffffffff61317c16565b600160a060020a03808716600090815260086020908152604080832094909455918916815260069091522054613501908563ffffffff61318916565b600160a060020a038088166000908152600660205260408082209390935590871681522054613536908563ffffffff61317c16565b600160a060020a0380871660008181526006602090815260409182902094909455805188815290519193928a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050505050565b6024546201518042919091030490565b60008181526025602052604081208054909190151561360e575060118054600a90048083558154819003909155604080518481526020810183905281517f3d823e1b0137c31466d0d26831c5b359c4eab1d1237ead4a8ff564264d9a2c53929181900390910190a15b50919050565b61361c613b0e565b600080836001015411156136f857825460009081526025602090815260409182902082518084019093528054808452600191820154928401839052908601549294509091613670919063ffffffff61315316565b81151561367957fe5b6000600186018190553381526005602052604090205491900491506136a4908263ffffffff61317c16565b336000818152600560209081526040918290209390935585548151908152928301849052805191927f1999f960f6c1318254fc32602ac8ba7ebe18123b1bfe4d21cb9b5ac24761aae4929081900390910190a25b505050565b6000348211156137435750336000908152600560205260409020543482039081111561372857600080fd5b336000908152600560205260409020805482900390556117ff565b50336000908152600560205260409020543482900390613769908263ffffffff61317c16565b336000908152600560205260409020555050565b600160a060020a03811660009081526015602052604081205481811180156137a457504281105b156137f957600160a060020a038316600090815260176020526040902060078101546004909101546064916137e8914285900391611637919063ffffffff61315316565b8115156137f157fe5b04915061360e565b6000915061360e565b60008111156117ff5760035461381e908263ffffffff61317c16565b60035560045461385d90613838908363ffffffff61315316565b600160a060020a0384166000908152600860205260409020549063ffffffff61317c16565b600160a060020a038316600090815260086020908152604080832093909355600690522054613892908263ffffffff61317c16565b600160a060020a0383166000908152600660205260409020556003546138e5906138cb836801000000000000000063ffffffff61315316565b8115156138d457fe5b60045491900463ffffffff61317c16565b600455604080518281529051600160a060020a038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60046002600019808501850282900a90840184029190910a030492915050565b60006006600184600202036001850385020260018460020203600185038502020381151561397757fe5b049392505050565b60c0604051908101604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8154818355818111156136f8576000838152602090206136f8918101908301613b25565b60408051808201825290600290829080388339509192915050565b6080604051908101604052806004906020820280388339509192915050565b61018060405190810160405280613a29613ae5565b815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613aa857805160ff1916838001178555613ad5565b82800160010185558215613ad5579182015b82811115613ad5578251825591602001919060010190613aba565b50613ae1929150613b25565b5090565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b604080518082019091526000808252602082015290565b61146b91905b80821115613ae15760008155600101613b2b56009a18b08f786ded2f49322290bcefb5a9ad611fae6a3c2cdf63c46a8a4573bf17a165627a7a72305820b6f087fe4031eb79d8bd609c9571aea4625e9f63c3da4813d397f2c390ef85cf0029

Swarm Source

bzzr://b6f087fe4031eb79d8bd609c9571aea4625e9f63c3da4813d397f2c390ef85cf
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.