Contract 0xBb1fA87A4738B22F7d2D5EC34bA349375B4D86F0

 

Contract Overview

Balance:
0 MATIC

MATIC Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x2996a025bdcd9f4c7681beced9b033a57f6616db2789dd5075c9ae5a0758d187Withdraw Ez336311982022-09-27 13:09:1219 hrs 55 mins ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.009872452345 34.730238567
0xb21b068aa5ae86ef3f823915aac78ac658d751a7e0a75b277bd3c1ab66d34be1Withdraw Ez336145992022-09-27 2:57:401 day 6 hrs ago0x95f6acee31baaa407022f897e0320b2419379af1 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.010477860463 36.860000012
0xd38420792271495d40bc20175d0c55a7a741116dce583a0e239067471af64a7eBurn0x BTC For M...336013442022-09-26 19:15:121 day 13 hrs ago0x95f6acee31baaa407022f897e0320b2419379af1 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.004824267842 30.555000014
0x9444b9bfef794b99c8252657360ac1e37d367ee2718acd52e8222360a8ee94acBurn0x BTC For M...335957292022-09-26 15:57:501 day 17 hrs ago0xcc976465b6ee79b86e6033d427bbd49e92716b60 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.004610675308 30.115449438
0xbbc5a77c9440a19f299a4725c43403577460eb4b35267ded5269589d28f4c3f1Burn0x BTC For M...335296792022-09-25 1:28:263 days 7 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.004926021323 31.199466226
0x53604e7f662f453750905180a229cee3574c9b0fe5393eb1b126198933a729ecWithdraw Ez335145182022-09-24 16:44:303 days 16 hrs ago0x21e2a6fcca3d051928085c746043be57193178c7 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.009020580003 30.000000013
0x62d02a03c5400a7c3100adf8ead6f6c44b8590d4a592cf26f123ce0f593862cdWithdraw Ez334826912022-09-23 22:16:074 days 10 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.009210310864 32.802822389
0x92e959e0fc054da17f80b47ecbfd9aadebe307841d7c6721db31ed0d130a7c7fBurn0x BTC For M...334084332022-09-22 3:08:366 days 5 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.004900843522 31.040000018
0x7d8b20911bbb0b39cc228a51d89040597417c089b4830530273be3ebcc04f18fWithdraw Ez333435752022-09-20 12:33:557 days 20 hrs ago0x95f6acee31baaa407022f897e0320b2419379af1 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.008318880003 30.000000012
0x0f1a255f655d2e6500a8a226d213d3a0409a069639c41ed3b860d044d6d9b1dcWithdraw Ez333364462022-09-20 8:24:208 days 40 mins ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.00885248772 30.07
0xf5c717fe57daa40e70eff5de34841082db6c14e9b786bcb3b0148028fa524125Burn0x BTC For M...333013402022-09-19 12:06:478 days 20 hrs ago0x95f6acee31baaa407022f897e0320b2419379af1 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.004824267842 30.555000016
0x66c7ddaa928490e8a0db2f89198e7bf857c00e8d685ae5e4565a92555772e7fdBurn0x BTC For M...332982922022-09-19 10:21:588 days 22 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.004736640002 30.000000013
0xcdcaa453c0a6550623f1fdc817037b285f556250b35e8fd377909cf2229787a4Withdraw Ez331983142022-09-17 0:31:2811 days 8 hrs ago0x95f6acee31baaa407022f897e0320b2419379af1 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.008233586991 30.070000042
0xe0abb61a33bc237613ff75666d793331110218d34a75f8ec9345441e20b788a8Withdraw Ez331962242022-09-16 23:19:3611 days 9 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.010048722509 34.541900732
0x3cd09cb31705a378b010d6bc92724f676e62a18c278bf07de02424950b2622d5Burn0x BTC For M...331925322022-09-16 21:01:3211 days 12 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.0025112912 31.040000011
0xfeabcf2d02da48e3af05a8244a6d778f1259ab4ce582f27d96bf5f67bd0c1f52Burn0x BTC For M...331391842022-09-15 14:04:4712 days 18 hrs ago0x95f6acee31baaa407022f897e0320b2419379af1 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.004736640369 30.000002338
0x0068c9109510cf4d4a24aff45c5ef6070b7c5ac6436dc98c81661c3b534b975dBurn0x BTC For M...331361782022-09-15 12:21:1412 days 20 hrs ago0x21e2a6fcca3d051928085c746043be57193178c7 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.006603760022 38.800000133
0x1766d7e409c4edb3ed0a18d7d25b11c686aa6fe75d960402a7fe2e4294b028fbBurn0x BTC For M...331315552022-09-15 9:42:1812 days 23 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.00474769216 30.070000001
0xbb235e2b0e7f070c0e68ae62cfb10978ef072bb577b12c7bb4c63471768f95b9Withdraw Ez331312412022-09-15 9:31:3012 days 23 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.009159166836 33.881178835
0xebca6519e9032b6c62bc3936fe19fc65f226ef269b290be6832a5cc44c4a6862Withdraw Ez330564902022-09-13 14:34:0414 days 18 hrs ago0x95f6acee31baaa407022f897e0320b2419379af1 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.008388310778 31.029662707
0x30d2a32c8ca998a645e90e997b8945cf2f44c9c8416d93bb275885ddd42e90a9Burn0x BTC For M...330235482022-09-12 19:23:1415 days 13 hrs ago0x95f6acee31baaa407022f897e0320b2419379af1 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.004737000002 30.000000016
0x9bde9e37f973d47e08bab34fba9cd5d159e1f20fbeb3348badbeef5424ed7dd9Burn0x BTC For M...329153902022-09-10 4:50:2718 days 4 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.005531827124 35.03640001
0x4894f31bd60127602ea9a9074f7f553e4fabcfcd5ee39662f0848c08424418ceWithdraw Ez329076382022-09-10 0:15:2618 days 8 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.00880068002 32.98
0xdb475d671d9ea5b01a03a5c87825622dd760b1614d0b4291faa71c3f7f0443a1Withdraw Ez329069032022-09-09 23:48:0418 days 9 hrs ago0x95f6acee31baaa407022f897e0320b2419379af1 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.008005470002 30.000000011
0x39206e73da7745440f0b6e38357c469958fff5af670b4ba9ee6f6d287c540392Burn0x BTC For M...328978582022-09-09 18:32:3418 days 14 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f00 MATIC0.002737674381 33.838135858
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ForgeAuctions

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 99999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-02-12
*/

//  Forge Auctions Contract
//  Auctions Forge tokens every 3 days and users are able to withdraw anytime after!
//
//  The 0xBitcoin tokens collected by Forge Auctions go to miners and liquidity providers!
//
//  10,500,000 Forge tokens are Auctioned off over 100 years in this contract! In the first era ~5,000,000 are auctioned and half every era after!
//
//  Distributes 8,192 Forge tokens every 4-12 days for the first era(~5 years) and halves the amount of Forge every era after
//
// By using the burn0xBTCForMember function
//       0xBitcoin Token is taken from the user and used to recieve your share of the 8,192 tokens auctioned every ~4 days


pragma solidity ^0.8.11;

contract Ownabled {
    address public owner22;
    event TransferOwnership(address _from, address _to);

    constructor() public {
        owner22 = msg.sender;
        emit TransferOwnership(address(0), msg.sender);
    }

    modifier onlyOwner22() {
        require(msg.sender == owner22, "only owner");
        _;
    }
    function setOwner(address _owner22) internal onlyOwner22 {
        emit TransferOwnership(owner22, _owner22);
        owner22 = _owner22;
    }
}

library SafeMath {
    function add(uint256 x, uint256 y) internal pure returns (uint256) {
        uint256 z = x + y;
        require(z >= x, "Add overflow");
        return z;
    }

    function sub(uint256 x, uint256 y) internal pure returns (uint256) {
        require(x >= y, "Sub underflow");
        return x - y;
    }

    function mult(uint256 x, uint256 y) internal pure returns (uint256) {
        if (x == 0) {
            return 0;
        }

        uint256 z = x * y;
        require(z / x == y, "Mult overflow");
        return z;
    }

    function div(uint256 x, uint256 y) internal pure returns (uint256) {
        require(y != 0, "Div by zero");
        return x / y;
    }

    function divRound(uint256 x, uint256 y) internal pure returns (uint256) {
        require(y != 0, "Div by zero");
        uint256 r = x / y;
        if (x % y != 0) {
            r = r + 1;
        }

        return r;
    }
}

library ExtendedMath {


    //return the smaller of the two inputs (a or b)
    function limitLessThan(uint a, uint b) internal pure returns (uint c) {

        if(a > b) return b;

        return a;

    }
}
interface IERC20 {

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
   
    
}

contract GasPump {
    bytes32 private stub;

    modifier requestGas(uint256 _factor) {
        if (tx.gasprice == 0 || gasleft() > block.gaslimit) {
            uint256 startgas = gasleft();
            _;
            uint256 delta = startgas - gasleft();
            uint256 target = (delta * _factor) / 100;
            startgas = gasleft();
            while (startgas - gasleft() < target) {
                // Burn gas
                stub = keccak256(abi.encodePacked(stub));
            }
        } else {
            _;
        }
    }
}

