ETH Price: $2,814.95 (-4.50%)
Gas: 0.09 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Safe Transfer Fr...239045092025-11-29 13:05:5918 days ago1764421559IN
Dragonereum: Dragon
0 ETH0.000015060.11814403
Set Approval For...238720472025-11-24 23:45:1122 days ago1764027911IN
Dragonereum: Dragon
0 ETH0.000002230.08886547
Set Approval For...237782272025-11-11 19:58:5936 days ago1762891139IN
Dragonereum: Dragon
0 ETH0.000100562.14016954
Set Approval For...235673792025-10-13 7:42:4765 days ago1760341367IN
Dragonereum: Dragon
0 ETH0.000043981.7480375
Set Approval For...235673772025-10-13 7:42:2365 days ago1760341343IN
Dragonereum: Dragon
0 ETH0.000043511.73505874
Set Approval For...235671532025-10-13 6:57:2365 days ago1760338643IN
Dragonereum: Dragon
0 ETH0.000041051.63181869
Set Approval For...233375012025-09-11 4:41:2397 days ago1757565683IN
Dragonereum: Dragon
0 ETH0.00000410.16314391
Set Approval For...232164262025-08-25 6:48:11114 days ago1756104491IN
Dragonereum: Dragon
0 ETH0.000031681.25926444
Set Approval For...231814332025-08-20 9:35:59119 days ago1755682559IN
Dragonereum: Dragon
0 ETH0.00005862.16336556
Set Approval For...231814282025-08-20 9:34:59119 days ago1755682499IN
Dragonereum: Dragon
0 ETH0.00005942.19293277
Set Approval For...231814272025-08-20 9:34:47119 days ago1755682487IN
Dragonereum: Dragon
0 ETH0.000008240.17551249
Safe Transfer Fr...231672362025-08-18 10:05:35121 days ago1755511535IN
Dragonereum: Dragon
0 ETH0.000307142.43995915
Set Approval For...230197052025-07-28 19:23:47142 days ago1753730627IN
Dragonereum: Dragon
0 ETH0.000122652.61019412
Set Approval For...226724062025-06-10 6:35:11190 days ago1749537311IN
Dragonereum: Dragon
0 ETH0.000082061.74639267
Set Approval For...222047482025-04-05 19:17:47256 days ago1743880667IN
Dragonereum: Dragon
0 ETH0.00004310.91740912
Safe Transfer Fr...222044482025-04-05 18:17:11256 days ago1743877031IN
Dragonereum: Dragon
0 ETH0.000109570.99544407
Safe Transfer Fr...222041392025-04-05 17:14:59256 days ago1743873299IN
Dragonereum: Dragon
0 ETH0.000086070.9
Set Approval For...220108692025-03-09 17:42:11283 days ago1741542131IN
Dragonereum: Dragon
0 ETH0.000066442.64966723
Set Approval For...220107642025-03-09 17:21:11283 days ago1741540871IN
Dragonereum: Dragon
0 ETH0.000104132.21609719
Set Approval For...217967392025-02-07 19:31:59313 days ago1738956719IN
Dragonereum: Dragon
0 ETH0.000068791.46416164
Set Approval For...217956412025-02-07 15:51:11313 days ago1738943471IN
Dragonereum: Dragon
0 ETH0.000116812.48155537
Set Approval For...215119032024-12-30 1:06:47352 days ago1735520807IN
Dragonereum: Dragon
0 ETH0.00017423.70631393
Set Approval For...215117992024-12-30 0:45:59352 days ago1735519559IN
Dragonereum: Dragon
0 ETH0.000192954.09914001
Set Approval For...200198032024-06-04 16:58:59561 days ago1717520339IN
Dragonereum: Dragon
0 ETH0.0007892216.79603524
Set Approval For...198526142024-05-12 8:00:59584 days ago1715500859IN
Dragonereum: Dragon
0 ETH0.000090713.61752891
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DragonStorage

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-11-28
*/

pragma solidity 0.4.25;

library SafeMath256 {

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

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    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) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }

    function pow(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        if (b == 0) return 1;

        uint256 c = a ** b;
        assert(c / (a ** (b - 1)) == a);
        return c;
    }
}

contract Ownable {
    address public owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    function _validateAddress(address _addr) internal pure {
        require(_addr != address(0), "invalid address");
    }

    constructor() public {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "not a contract owner");
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _validateAddress(newOwner);
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }

}

contract Controllable is Ownable {
    mapping(address => bool) controllers;

    modifier onlyController {
        require(_isController(msg.sender), "no controller rights");
        _;
    }

    function _isController(address _controller) internal view returns (bool) {
        return controllers[_controller];
    }

    function _setControllers(address[] _controllers) internal {
        for (uint256 i = 0; i < _controllers.length; i++) {
            _validateAddress(_controllers[i]);
            controllers[_controllers[i]] = true;
        }
    }
}

contract Upgradable is Controllable {
    address[] internalDependencies;
    address[] externalDependencies;

    function getInternalDependencies() public view returns(address[]) {
        return internalDependencies;
    }

    function getExternalDependencies() public view returns(address[]) {
        return externalDependencies;
    }

    function setInternalDependencies(address[] _newDependencies) public onlyOwner {
        for (uint256 i = 0; i < _newDependencies.length; i++) {
            _validateAddress(_newDependencies[i]);
        }
        internalDependencies = _newDependencies;
    }

    function setExternalDependencies(address[] _newDependencies) public onlyOwner {
        externalDependencies = _newDependencies;
        _setControllers(_newDependencies);
    }
}

contract ERC721Basic {
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

    function balanceOf(address _owner) public view returns (uint256 _balance);
    function ownerOf(uint256 _tokenId) public view returns (address _owner);
    function exists(uint256 _tokenId) public view returns (bool _exists);

    function approve(address _to, uint256 _tokenId) public;
    function getApproved(uint256 _tokenId) public view returns (address _operator);

    function setApprovalForAll(address _operator, bool _approved) public;
    function isApprovedForAll(address _owner, address _operator) public view returns (bool);

    function transferFrom(address _from, address _to, uint256 _tokenId) public;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) public;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) public;

    function supportsInterface(bytes4 _interfaceID) external pure returns (bool);
}

contract ERC721Enumerable is ERC721Basic {
    function totalSupply() public view returns (uint256);
    function tokenOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256 _tokenId);
    function tokenByIndex(uint256 _index) public view returns (uint256);
}

contract ERC721Metadata is ERC721Basic {
    function name() public view returns (string _name);
    function symbol() public view returns (string _symbol);
    function tokenURI(uint256 _tokenId) public view returns (string);
}


contract ERC721 is ERC721Basic, ERC721Enumerable, ERC721Metadata {}

contract ERC721Receiver {
    function onERC721Received(
        address _operator,
        address _from,
        uint256 _tokenId,
        bytes _data
    )
        public
        returns(bytes4);
}

