ETH Price: $3,298.87 (-2.47%)

Contract

0x3bc058D0958a543406D70416a810a5Cc023f1F31
 

Overview

ETH Balance

1.307133489995059599 ETH

Eth Value

$4,312.06 (@ $3,298.87/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw206266812024-08-28 11:06:5986 days ago1724843219IN
0x3bc058D0...c023f1F31
0 ETH0.000072951.43956214
Register157942872022-10-21 5:07:23763 days ago1666328843IN
0x3bc058D0...c023f1F31
0 ETH0.0006722723.99106236
Withdraw110696302020-10-16 22:20:341497 days ago1602886834IN
0x3bc058D0...c023f1F31
0 ETH0.0005324116
Register108955912020-09-19 23:14:441524 days ago1600557284IN
0x3bc058D0...c023f1F31
0.01 ETH0.01942744111
Register108946002020-09-19 19:31:271524 days ago1600543887IN
0x3bc058D0...c023f1F31
0.01 ETH0.026863155.1
Register108929882020-09-19 13:37:431525 days ago1600522663IN
0x3bc058D0...c023f1F31
0.01 ETH0.02873508165
Register108929662020-09-19 13:29:191525 days ago1600522159IN
0x3bc058D0...c023f1F31
0.01 ETH0.01955265111
Register108928162020-09-19 12:58:011525 days ago1600520281IN
0x3bc058D0...c023f1F31
0.01 ETH0.0162529992
Register108927862020-09-19 12:51:301525 days ago1600519890IN
0x3bc058D0...c023f1F31
0.01 ETH0.02041612117.7000016
Register108927542020-09-19 12:45:541525 days ago1600519554IN
0x3bc058D0...c023f1F31
0.01 ETH0.009393
Register108927512020-09-19 12:45:311525 days ago1600519531IN
0x3bc058D0...c023f1F31
0.01 ETH0.02815568160
Register108925622020-09-19 12:03:171525 days ago1600516997IN
0x3bc058D0...c023f1F31
0.01 ETH0.02566428147.00000145
Register108924402020-09-19 11:38:221525 days ago1600515502IN
0x3bc058D0...c023f1F31
0.01 ETH0.035194200
Register108872102020-09-18 16:25:101526 days ago1600446310IN
0x3bc058D0...c023f1F31
0.01 ETH0.0607147341
Register108869982020-09-18 15:37:121526 days ago1600443432IN
0x3bc058D0...c023f1F31
0.01 ETH0.05626969321
Register108865392020-09-18 13:59:551526 days ago1600437595IN
0x3bc058D0...c023f1F31
0.01 ETH0.00666844211
Register108865392020-09-18 13:59:551526 days ago1600437595IN
0x3bc058D0...c023f1F31
0.01 ETH0.03696231210
Register108779282020-09-17 5:58:541527 days ago1600322334IN
0x3bc058D0...c023f1F31
0.01 ETH0.0883315500
Register108748052020-09-16 18:40:121527 days ago1600281612IN
0x3bc058D0...c023f1F31
0.01 ETH0.03220251183
Register108708322020-09-16 3:51:521528 days ago1600228312IN
0x3bc058D0...c023f1F31
0.01 ETH0.0160763391.00000145
Withdraw108672602020-09-15 14:42:551529 days ago1600180975IN
0x3bc058D0...c023f1F31
0 ETH0.01100419255.01
Register108082322020-09-06 13:24:191538 days ago1599398659IN
0x3bc058D0...c023f1F31
0.01 ETH0.02047563115
Register108078202020-09-06 11:55:451538 days ago1599393345IN
0x3bc058D0...c023f1F31
0.01 ETH0.01808466104
Register108057202020-09-06 4:19:251538 days ago1599365965IN
0x3bc058D0...c023f1F31
0.01 ETH0.01983318112.10000145
Register107076392020-08-22 3:24:401553 days ago1598066680IN
0x3bc058D0...c023f1F31
0.01 ETH0.0152471784
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
206266812024-08-28 11:06:5986 days ago1724843219
0x3bc058D0...c023f1F31
0.02663146 ETH
110696302020-10-16 22:20:341497 days ago1602886834
0x3bc058D0...c023f1F31
0.09641968 ETH
108955912020-09-19 23:14:441524 days ago1600557284
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
108946002020-09-19 19:31:271524 days ago1600543887
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
108929882020-09-19 13:37:431525 days ago1600522663
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
108929662020-09-19 13:29:191525 days ago1600522159
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
108928162020-09-19 12:58:011525 days ago1600520281
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
108927862020-09-19 12:51:301525 days ago1600519890
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
108927512020-09-19 12:45:311525 days ago1600519531
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
108925622020-09-19 12:03:171525 days ago1600516997
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
108924402020-09-19 11:38:221525 days ago1600515502
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
108872102020-09-18 16:25:101526 days ago1600446310
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
108869982020-09-18 15:37:121526 days ago1600443432
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
108865392020-09-18 13:59:551526 days ago1600437595
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
108779282020-09-17 5:58:541527 days ago1600322334
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
108748052020-09-16 18:40:121527 days ago1600281612
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
108708322020-09-16 3:51:521528 days ago1600228312
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
108672602020-09-15 14:42:551529 days ago1600180975
0x3bc058D0...c023f1F31
0.14947158 ETH
108082322020-09-06 13:24:191538 days ago1599398659
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
108078202020-09-06 11:55:451538 days ago1599393345
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
108057202020-09-06 4:19:251538 days ago1599365965
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
107076392020-08-22 3:24:401553 days ago1598066680
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
107034522020-08-21 12:04:461554 days ago1598011486
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
106967152020-08-20 11:15:321555 days ago1597922132
0x3bc058D0...c023f1F31
 Contract Creation0.01 ETH
106889302020-08-19 6:21:361556 days ago1597818096
0x3bc058D0...c023f1F31
0.01896981 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MakerDAOInsurance

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-04-24
*/

pragma solidity ^0.5.16;

contract MakerDAOInsurance {
    using SafeMath for *;

    //*********
    // STRUCTS
    //*********
    struct Player {
        uint256 id;     // agent id
        bytes32 name;   // agent name
        uint256 gen;    // general vault
        uint256 ref;    // referral vault
        bool isAgent;   // referral activated
        uint256 eth;    // eth player has paid
        uint256 shares;   // shares
        uint256 units;  // uints of insurance
        uint256 plyrLastSeen; // last day player played
        uint256 mask;   // player mask
        uint256 level;
        uint256 accumulatedRef;
    }


    //***************
    // EXTERNAL DATA
    //***************

    TOP SAI_TOP = TOP(0x9b0ccf7C8994E19F39b2B4CF708e0A7DF65fA8a3);
    TUB SAI_TUB = TUB(0x448a5065aeBB8E423F0896E6c5D525C040f59af3);
    Underwriter underwriter = Underwriter(0xE58cDe3CbEeCC8d9306f482729084B909Afa2357);
    Agency agency = Agency(0x7Bc360ebD65eFa503FF189A0F81f61f85D310Ec3);
    
    address payable constant private developer = address(0x1e20B7d24d429b0DE705d3FF8B88Ec651d28A935);
    address payable constant private hakka = address(0xD0533664013a82c31584B7FFDB215139f38Ad77A);
    uint256 public end;
    bool public ended;


    //******************
    // GLOBAL VARIABLES
    //******************
    mapping(address => mapping(uint256 => uint256)) public unitToExpirePlayer;
    mapping(uint256 => uint256) public unitToExpire; // unit of insurance due at day x

    uint256 public issuedInsurance; // all issued insurance
    uint256 public ethOfShare;        // virtual eth of bought shares
    uint256 public shares;            // totalSupply of share
    uint256 public pool;             // eth gonna pay to beneficiary
    uint256 public today;           // today's date
    uint256 public _now;            // current time
    uint256 public mask;            // global mask
    uint256 public agents;          // number of agent

    // player data
    mapping(address => Player) public player; // player data
    mapping(uint256 => address) public agentxID_; // return agent address by id
    mapping(bytes32 => address) public agentxName_; // return agent address by name

    // constant parameters
    uint256 constant maxInsurePeriod = 100;
    uint256 constant maxLevel = 10;

    // rate of buying x day insurance
    uint256[101] public rate =
    [0,
    1000000000000000000,
    1990000000000000000,
    2970100000000000000,
    3940399000000000000,
    4900995010000000000,
    5851985059900000000,
    6793465209301000000,
    7725530557207990000,
    8648275251635910100,
    9561792499119550999,
    10466174574128355489,
    11361512828387071934,
    12247897700103201215,
    13125418723102169203,
    13994164535871147511,
    14854222890512436036,
    15705680661607311676,
    16548623854991238559,
    17383137616441326173,
    18209306240276912911,
    19027213177874143782,
    19836941046095402344,
    20638571635634448321,
    21432185919278103838,
    22217864060085322800,
    22995685419484469572,
    23765728565289624876,
    24528071279636728627,
    25282790566840361341,
    26029962661171957728,
    26769663034560238151,
    27501966404214635769,
    28226946740172489411,
    28944677272770764517,
    29655230500043056872,
    30358678195042626303,
    31055091413092200040,
    31744540498961278040,
    32427095093971665260,
    33102824143031948607,
    33771795901601629121,
    34434077942585612830,
    35089737163159756702,
    35738839791528159135,
    36381451393612877544,
    37017636879676748769,
    37647460510879981281,
    38270985905771181468,
    38888276046713469653,
    39499393286246334956,
    40104399353383871606,
    40703355359850032890,
    41296321806251532561,
    41883358588189017235,
    42464525002307127063,
    43039879752284055792,
    43609480954761215234,
    44173386145213603082,
    44731652283761467051,
    45284335760923852380,
    45831492403314613856,
    46373177479281467717,
    46909445704488653040,
    47440351247443766510,
    47965947734969328845,
    48486288257619635557,
    49001425375043439201,
    49511411121293004809,
    50016297010080074761,
    50516134039979274013,
    51010972699579481273,
    51500862972583686460,
    51985854342857849595,
    52465995799429271099,
    52941335841434978388,
    53411922483020628604,
    53877803258190422318,
    54339025225608518095,
    54795634973352432914,
    55247678623618908585,
    55695201837382719499,
    56138249819008892304,
    56576867320818803381,
    57011098647610615347,
    57440987661134509194,
    57866577784523164102,
    58287912006677932461,
    58705032886611153136,
    59117982557745041605,
    59526802732167591189,
    59931534704845915277,
    60332219357797456124,
    60728897164219481563,
    61121608192577286747,
    61510392110651513880,
    61895288189544998741,
    62276335307649548754,
    62653571954573053266,
    63027036235027322733,
    63396765872677049506];

    // threshold of agent upgrade
    uint256[10] public requirement =
    [0,
    73890560989306501,
    200855369231876674,
    545981500331442382,
    1484131591025766010,
    4034287934927351160,
    10966331584284585813,
    29809579870417282259,
    81030839275753838749,
    220264657948067161559];


    //******************
    // EVENT
    //******************
    event UPGRADE (address indexed agent, uint256 indexed level);
    event BUYINSURANCE(address indexed buyer, uint256 indexed start, uint256 unit,  uint256 date);


    //******************
    // MODIFIER
    //******************
    modifier isHuman() {
        require(msg.sender == tx.origin, "sorry humans only");
        _;
    }

    //******************
    // CORE FUNCTIONS
    //******************

    /**
     * @dev Constructor
     * @notice Initialize the time
     */
    constructor() public {
        _now = now;
        today = _now / 1 days;
    }

    /**
     * @dev Ticker
     * @notice It is called everytime when a player interacts with this contract
     * @return true if MakerDAO has been shut down, false otherwise
     */
    function tick()
        internal
        returns(bool)
    {
        if(!ended) {
            if (_now != now) {
                _now = now;
                uint256 _today; // the current day as soon as ticker is called

                //check MakerDAO status
                ended = SAI_TUB.off();
                end = SAI_TOP.caged();

                _today = ended ? end / 1 days : _now / 1 days;

                // calculate the outdated issuedInsurance
                while (today < _today) {
                    issuedInsurance = issuedInsurance.sub(unitToExpire[today]);
                    today += 1;
                }
            }
        }
        
        return ended;
    }

    /**
     * @dev Register
     * @notice Register a name by a human player
     */
    function register(string calldata _nameString)
        external
        payable
        isHuman()
    {
        bytes32 _name = agency.register(_nameString);
        address _agent = msg.sender;
        require(msg.value >= 10000000000000000, "insufficient amount");
        require(agentxName_[_name] == address(0), "name registered");

        if(!player[_agent].isAgent){
            agents += 1;
            player[_agent].isAgent = true;
            player[_agent].id = agents;
            player[_agent].level = 1;
            agentxID_[agents] = _agent;
        }
        // set name active for the player
        player[_agent].name = _name;
        agentxName_[_name] = _agent;

        (new SafeSend).value(msg.value)(hakka);

    }

    /**
     * @dev Upgrade
     * @notice Upgrade when a player's referral bonus meet the promotion
     */
    function upgrade()
        external
        isHuman()
    {
        address _agent = msg.sender;
        require(player[_agent].isAgent);
        require(player[_agent].level < maxLevel);

        if(player[_agent].accumulatedRef >= requirement[player[_agent].level]){
            player[_agent].level = (1).add(player[_agent].level);
            emit UPGRADE(_agent,player[_agent].level);
        }
    }

    //using address for referral
    function buy(address payable _agent, uint256 _date)
        isHuman()
        public
        payable
    {
        // ticker
        if(tick()){
            msg.sender.transfer(msg.value);
            return;
        }

        // validate agent
        if(!player[_agent].isAgent){
            _agent = address(0);
        }

        buyCore(msg.sender, msg.value, _date, _agent);
    }

    //using ID for referral
    function buy(uint256 _agentId, uint256 _date)
        isHuman()
        public
        payable
    {
        // ticker
        if(tick()){
            msg.sender.transfer(msg.value);
            return;
        }

        //query agent
        address payable _agent = address(uint160(agentxID_[_agentId]));

        buyCore(msg.sender, msg.value, _date, _agent);
    }

    //using name for referral
    function buy(bytes32 _agentName, uint256 _date)
        isHuman()
        public
        payable
    {
        // ticker
        if(tick()){
            msg.sender.transfer(msg.value);
            return;
        }

        //query agent
        address payable _agent = address(uint160(agentxName_[_agentName]));

        buyCore(msg.sender, msg.value, _date, _agent);
    }

    // contract wallets, sorry insurance only for human
    function buy()
        public
        payable
    {
        // ticker
        if(tick()) {
            (new SafeSend).value(msg.value)(msg.sender);
            return;
        }

        buyCore(msg.sender, msg.value, 0, address(0));
    }

    // fallback
    function () external payable {
        buy();
    }

    /**
     * @dev Core part of buying
     */
    function buyCore(address _buyer, uint256 _eth, uint256 _date, address payable _agent) internal {

        updatePlayerUnit(_buyer);
        
        require(_eth >= 1000000000, "pocket lint: not a valid currency");
        require(_eth <= 10000000000000000000000, "no vitalik, no");

        if(_date > maxInsurePeriod){
            _date = maxInsurePeriod;
        }
        uint256 _rate = rate[_date] + 1000000000000000000;
        uint256 ethToBuyShare = _eth.mul(1000000000000000000) / _rate;
        //-- ethToBuyShare is a virtual amount used to represent the eth player paid for buying shares
        //which is usually different from _eth

        // get value of shares and insurances can be bought
        uint256 _share = underwriter.mintShare(ethOfShare, ethToBuyShare);
        uint256 _unit = (_date == 0)? 0: _share;
        uint256 newDate = today + _date - 1;


        // update global data
        ethOfShare = ethOfShare.add(ethToBuyShare);
        shares = shares.add(_share);
        unitToExpire[newDate] = unitToExpire[newDate].add(_unit);
        issuedInsurance = issuedInsurance.add(_unit);

        // update player data
        player[_buyer].eth = player[_buyer].eth.add(_eth);
        player[_buyer].shares = player[_buyer].shares.add(_share);
        player[_buyer].units = player[_buyer].units.add(_unit);
        unitToExpirePlayer[_buyer][newDate] = unitToExpirePlayer[_buyer][newDate].add(_unit);

        distributeEx(_eth, _agent);
        distributeIn(_buyer, _eth, _share);
        emit BUYINSURANCE(_buyer, today, _unit, _date);
        emit Transfer(address(0), _buyer, _unit);
    }

    /**
     * @dev Update player's units of insurance
     */
    function updatePlayerUnit(address _player) internal {
        uint256 _today = player[_player].plyrLastSeen;
        uint256 expiredUnit = 0;
        if(_today != 0){
            while(_today < today){
                expiredUnit = expiredUnit.add(unitToExpirePlayer[_player][_today]);
                _today += 1;
            }
            player[_player].units = player[_player].units.sub(expiredUnit);
        }
        player[_player].plyrLastSeen = today;
    }

    /**
     * @dev pay external stakeholder
     */
    function distributeEx(uint256 _eth, address payable _agent) internal {
        uint256 ex = _eth / 4 ;

        if(player[_agent].isAgent){
            uint256 refRate = player[_agent].level.add(6);
            uint256 _ref = _eth.mul(refRate) / 100;
            player[_agent].ref = player[_agent].ref.add(_ref);
            player[_agent].accumulatedRef = player[_agent].accumulatedRef.add(_ref);
            ex = ex.sub(_ref);
        }

        uint256 _dev = ex / 3;
        uint256 _hak = ex.sub(_dev);

        (new SafeSend).value(_dev)(developer);
        (new SafeSend).value(_hak)(hakka);
    }

    /**
     * @dev Distribute to internal
     */
    function distributeIn(address _buyer, uint256 _eth, uint256 _shares) internal {
        uint256 _gen = _eth.mul(3) / 20;

        // internal eth balance (eth = eth - (community share + ref share + dev share))
        _eth = _eth.sub(_eth / 4);

        // calculate pool
        uint256 _pool = _eth.sub(_gen);

        // distribute gen share and collect dust
        uint256 _dust = updateMasks(_buyer, _gen, _shares);

        // add eth to pool
        pool = pool.add(_dust).add(_pool);
    }

    function updateMasks(address  _player, uint256 _gen, uint256 _shares)
        private
        returns(uint256)
    {
        // calculate profit per share & global mask based on this buy: (dust goes to pool)
        uint256 _ppt = _gen.mul(1000000000000000000) / shares;
        mask = mask.add(_ppt);

        // calculate player earning from their own buy (only based on the shares
        // they just bought). & update player earnings mask
        uint256 _pearn = (_ppt.mul(_shares)) / 1000000000000000000;
        player[_player].mask = (((mask.mul(_shares)) / 1000000000000000000).sub(_pearn)).add(player[_player].mask);

        // calculate & return dust
        return(_gen.sub( _ppt.mul(shares) / 1000000000000000000));
    }

    /**
     * @dev Submit a claim from a beneficiary
     */
    function claim()
        isHuman()
        public
    {
        require(tick(), "not yet"); // MakerDAO shutdown!
        address payable beneficiary = msg.sender;
        updatePlayerUnit(beneficiary);
        uint256 amount = pool.mul(player[beneficiary].units) / issuedInsurance;
        player[beneficiary].units = 0;
        beneficiary.transfer(amount);
    }

    /**
     * @dev Withdraw dividends and ref
     */
    function withdraw()
        public
    {
        // get player earnings
        uint256 _eth;
        _eth = withdrawEarnings(msg.sender);

        // pay
        if (_eth > 0){
            if(msg.sender == tx.origin)
                msg.sender.transfer(_eth);
            else
                (new SafeSend).value(_eth)(msg.sender);
        }
    }

    function withdrawEarnings(address _player)
        private
        returns(uint256)
    {
        // update gen vault
        updateGenVault(_player);

        // from vaults
        uint256 _earnings = player[_player].gen.add(player[_player].ref);
        if (_earnings > 0) {
            player[_player].gen = 0;
            player[_player].ref = 0;
        }

        return(_earnings);
    }

    function updateGenVault(address _player)
        private
    {
        uint256 _earnings = calcUnMaskedEarnings(_player);
        if (_earnings > 0) {
            // put in gen vault
            player[_player].gen = _earnings.add(player[_player].gen);
            // zero out their earnings by updating mask
            player[_player].mask = _earnings.add(player[_player].mask);
        }
    }

    function calcUnMaskedEarnings(address _player)
        private
        view
        returns(uint256)
    {
        return (mask.mul(player[_player].shares) / 1000000000000000000).sub(player[_player].mask);
    }

    //******************
    // GETTERS
    //******************

    /**
     * @dev Return the price buyer will pay for next 1 individual share.
     * @return Price for next share bought (in wei format)
     */
    function getBuyPrice() external view returns(uint256) {
        return underwriter.burnShare(shares.add(1000000000000000000), 1000000000000000000);
    }

    /**
     * @dev Get the units of insurance of player
     * @return Amount of existing units of insurance
     */
    function getCurrentUnit(address _player)
        external
        view
        returns(uint256)
    {
        uint256 _unit = player[_player].units;
        uint256 _today = player[_player].plyrLastSeen;
        uint256 expiredUnit = 0;
        if(_today != 0) {
            while(_today < today){
                expiredUnit = expiredUnit.add(unitToExpirePlayer[_player][_today]);
                _today += 1;
            }

        }
        return _unit == 0 ? 0 : _unit.sub(expiredUnit);
    }

    /**
     * @dev Get the list of units of insurace going to expire of a player
     * @return List of units of insurance going to expire from a player
     */
    function getExpiringUnitListPlayer(address _player)
        external
        view
        returns(uint256[maxInsurePeriod] memory expiringUnitList)
    {
        for(uint256 i=0; i<maxInsurePeriod; i++) {
            expiringUnitList[i] = unitToExpirePlayer[_player][today+i];
        }
        return expiringUnitList;
    }

    /**
     * @dev Get the list of units of insurace going to expire
     * @return List of units of insurance going to expire
     */
    function getExpiringUnitList()
        external
        view
        returns(uint256[maxInsurePeriod] memory expiringUnitList)
    {
        for(uint256 i=0; i<maxInsurePeriod; i++){
            expiringUnitList[i] = unitToExpire[today+i];
        }
        return expiringUnitList;
    }

    //******************
    // ERC20
    //******************
    string  public constant name     = "Third Floor Mutual SAI";
    string  public constant symbol   = "3FMS";
    uint8   public constant decimals = 18;

    function totalSupply() external view returns(uint256) {
        return shares;
    }

    function balanceOf(address who) external view returns(uint256) {
        return player[who].shares;
    }

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

}

contract TOP {
    function caged() public returns(uint256);
}

contract TUB {
    function off() public returns(bool);
}

contract SafeSend {
    constructor(address payable to) public payable {
        selfdestruct(to);
    }
}

contract Underwriter {
    function mintShare(uint256 _curEth, uint256 _newEth) external pure returns (uint256);
    function burnShare(uint256 _curShares, uint256 _sellShares) external pure returns (uint256);
    function shares(uint256 _eth) public pure returns(uint256);
    function eth(uint256 _shares) public pure returns(uint256);
}


contract Agency {
    function register(string memory _input) public pure returns(bytes32);
}

library SafeMath {

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

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

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

    function sqrt(uint256 x)
        internal
        pure
        returns (uint256 y)
    {
        uint256 z = ((add(x, 1)) / 2);
        y = x;
        while (z < y)
        {
            y = z;
            z = ((add((x / z), z)) / 2);
        }
    }

    function sq(uint256 x)
        internal
        pure
        returns (uint256)
    {
        return (mul(x,x));
    }

    function pwr(uint256 x, uint256 y) internal pure returns(uint256 z) {
        z = 1;
        while(y != 0){
            if(y % 2 == 1)
                z = mul(z,x);
            x = sq(x);
            y = y / 2;
        }
        return z;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"uint256","name":"start","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"date","type":"uint256"}],"name":"BUYINSURANCE","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"agent","type":"address"},{"indexed":true,"internalType":"uint256","name":"level","type":"uint256"}],"name":"UPGRADE","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"_now","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"agents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"agentxID_","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"agentxName_","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_agentName","type":"bytes32"},{"internalType":"uint256","name":"_date","type":"uint256"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"_agent","type":"address"},{"internalType":"uint256","name":"_date","type":"uint256"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_agentId","type":"uint256"},{"internalType":"uint256","name":"_date","type":"uint256"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"end","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ended","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ethOfShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getBuyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_player","type":"address"}],"name":"getCurrentUnit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getExpiringUnitList","outputs":[{"internalType":"uint256[100]","name":"expiringUnitList","type":"uint256[100]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_player","type":"address"}],"name":"getExpiringUnitListPlayer","outputs":[{"internalType":"uint256[100]","name":"expiringUnitList","type":"uint256[100]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"issuedInsurance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mask","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"player","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes32","name":"name","type":"bytes32"},{"internalType":"uint256","name":"gen","type":"uint256"},{"internalType":"uint256","name":"ref","type":"uint256"},{"internalType":"bool","name":"isAgent","type":"bool"},{"internalType":"uint256","name":"eth","type":"uint256"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"units","type":"uint256"},{"internalType":"uint256","name":"plyrLastSeen","type":"uint256"},{"internalType":"uint256","name":"mask","type":"uint256"},{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"accumulatedRef","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_nameString","type":"string"}],"name":"register","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requirement","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"today","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"unitToExpire","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"unitToExpirePlayer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"upgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

600080546001600160a01b0319908116739b0ccf7c8994e19f39b2b4cf708e0a7df65fa8a317825560018054821673448a5065aebb8e423f0896e6c5d525c040f59af317905560028054821673e58cde3cbeecc8d9306f482729084b909afa235717905560038054909116737bc360ebd65efa503ff189a0f81f61f85d310ec3179055610d206040526080908152670de0b6b3a764000060a052671b9de674df07000060c052672937ea36b763400060e0526736af1c036c4df00061010052674403d4feb9031400610120526751366d68263b870061014052675e473c9d525c5f4061016052676b36991c33cecef061018052677804d885558f75d46101a0526784b24f9e0e03f2176101c05267913f5252b02558a16101e052679dac33b8b70e17be6102005267a9f94610ebf9a1bf6102205267b626dac986c418736102405267c235428048f80df76102605267ce24cd0493784b446102805267d9f5c95976d3693c6102a05267e5a885b7be4ee59f6102c05267f13d4f8ff5b73a5d6102e05267fcb4738c6a025b0f610300526801080e3d9324d1da26610320526801134af8c7e2e1d5686103405268011e6aef8e0571a7c1610360526801296e6b8a7eb33d1e6103805268013455b5a5b94dc4306103a05268013f21160d7b0059446103c052680149d0d436c271252c6103e0526801546536dfa0354b336104005268015ede84110b1de17d610420526801693d0120afd60fe06104405268017380f2b2bbde52476104605268017daa9cbba3f0bcf961048052680187ba4281e5da02c36104a052680191b0269fc5d2dee56104c05268019b8c8b05076566e86104e0526801a54fb0f8a1e9aaff610500526801aef9d91a70a4ee68610520526801b88b4364de96a458610540526801c2042f2e8dfe416c610560526801cb64db2bfba4d53f610580526801d4ad85711df543c16105a0526801ddde6b72ffedda1e6105c0526801e6f7ca0957f5df9e6105e0526801eff9dd701aa1a79f610600526801f8e4e149096f8ee861062052680201b9109d3d8833e16106405268020a76a5deae8c1ee1610660526802131ddae9b578f59c6106805268021baee9068bb03ad56106a0526802242a08eac62981ec6106c05268022c8f72baccd9e4766106e052680234df5e0b4e5a6efa6107005268023d1a01e2afd72111610720526802453f94ba795004936107405268024d504c80be35c717610760526802554c5e99826b28f06107805268025d33ffe01bb47d026107a0526802650764a88f9e5d0a6107c05268026cc6c0c0ede49eab6107e052680274724772a7627e5c6108005268027c0a2b83e194de60610820526802838e9f38c6b761456108405268028affd454d28510f0610860526802925dfc1c1ba52cee61088052680299a9475499cca4cd6108a0526802a0e1e647689cad656108c0526802a80808c20746ca616108e0526802af1bde1794fe9009610900526802b61d95220a414c09610920526802bd0d5c436efbaf1d610940526802c3eb61670d957cb9610960526802cab7d202a2eb313c610980526802d172db178b3d7afb6109a0526802d81ca933ec1e4e3b6109c0526802deb56873db6348546109e0526802e53d44828325027c610a00526802ebb4689b42d2e12e610a20526802f21aff8acd62d9cf610a40526802f87133b044a49512610a60526802feb72efe51bf41a9610a8052680304ed1afc3ae1580b610aa05268030b1320c6f6297d90610ac05268031129691239cfa2b5610ae052680317301c2989956633610b005268031d2761f14184b48a610b20526803230f61e79e0389c6610b4052680328e84325c143a9ad610b605268032eb22c60b61510f0610b80526803346d43ea7021d0c5610ba05268033a19afb2c999f515610bc05268033fb795487e56048d610be0526803454719da247698fc610c005268034ac8623722877ddb610c20526803503b92d0a32cb25b610c4052680355a0cfba865f9c18610c605268035af83cac5042a755610c805268036041fd02159181d2610ca0526803657e33bd65b40d52610cc05268036aad0386327a176d610ce05268036fce8eabb585d4a2610d0052620005fe906013906065620006c7565b506040805161014081018252600081526701068312e0059e8560208201526702c994e4e64bc24291810191909152670793b7482530c0ce6060820152671498b1d19b06ae7a60808201526737fcab8092fd2d7860a08201526798303c794a6def5560c082015268019db0e6f447db64d360e0820152680464875f006314189d610100820152680bf0c943643f76e5d7610120820152620006a390607890600a62000715565b50348015620006b157600080fd5b5042600d819055620151809004600c5562000770565b826065810192821562000703579160200282015b828111156200070357825182906001600160481b0316905591602001919060010190620006db565b506200071192915062000750565b5090565b82600a81019282156200070357916020028201828111156200070357825182906001600160481b0316905591602001919060010190620006db565b6200076d91905b8082111562000711576000815560010162000757565b90565b611f1f80620007806000396000f3fe6080604052600436106101f95760003560e01c8063585166611161010d578063b74e452b116100a0578063d93be4331161006f578063d93be433146106c2578063e7ee6ad6146106ec578063efbe1c1c14610716578063f0da93441461072b578063f2c298be14610740576101f9565b8063b74e452b14610649578063cce7ec131461065e578063d55ec6971461068a578063d6febde81461069f576101f9565b806395d89b41116100dc57806395d89b41146105f5578063a6f2ae3a146101f9578063aaaadb581461060a578063b3bb8cd414610634576101f9565b8063585166611461055057806370a0823114610565578063729fc61314610598578063757b0884146105cb576101f9565b806318160ddd116101905780633ef7c6871161015f5780633ef7c68714610413578063402e912f14610461578063489b3fee146104765780634c54e1b5146104a95780634e71d92d1461053b576101f9565b806318160ddd14610385578063274806e01461039a578063313ce567146103d35780633ccfd60b146103fe576101f9565b8063116134ee116101cc578063116134ee146102ec57806312fa6feb1461030157806316f0115b1461032a57806317604f711461033f576101f9565b8063018a25e81461020357806303314efa1461022a57806306fdde031461023f5780630ddeb632146102c9575b6102016107b0565b005b34801561020f57600080fd5b5061021861080f565b60408051918252519081900360200190f35b34801561023657600080fd5b506102186108b5565b34801561024b57600080fd5b506102546108bb565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028e578181015183820152602001610276565b50505050905090810190601f1680156102bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610201600480360360408110156102df57600080fd5b50803590602001356108ed565b3480156102f857600080fd5b5061021861099e565b34801561030d57600080fd5b506103166109a4565b604080519115158252519081900360200190f35b34801561033657600080fd5b506102186109ad565b34801561034b57600080fd5b506103696004803603602081101561036257600080fd5b50356109b3565b604080516001600160a01b039092168252519081900360200190f35b34801561039157600080fd5b506102186109ce565b3480156103a657600080fd5b50610218600480360360408110156103bd57600080fd5b506001600160a01b0381351690602001356109d4565b3480156103df57600080fd5b506103e86109f1565b6040805160ff9092168252519081900360200190f35b34801561040a57600080fd5b506102016109f6565b34801561041f57600080fd5b50610428610a85565b6040518082610c8080838360005b8381101561044e578181015183820152602001610436565b5050505090500191505060405180910390f35b34801561046d57600080fd5b50610218610aca565b34801561048257600080fd5b506104286004803603602081101561049957600080fd5b50356001600160a01b0316610ad0565b3480156104b557600080fd5b506104dc600480360360208110156104cc57600080fd5b50356001600160a01b0316610b2b565b604080519c8d5260208d019b909b528b8b019990995260608b019790975294151560808a015260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b34801561054757600080fd5b50610201610b8e565b34801561055c57600080fd5b50610218610cac565b34801561057157600080fd5b506102186004803603602081101561058857600080fd5b50356001600160a01b0316610cb2565b3480156105a457600080fd5b50610218600480360360208110156105bb57600080fd5b50356001600160a01b0316610cd0565b3480156105d757600080fd5b50610218600480360360208110156105ee57600080fd5b5035610d6e565b34801561060157600080fd5b50610254610d82565b34801561061657600080fd5b506102186004803603602081101561062d57600080fd5b5035610da2565b34801561064057600080fd5b50610218610db4565b34801561065557600080fd5b50610218610dba565b6102016004803603604081101561067457600080fd5b506001600160a01b038135169060200135610dc0565b34801561069657600080fd5b50610201610e75565b610201600480360360408110156106b557600080fd5b5080359060200135610fc5565b3480156106ce57600080fd5b50610369600480360360208110156106e557600080fd5b503561106a565b3480156106f857600080fd5b506102186004803603602081101561070f57600080fd5b5035611085565b34801561072257600080fd5b50610218611092565b34801561073757600080fd5b50610218611098565b6102016004803603602081101561075657600080fd5b81019060208101813564010000000081111561077157600080fd5b82018360208201111561078357600080fd5b803590602001918460018302840111640100000000831117156107a557600080fd5b50909250905061109e565b6107b861134e565b156108005734336040516107cb90611e6c565b6001600160a01b039091168152604051908190036020019082f0801580156107f7573d6000803e3d6000fd5b5090505061080d565b61080d33346000806114de565b565b600254600a546000916001600160a01b031690636deba2289061084090670de0b6b3a764000063ffffffff61188716565b670de0b6b3a76400006040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561088457600080fd5b505afa158015610898573d6000803e3d6000fd5b505050506040513d60208110156108ae57600080fd5b5051905090565b600a5481565b60405180604001604052806016815260200175546869726420466c6f6f72204d757475616c2053414960501b81525081565b333214610935576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b61093d61134e565b156109745760405133903480156108fc02916000818181858888f1935050505015801561096e573d6000803e3d6000fd5b5061099a565b6000828152601260205260409020546001600160a01b0316610998333484846114de565b505b5050565b600e5481565b60055460ff1681565b600b5481565b6012602052600090815260409020546001600160a01b031681565b600a5490565b600660209081526000928352604080842090915290825290205481565b601281565b6000610a013361189d565b90508015610a825733321415610a4457604051339082156108fc029083906000818181858888f19350505050158015610a3e573d6000803e3d6000fd5b50610a82565b8033604051610a5290611e6c565b6001600160a01b039091168152604051908190036020019082f080158015610a7e573d6000803e3d6000fd5b5050505b50565b610a8d611e78565b60005b6064811015610ac657600c548101600090815260076020526040902054828260648110610ab957fe5b6020020152600101610a90565b5090565b60085481565b610ad8611e78565b60005b6064811015610b25576001600160a01b0383166000908152600660209081526040808320600c5485018452909152902054828260648110610b1857fe5b6020020152600101610adb565b50919050565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b909b0154999a98999798969760ff90961696949593949293919290918c565b333214610bd6576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b610bde61134e565b610c19576040805162461bcd60e51b81526020600482015260076024820152661b9bdd081e595d60ca1b604482015290519081900360640190fd5b33610c238161190b565b6008546001600160a01b038216600090815260106020526040812060070154600b54919291610c579163ffffffff6119e816565b81610c5e57fe5b6001600160a01b038416600081815260106020526040808220600701829055519390920493509183156108fc0291849190818181858888f19350505050158015610998573d6000803e3d6000fd5b600f5481565b6001600160a01b031660009081526010602052604090206006015490565b6001600160a01b03811660009081526010602052604081206007810154600890910154828115610d47575b600c54821015610d47576001600160a01b0385166000908152600660209081526040808320858452909152902054610d3a90829063ffffffff61188716565b9050600182019150610cfb565b8215610d6257610d5d838263ffffffff611a1016565b610d65565b60005b95945050505050565b607881600a8110610d7b57fe5b0154905081565b6040518060400160405280600481526020016333464d5360e01b81525081565b60076020526000908152604090205481565b600d5481565b600c5481565b333214610e08576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b610e1061134e565b15610e415760405133903480156108fc02916000818181858888f1935050505015801561096e573d6000803e3d6000fd5b6001600160a01b03821660009081526010602052604090206004015460ff16610e6957600091505b61099a333483856114de565b333214610ebd576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b3360008181526010602052604090206004015460ff16610edc57600080fd5b6001600160a01b0381166000908152601060205260409020600a9081015410610f0457600080fd5b6001600160a01b0381166000908152601060205260409020600a908101546078918110610f2d57fe5b01546001600160a01b0382166000908152601060205260409020600b015410610a82576001600160a01b0381166000908152601060205260409020600a0154610f7e9060019063ffffffff61188716565b6001600160a01b038216600081815260106020526040808220600a01849055517f082e58bd2e7f7268b36ef0ce2331f7bfd29c08979529cbe85f06375fcecd43729190a350565b33321461100d576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b61101561134e565b156110465760405133903480156108fc02916000818181858888f1935050505015801561096e573d6000803e3d6000fd5b6000828152601160205260409020546001600160a01b0316610998333484846114de565b6011602052600090815260409020546001600160a01b031681565b60138160658110610d7b57fe5b60045481565b60095481565b3332146110e6576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b6003546040516379614c5f60e11b8152602060048201908152602482018490526000926001600160a01b03169163f2c298be9186918691908190604401848480828437600083820152604051601f909101601f191690920195506020945090925050508083038186803b15801561115c57600080fd5b505afa158015611170573d6000803e3d6000fd5b505050506040513d602081101561118657600080fd5b5051905033662386f26fc100003410156111dd576040805162461bcd60e51b81526020600482015260136024820152721a5b9cdd59999a58da595b9d08185b5bdd5b9d606a1b604482015290519081900360640190fd5b6000828152601260205260409020546001600160a01b031615611239576040805162461bcd60e51b815260206004820152600f60248201526e1b985b59481c9959da5cdd195c9959608a1b604482015290519081900360640190fd5b6001600160a01b03811660009081526010602052604090206004015460ff166112b857600f8054600190810182556001600160a01b038316600081815260106020908152604080832060048101805460ff19168717905586548155600a0194909455935481526011909352912080546001600160a01b03191690911790555b6001600160a01b038116600081815260106020908152604080832060010186905585835260129091529081902080546001600160a01b03191690921790915551349073d0533664013a82c31584b7ffdb215139f38ad77a9061131990611e6c565b6001600160a01b039091168152604051908190036020019082f080158015611345573d6000803e3d6000fd5b50505050505050565b60055460009060ff166114d45742600d54146114d45742600d5560015460408051636626b26d60e01b815290516000926001600160a01b031691636626b26d91600480830192602092919082900301818787803b1580156113ae57600080fd5b505af11580156113c2573d6000803e3d6000fd5b505050506040513d60208110156113d857600080fd5b50516005805460ff1916911515919091179055600080546040805163f83e579360e01b815290516001600160a01b039092169263f83e5793926004808401936020939083900390910190829087803b15801561143357600080fd5b505af1158015611447573d6000803e3d6000fd5b505050506040513d602081101561145d57600080fd5b505160045560055460ff166114805762015180600d548161147a57fe5b04611490565b620151806004548161148e57fe5b045b90505b80600c5410156114d257600c546000908152600760205260409020546008546114c19163ffffffff611a1016565b600855600c80546001019055611493565b505b5060055460ff1690565b6114e78461190b565b633b9aca0083101561152a5760405162461bcd60e51b8152600401808060200182810382526021815260200180611eca6021913960400191505060405180910390fd5b69021e19e0c9bab240000083111561157a576040805162461bcd60e51b815260206004820152600e60248201526d6e6f20766974616c696b2c206e6f60901b604482015290519081900360640190fd5b606482111561158857606491505b60006013836065811061159757fe5b0154670de0b6b3a76400000190506000816115c3670de0b6b3a7640000876119e890919063ffffffff16565b816115ca57fe5b0490506000600260009054906101000a90046001600160a01b03166001600160a01b03166310a76c2e600954846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561163257600080fd5b505afa158015611646573d6000803e3d6000fd5b505050506040513d602081101561165c57600080fd5b505190506000851561166e5781611671565b60005b600c546009549192508701600019019061168b9085611887565b600955600a546116a1908463ffffffff61188716565b600a556000818152600760205260409020546116c3908363ffffffff61188716565b6000828152600760205260409020556008546116e5908363ffffffff61188716565b6008556001600160a01b038916600090815260106020526040902060050154611714908963ffffffff61188716565b6001600160a01b038a166000908152601060205260409020600581019190915560060154611748908463ffffffff61188716565b6001600160a01b038a16600090815260106020526040902060068101919091556007015461177c908363ffffffff61188716565b6001600160a01b038a1660009081526010602090815260408083206007019390935560068152828220848352905220546117bc908363ffffffff61188716565b6001600160a01b038a1660009081526006602090815260408083208584529091529020556117ea8887611a25565b6117f5898985611beb565b600c5460408051848152602081018a905281516001600160a01b038d16927f4b9622a7ffcb20551847f4dd71b5b98c4267e10d7d338a6c7fb7b26d45d854e0928290030190a36040805183815290516001600160a01b038b16916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505050505050505050565b8181018281101561189757600080fd5b92915050565b60006118a882611c6c565b6001600160a01b038216600090815260106020526040812060038101546002909101546118da9163ffffffff61188716565b90508015611897576001600160a01b0383166000908152601060205260408120600281018290556003015592915050565b6001600160a01b0381166000908152601060205260408120600801549081156119c4575b600c5482101561197b576001600160a01b038316600090815260066020908152604080832085845290915290205461196e90829063ffffffff61188716565b905060018201915061192f565b6001600160a01b0383166000908152601060205260409020600701546119a7908263ffffffff611a1016565b6001600160a01b0384166000908152601060205260409020600701555b5050600c546001600160a01b03909116600090815260106020526040902060080155565b6000826119f757506000611897565b5081810281838281611a0557fe5b041461189757600080fd5b600082821115611a1f57600080fd5b50900390565b6001600160a01b03811660009081526010602052604090206004908101549083049060ff1615611b2f576001600160a01b0382166000908152601060205260408120600a0154611a7c90600663ffffffff61188716565b905060006064611a92868463ffffffff6119e816565b81611a9957fe5b6001600160a01b0386166000908152601060205260409020600301549190049150611aca908263ffffffff61188716565b6001600160a01b03851660009081526010602052604090206003810191909155600b0154611afe908263ffffffff61188716565b6001600160a01b0385166000908152601060205260409020600b0155611b2a838263ffffffff611a1016565b925050505b600381046000611b3f8383611a10565b905081731e20b7d24d429b0de705d3ff8b88ec651d28a935604051611b6390611e6c565b6001600160a01b039091168152604051908190036020019082f080158015611b8f573d6000803e3d6000fd5b509050508073d0533664013a82c31584b7ffdb215139f38ad77a604051611bb590611e6c565b6001600160a01b039091168152604051908190036020019082f080158015611be1573d6000803e3d6000fd5b5050505050505050565b60006014611c0084600363ffffffff6119e816565b81611c0757fe5b049050611c178360048104611a10565b92506000611c2b848363ffffffff611a1016565b90506000611c3a868486611d01565b9050611c6182611c5583600b5461188790919063ffffffff16565b9063ffffffff61188716565b600b55505050505050565b6000611c7782611e28565b9050801561099a576001600160a01b038216600090815260106020526040902060020154611cac90829063ffffffff61188716565b6001600160a01b0383166000908152601060205260409020600281019190915560090154611ce190829063ffffffff61188716565b6001600160a01b0383166000908152601060205260409020600901555050565b600a546000908190611d2185670de0b6b3a764000063ffffffff6119e816565b81611d2857fe5b049050611d4081600e5461188790919063ffffffff16565b600e556000670de0b6b3a7640000611d5e838663ffffffff6119e816565b81611d6557fe5b049050611dca60106000886001600160a01b03166001600160a01b0316815260200190815260200160002060090154611c5583670de0b6b3a7640000611db689600e546119e890919063ffffffff16565b81611dbd57fe5b049063ffffffff611a1016565b6001600160a01b038716600090815260106020526040902060090155600a54611e1e90670de0b6b3a764000090611e0890859063ffffffff6119e816565b81611e0f57fe5b8791900463ffffffff611a1016565b9695505050505050565b6001600160a01b03811660009081526010602052604081206009810154600690910154600e546118979291670de0b6b3a764000091611db69163ffffffff6119e816565b603280611e9883390190565b60405180610c800160405280606490602082028038833950919291505056fe60806040526040516032380380603283398181016040526020811015602357600080fd5b50516001600160a01b038116fffe706f636b6574206c696e743a206e6f7420612076616c69642063757272656e6379a265627a7a72315820ed472ea9c4fbf6fee5152a7a8ee630fc7c455bfe498e032d01c7e1c3f9d1e8e964736f6c63430005100032

Deployed Bytecode

0x6080604052600436106101f95760003560e01c8063585166611161010d578063b74e452b116100a0578063d93be4331161006f578063d93be433146106c2578063e7ee6ad6146106ec578063efbe1c1c14610716578063f0da93441461072b578063f2c298be14610740576101f9565b8063b74e452b14610649578063cce7ec131461065e578063d55ec6971461068a578063d6febde81461069f576101f9565b806395d89b41116100dc57806395d89b41146105f5578063a6f2ae3a146101f9578063aaaadb581461060a578063b3bb8cd414610634576101f9565b8063585166611461055057806370a0823114610565578063729fc61314610598578063757b0884146105cb576101f9565b806318160ddd116101905780633ef7c6871161015f5780633ef7c68714610413578063402e912f14610461578063489b3fee146104765780634c54e1b5146104a95780634e71d92d1461053b576101f9565b806318160ddd14610385578063274806e01461039a578063313ce567146103d35780633ccfd60b146103fe576101f9565b8063116134ee116101cc578063116134ee146102ec57806312fa6feb1461030157806316f0115b1461032a57806317604f711461033f576101f9565b8063018a25e81461020357806303314efa1461022a57806306fdde031461023f5780630ddeb632146102c9575b6102016107b0565b005b34801561020f57600080fd5b5061021861080f565b60408051918252519081900360200190f35b34801561023657600080fd5b506102186108b5565b34801561024b57600080fd5b506102546108bb565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028e578181015183820152602001610276565b50505050905090810190601f1680156102bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610201600480360360408110156102df57600080fd5b50803590602001356108ed565b3480156102f857600080fd5b5061021861099e565b34801561030d57600080fd5b506103166109a4565b604080519115158252519081900360200190f35b34801561033657600080fd5b506102186109ad565b34801561034b57600080fd5b506103696004803603602081101561036257600080fd5b50356109b3565b604080516001600160a01b039092168252519081900360200190f35b34801561039157600080fd5b506102186109ce565b3480156103a657600080fd5b50610218600480360360408110156103bd57600080fd5b506001600160a01b0381351690602001356109d4565b3480156103df57600080fd5b506103e86109f1565b6040805160ff9092168252519081900360200190f35b34801561040a57600080fd5b506102016109f6565b34801561041f57600080fd5b50610428610a85565b6040518082610c8080838360005b8381101561044e578181015183820152602001610436565b5050505090500191505060405180910390f35b34801561046d57600080fd5b50610218610aca565b34801561048257600080fd5b506104286004803603602081101561049957600080fd5b50356001600160a01b0316610ad0565b3480156104b557600080fd5b506104dc600480360360208110156104cc57600080fd5b50356001600160a01b0316610b2b565b604080519c8d5260208d019b909b528b8b019990995260608b019790975294151560808a015260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b34801561054757600080fd5b50610201610b8e565b34801561055c57600080fd5b50610218610cac565b34801561057157600080fd5b506102186004803603602081101561058857600080fd5b50356001600160a01b0316610cb2565b3480156105a457600080fd5b50610218600480360360208110156105bb57600080fd5b50356001600160a01b0316610cd0565b3480156105d757600080fd5b50610218600480360360208110156105ee57600080fd5b5035610d6e565b34801561060157600080fd5b50610254610d82565b34801561061657600080fd5b506102186004803603602081101561062d57600080fd5b5035610da2565b34801561064057600080fd5b50610218610db4565b34801561065557600080fd5b50610218610dba565b6102016004803603604081101561067457600080fd5b506001600160a01b038135169060200135610dc0565b34801561069657600080fd5b50610201610e75565b610201600480360360408110156106b557600080fd5b5080359060200135610fc5565b3480156106ce57600080fd5b50610369600480360360208110156106e557600080fd5b503561106a565b3480156106f857600080fd5b506102186004803603602081101561070f57600080fd5b5035611085565b34801561072257600080fd5b50610218611092565b34801561073757600080fd5b50610218611098565b6102016004803603602081101561075657600080fd5b81019060208101813564010000000081111561077157600080fd5b82018360208201111561078357600080fd5b803590602001918460018302840111640100000000831117156107a557600080fd5b50909250905061109e565b6107b861134e565b156108005734336040516107cb90611e6c565b6001600160a01b039091168152604051908190036020019082f0801580156107f7573d6000803e3d6000fd5b5090505061080d565b61080d33346000806114de565b565b600254600a546000916001600160a01b031690636deba2289061084090670de0b6b3a764000063ffffffff61188716565b670de0b6b3a76400006040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561088457600080fd5b505afa158015610898573d6000803e3d6000fd5b505050506040513d60208110156108ae57600080fd5b5051905090565b600a5481565b60405180604001604052806016815260200175546869726420466c6f6f72204d757475616c2053414960501b81525081565b333214610935576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b61093d61134e565b156109745760405133903480156108fc02916000818181858888f1935050505015801561096e573d6000803e3d6000fd5b5061099a565b6000828152601260205260409020546001600160a01b0316610998333484846114de565b505b5050565b600e5481565b60055460ff1681565b600b5481565b6012602052600090815260409020546001600160a01b031681565b600a5490565b600660209081526000928352604080842090915290825290205481565b601281565b6000610a013361189d565b90508015610a825733321415610a4457604051339082156108fc029083906000818181858888f19350505050158015610a3e573d6000803e3d6000fd5b50610a82565b8033604051610a5290611e6c565b6001600160a01b039091168152604051908190036020019082f080158015610a7e573d6000803e3d6000fd5b5050505b50565b610a8d611e78565b60005b6064811015610ac657600c548101600090815260076020526040902054828260648110610ab957fe5b6020020152600101610a90565b5090565b60085481565b610ad8611e78565b60005b6064811015610b25576001600160a01b0383166000908152600660209081526040808320600c5485018452909152902054828260648110610b1857fe5b6020020152600101610adb565b50919050565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b909b0154999a98999798969760ff90961696949593949293919290918c565b333214610bd6576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b610bde61134e565b610c19576040805162461bcd60e51b81526020600482015260076024820152661b9bdd081e595d60ca1b604482015290519081900360640190fd5b33610c238161190b565b6008546001600160a01b038216600090815260106020526040812060070154600b54919291610c579163ffffffff6119e816565b81610c5e57fe5b6001600160a01b038416600081815260106020526040808220600701829055519390920493509183156108fc0291849190818181858888f19350505050158015610998573d6000803e3d6000fd5b600f5481565b6001600160a01b031660009081526010602052604090206006015490565b6001600160a01b03811660009081526010602052604081206007810154600890910154828115610d47575b600c54821015610d47576001600160a01b0385166000908152600660209081526040808320858452909152902054610d3a90829063ffffffff61188716565b9050600182019150610cfb565b8215610d6257610d5d838263ffffffff611a1016565b610d65565b60005b95945050505050565b607881600a8110610d7b57fe5b0154905081565b6040518060400160405280600481526020016333464d5360e01b81525081565b60076020526000908152604090205481565b600d5481565b600c5481565b333214610e08576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b610e1061134e565b15610e415760405133903480156108fc02916000818181858888f1935050505015801561096e573d6000803e3d6000fd5b6001600160a01b03821660009081526010602052604090206004015460ff16610e6957600091505b61099a333483856114de565b333214610ebd576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b3360008181526010602052604090206004015460ff16610edc57600080fd5b6001600160a01b0381166000908152601060205260409020600a9081015410610f0457600080fd5b6001600160a01b0381166000908152601060205260409020600a908101546078918110610f2d57fe5b01546001600160a01b0382166000908152601060205260409020600b015410610a82576001600160a01b0381166000908152601060205260409020600a0154610f7e9060019063ffffffff61188716565b6001600160a01b038216600081815260106020526040808220600a01849055517f082e58bd2e7f7268b36ef0ce2331f7bfd29c08979529cbe85f06375fcecd43729190a350565b33321461100d576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b61101561134e565b156110465760405133903480156108fc02916000818181858888f1935050505015801561096e573d6000803e3d6000fd5b6000828152601160205260409020546001600160a01b0316610998333484846114de565b6011602052600090815260409020546001600160a01b031681565b60138160658110610d7b57fe5b60045481565b60095481565b3332146110e6576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b6003546040516379614c5f60e11b8152602060048201908152602482018490526000926001600160a01b03169163f2c298be9186918691908190604401848480828437600083820152604051601f909101601f191690920195506020945090925050508083038186803b15801561115c57600080fd5b505afa158015611170573d6000803e3d6000fd5b505050506040513d602081101561118657600080fd5b5051905033662386f26fc100003410156111dd576040805162461bcd60e51b81526020600482015260136024820152721a5b9cdd59999a58da595b9d08185b5bdd5b9d606a1b604482015290519081900360640190fd5b6000828152601260205260409020546001600160a01b031615611239576040805162461bcd60e51b815260206004820152600f60248201526e1b985b59481c9959da5cdd195c9959608a1b604482015290519081900360640190fd5b6001600160a01b03811660009081526010602052604090206004015460ff166112b857600f8054600190810182556001600160a01b038316600081815260106020908152604080832060048101805460ff19168717905586548155600a0194909455935481526011909352912080546001600160a01b03191690911790555b6001600160a01b038116600081815260106020908152604080832060010186905585835260129091529081902080546001600160a01b03191690921790915551349073d0533664013a82c31584b7ffdb215139f38ad77a9061131990611e6c565b6001600160a01b039091168152604051908190036020019082f080158015611345573d6000803e3d6000fd5b50505050505050565b60055460009060ff166114d45742600d54146114d45742600d5560015460408051636626b26d60e01b815290516000926001600160a01b031691636626b26d91600480830192602092919082900301818787803b1580156113ae57600080fd5b505af11580156113c2573d6000803e3d6000fd5b505050506040513d60208110156113d857600080fd5b50516005805460ff1916911515919091179055600080546040805163f83e579360e01b815290516001600160a01b039092169263f83e5793926004808401936020939083900390910190829087803b15801561143357600080fd5b505af1158015611447573d6000803e3d6000fd5b505050506040513d602081101561145d57600080fd5b505160045560055460ff166114805762015180600d548161147a57fe5b04611490565b620151806004548161148e57fe5b045b90505b80600c5410156114d257600c546000908152600760205260409020546008546114c19163ffffffff611a1016565b600855600c80546001019055611493565b505b5060055460ff1690565b6114e78461190b565b633b9aca0083101561152a5760405162461bcd60e51b8152600401808060200182810382526021815260200180611eca6021913960400191505060405180910390fd5b69021e19e0c9bab240000083111561157a576040805162461bcd60e51b815260206004820152600e60248201526d6e6f20766974616c696b2c206e6f60901b604482015290519081900360640190fd5b606482111561158857606491505b60006013836065811061159757fe5b0154670de0b6b3a76400000190506000816115c3670de0b6b3a7640000876119e890919063ffffffff16565b816115ca57fe5b0490506000600260009054906101000a90046001600160a01b03166001600160a01b03166310a76c2e600954846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561163257600080fd5b505afa158015611646573d6000803e3d6000fd5b505050506040513d602081101561165c57600080fd5b505190506000851561166e5781611671565b60005b600c546009549192508701600019019061168b9085611887565b600955600a546116a1908463ffffffff61188716565b600a556000818152600760205260409020546116c3908363ffffffff61188716565b6000828152600760205260409020556008546116e5908363ffffffff61188716565b6008556001600160a01b038916600090815260106020526040902060050154611714908963ffffffff61188716565b6001600160a01b038a166000908152601060205260409020600581019190915560060154611748908463ffffffff61188716565b6001600160a01b038a16600090815260106020526040902060068101919091556007015461177c908363ffffffff61188716565b6001600160a01b038a1660009081526010602090815260408083206007019390935560068152828220848352905220546117bc908363ffffffff61188716565b6001600160a01b038a1660009081526006602090815260408083208584529091529020556117ea8887611a25565b6117f5898985611beb565b600c5460408051848152602081018a905281516001600160a01b038d16927f4b9622a7ffcb20551847f4dd71b5b98c4267e10d7d338a6c7fb7b26d45d854e0928290030190a36040805183815290516001600160a01b038b16916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505050505050505050565b8181018281101561189757600080fd5b92915050565b60006118a882611c6c565b6001600160a01b038216600090815260106020526040812060038101546002909101546118da9163ffffffff61188716565b90508015611897576001600160a01b0383166000908152601060205260408120600281018290556003015592915050565b6001600160a01b0381166000908152601060205260408120600801549081156119c4575b600c5482101561197b576001600160a01b038316600090815260066020908152604080832085845290915290205461196e90829063ffffffff61188716565b905060018201915061192f565b6001600160a01b0383166000908152601060205260409020600701546119a7908263ffffffff611a1016565b6001600160a01b0384166000908152601060205260409020600701555b5050600c546001600160a01b03909116600090815260106020526040902060080155565b6000826119f757506000611897565b5081810281838281611a0557fe5b041461189757600080fd5b600082821115611a1f57600080fd5b50900390565b6001600160a01b03811660009081526010602052604090206004908101549083049060ff1615611b2f576001600160a01b0382166000908152601060205260408120600a0154611a7c90600663ffffffff61188716565b905060006064611a92868463ffffffff6119e816565b81611a9957fe5b6001600160a01b0386166000908152601060205260409020600301549190049150611aca908263ffffffff61188716565b6001600160a01b03851660009081526010602052604090206003810191909155600b0154611afe908263ffffffff61188716565b6001600160a01b0385166000908152601060205260409020600b0155611b2a838263ffffffff611a1016565b925050505b600381046000611b3f8383611a10565b905081731e20b7d24d429b0de705d3ff8b88ec651d28a935604051611b6390611e6c565b6001600160a01b039091168152604051908190036020019082f080158015611b8f573d6000803e3d6000fd5b509050508073d0533664013a82c31584b7ffdb215139f38ad77a604051611bb590611e6c565b6001600160a01b039091168152604051908190036020019082f080158015611be1573d6000803e3d6000fd5b5050505050505050565b60006014611c0084600363ffffffff6119e816565b81611c0757fe5b049050611c178360048104611a10565b92506000611c2b848363ffffffff611a1016565b90506000611c3a868486611d01565b9050611c6182611c5583600b5461188790919063ffffffff16565b9063ffffffff61188716565b600b55505050505050565b6000611c7782611e28565b9050801561099a576001600160a01b038216600090815260106020526040902060020154611cac90829063ffffffff61188716565b6001600160a01b0383166000908152601060205260409020600281019190915560090154611ce190829063ffffffff61188716565b6001600160a01b0383166000908152601060205260409020600901555050565b600a546000908190611d2185670de0b6b3a764000063ffffffff6119e816565b81611d2857fe5b049050611d4081600e5461188790919063ffffffff16565b600e556000670de0b6b3a7640000611d5e838663ffffffff6119e816565b81611d6557fe5b049050611dca60106000886001600160a01b03166001600160a01b0316815260200190815260200160002060090154611c5583670de0b6b3a7640000611db689600e546119e890919063ffffffff16565b81611dbd57fe5b049063ffffffff611a1016565b6001600160a01b038716600090815260106020526040902060090155600a54611e1e90670de0b6b3a764000090611e0890859063ffffffff6119e816565b81611e0f57fe5b8791900463ffffffff611a1016565b9695505050505050565b6001600160a01b03811660009081526010602052604081206009810154600690910154600e546118979291670de0b6b3a764000091611db69163ffffffff6119e816565b603280611e9883390190565b60405180610c800160405280606490602082028038833950919291505056fe60806040526040516032380380603283398181016040526020811015602357600080fd5b50516001600160a01b038116fffe706f636b6574206c696e743a206e6f7420612076616c69642063757272656e6379a265627a7a72315820ed472ea9c4fbf6fee5152a7a8ee630fc7c455bfe498e032d01c7e1c3f9d1e8e964736f6c63430005100032

Deployed Bytecode Sourcemap

28:18838:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10126:5;:3;:5::i;:::-;28:18838;16594:155;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16594:155:0;;;:::i;:::-;;;;;;;;;;;;;;;;1674:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1674:21:0;;;:::i;18419:59::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18419:59:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18419:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9356:390;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9356:390:0;;;;;;;:::i;1913:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1913:19:0;;;:::i;1267:17::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1267:17:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;1737:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1737:19:0;;;:::i;2186:46::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2186:46:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2186:46:0;;:::i;:::-;;;;-1:-1:-1;;;;;2186:46:0;;;;;;;;;;;;;;18579:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18579:86:0;;;:::i;1372:73::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1372:73:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1372:73:0;;;;;;;;:::i;18533:37::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18533:37:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14944:363;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14944:363:0;;;:::i;18048:297::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18048:297:0;;;:::i;:::-;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18048:297:0;;;;;;;;;;;;;;;;1542:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1542:30:0;;;:::i;17566:334::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17566:334:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17566:334:0;-1:-1:-1;;;;;17566:334:0;;:::i;2043:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2043:40:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2043:40:0;-1:-1:-1;;;;;2043:40:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14503:375;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14503:375:0;;;:::i;1965:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1965:21:0;;;:::i;18673:107::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18673:107:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18673:107:0;-1:-1:-1;;;;;18673:107:0;;:::i;16879:513::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16879:513:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16879:513:0;-1:-1:-1;;;;;16879:513:0;;:::i;5193:276::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5193:276:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5193:276:0;;:::i;18485:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18485:41:0;;;:::i;1452:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1452:47:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1452:47:0;;:::i;1860:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1860:19:0;;;:::i;1807:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1807:20:0;;;:::i;8492:404::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8492:404:0;;;;;;;;:::i;8033:417::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8033:417:0;;;:::i;8933:384::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8933:384:0;;;;;;;:::i;2105:44::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2105:44:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2105:44:0;;:::i;2424:2725::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2424:2725:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2424:2725:0;;:::i;1242:18::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1242:18:0;;;:::i;1603:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1603:25:0;;;:::i;7147:765::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7147:765:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;7147:765:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7147:765:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;7147:765:0;;-1:-1:-1;7147:765:0;-1:-1:-1;7147:765:0;:::i;9811:250::-;9897:6;:4;:6::i;:::-;9894:102;;;9941:9;9952:10;9920:43;;;;;:::i;:::-;-1:-1:-1;;;;;9920:43:0;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9920:43:0;;;;9978:7;;9894:102;10008:45;10016:10;10028:9;10039:1;10050;10008:7;:45::i;:::-;9811:250::o;16594:155::-;16666:11;;16688:6;;16639:7;;-1:-1:-1;;;;;16666:11:0;;:21;;16688:31;;16699:19;16688:31;:10;:31;:::i;:::-;16721:19;16666:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16666:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16666:75:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16666:75:0;;-1:-1:-1;16594:155:0;:::o;1674:21::-;;;;:::o;18419:59::-;;;;;;;;;;;;;;-1:-1:-1;;;18419:59:0;;;;:::o;9356:390::-;5824:10;5838:9;5824:23;5816:53;;;;;-1:-1:-1;;;5816:53:0;;;;;;;;;;;;-1:-1:-1;;;5816:53:0;;;;;;;;;;;;;;;9494:6;:4;:6::i;:::-;9491:88;;;9516:30;;:10;;9536:9;9516:30;;;;;;;;;9536:9;9516:10;:30;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9516:30:0;9561:7;;9491:88;9614:22;9655:23;;;:11;:23;;;;;;-1:-1:-1;;;;;9655:23:0;9693:45;9701:10;9713:9;9724:5;9655:23;9693:7;:45::i;:::-;5880:1;;9356:390;;:::o;1913:19::-;;;;:::o;1267:17::-;;;;;;:::o;1737:19::-;;;;:::o;2186:46::-;;;;;;;;;;;;-1:-1:-1;;;;;2186:46:0;;:::o;18579:86::-;18651:6;;18579:86;:::o;1372:73::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;18533:37::-;18568:2;18533:37;:::o;14944:363::-;15028:12;15058:28;15075:10;15058:16;:28::i;:::-;15051:35;-1:-1:-1;15119:8:0;;15115:185;;15146:10;15160:9;15146:23;15143:145;;;15188:25;;:10;;:25;;;;;15208:4;;15188:25;;;;15208:4;15188:10;:25;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15188:25:0;15143:145;;;15271:4;15277:10;15250:38;;;;;:::i;:::-;-1:-1:-1;;;;;15250:38:0;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;15143:145:0;14944:363;:::o;18048:297::-;18128:48;;:::i;:::-;18198:9;18194:110;2336:3;18211:1;:17;18194:110;;;18284:5;;:7;;18271:21;;;;:12;:21;;;;;;18249:16;18290:1;18249:19;;;;;;;;;;:43;18230:3;;18194:110;;;-1:-1:-1;18048:297:0;:::o;1542:30::-;;;;:::o;17566:334::-;17667:48;;:::i;:::-;17737:9;17733:126;2336:3;17750:1;:17;17733:126;;;-1:-1:-1;;;;;17811:27:0;;;;;;:18;:27;;;;;;;;17839:5;;:7;;17811:36;;;;;;;;17789:16;17845:1;17789:19;;;;;;;;;;:58;17769:3;;17733:126;;;-1:-1:-1;17566:334:0;;;:::o;2043:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14503:375::-;5824:10;5838:9;5824:23;5816:53;;;;;-1:-1:-1;;;5816:53:0;;;;;;;;;;;;-1:-1:-1;;;5816:53:0;;;;;;;;;;;;;;;14579:6;:4;:6::i;:::-;14571:26;;;;;-1:-1:-1;;;14571:26:0;;;;;;;;;;;;-1:-1:-1;;;14571:26:0;;;;;;;;;;;;;;;14660:10;14681:29;14660:10;14681:16;:29::i;:::-;14776:15;;-1:-1:-1;;;;;14747:19:0;;14721:14;14747:19;;;:6;:19;;;;;:25;;;14738:4;;14721:14;;14776:15;14738:35;;;:8;:35;:::i;:::-;:53;;;;;-1:-1:-1;;;;;14802:19:0;;14830:1;14802:19;;;:6;:19;;;;;;:25;;:29;;;14842:28;14738:53;;;;;-1:-1:-1;14802:19:0;14842:28;;;;;14738:53;;14842:28;;14830:1;14842:28;14738:53;14802:19;14842:28;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;1965:21:0;;;;:::o;18673:107::-;-1:-1:-1;;;;;18754:11:0;18727:7;18754:11;;;:6;:11;;;;;:18;;;;18673:107::o;16879:513::-;-1:-1:-1;;;;;17010:15:0;;16969:7;17010:15;;;:6;:15;;;;;:21;;;;17059:28;;;;;16969:7;17135:11;;17132:196;;17163:152;17178:5;;17169:6;:14;17163:152;;;-1:-1:-1;;;;;17233:27:0;;;;;;:18;:27;;;;;;;;:35;;;;;;;;;17217:52;;:11;;:52;:15;:52;:::i;:::-;17203:66;;17298:1;17288:11;;;;17163:152;;;17345:10;;:39;;17362:22;:5;17372:11;17362:22;:9;:22;:::i;:::-;17345:39;;;17358:1;17345:39;17338:46;16879:513;-1:-1:-1;;;;;16879:513:0:o;5193:276::-;;;;;;;;;;;;;-1:-1:-1;5193:276:0;:::o;18485:41::-;;;;;;;;;;;;;;-1:-1:-1;;;18485:41:0;;;;:::o;1452:47::-;;;;;;;;;;;;;:::o;1860:19::-;;;;:::o;1807:20::-;;;;:::o;8492:404::-;5824:10;5838:9;5824:23;5816:53;;;;;-1:-1:-1;;;5816:53:0;;;;;;;;;;;;-1:-1:-1;;;5816:53:0;;;;;;;;;;;;;;;8634:6;:4;:6::i;:::-;8631:88;;;8656:30;;:10;;8676:9;8656:30;;;;;;;;;8676:9;8656:10;:30;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;8631:88:0;-1:-1:-1;;;;;8762:14:0;;;;;;:6;:14;;;;;:22;;;;;8758:73;;8817:1;8800:19;;8758:73;8843:45;8851:10;8863:9;8874:5;8881:6;8843:7;:45::i;8033:417::-;5824:10;5838:9;5824:23;5816:53;;;;;-1:-1:-1;;;5816:53:0;;;;;;;;;;;;-1:-1:-1;;;5816:53:0;;;;;;;;;;;;;;;8122:10;8105:14;8151;;;:6;:14;;;;;:22;;;;;8143:31;;;;;;-1:-1:-1;;;;;8193:14:0;;;;;;:6;:14;;;;;2374:2;8193:20;;;;:31;8185:40;;;;;;-1:-1:-1;;;;;8286:14:0;;;;;;:6;:14;;;;;:20;;;;;8274:11;;:33;;;;;;;;-1:-1:-1;;;;;8241:14:0;;;;;;:6;:14;;;;;:29;;;:66;8238:205;;-1:-1:-1;;;;;8354:14:0;;;;;;:6;:14;;;;;:20;;;8346:29;;8347:1;;8346:29;:7;:29;:::i;:::-;-1:-1:-1;;;;;8323:14:0;;;;;;:6;:14;;;;;;:20;;:52;;;8395:36;;;8323:14;8395:36;5880:1;8033:417::o;8933:384::-;5824:10;5838:9;5824:23;5816:53;;;;;-1:-1:-1;;;5816:53:0;;;;;;;;;;;;-1:-1:-1;;;5816:53:0;;;;;;;;;;;;;;;9069:6;:4;:6::i;:::-;9066:88;;;9091:30;;:10;;9111:9;9091:30;;;;;;;;;9111:9;9091:10;:30;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;9066:88:0;9189:22;9230:19;;;:9;:19;;;;;;-1:-1:-1;;;;;9230:19:0;9264:45;9272:10;9284:9;9295:5;9230:19;9264:7;:45::i;2105:44::-;;;;;;;;;;;;-1:-1:-1;;;;;2105:44:0;;:::o;2424:2725::-;;;;;;;;;1242:18;;;;:::o;1603:25::-;;;;:::o;7147:765::-;5824:10;5838:9;5824:23;5816:53;;;;;-1:-1:-1;;;5816:53:0;;;;;;;;;;;;-1:-1:-1;;;5816:53:0;;;;;;;;;;;;;;;7280:6;;:28;;-1:-1:-1;;;7280:28:0;;;;;;;;;;;;;;;7264:13;;-1:-1:-1;;;;;7280:6:0;;:15;;7296:11;;;;7280:28;;;;;7296:11;;;;7280:28;1:33:-1;99:1;81:16;;;74:27;7280:28:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;;-1:-1;7280:28:0;;-1:-1:-1;7280:28:0;;-1:-1:-1;;;7280:28:0;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;7280:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7280:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7280:28:0;;-1:-1:-1;7336:10:0;7378:17;7365:9;:30;;7357:62;;;;;-1:-1:-1;;;7357:62:0;;;;;;;;;;;;-1:-1:-1;;;7357:62:0;;;;;;;;;;;;;;;7468:1;7438:18;;;:11;:18;;;;;;-1:-1:-1;;;;;7438:18:0;:32;7430:60;;;;;-1:-1:-1;;;7430:60:0;;;;;;;;;;;;-1:-1:-1;;;7430:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;7507:14:0;;;;;;:6;:14;;;;;:22;;;;;7503:230;;7545:6;:11;;7555:1;7545:11;;;;;-1:-1:-1;;;;;7571:14:0;;7545:6;7571:14;;;:6;:14;;;;;;;;:22;;;:29;;-1:-1:-1;;7571:29:0;;;;;7635:6;;7615:26;;7656:20;;:24;;;;7705:6;;7695:17;;:9;:17;;;;;:26;;-1:-1:-1;;;;;;7695:26:0;;;;;;7503:230;-1:-1:-1;;;;;7786:14:0;;;;;;:6;:14;;;;;;;;:19;;:27;;;7824:18;;;:11;:18;;;;;;;:27;;-1:-1:-1;;;;;;7824:27:0;;;;;;;7864:38;7885:9;;1192:42;;7864:38;;;:::i;:::-;-1:-1:-1;;;;;7864:38:0;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;;;;7147:765:0:o;6332:717::-;6409:5;;6383:4;;6409:5;;6405:604;;6443:3;6435:4;;:11;6431:567;;6474:3;6467:4;:10;6627:7;;:13;;;-1:-1:-1;;;6627:13:0;;;;6496:14;;-1:-1:-1;;;;;6627:7:0;;:11;;:13;;;;;;;;;;;;;;6496:14;6627:7;:13;;;5:2:-1;;;;30:1;27;20:12;5:2;6627:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6627:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6627:13:0;6619:5;:21;;-1:-1:-1;;6619:21:0;;;;;;;;;;-1:-1:-1;6665:7:0;;:15;;;-1:-1:-1;;;6665:15:0;;;;-1:-1:-1;;;;;6665:7:0;;;;:13;;:15;;;;;6627:13;;6665:15;;;;;;;;;;:7;:15;;;5:2:-1;;;;30:1;27;20:12;5:2;6665:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6665:15:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6665:15:0;6659:3;:21;6710:5;;;;:36;;6740:6;6733:4;;:13;;;;;;6710:36;;;6724:6;6718:3;;:12;;;;;;6710:36;6701:45;;6826:157;6841:6;6833:5;;:14;6826:157;;;6923:5;;6910:19;;;;:12;:19;;;;;;6890:15;;:40;;;:19;:40;:::i;:::-;6872:15;:58;6953:5;:10;;6962:1;6953:10;;;6826:157;;;6431:567;;-1:-1:-1;7036:5:0;;;;6332:717;:::o;10198:1663::-;10306:24;10323:6;10306:16;:24::i;:::-;10367:10;10359:4;:18;;10351:64;;;;-1:-1:-1;;;10351:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10442:23;10434:4;:31;;10426:58;;;;;-1:-1:-1;;;10426:58:0;;;;;;;;;;;;-1:-1:-1;;;10426:58:0;;;;;;;;;;;;;;;2336:3;10500:5;:23;10497:77;;;2336:3;10539:23;;10497:77;10584:13;10600:4;10605:5;10600:11;;;;;;;;;10614:19;10600:33;10584:49;;10644:21;10700:5;10668:29;10677:19;10668:4;:8;;:29;;;;:::i;:::-;:37;;;;;;10644:61;;10931:14;10948:11;;;;;;;;;-1:-1:-1;;;;;10948:11:0;-1:-1:-1;;;;;10948:21:0;;10970:10;;10982:13;10948:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10948:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10948:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10948:48:0;;-1:-1:-1;11007:13:0;11024:10;;11023:23;;11040:6;11023:23;;;11037:1;11023:23;11075:5;;11151:10;;11007:39;;-1:-1:-1;11075:13:0;;-1:-1:-1;;11075:17:0;;11151:29;;11166:13;11151:14;:29::i;:::-;11138:10;:42;11200:6;;:18;;11211:6;11200:18;:10;:18;:::i;:::-;11191:6;:27;11253:21;;;;:12;:21;;;;;;:32;;11279:5;11253:32;:25;:32;:::i;:::-;11229:21;;;;:12;:21;;;;;:56;11314:15;;:26;;11334:5;11314:26;:19;:26;:::i;:::-;11296:15;:44;-1:-1:-1;;;;;11405:14:0;;;;;;:6;:14;;;;;:18;;;:28;;11428:4;11405:28;:22;:28;:::i;:::-;-1:-1:-1;;;;;11384:14:0;;;;;;:6;:14;;;;;:18;;;:49;;;;11468:21;;;:33;;11494:6;11468:33;:25;:33;:::i;:::-;-1:-1:-1;;;;;11444:14:0;;;;;;:6;:14;;;;;:21;;;:57;;;;11535:20;;;:31;;11560:5;11535:31;:24;:31;:::i;:::-;-1:-1:-1;;;;;11512:14:0;;;;;;:6;:14;;;;;;;;:20;;:54;;;;11615:18;:26;;;;;:35;;;;;;;:46;;11655:5;11615:46;:39;:46;:::i;:::-;-1:-1:-1;;;;;11577:26:0;;;;;;:18;:26;;;;;;;;:35;;;;;;;;:84;11674:26;11687:4;11693:6;11674:12;:26::i;:::-;11711:34;11724:6;11732:4;11738:6;11711:12;:34::i;:::-;11782:5;;11761:41;;;;;;;;;;;;;;-1:-1:-1;;;;;11761:41:0;;;;;;;;;;;11818:35;;;;;;;;-1:-1:-1;;;;;11818:35:0;;;11835:1;;11818:35;;;;;;;;;10198:1663;;;;;;;;;:::o;19951:155::-;20067:5;;;20091:6;;;;20083:15;;;;;;19951:155;;;;:::o;15315:410::-;15392:7;15446:23;15461:7;15446:14;:23::i;:::-;-1:-1:-1;;;;;15550:15:0;;15506:17;15550:15;;;:6;:15;;;;;:19;;;;15526;;;;;:44;;;:23;:44;:::i;:::-;15506:64;-1:-1:-1;15585:13:0;;15581:107;;-1:-1:-1;;;;;15615:15:0;;15637:1;15615:15;;;:6;:15;;;;;:19;;;:23;;;15653:19;;:23;15707:9;15315:410;-1:-1:-1;;15315:410:0:o;11935:477::-;-1:-1:-1;;;;;12015:15:0;;11998:14;12015:15;;;:6;:15;;;;;:28;;;;12091:11;;12088:270;;12118:152;12133:5;;12124:6;:14;12118:152;;;-1:-1:-1;;;;;12188:27:0;;;;;;:18;:27;;;;;;;;:35;;;;;;;;;12172:52;;:11;;:52;:15;:52;:::i;:::-;12158:66;;12253:1;12243:11;;;;12118:152;;;-1:-1:-1;;;;;12308:15:0;;;;;;:6;:15;;;;;:21;;;:38;;12334:11;12308:38;:25;:38;:::i;:::-;-1:-1:-1;;;;;12284:15:0;;;;;;:6;:15;;;;;:21;;:62;12088:270;-1:-1:-1;;12399:5:0;;-1:-1:-1;;;;;12368:15:0;;;;;;;:6;:15;;;;;:28;;:36;11935:477::o;19590:190::-;19675:9;19706:6;19702:20;;-1:-1:-1;19721:1:0;19714:8;;19702:20;-1:-1:-1;19737:5:0;;;19741:1;19737;:5;:1;19761:5;;;;;:10;19753:19;;;;;19788:155;19873:9;19913:1;19908;:6;;19900:15;;;;;;-1:-1:-1;19930:5:0;;;19788:155::o;12476:621::-;-1:-1:-1;;;;;12594:14:0;;12556:10;12594:14;;;:6;:14;;;;;12576:1;12594:22;;;;12569:8;;;;12594:22;;12591:333;;;-1:-1:-1;;;;;12650:14:0;;12632:15;12650:14;;;:6;:14;;;;;:20;;;:27;;12675:1;12650:27;:24;:27;:::i;:::-;12632:45;-1:-1:-1;12692:12:0;12727:3;12707:17;:4;12632:45;12707:17;:8;:17;:::i;:::-;:23;;;;;-1:-1:-1;;;;;12766:14:0;;;;;;:6;:14;;;;;:18;;;12707:23;;;;-1:-1:-1;12766:28:0;;12707:23;12766:28;:22;:28;:::i;:::-;-1:-1:-1;;;;;12745:14:0;;;;;;:6;:14;;;;;:18;;;:49;;;;12841:29;;;:39;;12875:4;12841:39;:33;:39;:::i;:::-;-1:-1:-1;;;;;12809:14:0;;;;;;:6;:14;;;;;:29;;:71;12900:12;:2;12907:4;12900:12;:6;:12;:::i;:::-;12895:17;;12591:333;;;12956:1;12951:6;;12936:12;12983;12951:2;:6;12983;:12::i;:::-;12968:27;;13029:4;1093:42;13008:37;;;;;:::i;:::-;-1:-1:-1;;;;;13008:37:0;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13008:37:0;;;;13077:4;1192:42;13056:33;;;;;:::i;:::-;-1:-1:-1;;;;;13056:33:0;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;;;;;12476:621:0:o;13159:512::-;13248:12;13277:2;13263:11;:4;13272:1;13263:11;:8;:11;:::i;:::-;:16;;;;;;;-1:-1:-1;13388:18:0;13397:4;13404:1;13397:8;;13388;:18::i;:::-;13381:25;-1:-1:-1;13446:13:0;13462:14;13381:25;13471:4;13462:14;:8;:14;:::i;:::-;13446:30;;13539:13;13555:34;13567:6;13575:4;13581:7;13555:11;:34::i;:::-;13539:50;;13637:26;13657:5;13637:15;13646:5;13637:4;;:8;;:15;;;;:::i;:::-;:19;:26;:19;:26;:::i;:::-;13630:4;:33;-1:-1:-1;;;;;;13159:512:0:o;15733:406::-;15807:17;15827:29;15848:7;15827:20;:29::i;:::-;15807:49;-1:-1:-1;15871:13:0;;15867:265;;-1:-1:-1;;;;;15970:15:0;;;;;;:6;:15;;;;;:19;;;15956:34;;:9;;:34;:13;:34;:::i;:::-;-1:-1:-1;;;;;15934:15:0;;;;;;:6;:15;;;;;:19;;;:56;;;;16099:20;;;16085:35;;:9;;:35;:13;:35;:::i;:::-;-1:-1:-1;;;;;16062:15:0;;;;;;:6;:15;;;;;:20;;:58;15733:406;;:::o;13679:751::-;13947:6;;13783:7;;;;13915:29;:4;13924:19;13915:29;:8;:29;:::i;:::-;:38;;;;;;13900:53;;13971:14;13980:4;13971;;:8;;:14;;;;:::i;:::-;13964:4;:21;14141:14;14180:19;14159:17;:4;14168:7;14159:17;:8;:17;:::i;:::-;14158:41;;;;;;14141:58;;14233:83;14295:6;:15;14302:7;-1:-1:-1;;;;;14295:15:0;-1:-1:-1;;;;;14295:15:0;;;;;;;;;;;;:20;;;14234:55;14282:6;14257:19;14236:17;14245:7;14236:4;;:8;;:17;;;;:::i;:::-;14235:41;;;;;;;14234:55;:47;:55;:::i;14233:83::-;-1:-1:-1;;;;;14210:15:0;;;;;;:6;:15;;;;;:20;;:106;14391:6;;14372:49;;14401:19;;14382:16;;:4;;:16;:8;:16;:::i;:::-;:38;;;;;14372:4;;14382:38;;14372:49;:8;:49;:::i;:::-;14365:57;13679:751;-1:-1:-1;;;;;;13679:751:0:o;16147:217::-;-1:-1:-1;;;;;16335:15:0;;16242:7;16335:15;;;:6;:15;;;;;:20;;;;16284:22;;;;;16275:4;;16274:82;;16335:20;16310:19;;16275:32;;;:8;:32;:::i;28:18838::-;;;;;;;;:::o;:::-;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;28:18838:0;;;-1:-1:-1;;28:18838:0:o

Swarm Source

bzzr://ed472ea9c4fbf6fee5152a7a8ee630fc7c455bfe498e032d01c7e1c3f9d1e8e9

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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