contract ForgeMining{
    function getMiningMinted() public view returns (uint256) {}
    
    }

  contract ForgeAuctions is  GasPump, Ownabled
{

    using SafeMath for uint;
    using ExtendedMath for uint;
    address public AddressZeroXBTC;
    address public AddressForgeToken;
    // ERC-20 Parameters
    uint256 public extraGas;
    bool runonce = false;
    uint256 oneEthUnit = 1000000000000000000; 
    uint256 one0xBTCUnit =         100000000;
    string public name;
    uint public decimals;

    // ERC-20 Mappings
    mapping(address => uint) private _balances;
    mapping(address => mapping(address => uint)) private _allowances;

    // Public Parameters
    uint coin; uint public emission; uint public totalAuctioned = 0;
    uint public currentEra; uint public currentDay;
    uint public daysPerEra; uint public secondsPerDay;
    uint public nextDayTime;
    uint public totalBurnt; uint public totalEmitted;
    // Public Mappings
    
    mapping(uint=>uint) public mapEra_Emission;                                             // Era->Emission
    mapping(uint=>mapping(uint=>uint)) public mapEraDay_MemberCount;                        // Era,Days->MemberCount
    mapping(uint=>mapping(uint=>address[])) public mapEraDay_Members;                       // Era,Days->Members
    mapping(uint=>mapping(uint=>uint)) public mapEraDay_Units;                              // Era,Days->Units
    mapping(uint=>mapping(uint=>uint)) public mapEraDay_UnitsRemaining;                     // Era,Days->TotalUnits
    mapping(uint=>mapping(uint=>uint)) public mapEraDay_EmissionRemaining;                  // Era,Days->Emission
    mapping(uint=>mapping(uint=>mapping(address=>uint))) public mapEraDay_MemberUnits;      // Era,Days,Member->Units
    mapping(address=>mapping(uint=>uint[])) public mapMemberEra_Days;                       // Member,Era->Days[]   
    mapping(address=>uint) public ZmapMember_EraClaimedTo;      // Era,Days,Member->Units
    mapping(address=>uint) public ZmapMember_DayClaimedTo; 
    
    ForgeMining ForgeMiningToken;
    // Events
    event SetExtraGas(uint256 _prev, uint256 _new);
    event NewEra(uint era, uint emission, uint totalBurnt);
    event NewDay(uint era, uint day, uint time, uint previousDayTotal, uint previousDayMembers);
    event Burn(address indexed payer, address indexed member, uint era, uint day, uint units, uint dailyTotal);
    event BurnMultipleDays(address indexed payer, address indexed member, uint era, uint NumberOfDays, uint totalUnits);
  
    event Withdrawal(address indexed caller, address indexed member, uint era, uint day, uint value, uint vetherRemaining);
    event MegaWithdrawal(address indexed caller, address indexed member, uint era, uint TotalDays, uint256 stricttotal);
    uint256 public lastMinted = 0;
    bool onlyOnce = false;
    //=====================================CREATION=========================================//

    // Constructor
    constructor () public {
        name = "Auction Contract"; decimals = 18; 
        coin = 10**decimals; emission = 2048*coin;
        currentEra = 1; currentDay = 1; 
        daysPerEra = 600; secondsPerDay = 24*60*60*3; 
        totalBurnt = 0;
        totalEmitted = 0;
        nextDayTime = block.timestamp + secondsPerDay;
        mapEra_Emission[currentEra] = emission; 
        mapEraDay_EmissionRemaining[currentEra][currentDay] = emission; 
                                                              
    }
    
    
    


        function zSetUP1(address token, address _ZeroXBTCAddress) public onlyOwner22 {
        AddressForgeToken = token;
        owner22 = address(0);
        lastMinted =  0;
        AddressZeroXBTC = _ZeroXBTCAddress;
        ForgeMiningToken = ForgeMining(token);
        lastMinted = ForgeMiningToken.getMiningMinted();

    }

    function changeAuctionAmt() internal {
        uint tokensMinted = ForgeMiningToken.getMiningMinted();
      
        uint diff = tokensMinted - lastMinted;
        uint expected = emission.mult(8*106).div(100);
        if(diff != 0){
            if( diff < expected )
            {
                uint excess_block_pct = (expected.mult(100)).div( diff );
                uint excess_block_pct_extra = excess_block_pct.sub(100).limitLessThan(1000);
            
            // If there were 5% more blocks mined than expected then this is 5.  If there were 100% more blocks mined than expected then this is 100.
            //make it longer since we are not mining enough
            
                secondsPerDay = secondsPerDay.add(secondsPerDay.mult(excess_block_pct_extra).div(1000));   //by up to 100 %
            }else{
                uint shortage_block_pct = (diff.mult(100)).div( expected );
                uint shortage_block_pct_extra = shortage_block_pct.sub(100).limitLessThan(1000); //always between 0 and 1000

             //make it shorter since we are mining too many
                 secondsPerDay = secondsPerDay.sub(secondsPerDay.mult(shortage_block_pct_extra).div(2000));   //by up to 50 %
              }
        }else{
            secondsPerDay = secondsPerDay * 2;
        }
       if(secondsPerDay <= 5)
       {
           secondsPerDay = 10;
       }

           
       lastMinted = tokensMinted;

    }


    //Bids for Whole Era
    function WholeEraBurn0xBTCForMember(address member, uint256 _0xbtcAmountTotal) public returns (bool success)
    {
        uint256 daysleft = daysPerEra - currentDay - 1 ;//just incase
        FutureBurn0xBTCEasier(currentEra, currentDay, daysleft, member, _0xbtcAmountTotal);
        
        return true;
        
    }
    
    
    //Bids for Future in consequitive days
    function FutureBurn0xBTCEasier(uint _era, uint startingday, uint totalNumberrOfDays, address _member, uint _0xbtcAmountTotal) public returns (bool success)
    {
        uint[] memory dd = new uint[](totalNumberrOfDays); 
        uint[] memory amt = new uint[](totalNumberrOfDays);
        uint y=0;
        for(uint x=startingday; x< (startingday+totalNumberrOfDays); x++)
        {
            dd[y] = x;
            amt[y] = _0xbtcAmountTotal/totalNumberrOfDays;
            y++;
        }
        FutureBurn0xBTCArrays(_era, dd, _member, amt);
    
        return true;
    }


    //Burns any amount for any day(s) in any order
    function FutureBurn0xBTCArrays(uint _era, uint[] memory fdays, address _member, uint[] memory _0xbtcAmount) public returns (bool success)
    {
        uint256 stricttotal =0;
        uint256 _daysPerEra=daysPerEra;
        uint _currentEra = currentEra; 
        uint _currentday = currentDay; 
        require(_era >= currentEra, "no knucklehead only bid on this era");
        for(uint256 x = 0; x < fdays.length; x++)
        {
            uint256 dayamt = _0xbtcAmount[x];
            if(_era == _currentEra)
            {
                require(fdays[x] >= currentDay, "Must not bid behind the days");
            }
            require(fdays[x] <= _daysPerEra, "Cant bid on days not in era");
            stricttotal = stricttotal.add(dayamt);
            _recordBurn(msg.sender, _member, _era, fdays[x], dayamt);
        }
    
        require(IERC20(AddressZeroXBTC).transferFrom(msg.sender, AddressForgeToken, stricttotal), "NO OTHER WAY, send it the required 0xBitcoin");
        
        emit BurnMultipleDays(msg.sender, _member, _era, fdays.length, stricttotal);
        
        return true;
    
    }


    function burn0xBTCForMember(address member, uint256 _0xbtcAmount) public returns (bool success) {
        uint day = currentDay;
        require(IERC20(AddressZeroXBTC).transferFrom(msg.sender, AddressForgeToken, _0xbtcAmount), "NO WAY, requires 0xBTC send");
        _recordBurn(msg.sender, member, currentEra, currentDay, _0xbtcAmount);
        emit Burn(msg.sender, member, currentEra, day, _0xbtcAmount, mapEraDay_Units[currentEra][currentDay]);
        
        return true;
    }
    
    
    // Internal - Records burn
    function _recordBurn(address _payer, address _member, uint _era, uint _day, uint _eth) private {
        if (mapEraDay_MemberUnits[_era][_day][_member] == 0){                               // If hasn't contributed to this Day yet
            mapMemberEra_Days[_member][_era].push(_day);                                    // Add it
            mapEraDay_MemberCount[_era][_day] += 1;                                         // Count member
            mapEraDay_Members[_era][_day].push(_member);                                    // Add member
        }
        mapEraDay_MemberUnits[_era][_day][_member] += _eth;                                 // Add member's share
        mapEraDay_UnitsRemaining[_era][_day] += _eth;                                       // Add to total historicals
        mapEraDay_Units[_era][_day] += _eth;                                                // Add to total outstanding
        totalBurnt += _eth;                                                                 // Add to total burnt
        _updateEmission();                                                                  // Update emission Schedule
    }
    
    
    
        //======================================WITHDRAWAL======================================//
    // Used to efficiently track participation in each era
    function getDaysContributedForEra(address member, uint era) public view returns(uint){
        return mapMemberEra_Days[member][era].length;
    }
    
    
    // Call to withdraw a claim
    function withdrawShare(uint era, uint day) external returns (uint value) {
        uint memberUnits = mapEraDay_MemberUnits[era][day][msg.sender];  
        assert (memberUnits != 0); // Get Member Units
        value = _withdrawShare(era, day, msg.sender);
    }
    
    
    // Call to withdraw a claim for another member
    function withdrawShareForMember(uint era, uint day, address member) public returns (uint value) {
        uint memberUnits = mapEraDay_MemberUnits[era][day][member];  
        assert (memberUnits != 0); // Get Member Units
        value = _withdrawShare(era, day, member);
        return value;
    }
    
    
    // Internal - withdraw function
    function _withdrawShare (uint _era, uint _day, address _member) private returns (uint value) {
        _updateEmission(); 
        if (_era < currentEra) {                                                            // Allow if in previous Era
            value = _processWithdrawal(_era, _day, _member);                                // Process Withdrawal
        } else if (_era == currentEra) {                                                    // Handle if in current Era
            if (_day < currentDay) {                                                        // Allow only if in previous Day
                value = _processWithdrawal(_era, _day, _member);                            // Process Withdrawal
            }
        } 
 
        return value;
        
    }
    

    //To change your claiming if somehow error occurs
    function z_ChangeMaxWithdrawl( uint newMaxDay, uint newMaxEra) public returns  (bool success){
        ZmapMember_DayClaimedTo[msg.sender] = newMaxDay;
        ZmapMember_EraClaimedTo[msg.sender] = newMaxEra;
        
        return true;
        
    }
    
    
    //Super easy auction redeeming
    function WithdrawEasiest() public
    {
        WithdrawEz(msg.sender);
    }


    //Helper Function for efficent redeeming of auctions
    function WithdrawEz(address _member) public {
        uint startingday = ZmapMember_DayClaimedTo[_member];
        uint startingera = ZmapMember_EraClaimedTo[_member];
        if(startingday == 0)
        {
            startingday = 1;
        }
        if(startingera == 0)
        {
            startingera = 1;
        }
        uint maxDay=1;
        for(uint y=startingera; y <= currentEra; y++){
            if(y != currentEra){
                maxDay = daysPerEra;
             }else{
               maxDay = currentDay - 1;
             }
          
             uint[] memory dd = new uint[](maxDay-startingday+1); 
             for(uint x=startingday; x<= maxDay; x++)
             {
                  dd[x-startingday] = x ;
             }
             WithdrawlsDays(y, dd, _member);
        }
        
        ZmapMember_DayClaimedTo[_member] = maxDay;
        ZmapMember_DayClaimedTo[_member] = currentEra;
        
    }
    
    
    function Check_Withdraw_Amt(address _member) public view returns(uint amt) {
        uint startingday = ZmapMember_DayClaimedTo[_member];
        uint startingera = ZmapMember_EraClaimedTo[_member];
        if(startingday == 0)
        {
            startingday = 1;
        }
        if(startingera == 0)
        {
            startingera = 1;
        }
        uint maxDay=1;
        uint totz = 0;
        for(uint y=startingera; y <= currentEra; y++){
            if(y != currentEra){
                maxDay = daysPerEra;
             }else{
               maxDay = currentDay - 1;
             }
          
             uint[] memory dd = new uint[](maxDay-startingday+1); 
             for(uint x=startingday; x<= maxDay; x++)
             {
                  dd[x-startingday] = x ;
             }
             totz = totz + Check_Withdrawls_Days(y, dd, _member);
        }
        return totz;
    }
    
    //Withdraws All days in era for member
    function Check_Withdrawls_Days(uint _era, uint[] memory fdays, address _member) public view returns (uint check)
    {
    
        uint256 stricttotal = 0;
        for(uint256 x = 0; x < fdays.length; x++)
        {
            if (_era < currentEra) {                                                                          // Allow if in previous Era
                
                uint memberUnits = mapEraDay_MemberUnits[_era][fdays[x]][_member];
                if (memberUnits!= 0) {
                    stricttotal = stricttotal + getEmissionShare(_era, fdays[x], _member);
                }
            } else if (_era == currentEra) {                                                                  // Handle if in current Era
                if (fdays[x] < currentDay) {                                                                      // Allow only if in previous Day
                    uint memberUnits = mapEraDay_MemberUnits[_era][fdays[x]][_member];
                    if (memberUnits!= 0) {
                        stricttotal = stricttotal + getEmissionShare(_era, fdays[x], _member);
                    }
                }
            } 
        }
    
        return stricttotal*4;
    }

    
    //Withdraws All days in era for member
    function WithdrawlsDays(uint _era, uint[] memory fdays, address _member) public returns (bool success)
    {
    
        uint256 stricttotal = 0;
        for(uint256 x = 0; x < fdays.length; x++)
        {
            if (_era < currentEra) {                                                                          // Allow if in previous Era
                stricttotal = stricttotal.add( _processWithdrawalRETURNSVAL (_era, fdays[x], _member) );      // Process Withdrawal
            } else if (_era == currentEra) {                                                                  // Handle if in current Era
                if (fdays[x] < currentDay) {                                                                      // Allow only if in previous Day
                    stricttotal = stricttotal.add( _processWithdrawalRETURNSVAL (_era, fdays[x], _member) );  // Process Withdrawal
                }
            } 
        }
        IERC20(AddressForgeToken).transfer(_member, stricttotal);
        emit MegaWithdrawal(msg.sender, _member, _era, fdays.length, stricttotal);
    
        return true;
    }


    function _processWithdrawalRETURNSVAL (uint _era, uint256 _day, address _member) private returns (uint256 value) {
        uint memberUnits = mapEraDay_MemberUnits[_era][_day][_member];                      // Get Member Units
        if (memberUnits == 0) { 
            value = 0;                                                                      // Do nothing if 0 (prevents revert)
        } else {
            value = getEmissionShare(_era, _day, _member);                                  // Get the emission Share for Member
            mapEraDay_MemberUnits[_era][_day][_member] = 0;                                 // Set to 0 since it will be withdrawn
            mapEraDay_UnitsRemaining[_era][_day] = mapEraDay_UnitsRemaining[_era][_day].sub(memberUnits);  // Decrement Member Units
            mapEraDay_EmissionRemaining[_era][_day] = mapEraDay_EmissionRemaining[_era][_day].sub(value);  // Decrement emission
            totalEmitted += value*4;
            //We emit all in one transfer.   
        }
        
        return value*4;
        
    }
    
    
    function _processWithdrawal (uint _era, uint _day, address _member) private returns (uint value) {
        uint memberUnits = mapEraDay_MemberUnits[_era][_day][_member];                      // Get Member Units
        if (memberUnits == 0) { 
            value = 0;                                                                      // Do nothing if 0 (prevents revert)
        } else {
            value = getEmissionShare(_era, _day, _member);                                  // Get the emission Share for Member
            mapEraDay_MemberUnits[_era][_day][_member] = 0;                                 // Set to 0 since it will be withdrawn
            mapEraDay_UnitsRemaining[_era][_day] = mapEraDay_UnitsRemaining[_era][_day].sub(memberUnits);  // Decrement Member Units
            mapEraDay_EmissionRemaining[_era][_day] = mapEraDay_EmissionRemaining[_era][_day].sub(value);  // Decrement emission
            totalEmitted += value*4;            
            emit Withdrawal(msg.sender, _member, _era, _day, value*4, mapEraDay_EmissionRemaining[_era][_day]);
            // ERC20 transfer function
            IERC20(AddressForgeToken).transfer(_member, value*4); // 8,192 tokens a auction aka almost half the supply an era!
        }
        
        return value*4;
        
    }
    
    
    //======================================EMISSION========================================//
    
    function getEmissionShare(uint era, uint day, address member) public view returns (uint value) {
    
        uint memberUnits = mapEraDay_MemberUnits[era][day][member];                         // Get Member Units
        if (memberUnits == 0) {
            return 0;                                                                       // If 0, return 0
        } else {
            uint totalUnits = mapEraDay_UnitsRemaining[era][day];                           // Get Total Units
            uint emissionRemaining = mapEraDay_EmissionRemaining[era][day];                 // Get emission remaining for Day
            uint balance = IERC20(AddressForgeToken).balanceOf(address(this));                                      // Find remaining balance
            if (emissionRemaining > balance) { emissionRemaining = balance; }               // In case less than required emission
            value = (emissionRemaining * memberUnits) / totalUnits;                         // Calculate share
            return  value;                            
        }
    }
    
    
    
    // Internal - Update emission function
    function _updateEmission() private {
        uint _now = block.timestamp;                                                                    // Find now()
        if (_now > nextDayTime) {                                                          // If time passed the next Day time
            if (currentDay >= daysPerEra) {                                                 // If time passed the next Era time
                currentEra += 1; currentDay = 0;                                            // Increment Era, reset Day
                emission = getNextEraEmission();                                            // Get correct emission
                mapEra_Emission[currentEra] = emission;                                     // Map emission to Era
                emit NewEra(currentEra, emission, totalBurnt); 
            }
            changeAuctionAmt(); 
            currentDay += 1;                                                                // Increment Day
            nextDayTime = _now + secondsPerDay;                                             // Set next Day time
         
            emission = getDayEmission();  
            totalAuctioned = totalAuctioned + emission*4;
            // Check daily Dmission
            mapEraDay_EmissionRemaining[currentEra][currentDay] = emission;                 // Map emission to Day
            uint _era = currentEra; uint _day = currentDay-1;
            if(currentDay == 1){ _era = currentEra-1; _day = daysPerEra; }                  // Handle New Era
            emit NewDay(currentEra, currentDay, nextDayTime, 
            mapEraDay_Units[_era][_day], mapEraDay_MemberCount[_era][_day]);
            
        }
    }
    
    
    // Calculate Era emission
    function getNextEraEmission() public view returns (uint) {
        if (emission > coin) {                                                              // Normal Emission Schedule
            return emission / 2;                                                            // Emissions: 2048 -> 1.0
        } else{                                                                             // Enters Fee Era
            return coin;                                                                    // Return 1.0 from fees
        }
    }
    
    
     function getSecondsPerDay() public view returns (uint256) {
     
        return secondsPerDay;                                                             // Return 1.0 from fees
    }
       
       
    // Calculate Day emission
    function getDayEmission() public view returns (uint) {
        uint balance = (totalEmitted + IERC20(AddressForgeToken).balanceOf(address(this))) - totalAuctioned;                                     // Find remaining balance
        if (balance > emission*4) {                                                           // Balance is sufficient
            return emission;                                                                // Return emission
        } else {                                                                            // Balance has dropped low
            return balance/4;                                                                 // Return full balance
        }
    }
    
    
    function z_transferERC20TokenToMinerContract(address tokenAddress) public returns (bool success) {
        require(tokenAddress != AddressZeroXBTC && tokenAddress != AddressForgeToken);
        
        return IERC20(tokenAddress).transfer(AddressForgeToken, IERC20(tokenAddress).balanceOf(address(this))); 
    }
    
    
  //Do not allow ETH to enter
  receive() external payable {
    revert();
  }


  fallback() external payable {
    revert();
  }
}