contract ERC721BasicToken is ERC721Basic, Upgradable {

    using SafeMath256 for uint256;

    // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`
    bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;

    // Mapping from token ID to owner
    mapping (uint256 => address) internal tokenOwner;

    // Mapping from token ID to approved address
    mapping (uint256 => address) internal tokenApprovals;

    // Mapping from owner to number of owned token
    mapping (address => uint256) internal ownedTokensCount;

    // Mapping from owner to operator approvals
    mapping (address => mapping (address => bool)) internal operatorApprovals;

    function _checkRights(bool _has) internal pure {
        require(_has, "no rights to manage");
    }

    function _validateAddress(address _addr) internal pure {
        require(_addr != address(0), "invalid address");
    }

    function _checkOwner(uint256 _tokenId, address _owner) internal view {
        require(ownerOf(_tokenId) == _owner, "not an owner");
    }

    function _checkThatUserHasTokens(bool _has) internal pure {
        require(_has, "user has no tokens");
    }

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

    function ownerOf(uint256 _tokenId) public view returns (address) {
        address owner = tokenOwner[_tokenId];
        _validateAddress(owner);
        return owner;
    }

    function exists(uint256 _tokenId) public view returns (bool) {
        address owner = tokenOwner[_tokenId];
        return owner != address(0);
    }

    function _approve(address _from, address _to, uint256 _tokenId) internal {
        address owner = ownerOf(_tokenId);
        require(_to != owner, "can't be approved to owner");
        _checkRights(_from == owner || isApprovedForAll(owner, _from));

        if (getApproved(_tokenId) != address(0) || _to != address(0)) {
            tokenApprovals[_tokenId] = _to;
            emit Approval(owner, _to, _tokenId);
        }
    }

    function approve(address _to, uint256 _tokenId) public {
        _approve(msg.sender, _to, _tokenId);
    }

    function remoteApprove(address _to, uint256 _tokenId) external onlyController {
        _approve(tx.origin, _to, _tokenId);
    }

    function getApproved(uint256 _tokenId) public view returns (address) {
        require(exists(_tokenId), "token doesn't exist");
        return tokenApprovals[_tokenId];
    }

    function setApprovalForAll(address _to, bool _approved) public {
        require(_to != msg.sender, "wrong sender");
        operatorApprovals[msg.sender][_to] = _approved;
        emit ApprovalForAll(msg.sender, _to, _approved);
    }

    function isApprovedForAll(address _owner, address _operator) public view returns (bool) {
        return operatorApprovals[_owner][_operator];
    }

    function transferFrom(address _from, address _to, uint256 _tokenId) public {
        _checkRights(isApprovedOrOwner(msg.sender, _tokenId));
        _validateAddress(_from);
        _validateAddress(_to);

        clearApproval(_from, _tokenId);
        removeTokenFrom(_from, _tokenId);
        addTokenTo(_to, _tokenId);

        emit Transfer(_from, _to, _tokenId);
    }

    function safeTransferFrom(
        address _from,
        address _to,
        uint256 _tokenId
    ) public {
        safeTransferFrom(_from, _to, _tokenId, "");
    }

    function safeTransferFrom(
        address _from,
        address _to,
        uint256 _tokenId,
        bytes _data
    ) public {
        transferFrom(_from, _to, _tokenId);
        require(checkAndCallSafeTransfer(_from, _to, _tokenId, _data), "can't make safe transfer");
    }

    function isApprovedOrOwner(address _spender, uint256 _tokenId) public view returns (bool) {
        address owner = ownerOf(_tokenId);
        return _spender == owner || getApproved(_tokenId) == _spender || isApprovedForAll(owner, _spender);
    }

    function _mint(address _to, uint256 _tokenId) internal {
        _validateAddress(_to);
        addTokenTo(_to, _tokenId);
        emit Transfer(address(0), _to, _tokenId);
    }

    function _burn(address _owner, uint256 _tokenId) internal {
        clearApproval(_owner, _tokenId);
        removeTokenFrom(_owner, _tokenId);
        emit Transfer(_owner, address(0), _tokenId);
    }

    function clearApproval(address _owner, uint256 _tokenId) internal {
        _checkOwner(_tokenId, _owner);
        if (tokenApprovals[_tokenId] != address(0)) {
            tokenApprovals[_tokenId] = address(0);
            emit Approval(_owner, address(0), _tokenId);
        }
    }

    function addTokenTo(address _to, uint256 _tokenId) internal {
        require(tokenOwner[_tokenId] == address(0), "token already has an owner");
        tokenOwner[_tokenId] = _to;
        ownedTokensCount[_to] = ownedTokensCount[_to].add(1);
    }

    function removeTokenFrom(address _from, uint256 _tokenId) internal {
        _checkOwner(_tokenId, _from);
        _checkThatUserHasTokens(ownedTokensCount[_from] > 0);
        ownedTokensCount[_from] = ownedTokensCount[_from].sub(1);
        tokenOwner[_tokenId] = address(0);
    }

    function _isContract(address addr) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(addr) }
        return size > 0;
    }

    function checkAndCallSafeTransfer(
        address _from,
        address _to,
        uint256 _tokenId,
        bytes _data
    ) internal returns (bool) {
        if (!_isContract(_to)) {
            return true;
        }
        bytes4 retval = ERC721Receiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data);
        return (retval == _ERC721_RECEIVED);
    }
}

contract ERC721Token is ERC721, ERC721BasicToken {

    bytes4 internal constant INTERFACE_SIGNATURE_ERC165 = 0x01ffc9a7;
    bytes4 internal constant INTERFACE_SIGNATURE_ERC721 = 0x80ac58cd;
    bytes4 internal constant INTERFACE_SIGNATURE_ERC721TokenReceiver = 0xf0b9e5ba;
    bytes4 internal constant INTERFACE_SIGNATURE_ERC721Metadata = 0x5b5e139f;
    bytes4 internal constant INTERFACE_SIGNATURE_ERC721Enumerable = 0x780e9d63;

    string internal name_;
    string internal symbol_;

    // Mapping from owner to list of owned token IDs
    mapping (address => uint256[]) internal ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) internal ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] internal allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) internal allTokensIndex;

    // Optional mapping for token URIs
    mapping(uint256 => string) internal tokenURIs;

    // The contract owner can change the base URL, in case it becomes necessary. It is needed for Metadata.
    string public url;


    constructor(string _name, string _symbol) public {
        name_ = _name;
        symbol_ = _symbol;
    }

    function name() public view returns (string) {
        return name_;
    }

    function symbol() public view returns (string) {
        return symbol_;
    }

    function _validateIndex(bool _isValid) internal pure {
        require(_isValid, "wrong index");
    }

    function tokenOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256) {
        _validateIndex(_index < balanceOf(_owner));
        return ownedTokens[_owner][_index];
    }

    function tokensOfOwner(address _owner) external view returns (uint256[]) {
        return ownedTokens[_owner];
    }

    function getAllTokens() external view returns (uint256[]) {
        return allTokens;
    }

    function totalSupply() public view returns (uint256) {
        return allTokens.length;
    }

    function tokenByIndex(uint256 _index) public view returns (uint256) {
        _validateIndex(_index < totalSupply());
        return allTokens[_index];
    }

    function addTokenTo(address _to, uint256 _tokenId) internal {
        super.addTokenTo(_to, _tokenId);
        uint256 length = ownedTokens[_to].length;
        ownedTokens[_to].push(_tokenId);
        ownedTokensIndex[_tokenId] = length;
    }

    function removeTokenFrom(address _from, uint256 _tokenId) internal {
        _checkThatUserHasTokens(ownedTokens[_from].length > 0);

        super.removeTokenFrom(_from, _tokenId);

        uint256 tokenIndex = ownedTokensIndex[_tokenId];
        uint256 lastTokenIndex = ownedTokens[_from].length.sub(1);
        uint256 lastToken = ownedTokens[_from][lastTokenIndex];

        ownedTokens[_from][tokenIndex] = lastToken;
        ownedTokens[_from][lastTokenIndex] = 0;

        ownedTokens[_from].length--;
        ownedTokensIndex[_tokenId] = 0;
        ownedTokensIndex[lastToken] = tokenIndex;
    }

    function _mint(address _to, uint256 _tokenId) internal {
        super._mint(_to, _tokenId);

        allTokensIndex[_tokenId] = allTokens.length;
        allTokens.push(_tokenId);
    }

    function _burn(address _owner, uint256 _tokenId) internal {
        require(allTokens.length > 0, "no tokens");

        super._burn(_owner, _tokenId);

        uint256 tokenIndex = allTokensIndex[_tokenId];
        uint256 lastTokenIndex = allTokens.length.sub(1);
        uint256 lastToken = allTokens[lastTokenIndex];

        allTokens[tokenIndex] = lastToken;
        allTokens[lastTokenIndex] = 0;

        allTokens.length--;
        allTokensIndex[_tokenId] = 0;
        allTokensIndex[lastToken] = tokenIndex;
    }

    function supportsInterface(bytes4 _interfaceID) external pure returns (bool) {
        return (
            _interfaceID == INTERFACE_SIGNATURE_ERC165 ||
            _interfaceID == INTERFACE_SIGNATURE_ERC721 ||
            _interfaceID == INTERFACE_SIGNATURE_ERC721TokenReceiver ||
            _interfaceID == INTERFACE_SIGNATURE_ERC721Metadata ||
            _interfaceID == INTERFACE_SIGNATURE_ERC721Enumerable
        );
    }

    function tokenURI(uint256 _tokenId) public view returns (string) {
        require(exists(_tokenId), "token doesn't exist");
        return string(abi.encodePacked(url, _uint2str(_tokenId)));
    }

    function setUrl(string _url) external onlyOwner {
        url = _url;
    }

    function _uint2str(uint _i) internal pure returns (string){
        if (i == 0) return "0";
        uint i = _i;
        uint j = _i;
        uint length;
        while (j != 0){
            length++;
            j /= 10;
        }
        bytes memory bstr = new bytes(length);
        uint k = length - 1;
        while (i != 0){
            bstr[k--] = byte(48 + i % 10);
            i /= 10;
        }
        return string(bstr);
    }
}

contract DragonModel {

    // ** multiplying is necessary for more accurate calculations

    // health and mana are multiplied by 100
    struct HealthAndMana {
        uint256 timestamp; // timestamp of last update
        uint32 remainingHealth; // remaining at last update
        uint32 remainingMana; // remaining at last update
        uint32 maxHealth;
        uint32 maxMana;
    }

    struct Level {
        uint8 level; // current level of dragon
        uint8 experience; // exp at current level
        uint16 dnaPoints; // DNA points
    }

    struct Tactics {
        uint8 melee; // ranged/melee tactics in percentages
        uint8 attack; // defense/attack tactics in percentages
    }

    struct Battles {
        uint16 wins;
        uint16 defeats;
    }

    // multilpied by 100
    struct Skills {
        uint32 attack;
        uint32 defense;
        uint32 stamina;
        uint32 speed;
        uint32 intelligence;
    }

    // types:
    // 0 - water
    // 1 - fire
    // 2 - air
    // 3 - earth
    // 4 - magic

    struct Dragon {
        uint16 generation;
        uint256[4] genome; // composed genome
        uint256[2] parents;
        uint8[11] types; // array of weights of dragon's types
        uint256 birth; // timestamp
    }

}

