ETH Price: $3,293.87 (-1.66%)

Contract

0x66be1bc6C6aF47900BBD4F3711801bE6C2c6CB32
 

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Buy208299632024-09-25 20:20:2357 days ago1727295623IN
0x66be1bc6...6C2c6CB32
0.08136899 ETH0.0140963228.09146411
Buy206316342024-08-29 3:42:5985 days ago1724902979IN
0x66be1bc6...6C2c6CB32
0.10508889 ETH0.000492451.37983439
Buy206243882024-08-28 3:25:1186 days ago1724815511IN
0x66be1bc6...6C2c6CB32
0.31295732 ETH0.000551221.27879184
Withdraw205005242024-08-10 20:12:23103 days ago1723320743IN
0x66be1bc6...6C2c6CB32
0 ETH0.000041511.01803655
Withdraw204932252024-08-09 19:46:47104 days ago1723232807IN
0x66be1bc6...6C2c6CB32
0 ETH0.000102752.51971366
Withdraw204932232024-08-09 19:46:23104 days ago1723232783IN
0x66be1bc6...6C2c6CB32
0 ETH0.000105862.59578072
Buy204670082024-08-06 4:01:35108 days ago1722916895IN
0x66be1bc6...6C2c6CB32
0.06259143 ETH0.000997961.58649354
Buy204530502024-08-04 5:18:59110 days ago1722748739IN
0x66be1bc6...6C2c6CB32
0.03129571 ETH0.001376191.19172049
Buy204306372024-08-01 2:13:11113 days ago1722478391IN
0x66be1bc6...6C2c6CB32
0.12518283 ETH0.002237723.71305014
Buy203654652024-07-22 23:50:59122 days ago1721692259IN
0x66be1bc6...6C2c6CB32
0.01251828 ETH0.001158482.76142508
Withdraw202915132024-07-12 16:07:11133 days ago1720800431IN
0x66be1bc6...6C2c6CB32
0 ETH0.000224295.49976639
Buy202248002024-07-03 8:29:59142 days ago1719995399IN
0x66be1bc6...6C2c6CB32
0.00625914 ETH0.006904873.50316848
Withdraw202247302024-07-03 8:15:59142 days ago1719994559IN
0x66be1bc6...6C2c6CB32
0 ETH0.000176794.33513946
Buy201100142024-06-17 7:27:23158 days ago1718609243IN
0x66be1bc6...6C2c6CB32
0.125184 ETH0.001879993.24109513
Buy201069422024-06-16 21:08:59158 days ago1718572139IN
0x66be1bc6...6C2c6CB32
0.06259137 ETH0.009474283.37221368
Withdraw197698092024-04-30 18:06:59206 days ago1714500419IN
0x66be1bc6...6C2c6CB32
0 ETH0.0004944213.74087626
Withdraw196798062024-04-18 3:58:11218 days ago1713412691IN
0x66be1bc6...6C2c6CB32
0 ETH0.000354998.70478524
Buy196587412024-04-15 5:09:47221 days ago1713157787IN
0x66be1bc6...6C2c6CB32
0.12518272 ETH0.012965519.10284857
Withdraw196336302024-04-11 16:40:47225 days ago1712853647IN
0x66be1bc6...6C2c6CB32
0 ETH0.0012932433.34656342
Buy195674702024-04-02 10:17:35234 days ago1712053055IN
0x66be1bc6...6C2c6CB32
0.06259134 ETH0.0168255927.44588622
Buy194099672024-03-11 6:08:35256 days ago1710137315IN
0x66be1bc6...6C2c6CB32
0.31295658 ETH0.0179121347.10607769
Buy193683342024-03-05 10:21:47262 days ago1709634107IN
0x66be1bc6...6C2c6CB32
0.12518256 ETH0.0326666755.95515575
Withdraw193401062024-03-01 11:44:11266 days ago1709293451IN
0x66be1bc6...6C2c6CB32
0 ETH0.0016725341.01168529
Withdraw189130582024-01-01 14:05:11326 days ago1704117911IN
0x66be1bc6...6C2c6CB32
0 ETH0.0005841314.32345876
Buy188525192023-12-24 1:59:11334 days ago1703383151IN
0x66be1bc6...6C2c6CB32
0.06259126 ETH0.0080717117.54813088
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
208299632024-09-25 20:20:2357 days ago1727295623
0x66be1bc6...6C2c6CB32
 Contract Creation0.01627379 ETH
208299632024-09-25 20:20:2357 days ago1727295623
0x66be1bc6...6C2c6CB32
 Contract Creation0.00813689 ETH
206316342024-08-29 3:42:5985 days ago1724902979
0x66be1bc6...6C2c6CB32
 Contract Creation0.02101777 ETH
206316342024-08-29 3:42:5985 days ago1724902979
0x66be1bc6...6C2c6CB32
 Contract Creation0.01050888 ETH
206243882024-08-28 3:25:1186 days ago1724815511
0x66be1bc6...6C2c6CB32
 Contract Creation0.06259146 ETH
206243882024-08-28 3:25:1186 days ago1724815511
0x66be1bc6...6C2c6CB32
 Contract Creation0.03129573 ETH
205005242024-08-10 20:12:23103 days ago1723320743
0x66be1bc6...6C2c6CB32
0.10188944 ETH
204932252024-08-09 19:46:47104 days ago1723232807
0x66be1bc6...6C2c6CB32
0.00287906 ETH
204932232024-08-09 19:46:23104 days ago1723232783
0x66be1bc6...6C2c6CB32
0.00211616 ETH
204670082024-08-06 4:01:35108 days ago1722916895
0x66be1bc6...6C2c6CB32
 Contract Creation0.01251828 ETH
204670082024-08-06 4:01:35108 days ago1722916895
0x66be1bc6...6C2c6CB32
 Contract Creation0.00625914 ETH
204530502024-08-04 5:18:59110 days ago1722748739
0x66be1bc6...6C2c6CB32
 Contract Creation0.00625914 ETH
204530502024-08-04 5:18:59110 days ago1722748739
0x66be1bc6...6C2c6CB32
 Contract Creation0.00312957 ETH
204306372024-08-01 2:13:11113 days ago1722478391
0x66be1bc6...6C2c6CB32
 Contract Creation0.02503656 ETH
204306372024-08-01 2:13:11113 days ago1722478391
0x66be1bc6...6C2c6CB32
 Contract Creation0.01251828 ETH
203654652024-07-22 23:50:59122 days ago1721692259
0x66be1bc6...6C2c6CB32
 Contract Creation0.00250365 ETH
203654652024-07-22 23:50:59122 days ago1721692259
0x66be1bc6...6C2c6CB32
 Contract Creation0.00125182 ETH
202915132024-07-12 16:07:11133 days ago1720800431
0x66be1bc6...6C2c6CB32
0.00000379 ETH
202248002024-07-03 8:29:59142 days ago1719995399
0x66be1bc6...6C2c6CB32
 Contract Creation0.00125182 ETH
202248002024-07-03 8:29:59142 days ago1719995399
0x66be1bc6...6C2c6CB32
 Contract Creation0.00062591 ETH
202247302024-07-03 8:15:59142 days ago1719994559
0x66be1bc6...6C2c6CB32
0.02238229 ETH
201100142024-06-17 7:27:23158 days ago1718609243
0x66be1bc6...6C2c6CB32
 Contract Creation0.01627392 ETH
201100142024-06-17 7:27:23158 days ago1718609243
0x66be1bc6...6C2c6CB32
 Contract Creation0.0125184 ETH
201069422024-06-16 21:08:59158 days ago1718572139
0x66be1bc6...6C2c6CB32
 Contract Creation0.00625913 ETH
201069422024-06-16 21:08:59158 days ago1718572139
0x66be1bc6...6C2c6CB32
 Contract Creation0.00625913 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ThreeFMutual

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license, Audited

Contract Source Code (Solidity)Audit Report

/**
 *Submitted for verification at Etherscan.io on 2020-09-19
*/

pragma solidity 0.5.16;