/*
*
* MIT License
* ===========
*
* Copyright (c) 2022 Forge
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.   
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*/

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":false,"internalType":"uint256","name":"era","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"day","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"units","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dailyTotal","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":false,"internalType":"uint256","name":"era","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"NumberOfDays","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalUnits","type":"uint256"}],"name":"BurnMultipleDays","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":false,"internalType":"uint256","name":"era","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TotalDays","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stricttotal","type":"uint256"}],"name":"MegaWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"era","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"day","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"previousDayTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"previousDayMembers","type":"uint256"}],"name":"NewDay","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"era","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"emission","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBurnt","type":"uint256"}],"name":"NewEra","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_prev","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_new","type":"uint256"}],"name":"SetExtraGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"address","name":"_to","type":"address"}],"name":"TransferOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":false,"internalType":"uint256","name":"era","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"day","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"vetherRemaining","type":"uint256"}],"name":"Withdrawal","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"AddressForgeToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AddressZeroXBTC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_member","type":"address"}],"name":"Check_Withdraw_Amt","outputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_era","type":"uint256"},{"internalType":"uint256[]","name":"fdays","type":"uint256[]"},{"internalType":"address","name":"_member","type":"address"}],"name":"Check_Withdrawls_Days","outputs":[{"internalType":"uint256","name":"check","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_era","type":"uint256"},{"internalType":"uint256[]","name":"fdays","type":"uint256[]"},{"internalType":"address","name":"_member","type":"address"},{"internalType":"uint256[]","name":"_0xbtcAmount","type":"uint256[]"}],"name":"FutureBurn0xBTCArrays","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_era","type":"uint256"},{"internalType":"uint256","name":"startingday","type":"uint256"},{"internalType":"uint256","name":"totalNumberrOfDays","type":"uint256"},{"internalType":"address","name":"_member","type":"address"},{"internalType":"uint256","name":"_0xbtcAmountTotal","type":"uint256"}],"name":"FutureBurn0xBTCEasier","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"member","type":"address"},{"internalType":"uint256","name":"_0xbtcAmountTotal","type":"uint256"}],"name":"WholeEraBurn0xBTCForMember","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WithdrawEasiest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_member","type":"address"}],"name":"WithdrawEz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_era","type":"uint256"},{"internalType":"uint256[]","name":"fdays","type":"uint256[]"},{"internalType":"address","name":"_member","type":"address"}],"name":"WithdrawlsDays","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ZmapMember_DayClaimedTo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ZmapMember_EraClaimedTo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"member","type":"address"},{"internalType":"uint256","name":"_0xbtcAmount","type":"uint256"}],"name":"burn0xBTCForMember","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentEra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daysPerEra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emission","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"extraGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDayEmission","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"member","type":"address"},{"internalType":"uint256","name":"era","type":"uint256"}],"name":"getDaysContributedForEra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"era","type":"uint256"},{"internalType":"uint256","name":"day","type":"uint256"},{"internalType":"address","name":"member","type":"address"}],"name":"getEmissionShare","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextEraEmission","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSecondsPerDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapEraDay_EmissionRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapEraDay_MemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"mapEraDay_MemberUnits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapEraDay_Members","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapEraDay_Units","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapEraDay_UnitsRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapEra_Emission","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapMemberEra_Days","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextDayTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner22","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondsPerDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAuctioned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEmitted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"era","type":"uint256"},{"internalType":"uint256","name":"day","type":"uint256"}],"name":"withdrawShare","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"era","type":"uint256"},{"internalType":"uint256","name":"day","type":"uint256"},{"internalType":"address","name":"member","type":"address"}],"name":"withdrawShareForMember","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"_ZeroXBTCAddress","type":"address"}],"name":"zSetUP1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxDay","type":"uint256"},{"internalType":"uint256","name":"newMaxEra","type":"uint256"}],"name":"z_ChangeMaxWithdrawl","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"z_transferERC20TokenToMinerContract","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526005805460ff19908116909155670de0b6b3a76400006006556305f5e1006007556000600e8190556021556022805490911690553480156200004557600080fd5b50600180546001600160a01b03191633908117909155604080516000815260208101929092527f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c910160405180910390a16040805180820190915260108082526f105d58dd1a5bdb8810dbdb9d1c9858dd60821b6020909201918252620000cf9160089162000161565b5060126009819055620000e490600a6200031c565b600c819055620000f79061080062000331565b600d556001600f8190556010556102586011556203f48060128190556000601481905560155562000129904262000353565b601355600d54600f8054600090815260166020908152604080832085905592548252601b8152828220601054835290522055620003ab565b8280546200016f906200036e565b90600052602060002090601f016020900481019282620001935760008555620001de565b82601f10620001ae57805160ff1916838001178555620001de565b82800160010185558215620001de579182015b82811115620001de578251825591602001919060010190620001c1565b50620001ec929150620001f0565b5090565b5b80821115620001ec5760008155600101620001f1565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200025e57816000190482111562000242576200024262000207565b808516156200025057918102915b93841c939080029062000222565b509250929050565b600082620002775750600162000316565b81620002865750600062000316565b81600181146200029f5760028114620002aa57620002ca565b600191505062000316565b60ff841115620002be57620002be62000207565b50506001821b62000316565b5060208310610133831016604e8410600b8410161715620002ef575081810a62000316565b620002fb83836200021d565b806000190482111562000312576200031262000207565b0290505b92915050565b60006200032a838362000266565b9392505050565b60008160001904831182151516156200034e576200034e62000207565b500290565b6000821982111562000369576200036962000207565b500190565b600181811c908216806200038357607f821691505b60208210811415620003a557634e487b7160e01b600052602260045260246000fd5b50919050565b612ead80620003bb6000396000f3fe6080604052600436106102f65760003560e01c80638aab30d31161018f578063c31842e1116100e1578063e82481cf1161008a578063fc5c88fc11610064578063fc5c88fc1461092b578063fee05d6214610940578063ffb671861461095657600080fd5b8063e82481cf146108c9578063ee1f84c3146108de578063f1261e92146108fe57600080fd5b8063dac679ec116100bb578063dac679ec1461082b578063dc3222a614610863578063df0244b1146108b357600080fd5b8063c31842e1146107c9578063c8b9ee6f146107e9578063cb65ee92146107fe57600080fd5b8063973628f611610143578063b36a8ff21161011d578063b36a8ff214610773578063bbc19ab014610793578063bdf75661146107a957600080fd5b8063973628f614610705578063a0dab2411461071b578063a5a1ba211461073b57600080fd5b80639618f7a8116101745780639618f7a814610695578063966ff650146106cd57806396ef5811146106e357600080fd5b80638aab30d314610636578063960bc0f11461067557600080fd5b80635a723dc6116102485780637400457f116101fc578063827c049e116101d6578063827c049e146105de5780638454ed27146105f457806389b86db51461062157600080fd5b80637400457f1461056057806377217a89146105805780637c38a21b146105be57600080fd5b806360b292591161022d57806360b29259146104f2578063638099531461052a5780636de63e261461054057600080fd5b80635a723dc6146104bc5780635c9302c9146104dc57600080fd5b8063313ce567116102aa5780633db9a7ec116102845780633db9a7ec1461044257806349e8a6ad14610462578063510de0941461048f57600080fd5b8063313ce567146104005780633767e339146104165780633ac1c8631461042c57600080fd5b80630e21f7b4116102db5780630e21f7b41461036057806323ba5324146103a55780632a423be8146103d257600080fd5b806306fdde0314610305578063090eb6161461033057600080fd5b3661030057600080fd5b600080fd5b34801561031157600080fd5b5061031a61096c565b604051610327919061289d565b60405180910390f35b34801561033c57600080fd5b5061035061034b366004612a21565b6109fa565b6040519015158152602001610327565b34801561036c57600080fd5b5061038061037b366004612a9f565b610dbc565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610327565b3480156103b157600080fd5b506001546103809073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103de57600080fd5b506103f26103ed366004612acb565b610e0e565b604051908152602001610327565b34801561040c57600080fd5b506103f260095481565b34801561042257600080fd5b506103f260045481565b34801561043857600080fd5b506103f260115481565b34801561044e57600080fd5b506103f261045d366004612aed565b610e50565b34801561046e57600080fd5b506103f261047d366004612b20565b601e6020526000908152604090205481565b34801561049b57600080fd5b506002546103809073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104c857600080fd5b506103f26104d7366004612b20565b610e8e565b3480156104e857600080fd5b506103f260105481565b3480156104fe57600080fd5b506103f261050d366004612acb565b601960209081526000928352604080842090915290825290205481565b34801561053657600080fd5b506103f260125481565b34801561054c57600080fd5b5061035061055b366004612b3b565b610fd9565b34801561056c57600080fd5b5061035061057b366004612b3b565b611185565b34801561058c57600080fd5b506103f261059b366004612b65565b601c60209081526000938452604080852082529284528284209052825290205481565b3480156105ca57600080fd5b506103f26105d9366004612b9a565b6111c2565b3480156105ea57600080fd5b506103f2600d5481565b34801561060057600080fd5b506103f261060f366004612be8565b60166020526000908152604090205481565b34801561062d57600080fd5b506103f2611390565b34801561064257600080fd5b50610350610651366004612acb565b336000908152601f6020908152604080832094909455601e90529190912055600190565b34801561068157600080fd5b50610350610690366004612b9a565b6113b9565b3480156106a157600080fd5b506103f26106b0366004612acb565b601760209081526000928352604080842090915290825290205481565b3480156106d957600080fd5b506103f260145481565b3480156106ef57600080fd5b506107036106fe366004612c01565b611568565b005b34801561071157600080fd5b506103f2600f5481565b34801561072757600080fd5b50610350610736366004612c34565b6116d2565b34801561074757600080fd5b506103f2610756366004612acb565b601b60209081526000928352604080842090915290825290205481565b34801561077f57600080fd5b5061035061078e366004612b20565b6117f8565b34801561079f57600080fd5b506103f260215481565b3480156107b557600080fd5b506103f26107c4366004612b65565b61197b565b3480156107d557600080fd5b506103f26107e4366004612b65565b611ab3565b3480156107f557600080fd5b50610703611b03565b34801561080a57600080fd5b506103f2610819366004612b20565b601f6020526000908152604090205481565b34801561083757600080fd5b506103f2610846366004612acb565b601a60209081526000928352604080842090915290825290205481565b34801561086f57600080fd5b506103f261087e366004612b3b565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152601d60209081526040808320938352929052205490565b3480156108bf57600080fd5b506103f260155481565b3480156108d557600080fd5b506103f2611b0e565b3480156108ea57600080fd5b506107036108f9366004612b20565b611bf2565b34801561090a57600080fd5b506003546103809073ffffffffffffffffffffffffffffffffffffffff1681565b34801561093757600080fd5b506012546103f2565b34801561094c57600080fd5b506103f260135481565b34801561096257600080fd5b506103f2600e5481565b6008805461097990612c7b565b80601f01602080910402602001604051908101604052809291908181526020018280546109a590612c7b565b80156109f25780601f106109c7576101008083540402835291602001916109f2565b820191906000526020600020905b8154815290600101906020018083116109d557829003601f168201915b505050505081565b601154600f546010546000928392909181891015610a9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f6e6f206b6e75636b6c6568656164206f6e6c7920626964206f6e20746869732060448201527f657261000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60005b8851811015610c1e576000878281518110610abf57610abf612ccf565b60200260200101519050838b1415610b56576010548a8381518110610ae657610ae6612ccf565b60200260200101511015610b56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4d757374206e6f742062696420626568696e64207468652064617973000000006044820152606401610a96565b848a8381518110610b6957610b69612ccf565b60200260200101511115610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616e7420626964206f6e2064617973206e6f7420696e2065726100000000006044820152606401610a96565b610be38682611d5a565b9550610c0b338a8d8d8681518110610bfd57610bfd612ccf565b602002602001015185611dd3565b5080610c1681612d2d565b915050610aa2565b506002546003546040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9182166024820152604481018790529116906323b872dd906064016020604051808303816000875af1158015610ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc49190612d66565b610d50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4e4f204f54484552205741592c2073656e64206974207468652072657175697260448201527f6564203078426974636f696e00000000000000000000000000000000000000006064820152608401610a96565b8751604080518b81526020810192909252810185905273ffffffffffffffffffffffffffffffffffffffff88169033907fb4e1fdf06308d5caa2de01f8db08d933fcf160bcda97c1576b56a0c00e893f319060600160405180910390a350600198975050505050505050565b60186020528260005260406000206020528160005260406000208181548110610de457600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16925083915050565b6000828152601c60209081526040808320848452825280832033845290915281205480610e3d57610e3d612d88565b610e48848433611fb0565b949350505050565b601d6020528260005260406000206020528160005260406000208181548110610e7857600080fd5b9060005260206000200160009250925050505481565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601f6020908152604080832054601e90925282205481610ec957600191505b80610ed2575060015b60016000825b600f548111610fcf57600f548114610ef4576011549250610f06565b6001601054610f039190612db7565b92505b6000610f128685612db7565b610f1d906001612dce565b67ffffffffffffffff811115610f3557610f35612910565b604051908082528060200260200182016040528015610f5e578160200160208202803683370190505b509050855b848111610fa3578082610f768983612db7565b81518110610f8657610f86612ccf565b602090810291909101015280610f9b81612d2d565b915050610f63565b50610faf82828a6111c2565b610fb99084612dce565b9250508080610fc790612d2d565b915050610ed8565b5095945050505050565b6010546002546003546040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9182166024820152604481018590526000939291909116906323b872dd906064016020604051808303816000875af1158015611063573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110879190612d66565b6110ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4e4f205741592c2072657175697265732030784254432073656e6400000000006044820152606401610a96565b6110fe3385600f5460105487611dd3565b600f546000818152601960209081526040808320601054845282529182902054825193845290830184905282820186905260608301525173ffffffffffffffffffffffffffffffffffffffff86169133917f661f25a08ee5c15fc997f7288c9cd798e1905052f21d761925800799791f130b9181900360800190a360019150505b92915050565b600080600160105460115461119a9190612db7565b6111a49190612db7565b90506111b7600f546010548387876116d2565b506001949350505050565b600080805b845181101561137957600f54861015611293576000868152601c60205260408120865182908890859081106111fe576111fe612ccf565b6020026020010151815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508060001461128d576112808787848151811061127257611272612ccf565b60200260200101518761197b565b61128a9084612dce565b92505b50611367565b600f54861415611367576010548582815181106112b2576112b2612ccf565b60200260200101511015611367576000868152601c60205260408120865182908890859081106112e4576112e4612ccf565b6020026020010151815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600014611365576113588787848151811061127257611272612ccf565b6113629084612dce565b92505b505b8061137181612d2d565b9150506111c7565b50611385816004612de6565b9150505b9392505050565b6000600c54600d5411156113b2576002600d546113ad9190612e23565b905090565b50600c5490565b600080805b845181101561146157600f54861015611406576113ff6113f8878784815181106113ea576113ea612ccf565b602002602001015187611ff5565b8390611d5a565b915061144f565b600f5486141561144f5760105485828151811061142557611425612ccf565b6020026020010151101561144f5761144c6113f8878784815181106113ea576113ea612ccf565b91505b8061145981612d2d565b9150506113be565b506003546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af11580156114db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ff9190612d66565b508351604080518781526020810192909252810182905273ffffffffffffffffffffffffffffffffffffffff84169033907fc6fadbab41d2daf77182ff3236e4abbb3c021507103dc894b421b1d68f88acea9060600160405180910390a3506001949350505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146115e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c79206f776e6572000000000000000000000000000000000000000000006044820152606401610a96565b6003805473ffffffffffffffffffffffffffffffffffffffff8085167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560018054831690556000602155600280549185169183169190911790556020805490911682178155604080517fc0abebe0000000000000000000000000000000000000000000000000000000008152905163c0abebe0926004808401939192918290030181865afa1580156116a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cb9190612e5e565b6021555050565b6000808467ffffffffffffffff8111156116ee576116ee612910565b604051908082528060200260200182016040528015611717578160200160208202803683370190505b50905060008567ffffffffffffffff81111561173557611735612910565b60405190808252806020026020018201604052801561175e578160200160208202803683370190505b5090506000875b61176f888a612dce565b8110156117db578084838151811061178957611789612ccf565b602090810291909101015261179e8887612e23565b8383815181106117b0576117b0612ccf565b6020908102919091010152816117c581612d2d565b92505080806117d390612d2d565b915050611765565b506117e8898488856109fa565b5060019998505050505050505050565b60025460009073ffffffffffffffffffffffffffffffffffffffff838116911614801590611841575060035473ffffffffffffffffffffffffffffffffffffffff838116911614155b61184a57600080fd5b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8481169263a9059cbb9291169083906370a0823190602401602060405180830381865afa1580156118c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e79190612e5e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015611957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117f9190612d66565b6000838152601c60209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff85168452909152812054806119c2576000915050611389565b6000858152601a60209081526040808320878452825280832054888452601b83528184208885529092528083205460035491517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015292939092909173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a859190612e5e565b905080821115611a93578091505b82611a9e8584612de6565b611aa89190612e23565b945050505050611389565b6000838152601c60209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205480611af857611af8612d88565b611385858585611fb0565b611b0c33611bf2565b565b600e546003546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000928392909173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015611b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baa9190612e5e565b601554611bb79190612dce565b611bc19190612db7565b9050600d546004611bd29190612de6565b811115611be1575050600d5490565b611bec600482612e23565b91505090565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601f6020908152604080832054601e9092529091205481611c2e57600191505b80611c37575060015b6001815b600f548111611d2757600f548114611c57576011549150611c69565b6001601054611c669190612db7565b91505b6000611c758584612db7565b611c80906001612dce565b67ffffffffffffffff811115611c9857611c98612910565b604051908082528060200260200182016040528015611cc1578160200160208202803683370190505b509050845b838111611d06578082611cd98883612db7565b81518110611ce957611ce9612ccf565b602090810291909101015280611cfe81612d2d565b915050611cc6565b50611d128282886113b9565b50508080611d1f90612d2d565b915050611c3b565b5073ffffffffffffffffffffffffffffffffffffffff9093166000908152601f602052604090209283555050600f549055565b600080611d678385612dce565b905083811015611389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f416464206f766572666c6f7700000000000000000000000000000000000000006044820152606401610a96565b6000838152601c60209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff88168452909152902054611edf5773ffffffffffffffffffffffffffffffffffffffff84166000908152601d60209081526040808320868452825280832080546001818101835591855283852001869055868452601783528184208685529092528220805491929091611e75908490612dce565b9091555050600083815260186020908152604080832085845282528220805460018101825590835291200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86161790555b6000838152601c60209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff8816845290915281208054839290611f26908490612dce565b90915550506000838152601a6020908152604080832085845290915281208054839290611f54908490612dce565b9091555050600083815260196020908152604080832085845290915281208054839290611f82908490612dce565b925050819055508060146000828254611f9b9190612dce565b90915550611fa9905061211f565b5050505050565b6000611fba61211f565b600f54841015611fd657611fcf8484846122f2565b9050611389565b600f548414156113895760105483101561138957610e488484846122f2565b6000838152601c60209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff851684529091528120548061203b5760009150612114565b61204685858561197b565b6000868152601c60209081526040808320888452825280832073ffffffffffffffffffffffffffffffffffffffff881684528252808320839055888352601a82528083208884529091529020549092506120a0908261255a565b6000868152601a60209081526040808320888452825280832093909355878252601b8152828220878352905220546120d8908361255a565b6000868152601b602090815260408083208884529091529020556120fd826004612de6565b6015600082825461210e9190612dce565b90915550505b611385826004612de6565b60135442908111156122ef57601154601054106121bb576001600f60008282546121499190612dce565b9091555050600060105561215b611390565b600d819055600f805460009081526016602090815260409182902084905591546014548251918252928101939093528201527f9d472bcf372fce01fd875c3296e8e5ae0a08bfca42dedac19e202271ce8f39c59060600160405180910390a15b6121c36125d0565b6001601060008282546121d69190612dce565b90915550506012546121e89082612dce565b6013556121f3611b0e565b600d819055612203906004612de6565b600e546122109190612dce565b600e55600d54600f80546000908152601b6020908152604080832060108054855292528220939093559054915461224990600190612db7565b90506010546001141561226d576001600f546122659190612db7565b915060115490505b600f54601054601354600085815260196020908152604080832087845282528083205488845260178352818420888552835292819020548151968752918601949094528484019290925260608401526080830152517ff0047f88d9bce548f6a3b5f02aae9964bcb69afb1848b6acaab809a2b0629aaf9181900360a00190a150505b50565b6000838152601c60209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff85168452909152812054806123385760009150612114565b61234385858561197b565b6000868152601c60209081526040808320888452825280832073ffffffffffffffffffffffffffffffffffffffff881684528252808320839055888352601a825280832088845290915290205490925061239d908261255a565b6000868152601a60209081526040808320888452825280832093909355878252601b8152828220878352905220546123d5908361255a565b6000868152601b602090815260408083208884529091529020556123fa826004612de6565b6015600082825461240b9190612dce565b909155505073ffffffffffffffffffffffffffffffffffffffff8316337f7f3fa649aa08dbaff5b36b865f9585ae5b83bcb35185c846035019b63967b6e98787612456876004612de6565b60008b8152601b602090815260408083208d845282529182902054825195865290850193909352830152606082015260800160405180910390a360035473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb846124ba856004612de6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561252a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254e9190612d66565b50611385826004612de6565b6000818310156125c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f53756220756e646572666c6f77000000000000000000000000000000000000006044820152606401610a96565b6113898284612db7565b60208054604080517fc0abebe0000000000000000000000000000000000000000000000000000000008152905160009373ffffffffffffffffffffffffffffffffffffffff9093169263c0abebe092600480820193918290030181865afa15801561263f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126639190612e5e565b90506000602154826126759190612db7565b9050600061269b6064612695610350600d5461278390919063ffffffff16565b90612812565b9050811561275a578082101561270b5760006126bc83612695846064612783565b905060006126d76103e86126d184606461255a565b90612885565b90506127006126f76103e86126958460125461278390919063ffffffff16565b60125490611d5a565b6012555061276c9050565b600061271c82612695856064612783565b905060006127316103e86126d184606461255a565b90506127006127516107d06126958460125461278390919063ffffffff16565b6012549061255a565b601254612768906002612de6565b6012555b60056012541161277c57600a6012555b5050602155565b6000826127925750600061117f565b600061279e8385612de6565b9050826127ab8583612e23565b14611389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d756c74206f766572666c6f77000000000000000000000000000000000000006044820152606401610a96565b60008161287b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f446976206279207a65726f0000000000000000000000000000000000000000006044820152606401610a96565b6113898284612e23565b60008183111561289657508061117f565b5090919050565b600060208083528351808285015260005b818110156128ca578581018301518582016040015282016128ae565b818111156128dc576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261295057600080fd5b8135602067ffffffffffffffff8083111561296d5761296d612910565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156129b0576129b0612910565b6040529384528581018301938381019250878511156129ce57600080fd5b83870191505b848210156129ed578135835291830191908301906129d4565b979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612a1c57600080fd5b919050565b60008060008060808587031215612a3757600080fd5b84359350602085013567ffffffffffffffff80821115612a5657600080fd5b612a628883890161293f565b9450612a70604088016129f8565b93506060870135915080821115612a8657600080fd5b50612a938782880161293f565b91505092959194509250565b600080600060608486031215612ab457600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612ade57600080fd5b50508035926020909101359150565b600080600060608486031215612b0257600080fd5b612b0b846129f8565b95602085013595506040909401359392505050565b600060208284031215612b3257600080fd5b611389826129f8565b60008060408385031215612b4e57600080fd5b612b57836129f8565b946020939093013593505050565b600080600060608486031215612b7a57600080fd5b8335925060208401359150612b91604085016129f8565b90509250925092565b600080600060608486031215612baf57600080fd5b83359250602084013567ffffffffffffffff811115612bcd57600080fd5b612bd98682870161293f565b925050612b91604085016129f8565b600060208284031215612bfa57600080fd5b5035919050565b60008060408385031215612c1457600080fd5b612c1d836129f8565b9150612c2b602084016129f8565b90509250929050565b600080600080600060a08688031215612c4c57600080fd5b853594506020860135935060408601359250612c6a606087016129f8565b949793965091946080013592915050565b600181811c90821680612c8f57607f821691505b60208210811415612cc9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d5f57612d5f612cfe565b5060010190565b600060208284031215612d7857600080fd5b8151801515811461138957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015612dc957612dc9612cfe565b500390565b60008219821115612de157612de1612cfe565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612e1e57612e1e612cfe565b500290565b600082612e59577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215612e7057600080fd5b505191905056fea2646970667358221220d39043fefebf6a00290edc0ce49ad12e406fb9e097e3fd02db2fb1a1df73843064736f6c634300080b0033