contract DragonStorage is DragonModel, ERC721Token {
    Dragon[] public dragons;
    // existing names
    mapping (bytes32 => bool) public existingNames;
    mapping (uint256 => bytes32) public names;

    mapping (uint256 => HealthAndMana) public healthAndMana;
    mapping (uint256 => Tactics) public tactics;
    mapping (uint256 => Battles) public battles;
    mapping (uint256 => Skills) public skills;
    mapping (uint256 => Level) public levels;
    mapping (uint256 => uint32) public coolness; // Dragon Skillfulness Index in the WP

    // id -> type of skill (dragon type)
    mapping (uint256 => uint8) public specialAttacks;
    mapping (uint256 => uint8) public specialDefenses;


    // classes:
    // 0 - no skill
    // 1 - attack boost
    // 2 - defense boost
    // 3 - stamina boost
    // 4 - speed boost
    // 5 - intelligence boost
    // 6 - healing
    // 7 - mana recharge

    // id -> class
    mapping (uint256 => uint8) public specialPeacefulSkills;


    // classes:
    // 1 - attack
    // 2 - defense
    // 3 - stamina
    // 4 - speed
    // 5 - intelligence
    //
    // id -> class -> effect
    mapping (uint256 => mapping (uint8 => uint32)) public buffs;



    constructor(string _name, string _symbol) public ERC721Token(_name, _symbol) {
        dragons.length = 1; // to avoid some issues with 0
    }

    // GETTERS

    function length() external view returns (uint256) {
        return dragons.length;
    }

    function getGenome(uint256 _id) external view returns (uint256[4]) {
        return dragons[_id].genome;
    }

    function getParents(uint256 _id) external view returns (uint256[2]) {
        return dragons[_id].parents;
    }

    function getDragonTypes(uint256 _id) external view returns (uint8[11]) {
        return dragons[_id].types;
    }

    // SETTERS

    function push(
        address _sender,
        uint16 _generation,
        uint256[4] _genome,
        uint256[2] _parents,
        uint8[11] _types
    ) public onlyController returns (uint256 id) {
        id = dragons.push(Dragon({
            generation: _generation,
            genome: _genome,
            parents: _parents,
            types: _types,
            birth: now
        })).sub(1);
        _mint(_sender, id);
    }

    function setName(
        uint256 _id,
        bytes32 _name,
        bytes32 _lowercase
    ) external onlyController {
        names[_id] = _name;
        existingNames[_lowercase] = true;
    }

    function setTactics(uint256 _id, uint8 _melee, uint8 _attack) external onlyController {
        tactics[_id].melee = _melee;
        tactics[_id].attack = _attack;
    }

    function setWins(uint256 _id, uint16 _value) external onlyController {
        battles[_id].wins = _value;
    }

    function setDefeats(uint256 _id, uint16 _value) external onlyController {
        battles[_id].defeats = _value;
    }

    function setMaxHealthAndMana(
        uint256 _id,
        uint32 _maxHealth,
        uint32 _maxMana
    ) external onlyController {
        healthAndMana[_id].maxHealth = _maxHealth;
        healthAndMana[_id].maxMana = _maxMana;
    }

    function setRemainingHealthAndMana(
        uint256 _id,
        uint32 _remainingHealth,
        uint32 _remainingMana
    ) external onlyController {
        healthAndMana[_id].timestamp = now;
        healthAndMana[_id].remainingHealth = _remainingHealth;
        healthAndMana[_id].remainingMana = _remainingMana;
    }

    function resetHealthAndManaTimestamp(uint256 _id) external onlyController {
        healthAndMana[_id].timestamp = 0;
    }

    function setSkills(
        uint256 _id,
        uint32 _attack,
        uint32 _defense,
        uint32 _stamina,
        uint32 _speed,
        uint32 _intelligence
    ) external onlyController {
        skills[_id].attack = _attack;
        skills[_id].defense = _defense;
        skills[_id].stamina = _stamina;
        skills[_id].speed = _speed;
        skills[_id].intelligence = _intelligence;
    }

    function setLevel(uint256 _id, uint8 _level, uint8 _experience, uint16 _dnaPoints) external onlyController {
        levels[_id].level = _level;
        levels[_id].experience = _experience;
        levels[_id].dnaPoints = _dnaPoints;
    }

    function setCoolness(uint256 _id, uint32 _coolness) external onlyController {
        coolness[_id] = _coolness;
    }

    function setGenome(uint256 _id, uint256[4] _genome) external onlyController {
        dragons[_id].genome = _genome;
    }

    function setSpecialAttack(
        uint256 _id,
        uint8 _dragonType
    ) external onlyController {
        specialAttacks[_id] = _dragonType;
    }

    function setSpecialDefense(
        uint256 _id,
        uint8 _dragonType
    ) external onlyController {
        specialDefenses[_id] = _dragonType;
    }

    function setSpecialPeacefulSkill(
        uint256 _id,
        uint8 _class
    ) external onlyController {
        specialPeacefulSkills[_id] = _class;
    }

    function setBuff(uint256 _id, uint8 _class, uint32 _effect) external onlyController {
        buffs[_id][_class] = _effect;
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[{"name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_dragonType","type":"uint8"}],"name":"setSpecialAttack","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"resetHealthAndManaTimestamp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"length","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getParents","outputs":[{"name":"","type":"uint256[2]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_url","type":"string"}],"name":"setUrl","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"existingNames","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAllTokens","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_genome","type":"uint256[4]"}],"name":"setGenome","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_spender","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"isApprovedOrOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"names","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_coolness","type":"uint32"}],"name":"setCoolness","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"exists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"skills","outputs":[{"name":"attack","type":"uint32"},{"name":"defense","type":"uint32"},{"name":"stamina","type":"uint32"},{"name":"speed","type":"uint32"},{"name":"intelligence","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_class","type":"uint8"}],"name":"setSpecialPeacefulSkill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"url","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_dragonType","type":"uint8"}],"name":"setSpecialDefense","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_melee","type":"uint8"},{"name":"_attack","type":"uint8"}],"name":"setTactics","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"specialAttacks","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"battles","outputs":[{"name":"wins","type":"uint16"},{"name":"defeats","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"specialPeacefulSkills","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getGenome","outputs":[{"name":"","type":"uint256[4]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newDependencies","type":"address[]"}],"name":"setExternalDependencies","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint8"}],"name":"buffs","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"specialDefenses","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sender","type":"address"},{"name":"_generation","type":"uint16"},{"name":"_genome","type":"uint256[4]"},{"name":"_parents","type":"uint256[2]"},{"name":"_types","type":"uint8[11]"}],"name":"push","outputs":[{"name":"id","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newDependencies","type":"address[]"}],"name":"setInternalDependencies","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"coolness","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_value","type":"uint16"}],"name":"setDefeats","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":"_id","type":"uint256"},{"name":"_attack","type":"uint32"},{"name":"_defense","type":"uint32"},{"name":"_stamina","type":"uint32"},{"name":"_speed","type":"uint32"},{"name":"_intelligence","type":"uint32"}],"name":"setSkills","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_remainingHealth","type":"uint32"},{"name":"_remainingMana","type":"uint32"}],"name":"setRemainingHealthAndMana","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tactics","outputs":[{"name":"melee","type":"uint8"},{"name":"attack","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"remoteApprove","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_name","type":"bytes32"},{"name":"_lowercase","type":"bytes32"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"levels","outputs":[{"name":"level","type":"uint8"},{"name":"experience","type":"uint8"},{"name":"dnaPoints","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_value","type":"uint16"}],"name":"setWins","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getInternalDependencies","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_maxHealth","type":"uint32"},{"name":"_maxMana","type":"uint32"}],"name":"setMaxHealthAndMana","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"dragons","outputs":[{"name":"generation","type":"uint16"},{"name":"birth","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getDragonTypes","outputs":[{"name":"","type":"uint8[11]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"healthAndMana","outputs":[{"name":"timestamp","type":"uint256"},{"name":"remainingHealth","type":"uint32"},{"name":"remainingMana","type":"uint32"},{"name":"maxHealth","type":"uint32"},{"name":"maxMana","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getExternalDependencies","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_level","type":"uint8"},{"name":"_experience","type":"uint8"},{"name":"_dnaPoints","type":"uint16"}],"name":"setLevel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_class","type":"uint8"},{"name":"_effect","type":"uint32"}],"name":"setBuff","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_operator","type":"address"},{"indexed":false,"name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]

60806040523480156200001157600080fd5b50604051620057253803806200572583398101806040528101908080518201929190602001805182019291905050508181336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600890805190602001906200009a929190620000d0565b508060099080519060200190620000b3929190620000d0565b5050506001601081620000c7919062000157565b5050506200025a565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200011357805160ff191683800117855562000144565b8280016001018555821562000144579182015b828111156200014357825182559160200191906001019062000126565b5b5090506200015391906200018c565b5090565b8154818355818111156200018757600902816009028360005260206000209182019101620001869190620001b4565b5b505050565b620001b191905b80821115620001ad57600081600090555060010162000193565b5090565b90565b6200022691905b808211156200022257600080820160006101000a81549061ffff0219169055600182016000620001ec919062000229565b600582016000620001fe919062000245565b60078201600062000210919062000253565b600882016000905550600901620001bb565b5090565b90565b5060008155600101600081556001016000815560010160009055565b506000815560010160009055565b5060009055565b6154bb806200026a6000396000f3006080604052600436106102e0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a7146102e557806306fdde0314610349578063081812fc146103d9578063087380ca146104465780630924da5c14610480578063095ea7b3146104ad57806318160ddd146104fa5780631f7b6d321461052557806323b872dd14610550578063242a0087146105bd578063252498a21461062657806327cdbf4a146106615780632a5c792a146106aa5780632f745c591461071657806342842e0e1461077757806342f5b7e0146107e4578063430c20811461081b5780634622ab03146108805780634968694a146108c95780634f558e79146109065780634f6ccce71461094b57806350d15fbe1461098c57806355c0820014610a255780635600f04f14610a5f578063585aa91e14610aef5780635ecef65f14610b295780635f80244814610b70578063606d2e9614610bb75780636202745f14610c0f5780636352211e14610c5657806365d6759a14610cc357806365fc125314610d2c57806367aea7d514610d9257806368d3d43314610dec5780636970861614610e3357806369c0ad9314610f265780636ecaa19514610f8c5780636ee3e89614610fd957806370a08231146110145780637208b8f71461106b5780638462151c146110e857806387115a9d146111805780638da5cb5b146111cd5780639462f02f1461122457806395d89b4114611278578063988b1d8614611308578063a028e63c14611355578063a22cb4651461139e578063b2596a67146113ed578063b4037bca14611450578063b75c4f801461148b578063b88d4fde146114f7578063c87b56dd146115aa578063d235f94714611650578063d2a59d691461169d578063deb27fc5146116ed578063e44ddaf514611756578063e6458f6e146117e3578063e985e9c51461184f578063f2fde38b146118ca578063f3ca062a1461190d578063f8ed0dfb14611962575b600080fd5b3480156102f157600080fd5b5061032f60048036038101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506119ac565b604051808215151515815260200191505060405180910390f35b34801561035557600080fd5b5061035e611bc5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561039e578082015181840152602081019050610383565b50505050905090810190601f1680156103cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103e557600080fd5b5061040460048036038101908080359060200190929190505050611c67565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561045257600080fd5b5061047e60048036038101908080359060200190929190803560ff169060200190929190505050611d21565b005b34801561048c57600080fd5b506104ab60048036038101908080359060200190929190505050611dce565b005b3480156104b957600080fd5b506104f8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e6a565b005b34801561050657600080fd5b5061050f611e79565b6040518082815260200191505060405180910390f35b34801561053157600080fd5b5061053a611e86565b6040518082815260200191505060405180910390f35b34801561055c57600080fd5b506105bb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e93565b005b3480156105c957600080fd5b506105e860048036038101908080359060200190929190505050611f35565b6040518082600260200280838360005b838110156106135780820151818401526020810190506105f8565b5050505090500191505060405180910390f35b34801561063257600080fd5b5061065f600480360381019080803590602001908201803590602001919091929391929390505050611fa0565b005b34801561066d57600080fd5b50610690600480360381019080803560001916906020019092919050505061207a565b604051808215151515815260200191505060405180910390f35b3480156106b657600080fd5b506106bf61209a565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156107025780820151818401526020810190506106e7565b505050509050019250505060405180910390f35b34801561072257600080fd5b50610761600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506120f2565b6040518082815260200191505060405180910390f35b34801561078357600080fd5b506107e2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612166565b005b3480156107f057600080fd5b506108196004803603810190808035906020019092919080608001909192919290505050612187565b005b34801561082757600080fd5b50610866600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612238565b604051808215151515815260200191505060405180910390f35b34801561088c57600080fd5b506108ab600480360381019080803590602001909291905050506122cd565b60405180826000191660001916815260200191505060405180910390f35b3480156108d557600080fd5b5061090460048036038101908080359060200190929190803563ffffffff1690602001909291905050506122e5565b005b34801561091257600080fd5b5061093160048036038101908080359060200190929190505050612398565b604051808215151515815260200191505060405180910390f35b34801561095757600080fd5b506109766004803603810190808035906020019092919050505061240a565b6040518082815260200191505060405180910390f35b34801561099857600080fd5b506109b76004803603810190808035906020019092919050505061243f565b604051808663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff1681526020018463ffffffff1663ffffffff1681526020018363ffffffff1663ffffffff1681526020018263ffffffff1663ffffffff1681526020019550505050505060405180910390f35b348015610a3157600080fd5b50610a5d60048036038101908080359060200190929190803560ff1690602001909291905050506124c5565b005b348015610a6b57600080fd5b50610a74612572565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ab4578082015181840152602081019050610a99565b50505050905090810190601f168015610ae15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610afb57600080fd5b50610b2760048036038101908080359060200190929190803560ff169060200190929190505050612610565b005b348015610b3557600080fd5b50610b6e60048036038101908080359060200190929190803560ff169060200190929190803560ff1690602001909291905050506126bd565b005b348015610b7c57600080fd5b50610b9b6004803603810190808035906020019092919050505061279d565b604051808260ff1660ff16815260200191505060405180910390f35b348015610bc357600080fd5b50610be2600480360381019080803590602001909291905050506127bd565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b348015610c1b57600080fd5b50610c3a600480360381019080803590602001909291905050506127fd565b604051808260ff1660ff16815260200191505060405180910390f35b348015610c6257600080fd5b50610c816004803603810190808035906020019092919050505061281d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ccf57600080fd5b50610cee60048036038101908080359060200190929190505050612868565b6040518082600460200280838360005b83811015610d19578082015181840152602081019050610cfe565b5050505090500191505060405180910390f35b348015610d3857600080fd5b50610d90600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506128d3565b005b348015610d9e57600080fd5b50610dca60048036038101908080359060200190929190803560ff1690602001909291905050506129ba565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b348015610df857600080fd5b50610e17600480360381019080803590602001909291905050506129ec565b604051808260ff1660ff16815260200191505060405180910390f35b348015610e3f57600080fd5b50610f10600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff16906020019092919080608001906004806020026040519081016040528092919082600460200280828437820191505050505091929192908060400190600280602002604051908101604052809291908260026020028082843782019150505050509192919290806101600190600b806020026040519081016040528092919082600b6020028082843782019150505050509192919290505050612a0c565b6040518082815260200191505060405180910390f35b348015610f3257600080fd5b50610f8a60048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050612b83565b005b348015610f9857600080fd5b50610fb760048036038101908080359060200190929190505050612c9f565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b348015610fe557600080fd5b5061101260048036038101908080359060200190929190803561ffff169060200190929190505050612cc2565b005b34801561102057600080fd5b50611055600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d74565b6040518082815260200191505060405180910390f35b34801561107757600080fd5b506110e660048036038101908080359060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190505050612dc6565b005b3480156110f457600080fd5b50611129600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f54565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561116c578082015181840152602081019050611151565b505050509050019250505060405180910390f35b34801561118c57600080fd5b506111cb60048036038101908080359060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190505050612feb565b005b3480156111d957600080fd5b506111e26130f2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561123057600080fd5b5061124f60048036038101908080359060200190929190505050613117565b604051808360ff1660ff1681526020018260ff1660ff1681526020019250505060405180910390f35b34801561128457600080fd5b5061128d613155565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156112cd5780820151818401526020810190506112b2565b50505050905090810190601f1680156112fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561131457600080fd5b50611353600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506131f7565b005b34801561136157600080fd5b5061139c6004803603810190808035906020019092919080356000191690602001909291908035600019169060200190929190505050613283565b005b3480156113aa57600080fd5b506113eb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613355565b005b3480156113f957600080fd5b50611418600480360381019080803590602001909291905050506134fa565b604051808460ff1660ff1681526020018360ff1660ff1681526020018261ffff1661ffff168152602001935050505060405180910390f35b34801561145c57600080fd5b5061148960048036038101908080359060200190929190803561ffff16906020019092919050505061354c565b005b34801561149757600080fd5b506114a06135fe565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156114e35780820151818401526020810190506114c8565b505050509050019250505060405180910390f35b34801561150357600080fd5b506115a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061368c565b005b3480156115b657600080fd5b506115d56004803603810190808035906020019092919050505061371d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156116155780820151818401526020810190506115fa565b50505050905090810190601f1680156116425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561165c57600080fd5b5061169b60048036038101908080359060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190505050613874565b005b3480156116a957600080fd5b506116c860048036038101908080359060200190929190505050613960565b604051808361ffff1661ffff1681526020018281526020019250505060405180910390f35b3480156116f957600080fd5b50611718600480360381019080803590602001909291905050506139a1565b6040518082600b60200280838360005b83811015611743578082015181840152602081019050611728565b5050505090500191505060405180910390f35b34801561176257600080fd5b5061178160048036038101908080359060200190929190505050613a32565b604051808681526020018563ffffffff1663ffffffff1681526020018463ffffffff1663ffffffff1681526020018363ffffffff1663ffffffff1681526020018263ffffffff1663ffffffff1681526020019550505050505060405180910390f35b3480156117ef57600080fd5b506117f8613aa8565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561183b578082015181840152602081019050611820565b505050509050019250505060405180910390f35b34801561185b57600080fd5b506118b0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b36565b604051808215151515815260200191505060405180910390f35b3480156118d657600080fd5b5061190b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613bca565b005b34801561191957600080fd5b5061196060048036038101908080359060200190929190803560ff169060200190929190803560ff169060200190929190803561ffff169060200190929190505050613d55565b005b34801561196e57600080fd5b506119aa60048036038101908080359060200190929190803560ff169060200190929190803563ffffffff169060200190929190505050613e67565b005b60006301ffc9a77c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a7d57506380ac58cd7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ae8575063f0b9e5ba7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611b535750635b5e139f7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bbe575063780e9d637c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c5d5780601f10611c3257610100808354040283529160200191611c5d565b820191906000526020600020905b815481529060010190602001808311611c4057829003601f168201915b5050505050905090565b6000611c7282612398565b1515611ce6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f746f6b656e20646f65736e27742065786973740000000000000000000000000081525060200191505060405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611d2a33613f32565b1515611d9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b806019600084815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505050565b611dd733613f32565b1515611e4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b6000601360008381526020019081526020016000206000018190555050565b611e75338383613f88565b5050565b6000600c80549050905090565b6000601080549050905090565b611ea5611ea03383612238565b6141ab565b611eae83614223565b611eb782614223565b611ec183826142cb565b611ecb83826143f2565b611ed58282614658565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611f3d6150fe565b601082815481101515611f4c57fe5b9060005260206000209060090201600501600280602002604051908101604052809291908260028015611f94576020028201915b815481526020019060010190808311611f80575b50505050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612064576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b8181600f9190612075929190615120565b505050565b60116020528060005260406000206000915054906101000a900460ff1681565b6060600c8054806020026020016040519081016040528092919081815260200182805480156120e857602002820191906000526020600020905b8154815260200190600101908083116120d4575b5050505050905090565b600061210761210084612d74565b831061472f565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561215357fe5b9060005260206000200154905092915050565b612182838383602060405190810160405280600081525061368c565b505050565b61219033613f32565b1515612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b8060108381548110151561221457fe5b90600052602060002090600902016001019060046122339291906151a0565b505050565b6000806122448361281d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122b357508373ffffffffffffffffffffffffffffffffffffffff1661229b84611c67565b73ffffffffffffffffffffffffffffffffffffffff16145b806122c457506122c38185613b36565b5b91505092915050565b60126020528060005260406000206000915090505481565b6122ee33613f32565b1515612362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b806018600084815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600061241e612417611e79565b831061472f565b600c8281548110151561242d57fe5b90600052602060002001549050919050565b60166020528060005260406000206000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900463ffffffff16908060000160089054906101000a900463ffffffff169080600001600c9054906101000a900463ffffffff16908060000160109054906101000a900463ffffffff16905085565b6124ce33613f32565b1515612542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b80601b600084815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505050565b600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126085780601f106125dd57610100808354040283529160200191612608565b820191906000526020600020905b8154815290600101906020018083116125eb57829003601f168201915b505050505081565b61261933613f32565b151561268d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b80601a600084815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505050565b6126c633613f32565b151561273a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b816014600085815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550806014600085815260200190815260200160002060000160016101000a81548160ff021916908360ff160217905550505050565b60196020528060005260406000206000915054906101000a900460ff1681565b60156020528060005260406000206000915090508060000160009054906101000a900461ffff16908060000160029054906101000a900461ffff16905082565b601b6020528060005260406000206000915054906101000a900460ff1681565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061285f81614223565b80915050919050565b6128706151e0565b60108281548110151561287f57fe5b90600052602060002090600902016001016004806020026040519081016040528092919082600480156128c7576020028201915b8154815260200190600101908083116128b3575b50505050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612997576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b80600390805190602001906129ad929190615203565b506129b7816147a7565b50565b601c6020528160005260406000206020528060005260406000206000915091509054906101000a900463ffffffff1681565b601a6020528060005260406000206000915054906101000a900460ff1681565b6000612a1733613f32565b1515612a8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b612b6e6001601060a0604051908101604052808961ffff168152602001888152602001878152602001868152602001428152509080600181540180825580915050906001820390600052602060002090600902016000909192909190915060008201518160000160006101000a81548161ffff021916908361ffff160217905550602082015181600101906004612b2392919061528d565b50604082015181600501906002612b3b9291906152cd565b5060608201518160070190600b612b5392919061530d565b5060808201518160080155505061485590919063ffffffff16565b9050612b7a868261486e565b95945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c49576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b600090505b8151811015612c8457612c778282815181101515612c6857fe5b90602001906020020151614223565b8080600101915050612c4e565b8160029080519060200190612c9a929190615203565b505050565b60186020528060005260406000206000915054906101000a900463ffffffff1681565b612ccb33613f32565b1515612d3f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b806015600084815260200190815260200160002060000160026101000a81548161ffff021916908361ffff1602179055505050565b6000612d7f82614223565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b612dcf33613f32565b1515612e43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b846016600088815260200190815260200160002060000160006101000a81548163ffffffff021916908363ffffffff160217905550836016600088815260200190815260200160002060000160046101000a81548163ffffffff021916908363ffffffff160217905550826016600088815260200190815260200160002060000160086101000a81548163ffffffff021916908363ffffffff1602179055508160166000888152602001908152602001600020600001600c6101000a81548163ffffffff021916908363ffffffff160217905550806016600088815260200190815260200160002060000160106101000a81548163ffffffff021916908363ffffffff160217905550505050505050565b6060600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015612fdf57602002820191906000526020600020905b815481526020019060010190808311612fcb575b50505050509050919050565b612ff433613f32565b1515613068576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b426013600085815260200190815260200160002060000181905550816013600085815260200190815260200160002060010160006101000a81548163ffffffff021916908363ffffffff160217905550806013600085815260200190815260200160002060010160046101000a81548163ffffffff021916908363ffffffff160217905550505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60146020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16905082565b606060098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156131ed5780601f106131c2576101008083540402835291602001916131ed565b820191906000526020600020905b8154815290600101906020018083116131d057829003601f168201915b5050505050905090565b61320033613f32565b1515613274576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b61327f328383613f88565b5050565b61328c33613f32565b1515613300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b81601260008581526020019081526020016000208160001916905550600160116000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156133f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f77726f6e672073656e646572000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b60176020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900461ffff16905083565b61355533613f32565b15156135c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b806015600084815260200190815260200160002060000160006101000a81548161ffff021916908361ffff1602179055505050565b6060600280548060200260200160405190810160405280929190818152602001828054801561368257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613638575b5050505050905090565b613697848484611e93565b6136a3848484846148c5565b1515613717576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f63616e2774206d616b652073616665207472616e73666572000000000000000081525060200191505060405180910390fd5b50505050565b606061372882612398565b151561379c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f746f6b656e20646f65736e27742065786973740000000000000000000000000081525060200191505060405180910390fd5b600f6137a783614ad1565b60405160200180838054600181600116156101000203166002900480156138055780601f106137e3576101008083540402835291820191613805565b820191906000526020600020905b8154815290600101906020018083116137f1575b505082805190602001908083835b6020831015156138385780518252602082019150602081019050602083039250613813565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050919050565b61387d33613f32565b15156138f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b816013600085815260200190815260200160002060010160086101000a81548163ffffffff021916908363ffffffff1602179055508060136000858152602001908152602001600020600101600c6101000a81548163ffffffff021916908363ffffffff160217905550505050565b60108181548110151561396f57fe5b90600052602060002090600902016000915090508060000160009054906101000a900461ffff16908060080154905082565b6139a96153a7565b6010828154811015156139b857fe5b9060005260206000209060090201600701600b806020026040519081016040528092919082600b8015613a26576020028201916000905b82829054906101000a900460ff1660ff16815260200190600101906020826000010492830192600103820291508084116139ef5790505b50505050509050919050565b60136020528060005260406000206000915090508060000154908060010160009054906101000a900463ffffffff16908060010160049054906101000a900463ffffffff16908060010160089054906101000a900463ffffffff169080600101600c9054906101000a900463ffffffff16905085565b60606003805480602002602001604051908101604052809291908181526020018280548015613b2c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613ae2575b5050505050905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613c8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b613c9781614223565b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613d5e33613f32565b1515613dd2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b826017600086815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550816017600086815260200190815260200160002060000160016101000a81548160ff021916908360ff160217905550806017600086815260200190815260200160002060000160026101000a81548161ffff021916908361ffff16021790555050505050565b613e7033613f32565b1515613ee4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b80601c600085815260200190815260200160002060008460ff1660ff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff160217905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000613f938261281d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515614039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f63616e277420626520617070726f76656420746f206f776e657200000000000081525060200191505060405180910390fd5b6140818173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061407c575061407b8286613b36565b5b6141ab565b600073ffffffffffffffffffffffffffffffffffffffff166140a283611c67565b73ffffffffffffffffffffffffffffffffffffffff161415806140f25750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156141a557826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b50505050565b801515614220576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6e6f2072696768747320746f206d616e6167650000000000000000000000000081525060200191505060405180910390fd5b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156142c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f696e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b50565b6142d58183614c2e565b600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156143ee5760006005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b5050565b60008060006144456000600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011614cdd565b61444f8585614d55565b600b60008581526020019081526020016000205492506144bb6001600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061485590919063ffffffff16565b9150600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561450957fe5b9060005260206000200154905080600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110151561456357fe5b90600052602060002001819055506000600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811015156145bf57fe5b9060005260206000200181905550600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548091906001900361461f91906153cb565b506000600b60008681526020019081526020016000208190555082600b6000838152602001908152602001600020819055505050505050565b60006146648383614e97565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082908060018154018082558091505090600182039060005260206000200160009091929091909150555080600b600084815260200190815260200160002081905550505050565b8015156147a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720696e64657800000000000000000000000000000000000000000081525060200191505060405180910390fd5b50565b60008090505b8151811015614851576147d682828151811015156147c757fe5b90602001906020020151614223565b600180600084848151811015156147e957fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806001019150506147ad565b5050565b600082821115151561486357fe5b818303905092915050565b614878828261505a565b600c80549050600d600083815260200190815260200160002081905550600c8190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000806148d1856150cd565b15156148e05760019150614ac8565b8473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156149d55780820151818401526020810190506149ba565b50505050905090810190601f168015614a025780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015614a2457600080fd5b505af1158015614a38573d6000803e3d6000fd5b505050506040513d6020811015614a4e57600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505b50949350505050565b606060008060006060600080851415614b21576040805190810160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509550614c24565b8694508693505b600084141515614b4e578280600101935050600a84811515614b4657fe5b049350614b28565b826040519080825280601f01601f191660200182016040528015614b815781602001602082028038833980820191505090505b5091506001830390505b600085141515614c2057600a85811515614ba157fe5b066030017f010000000000000000000000000000000000000000000000000000000000000002828280600190039350815181101515614bdc57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85811515614c1857fe5b049450614b8b565b8195505b5050505050919050565b8073ffffffffffffffffffffffffffffffffffffffff16614c4e8361281d565b73ffffffffffffffffffffffffffffffffffffffff16141515614cd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6e6f7420616e206f776e6572000000000000000000000000000000000000000081525060200191505060405180910390fd5b5050565b801515614d52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f7573657220686173206e6f20746f6b656e73000000000000000000000000000081525060200191505060405180910390fd5b50565b614d5f8183614c2e565b614daa6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411614cdd565b614dfd6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461485590919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515614f6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f746f6b656e20616c72656164792068617320616e206f776e657200000000000081525060200191505060405180910390fd5b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506150136001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546150e090919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b61506382614223565b61506d8282614658565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60008082840190508381101515156150f457fe5b8091505092915050565b6040805190810160405280600290602082028038833980820191505090505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061516157803560ff191683800117855561518f565b8280016001018555821561518f579182015b8281111561518e578235825591602001919060010190615173565b5b50905061519c91906153f7565b5090565b82600481019282156151cf579160200282015b828111156151ce5782358255916020019190600101906151b3565b5b5090506151dc91906153f7565b5090565b608060405190810160405280600490602082028038833980820191505090505090565b82805482825590600052602060002090810192821561527c579160200282015b8281111561527b5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190615223565b5b509050615289919061541c565b5090565b82600481019282156152bc579160200282015b828111156152bb5782518255916020019190600101906152a0565b5b5090506152c991906153f7565b5090565b82600281019282156152fc579160200282015b828111156152fb5782518255916020019190600101906152e0565b5b50905061530991906153f7565b5090565b82600b601f016020900481019282156153965791602002820160005b8382111561536757835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302615329565b80156153945782816101000a81549060ff0219169055600101602081600001049283019260010302615367565b505b5090506153a3919061545f565b5090565b61016060405190810160405280600b90602082028038833980820191505090505090565b8154818355818111156153f2578183600052602060002091820191016153f191906153f7565b5b505050565b61541991905b808211156154155760008160009055506001016153fd565b5090565b90565b61545c91905b8082111561545857600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101615422565b5090565b90565b61548c91905b8082111561548857600081816101000a81549060ff021916905550600101615465565b5090565b905600a165627a7a723058200778a3e24f0852ca6a819823ee5affea1e7bdb9a45c0dc185210dafa190e79840029000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000012447261676f6e657265756d20447261676f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006445241474f4e0000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102e0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a7146102e557806306fdde0314610349578063081812fc146103d9578063087380ca146104465780630924da5c14610480578063095ea7b3146104ad57806318160ddd146104fa5780631f7b6d321461052557806323b872dd14610550578063242a0087146105bd578063252498a21461062657806327cdbf4a146106615780632a5c792a146106aa5780632f745c591461071657806342842e0e1461077757806342f5b7e0146107e4578063430c20811461081b5780634622ab03146108805780634968694a146108c95780634f558e79146109065780634f6ccce71461094b57806350d15fbe1461098c57806355c0820014610a255780635600f04f14610a5f578063585aa91e14610aef5780635ecef65f14610b295780635f80244814610b70578063606d2e9614610bb75780636202745f14610c0f5780636352211e14610c5657806365d6759a14610cc357806365fc125314610d2c57806367aea7d514610d9257806368d3d43314610dec5780636970861614610e3357806369c0ad9314610f265780636ecaa19514610f8c5780636ee3e89614610fd957806370a08231146110145780637208b8f71461106b5780638462151c146110e857806387115a9d146111805780638da5cb5b146111cd5780639462f02f1461122457806395d89b4114611278578063988b1d8614611308578063a028e63c14611355578063a22cb4651461139e578063b2596a67146113ed578063b4037bca14611450578063b75c4f801461148b578063b88d4fde146114f7578063c87b56dd146115aa578063d235f94714611650578063d2a59d691461169d578063deb27fc5146116ed578063e44ddaf514611756578063e6458f6e146117e3578063e985e9c51461184f578063f2fde38b146118ca578063f3ca062a1461190d578063f8ed0dfb14611962575b600080fd5b3480156102f157600080fd5b5061032f60048036038101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506119ac565b604051808215151515815260200191505060405180910390f35b34801561035557600080fd5b5061035e611bc5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561039e578082015181840152602081019050610383565b50505050905090810190601f1680156103cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103e557600080fd5b5061040460048036038101908080359060200190929190505050611c67565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561045257600080fd5b5061047e60048036038101908080359060200190929190803560ff169060200190929190505050611d21565b005b34801561048c57600080fd5b506104ab60048036038101908080359060200190929190505050611dce565b005b3480156104b957600080fd5b506104f8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e6a565b005b34801561050657600080fd5b5061050f611e79565b6040518082815260200191505060405180910390f35b34801561053157600080fd5b5061053a611e86565b6040518082815260200191505060405180910390f35b34801561055c57600080fd5b506105bb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e93565b005b3480156105c957600080fd5b506105e860048036038101908080359060200190929190505050611f35565b6040518082600260200280838360005b838110156106135780820151818401526020810190506105f8565b5050505090500191505060405180910390f35b34801561063257600080fd5b5061065f600480360381019080803590602001908201803590602001919091929391929390505050611fa0565b005b34801561066d57600080fd5b50610690600480360381019080803560001916906020019092919050505061207a565b604051808215151515815260200191505060405180910390f35b3480156106b657600080fd5b506106bf61209a565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156107025780820151818401526020810190506106e7565b505050509050019250505060405180910390f35b34801561072257600080fd5b50610761600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506120f2565b6040518082815260200191505060405180910390f35b34801561078357600080fd5b506107e2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612166565b005b3480156107f057600080fd5b506108196004803603810190808035906020019092919080608001909192919290505050612187565b005b34801561082757600080fd5b50610866600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612238565b604051808215151515815260200191505060405180910390f35b34801561088c57600080fd5b506108ab600480360381019080803590602001909291905050506122cd565b60405180826000191660001916815260200191505060405180910390f35b3480156108d557600080fd5b5061090460048036038101908080359060200190929190803563ffffffff1690602001909291905050506122e5565b005b34801561091257600080fd5b5061093160048036038101908080359060200190929190505050612398565b604051808215151515815260200191505060405180910390f35b34801561095757600080fd5b506109766004803603810190808035906020019092919050505061240a565b6040518082815260200191505060405180910390f35b34801561099857600080fd5b506109b76004803603810190808035906020019092919050505061243f565b604051808663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff1681526020018463ffffffff1663ffffffff1681526020018363ffffffff1663ffffffff1681526020018263ffffffff1663ffffffff1681526020019550505050505060405180910390f35b348015610a3157600080fd5b50610a5d60048036038101908080359060200190929190803560ff1690602001909291905050506124c5565b005b348015610a6b57600080fd5b50610a74612572565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ab4578082015181840152602081019050610a99565b50505050905090810190601f168015610ae15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610afb57600080fd5b50610b2760048036038101908080359060200190929190803560ff169060200190929190505050612610565b005b348015610b3557600080fd5b50610b6e60048036038101908080359060200190929190803560ff169060200190929190803560ff1690602001909291905050506126bd565b005b348015610b7c57600080fd5b50610b9b6004803603810190808035906020019092919050505061279d565b604051808260ff1660ff16815260200191505060405180910390f35b348015610bc357600080fd5b50610be2600480360381019080803590602001909291905050506127bd565b604051808361ffff1661ffff1681526020018261ffff1661ffff1681526020019250505060405180910390f35b348015610c1b57600080fd5b50610c3a600480360381019080803590602001909291905050506127fd565b604051808260ff1660ff16815260200191505060405180910390f35b348015610c6257600080fd5b50610c816004803603810190808035906020019092919050505061281d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ccf57600080fd5b50610cee60048036038101908080359060200190929190505050612868565b6040518082600460200280838360005b83811015610d19578082015181840152602081019050610cfe565b5050505090500191505060405180910390f35b348015610d3857600080fd5b50610d90600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506128d3565b005b348015610d9e57600080fd5b50610dca60048036038101908080359060200190929190803560ff1690602001909291905050506129ba565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b348015610df857600080fd5b50610e17600480360381019080803590602001909291905050506129ec565b604051808260ff1660ff16815260200191505060405180910390f35b348015610e3f57600080fd5b50610f10600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff16906020019092919080608001906004806020026040519081016040528092919082600460200280828437820191505050505091929192908060400190600280602002604051908101604052809291908260026020028082843782019150505050509192919290806101600190600b806020026040519081016040528092919082600b6020028082843782019150505050509192919290505050612a0c565b6040518082815260200191505060405180910390f35b348015610f3257600080fd5b50610f8a60048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050612b83565b005b348015610f9857600080fd5b50610fb760048036038101908080359060200190929190505050612c9f565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b348015610fe557600080fd5b5061101260048036038101908080359060200190929190803561ffff169060200190929190505050612cc2565b005b34801561102057600080fd5b50611055600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d74565b6040518082815260200191505060405180910390f35b34801561107757600080fd5b506110e660048036038101908080359060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190505050612dc6565b005b3480156110f457600080fd5b50611129600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f54565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561116c578082015181840152602081019050611151565b505050509050019250505060405180910390f35b34801561118c57600080fd5b506111cb60048036038101908080359060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190505050612feb565b005b3480156111d957600080fd5b506111e26130f2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561123057600080fd5b5061124f60048036038101908080359060200190929190505050613117565b604051808360ff1660ff1681526020018260ff1660ff1681526020019250505060405180910390f35b34801561128457600080fd5b5061128d613155565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156112cd5780820151818401526020810190506112b2565b50505050905090810190601f1680156112fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561131457600080fd5b50611353600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506131f7565b005b34801561136157600080fd5b5061139c6004803603810190808035906020019092919080356000191690602001909291908035600019169060200190929190505050613283565b005b3480156113aa57600080fd5b506113eb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613355565b005b3480156113f957600080fd5b50611418600480360381019080803590602001909291905050506134fa565b604051808460ff1660ff1681526020018360ff1660ff1681526020018261ffff1661ffff168152602001935050505060405180910390f35b34801561145c57600080fd5b5061148960048036038101908080359060200190929190803561ffff16906020019092919050505061354c565b005b34801561149757600080fd5b506114a06135fe565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156114e35780820151818401526020810190506114c8565b505050509050019250505060405180910390f35b34801561150357600080fd5b506115a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061368c565b005b3480156115b657600080fd5b506115d56004803603810190808035906020019092919050505061371d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156116155780820151818401526020810190506115fa565b50505050905090810190601f1680156116425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561165c57600080fd5b5061169b60048036038101908080359060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190505050613874565b005b3480156116a957600080fd5b506116c860048036038101908080359060200190929190505050613960565b604051808361ffff1661ffff1681526020018281526020019250505060405180910390f35b3480156116f957600080fd5b50611718600480360381019080803590602001909291905050506139a1565b6040518082600b60200280838360005b83811015611743578082015181840152602081019050611728565b5050505090500191505060405180910390f35b34801561176257600080fd5b5061178160048036038101908080359060200190929190505050613a32565b604051808681526020018563ffffffff1663ffffffff1681526020018463ffffffff1663ffffffff1681526020018363ffffffff1663ffffffff1681526020018263ffffffff1663ffffffff1681526020019550505050505060405180910390f35b3480156117ef57600080fd5b506117f8613aa8565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561183b578082015181840152602081019050611820565b505050509050019250505060405180910390f35b34801561185b57600080fd5b506118b0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b36565b604051808215151515815260200191505060405180910390f35b3480156118d657600080fd5b5061190b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613bca565b005b34801561191957600080fd5b5061196060048036038101908080359060200190929190803560ff169060200190929190803560ff169060200190929190803561ffff169060200190929190505050613d55565b005b34801561196e57600080fd5b506119aa60048036038101908080359060200190929190803560ff169060200190929190803563ffffffff169060200190929190505050613e67565b005b60006301ffc9a77c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a7d57506380ac58cd7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ae8575063f0b9e5ba7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611b535750635b5e139f7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bbe575063780e9d637c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c5d5780601f10611c3257610100808354040283529160200191611c5d565b820191906000526020600020905b815481529060010190602001808311611c4057829003601f168201915b5050505050905090565b6000611c7282612398565b1515611ce6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f746f6b656e20646f65736e27742065786973740000000000000000000000000081525060200191505060405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611d2a33613f32565b1515611d9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b806019600084815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505050565b611dd733613f32565b1515611e4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b6000601360008381526020019081526020016000206000018190555050565b611e75338383613f88565b5050565b6000600c80549050905090565b6000601080549050905090565b611ea5611ea03383612238565b6141ab565b611eae83614223565b611eb782614223565b611ec183826142cb565b611ecb83826143f2565b611ed58282614658565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611f3d6150fe565b601082815481101515611f4c57fe5b9060005260206000209060090201600501600280602002604051908101604052809291908260028015611f94576020028201915b815481526020019060010190808311611f80575b50505050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612064576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b8181600f9190612075929190615120565b505050565b60116020528060005260406000206000915054906101000a900460ff1681565b6060600c8054806020026020016040519081016040528092919081815260200182805480156120e857602002820191906000526020600020905b8154815260200190600101908083116120d4575b5050505050905090565b600061210761210084612d74565b831061472f565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561215357fe5b9060005260206000200154905092915050565b612182838383602060405190810160405280600081525061368c565b505050565b61219033613f32565b1515612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b8060108381548110151561221457fe5b90600052602060002090600902016001019060046122339291906151a0565b505050565b6000806122448361281d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122b357508373ffffffffffffffffffffffffffffffffffffffff1661229b84611c67565b73ffffffffffffffffffffffffffffffffffffffff16145b806122c457506122c38185613b36565b5b91505092915050565b60126020528060005260406000206000915090505481565b6122ee33613f32565b1515612362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b806018600084815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600061241e612417611e79565b831061472f565b600c8281548110151561242d57fe5b90600052602060002001549050919050565b60166020528060005260406000206000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900463ffffffff16908060000160089054906101000a900463ffffffff169080600001600c9054906101000a900463ffffffff16908060000160109054906101000a900463ffffffff16905085565b6124ce33613f32565b1515612542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b80601b600084815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505050565b600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126085780601f106125dd57610100808354040283529160200191612608565b820191906000526020600020905b8154815290600101906020018083116125eb57829003601f168201915b505050505081565b61261933613f32565b151561268d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b80601a600084815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505050565b6126c633613f32565b151561273a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b816014600085815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550806014600085815260200190815260200160002060000160016101000a81548160ff021916908360ff160217905550505050565b60196020528060005260406000206000915054906101000a900460ff1681565b60156020528060005260406000206000915090508060000160009054906101000a900461ffff16908060000160029054906101000a900461ffff16905082565b601b6020528060005260406000206000915054906101000a900460ff1681565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061285f81614223565b80915050919050565b6128706151e0565b60108281548110151561287f57fe5b90600052602060002090600902016001016004806020026040519081016040528092919082600480156128c7576020028201915b8154815260200190600101908083116128b3575b50505050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612997576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b80600390805190602001906129ad929190615203565b506129b7816147a7565b50565b601c6020528160005260406000206020528060005260406000206000915091509054906101000a900463ffffffff1681565b601a6020528060005260406000206000915054906101000a900460ff1681565b6000612a1733613f32565b1515612a8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b612b6e6001601060a0604051908101604052808961ffff168152602001888152602001878152602001868152602001428152509080600181540180825580915050906001820390600052602060002090600902016000909192909190915060008201518160000160006101000a81548161ffff021916908361ffff160217905550602082015181600101906004612b2392919061528d565b50604082015181600501906002612b3b9291906152cd565b5060608201518160070190600b612b5392919061530d565b5060808201518160080155505061485590919063ffffffff16565b9050612b7a868261486e565b95945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c49576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b600090505b8151811015612c8457612c778282815181101515612c6857fe5b90602001906020020151614223565b8080600101915050612c4e565b8160029080519060200190612c9a929190615203565b505050565b60186020528060005260406000206000915054906101000a900463ffffffff1681565b612ccb33613f32565b1515612d3f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b806015600084815260200190815260200160002060000160026101000a81548161ffff021916908361ffff1602179055505050565b6000612d7f82614223565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b612dcf33613f32565b1515612e43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b846016600088815260200190815260200160002060000160006101000a81548163ffffffff021916908363ffffffff160217905550836016600088815260200190815260200160002060000160046101000a81548163ffffffff021916908363ffffffff160217905550826016600088815260200190815260200160002060000160086101000a81548163ffffffff021916908363ffffffff1602179055508160166000888152602001908152602001600020600001600c6101000a81548163ffffffff021916908363ffffffff160217905550806016600088815260200190815260200160002060000160106101000a81548163ffffffff021916908363ffffffff160217905550505050505050565b6060600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015612fdf57602002820191906000526020600020905b815481526020019060010190808311612fcb575b50505050509050919050565b612ff433613f32565b1515613068576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b426013600085815260200190815260200160002060000181905550816013600085815260200190815260200160002060010160006101000a81548163ffffffff021916908363ffffffff160217905550806013600085815260200190815260200160002060010160046101000a81548163ffffffff021916908363ffffffff160217905550505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60146020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16905082565b606060098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156131ed5780601f106131c2576101008083540402835291602001916131ed565b820191906000526020600020905b8154815290600101906020018083116131d057829003601f168201915b5050505050905090565b61320033613f32565b1515613274576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b61327f328383613f88565b5050565b61328c33613f32565b1515613300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b81601260008581526020019081526020016000208160001916905550600160116000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156133f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f77726f6e672073656e646572000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b60176020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900461ffff16905083565b61355533613f32565b15156135c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b806015600084815260200190815260200160002060000160006101000a81548161ffff021916908361ffff1602179055505050565b6060600280548060200260200160405190810160405280929190818152602001828054801561368257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613638575b5050505050905090565b613697848484611e93565b6136a3848484846148c5565b1515613717576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f63616e2774206d616b652073616665207472616e73666572000000000000000081525060200191505060405180910390fd5b50505050565b606061372882612398565b151561379c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f746f6b656e20646f65736e27742065786973740000000000000000000000000081525060200191505060405180910390fd5b600f6137a783614ad1565b60405160200180838054600181600116156101000203166002900480156138055780601f106137e3576101008083540402835291820191613805565b820191906000526020600020905b8154815290600101906020018083116137f1575b505082805190602001908083835b6020831015156138385780518252602082019150602081019050602083039250613813565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050919050565b61387d33613f32565b15156138f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b816013600085815260200190815260200160002060010160086101000a81548163ffffffff021916908363ffffffff1602179055508060136000858152602001908152602001600020600101600c6101000a81548163ffffffff021916908363ffffffff160217905550505050565b60108181548110151561396f57fe5b90600052602060002090600902016000915090508060000160009054906101000a900461ffff16908060080154905082565b6139a96153a7565b6010828154811015156139b857fe5b9060005260206000209060090201600701600b806020026040519081016040528092919082600b8015613a26576020028201916000905b82829054906101000a900460ff1660ff16815260200190600101906020826000010492830192600103820291508084116139ef5790505b50505050509050919050565b60136020528060005260406000206000915090508060000154908060010160009054906101000a900463ffffffff16908060010160049054906101000a900463ffffffff16908060010160089054906101000a900463ffffffff169080600101600c9054906101000a900463ffffffff16905085565b60606003805480602002602001604051908101604052809291908181526020018280548015613b2c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613ae2575b5050505050905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613c8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b613c9781614223565b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613d5e33613f32565b1515613dd2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b826017600086815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550816017600086815260200190815260200160002060000160016101000a81548160ff021916908360ff160217905550806017600086815260200190815260200160002060000160026101000a81548161ffff021916908361ffff16021790555050505050565b613e7033613f32565b1515613ee4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b80601c600085815260200190815260200160002060008460ff1660ff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff160217905550505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000613f938261281d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515614039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f63616e277420626520617070726f76656420746f206f776e657200000000000081525060200191505060405180910390fd5b6140818173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061407c575061407b8286613b36565b5b6141ab565b600073ffffffffffffffffffffffffffffffffffffffff166140a283611c67565b73ffffffffffffffffffffffffffffffffffffffff161415806140f25750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156141a557826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b50505050565b801515614220576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6e6f2072696768747320746f206d616e6167650000000000000000000000000081525060200191505060405180910390fd5b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156142c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f696e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b50565b6142d58183614c2e565b600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156143ee5760006005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b5050565b60008060006144456000600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011614cdd565b61444f8585614d55565b600b60008581526020019081526020016000205492506144bb6001600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061485590919063ffffffff16565b9150600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561450957fe5b9060005260206000200154905080600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110151561456357fe5b90600052602060002001819055506000600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811015156145bf57fe5b9060005260206000200181905550600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548091906001900361461f91906153cb565b506000600b60008681526020019081526020016000208190555082600b6000838152602001908152602001600020819055505050505050565b60006146648383614e97565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082908060018154018082558091505090600182039060005260206000200160009091929091909150555080600b600084815260200190815260200160002081905550505050565b8015156147a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720696e64657800000000000000000000000000000000000000000081525060200191505060405180910390fd5b50565b60008090505b8151811015614851576147d682828151811015156147c757fe5b90602001906020020151614223565b600180600084848151811015156147e957fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806001019150506147ad565b5050565b600082821115151561486357fe5b818303905092915050565b614878828261505a565b600c80549050600d600083815260200190815260200160002081905550600c8190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000806148d1856150cd565b15156148e05760019150614ac8565b8473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156149d55780820151818401526020810190506149ba565b50505050905090810190601f168015614a025780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015614a2457600080fd5b505af1158015614a38573d6000803e3d6000fd5b505050506040513d6020811015614a4e57600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505b50949350505050565b606060008060006060600080851415614b21576040805190810160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509550614c24565b8694508693505b600084141515614b4e578280600101935050600a84811515614b4657fe5b049350614b28565b826040519080825280601f01601f191660200182016040528015614b815781602001602082028038833980820191505090505b5091506001830390505b600085141515614c2057600a85811515614ba157fe5b066030017f010000000000000000000000000000000000000000000000000000000000000002828280600190039350815181101515614bdc57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85811515614c1857fe5b049450614b8b565b8195505b5050505050919050565b8073ffffffffffffffffffffffffffffffffffffffff16614c4e8361281d565b73ffffffffffffffffffffffffffffffffffffffff16141515614cd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6e6f7420616e206f776e6572000000000000000000000000000000000000000081525060200191505060405180910390fd5b5050565b801515614d52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f7573657220686173206e6f20746f6b656e73000000000000000000000000000081525060200191505060405180910390fd5b50565b614d5f8183614c2e565b614daa6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411614cdd565b614dfd6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461485590919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515614f6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f746f6b656e20616c72656164792068617320616e206f776e657200000000000081525060200191505060405180910390fd5b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506150136001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546150e090919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b61506382614223565b61506d8282614658565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60008082840190508381101515156150f457fe5b8091505092915050565b6040805190810160405280600290602082028038833980820191505090505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061516157803560ff191683800117855561518f565b8280016001018555821561518f579182015b8281111561518e578235825591602001919060010190615173565b5b50905061519c91906153f7565b5090565b82600481019282156151cf579160200282015b828111156151ce5782358255916020019190600101906151b3565b5b5090506151dc91906153f7565b5090565b608060405190810160405280600490602082028038833980820191505090505090565b82805482825590600052602060002090810192821561527c579160200282015b8281111561527b5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190615223565b5b509050615289919061541c565b5090565b82600481019282156152bc579160200282015b828111156152bb5782518255916020019190600101906152a0565b5b5090506152c991906153f7565b5090565b82600281019282156152fc579160200282015b828111156152fb5782518255916020019190600101906152e0565b5b50905061530991906153f7565b5090565b82600b601f016020900481019282156153965791602002820160005b8382111561536757835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302615329565b80156153945782816101000a81549060ff0219169055600101602081600001049283019260010302615367565b505b5090506153a3919061545f565b5090565b61016060405190810160405280600b90602082028038833980820191505090505090565b8154818355818111156153f2578183600052602060002091820191016153f191906153f7565b5b505050565b61541991905b808211156154155760008160009055506001016153fd565b5090565b90565b61545c91905b8082111561545857600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101615422565b5090565b90565b61548c91905b8082111561548857600081816101000a81549060ff021916905550600101615465565b5090565b905600a165627a7a723058200778a3e24f0852ca6a819823ee5affea1e7bdb9a45c0dc185210dafa190e79840029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000012447261676f6e657265756d20447261676f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006445241474f4e0000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Dragonereum Dragon
Arg [1] : _symbol (string): DRAGON

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 447261676f6e657265756d20447261676f6e0000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 445241474f4e0000000000000000000000000000000000000000000000000000


Swarm Source

bzzr://0778a3e24f0852ca6a819823ee5affea1e7bdb9a45c0dc185210dafa190e7984

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Dragonereum is a cryptocollectible game with PvP battles, advanced breeding, in-game trading, rewards and achievements.

Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.