contract ThreeFMutual {
    using SafeMath for *;

    //*********
    // STRUCTS
    //*********
    struct Player {
        uint256 id;             // agent id
        bytes32 name;           // agent name
        uint256 ref;            // referral vault
        bool isAgent;           // referral activated
        bool claimed;           // insurance claimed
        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;          // agent level
        uint256 accumulatedRef; // accumulated referral income
    }


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

    VAT vat = VAT(0x35D1b3F3D7966A1DFe207aa4514C12a259A0492B);
    Underwriter underwriter = Underwriter(0xE58cDe3CbEeCC8d9306f482729084B909Afa2357);
    Agency agency = Agency(0x7Bc360ebD65eFa503FF189A0F81f61f85D310Ec3);
    
    address payable constant private hakka = address(0x83D0D842e6DB3B020f384a2af11bD14787BEC8E7);
    address payable constant private IIP = address(0x9933AD4D38702cdC28C5DB2F421F1F02CF530780);
    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 pointer
    uint256 public shares;          // total 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 = _now / 1 days; // the current day as soon as ticker is called

                //check MakerDAO status
                if(vat.live() == 0) {
                    ended = true;
                    end = now;
                }

                // calculate the outdated issuedInsurance
                while (today < _today) {
                    issuedInsurance = issuedInsurance.sub(unitToExpire[today]);
                    unitToExpire[today] = 0;
                    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;
            emit UPGRADE(_agent,player[_agent].level);
        }
        // set name active for the player
        player[_agent].name = _name;
        agentxName_[_name] = _agent;
        sendContract(hakka, msg.value);

    }

    /**
     * @dev Upgrade
     * @notice Upgrade when a player's referral bonus meet the requirement
     */
    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()){
            sendHuman(msg.sender, 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()){
            sendHuman(msg.sender, 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()){
            sendHuman(msg.sender, 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()) {
            if(msg.sender == tx.origin)
                sendHuman(msg.sender, msg.value);
            else
                sendContract(msg.sender, msg.value);
            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, _share);
    }

    /**
     * @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]);
                unitToExpirePlayer[_player][_today] = 0;
                _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 {
        // 20% to external
        uint256 ex = _eth / 5 ;

        // 10% to IIP
        uint256 _iip = _eth / 10;

        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);
        }

        sendContract(IIP, _iip);
        sendContract(hakka, ex);
    }

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

        // 55% to insurance pool
        uint256 _pool = _eth.mul(55) / 100;

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

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

        
    }

    function updateMasks(address  _player, uint256 _div, uint256 _shares)
        private
        returns(uint256)
    {
        // calculate profit per share & global mask based on this buy: (dust goes to pool)
        uint256 _ppt = _div.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(_div.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;
        require(!player[beneficiary].claimed, "already claimed");
        updatePlayerUnit(beneficiary);
        uint256 amount = pool.mul(player[beneficiary].units) / issuedInsurance;
        player[beneficiary].claimed = true;
        sendHuman(beneficiary, 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)
                sendHuman(msg.sender, _eth);
            else
                sendContract(msg.sender, _eth);
        }
    }

    function withdrawEarnings(address _player)
        private
        returns(uint256)
    {
        uint256 _div = calcUnMaskedEarnings(_player); //dividend
        uint256 _ref = player[_player].ref; // referral 
        uint256 _earnings = _div.add(_ref);

        if (_earnings > 0) {
            player[_player].ref = 0;
            player[_player].mask = _div.add(player[_player].mask);
        }

        return(_earnings);
    }

    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";
    string  public constant symbol   = "3FM";
    uint8   public constant decimals = 18;

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

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

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

    //******************
    // send eth
    //******************

    function sendHuman(address to, uint256 amount) internal returns(bool success) {
        address payable recipient = address(uint160(to));
        (success, ) = recipient.call.value(amount)("");
    }

    function sendContract(address to, uint256 amount) internal returns(bool success) {
        address payable recipient = address(uint160(to));
        (new SafeSend).value(amount)(recipient);
        return true;
    }

}

contract VAT {
    function live() external returns(uint256);
}

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, 1);
        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":"ref","type":"uint256"},{"internalType":"bool","name":"isAgent","type":"bool"},{"internalType":"bool","name":"claimed","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"}]

600080546001600160a01b03199081167335d1b3f3d7966a1dfe207aa4514c12a259a0492b17825560018054821673e58cde3cbeecc8d9306f482729084b909afa235717905560028054909116737bc360ebd65efa503ff189a0f81f61f85d310ec3179055610d206040526080908152670de0b6b3a764000060a052671b9de674df07000060c052672937ea36b763400060e0526736af1c036c4df00061010052674403d4feb9031400610120526751366d68263b870061014052675e473c9d525c5f4061016052676b36991c33cecef061018052677804d885558f75d46101a0526784b24f9e0e03f2176101c05267913f5252b02558a16101e052679dac33b8b70e17be6102005267a9f94610ebf9a1bf6102205267b626dac986c418736102405267c235428048f80df76102605267ce24cd0493784b446102805267d9f5c95976d3693c6102a05267e5a885b7be4ee59f6102c05267f13d4f8ff5b73a5d6102e05267fcb4738c6a025b0f610300526801080e3d9324d1da26610320526801134af8c7e2e1d5686103405268011e6aef8e0571a7c1610360526801296e6b8a7eb33d1e6103805268013455b5a5b94dc4306103a05268013f21160d7b0059446103c052680149d0d436c271252c6103e0526801546536dfa0354b336104005268015ede84110b1de17d610420526801693d0120afd60fe06104405268017380f2b2bbde52476104605268017daa9cbba3f0bcf961048052680187ba4281e5da02c36104a052680191b0269fc5d2dee56104c05268019b8c8b05076566e86104e0526801a54fb0f8a1e9aaff610500526801aef9d91a70a4ee68610520526801b88b4364de96a458610540526801c2042f2e8dfe416c610560526801cb64db2bfba4d53f610580526801d4ad85711df543c16105a0526801ddde6b72ffedda1e6105c0526801e6f7ca0957f5df9e6105e0526801eff9dd701aa1a79f610600526801f8e4e149096f8ee861062052680201b9109d3d8833e16106405268020a76a5deae8c1ee1610660526802131ddae9b578f59c6106805268021baee9068bb03ad56106a0526802242a08eac62981ec6106c05268022c8f72baccd9e4766106e052680234df5e0b4e5a6efa6107005268023d1a01e2afd72111610720526802453f94ba795004936107405268024d504c80be35c717610760526802554c5e99826b28f06107805268025d33ffe01bb47d026107a0526802650764a88f9e5d0a6107c05268026cc6c0c0ede49eab6107e052680274724772a7627e5c6108005268027c0a2b83e194de60610820526802838e9f38c6b761456108405268028affd454d28510f0610860526802925dfc1c1ba52cee61088052680299a9475499cca4cd6108a0526802a0e1e647689cad656108c0526802a80808c20746ca616108e0526802af1bde1794fe9009610900526802b61d95220a414c09610920526802bd0d5c436efbaf1d610940526802c3eb61670d957cb9610960526802cab7d202a2eb313c610980526802d172db178b3d7afb6109a0526802d81ca933ec1e4e3b6109c0526802deb56873db6348546109e0526802e53d44828325027c610a00526802ebb4689b42d2e12e610a20526802f21aff8acd62d9cf610a40526802f87133b044a49512610a60526802feb72efe51bf41a9610a8052680304ed1afc3ae1580b610aa05268030b1320c6f6297d90610ac05268031129691239cfa2b5610ae052680317301c2989956633610b005268031d2761f14184b48a610b20526803230f61e79e0389c6610b4052680328e84325c143a9ad610b605268032eb22c60b61510f0610b80526803346d43ea7021d0c5610ba05268033a19afb2c999f515610bc05268033fb795487e56048d610be0526803454719da247698fc610c005268034ac8623722877ddb610c20526803503b92d0a32cb25b610c4052680355a0cfba865f9c18610c605268035af83cac5042a755610c805268036041fd02159181d2610ca0526803657e33bd65b40d52610cc05268036aad0386327a176d610ce05268036fce8eabb585d4a2610d0052620005e0906012906065620006a9565b506040805161014081018252600081526701068312e0059e8560208201526702c994e4e64bc24291810191909152670793b7482530c0ce6060820152671498b1d19b06ae7a60808201526737fcab8092fd2d7860a08201526798303c794a6def5560c082015268019db0e6f447db64d360e0820152680464875f006314189d610100820152680bf0c943643f76e5d76101208201526200068590607790600a620006f7565b503480156200069357600080fd5b5042600c819055620151809004600b5562000752565b8260658101928215620006e5579160200282015b82811115620006e557825182906001600160481b0316905591602001919060010190620006bd565b50620006f392915062000732565b5090565b82600a8101928215620006e55791602002820182811115620006e557825182906001600160481b0316905591602001919060010190620006bd565b6200074f91905b80821115620006f3576000815560010162000739565b90565b611e0e80620007626000396000f3fe6080604052600436106101f95760003560e01c8063585166611161010d578063b74e452b116100a0578063d93be4331161006f578063d93be433146106c2578063e7ee6ad6146106ec578063efbe1c1c14610716578063f0da93441461072b578063f2c298be14610740576101f9565b8063b74e452b14610649578063cce7ec131461065e578063d55ec6971461068a578063d6febde81461069f576101f9565b806395d89b41116100dc57806395d89b41146105f5578063a6f2ae3a146101f9578063aaaadb581461060a578063b3bb8cd414610634576101f9565b8063585166611461055057806370a0823114610565578063729fc61314610598578063757b0884146105cb576101f9565b806318160ddd116101905780633ef7c6871161015f5780633ef7c68714610413578063402e912f14610461578063489b3fee146104765780634c54e1b5146104a95780634e71d92d1461053b576101f9565b806318160ddd14610385578063274806e01461039a578063313ce567146103d35780633ccfd60b146103fe576101f9565b8063116134ee116101cc578063116134ee146102ec57806312fa6feb1461030157806316f0115b1461032a57806317604f711461033f576101f9565b8063018a25e81461020357806303314efa1461022a57806306fdde031461023f5780630ddeb632146102c9575b6102016107b0565b005b34801561020f57600080fd5b506102186107f5565b60408051918252519081900360200190f35b34801561023657600080fd5b5061021861089c565b34801561024b57600080fd5b506102546108a2565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028e578181015183820152602001610276565b50505050905090810190601f1680156102bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610201600480360360408110156102df57600080fd5b50803590602001356108d0565b3480156102f857600080fd5b5061021861095f565b34801561030d57600080fd5b50610316610965565b604080519115158252519081900360200190f35b34801561033657600080fd5b5061021861096e565b34801561034b57600080fd5b506103696004803603602081101561036257600080fd5b5035610974565b604080516001600160a01b039092168252519081900360200190f35b34801561039157600080fd5b5061021861098f565b3480156103a657600080fd5b50610218600480360360408110156103bd57600080fd5b506001600160a01b0381351690602001356109ac565b3480156103df57600080fd5b506103e86109c9565b6040805160ff9092168252519081900360200190f35b34801561040a57600080fd5b506102016109ce565b34801561041f57600080fd5b50610428610a06565b6040518082610c8080838360005b8381101561044e578181015183820152602001610436565b5050505090500191505060405180910390f35b34801561046d57600080fd5b50610218610a4b565b34801561048257600080fd5b506104286004803603602081101561049957600080fd5b50356001600160a01b0316610a51565b3480156104b557600080fd5b506104dc600480360360208110156104cc57600080fd5b50356001600160a01b0316610aad565b604080519c8d5260208d019b909b528b8b019990995296151560608b015294151560808a015260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b34801561054757600080fd5b50610201610b07565b34801561055c57600080fd5b50610218610c6a565b34801561057157600080fd5b506102186004803603602081101561058857600080fd5b50356001600160a01b0316610c70565b3480156105a457600080fd5b50610218600480360360208110156105bb57600080fd5b50356001600160a01b0316610ca5565b3480156105d757600080fd5b50610218600480360360208110156105ee57600080fd5b5035610d43565b34801561060157600080fd5b50610254610d57565b34801561061657600080fd5b506102186004803603602081101561062d57600080fd5b5035610d76565b34801561064057600080fd5b50610218610d88565b34801561065557600080fd5b50610218610d8e565b6102016004803603604081101561067457600080fd5b506001600160a01b038135169060200135610d94565b34801561069657600080fd5b50610201610e27565b610201600480360360408110156106b557600080fd5b5080359060200135610f77565b3480156106ce57600080fd5b50610369600480360360208110156106e557600080fd5b5035610ffa565b3480156106f857600080fd5b506102186004803603602081101561070f57600080fd5b5035611015565b34801561072257600080fd5b50610218611022565b34801561073757600080fd5b50610218611028565b6102016004803603602081101561075657600080fd5b81019060208101813564010000000081111561077157600080fd5b82018360208201111561078357600080fd5b803590602001918460018302840111640100000000831117156107a557600080fd5b50909250905061102e565b6107b86112d4565b156107e657333214156107d5576107cf33346113e8565b506107e1565b6107df3334611445565b505b6107f3565b6107f33334600080611494565b565b6001546009546000916001600160a01b031690636deba2289061082690670de0b6b3a764000063ffffffff61183d16565b670de0b6b3a76400006040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561086a57600080fd5b505afa15801561087e573d6000803e3d6000fd5b505050506040513d602081101561089457600080fd5b505190505b90565b60095481565b60405180604001604052806012815260200171151a1a5c9908119b1bdbdc88135d5d1d585b60721b81525081565b333214610918576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b6109206112d4565b156109355761092f33346113e8565b5061095b565b6000828152601160205260409020546001600160a01b031661095933348484611494565b505b5050565b600d5481565b60045460ff1681565b600a5481565b6011602052600090815260409020546001600160a01b031681565b60045460009060ff16156109a557506000610899565b5060095490565b600560209081526000928352604080842090915290825290205481565b601281565b60006109d93361184d565b90508015610a0357333214156109f9576109f333826113e8565b50610a03565b61095b3382611445565b50565b610a0e611d5b565b60005b6064811015610a4757600b548101600090815260066020526040902054828260648110610a3a57fe5b6020020152600101610a11565b5090565b60075481565b610a59611d5b565b60005b6064811015610aa6576001600160a01b0383166000908152600560209081526040808320600b5485018452909152902054828260648110610a9957fe5b6020020152600101610a5c565b505b919050565b600f60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a909a015498999798969760ff8088169861010090980416968c565b333214610b4f576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b610b576112d4565b610b92576040805162461bcd60e51b81526020600482015260076024820152661b9bdd081e595d60ca1b604482015290519081900360640190fd5b336000818152600f6020526040902060030154610100900460ff1615610bf1576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b604482015290519081900360640190fd5b610bfa816118ea565b6007546001600160a01b0382166000908152600f6020526040812060060154600a54919291610c2e9163ffffffff6119eb16565b81610c3557fe5b6001600160a01b0384166000908152600f60205260409020600301805461ff00191661010017905504905061095982826113e8565b600e5481565b60045460009060ff1615610c8657506000610aa8565b506001600160a01b03166000908152600f602052604090206005015490565b6001600160a01b0381166000908152600f602052604081206006810154600790910154828115610d1c575b600b54821015610d1c576001600160a01b0385166000908152600560209081526040808320858452909152902054610d0f90829063ffffffff61183d16565b9050600182019150610cd0565b8215610d3757610d32838263ffffffff611a1316565b610d3a565b60005b95945050505050565b607781600a8110610d5057fe5b0154905081565b6040518060400160405280600381526020016233464d60e81b81525081565b60066020526000908152604090205481565b600c5481565b600b5481565b333214610ddc576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b610de46112d4565b15610df35761092f33346113e8565b6001600160a01b0382166000908152600f602052604090206003015460ff16610e1b57600091505b61095b33348385611494565b333214610e6f576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b336000818152600f602052604090206003015460ff16610e8e57600080fd5b6001600160a01b0381166000908152600f6020526040902060090154600a11610eb657600080fd5b6001600160a01b0381166000908152600f6020526040902060090154607790600a8110610edf57fe5b01546001600160a01b0382166000908152600f60205260409020600a015410610a03576001600160a01b0381166000908152600f6020526040902060090154610f309060019063ffffffff61183d16565b6001600160a01b0382166000818152600f6020526040808220600901849055517f082e58bd2e7f7268b36ef0ce2331f7bfd29c08979529cbe85f06375fcecd43729190a350565b333214610fbf576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b610fc76112d4565b15610fd65761092f33346113e8565b6000828152601060205260409020546001600160a01b031661095933348484611494565b6010602052600090815260409020546001600160a01b031681565b60128160658110610d5057fe5b60035481565b60085481565b333214611076576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b6002546040516379614c5f60e11b8152602060048201908152602482018490526000926001600160a01b03169163f2c298be9186918691908190604401848480828437600083820152604051601f909101601f191690920195506020945090925050508083038186803b1580156110ec57600080fd5b505afa158015611100573d6000803e3d6000fd5b505050506040513d602081101561111657600080fd5b5051905033662386f26fc1000034101561116d576040805162461bcd60e51b81526020600482015260136024820152721a5b9cdd59999a58da595b9d08185b5bdd5b9d606a1b604482015290519081900360640190fd5b6000828152601160205260409020546001600160a01b0316156111c9576040805162461bcd60e51b815260206004820152600f60248201526e1b985b59481c9959da5cdd195c9959608a1b604482015290519081900360640190fd5b6001600160a01b0381166000908152600f602052604090206003015460ff1661127357600e8054600190810182556001600160a01b0383166000818152600f6020818152604080842060038101805460ff19168817905587548155600901958655955483526010815285832080546001600160a01b03191685179055838352529154925190917f082e58bd2e7f7268b36ef0ce2331f7bfd29c08979529cbe85f06375fcecd437291a35b6001600160a01b0381166000818152600f602090815260408083206001018690558583526011909152902080546001600160a01b03191690911790556112cd7383d0d842e6db3b020f384a2af11bd14787bec8e734611445565b5050505050565b60045460009060ff166113de5742600c54146113de5742600c81905560009062015180900490506000809054906101000a90046001600160a01b03166001600160a01b031663957aa58c6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561134a57600080fd5b505af115801561135e573d6000803e3d6000fd5b505050506040513d602081101561137457600080fd5b505161138c576004805460ff19166001179055426003555b80600b5410156113dc57600b546000908152600660205260409020546007546113ba9163ffffffff611a1316565b600755600b80546000908152600660205260408120558054600101905561138c565b505b5060045460ff1690565b60405160009083906001600160a01b0382169084908481818185875af1925050503d8060008114611435576040519150601f19603f3d011682016040523d82523d6000602084013e61143a565b606091505b509095945050505050565b600080839050828160405161145990611d7a565b6001600160a01b039091168152604051908190036020019082f080158015611485573d6000803e3d6000fd5b50600193505050505b92915050565b61149d846118ea565b633b9aca008310156114e05760405162461bcd60e51b8152600401808060200182810382526021815260200180611db96021913960400191505060405180910390fd5b69021e19e0c9bab2400000831115611530576040805162461bcd60e51b815260206004820152600e60248201526d6e6f20766974616c696b2c206e6f60901b604482015290519081900360640190fd5b606482111561153e57606491505b60006012836065811061154d57fe5b0154670de0b6b3a7640000019050600081611579670de0b6b3a7640000876119eb90919063ffffffff16565b8161158057fe5b0490506000600160009054906101000a90046001600160a01b03166001600160a01b03166310a76c2e600854846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156115e857600080fd5b505afa1580156115fc573d6000803e3d6000fd5b505050506040513d602081101561161257600080fd5b50519050600085156116245781611627565b60005b600b5460085491925087016000190190611641908561183d565b600855600954611657908463ffffffff61183d16565b600955600081815260066020526040902054611679908363ffffffff61183d16565b60008281526006602052604090205560075461169b908363ffffffff61183d16565b6007556001600160a01b0389166000908152600f60205260409020600401546116ca908963ffffffff61183d16565b6001600160a01b038a166000908152600f602052604090206004810191909155600501546116fe908463ffffffff61183d16565b6001600160a01b038a166000908152600f60205260409020600581019190915560060154611732908363ffffffff61183d16565b6001600160a01b038a166000908152600f60209081526040808320600601939093556005815282822084835290522054611772908363ffffffff61183d16565b6001600160a01b038a1660009081526005602090815260408083208584529091529020556117a08887611a28565b6117ab898985611b73565b600b5460408051848152602081018a905281516001600160a01b038d16927f4b9622a7ffcb20551847f4dd71b5b98c4267e10d7d338a6c7fb7b26d45d854e0928290030190a36040805184815290516001600160a01b038b16916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505050505050505050565b8181018281101561148e57600080fd5b60008061185983611bf0565b6001600160a01b0384166000908152600f6020526040812060020154919250611888838363ffffffff61183d16565b905080156118e2576001600160a01b0385166000908152600f602052604081206002810191909155600801546118c590849063ffffffff61183d16565b6001600160a01b0386166000908152600f60205260409020600801555b949350505050565b6001600160a01b0381166000908152600f60205260408120600701549081156119c7575b600b5482101561197e576001600160a01b038316600090815260056020908152604080832085845290915290205461194d90829063ffffffff61183d16565b6001600160a01b0384166000908152600560209081526040808320868452909152812055600190920191905061190e565b6001600160a01b0383166000908152600f60205260409020600601546119aa908263ffffffff611a1316565b6001600160a01b0384166000908152600f60205260409020600601555b5050600b546001600160a01b039091166000908152600f6020526040902060070155565b6000826119fa5750600061148e565b5081810281838281611a0857fe5b041461148e57600080fd5b600082821115611a2257600080fd5b50900390565b6001600160a01b0381166000908152600f60205260409020600301546005830490600a84049060ff1615611b36576001600160a01b0383166000908152600f6020526040812060090154611a8390600663ffffffff61183d16565b905060006064611a99878463ffffffff6119eb16565b81611aa057fe5b6001600160a01b0387166000908152600f60205260409020600201549190049150611ad1908263ffffffff61183d16565b6001600160a01b0386166000908152600f602052604090206002810191909155600a0154611b05908263ffffffff61183d16565b6001600160a01b0386166000908152600f60205260409020600a0155611b31848263ffffffff611a1316565b935050505b611b54739933ad4d38702cdc28c5db2f421f1f02cf53078082611445565b506112cd7383d0d842e6db3b020f384a2af11bd14787bec8e783611445565b60006014611b8884600363ffffffff6119eb16565b81611b8f57fe5b04905060006064611ba785603763ffffffff6119eb16565b81611bae57fe5b0490506000611bbe868486611c48565b9050611be582611bd983600a5461183d90919063ffffffff16565b9063ffffffff61183d16565b600a55505050505050565b6001600160a01b0381166000908152600f602052604081206008810154600590910154600d5461148e9291670de0b6b3a764000091611c349163ffffffff6119eb16565b81611c3b57fe5b049063ffffffff611a1316565b6009546000908190611c6885670de0b6b3a764000063ffffffff6119eb16565b81611c6f57fe5b049050611c8781600d5461183d90919063ffffffff16565b600d556000670de0b6b3a7640000611ca5838663ffffffff6119eb16565b81611cac57fe5b049050611cfd600f6000886001600160a01b03166001600160a01b0316815260200190815260200160002060080154611bd983670de0b6b3a7640000611c3489600d546119eb90919063ffffffff16565b6001600160a01b0387166000908152600f6020526040902060080155600954611d5190670de0b6b3a764000090611d3b90859063ffffffff6119eb16565b81611d4257fe5b8791900463ffffffff611a1316565b9695505050505050565b60405180610c8001604052806064906020820280388339509192915050565b603280611d878339019056fe60806040526040516032380380603283398181016040526020811015602357600080fd5b50516001600160a01b038116fffe706f636b6574206c696e743a206e6f7420612076616c69642063757272656e6379a265627a7a7231582078f7dc0663f1419e97d7fc0c07346c894c816feeb9b5dae00925b35d680d542464736f6c63430005100032

Deployed Bytecode

0x6080604052600436106101f95760003560e01c8063585166611161010d578063b74e452b116100a0578063d93be4331161006f578063d93be433146106c2578063e7ee6ad6146106ec578063efbe1c1c14610716578063f0da93441461072b578063f2c298be14610740576101f9565b8063b74e452b14610649578063cce7ec131461065e578063d55ec6971461068a578063d6febde81461069f576101f9565b806395d89b41116100dc57806395d89b41146105f5578063a6f2ae3a146101f9578063aaaadb581461060a578063b3bb8cd414610634576101f9565b8063585166611461055057806370a0823114610565578063729fc61314610598578063757b0884146105cb576101f9565b806318160ddd116101905780633ef7c6871161015f5780633ef7c68714610413578063402e912f14610461578063489b3fee146104765780634c54e1b5146104a95780634e71d92d1461053b576101f9565b806318160ddd14610385578063274806e01461039a578063313ce567146103d35780633ccfd60b146103fe576101f9565b8063116134ee116101cc578063116134ee146102ec57806312fa6feb1461030157806316f0115b1461032a57806317604f711461033f576101f9565b8063018a25e81461020357806303314efa1461022a57806306fdde031461023f5780630ddeb632146102c9575b6102016107b0565b005b34801561020f57600080fd5b506102186107f5565b60408051918252519081900360200190f35b34801561023657600080fd5b5061021861089c565b34801561024b57600080fd5b506102546108a2565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028e578181015183820152602001610276565b50505050905090810190601f1680156102bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610201600480360360408110156102df57600080fd5b50803590602001356108d0565b3480156102f857600080fd5b5061021861095f565b34801561030d57600080fd5b50610316610965565b604080519115158252519081900360200190f35b34801561033657600080fd5b5061021861096e565b34801561034b57600080fd5b506103696004803603602081101561036257600080fd5b5035610974565b604080516001600160a01b039092168252519081900360200190f35b34801561039157600080fd5b5061021861098f565b3480156103a657600080fd5b50610218600480360360408110156103bd57600080fd5b506001600160a01b0381351690602001356109ac565b3480156103df57600080fd5b506103e86109c9565b6040805160ff9092168252519081900360200190f35b34801561040a57600080fd5b506102016109ce565b34801561041f57600080fd5b50610428610a06565b6040518082610c8080838360005b8381101561044e578181015183820152602001610436565b5050505090500191505060405180910390f35b34801561046d57600080fd5b50610218610a4b565b34801561048257600080fd5b506104286004803603602081101561049957600080fd5b50356001600160a01b0316610a51565b3480156104b557600080fd5b506104dc600480360360208110156104cc57600080fd5b50356001600160a01b0316610aad565b604080519c8d5260208d019b909b528b8b019990995296151560608b015294151560808a015260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b34801561054757600080fd5b50610201610b07565b34801561055c57600080fd5b50610218610c6a565b34801561057157600080fd5b506102186004803603602081101561058857600080fd5b50356001600160a01b0316610c70565b3480156105a457600080fd5b50610218600480360360208110156105bb57600080fd5b50356001600160a01b0316610ca5565b3480156105d757600080fd5b50610218600480360360208110156105ee57600080fd5b5035610d43565b34801561060157600080fd5b50610254610d57565b34801561061657600080fd5b506102186004803603602081101561062d57600080fd5b5035610d76565b34801561064057600080fd5b50610218610d88565b34801561065557600080fd5b50610218610d8e565b6102016004803603604081101561067457600080fd5b506001600160a01b038135169060200135610d94565b34801561069657600080fd5b50610201610e27565b610201600480360360408110156106b557600080fd5b5080359060200135610f77565b3480156106ce57600080fd5b50610369600480360360208110156106e557600080fd5b5035610ffa565b3480156106f857600080fd5b506102186004803603602081101561070f57600080fd5b5035611015565b34801561072257600080fd5b50610218611022565b34801561073757600080fd5b50610218611028565b6102016004803603602081101561075657600080fd5b81019060208101813564010000000081111561077157600080fd5b82018360208201111561078357600080fd5b803590602001918460018302840111640100000000831117156107a557600080fd5b50909250905061102e565b6107b86112d4565b156107e657333214156107d5576107cf33346113e8565b506107e1565b6107df3334611445565b505b6107f3565b6107f33334600080611494565b565b6001546009546000916001600160a01b031690636deba2289061082690670de0b6b3a764000063ffffffff61183d16565b670de0b6b3a76400006040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561086a57600080fd5b505afa15801561087e573d6000803e3d6000fd5b505050506040513d602081101561089457600080fd5b505190505b90565b60095481565b60405180604001604052806012815260200171151a1a5c9908119b1bdbdc88135d5d1d585b60721b81525081565b333214610918576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b6109206112d4565b156109355761092f33346113e8565b5061095b565b6000828152601160205260409020546001600160a01b031661095933348484611494565b505b5050565b600d5481565b60045460ff1681565b600a5481565b6011602052600090815260409020546001600160a01b031681565b60045460009060ff16156109a557506000610899565b5060095490565b600560209081526000928352604080842090915290825290205481565b601281565b60006109d93361184d565b90508015610a0357333214156109f9576109f333826113e8565b50610a03565b61095b3382611445565b50565b610a0e611d5b565b60005b6064811015610a4757600b548101600090815260066020526040902054828260648110610a3a57fe5b6020020152600101610a11565b5090565b60075481565b610a59611d5b565b60005b6064811015610aa6576001600160a01b0383166000908152600560209081526040808320600b5485018452909152902054828260648110610a9957fe5b6020020152600101610a5c565b505b919050565b600f60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a909a015498999798969760ff8088169861010090980416968c565b333214610b4f576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b610b576112d4565b610b92576040805162461bcd60e51b81526020600482015260076024820152661b9bdd081e595d60ca1b604482015290519081900360640190fd5b336000818152600f6020526040902060030154610100900460ff1615610bf1576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b604482015290519081900360640190fd5b610bfa816118ea565b6007546001600160a01b0382166000908152600f6020526040812060060154600a54919291610c2e9163ffffffff6119eb16565b81610c3557fe5b6001600160a01b0384166000908152600f60205260409020600301805461ff00191661010017905504905061095982826113e8565b600e5481565b60045460009060ff1615610c8657506000610aa8565b506001600160a01b03166000908152600f602052604090206005015490565b6001600160a01b0381166000908152600f602052604081206006810154600790910154828115610d1c575b600b54821015610d1c576001600160a01b0385166000908152600560209081526040808320858452909152902054610d0f90829063ffffffff61183d16565b9050600182019150610cd0565b8215610d3757610d32838263ffffffff611a1316565b610d3a565b60005b95945050505050565b607781600a8110610d5057fe5b0154905081565b6040518060400160405280600381526020016233464d60e81b81525081565b60066020526000908152604090205481565b600c5481565b600b5481565b333214610ddc576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b610de46112d4565b15610df35761092f33346113e8565b6001600160a01b0382166000908152600f602052604090206003015460ff16610e1b57600091505b61095b33348385611494565b333214610e6f576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b336000818152600f602052604090206003015460ff16610e8e57600080fd5b6001600160a01b0381166000908152600f6020526040902060090154600a11610eb657600080fd5b6001600160a01b0381166000908152600f6020526040902060090154607790600a8110610edf57fe5b01546001600160a01b0382166000908152600f60205260409020600a015410610a03576001600160a01b0381166000908152600f6020526040902060090154610f309060019063ffffffff61183d16565b6001600160a01b0382166000818152600f6020526040808220600901849055517f082e58bd2e7f7268b36ef0ce2331f7bfd29c08979529cbe85f06375fcecd43729190a350565b333214610fbf576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b610fc76112d4565b15610fd65761092f33346113e8565b6000828152601060205260409020546001600160a01b031661095933348484611494565b6010602052600090815260409020546001600160a01b031681565b60128160658110610d5057fe5b60035481565b60085481565b333214611076576040805162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b604482015290519081900360640190fd5b6002546040516379614c5f60e11b8152602060048201908152602482018490526000926001600160a01b03169163f2c298be9186918691908190604401848480828437600083820152604051601f909101601f191690920195506020945090925050508083038186803b1580156110ec57600080fd5b505afa158015611100573d6000803e3d6000fd5b505050506040513d602081101561111657600080fd5b5051905033662386f26fc1000034101561116d576040805162461bcd60e51b81526020600482015260136024820152721a5b9cdd59999a58da595b9d08185b5bdd5b9d606a1b604482015290519081900360640190fd5b6000828152601160205260409020546001600160a01b0316156111c9576040805162461bcd60e51b815260206004820152600f60248201526e1b985b59481c9959da5cdd195c9959608a1b604482015290519081900360640190fd5b6001600160a01b0381166000908152600f602052604090206003015460ff1661127357600e8054600190810182556001600160a01b0383166000818152600f6020818152604080842060038101805460ff19168817905587548155600901958655955483526010815285832080546001600160a01b03191685179055838352529154925190917f082e58bd2e7f7268b36ef0ce2331f7bfd29c08979529cbe85f06375fcecd437291a35b6001600160a01b0381166000818152600f602090815260408083206001018690558583526011909152902080546001600160a01b03191690911790556112cd7383d0d842e6db3b020f384a2af11bd14787bec8e734611445565b5050505050565b60045460009060ff166113de5742600c54146113de5742600c81905560009062015180900490506000809054906101000a90046001600160a01b03166001600160a01b031663957aa58c6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561134a57600080fd5b505af115801561135e573d6000803e3d6000fd5b505050506040513d602081101561137457600080fd5b505161138c576004805460ff19166001179055426003555b80600b5410156113dc57600b546000908152600660205260409020546007546113ba9163ffffffff611a1316565b600755600b80546000908152600660205260408120558054600101905561138c565b505b5060045460ff1690565b60405160009083906001600160a01b0382169084908481818185875af1925050503d8060008114611435576040519150601f19603f3d011682016040523d82523d6000602084013e61143a565b606091505b509095945050505050565b600080839050828160405161145990611d7a565b6001600160a01b039091168152604051908190036020019082f080158015611485573d6000803e3d6000fd5b50600193505050505b92915050565b61149d846118ea565b633b9aca008310156114e05760405162461bcd60e51b8152600401808060200182810382526021815260200180611db96021913960400191505060405180910390fd5b69021e19e0c9bab2400000831115611530576040805162461bcd60e51b815260206004820152600e60248201526d6e6f20766974616c696b2c206e6f60901b604482015290519081900360640190fd5b606482111561153e57606491505b60006012836065811061154d57fe5b0154670de0b6b3a7640000019050600081611579670de0b6b3a7640000876119eb90919063ffffffff16565b8161158057fe5b0490506000600160009054906101000a90046001600160a01b03166001600160a01b03166310a76c2e600854846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156115e857600080fd5b505afa1580156115fc573d6000803e3d6000fd5b505050506040513d602081101561161257600080fd5b50519050600085156116245781611627565b60005b600b5460085491925087016000190190611641908561183d565b600855600954611657908463ffffffff61183d16565b600955600081815260066020526040902054611679908363ffffffff61183d16565b60008281526006602052604090205560075461169b908363ffffffff61183d16565b6007556001600160a01b0389166000908152600f60205260409020600401546116ca908963ffffffff61183d16565b6001600160a01b038a166000908152600f602052604090206004810191909155600501546116fe908463ffffffff61183d16565b6001600160a01b038a166000908152600f60205260409020600581019190915560060154611732908363ffffffff61183d16565b6001600160a01b038a166000908152600f60209081526040808320600601939093556005815282822084835290522054611772908363ffffffff61183d16565b6001600160a01b038a1660009081526005602090815260408083208584529091529020556117a08887611a28565b6117ab898985611b73565b600b5460408051848152602081018a905281516001600160a01b038d16927f4b9622a7ffcb20551847f4dd71b5b98c4267e10d7d338a6c7fb7b26d45d854e0928290030190a36040805184815290516001600160a01b038b16916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505050505050505050565b8181018281101561148e57600080fd5b60008061185983611bf0565b6001600160a01b0384166000908152600f6020526040812060020154919250611888838363ffffffff61183d16565b905080156118e2576001600160a01b0385166000908152600f602052604081206002810191909155600801546118c590849063ffffffff61183d16565b6001600160a01b0386166000908152600f60205260409020600801555b949350505050565b6001600160a01b0381166000908152600f60205260408120600701549081156119c7575b600b5482101561197e576001600160a01b038316600090815260056020908152604080832085845290915290205461194d90829063ffffffff61183d16565b6001600160a01b0384166000908152600560209081526040808320868452909152812055600190920191905061190e565b6001600160a01b0383166000908152600f60205260409020600601546119aa908263ffffffff611a1316565b6001600160a01b0384166000908152600f60205260409020600601555b5050600b546001600160a01b039091166000908152600f6020526040902060070155565b6000826119fa5750600061148e565b5081810281838281611a0857fe5b041461148e57600080fd5b600082821115611a2257600080fd5b50900390565b6001600160a01b0381166000908152600f60205260409020600301546005830490600a84049060ff1615611b36576001600160a01b0383166000908152600f6020526040812060090154611a8390600663ffffffff61183d16565b905060006064611a99878463ffffffff6119eb16565b81611aa057fe5b6001600160a01b0387166000908152600f60205260409020600201549190049150611ad1908263ffffffff61183d16565b6001600160a01b0386166000908152600f602052604090206002810191909155600a0154611b05908263ffffffff61183d16565b6001600160a01b0386166000908152600f60205260409020600a0155611b31848263ffffffff611a1316565b935050505b611b54739933ad4d38702cdc28c5db2f421f1f02cf53078082611445565b506112cd7383d0d842e6db3b020f384a2af11bd14787bec8e783611445565b60006014611b8884600363ffffffff6119eb16565b81611b8f57fe5b04905060006064611ba785603763ffffffff6119eb16565b81611bae57fe5b0490506000611bbe868486611c48565b9050611be582611bd983600a5461183d90919063ffffffff16565b9063ffffffff61183d16565b600a55505050505050565b6001600160a01b0381166000908152600f602052604081206008810154600590910154600d5461148e9291670de0b6b3a764000091611c349163ffffffff6119eb16565b81611c3b57fe5b049063ffffffff611a1316565b6009546000908190611c6885670de0b6b3a764000063ffffffff6119eb16565b81611c6f57fe5b049050611c8781600d5461183d90919063ffffffff16565b600d556000670de0b6b3a7640000611ca5838663ffffffff6119eb16565b81611cac57fe5b049050611cfd600f6000886001600160a01b03166001600160a01b0316815260200190815260200160002060080154611bd983670de0b6b3a7640000611c3489600d546119eb90919063ffffffff16565b6001600160a01b0387166000908152600f6020526040902060080155600954611d5190670de0b6b3a764000090611d3b90859063ffffffff6119eb16565b81611d4257fe5b8791900463ffffffff611a1316565b9695505050505050565b60405180610c8001604052806064906020820280388339509192915050565b603280611d878339019056fe60806040526040516032380380603283398181016040526020811015602357600080fd5b50516001600160a01b038116fffe706f636b6574206c696e743a206e6f7420612076616c69642063757272656e6379a265627a7a7231582078f7dc0663f1419e97d7fc0c07346c894c816feeb9b5dae00925b35d680d542464736f6c63430005100032

Deployed Bytecode Sourcemap

27:19311:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10360:5;:3;:5::i;:::-;27:19311;16504:155;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16504:155:0;;;:::i;:::-;;;;;;;;;;;;;;;;1710:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1710:21:0;;;:::i;18329:55::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18329:55: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;18329:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9482:392;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9482:392:0;;;;;;;:::i;1937:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1937:19:0;;;:::i;1314:17::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1314:17:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;1762:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1762:19:0;;;:::i;2218:46::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2218:46:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2218:46:0;;:::i;:::-;;;;-1:-1:-1;;;;;2218:46:0;;;;;;;;;;;;;;18484:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18484:115:0;;;:::i;1419:73::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1419:73:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1419:73:0;;;;;;;;:::i;18438:37::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18438:37:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15236:358;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15236:358:0;;;:::i;17958:297::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17958: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;17958:297:0;;;;;;;;;;;;;;;;1589:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1589:30:0;;;:::i;17476:334::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17476:334:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17476:334:0;-1:-1:-1;;;;;17476:334:0;;:::i;2067:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2067:40:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2067:40:0;-1:-1:-1;;;;;2067:40:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14721:449;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14721:449:0;;;:::i;1989:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1989:21:0;;;:::i;18607:136::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18607:136:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18607:136:0;-1:-1:-1;;;;;18607:136:0;;:::i;16789:513::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16789:513:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16789:513:0;-1:-1:-1;;;;;16789:513:0;;:::i;5225:276::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5225:276:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5225:276:0;;:::i;18391:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18391:40:0;;;:::i;1499:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1499:47:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1499:47:0;;:::i;1884:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1884:19:0;;;:::i;1831:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1831:20:0;;;:::i;8614:406::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8614:406:0;;;;;;;;:::i;8154:418::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8154:418:0;;;:::i;9057:386::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9057:386:0;;;;;;;:::i;2135:44::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2135:44:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2135:44:0;;:::i;2456:2725::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2456:2725:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2456:2725:0;;:::i;1289:18::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1289:18:0;;;:::i;1650:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1650:25:0;;;:::i;7220:811::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7220:811:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;7220:811:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7220:811: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;7220:811:0;;-1:-1:-1;7220:811:0;-1:-1:-1;7220:811:0;:::i;9939:356::-;10025:6;:4;:6::i;:::-;10022:208;;;10051:10;10065:9;10051:23;10048:149;;;10093:32;10103:10;10115:9;10093;:32::i;:::-;;10048:149;;;10162:35;10175:10;10187:9;10162:12;:35::i;:::-;;10048:149;10212:7;;10022:208;10242:45;10250:10;10262:9;10273:1;10284;10242:7;:45::i;:::-;9939:356::o;16504:155::-;16576:11;;16598:6;;16549:7;;-1:-1:-1;;;;;16576:11:0;;:21;;16598:31;;16609:19;16598:31;:10;:31;:::i;:::-;16631:19;16576:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16576:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16576:75:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16576:75:0;;-1:-1:-1;16504:155:0;;:::o;1710:21::-;;;;:::o;18329:55::-;;;;;;;;;;;;;;-1:-1:-1;;;18329:55:0;;;;:::o;9482:392::-;5856:10;5870:9;5856:23;5848:53;;;;;-1:-1:-1;;;5848:53:0;;;;;;;;;;;;-1:-1:-1;;;5848:53:0;;;;;;;;;;;;;;;9620:6;:4;:6::i;:::-;9617:90;;;9642:32;9652:10;9664:9;9642;:32::i;:::-;;9689:7;;9617:90;9742:22;9783:23;;;:11;:23;;;;;;-1:-1:-1;;;;;9783:23:0;9821:45;9829:10;9841:9;9852:5;9783:23;9821:7;:45::i;:::-;5912:1;;9482:392;;:::o;1937:19::-;;;;:::o;1314:17::-;;;;;;:::o;1762:19::-;;;;:::o;2218:46::-;;;;;;;;;;;;-1:-1:-1;;;;;2218:46:0;;:::o;18484:115::-;18552:5;;18529:7;;18552:5;;18549:18;;;-1:-1:-1;18566:1:0;18559:8;;18549:18;-1:-1:-1;18585:6:0;;18484:115;:::o;1419:73::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;18438:37::-;18473:2;18438:37;:::o;15236:358::-;15320:12;15350:28;15367:10;15350:16;:28::i;:::-;15343:35;-1:-1:-1;15411:8:0;;15407:180;;15439:10;15453:9;15439:23;15436:139;;;15481:27;15491:10;15503:4;15481:9;:27::i;:::-;;15436:139;;;15545:30;15558:10;15570:4;15545:12;:30::i;15436:139::-;15236:358;:::o;17958:297::-;18038:48;;:::i;:::-;18108:9;18104:110;2368:3;18121:1;:17;18104:110;;;18194:5;;:7;;18181:21;;;;:12;:21;;;;;;18159:16;18200:1;18159:19;;;;;;;;;;:43;18140:3;;18104:110;;;-1:-1:-1;17958:297:0;:::o;1589:30::-;;;;:::o;17476:334::-;17577:48;;:::i;:::-;17647:9;17643:126;2368:3;17660:1;:17;17643:126;;;-1:-1:-1;;;;;17721:27:0;;;;;;:18;:27;;;;;;;;17749:5;;:7;;17721:36;;;;;;;;17699:16;17755:1;17699:19;;;;;;;;;;:58;17679:3;;17643:126;;;-1:-1:-1;17476:334:0;;;;:::o;2067:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14721:449::-;5856:10;5870:9;5856:23;5848:53;;;;;-1:-1:-1;;;5848:53:0;;;;;;;;;;;;-1:-1:-1;;;5848:53:0;;;;;;;;;;;;;;;14797:6;:4;:6::i;:::-;14789:26;;;;;-1:-1:-1;;;14789:26:0;;;;;;;;;;;;-1:-1:-1;;;14789:26:0;;;;;;;;;;;;;;;14878:10;14848:27;14908:19;;;:6;:19;;;;;:27;;;;;;;;14907:28;14899:56;;;;;-1:-1:-1;;;14899:56:0;;;;;;;;;;;;-1:-1:-1;;;14899:56:0;;;;;;;;;;;;;;;14966:29;14983:11;14966:16;:29::i;:::-;15061:15;;-1:-1:-1;;;;;15032:19:0;;15006:14;15032:19;;;:6;:19;;;;;:25;;;15023:4;;15006:14;;15061:15;15023:35;;;:8;:35;:::i;:::-;:53;;;;;-1:-1:-1;;;;;15087:19:0;;;;;;:6;:19;;;;;:27;;:34;;-1:-1:-1;;15087:34:0;;;;;15023:53;;-1:-1:-1;15132:30:0;15094:11;15023:53;15132:9;:30::i;1989:21::-;;;;:::o;18607:136::-;18684:5;;18661:7;;18684:5;;18681:18;;;-1:-1:-1;18698:1:0;18691:8;;18681:18;-1:-1:-1;;;;;;18717:11:0;;;;;:6;:11;;;;;:18;;;;18607:136::o;16789:513::-;-1:-1:-1;;;;;16920:15:0;;16879:7;16920:15;;;:6;:15;;;;;:21;;;;16969:28;;;;;16879:7;17045:11;;17042:196;;17073:152;17088:5;;17079:6;:14;17073:152;;;-1:-1:-1;;;;;17143:27:0;;;;;;:18;:27;;;;;;;;:35;;;;;;;;;17127:52;;:11;;:52;:15;:52;:::i;:::-;17113:66;;17208:1;17198:11;;;;17073:152;;;17255:10;;:39;;17272:22;:5;17282:11;17272:22;:9;:22;:::i;:::-;17255:39;;;17268:1;17255:39;17248:46;16789:513;-1:-1:-1;;;;;16789:513:0:o;5225:276::-;;;;;;;;;;;;;-1:-1:-1;5225:276:0;:::o;18391:40::-;;;;;;;;;;;;;;-1:-1:-1;;;18391:40:0;;;;:::o;1499:47::-;;;;;;;;;;;;;:::o;1884:19::-;;;;:::o;1831:20::-;;;;:::o;8614:406::-;5856:10;5870:9;5856:23;5848:53;;;;;-1:-1:-1;;;5848:53:0;;;;;;;;;;;;-1:-1:-1;;;5848:53:0;;;;;;;;;;;;;;;8756:6;:4;:6::i;:::-;8753:90;;;8778:32;8788:10;8800:9;8778;:32::i;8753:90::-;-1:-1:-1;;;;;8886:14:0;;;;;;:6;:14;;;;;:22;;;;;8882:73;;8941:1;8924:19;;8882:73;8967:45;8975:10;8987:9;8998:5;9005:6;8967:7;:45::i;8154:418::-;5856:10;5870:9;5856:23;5848:53;;;;;-1:-1:-1;;;5848:53:0;;;;;;;;;;;;-1:-1:-1;;;5848:53:0;;;;;;;;;;;;;;;8243:10;8226:14;8272;;;:6;:14;;;;;:22;;;;;8264:31;;;;;;-1:-1:-1;;;;;8314:14:0;;;;;;:6;:14;;;;;:20;;;2406:2;-1:-1:-1;8306:40:0;;;;;;-1:-1:-1;;;;;8407:14:0;;;;;;:6;:14;;;;;:20;;;8395:11;;:33;;;;;;;;;-1:-1:-1;;;;;8362:14:0;;;;;;:6;:14;;;;;:29;;;:66;8359:206;;-1:-1:-1;;;;;8476:14:0;;;;;;:6;:14;;;;;:20;;;8468:29;;8469:1;;8468:29;:7;:29;:::i;:::-;-1:-1:-1;;;;;8445:14:0;;;;;;:6;:14;;;;;;:20;;:52;;;8517:36;;;8445:14;8517:36;5912:1;8154:418::o;9057:386::-;5856:10;5870:9;5856:23;5848:53;;;;;-1:-1:-1;;;5848:53:0;;;;;;;;;;;;-1:-1:-1;;;5848:53:0;;;;;;;;;;;;;;;9193:6;:4;:6::i;:::-;9190:90;;;9215:32;9225:10;9237:9;9215;:32::i;9190:90::-;9315:22;9356:19;;;:9;:19;;;;;;-1:-1:-1;;;;;9356:19:0;9390:45;9398:10;9410:9;9421:5;9356:19;9390:7;:45::i;2135:44::-;;;;;;;;;;;;-1:-1:-1;;;;;2135:44:0;;:::o;2456:2725::-;;;;;;;;;1289:18;;;;:::o;1650:25::-;;;;:::o;7220:811::-;5856:10;5870:9;5856:23;5848:53;;;;;-1:-1:-1;;;5848:53:0;;;;;;;;;;;;-1:-1:-1;;;5848:53:0;;;;;;;;;;;;;;;7353:6;;:28;;-1:-1:-1;;;7353:28:0;;;;;;;;;;;;;;;7337:13;;-1:-1:-1;;;;;7353:6:0;;:15;;7369:11;;;;7353:28;;;;;7369:11;;;;7353:28;1:33:-1;99:1;81:16;;;74:27;7353:28:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;;-1:-1;7353:28:0;;-1:-1:-1;7353:28:0;;-1:-1:-1;;;7353:28:0;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;7353:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7353:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7353:28:0;;-1:-1:-1;7409:10:0;7451:17;7438:9;:30;;7430:62;;;;;-1:-1:-1;;;7430:62:0;;;;;;;;;;;;-1:-1:-1;;;7430:62:0;;;;;;;;;;;;;;;7541:1;7511:18;;;:11;:18;;;;;;-1:-1:-1;;;;;7511:18:0;:32;7503:60;;;;;-1:-1:-1;;;7503:60:0;;;;;;;;;;;;-1:-1:-1;;;7503:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;7580:14:0;;;;;;:6;:14;;;;;:22;;;;;7576:286;;7618:6;:11;;7628:1;7618:11;;;;;-1:-1:-1;;;;;7644:14:0;;7618:6;7644:14;;;:6;:14;;;;;;;;:22;;;:29;;-1:-1:-1;;7644:29:0;;;;;7708:6;;7688:26;;7729:20;;:24;;;7778:6;;7768:17;;:9;:17;;;;;:26;;-1:-1:-1;;;;;;7768:26:0;;;;;7829:14;;;;:20;;7814:36;;7644:14;;7814:36;;;7576:286;-1:-1:-1;;;;;7915:14:0;;;;;;:6;:14;;;;;;;;:19;;:27;;;7953:18;;;:11;:18;;;;;:27;;-1:-1:-1;;;;;;7953:27:0;;;;;;7991:30;1142:42;8011:9;7991:12;:30::i;:::-;;5912:1;;7220:811;;:::o;6364:758::-;6441:5;;6415:4;;6441:5;;6437:645;;6475:3;6467:4;;:11;6463:608;;6506:3;6499:4;:10;;;6528:14;;6552:6;;6545:13;6528:30;;6670:3;;;;;;;;;-1:-1:-1;;;;;6670:3:0;-1:-1:-1;;;;;6670:8:0;;:10;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6670:10:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6670:10:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6670:10:0;6667:107;;6710:5;:12;;-1:-1:-1;;6710:12:0;6718:4;6710:12;;;6751:3;6745;:9;6667:107;6868:6;6860:5;;:14;6853:203;;;6950:5;;6937:19;;;;:12;:19;;;;;;6917:15;;:40;;;:19;:40;:::i;:::-;6899:15;:58;6993:5;;;7002:1;6980:19;;;:12;:19;;;;;:23;7026:10;;7035:1;7026:10;;;6853:203;;;6463:608;;-1:-1:-1;7109:5:0;;;;6364:758;:::o;18903:202::-;19065:32;;18967:12;;19036:2;;-1:-1:-1;;;;;19065:14:0;;;19086:6;;18967:12;19065:32;18967:12;19065:32;19086:6;19065:14;:32;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;-1:-1;19051:46:0;;18903:202;-1:-1:-1;;;;;18903:202:0:o;19113:220::-;19180:12;19205:25;19249:2;19205:48;;19285:6;19293:9;19264:39;;;;;:::i;:::-;-1:-1:-1;;;;;19264:39:0;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;19321:4:0;;-1:-1:-1;;;;19113:220:0;;;;;:::o;10432:1664::-;10540:24;10557:6;10540:16;:24::i;:::-;10601:10;10593:4;:18;;10585:64;;;;-1:-1:-1;;;10585:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10676:23;10668:4;:31;;10660:58;;;;;-1:-1:-1;;;10660:58:0;;;;;;;;;;;;-1:-1:-1;;;10660:58:0;;;;;;;;;;;;;;;2368:3;10734:5;:23;10731:77;;;2368:3;10773:23;;10731:77;10818:13;10834:4;10839:5;10834:11;;;;;;;;;10848:19;10834:33;10818:49;;10878:21;10934:5;10902:29;10911:19;10902:4;:8;;:29;;;;:::i;:::-;:37;;;;;;10878:61;;11165:14;11182:11;;;;;;;;;-1:-1:-1;;;;;11182:11:0;-1:-1:-1;;;;;11182:21:0;;11204:10;;11216:13;11182:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11182:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11182:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11182:48:0;;-1:-1:-1;11241:13:0;11258:10;;11257:23;;11274:6;11257:23;;;11271:1;11257:23;11309:5;;11385:10;;11241:39;;-1:-1:-1;11309:13:0;;-1:-1:-1;;11309:17:0;;11385:29;;11400:13;11385:14;:29::i;:::-;11372:10;:42;11434:6;;:18;;11445:6;11434:18;:10;:18;:::i;:::-;11425:6;:27;11487:21;;;;:12;:21;;;;;;:32;;11513:5;11487:32;:25;:32;:::i;:::-;11463:21;;;;:12;:21;;;;;:56;11548:15;;:26;;11568:5;11548:26;:19;:26;:::i;:::-;11530:15;:44;-1:-1:-1;;;;;11639:14:0;;;;;;:6;:14;;;;;:18;;;:28;;11662:4;11639:28;:22;:28;:::i;:::-;-1:-1:-1;;;;;11618:14:0;;;;;;:6;:14;;;;;:18;;;:49;;;;11702:21;;;:33;;11728:6;11702:33;:25;:33;:::i;:::-;-1:-1:-1;;;;;11678:14:0;;;;;;:6;:14;;;;;:21;;;:57;;;;11769:20;;;:31;;11794:5;11769:31;:24;:31;:::i;:::-;-1:-1:-1;;;;;11746:14:0;;;;;;:6;:14;;;;;;;;:20;;:54;;;;11849:18;:26;;;;;:35;;;;;;;:46;;11889:5;11849:46;:39;:46;:::i;:::-;-1:-1:-1;;;;;11811:26:0;;;;;;:18;:26;;;;;;;;:35;;;;;;;;:84;11908:26;11921:4;11927:6;11908:12;:26::i;:::-;11945:34;11958:6;11966:4;11972:6;11945:12;:34::i;:::-;12016:5;;11995:41;;;;;;;;;;;;;;-1:-1:-1;;;;;11995:41:0;;;;;;;;;;;12052:36;;;;;;;;-1:-1:-1;;;;;12052:36:0;;;12069:1;;12052:36;;;;;;;;;10432:1664;;;;;;;;;:::o;20361:155::-;20477:5;;;20501:6;;;;20493:15;;;;;15602:447;15679:7;15704:12;15719:29;15740:7;15719:20;:29::i;:::-;-1:-1:-1;;;;;15785:15:0;;15770:12;15785:15;;;:6;:15;;;;;:19;;;15704:44;;-1:-1:-1;15848:14:0;15704:44;15785:19;15848:14;:8;:14;:::i;:::-;15828:34;-1:-1:-1;15879:13:0;;15875:137;;-1:-1:-1;;;;;15909:15:0;;15931:1;15909:15;;;:6;:15;;;;;:19;;;:23;;;;15979:20;;;15970:30;;:4;;:30;:8;:30;:::i;:::-;-1:-1:-1;;;;;15947:15:0;;;;;;:6;:15;;;;;:20;;:53;15875:137;16031:9;15602:447;-1:-1:-1;;;;15602:447:0:o;12170:535::-;-1:-1:-1;;;;;12250:15:0;;12233:14;12250:15;;;:6;:15;;;;;:28;;;;12326:11;;12323:328;;12353:210;12368:5;;12359:6;:14;12353:210;;;-1:-1:-1;;;;;12423:27:0;;;;;;:18;:27;;;;;;;;:35;;;;;;;;;12407:52;;:11;;:52;:15;:52;:::i;:::-;-1:-1:-1;;;;;12478:27:0;;12516:1;12478:27;;;:18;:27;;;;;;;;:35;;;;;;;;:39;12546:1;12536:11;;;;12393:66;-1:-1:-1;12353:210:0;;;-1:-1:-1;;;;;12601:15:0;;;;;;:6;:15;;;;;:21;;;:38;;12627:11;12601:38;:25;:38;:::i;:::-;-1:-1:-1;;;;;12577:15:0;;;;;;:6;:15;;;;;:21;;:62;12323:328;-1:-1:-1;;12692:5:0;;-1:-1:-1;;;;;12661:15:0;;;;;;;:6;:15;;;;;:28;;:36;12170:535::o;20000:190::-;20085:9;20116:6;20112:20;;-1:-1:-1;20131:1:0;20124:8;;20112:20;-1:-1:-1;20147:5:0;;;20151:1;20147;:5;:1;20171:5;;;;;:10;20163:19;;;;;20198:155;20283:9;20323:1;20318;:6;;20310:15;;;;;;-1:-1:-1;20340:5:0;;;20198:155::o;12769:613::-;-1:-1:-1;;;;;12975:14:0;;12877:10;12975:14;;;:6;:14;;;;;:22;;;12897:1;12890:8;;;12957:2;12950:9;;;12975:22;;12972:333;;;-1:-1:-1;;;;;13031:14:0;;13013:15;13031:14;;;:6;:14;;;;;:20;;;:27;;13056:1;13031:27;:24;:27;:::i;:::-;13013:45;-1:-1:-1;13073:12:0;13108:3;13088:17;:4;13013:45;13088:17;:8;:17;:::i;:::-;:23;;;;;-1:-1:-1;;;;;13147:14:0;;;;;;:6;:14;;;;;:18;;;13088:23;;;;-1:-1:-1;13147:28:0;;13088:23;13147:28;:22;:28;:::i;:::-;-1:-1:-1;;;;;13126:14:0;;;;;;:6;:14;;;;;:18;;;:49;;;;13222:29;;;:39;;13256:4;13222:39;:33;:39;:::i;:::-;-1:-1:-1;;;;;13190:14:0;;;;;;:6;:14;;;;;:29;;:71;13281:12;:2;13288:4;13281:12;:6;:12;:::i;:::-;13276:17;;12972:333;;;13317:23;1239:42;13335:4;13317:12;:23::i;:::-;;13351;1142:42;13371:2;13351:12;:23::i;13444:445::-;13565:12;13594:2;13580:11;:4;13589:1;13580:11;:8;:11;:::i;:::-;:16;;;;;;;-1:-1:-1;13643:13:0;13674:3;13659:12;:4;13668:2;13659:12;:8;:12;:::i;:::-;:18;;;;;;13643:34;;13745:13;13761:34;13773:6;13781:4;13787:7;13761:11;:34::i;:::-;13745:50;;13843:26;13863:5;13843:15;13852:5;13843:4;;:8;;:15;;;;:::i;:::-;:19;:26;:19;:26;:::i;:::-;13836:4;:33;-1:-1:-1;;;;;;13444:445:0:o;16057:217::-;-1:-1:-1;;;;;16245:15:0;;16152:7;16245:15;;;:6;:15;;;;;:20;;;;16194:22;;;;;16185:4;;16184:82;;16245:20;16220:19;;16185:32;;;:8;:32;:::i;:::-;:54;;;;;;;16184:82;:60;:82;:::i;13897:751::-;14165:6;;14001:7;;;;14133:29;:4;14142:19;14133:29;:8;:29;:::i;:::-;:38;;;;;;14118:53;;14189:14;14198:4;14189;;:8;;:14;;;;:::i;:::-;14182:4;:21;14359:14;14398:19;14377:17;:4;14386:7;14377:17;:8;:17;:::i;:::-;14376:41;;;;;;14359:58;;14451:83;14513:6;:15;14520:7;-1:-1:-1;;;;;14513:15:0;-1:-1:-1;;;;;14513:15:0;;;;;;;;;;;;:20;;;14452:55;14500:6;14475:19;14454:17;14463:7;14454:4;;:8;;:17;;;;:::i;14451:83::-;-1:-1:-1;;;;;14428:15:0;;;;;;:6;:15;;;;;:20;;:106;14609:6;;14590:49;;14619:19;;14600:16;;:4;;:16;:8;:16;:::i;:::-;:38;;;;;14590:4;;14600:38;;14590:49;:8;:49;:::i;:::-;14583:57;13897:751;-1:-1:-1;;;;;;13897:751:0:o;27:19311::-;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;27:19311:0;;;-1:-1:-1;;27:19311:0:o;:::-;;;;;;;;:::o

Swarm Source

bzzr://78f7dc0663f1419e97d7fc0c07346c894c816feeb9b5dae00925b35d680d5424

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.