Deployed ByteCode Sourcemap

5496:23483:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28962:8;;;5496:23483;;;;;;;;;;;;;;;;28962:8;;;5496:23483;;;;;;;;;;;;;;;;;;;;;28962:8;;;5496:23483;;;;;;;;;;;;;;;;28962:8;;;5496:23483;;;;;;;;;;;;;;;;;;;;;;;;;;28962:8;;;5496:23483;;;;;;;;;;;;;;;;28962:8;;;5496:23483;;;;;;;;;;;;;;;;;;;;;28962:8;;;5496:23483;;;;;;;;;;;28962:8;;;5496:23483;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28962:8;;;5496:23483;;;;;;;;;;;;;;;;28962:8;;;5496:23483;;;;;;;;;;;;;;;;;;;;;28962:8;;;5496:23483;;;;;;;;;;;28962:8;;;5496:23483;;;;;;;;;;;;;;;;;;;;;;;;;;28962:8;;;5496:23483;;;;;;;;;;;;;;;;28962:8;;;5496:23483;;;;;;;;;;;;;;;;;;;;;28962:8;;;5496:23483;;;;;;;;;;;28962:8;;;5496:23483;;;;28905:8;;;5496:23483;28962:8;;;5869:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11850:1142;;;;;;;;;;-1:-1:-1;11850:1142:0;;;;;:::i;:::-;;:::i;:::-;;;2939:14:1;;2932:22;2914:41;;2902:2;2887:18;11850:1142:0;2774:187:1;6617:64:0;;;;;;;;;;-1:-1:-1;6617:64:0;;;;;:::i;:::-;;:::i;:::-;;;3463:42:1;3451:55;;;3433:74;;3421:2;3406:18;6617:64:0;3287:226:1;724:22:0;;;;;;;;;;-1:-1:-1;724:22:0;;;;;;;;15087:267;;;;;;;;;;-1:-1:-1;15087:267:0;;;;;:::i;:::-;;:::i;:::-;;;3917:25:1;;;3905:2;3890:18;15087:267:0;3771:177:1;5894:20:0;;;;;;;;;;;;;;;;5717:23;;;;;;;;;;;;;;;;6218:22;;;;;;;;;;;;;;;;7194:64;;;;;;;;;;-1:-1:-1;7194:64:0;;;;;:::i;:::-;;:::i;7312:53::-;;;;;;;;;;-1:-1:-1;7312:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;5615:30;;;;;;;;;;-1:-1:-1;5615:30:0;;;;;;;;18088:935;;;;;;;;;;-1:-1:-1;18088:935:0;;;;;:::i;:::-;;:::i;6189:22::-;;;;;;;;;;;;;;;;6731:57;;;;;;;;;;-1:-1:-1;6731:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;6242:25;;;;;;;;;;;;;;;;13002:492;;;;;;;;;;-1:-1:-1;13002:492:0;;;;;:::i;:::-;;:::i;10805:328::-;;;;;;;;;;-1:-1:-1;10805:328:0;;;;;:::i;:::-;;:::i;7075:81::-;;;;;;;;;;-1:-1:-1;7075:81:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19079:1241;;;;;;;;;;-1:-1:-1;19079:1241:0;;;;;:::i;:::-;;:::i;6106:20::-;;;;;;;;;;;;;;;;6389:42;;;;;;;;;;-1:-1:-1;6389:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;26969:544;;;;;;;;;;;;;:::i;16644:259::-;;;;;;;;;;-1:-1:-1;16644:259:0;;;;;:::i;:::-;16772:10;16724:12;16748:35;;;:23;:35;;;;;;;;:47;;;;16806:23;:35;;;;;;:47;16881:4;;16644:259;20378:1135;;;;;;;;;;-1:-1:-1;20378:1135:0;;;;;:::i;:::-;;:::i;6499:63::-;;;;;;;;;;-1:-1:-1;6499:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;6304:22;;;;;;;;;;;;;;;;8960:331;;;;;;;;;;-1:-1:-1;8960:331:0;;;;;:::i;:::-;;:::i;:::-;;6165:22;;;;;;;;;;;;;;;;11195:593;;;;;;;;;;-1:-1:-1;11195:593:0;;;;;:::i;:::-;;:::i;6960:69::-;;;;;;;;;;-1:-1:-1;6960:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;28507:317;;;;;;;;;;-1:-1:-1;28507:317:0;;;;;:::i;:::-;;:::i;8218:29::-;;;;;;;;;;;;;;;;24057:1077;;;;;;;;;;-1:-1:-1;24057:1077:0;;;;;:::i;:::-;;:::i;15424:305::-;;;;;;;;;;-1:-1:-1;15424:305:0;;;;;:::i;:::-;;:::i;16957:80::-;;;;;;;;;;;;;:::i;7403:53::-;;;;;;;;;;-1:-1:-1;7403:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;6843:66;;;;;;;;;;-1:-1:-1;6843:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;14888:148;;;;;;;;;;-1:-1:-1;14888:148:0;;;;;:::i;:::-;14991:25;;;;;14968:4;14991:25;;;:17;:25;;;;;;;;:30;;;;;;;:37;;14888:148;6328:24;;;;;;;;;;;;;;;;27775:714;;;;;;;;;;;;;:::i;17105:965::-;;;;;;;;;;-1:-1:-1;17105:965:0;;;;;:::i;:::-;;:::i;5652:32::-;;;;;;;;;;-1:-1:-1;5652:32:0;;;;;;;;27532:188;;;;;;;;;;-1:-1:-1;27615:13:0;;27532:188;;6274:23;;;;;;;;;;;;;;;;6128:30;;;;;;;;;;;;;;;;5869:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11850:1142::-;12057:10;;12097;;12138;;11974:12;;;;12057:10;;12168:18;;;;12160:66;;;;;;;7111:2:1;12160:66:0;;;7093:21:1;7150:2;7130:18;;;7123:30;7189:34;7169:18;;;7162:62;7260:5;7240:18;;;7233:33;7283:19;;12160:66:0;;;;;;;;;12241:9;12237:460;12260:5;:12;12256:1;:16;12237:460;;;12303:14;12320:12;12333:1;12320:15;;;;;;;;:::i;:::-;;;;;;;12303:32;;12361:11;12353:4;:19;12350:135;;;12426:10;;12414:5;12420:1;12414:8;;;;;;;;:::i;:::-;;;;;;;:22;;12406:63;;;;;;;7704:2:1;12406:63:0;;;7686:21:1;7743:2;7723:18;;;7716:30;7782;7762:18;;;7755:58;7830:18;;12406:63:0;7502:352:1;12406:63:0;12519:11;12507:5;12513:1;12507:8;;;;;;;;:::i;:::-;;;;;;;:23;;12499:63;;;;;;;8061:2:1;12499:63:0;;;8043:21:1;8100:2;8080:18;;;8073:30;8139:29;8119:18;;;8112:57;8186:18;;12499:63:0;7859:351:1;12499:63:0;12591:23;:11;12607:6;12591:15;:23::i;:::-;12577:37;;12629:56;12641:10;12653:7;12662:4;12668:5;12674:1;12668:8;;;;;;;;:::i;:::-;;;;;;;12678:6;12629:11;:56::i;:::-;-1:-1:-1;12274:3:0;;;;:::i;:::-;;;;12237:460;;;-1:-1:-1;12728:15:0;;12770:17;;12721:80;;;;;12758:10;12721:80;;;8867:34:1;12728:15:0;12770:17;;;8917:18:1;;;8910:43;8969:18;;;8962:34;;;12728:15:0;;;12721:36;;8779:18:1;;12721:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12713:137;;;;;;;9491:2:1;12713:137:0;;;9473:21:1;9530:2;9510:18;;;9503:30;9569:34;9549:18;;;9542:62;9640:14;9620:18;;;9613:42;9672:19;;12713:137:0;9289:408:1;12713:137:0;12920:12;;12876:70;;;9904:25:1;;;9960:2;9945:18;;9938:34;;;;9988:18;;9981:34;;;12876:70:0;;;;12893:10;;12876:70;;9892:2:1;9877:18;12876:70:0;;;;;;;-1:-1:-1;12974:4:0;;11850:1142;-1:-1:-1;;;;;;;;11850:1142:0:o;6617:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6617:64:0;;-1:-1:-1;;6617:64:0:o;15087:267::-;15148:10;15190:26;;;:21;:26;;;;;;;;:31;;;;;;;;15222:10;15190:43;;;;;;;;15254:16;15246:25;;;;:::i;:::-;15310:36;15325:3;15330;15335:10;15310:14;:36::i;:::-;15302:44;15087:267;-1:-1:-1;;;;15087:267:0:o;7194:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18088:935::-;18193:32;;;18153:8;18193:32;;;:23;:32;;;;;;;;;18255:23;:32;;;;;;18301:16;18298:72;;18357:1;18343:15;;18298:72;18383:16;18380:72;;-1:-1:-1;18439:1:0;18380:72;18474:1;18462:11;18521;18510:484;18539:10;;18534:1;:15;18510:484;;18578:10;;18573:1;:15;18570:136;;18617:10;;18608:19;;18570:136;;;18688:1;18675:10;;:14;;;;:::i;:::-;18666:23;;18570:136;18733:16;18763:18;18770:11;18763:6;:18;:::i;:::-;:20;;18782:1;18763:20;:::i;:::-;18752:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18752:32:0;-1:-1:-1;18733:51:0;-1:-1:-1;18812:11:0;18801:115;18829:6;18825:1;:10;18801:115;;18897:1;18877:2;18880:13;18882:11;18897:1;18880:13;:::i;:::-;18877:17;;;;;;;;:::i;:::-;;;;;;;;;;:21;18837:3;;;;:::i;:::-;;;;18801:115;;;;18945:37;18967:1;18970:2;18974:7;18945:21;:37::i;:::-;18938:44;;:4;:44;:::i;:::-;18931:51;;18555:439;18551:3;;;;;:::i;:::-;;;;18510:484;;;-1:-1:-1;19011:4:0;18088:935;-1:-1:-1;;;;;18088:935:0:o;13002:492::-;13120:10;;13156:15;;13198:17;;13149:81;;;;;13186:10;13149:81;;;8867:34:1;13156:15:0;13198:17;;;8917:18:1;;;8910:43;8969:18;;;8962:34;;;13084:12:0;;13120:10;13156:15;;;;;13149:36;;8779:18:1;;13149:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13141:121;;;;;;;10680:2:1;13141:121:0;;;10662:21:1;10719:2;10699:18;;;10692:30;10758:29;10738:18;;;10731:57;10805:18;;13141:121:0;10478:351:1;13141:121:0;13273:69;13285:10;13297:6;13305:10;;13317;;13329:12;13273:11;:69::i;:::-;13383:10;;13414:27;;;;:15;:27;;;;;;;;13442:10;;13414:39;;;;;;;;;13358:96;;11065:25:1;;;11106:18;;;11099:34;;;11149:18;;;11142:34;;;11207:2;11192:18;;11185:34;13358:96:0;;;;;13363:10;;13358:96;;;;;11052:3:1;13358:96:0;;;13482:4;13475:11;;;13002:492;;;;;:::o;10805:328::-;10900:12;10930:16;10975:1;10962:10;;10949;;:23;;;;:::i;:::-;:27;;;;:::i;:::-;10930:46;;11001:82;11023:10;;11035;;11047:8;11057:6;11065:17;11001:21;:82::i;:::-;-1:-1:-1;11111:4:0;;10805:328;-1:-1:-1;;;;10805:328:0:o;19079:1241::-;19180:10;;;19248:1028;19271:5;:12;19267:1;:16;19248:1028;;;19325:10;;19318:4;:17;19314:950;;;19475:16;19494:27;;;:21;:27;;;;;19522:8;;19475:16;;19522:5;;19528:1;;19522:8;;;;;;:::i;:::-;;;;;;;19494:37;;;;;;;;;;;:46;19532:7;19494:46;;;;;;;;;;;;;;;;19475:65;;19563:11;19577:1;19563:15;19559:133;;19631:41;19648:4;19654:5;19660:1;19654:8;;;;;;;;:::i;:::-;;;;;;;19664:7;19631:16;:41::i;:::-;19617:55;;:11;:55;:::i;:::-;19603:69;;19559:133;19337:370;19314:950;;;19725:10;;19717:4;:18;19713:551;;;19864:10;;19853:5;19859:1;19853:8;;;;;;;;:::i;:::-;;;;;;;:21;19849:400;;;20001:16;20020:27;;;:21;:27;;;;;20048:8;;20001:16;;20048:5;;20054:1;;20048:8;;;;;;:::i;:::-;;;;;;;20020:37;;;;;;;;;;;:46;20058:7;20020:46;;;;;;;;;;;;;;;;20001:65;;20093:11;20107:1;20093:15;20089:141;;20165:41;20182:4;20188:5;20194:1;20188:8;;;;;;;;:::i;20165:41::-;20151:55;;:11;:55;:::i;:::-;20137:69;;20089:141;19876:373;19849:400;19285:3;;;;:::i;:::-;;;;19248:1028;;;-1:-1:-1;20299:13:0;:11;20311:1;20299:13;:::i;:::-;20292:20;;;19079:1241;;;;;;:::o;26969:544::-;27020:4;27052;;27041:8;;:15;27037:469;;;27180:1;27169:8;;:12;;;;:::i;:::-;27162:19;;26969:544;:::o;27037:469::-;-1:-1:-1;27399:4:0;;;26969:544::o;20378:1135::-;20467:12;;;20537:790;20560:5;:12;20556:1;:16;20537:790;;;20614:10;;20607:4;:17;20603:712;;;20760:73;20777:54;20807:4;20813:5;20819:1;20813:8;;;;;;;;:::i;:::-;;;;;;;20823:7;20777:28;:54::i;:::-;20760:11;;:15;:73::i;:::-;20746:87;;20603:712;;;20894:10;;20886:4;:18;20882:433;;;21033:10;;21022:5;21028:1;21022:8;;;;;;;;:::i;:::-;;;;;;;:21;21018:282;;;21184:73;21201:54;21231:4;21237:5;21243:1;21237:8;;;;;;;;:::i;21184:73::-;21170:87;;21018:282;20574:3;;;;:::i;:::-;;;;20537:790;;;-1:-1:-1;21344:17:0;;21337:56;;;;;21344:17;11934:55:1;;;21337:56:0;;;11916:74:1;12006:18;;;11999:34;;;21344:17:0;;;;21337:34;;11889:18:1;;21337:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21451:12:0;;21409:68;;;9904:25:1;;;9960:2;9945:18;;9938:34;;;;9988:18;;9981:34;;;21409:68:0;;;;21424:10;;21409:68;;9892:2:1;9877:18;21409:68:0;;;;;;;-1:-1:-1;21501:4:0;;20378:1135;-1:-1:-1;;;;20378:1135:0:o;8960:331::-;994:7;;;;980:10;:21;972:44;;;;;;;12246:2:1;972:44:0;;;12228:21:1;12285:2;12265:18;;;12258:30;12324:12;12304:18;;;12297:40;12354:18;;972:44:0;12044:334:1;972:44:0;9048:17:::1;:25:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;9084:20;;;::::1;::::0;;9048:17:::1;9115:10;:15:::0;-1:-1:-1;9141:34:0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;9186:16:::1;:37:::0;;;;::::1;::::0;::::1;::::0;;9247:34:::1;::::0;;;;;;;:32:::1;::::0;:34:::1;::::0;;::::1;::::0;9186:16;;9247:34;;;;;;9048:25;9247:34:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9234:10;:47:::0;-1:-1:-1;;8960:331:0:o;11195:593::-;11337:12;11367:16;11397:18;11386:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11386:30:0;;11367:49;;11428:17;11459:18;11448:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11448:30:0;-1:-1:-1;11428:50:0;-1:-1:-1;11489:6:0;11519:11;11508:189;11536:30;11548:18;11536:11;:30;:::i;:::-;11532:1;:35;11508:189;;;11606:1;11598:2;11601:1;11598:5;;;;;;;;:::i;:::-;;;;;;;;;;:9;11631:36;11649:18;11631:17;:36;:::i;:::-;11622:3;11626:1;11622:6;;;;;;;;:::i;:::-;;;;;;;;;;:45;11682:3;;;;:::i;:::-;;;;11569;;;;;:::i;:::-;;;;11508:189;;;;11707:45;11729:4;11735:2;11739:7;11748:3;11707:21;:45::i;:::-;-1:-1:-1;11776:4:0;;11195:593;-1:-1:-1;;;;;;;;;11195:593:0:o;28507:317::-;28639:15;;28590:12;;28639:15;28623:31;;;28639:15;;28623:31;;;;:68;;-1:-1:-1;28674:17:0;;;28658:33;;;28674:17;;28658:33;;28623:68;28615:77;;;;;;28750:17;;28769:45;;;;;28808:4;28769:45;;;3433:74:1;28720:29:0;;;;;;;28750:17;;;28720:29;;28769:30;;3406:18:1;;28769:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28720:95;;;;;;;;;;11946:42:1;11934:55;;;28720:95:0;;;11916:74:1;12006:18;;;11999:34;11889:18;;28720:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24057:1077::-;24140:10;24188:26;;;:21;:26;;;;;;;;:31;;;;;;;;:39;;;;;;;;;;;24286:16;24282:845;;24326:1;24319:8;;;;;24282:845;24448:15;24466:29;;;:24;:29;;;;;;;;:34;;;;;;;;;24585:32;;;:27;:32;;;;;:37;;;;;;;;;;24709:17;;24702:50;;;;;24746:4;24702:50;;;3433:74:1;24466:34:0;;24585:37;;24448:15;;24709:17;;;24702:35;;3406:18:1;;24702:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24687:65;;24854:7;24834:17;:27;24830:65;;;24885:7;24865:27;;24830:65;25006:10;24971:31;24991:11;24971:17;:31;:::i;:::-;24970:46;;;;:::i;:::-;24962:54;;25074:13;;;;;;15424:305;15508:10;15550:26;;;:21;:26;;;;;;;;:31;;;;;;;;:39;;;;;;;;;;;15610:16;15602:25;;;;:::i;:::-;15666:32;15681:3;15686;15691:6;15666:14;:32::i;16957:80::-;17007:22;17018:10;17007;:22::i;:::-;16957:80::o;27775:714::-;27924:14;;27877:17;;27870:50;;;;;27914:4;27870:50;;;3433:74:1;27822:4:0;;;;27924:14;;27877:17;;;;;27870:35;;3406:18:1;;27870:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27855:12;;:65;;;;:::i;:::-;27854:84;;;;:::i;:::-;27839:99;;28025:8;;28034:1;28025:10;;;;:::i;:::-;28015:7;:20;28011:471;;;-1:-1:-1;;28142:8:0;;;27775:714::o;28011:471::-;28374:9;28382:1;28374:7;:9;:::i;:::-;28367:16;;;27775:714;:::o;17105:965::-;17179:32;;;17160:16;17179:32;;;:23;:32;;;;;;;;;17241:23;:32;;;;;;;17287:16;17284:72;;17343:1;17329:15;;17284:72;17369:16;17366:72;;-1:-1:-1;17425:1:0;17366:72;17460:1;17483:11;17472:463;17501:10;;17496:1;:15;17472:463;;17540:10;;17535:1;:15;17532:136;;17579:10;;17570:19;;17532:136;;;17650:1;17637:10;;:14;;;;:::i;:::-;17628:23;;17532:136;17695:16;17725:18;17732:11;17725:6;:18;:::i;:::-;:20;;17744:1;17725:20;:::i;:::-;17714:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17714:32:0;-1:-1:-1;17695:51:0;-1:-1:-1;17774:11:0;17763:115;17791:6;17787:1;:10;17763:115;;17859:1;17839:2;17842:13;17844:11;17859:1;17842:13;:::i;:::-;17839:17;;;;;;;;:::i;:::-;;;;;;;;;;:21;17799:3;;;;:::i;:::-;;;;17763:115;;;;17893:30;17908:1;17911:2;17915:7;17893:14;:30::i;:::-;;17517:418;17513:3;;;;;:::i;:::-;;;;17472:463;;;-1:-1:-1;17955:32:0;;;;;;;;:23;:32;;;;;:41;;;-1:-1:-1;;18042:10:0;;18007:45;;17105:965::o;1219:164::-;1277:7;;1309:5;1313:1;1309;:5;:::i;:::-;1297:17;;1338:1;1333;:6;;1325:31;;;;;;;12774:2:1;1325:31:0;;;12756:21:1;12813:2;12793:18;;;12786:30;12852:14;12832:18;;;12825:42;12884:18;;1325:31:0;12572:336:1;13544:1160:0;13654:27;;;;:21;:27;;;;;;;;:33;;;;;;;;:42;;;;;;;;;;;13650:454;;13788:26;;;;;;;:17;:26;;;;;;;;:32;;;;;;;;:43;;;;;;;;;;;;;;;;;;13891:27;;;:21;:27;;;;;:33;;;;;;;;:38;;13788:43;;13891:33;;:38;;13788:43;;13891:38;:::i;:::-;;;;-1:-1:-1;;14000:23:0;;;;:17;:23;;;;;;;;:29;;;;;;;:43;;;;;;;;;;;;;;;;;;;;;;;13650:454;14114:27;;;;:21;:27;;;;;;;;:33;;;;;;;;:42;;;;;;;;;;:50;;14160:4;;14114:27;:50;;14160:4;;14114:50;:::i;:::-;;;;-1:-1:-1;;14229:30:0;;;;:24;:30;;;;;;;;:36;;;;;;;;:44;;14269:4;;14229:30;:44;;14269:4;;14229:44;:::i;:::-;;;;-1:-1:-1;;14350:21:0;;;;:15;:21;;;;;;;;:27;;;;;;;;:35;;14381:4;;14350:21;:35;;14381:4;;14350:35;:::i;:::-;;;;;;;;14485:4;14471:10;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;14586:17:0;;-1:-1:-1;14586:15:0;:17::i;:::-;13544:1160;;;;;:::o;15784:791::-;15865:10;15888:17;:15;:17::i;:::-;15928:10;;15921:4;:17;15917:614;;;16050:39;16069:4;16075;16081:7;16050:18;:39::i;:::-;16042:47;;15917:614;;;16172:10;;16164:4;:18;16160:371;;;16289:10;;16282:4;:17;16278:242;;;16416:39;16435:4;16441;16447:7;16416:18;:39::i;21523:1083::-;21621:13;21666:27;;;:21;:27;;;;;;;;:33;;;;;;;;:42;;;;;;;;;;;21764:16;21760:794;;21806:1;21798:9;;21760:794;;;21954:37;21971:4;21977;21983:7;21954:16;:37::i;:::-;22121:1;22076:27;;;:21;:27;;;;;;;;:33;;;;;;;;:42;;;;;;;;;;:46;;;22247:30;;;:24;:30;;;;;:36;;;;;;;;;21946:45;;-1:-1:-1;22247:53:0;;22288:11;22247:40;:53::i;:::-;22208:30;;;;:24;:30;;;;;;;;:36;;;;;;;;:92;;;;22384:33;;;:27;:33;;;;;:39;;;;;;;:50;;22428:5;22384:43;:50::i;:::-;22342:33;;;;:27;:33;;;;;;;;:39;;;;;;;;:92;22488:7;:5;22494:1;22488:7;:::i;:::-;22472:12;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;21760:794:0;22581:7;:5;22587:1;22581:7;:::i;25202:1718::-;25378:11;;25260:15;;25371:18;;25367:1546;;;25517:10;;25503;;:24;25499:549;;25646:1;25632:10;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;25662:1:0;25649:10;:14;25764:20;:18;:20::i;:::-;25753:8;:31;;;25886:10;;;25870:27;;;;:15;:27;;;;;;;;;:38;;;25998:10;;26020;;25991:40;;9904:25:1;;;9945:18;;;9938:34;;;;9988:18;;9981:34;25991:40:0;;9892:2:1;9877:18;25991:40:0;;;;;;;25499:549;26062:18;:16;:18::i;:::-;26110:1;26096:10;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;26227:13:0;;26220:20;;:4;:20;:::i;:::-;26206:11;:34;26342:16;:14;:16::i;:::-;26331:8;:27;;;26409:10;;26418:1;26409:10;:::i;:::-;26392:14;;:27;;;;:::i;:::-;26375:14;:44;26525:8;;26499:10;;;26471:39;;;;:27;:39;;;;;;;;26511:10;;;26471:51;;;;;;:62;;;;26599:10;;26623;;:12;;26634:1;;26623:12;:::i;:::-;26611:24;;26653:10;;26667:1;26653:15;26650:62;;;26689:1;26678:10;;:12;;;;:::i;:::-;26671:19;;26699:10;;26692:17;;26650:62;26773:10;;26785;;26797:11;;26824:21;;;;:15;:21;;;;;;;;:27;;;;;;;;;26853;;;:21;:27;;;;;:33;;;;;;;;;;26766:121;;13172:25:1;;;13213:18;;;13206:34;;;;13256:18;;;13249:34;;;;13314:2;13299:18;;13292:34;13357:3;13342:19;;13335:35;26766:121:0;;;;;;13159:3:1;26766:121:0;;;25391:1522;;25367:1546;25237:1683;25202:1718::o;22624:1313::-;22709:10;22751:27;;;:21;:27;;;;;;;;:33;;;;;;;;:42;;;;;;;;;;;22849:16;22845:1040;;22891:1;22883:9;;22845:1040;;;23039:37;23056:4;23062;23068:7;23039:16;:37::i;:::-;23206:1;23161:27;;;:21;:27;;;;;;;;:33;;;;;;;;:42;;;;;;;;;;:46;;;23332:30;;;:24;:30;;;;;:36;;;;;;;;;23031:45;;-1:-1:-1;23332:53:0;;23373:11;23332:40;:53::i;:::-;23293:30;;;;:24;:30;;;;;;;;:36;;;;;;;;:92;;;;23469:33;;;:27;:33;;;;;:39;;;;;;;:50;;23513:5;23469:43;:50::i;:::-;23427:33;;;;:27;:33;;;;;;;;:39;;;;;;;;:92;23573:7;:5;23579:1;23573:7;:::i;:::-;23557:12;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;23612:93:0;;;23623:10;23612:93;23644:4;23650;23656:7;:5;23662:1;23656:7;:::i;:::-;23665:33;;;;:27;:33;;;;;;;;:39;;;;;;;;;;23612:93;;11065:25:1;;;11106:18;;;11099:34;;;;11149:18;;11142:34;11207:2;11192:18;;11185:34;11052:3;11037:19;23612:93:0;;;;;;;23767:17;;;;23760:34;23795:7;23804;:5;23810:1;23804:7;:::i;:::-;23760:52;;;;;;;;;;11946:42:1;11934:55;;;23760:52:0;;;11916:74:1;12006:18;;;11999:34;11889:18;;23760:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23912:7;:5;23918:1;23912:7;:::i;1391:141::-;1449:7;1482:1;1477;:6;;1469:32;;;;;;;13583:2:1;1469:32:0;;;13565:21:1;13622:2;13602:18;;;13595:30;13661:15;13641:18;;;13634:43;13694:18;;1469:32:0;13381:337:1;1469:32:0;1519:5;1523:1;1519;:5;:::i;9299:1470::-;9367:16;;;:34;;;;;;;;9347:17;;9367:16;;;;;:32;;:34;;;;;;;;;;;:16;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9347:54;;9420:9;9447:10;;9432:12;:25;;;;:::i;:::-;9420:37;;9468:13;9484:29;9509:3;9484:20;9498:5;9484:8;;:13;;:20;;;;:::i;:::-;:24;;:29::i;:::-;9468:45;-1:-1:-1;9527:9:0;;9524:1103;;9563:8;9556:4;:15;9552:1000;;;9606:21;9630:32;9656:4;9631:18;:8;9645:3;9631:13;:18::i;9630:32::-;9606:56;-1:-1:-1;9681:27:0;9711:45;9751:4;9711:25;9606:56;9732:3;9711:20;:25::i;:::-;:39;;:45::i;:::-;9681:75;;10031:71;10049:52;10096:4;10049:42;10068:22;10049:13;;:18;;:42;;;;:::i;:52::-;10031:13;;;:17;:71::i;:::-;10015:13;:87;-1:-1:-1;9524:1103:0;;-1:-1:-1;9524:1103:0;9552:1000;10160:23;10186:32;10208:8;10187:14;:4;10197:3;10187:9;:14::i;10186:32::-;10160:58;-1:-1:-1;10237:29:0;10269:47;10311:4;10269:27;10160:58;10292:3;10269:22;:27::i;:47::-;10237:79;;10443:73;10461:54;10510:4;10461:44;10480:24;10461:13;;:18;;:44;;;;:::i;:54::-;10443:13;;;:17;:73::i;9524:1103::-;10598:13;;:17;;10614:1;10598:17;:::i;:::-;10582:13;:33;9524:1103;10656:1;10639:13;;:18;10636:74;;10697:2;10681:13;:18;10636:74;-1:-1:-1;;10734:10:0;:25;9299:1470::o;1540:229::-;1599:7;1623:6;1619:47;;-1:-1:-1;1653:1:0;1646:8;;1619:47;1678:9;1690:5;1694:1;1690;:5;:::i;:::-;1678:17;-1:-1:-1;1723:1:0;1714:5;1718:1;1678:17;1714:5;:::i;:::-;:10;1706:36;;;;;;;13925:2:1;1706:36:0;;;13907:21:1;13964:2;13944:18;;;13937:30;14003:15;13983:18;;;13976:43;14036:18;;1706:36:0;13723:337:1;1777:139:0;1835:7;1863:6;1855:30;;;;;;;14267:2:1;1855:30:0;;;14249:21:1;14306:2;14286:18;;;14279:30;14345:13;14325:18;;;14318:41;14376:18;;1855:30:0;14065:335:1;1855:30:0;1903:5;1907:1;1903;:5;:::i;2248:132::-;2310:6;2338:1;2334;:5;2331:18;;;-1:-1:-1;2348:1:0;2341:8;;2331:18;-1:-1:-1;2369:1:0;;2248:132;-1:-1:-1;2248:132:0:o;14:656:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;586:2:1;574:15;591:66;570:88;555:104;;;;661:2;551:113;;14:656;-1:-1:-1;;;14:656:1:o;675:184::-;727:77;724:1;717:88;824:4;821:1;814:15;848:4;845:1;838:15;864:961;918:5;971:3;964:4;956:6;952:17;948:27;938:55;;989:1;986;979:12;938:55;1025:6;1012:20;1051:4;1074:18;1111:2;1107;1104:10;1101:36;;;1117:18;;:::i;:::-;1163:2;1160:1;1156:10;1195:2;1189:9;1254:66;1249:2;1245;1241:11;1237:84;1229:6;1225:97;1372:6;1360:10;1357:22;1352:2;1340:10;1337:18;1334:46;1331:72;;;1383:18;;:::i;:::-;1419:2;1412:22;1469:18;;;1545:15;;;1541:24;;;1503:15;;;;-1:-1:-1;1577:15:1;;;1574:35;;;1605:1;1602;1595:12;1574:35;1641:2;1633:6;1629:15;1618:26;;1653:142;1669:6;1664:3;1661:15;1653:142;;;1735:17;;1723:30;;1773:12;;;;1686;;;;1653:142;;;1813:6;864:961;-1:-1:-1;;;;;;;864:961:1:o;1830:196::-;1898:20;;1958:42;1947:54;;1937:65;;1927:93;;2016:1;2013;2006:12;1927:93;1830:196;;;:::o;2031:738::-;2167:6;2175;2183;2191;2244:3;2232:9;2223:7;2219:23;2215:33;2212:53;;;2261:1;2258;2251:12;2212:53;2297:9;2284:23;2274:33;;2358:2;2347:9;2343:18;2330:32;2381:18;2422:2;2414:6;2411:14;2408:34;;;2438:1;2435;2428:12;2408:34;2461:61;2514:7;2505:6;2494:9;2490:22;2461:61;:::i;:::-;2451:71;;2541:38;2575:2;2564:9;2560:18;2541:38;:::i;:::-;2531:48;;2632:2;2621:9;2617:18;2604:32;2588:48;;2661:2;2651:8;2648:16;2645:36;;;2677:1;2674;2667:12;2645:36;;2700:63;2755:7;2744:8;2733:9;2729:24;2700:63;:::i;:::-;2690:73;;;2031:738;;;;;;;:::o;2966:316::-;3043:6;3051;3059;3112:2;3100:9;3091:7;3087:23;3083:32;3080:52;;;3128:1;3125;3118:12;3080:52;-1:-1:-1;;3151:23:1;;;3221:2;3206:18;;3193:32;;-1:-1:-1;3272:2:1;3257:18;;;3244:32;;2966:316;-1:-1:-1;2966:316:1:o;3518:248::-;3586:6;3594;3647:2;3635:9;3626:7;3622:23;3618:32;3615:52;;;3663:1;3660;3653:12;3615:52;-1:-1:-1;;3686:23:1;;;3756:2;3741:18;;;3728:32;;-1:-1:-1;3518:248:1:o;3953:322::-;4030:6;4038;4046;4099:2;4087:9;4078:7;4074:23;4070:32;4067:52;;;4115:1;4112;4105:12;4067:52;4138:29;4157:9;4138:29;:::i;:::-;4128:39;4214:2;4199:18;;4186:32;;-1:-1:-1;4265:2:1;4250:18;;;4237:32;;3953:322;-1:-1:-1;;;3953:322:1:o;4280:186::-;4339:6;4392:2;4380:9;4371:7;4367:23;4363:32;4360:52;;;4408:1;4405;4398:12;4360:52;4431:29;4450:9;4431:29;:::i;4471:254::-;4539:6;4547;4600:2;4588:9;4579:7;4575:23;4571:32;4568:52;;;4616:1;4613;4606:12;4568:52;4639:29;4658:9;4639:29;:::i;:::-;4629:39;4715:2;4700:18;;;;4687:32;;-1:-1:-1;;;4471:254:1:o;4730:322::-;4807:6;4815;4823;4876:2;4864:9;4855:7;4851:23;4847:32;4844:52;;;4892:1;4889;4882:12;4844:52;4928:9;4915:23;4905:33;;4985:2;4974:9;4970:18;4957:32;4947:42;;5008:38;5042:2;5031:9;5027:18;5008:38;:::i;:::-;4998:48;;4730:322;;;;;:::o;5057:490::-;5159:6;5167;5175;5228:2;5216:9;5207:7;5203:23;5199:32;5196:52;;;5244:1;5241;5234:12;5196:52;5280:9;5267:23;5257:33;;5341:2;5330:9;5326:18;5313:32;5368:18;5360:6;5357:30;5354:50;;;5400:1;5397;5390:12;5354:50;5423:61;5476:7;5467:6;5456:9;5452:22;5423:61;:::i;:::-;5413:71;;;5503:38;5537:2;5526:9;5522:18;5503:38;:::i;5552:180::-;5611:6;5664:2;5652:9;5643:7;5639:23;5635:32;5632:52;;;5680:1;5677;5670:12;5632:52;-1:-1:-1;5703:23:1;;5552:180;-1:-1:-1;5552:180:1:o;5737:260::-;5805:6;5813;5866:2;5854:9;5845:7;5841:23;5837:32;5834:52;;;5882:1;5879;5872:12;5834:52;5905:29;5924:9;5905:29;:::i;:::-;5895:39;;5953:38;5987:2;5976:9;5972:18;5953:38;:::i;:::-;5943:48;;5737:260;;;;;:::o;6002:460::-;6097:6;6105;6113;6121;6129;6182:3;6170:9;6161:7;6157:23;6153:33;6150:53;;;6199:1;6196;6189:12;6150:53;6235:9;6222:23;6212:33;;6292:2;6281:9;6277:18;6264:32;6254:42;;6343:2;6332:9;6328:18;6315:32;6305:42;;6366:38;6400:2;6389:9;6385:18;6366:38;:::i;:::-;6002:460;;;;-1:-1:-1;6002:460:1;;6451:3;6436:19;6423:33;;6002:460;-1:-1:-1;;6002:460:1:o;6467:437::-;6546:1;6542:12;;;;6589;;;6610:61;;6664:4;6656:6;6652:17;6642:27;;6610:61;6717:2;6709:6;6706:14;6686:18;6683:38;6680:218;;;6754:77;6751:1;6744:88;6855:4;6852:1;6845:15;6883:4;6880:1;6873:15;6680:218;;6467:437;;;:::o;7313:184::-;7365:77;7362:1;7355:88;7462:4;7459:1;7452:15;7486:4;7483:1;7476:15;8215:184;8267:77;8264:1;8257:88;8364:4;8361:1;8354:15;8388:4;8385:1;8378:15;8404:195;8443:3;8474:66;8467:5;8464:77;8461:103;;;8544:18;;:::i;:::-;-1:-1:-1;8591:1:1;8580:13;;8404:195::o;9007:277::-;9074:6;9127:2;9115:9;9106:7;9102:23;9098:32;9095:52;;;9143:1;9140;9133:12;9095:52;9175:9;9169:16;9228:5;9221:13;9214:21;9207:5;9204:32;9194:60;;9250:1;9247;9240:12;10026:184;10078:77;10075:1;10068:88;10175:4;10172:1;10165:15;10199:4;10196:1;10189:15;10215:125;10255:4;10283:1;10280;10277:8;10274:34;;;10288:18;;:::i;:::-;-1:-1:-1;10325:9:1;;10215:125::o;10345:128::-;10385:3;10416:1;10412:6;10409:1;10406:13;10403:39;;;10422:18;;:::i;:::-;-1:-1:-1;10458:9:1;;10345:128::o;11230:228::-;11270:7;11396:1;11328:66;11324:74;11321:1;11318:81;11313:1;11306:9;11299:17;11295:105;11292:131;;;11403:18;;:::i;:::-;-1:-1:-1;11443:9:1;;11230:228::o;11463:274::-;11503:1;11529;11519:189;;11564:77;11561:1;11554:88;11665:4;11662:1;11655:15;11693:4;11690:1;11683:15;11519:189;-1:-1:-1;11722:9:1;;11463:274::o;12383:184::-;12453:6;12506:2;12494:9;12485:7;12481:23;12477:32;12474:52;;;12522:1;12519;12512:12;12474:52;-1:-1:-1;12545:16:1;;12383:184;-1:-1:-1;12383:184:1:o

Swarm Source

ipfs://d39043fefebf6a00290edc0ce49ad12e406fb9e097e3fd02db2fb1a1df738430
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.