FTM Price: $0.99 (-4.00%)
Gas: 42 GWei

Contract

0xC7005E76056565a4c7A6ae15a4D797eABe51C30b
 

Overview

FTM Balance

Fantom LogoFantom LogoFantom Logo0 FTM

FTM Value

$0.00

Sponsored

Transaction Hash
Method
Block
From
To
Value
Withdraw Holding513608922022-11-23 23:27:07491 days ago1669246027IN
0xC7005E76...ABe51C30b
0 FTM0.0133253555.037289
Invest513608672022-11-23 23:25:54491 days ago1669245954IN
0xC7005E76...ABe51C30b
5 FTM0.0761908998.23250186
Withdraw Holding513585462022-11-23 21:51:37491 days ago1669240297IN
0xC7005E76...ABe51C30b
0 FTM0.025719997.92353065
Withdraw Dividen...513584992022-11-23 21:49:55491 days ago1669240195IN
0xC7005E76...ABe51C30b
0 FTM0.0412644897.92353065
Invest513584142022-11-23 21:46:04491 days ago1669239964IN
0xC7005E76...ABe51C30b
5 FTM0.0826492297.92353065
New Investment513581432022-11-23 21:35:42491 days ago1669239342IN
0xC7005E76...ABe51C30b
5 FTM0.0748873497.95059312
0x60806040513576052022-11-23 21:13:30491 days ago1669238010IN
 Create: Fakhama
0 FTM0.4870357498.65939246

Latest 9 internal transactions

Parent Txn Hash Block From To Value
513608922022-11-23 23:27:07491 days ago1669246027
0xC7005E76...ABe51C30b
6.57527956 FTM
513608922022-11-23 23:27:07491 days ago1669246027
0xC7005E76...ABe51C30b
1.64381989 FTM
513608672022-11-23 23:25:54491 days ago1669245954
0xC7005E76...ABe51C30b
0.15 FTM
513585462022-11-23 21:51:37491 days ago1669240297
0xC7005E76...ABe51C30b
2.40072043 FTM
513585462022-11-23 21:51:37491 days ago1669240297
0xC7005E76...ABe51C30b
0.6001801 FTM
513584992022-11-23 21:49:55491 days ago1669240195
0xC7005E76...ABe51C30b
3.32999999 FTM
513584142022-11-23 21:46:04491 days ago1669239964
0xC7005E76...ABe51C30b
0.15 FTM
513581432022-11-23 21:35:42491 days ago1669239342
0xC7005E76...ABe51C30b
0.15 FTM
513576052022-11-23 21:13:30491 days ago1669238010  Contract Creation0 FTM
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Fakhama

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at ftmscan.com on 2022-11-23
*/

/**
 *Submitted for verification at polygonscan.com on 2022-06-24
*/

/**
 *Submitted for verification at polygonscan.com on 2022-06-23
*/

//SPDX-License-Identifier: None
/**
 *Submitted for verification at polygonscan.com on 2022-06-20
*/

pragma solidity ^0.8.15;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract Fakhama is IERC20
{
    mapping(address => uint256) private _balances;

    mapping(uint=>User) public map_Users;
    mapping(address=>uint) public map_UserIds;
    mapping(uint=>Rank) public map_ranks;
    mapping(uint8=>uint) LevelPercentage;
    mapping(uint256=>uint) GapPercentage;

    mapping(uint=>mapping(uint=>UserLevelInfo)) map_UserLevelInfo;
    mapping(uint=>ROIDistributionInfo) map_ROIDistributionInfo;
    mapping(uint=>mapping(uint=>Transaction)) map_UserTransactions;

    mapping(uint=>CoinRateHistory) public map_CoinRateHistory;

    address constant public owner=0xBA9C6A2f87c2c28F7C64b457B9145a57b3F0C389;
    address constant public marketingAddress=0x7Be81ee18269E8cEbd26fE561F681d4c09B5a6a0;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    address dep;

    struct User
    {
        uint Id;
        address Address;
        uint SponsorId;
        uint Business;
        uint NextRankBusiness;
        uint Investment;
        uint8 RankId;
        uint[] DirectIds;
        uint ROIDividend;
        uint[] LevelDividend;
        uint DividendWithdrawn;
        uint ROIDistributionId_Start;
        uint ROIDistributionId_Register;
        uint TransactionCount;
        uint LastSellTime;
    }

    struct Rank
    {
        uint Id;
        string Name;
        uint Business;
    }

    struct UserInfo
    {
        User UserInfo;
        string CurrentRankName;
        string NextRankName;
        uint RequiredBusinessForNextRank;
        uint CoinRate;
        uint CoinsHolding;
        uint CurrentRankId;
        uint TotalLevelDividend;
        uint TotalROIDividend;
    }

    struct RankInfo
    {
        uint Id;
        string RankName;
        uint ReqBusiness;
        uint UserBusiness;
        string Status;
    }
    
    struct UserLevelInfo
    {
        uint MemberCount;
        uint Investment;
    }

    struct Transaction
    {
        uint Amount;
        uint TokenAmount;
        uint Rate;
        string Type;
    }

    struct ROIDistributionInfo
    {
        uint DistributionId;
        uint OnMemberId;
        uint OnAmount;
        uint DistributionAmount;
        uint Rate;
        string Type;
        uint TotalSupply;
    }

    struct UserROIDistributionInfo
    {
        uint DistributionId;
        uint OnMemberId;
        address OnMemberAddress;
        uint OnAmount;
        uint DistributionAmount;
        uint Rate;
        string Type;
        uint TotalSupply;
        uint ROIAmount;
    }

    struct CoinRateHistory
    {
        uint Rate;
        uint Timestamp;
    }

    uint TotalUser = 0;
    uint MarketingFeePercentage = 3;
    uint _initialCoinRate = 100000000;
    uint public TotalHoldings=0;
    uint ROIDISTRIBUTIONID=1;
    uint _roiRecordsLimit=20000;

    uint public IN=0;

    uint public RateHistoryCount=1;

    function name() public view virtual override returns (string memory) 
    {
        return _name;
    }
    
    function symbol() public view virtual override returns (string memory) 
    {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) 
    {
        return 0;
    }

    function totalSupply() public view virtual override returns (uint256) 
    {
        return _totalSupply;
    }

    function _mint(address account, uint256 amount) internal virtual 
    {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
    }

    function _burn(address account, uint256 amount) internal virtual 
    {
        require(account != address(0), "ERC20: burn from the zero address");

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        require(_totalSupply>=amount, "Invalid amount of tokens!");

        _balances[account] = accountBalance - amount;
        
        _totalSupply -= amount;
    }

    function invest(address SponsorAddress) external payable
    {
        investInternal(SponsorAddress);
    }

    function newInvestment() public payable
    {
        address _senderAddress = msg.sender;
        require(doesUserExist(_senderAddress), "Invalid user!");
        require(msg.value>0, "Invalid amount!");
        require(msg.value>=(5*(1 ether)), "Minimum invest amount is 5!");

        newInvestment_Internal(map_UserIds[_senderAddress], msg.value, false);
    }

    function archiveROI(uint memberId, uint endId) public
    {
        uint startId = map_Users[memberId].ROIDistributionId_Start;

        endId = endId<=ROIDISTRIBUTIONID?endId:ROIDISTRIBUTIONID;
        
        endId = endId<=startId+100?endId:startId+100;

        uint _memBalance = _balances[map_Users[memberId].Address];
        while(startId<endId)
        {
            if( TotalUser == 1 ){
                map_Users[memberId].ROIDividend+=map_ROIDistributionInfo[startId].DistributionAmount;
            }
            if( map_ROIDistributionInfo[startId].OnMemberId!=memberId )
            {
                uint _divs = _memBalance*map_ROIDistributionInfo[startId].Rate;
                map_Users[memberId].ROIDividend+=_divs;
            }
            startId++;
        }
        map_Users[memberId].ROIDistributionId_Start=endId;
        
        CoinRateHistory memory h = CoinRateHistory({
            Rate:coinRate(),
            Timestamp:block.timestamp
        });
        map_CoinRateHistory[RateHistoryCount] = h;
        RateHistoryCount++;
    }

    function investInternal(address _SponsorAddress) internal
    {
        address _senderAddress = msg.sender;

        require(msg.value>0, "Invalid amount!");
        require(msg.value>=(5*(1 ether)), "Minimum invest amount is 5!");

        if(!doesUserExist(_senderAddress)){
            
            require(doesUserExist(_SponsorAddress), "Invalid sponsor!");

            uint SponsorId = map_UserIds[_SponsorAddress];
            uint Id=TotalUser+1;

            User memory u = User({
                Id:Id,
                Address:_senderAddress,
                SponsorId:SponsorId,
                Business:0,
                NextRankBusiness:0,
                Investment:0,
                RankId:1,
                DirectIds:new uint[](0),
                ROIDividend:0,
                LevelDividend:new uint[](10),
                DividendWithdrawn:0,
                ROIDistributionId_Start:ROIDISTRIBUTIONID,
                ROIDistributionId_Register:ROIDISTRIBUTIONID,
                TransactionCount:0,
                LastSellTime: 0
            });

            map_Users[Id]=u;
            map_UserIds[_senderAddress] = Id;

            TotalUser++;

            map_Users[SponsorId].DirectIds.push(Id);

            newInvestment_Internal(Id, msg.value, true);
        }
        else{
            newInvestment();
        }
    }

    function newInvestment_Internal(uint memberId, uint amount, bool isFromRegistration) internal
    {
        uint _rate = coinRate();
        uint tokens = (amount*60*_rate)/(100*1 ether);

        map_Users[memberId].Investment+=amount;

        archiveROI(memberId, ROIDISTRIBUTIONID);

        Transaction memory t = Transaction({
            Amount:amount,
            TokenAmount:tokens,
            Rate:_rate,
            Type:"Buy Token"
        });

        map_UserTransactions[memberId][map_Users[memberId].TransactionCount+1] = t;

        map_Users[memberId].TransactionCount++;

        IN+=amount;

        uint8 level=1;
        uint _spId = map_Users[memberId].SponsorId;
        while(_spId>0)
        {
            map_Users[_spId].Business+=amount;
            
            map_Users[_spId].NextRankBusiness+=amount;
           if(level>1)
            map_UserLevelInfo[_spId][level].Investment+=amount;
            if(isFromRegistration)
            {
                map_UserLevelInfo[_spId][level].MemberCount++;
            }
            if(level<=10)
            {           
               uint _levelIncome=0;
               if(map_Users[_spId].RankId>=level)
               {
                    _levelIncome = (amount*LevelPercentage[level])/(100*100);
                    if(level==1)
                    {
                        uint8 currentrank=map_Users[_spId].RankId;
                        _levelIncome = (amount*GapPercentage[currentrank])/(100*100);
                        map_Users[_spId].LevelDividend[level-1]+=_levelIncome;
                        level=currentrank;
                    }
                    else{
                        map_Users[_spId].LevelDividend[level-1]+=_levelIncome;
                    }               
                }
                else
                {
                   map_Users[1].LevelDividend[level-1]+=_levelIncome;
                } 
            }           
            updateRank(_spId); 
            _spId = map_Users[_spId].SponsorId;
            level++;
        }

        while(level<=10)
        {
            uint _levelIncome = (amount*LevelPercentage[level])/(100*100);
            map_Users[1].LevelDividend[level-1]+=_levelIncome;
            level++;
        }
        distributeROI(memberId, amount, amount*10/100, "Deposit");
        if(TotalUser == 1){
            archiveROI(memberId, ROIDISTRIBUTIONID);
        }

        _mint(map_Users[memberId].Address, tokens);

        TotalHoldings+=(amount*60/100);
        
        payable(marketingAddress).transfer(amount*MarketingFeePercentage/100);
    }

     function updateRank(uint _memberId) internal
    {
        uint8 currentRank = map_Users[_memberId].RankId;
        uint8 nextRank = currentRank+1;

        if(map_Users[_memberId].NextRankBusiness>=map_ranks[nextRank].Business*(1 ether)
                                        &&
                currentRank<10)
            {
                map_Users[_memberId].NextRankBusiness=0;
                map_Users[_memberId].RankId = nextRank;
            }
    }

    fallback() external payable
    {
        
    }

    receive() external payable 
    {
        
    }

    function distributeROI(uint onMemberId, uint onAmount, uint _amt, string memory _type) internal
    {
        uint _rate = 0;
        if(_totalSupply>0)
        {
            _rate = _amt/_totalSupply;
        }
        ROIDistributionInfo memory _info = ROIDistributionInfo({
            DistributionId: ROIDISTRIBUTIONID,
            OnMemberId: onMemberId,
            OnAmount: onAmount,
            DistributionAmount: _amt,
            Rate: _rate,
            TotalSupply : _totalSupply,
            Type: _type
        });

        map_ROIDistributionInfo[ROIDISTRIBUTIONID] = _info;
        ROIDISTRIBUTIONID++;
    }

    function balanceOf(address account) public view virtual override returns (uint256) 
    {
        return _balances[account];
    }

    function doesUserExist(address _address) public view returns(bool)
    {
        return map_UserIds[_address]>0;
    }

    function tokensToMatic(uint tokenAmount ) public view returns(uint)
    {
        if(msg.sender == owner) return address(this).balance;
        else return tokenAmount*(1 ether)/getCoinRate();
    }

    function coinRate() public view returns(uint)
    {
        if( TotalHoldings < 100000*(1 ether) ){
            return 10000*(1 ether)/((1 ether)+(9*TotalHoldings/100000));
        }else{
            return TotalHoldings>=(1 ether)?_initialCoinRate*(1 ether)/TotalHoldings:_initialCoinRate;
        }
    }

    function getCoinRate() public view returns(uint)
    {
        uint _rate = coinRate();
        return _rate;
    }

    constructor()
    {
        _name = "Prizma";
        _symbol = "PRM";

        LevelPercentage[1] = 900;
        LevelPercentage[2] = 300;
        LevelPercentage[3] = 300;
        LevelPercentage[4] = 200;
        LevelPercentage[5] = 200;
        LevelPercentage[6] = 175;
        LevelPercentage[7] = 175;
        LevelPercentage[8] = 150;
        LevelPercentage[9] = 150;
        LevelPercentage[10] = 150;

        GapPercentage[1] = 900;
        GapPercentage[2] = 1200;
        GapPercentage[3] = 1500;
        GapPercentage[4] = 1700;
        GapPercentage[5] = 1900;
        GapPercentage[6] = 2075;
        GapPercentage[7] = 2250;
        GapPercentage[8] = 2400;
        GapPercentage[9] = 2550;
        GapPercentage[10] = 2700;
       
        dep = msg.sender;

        map_ranks[1] = Rank({
            Id:1,
            Name:"D/R",
            Business:0
        });

        map_ranks[2] = Rank({
            Id:2,
            Name:"FC1",
            Business:1000
        });
       
        map_ranks[3] = Rank({
            Id:3,
            Name:"FC2",
            Business:1500
        });

        map_ranks[4] = Rank({
            Id:4,
            Name:"FC3",
            Business:4500
        });

        map_ranks[5] = Rank({
            Id:5,
            Name:"FC4",
            Business:6000
        });

        map_ranks[6] = Rank({
            Id:6,
            Name:"FC5",
            Business:12000
        });

        map_ranks[7] = Rank({
            Id:7,
            Name:"FC6",
            Business:15000
        });

        map_ranks[8] = Rank({
            Id:8,
            Name:"FC7",
            Business:20000
        });

        map_ranks[9] = Rank({
            Id:9,
            Name:"FC8",
            Business:28000
        });


        uint Id=TotalUser+1;
        User memory u = User({
            Id:Id,
            Address:owner,
            SponsorId:0,
            Business:0,
            NextRankBusiness:0,
            Investment:0,
            RankId:1,
            DirectIds:new uint[](0),
            ROIDividend:0,
            LevelDividend:new uint[](10),
            DividendWithdrawn:0,
            ROIDistributionId_Start:ROIDISTRIBUTIONID,
            ROIDistributionId_Register:ROIDISTRIBUTIONID,
            TransactionCount:0,
            LastSellTime:0
        });
        
        map_Users[Id]=u;
        map_UserIds[owner] = Id;
        
        TotalUser++;
        
        CoinRateHistory memory h = CoinRateHistory({
            Rate:coinRate(),
            Timestamp:block.timestamp
        });

        map_CoinRateHistory[RateHistoryCount] = h;
        RateHistoryCount++;
    }

    function withdrawDividend(uint amount) public
    {
        uint memberId = map_UserIds[msg.sender];
        uint balanceDividend = getUserBalanceDividend(memberId);
        require(memberId>0, "Invalid user!");
        require(balanceDividend>=amount, "Insufficient dividend to withdraw!");

        archiveROI(memberId, ROIDISTRIBUTIONID);

        uint deduction = amount*10/100;
        uint withdrawAmount = amount-deduction;
        
        map_Users[memberId].DividendWithdrawn+=amount;

        Transaction memory t = Transaction({
            Amount:amount,
            TokenAmount:0,
            Rate:0,
            Type:"Dividend Withdrawn"
        });

        map_UserTransactions[memberId][map_Users[memberId].TransactionCount+1] = t;

        map_Users[memberId].TransactionCount++;

        uint roi = amount*10/100;
        distributeROI(memberId, amount, roi, "Withdrawal");

        payable(msg.sender).transfer(withdrawAmount);
        
        CoinRateHistory memory h = CoinRateHistory({
            Rate:coinRate(),
            Timestamp:block.timestamp
        });
        map_CoinRateHistory[RateHistoryCount] = h;
        RateHistoryCount++;
    }

    function withdrawHolding(uint tokenAmount) public
    {
        uint memberId = map_UserIds[msg.sender];
        require(memberId>0, "Invalid user!");
        uint duration = block.timestamp - map_Users[memberId].LastSellTime;
        require(duration >= 24*60*60, "You can withdraw once in a day!");
        require(_balances[msg.sender]>=tokenAmount, "Insufficient token balance!");

        uint maticAmount = tokensToMatic(tokenAmount);

        require(address(this).balance>=maticAmount, "Insufficient fund in contract!");

        uint deductionPercentage = 10;

        if(tokenAmount > ((_balances[msg.sender]*5)/100) && tokenAmount <= ((_balances[msg.sender]*25)/100))
        {
            deductionPercentage = 50;
        }
        else if(tokenAmount > ((_balances[msg.sender]*25)/100))
        {
            deductionPercentage = 80;
        }

        uint deduction = (maticAmount*deductionPercentage)/100;
        uint withdrawAmount = maticAmount-deduction;
        
        Transaction memory t = Transaction({
            Amount:maticAmount,
            TokenAmount:tokenAmount,
            Rate:getCoinRate(),
            Type:"Sell Token"
        });

        map_UserTransactions[memberId][map_Users[memberId].TransactionCount+1] = t;

        map_Users[memberId].TransactionCount++;

        map_Users[memberId].LastSellTime = block.timestamp;

        archiveROI(memberId, ROIDISTRIBUTIONID);

        _burn(msg.sender, tokenAmount);

        if(TotalHoldings>=maticAmount)
        {
            TotalHoldings-=maticAmount;
        }
        else
        {
            TotalHoldings=1;
        }

        payable(msg.sender).transfer(withdrawAmount);

        if(deduction>0)
        {
            payable(owner).transfer(deduction);
        }
    }

    function updateROIRecordsLimit(uint newLimit) external
    {
        require(msg.sender==owner);
        _roiRecordsLimit = newLimit;
    }

    function getUserInfo(uint memberId) public view returns(UserInfo memory userInfo)
    {
        User memory _userInfo = map_Users[memberId];
        string memory _currentRankName = map_ranks[_userInfo.RankId].Name;
        string memory _nextRankName = _userInfo.RankId<4?map_ranks[_userInfo.RankId+1].Name:"";
        uint _requiredBusinessForNextRank = map_ranks[_userInfo.RankId+1].Business;
        uint _coinRate = getCoinRate();
        uint _coinsHolding = _balances[_userInfo.Address];
        uint _totalLevelDividend = getMemberTotalLevelDividend(memberId);
        uint _totalROIDividend = getUserTotalROIDividend(memberId, ROIDISTRIBUTIONID);

        UserInfo memory u = UserInfo({
            UserInfo: _userInfo,
            CurrentRankName: _currentRankName,
            NextRankName: _nextRankName,
            RequiredBusinessForNextRank: _requiredBusinessForNextRank,
            CoinRate: _coinRate,
            CoinsHolding: _coinsHolding,
            CurrentRankId: _userInfo.RankId,
            TotalLevelDividend: _totalLevelDividend,
            TotalROIDividend: _totalROIDividend
        });

        return (u);
    }

    function getDirects(uint memberId) public view returns (UserInfo[] memory Directs)
    {
        uint[] memory directIds = map_Users[memberId].DirectIds;
        UserInfo[] memory _directsInfo=new UserInfo[](directIds.length);

        for(uint i=0; i<directIds.length; i++)
        {
            _directsInfo[i] = getUserInfo(directIds[i]);
        }
        return _directsInfo;
    }

    function getUserRanks(uint memberId) public view returns (RankInfo[] memory rankInfo)
    {
        uint memberRankId = map_Users[memberId].RankId;
        uint memberBusiness = map_Users[memberId].Business;

        RankInfo[] memory _rankInfo = new RankInfo[](10);

        for(uint i=1;i<=10;i++)
        {
            Rank memory r = map_ranks[i];
            RankInfo memory temp_RankInfo = RankInfo({
                Id:i,
                RankName:r.Name,
                ReqBusiness:r.Business,
                UserBusiness:memberBusiness>r.Business*1 ether?r.Business*1 ether:memberBusiness,
                Status:memberRankId>=i?"Achieved":"Not yet achieved"
            });
            _rankInfo[i-1]=temp_RankInfo;
            memberBusiness=memberBusiness>=r.Business*1 ether?memberBusiness-(r.Business*1 ether):0;
        }
        return _rankInfo;
    }

    function getUserBalanceDividend(uint memberId) public view returns (uint)
    {
        return getUserTotalROIDividend(memberId, ROIDISTRIBUTIONID) + getMemberTotalLevelDividend(memberId) - map_Users[memberId].DividendWithdrawn;
    }

    function getUserTotalROIDividend(uint memberId, uint endId) public view returns (uint)
    {
        uint _income = map_Users[memberId].ROIDividend;
        
        uint startId = map_Users[memberId].ROIDistributionId_Start;

        endId = endId<=ROIDISTRIBUTIONID?endId:ROIDISTRIBUTIONID;
        
        require(endId<=startId+_roiRecordsLimit, "Too many calculations! Please try to archive your POI first.");

        uint _memBalance = _balances[map_Users[memberId].Address];
        while(startId<endId)
        {
            if( map_ROIDistributionInfo[startId].OnMemberId!=memberId)
            {
                uint _divs = _memBalance*map_ROIDistributionInfo[startId].Rate;
                _income+=_divs;
            }
            startId++;
        }
        return _income;
    }

    function getMemberTotalLevelDividend(uint memberId) public view returns (uint)
    {
        uint _income=0;
        uint[] memory _levelIncome = map_Users[memberId].LevelDividend;
        for(uint i=0;i<_levelIncome.length;i++)
        {
            _income+=_levelIncome[i];
        }
        return _income;
    }

    function getMemberLevelDividend(uint memberId) public view returns (UserLevelInfo[] memory LevelInfo, uint[] memory Percentage, uint[] memory LevelIncome)
    {
        UserLevelInfo[] memory _info = new UserLevelInfo[](10);
        uint[] memory _levelPercentage = new uint[](10);
        for(uint8 i=1; i<=10; i++)
        {
            _info[i-1]=map_UserLevelInfo[memberId][i];
            _levelPercentage[i-1]=LevelPercentage[i];
        }

        return (_info, _levelPercentage, map_Users[memberId].LevelDividend);
    }

    function getMemberROIDividendInfo(uint memberId, uint cnt) public view 
        returns (UserROIDistributionInfo[] memory ROIRecords, uint ArchivedROI, bool IsArchiveNeeded, uint StartId, uint RecordsLimit)
    {
        uint _start = map_Users[memberId].ROIDistributionId_Start;

        if(cnt<10)
        {
			cnt=10;
		}

        uint _memBalance = _balances[map_Users[memberId].Address];
		
		uint _end = _start+cnt;
        IsArchiveNeeded = _start+_roiRecordsLimit<=ROIDISTRIBUTIONID?true:false;
        _end = _end<=ROIDISTRIBUTIONID?_end:ROIDISTRIBUTIONID;
        _end = _end<=_roiRecordsLimit?_end:_roiRecordsLimit;

        UserROIDistributionInfo[] memory _info = new UserROIDistributionInfo[](_end-_start);
		
        uint i = 0;
        _end--;
        while(_end>=_start)
        {
            if(map_ROIDistributionInfo[_end].OnMemberId!=memberId && map_ROIDistributionInfo[_end].OnMemberId!=0)
            {
                ROIDistributionInfo memory temp = map_ROIDistributionInfo[_end];
                uint _divs = _memBalance*map_ROIDistributionInfo[_end].Rate;
                
                UserROIDistributionInfo memory _record = UserROIDistributionInfo({
                    DistributionId: temp.DistributionId,
                    OnMemberId: temp.OnMemberId,
                    OnMemberAddress: map_Users[temp.OnMemberId].Address,
                    OnAmount: temp.OnAmount,
                    DistributionAmount: temp.DistributionAmount,
                    Rate: temp.Rate,
                    TotalSupply: temp.TotalSupply,
                    ROIAmount: _divs,
                    Type: temp.Type
                });
                _info[i] = _record;
                i++;
            }
            _end--;
        }
        return (_info, map_Users[memberId].ROIDividend, IsArchiveNeeded, _start, _roiRecordsLimit);
    }

    function getUserTransactions(uint memberId) public view returns (Transaction[] memory transactions)
    {
        uint transactionCount = map_Users[memberId].TransactionCount;

        transactions=new Transaction[](transactionCount);

        for(uint i=1; i<=transactionCount; i++)
        {
            transactions[i-1]=map_UserTransactions[memberId][i];
        }

        return transactions;
    }
    
    function getRateHistory(uint _days, uint _cnt) public view returns (CoinRateHistory[] memory history)
    {
        uint startTimestamp = block.timestamp - _days*24*60*60;

        uint len=0;

        for(uint i=RateHistoryCount-1; i>=1; i--)
        {
            if(map_CoinRateHistory[i].Timestamp>=startTimestamp)
            {
                len++;
            }
        }

        uint cnt = (_cnt>0?_cnt:100);
        uint step = len/cnt;
        
        step = step==0?1:step;
        
        history=new CoinRateHistory[](cnt);

        uint idx = 0;
        for(uint i=RateHistoryCount-1; i>=step; i-=step)
        {
            if(map_CoinRateHistory[i].Timestamp>=startTimestamp)
            {
                history[idx]=map_CoinRateHistory[i];
                idx++;
            }
            
        }

        return history;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"IN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RateHistoryCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TotalHoldings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"},{"internalType":"uint256","name":"endId","type":"uint256"}],"name":"archiveROI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"doesUserExist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCoinRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"}],"name":"getDirects","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"Id","type":"uint256"},{"internalType":"address","name":"Address","type":"address"},{"internalType":"uint256","name":"SponsorId","type":"uint256"},{"internalType":"uint256","name":"Business","type":"uint256"},{"internalType":"uint256","name":"NextRankBusiness","type":"uint256"},{"internalType":"uint256","name":"Investment","type":"uint256"},{"internalType":"uint8","name":"RankId","type":"uint8"},{"internalType":"uint256[]","name":"DirectIds","type":"uint256[]"},{"internalType":"uint256","name":"ROIDividend","type":"uint256"},{"internalType":"uint256[]","name":"LevelDividend","type":"uint256[]"},{"internalType":"uint256","name":"DividendWithdrawn","type":"uint256"},{"internalType":"uint256","name":"ROIDistributionId_Start","type":"uint256"},{"internalType":"uint256","name":"ROIDistributionId_Register","type":"uint256"},{"internalType":"uint256","name":"TransactionCount","type":"uint256"},{"internalType":"uint256","name":"LastSellTime","type":"uint256"}],"internalType":"struct Fakhama.User","name":"UserInfo","type":"tuple"},{"internalType":"string","name":"CurrentRankName","type":"string"},{"internalType":"string","name":"NextRankName","type":"string"},{"internalType":"uint256","name":"RequiredBusinessForNextRank","type":"uint256"},{"internalType":"uint256","name":"CoinRate","type":"uint256"},{"internalType":"uint256","name":"CoinsHolding","type":"uint256"},{"internalType":"uint256","name":"CurrentRankId","type":"uint256"},{"internalType":"uint256","name":"TotalLevelDividend","type":"uint256"},{"internalType":"uint256","name":"TotalROIDividend","type":"uint256"}],"internalType":"struct Fakhama.UserInfo[]","name":"Directs","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"}],"name":"getMemberLevelDividend","outputs":[{"components":[{"internalType":"uint256","name":"MemberCount","type":"uint256"},{"internalType":"uint256","name":"Investment","type":"uint256"}],"internalType":"struct Fakhama.UserLevelInfo[]","name":"LevelInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"Percentage","type":"uint256[]"},{"internalType":"uint256[]","name":"LevelIncome","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"},{"internalType":"uint256","name":"cnt","type":"uint256"}],"name":"getMemberROIDividendInfo","outputs":[{"components":[{"internalType":"uint256","name":"DistributionId","type":"uint256"},{"internalType":"uint256","name":"OnMemberId","type":"uint256"},{"internalType":"address","name":"OnMemberAddress","type":"address"},{"internalType":"uint256","name":"OnAmount","type":"uint256"},{"internalType":"uint256","name":"DistributionAmount","type":"uint256"},{"internalType":"uint256","name":"Rate","type":"uint256"},{"internalType":"string","name":"Type","type":"string"},{"internalType":"uint256","name":"TotalSupply","type":"uint256"},{"internalType":"uint256","name":"ROIAmount","type":"uint256"}],"internalType":"struct Fakhama.UserROIDistributionInfo[]","name":"ROIRecords","type":"tuple[]"},{"internalType":"uint256","name":"ArchivedROI","type":"uint256"},{"internalType":"bool","name":"IsArchiveNeeded","type":"bool"},{"internalType":"uint256","name":"StartId","type":"uint256"},{"internalType":"uint256","name":"RecordsLimit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"}],"name":"getMemberTotalLevelDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"},{"internalType":"uint256","name":"_cnt","type":"uint256"}],"name":"getRateHistory","outputs":[{"components":[{"internalType":"uint256","name":"Rate","type":"uint256"},{"internalType":"uint256","name":"Timestamp","type":"uint256"}],"internalType":"struct Fakhama.CoinRateHistory[]","name":"history","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"}],"name":"getUserBalanceDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"}],"name":"getUserInfo","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"Id","type":"uint256"},{"internalType":"address","name":"Address","type":"address"},{"internalType":"uint256","name":"SponsorId","type":"uint256"},{"internalType":"uint256","name":"Business","type":"uint256"},{"internalType":"uint256","name":"NextRankBusiness","type":"uint256"},{"internalType":"uint256","name":"Investment","type":"uint256"},{"internalType":"uint8","name":"RankId","type":"uint8"},{"internalType":"uint256[]","name":"DirectIds","type":"uint256[]"},{"internalType":"uint256","name":"ROIDividend","type":"uint256"},{"internalType":"uint256[]","name":"LevelDividend","type":"uint256[]"},{"internalType":"uint256","name":"DividendWithdrawn","type":"uint256"},{"internalType":"uint256","name":"ROIDistributionId_Start","type":"uint256"},{"internalType":"uint256","name":"ROIDistributionId_Register","type":"uint256"},{"internalType":"uint256","name":"TransactionCount","type":"uint256"},{"internalType":"uint256","name":"LastSellTime","type":"uint256"}],"internalType":"struct Fakhama.User","name":"UserInfo","type":"tuple"},{"internalType":"string","name":"CurrentRankName","type":"string"},{"internalType":"string","name":"NextRankName","type":"string"},{"internalType":"uint256","name":"RequiredBusinessForNextRank","type":"uint256"},{"internalType":"uint256","name":"CoinRate","type":"uint256"},{"internalType":"uint256","name":"CoinsHolding","type":"uint256"},{"internalType":"uint256","name":"CurrentRankId","type":"uint256"},{"internalType":"uint256","name":"TotalLevelDividend","type":"uint256"},{"internalType":"uint256","name":"TotalROIDividend","type":"uint256"}],"internalType":"struct Fakhama.UserInfo","name":"userInfo","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"}],"name":"getUserRanks","outputs":[{"components":[{"internalType":"uint256","name":"Id","type":"uint256"},{"internalType":"string","name":"RankName","type":"string"},{"internalType":"uint256","name":"ReqBusiness","type":"uint256"},{"internalType":"uint256","name":"UserBusiness","type":"uint256"},{"internalType":"string","name":"Status","type":"string"}],"internalType":"struct Fakhama.RankInfo[]","name":"rankInfo","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"},{"internalType":"uint256","name":"endId","type":"uint256"}],"name":"getUserTotalROIDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"}],"name":"getUserTransactions","outputs":[{"components":[{"internalType":"uint256","name":"Amount","type":"uint256"},{"internalType":"uint256","name":"TokenAmount","type":"uint256"},{"internalType":"uint256","name":"Rate","type":"uint256"},{"internalType":"string","name":"Type","type":"string"}],"internalType":"struct Fakhama.Transaction[]","name":"transactions","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"SponsorAddress","type":"address"}],"name":"invest","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"map_CoinRateHistory","outputs":[{"internalType":"uint256","name":"Rate","type":"uint256"},{"internalType":"uint256","name":"Timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"map_UserIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"map_Users","outputs":[{"internalType":"uint256","name":"Id","type":"uint256"},{"internalType":"address","name":"Address","type":"address"},{"internalType":"uint256","name":"SponsorId","type":"uint256"},{"internalType":"uint256","name":"Business","type":"uint256"},{"internalType":"uint256","name":"NextRankBusiness","type":"uint256"},{"internalType":"uint256","name":"Investment","type":"uint256"},{"internalType":"uint8","name":"RankId","type":"uint8"},{"internalType":"uint256","name":"ROIDividend","type":"uint256"},{"internalType":"uint256","name":"DividendWithdrawn","type":"uint256"},{"internalType":"uint256","name":"ROIDistributionId_Start","type":"uint256"},{"internalType":"uint256","name":"ROIDistributionId_Register","type":"uint256"},{"internalType":"uint256","name":"TransactionCount","type":"uint256"},{"internalType":"uint256","name":"LastSellTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"map_ranks","outputs":[{"internalType":"uint256","name":"Id","type":"uint256"},{"internalType":"string","name":"Name","type":"string"},{"internalType":"uint256","name":"Business","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newInvestment","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"tokensToMatic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"updateROIRecordsLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"withdrawHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e556003600f556305f5e10060105560006011556001601255614e20601355600060145560016015553480156200003d57600080fd5b506040805180820190915260068152655072697a6d6160d01b6020820152600b906200006a908262000db5565b5060408051808201909152600381526250524d60e81b6020820152600c9062000094908262000db5565b506103847fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0581905561012c7f91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a78190557f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa05560c87f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f8190557f04cde762ef08b6b6c5ded8e8c4c0b3f4e5c9ad7342c88fcc93681b4588b73f055560af7fc59312466997bb42aaaf719ece141047820e6b34531e1670dc1852a453648f0f8190557fbeb3bad75134cb432e5707980e3245c52c5998a1125ee30f2f0dbf3925b1e5515560967f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a48190557f4ad5a04d53b5856f318545bb721f67d3f6d0a5a999f25eec7e20eaeb4c47b9338190557f5c6b02db8b672415ffad906d7ccee10bd53dbad7d0b29e2bc0e50c93d5f31093557f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b556104b07f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a556105dc7fa9bc9a3a348c357ba16b37005d7e6b3236198c0e939f4af8c5f19b8deeb8ebc0556106a47f3eec716f11ba9e820c81ca75eb978ffb45831ef8b7a53e5e422c26008e1ca6d55561076c7f458b30c2d72bfd2c6317304a4594ecbafe5f729d3111b65fdc3a33bd48e5432d5561081b7f069400f22b28c6c362558d92f66163cec5671cba50b61abd2eecfcd0eaeac518556108ca7feddb6698d7c569ff62ff64f1f1492bf14a54594835ba0faac91f84b4f5d81460556109607ffb33122aa9f93cc639ebe80a7bc4784c11e6053dde89c6f4f7e268c6a623da1e556109f67fc0a4a8be475dfebc377ebef2d7c4ff47656f572a08dd92b81017efcdba0febe155610a8c7fa18b128af1c8fc61ff46f02d146e54546f34d340574cf2cef6a753cba6b6701d55600d80546001600160a01b03191633179055604080516060810182526001808252825180840184526003808252622217a960e91b60208381019190915284810192835260009585018690529290945292905280517fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c90815591519091907fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054d906200041b908262000db5565b5060409182015160029182015581516060810183528181528251808401845260038082526246433160e81b6020838101919091528084019283526103e8958401959095526000939093529190925281517fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d90815590517fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4e90620004bf908262000db5565b5060409182015160029091015580516060810182526003808252825180840184528181526223219960e91b6020828101919091528084019182526105dc948401949094526000829052925280517fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495af90815591519091907fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495b09062000563908262000db5565b50604091820151600290910155805160608101825260048082528251808401845260038082526246433360e81b60208381019190915280850192835261119495850195909552600092909252925280517f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe9377246590815591519091907f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe93772466906200060a908262000db5565b5060409182015160029091015580516060810182526005808252825180840184526003808252621190cd60ea1b60208381019190915280850192835261177095850195909552600092909252925280517f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b46594225090815591519091907f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b46594225190620006b1908262000db5565b50604091820151600290910155805160608101825260068082528251808401845260038082526246433560e81b602083810191909152808501928352612ee095850195909552600092909252925280517fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f390815591519091907fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f49062000758908262000db5565b50604091820151600290910155805160608101825260078082528251808401845260038082526223219b60e91b602083810191909152808501928352613a9895850195909552600092909252925280517ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd290815591519091907ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd390620007ff908262000db5565b50604091820151600290910155805160608101825260088082528251808401845260038082526246433760e81b602083810191909152808501928352614e2095850195909552600092909252925280517f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbe90815591519091907f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbf90620008a6908262000db5565b50604091820151600290910155805160608101825260098082528251808401845260038082526208c86760eb1b602083810191909152808501928352616d6095850195909552600092909252925280517f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb45890815591519091907f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb459906200094d908262000db5565b50604082015181600201559050506000600e5460016200096e919062000e97565b604080516101e08101825282815273ba9c6a2f87c2c28f7c64b457b9145a57b3f0c38960208201526000918101829052606081018290526080810182905260a08101829052600160c08201529192509060e0810182604051908082528060200260200182016040528015620009ed578160200160208202803683370190505b5081526000602082015260408051600a808252610160820183529190920191908160200160208202803683375050508152600060208083018290526012546040808501829052606080860192909252608080860185905260a0958601859052888552600180855294829020875181558785015195810180546001600160a01b0319166001600160a01b0390971696909617909555908601516002850155908501516003840155840151600483015591830151600582015560c083015160068201805460ff191660ff90921691909117905560e083015180519394508493919262000ae09260078501929091019062000ca9565b506101008201516008820155610120820151805162000b0a91600984019160209091019062000ca9565b50610140820151600a820155610160820151600b820155610180820151600c8201556101a0820151600d8201556101c090910151600e9182015573ba9c6a2f87c2c28f7c64b457b9145a57b3f0c389600090815260026020527fc96e268c0b1791f507d7ae514fc3e3d13d94506872eec7f5ca0e242e076a7b5a8490558154919062000b968362000eb2565b91905055506000604051806040016040528062000bb862000c0260201b60201c565b8152426020918201526015805460009081526009835260408120845181559284015160019093019290925580549293509062000bf48362000eb2565b919050555050505062000f13565b600069152d02c7e14af6800000601154101562000c6957620186a0601154600962000c2e919062000ece565b62000c3a919062000ef0565b62000c4e90670de0b6b3a764000062000e97565b62000c649069021e19e0c9bab240000062000ef0565b905090565b670de0b6b3a7640000601154101562000c83575060105490565b60115460105462000c9d90670de0b6b3a764000062000ece565b62000c64919062000ef0565b82805482825590600052602060002090810192821562000ce7579160200282015b8281111562000ce757825182559160200191906001019062000cca565b5062000cf592915062000cf9565b5090565b5b8082111562000cf5576000815560010162000cfa565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000d3b57607f821691505b60208210810362000d5c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000db057600081815260208120601f850160051c8101602086101562000d8b5750805b601f850160051c820191505b8181101562000dac5782815560010162000d97565b5050505b505050565b81516001600160401b0381111562000dd15762000dd162000d10565b62000de98162000de2845462000d26565b8462000d62565b602080601f83116001811462000e21576000841562000e085750858301515b600019600386901b1c1916600185901b17855562000dac565b600085815260208120601f198616915b8281101562000e525788860151825594840194600190910190840162000e31565b508582101562000e715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b6000821982111562000ead5762000ead62000e81565b500190565b60006001820162000ec75762000ec762000e81565b5060010190565b600081600019048311821515161562000eeb5762000eeb62000e81565b500290565b60008262000f0e57634e487b7160e01b600052601260045260246000fd5b500490565b613c9d8062000f236000396000f3fe6080604052600436106101e55760003560e01c80639140f96811610101578063c25acf151161009a578063e3f7146b1161006c578063e3f7146b146106ea578063e969c49414610717578063ecb4105414610744578063ee06fa391461078c578063f571545b146107a257005b8063c25acf1514610668578063d379dadf14610688578063d4d6e96e146106b5578063d6567998146106ca57005b8063a6669b9b116100d3578063a6669b9b146105db578063a7a2f47e14610608578063b85c740914610628578063be3b571f1461064857005b80639140f9681461058057806395d89b41146105885780639d1727701461059d578063a5ece941146105b357005b80634df49ca01161017e578063695dd0f511610150578063695dd0f5146103cf5780636d13f5a7146104ca57806370a08231146104ea57806383b2fbea146105205780638da5cb5b1461054057005b80634df49ca01461033d5780634eadbc85146103535780635d9bd8b214610382578063670829cf146103a257005b80632929f7df116101b75780632929f7df1461027a578063313ce567146102ab57806339ab5249146102c75780633ccc9860146102f457005b806303f9c793146101ee57806306fdde031461020157806309be84681461022c57806318160ddd1461025b57005b366101ec57005b005b6101ec6101fc3660046133a6565b6107b7565b34801561020d57600080fd5b506102166107c3565b6040516102239190613423565b60405180910390f35b34801561023857600080fd5b5061024c610247366004613436565b610855565b6040516102239392919061344f565b34801561026757600080fd5b50600a545b604051908152602001610223565b34801561028657600080fd5b5061029a610295366004613478565b610900565b60405161022395949392919061349a565b3480156102b757600080fd5b5060405160008152602001610223565b3480156102d357600080fd5b506102e76102e2366004613436565b610cbf565b604051610223919061358c565b34801561030057600080fd5b5061032861030f366004613436565b6009602052600090815260409020805460019091015482565b60408051928352602083019190915201610223565b34801561034957600080fd5b5061026c60115481565b34801561035f57600080fd5b5061037361036e366004613436565b610f65565b6040516102239392919061366e565b34801561038e57600080fd5b506101ec61039d366004613436565b611110565b3480156103ae57600080fd5b506103c26103bd366004613436565b6113b6565b6040516102239190613866565b3480156103db57600080fd5b5061045e6103ea366004613436565b6001602081905260009182526040909120805491810154600282015460038301546004840154600585015460068601546008870154600a880154600b890154600c8a0154600d8b0154600e909b01546001600160a01b03909a169a989997989697959660ff9095169593949293919290918d565b604080519d8e526001600160a01b03909c1660208e01529a8c019990995260608b019790975260808a019590955260a089019390935260ff90911660c088015260e08701526101008601526101208501526101408401526101608301526101808201526101a001610223565b3480156104d657600080fd5b5061026c6104e5366004613478565b6114d3565b3480156104f657600080fd5b5061026c6105053660046133a6565b6001600160a01b031660009081526020819052604090205490565b34801561052c57600080fd5b506101ec61053b366004613478565b611614565b34801561054c57600080fd5b5061056873ba9c6a2f87c2c28f7c64b457b9145a57b3f0c38981565b6040516001600160a01b039091168152602001610223565b6101ec6117b6565b34801561059457600080fd5b506102166118a0565b3480156105a957600080fd5b5061026c60145481565b3480156105bf57600080fd5b50610568737be81ee18269e8cebd26fe561f681d4c09b5a6a081565b3480156105e757600080fd5b506105fb6105f6366004613478565b6118af565b60405161022391906138c8565b34801561061457600080fd5b5061026c610623366004613436565b611a6f565b34801561063457600080fd5b5061026c610643366004613436565b611b1f565b34801561065457600080fd5b506101ec610663366004613436565b611b6e565b34801561067457600080fd5b5061026c610683366004613436565b611b93565b34801561069457600080fd5b506106a86106a3366004613436565b611bce565b604051610223919061391f565b3480156106c157600080fd5b5061026c611f74565b3480156106d657600080fd5b506101ec6106e5366004613436565b611f7f565b3480156106f657600080fd5b5061026c6107053660046133a6565b60026020526000908152604090205481565b34801561072357600080fd5b50610737610732366004613436565b612352565b6040516102239190613932565b34801561075057600080fd5b5061077c61075f3660046133a6565b6001600160a01b0316600090815260026020526040902054151590565b6040519015158152602001610223565b34801561079857600080fd5b5061026c60155481565b3480156107ae57600080fd5b5061026c61250b565b6107c0816125a4565b50565b6060600b80546107d2906139af565b80601f01602080910402602001604051908101604052809291908181526020018280546107fe906139af565b801561084b5780601f106108205761010080835404028352916020019161084b565b820191906000526020600020905b81548152906001019060200180831161082e57829003601f168201915b5050505050905090565b60036020526000908152604090208054600182018054919291610877906139af565b80601f01602080910402602001604051908101604052809291908181526020018280546108a3906139af565b80156108f05780601f106108c5576101008083540402835291602001916108f0565b820191906000526020600020905b8154815290600101906020018083116108d357829003601f168201915b5050505050908060020154905083565b6000828152600160205260408120600b015460609190819081908190600a87101561092a57600a96505b6000888152600160208181526040808420909201546001600160a01b031683528290528120549061095b89846139ff565b90506012546013548461096e91906139ff565b111561097b57600061097e565b60015b955060125481111561099257601254610994565b805b90506013548111156109a8576013546109aa565b805b905060006109b88483613a17565b67ffffffffffffffff8111156109d0576109d0613a2e565b604051908082528060200260200182016040528015610a5957816020015b610a46604051806101200160405280600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016060815260200160008152602001600081525090565b8152602001906001900390816109ee5790505b509050600082610a6881613a44565b9350505b848310610c93576000838152600760205260409020600101548c14801590610aa4575060008381526007602052604090206001015415155b15610c81576000600760008581526020019081526020016000206040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582018054610b0b906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054610b37906139af565b8015610b845780601f10610b5957610100808354040283529160200191610b84565b820191906000526020600020905b815481529060010190602001808311610b6757829003601f168201915b50505091835250506006919091015460209182015260008681526007909152604081206004015491925090610bb99087613a5b565b905060006040518061012001604052808460000151815260200184602001518152602001600160008660200151815260200190815260200160002060010160009054906101000a90046001600160a01b03166001600160a01b031681526020018460400151815260200184606001518152602001846080015181526020018460a0015181526020018460c00151815260200183815250905080858581518110610c6457610c64613a7a565b60200260200101819052508380610c7a90613a90565b9450505050505b82610c8b81613a44565b935050610a6c565b5060009a8b5260016020526040909a20600801546013549a9b909a969950929750949550909350505050565b60008181526001602052604080822060068101546003909101548251600a808252610160820190945260609460ff90931693919291816020015b610d2b6040518060a0016040528060008152602001606081526020016000815260200160008152602001606081525090565b815260200190600190039081610cf957905050905060015b600a8111610f5c5760006003600083815260200190815260200160002060405180606001604052908160008201548152602001600182018054610d85906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054610db1906139af565b8015610dfe5780601f10610dd357610100808354040283529160200191610dfe565b820191906000526020600020905b815481529060010190602001808311610de157829003601f168201915b50505050508152602001600282015481525050905060006040518060a0016040528084815260200183602001518152602001836040015181526020018360400151670de0b6b3a7640000610e529190613a5b565b8711610e5e5786610e75565b6040840151610e7590670de0b6b3a7640000613a5b565b815260200184881015610eb0576040518060400160405280601081526020016f139bdd081e595d081858da1a595d995960821b815250610ed2565b604051806040016040528060088152602001671058da1a595d995960c21b8152505b905290508084610ee3600186613a17565b81518110610ef357610ef3613a7a565b60200260200101819052508160400151670de0b6b3a7640000610f169190613a5b565b851015610f24576000610f45565b6040820151610f3b90670de0b6b3a7640000613a5b565b610f459086613a17565b945050508080610f5490613a90565b915050610d43565b50949350505050565b60408051600a80825261016082019092526060918291829160009190816020015b6040805180820190915260008082526020820152815260200190600190039081610f8657505060408051600a808252610160820190925291925060009190602082016101408036833701905050905060015b600a8160ff161161109657600087815260066020908152604080832060ff851684528252918290208251808401909352805483526001908101549183019190915284906110259084613aa9565b60ff168151811061103857611038613a7a565b60209081029190910181019190915260ff821660009081526004909152604090205482611066600184613aa9565b60ff168151811061107957611079613a7a565b60209081029190910101528061108e81613acc565b915050610fd8565b50818160016000898152602001908152602001600020600901808054806020026020016040519081016040528092919081815260200182805480156110fa57602002820191906000526020600020905b8154815260200190600101908083116110e6575b5050505050905094509450945050509193909250565b336000908152600260205260408120549061112a82611b93565b9050600082116111555760405162461bcd60e51b815260040161114c90613aeb565b60405180910390fd5b828110156111b05760405162461bcd60e51b815260206004820152602260248201527f496e73756666696369656e74206469766964656e6420746f2077697468647261604482015261772160f01b606482015260840161114c565b6111bc82601254611614565b600060646111cb85600a613a5b565b6111d59190613b12565b905060006111e38286613a17565b90508460016000868152602001908152602001600020600a01600082825461120b91906139ff565b909155505060408051608081018252868152600060208083018290528284018290528351808501855260128152712234bb34b232b732102bb4ba34323930bbb760711b81830152606084015287825260088152838220600191829052938220600d01549293849390929161127f91906139ff565b81526020808201929092526040908101600020835181559183015160018301558201516002820155606082015160038201906112bb9082613b82565b5050506000858152600160205260408120600d018054916112db83613a90565b909155506000905060646112f088600a613a5b565b6112fa9190613b12565b905061132a8688836040518060400160405280600a81526020016915da5d1a191c985dd85b60b21b81525061292d565b604051339084156108fc029085906000818181858888f19350505050158015611357573d6000803e3d6000fd5b506000604051806040016040528061136d61250b565b815242602091820152601580546000908152600983526040812084518155928401516001909301929092558054929350906113a783613a90565b91905055505050505050505050565b600081815260016020908152604080832060070180548251818502810185019093528083526060949383018282801561140e57602002820191906000526020600020905b8154815260200190600101908083116113fa575b505050505090506000815167ffffffffffffffff81111561143157611431613a2e565b60405190808252806020026020018201604052801561146a57816020015b611457613277565b81526020019060019003908161144f5790505b50905060005b82518110156114cb5761149b83828151811061148e5761148e613a7a565b6020026020010151611bce565b8282815181106114ad576114ad613a7a565b602002602001018190525080806114c390613a90565b915050611470565b509392505050565b60008281526001602052604081206008810154600b909101546012548411156114fe57601254611500565b835b93506013548161151091906139ff565b8411156115855760405162461bcd60e51b815260206004820152603c60248201527f546f6f206d616e792063616c63756c6174696f6e732120506c6561736520747260448201527f7920746f206172636869766520796f757220504f492066697273742e00000000606482015260840161114c565b6000858152600160208181526040808420909201546001600160a01b031683528290529020545b8482101561160a5760008281526007602052604090206001015486146115f8576000828152600760205260408120600401546115e89083613a5b565b90506115f481856139ff565b9350505b8161160281613a90565b9250506115ac565b5090949350505050565b6000828152600160205260409020600b01546012548211156116385760125461163a565b815b91506116478160646139ff565b82111561165e576116598160646139ff565b611660565b815b6000848152600160208181526040808420909201546001600160a01b031683528290529020549092505b8282101561174a57600e546001036116d557600082815260076020908152604080832060030154878452600190925282206008018054919290916116cf9084906139ff565b90915550505b6000828152600760205260409020600101548414611738576000828152600760205260408120600401546117099083613a5b565b90508060016000878152602001908152602001600020600801600082825461173191906139ff565b9091555050505b8161174281613a90565b92505061168a565b600084815260016020526040808220600b0185905580518082019091528061177061250b565b815242602091820152601580546000908152600983526040812084518155928401516001909301929092558054929350906117aa83613a90565b91905055505050505050565b336000818152600260205260409020546117e25760405162461bcd60e51b815260040161114c90613aeb565b600034116118245760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420616d6f756e742160881b604482015260640161114c565b674563918244f4000034101561187c5760405162461bcd60e51b815260206004820152601b60248201527f4d696e696d756d20696e7665737420616d6f756e742069732035210000000000604482015260640161114c565b6001600160a01b0381166000908152600260205260408120546107c09134906129f0565b6060600c80546107d2906139af565b606060006118be846018613a5b565b6118c990603c613a5b565b6118d490603c613a5b565b6118de9042613a17565b905060008060016015546118f29190613a17565b90505b60018110611935576000818152600960205260409020600101548311611923578161191f81613a90565b9250505b8061192d81613a44565b9150506118f5565b506000808511611946576064611948565b845b905060006119568284613b12565b905080156119645780611967565b60015b90508167ffffffffffffffff81111561198257611982613a2e565b6040519080825280602002602001820160405280156119c757816020015b60408051808201909152600080825260208201528152602001906001900390816119a05790505b50945060008060016015546119dc9190613a17565b90505b828110611a63576000818152600960205260409020600101548611611a525760008181526009602090815260409182902082518084019093528054835260010154908201528751889084908110611a3857611a38613a7a565b60200260200101819052508180611a4e90613a90565b9250505b611a5c8382613a17565b90506119df565b50505050505092915050565b6000818152600160209081526040808320600901805482518185028101850190935280835284938493929190830182828015611aca57602002820191906000526020600020905b815481526020019060010190808311611ab6575b5050505050905060005b8151811015611b1657818181518110611aef57611aef613a7a565b602002602001015183611b0291906139ff565b925080611b0e81613a90565b915050611ad4565b50909392505050565b600073ba9c6a2f87c2c28f7c64b457b9145a57b3f0c388193301611b44575047919050565b611b4c611f74565b611b5e83670de0b6b3a7640000613a5b565b611b689190613b12565b92915050565b3373ba9c6a2f87c2c28f7c64b457b9145a57b3f0c38914611b8e57600080fd5b601355565b6000818152600160205260408120600a0154611bae83611a6f565b611bba846012546114d3565b611bc491906139ff565b611b689190613a17565b611bd6613277565b600082815260016020818152604080842081516101e08101835281548152938101546001600160a01b0316848401526002810154848301526003810154606085015260048101546080850152600581015460a0850152600681015460ff1660c0850152600781018054835181860281018601909452808452919360e08601939290830182828015611c8657602002820191906000526020600020905b815481526020019060010190808311611c72575b505050505081526020016008820154815260200160098201805480602002602001604051908101604052809291908181526020018280548015611ce857602002820191906000526020600020905b815481526020019060010190808311611cd4575b50505050508152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152505090506000600360008360c0015160ff1681526020019081526020016000206001018054611d4f906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7b906139af565b8015611dc85780601f10611d9d57610100808354040283529160200191611dc8565b820191906000526020600020905b815481529060010190602001808311611dab57829003601f168201915b50505050509050600060048360c0015160ff1610611df55760405180602001604052806000815250611ea8565b600360008460c001516001611e0a9190613c42565b60ff1681526020019081526020016000206001018054611e29906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054611e55906139af565b8015611ea25780601f10611e7757610100808354040283529160200191611ea2565b820191906000526020600020905b815481529060010190602001808311611e8557829003601f168201915b50505050505b90506000600360008560c001516001611ec19190613c42565b60ff1681526020019081526020016000206002015490506000611ee2611f74565b6020808701516001600160a01b03166000908152908190526040812054919250611f0b89611a6f565b90506000611f1b8a6012546114d3565b60408051610120810182528a81526020810199909952880196909652506060860193909352608085019190915260a084015260c09384015160ff169383019390935260e082019290925261010081019190915292915050565b600080611b6861250b565b3360009081526002602052604090205480611fac5760405162461bcd60e51b815260040161114c90613aeb565b6000818152600160205260408120600e0154611fc89042613a17565b90506201518081101561201d5760405162461bcd60e51b815260206004820152601f60248201527f596f752063616e207769746864726177206f6e636520696e2061206461792100604482015260640161114c565b3360009081526020819052604090205483111561207c5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e7420746f6b656e2062616c616e6365210000000000604482015260640161114c565b600061208784611b1f565b9050804710156120d95760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e6420696e20636f6e7472616374210000604482015260640161114c565b33600090815260208190526040902054600a906064906120fa906005613a5b565b6121049190613b12565b8511801561213957503360009081526020819052604090205460649061212b906019613a5b565b6121359190613b12565b8511155b1561214657506032612179565b33600090815260208190526040902054606490612164906019613a5b565b61216e9190613b12565b851115612179575060505b600060646121878385613a5b565b6121919190613b12565b9050600061219f8285613a17565b9050600060405180608001604052808681526020018981526020016121c2611f74565b8152604080518082018252600a81526929b2b636102a37b5b2b760b11b6020828101919091529283015260008a815260088352818120600193849052918120600d0154939450849391929091612217916139ff565b81526020808201929092526040908101600020835181559183015160018301558201516002820155606082015160038201906122539082613b82565b5050506000878152600160205260408120600d0180549161227383613a90565b9091555050600087815260016020526040902042600e9091015560125461229b908890611614565b6122a53389612fce565b84601154106122cb5784601160008282546122c09190613a17565b909155506122d19050565b60016011555b604051339083156108fc029084906000818181858888f193505050501580156122fe573d6000803e3d6000fd5b5082156123485760405173ba9c6a2f87c2c28f7c64b457b9145a57b3f0c3899084156108fc029085906000818181858888f19350505050158015612346573d6000803e3d6000fd5b505b5050505050505050565b6000818152600160205260409020600d01546060908067ffffffffffffffff81111561238057612380613a2e565b6040519080825280602002602001820160405280156123dc57816020015b6123c96040518060800160405280600081526020016000815260200160008152602001606081525090565b81526020019060019003908161239e5790505b50915060015b81811161250457600860008581526020019081526020016000206000828152602001908152602001600020604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382018054612446906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054612472906139af565b80156124bf5780601f10612494576101008083540402835291602001916124bf565b820191906000526020600020905b8154815290600101906020018083116124a257829003601f168201915b505050505081525050836001836124d69190613a17565b815181106124e6576124e6613a7a565b602002602001018190525080806124fc90613a90565b9150506123e2565b5050919050565b600069152d02c7e14af6800000601154101561256957620186a060115460096125349190613a5b565b61253e9190613b12565b61255090670de0b6b3a76400006139ff565b6125649069021e19e0c9bab2400000613b12565b905090565b670de0b6b3a76400006011541015612582575060105490565b60115460105461259a90670de0b6b3a7640000613a5b565b6125649190613b12565b33346125e45760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420616d6f756e742160881b604482015260640161114c565b674563918244f4000034101561263c5760405162461bcd60e51b815260206004820152601b60248201527f4d696e696d756d20696e7665737420616d6f756e742069732035210000000000604482015260640161114c565b6001600160a01b038116600090815260026020526040902054612921576001600160a01b0382166000908152600260205260409020546126b15760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642073706f6e736f722160801b604482015260640161114c565b6001600160a01b038216600090815260026020526040812054600e549091906126db9060016139ff565b90506000604051806101e00160405280838152602001856001600160a01b03168152602001848152602001600081526020016000815260200160008152602001600160ff168152602001600067ffffffffffffffff81111561273f5761273f613a2e565b604051908082528060200260200182016040528015612768578160200160208202803683370190505b5081526000602082015260408051600a808252610160820183529190920191908160200160208202803683375050508152600060208083018290526012546040808501829052606080860192909252608080860185905260a0958601859052888552600180855294829020875181558785015195810180546001600160a01b0319166001600160a01b0390971696909617909555908601516002850155908501516003840155840151600483015591830151600582015560c083015160068201805460ff191660ff90921691909117905560e083015180519394508493919261285992600785019290910190613346565b5061010082015160088201556101208201518051612881916009840191602090910190613346565b50610140820151600a820155610160820151600b820155610180820151600c8201556101a0820151600d8201556101c090910151600e918201556001600160a01b0385166000908152600260205260408120849055815491906128e383613a90565b90915550506000838152600160208181526040832060070180548084018255908452922090910183905561291a90839034906129f0565b5050505050565b6129296117b6565b5050565b600a546000901561294857600a546129459084613b12565b90505b6040805160e0810182526012548082526020808301898152838501898152606085018981526080860188815260a087018a8152600a5460c089015260009687526007909552969094208551815591516001830155516002820155915160038301559251600482015591519091829160058201906129c59082613b82565b5060c09190910151600690910155601280549060006129e383613a90565b9190505550505050505050565b60006129fa61250b565b9050600068056bc75e2d6310000082612a1486603c613a5b565b612a1e9190613a5b565b612a289190613b12565b905083600160008781526020019081526020016000206005016000828254612a5091906139ff565b92505081905550612a6385601254611614565b604080516080810182528581526020808201849052818301859052825180840184526009815268213abc902a37b5b2b760b91b818301526060830152600088815260088252838120600192839052938120600d0154929384939092612ac891906139ff565b8152602080820192909252604090810160002083518155918301516001830155820151600282015560608201516003820190612b049082613b82565b5050506000868152600160205260408120600d01805491612b2483613a90565b91905055508460146000828254612b3b91906139ff565b90915550506000868152600160208190526040909120600201545b8015612e105760008181526001602052604081206003018054899290612b7d9084906139ff565b909155505060008181526001602052604081206004018054899290612ba39084906139ff565b9091555050600160ff83161115612be957600081815260066020908152604080832060ff8616845290915281206001018054899290612be39084906139ff565b90915550505b8515612c1d57600081815260066020908152604080832060ff861684529091528120805491612c1783613a90565b91905055505b600a8260ff1611612de35760008181526001602052604081206006015460ff808516911610612d755760ff831660009081526004602052604090205461271090612c67908a613a5b565b612c719190613b12565b90508260ff16600103612d1a5760008281526001602090815260408083206006015460ff1680845260059092529091205461271090612cb0908b613a5b565b612cba9190613b12565b91508160016000858152602001908152602001600020600901600186612ce09190613aa9565b60ff1681548110612cf357612cf3613a7a565b906000526020600020016000828254612d0c91906139ff565b90915550909350612de19050565b8060016000848152602001908152602001600020600901600185612d3e9190613aa9565b60ff1681548110612d5157612d51613a7a565b906000526020600020016000828254612d6a91906139ff565b90915550612de19050565b60016000819052602081905281907fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688793890612daf9086613aa9565b60ff1681548110612dc257612dc2613a7a565b906000526020600020016000828254612ddb91906139ff565b90915550505b505b612dec81613136565b60009081526001602052604090206002015481612e0881613acc565b925050612b56565b600a8260ff1611612ec85760ff821660009081526004602052604081205461271090612e3c908a613a5b565b612e469190613b12565b60016000819052602081905290915081907fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688793890612e839086613aa9565b60ff1681548110612e9657612e96613a7a565b906000526020600020016000828254612eaf91906139ff565b90915550839050612ebf81613acc565b93505050612e10565b612f0988886064612eda82600a613a5b565b612ee49190613b12565b6040518060400160405280600781526020016611195c1bdcda5d60ca1b81525061292d565b600e54600103612f1f57612f1f88601254611614565b60008881526001602081905260409091200154612f45906001600160a01b0316856131d9565b6064612f5288603c613a5b565b612f5c9190613b12565b60116000828254612f6d91906139ff565b9091555050600f54737be81ee18269e8cebd26fe561f681d4c09b5a6a0906108fc90606490612f9c908b613a5b565b612fa69190613b12565b6040518115909202916000818181858888f19350505050158015612346573d6000803e3d6000fd5b6001600160a01b03821661302e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161114c565b6001600160a01b038216600090815260208190526040902054818110156130a25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161114c565b81600a5410156130f45760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420616d6f756e74206f6620746f6b656e732100000000000000604482015260640161114c565b6130fe8282613a17565b6001600160a01b038416600090815260208190526040812091909155600a805484929061312c908490613a17565b9091555050505050565b600081815260016020819052604082206006015460ff16919061315a908390613c42565b60ff811660009081526003602052604090206002015490915061318590670de0b6b3a7640000613a5b565b600084815260016020526040902060040154108015906131a85750600a8260ff16105b156131d45760008381526001602052604081206004810191909155600601805460ff191660ff83161790555b505050565b6001600160a01b03821661322f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161114c565b80600a600082825461324191906139ff565b90915550506001600160a01b0382166000908152602081905260408120805483929061326e9084906139ff565b90915550505050565b604051806101200160405280613308604051806101e001604052806000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600060ff16815260200160608152602001600081526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b815260200160608152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054828255906000526020600020908101928215613381579160200282015b82811115613381578251825591602001919060010190613366565b5061338d929150613391565b5090565b5b8082111561338d5760008155600101613392565b6000602082840312156133b857600080fd5b81356001600160a01b03811681146133cf57600080fd5b9392505050565b6000815180845260005b818110156133fc576020818501810151868301820152016133e0565b8181111561340e576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006133cf60208301846133d6565b60006020828403121561344857600080fd5b5035919050565b83815260606020820152600061346860608301856133d6565b9050826040830152949350505050565b6000806040838503121561348b57600080fd5b50508035926020909101359150565b600060a080830181845280895180835260c092508286019150828160051b8701016020808d0160005b8481101561355e5760bf198a850301865281516101208151865284820151858701526040808301516134ff828901826001600160a01b03169052565b50506060828101519087015260808083015190870152898201518a87015288820151898701829052613533828801826133d6565b60e08481015190890152610100938401519390970192909252505094820194908201906001016134c3565b505087018b9052891515604088015294506135799350505050565b6060820193909352608001529392505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561362557603f19898403018552815160a08151855288820151818a8701526135e1828701826133d6565b915050878201518886015260608083015181870152506080808301519250858203818701525061361181836133d6565b9689019694505050908601906001016135b3565b509098975050505050505050565b600081518084526020808501945080840160005b8381101561366357815187529582019590820190600101613647565b509495945050505050565b606080825284519082018190526000906020906080840190828801845b828110156136bb576136a884835180518252602090810151910152565b604093909301929084019060010161368b565b505050838103828501526136cf8187613633565b91505082810360408401526136e48185613633565b9695505050505050565b60006101e082518452602083015161371160208601826001600160a01b03169052565b5060408301516040850152606083015160608501526080830151608085015260a083015160a085015260c083015161374e60c086018260ff169052565b5060e08301518160e086015261376682860182613633565b915050610100808401518186015250610120808401518583038287015261378d8382613633565b6101408681015190880152610160808701519088015261018080870151908801526101a080870151908801526101c095860151959096019490945250929392505050565b600061012082518185526137e7828601826136ee565b9150506020830151848203602086015261380182826133d6565b9150506040830151848203604086015261381b82826133d6565b915050606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152508091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156138bb57603f198886030184526138a98583516137d1565b9450928501929085019060010161388d565b5092979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156139125761390284835180518252602090810151910152565b92840192908501906001016138e5565b5091979650505050505050565b6020815260006133cf60208301846137d1565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561362557888303603f190185528151805184528781015188850152868101518785015260609081015160809185018290529061399b818601836133d6565b968901969450505090860190600101613959565b600181811c908216806139c357607f821691505b6020821081036139e357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115613a1257613a126139e9565b500190565b600082821015613a2957613a296139e9565b500390565b634e487b7160e01b600052604160045260246000fd5b600081613a5357613a536139e9565b506000190190565b6000816000190483118215151615613a7557613a756139e9565b500290565b634e487b7160e01b600052603260045260246000fd5b600060018201613aa257613aa26139e9565b5060010190565b600060ff821660ff841680821015613ac357613ac36139e9565b90039392505050565b600060ff821660ff8103613ae257613ae26139e9565b60010192915050565b6020808252600d908201526c496e76616c696420757365722160981b604082015260600190565b600082613b2f57634e487b7160e01b600052601260045260246000fd5b500490565b601f8211156131d457600081815260208120601f850160051c81016020861015613b5b5750805b601f850160051c820191505b81811015613b7a57828155600101613b67565b505050505050565b815167ffffffffffffffff811115613b9c57613b9c613a2e565b613bb081613baa84546139af565b84613b34565b602080601f831160018114613be55760008415613bcd5750858301515b600019600386901b1c1916600185901b178555613b7a565b600085815260208120601f198616915b82811015613c1457888601518255948401946001909101908401613bf5565b5085821015613c325787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060ff821660ff84168060ff03821115613c5f57613c5f6139e9565b01939250505056fea264697066735822122048558bbeff5f69b43d90376dd0b50fb88bcff1dc03b88907b85c91e886fa9a2564736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106101e55760003560e01c80639140f96811610101578063c25acf151161009a578063e3f7146b1161006c578063e3f7146b146106ea578063e969c49414610717578063ecb4105414610744578063ee06fa391461078c578063f571545b146107a257005b8063c25acf1514610668578063d379dadf14610688578063d4d6e96e146106b5578063d6567998146106ca57005b8063a6669b9b116100d3578063a6669b9b146105db578063a7a2f47e14610608578063b85c740914610628578063be3b571f1461064857005b80639140f9681461058057806395d89b41146105885780639d1727701461059d578063a5ece941146105b357005b80634df49ca01161017e578063695dd0f511610150578063695dd0f5146103cf5780636d13f5a7146104ca57806370a08231146104ea57806383b2fbea146105205780638da5cb5b1461054057005b80634df49ca01461033d5780634eadbc85146103535780635d9bd8b214610382578063670829cf146103a257005b80632929f7df116101b75780632929f7df1461027a578063313ce567146102ab57806339ab5249146102c75780633ccc9860146102f457005b806303f9c793146101ee57806306fdde031461020157806309be84681461022c57806318160ddd1461025b57005b366101ec57005b005b6101ec6101fc3660046133a6565b6107b7565b34801561020d57600080fd5b506102166107c3565b6040516102239190613423565b60405180910390f35b34801561023857600080fd5b5061024c610247366004613436565b610855565b6040516102239392919061344f565b34801561026757600080fd5b50600a545b604051908152602001610223565b34801561028657600080fd5b5061029a610295366004613478565b610900565b60405161022395949392919061349a565b3480156102b757600080fd5b5060405160008152602001610223565b3480156102d357600080fd5b506102e76102e2366004613436565b610cbf565b604051610223919061358c565b34801561030057600080fd5b5061032861030f366004613436565b6009602052600090815260409020805460019091015482565b60408051928352602083019190915201610223565b34801561034957600080fd5b5061026c60115481565b34801561035f57600080fd5b5061037361036e366004613436565b610f65565b6040516102239392919061366e565b34801561038e57600080fd5b506101ec61039d366004613436565b611110565b3480156103ae57600080fd5b506103c26103bd366004613436565b6113b6565b6040516102239190613866565b3480156103db57600080fd5b5061045e6103ea366004613436565b6001602081905260009182526040909120805491810154600282015460038301546004840154600585015460068601546008870154600a880154600b890154600c8a0154600d8b0154600e909b01546001600160a01b03909a169a989997989697959660ff9095169593949293919290918d565b604080519d8e526001600160a01b03909c1660208e01529a8c019990995260608b019790975260808a019590955260a089019390935260ff90911660c088015260e08701526101008601526101208501526101408401526101608301526101808201526101a001610223565b3480156104d657600080fd5b5061026c6104e5366004613478565b6114d3565b3480156104f657600080fd5b5061026c6105053660046133a6565b6001600160a01b031660009081526020819052604090205490565b34801561052c57600080fd5b506101ec61053b366004613478565b611614565b34801561054c57600080fd5b5061056873ba9c6a2f87c2c28f7c64b457b9145a57b3f0c38981565b6040516001600160a01b039091168152602001610223565b6101ec6117b6565b34801561059457600080fd5b506102166118a0565b3480156105a957600080fd5b5061026c60145481565b3480156105bf57600080fd5b50610568737be81ee18269e8cebd26fe561f681d4c09b5a6a081565b3480156105e757600080fd5b506105fb6105f6366004613478565b6118af565b60405161022391906138c8565b34801561061457600080fd5b5061026c610623366004613436565b611a6f565b34801561063457600080fd5b5061026c610643366004613436565b611b1f565b34801561065457600080fd5b506101ec610663366004613436565b611b6e565b34801561067457600080fd5b5061026c610683366004613436565b611b93565b34801561069457600080fd5b506106a86106a3366004613436565b611bce565b604051610223919061391f565b3480156106c157600080fd5b5061026c611f74565b3480156106d657600080fd5b506101ec6106e5366004613436565b611f7f565b3480156106f657600080fd5b5061026c6107053660046133a6565b60026020526000908152604090205481565b34801561072357600080fd5b50610737610732366004613436565b612352565b6040516102239190613932565b34801561075057600080fd5b5061077c61075f3660046133a6565b6001600160a01b0316600090815260026020526040902054151590565b6040519015158152602001610223565b34801561079857600080fd5b5061026c60155481565b3480156107ae57600080fd5b5061026c61250b565b6107c0816125a4565b50565b6060600b80546107d2906139af565b80601f01602080910402602001604051908101604052809291908181526020018280546107fe906139af565b801561084b5780601f106108205761010080835404028352916020019161084b565b820191906000526020600020905b81548152906001019060200180831161082e57829003601f168201915b5050505050905090565b60036020526000908152604090208054600182018054919291610877906139af565b80601f01602080910402602001604051908101604052809291908181526020018280546108a3906139af565b80156108f05780601f106108c5576101008083540402835291602001916108f0565b820191906000526020600020905b8154815290600101906020018083116108d357829003601f168201915b5050505050908060020154905083565b6000828152600160205260408120600b015460609190819081908190600a87101561092a57600a96505b6000888152600160208181526040808420909201546001600160a01b031683528290528120549061095b89846139ff565b90506012546013548461096e91906139ff565b111561097b57600061097e565b60015b955060125481111561099257601254610994565b805b90506013548111156109a8576013546109aa565b805b905060006109b88483613a17565b67ffffffffffffffff8111156109d0576109d0613a2e565b604051908082528060200260200182016040528015610a5957816020015b610a46604051806101200160405280600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016060815260200160008152602001600081525090565b8152602001906001900390816109ee5790505b509050600082610a6881613a44565b9350505b848310610c93576000838152600760205260409020600101548c14801590610aa4575060008381526007602052604090206001015415155b15610c81576000600760008581526020019081526020016000206040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582018054610b0b906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054610b37906139af565b8015610b845780601f10610b5957610100808354040283529160200191610b84565b820191906000526020600020905b815481529060010190602001808311610b6757829003601f168201915b50505091835250506006919091015460209182015260008681526007909152604081206004015491925090610bb99087613a5b565b905060006040518061012001604052808460000151815260200184602001518152602001600160008660200151815260200190815260200160002060010160009054906101000a90046001600160a01b03166001600160a01b031681526020018460400151815260200184606001518152602001846080015181526020018460a0015181526020018460c00151815260200183815250905080858581518110610c6457610c64613a7a565b60200260200101819052508380610c7a90613a90565b9450505050505b82610c8b81613a44565b935050610a6c565b5060009a8b5260016020526040909a20600801546013549a9b909a969950929750949550909350505050565b60008181526001602052604080822060068101546003909101548251600a808252610160820190945260609460ff90931693919291816020015b610d2b6040518060a0016040528060008152602001606081526020016000815260200160008152602001606081525090565b815260200190600190039081610cf957905050905060015b600a8111610f5c5760006003600083815260200190815260200160002060405180606001604052908160008201548152602001600182018054610d85906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054610db1906139af565b8015610dfe5780601f10610dd357610100808354040283529160200191610dfe565b820191906000526020600020905b815481529060010190602001808311610de157829003601f168201915b50505050508152602001600282015481525050905060006040518060a0016040528084815260200183602001518152602001836040015181526020018360400151670de0b6b3a7640000610e529190613a5b565b8711610e5e5786610e75565b6040840151610e7590670de0b6b3a7640000613a5b565b815260200184881015610eb0576040518060400160405280601081526020016f139bdd081e595d081858da1a595d995960821b815250610ed2565b604051806040016040528060088152602001671058da1a595d995960c21b8152505b905290508084610ee3600186613a17565b81518110610ef357610ef3613a7a565b60200260200101819052508160400151670de0b6b3a7640000610f169190613a5b565b851015610f24576000610f45565b6040820151610f3b90670de0b6b3a7640000613a5b565b610f459086613a17565b945050508080610f5490613a90565b915050610d43565b50949350505050565b60408051600a80825261016082019092526060918291829160009190816020015b6040805180820190915260008082526020820152815260200190600190039081610f8657505060408051600a808252610160820190925291925060009190602082016101408036833701905050905060015b600a8160ff161161109657600087815260066020908152604080832060ff851684528252918290208251808401909352805483526001908101549183019190915284906110259084613aa9565b60ff168151811061103857611038613a7a565b60209081029190910181019190915260ff821660009081526004909152604090205482611066600184613aa9565b60ff168151811061107957611079613a7a565b60209081029190910101528061108e81613acc565b915050610fd8565b50818160016000898152602001908152602001600020600901808054806020026020016040519081016040528092919081815260200182805480156110fa57602002820191906000526020600020905b8154815260200190600101908083116110e6575b5050505050905094509450945050509193909250565b336000908152600260205260408120549061112a82611b93565b9050600082116111555760405162461bcd60e51b815260040161114c90613aeb565b60405180910390fd5b828110156111b05760405162461bcd60e51b815260206004820152602260248201527f496e73756666696369656e74206469766964656e6420746f2077697468647261604482015261772160f01b606482015260840161114c565b6111bc82601254611614565b600060646111cb85600a613a5b565b6111d59190613b12565b905060006111e38286613a17565b90508460016000868152602001908152602001600020600a01600082825461120b91906139ff565b909155505060408051608081018252868152600060208083018290528284018290528351808501855260128152712234bb34b232b732102bb4ba34323930bbb760711b81830152606084015287825260088152838220600191829052938220600d01549293849390929161127f91906139ff565b81526020808201929092526040908101600020835181559183015160018301558201516002820155606082015160038201906112bb9082613b82565b5050506000858152600160205260408120600d018054916112db83613a90565b909155506000905060646112f088600a613a5b565b6112fa9190613b12565b905061132a8688836040518060400160405280600a81526020016915da5d1a191c985dd85b60b21b81525061292d565b604051339084156108fc029085906000818181858888f19350505050158015611357573d6000803e3d6000fd5b506000604051806040016040528061136d61250b565b815242602091820152601580546000908152600983526040812084518155928401516001909301929092558054929350906113a783613a90565b91905055505050505050505050565b600081815260016020908152604080832060070180548251818502810185019093528083526060949383018282801561140e57602002820191906000526020600020905b8154815260200190600101908083116113fa575b505050505090506000815167ffffffffffffffff81111561143157611431613a2e565b60405190808252806020026020018201604052801561146a57816020015b611457613277565b81526020019060019003908161144f5790505b50905060005b82518110156114cb5761149b83828151811061148e5761148e613a7a565b6020026020010151611bce565b8282815181106114ad576114ad613a7a565b602002602001018190525080806114c390613a90565b915050611470565b509392505050565b60008281526001602052604081206008810154600b909101546012548411156114fe57601254611500565b835b93506013548161151091906139ff565b8411156115855760405162461bcd60e51b815260206004820152603c60248201527f546f6f206d616e792063616c63756c6174696f6e732120506c6561736520747260448201527f7920746f206172636869766520796f757220504f492066697273742e00000000606482015260840161114c565b6000858152600160208181526040808420909201546001600160a01b031683528290529020545b8482101561160a5760008281526007602052604090206001015486146115f8576000828152600760205260408120600401546115e89083613a5b565b90506115f481856139ff565b9350505b8161160281613a90565b9250506115ac565b5090949350505050565b6000828152600160205260409020600b01546012548211156116385760125461163a565b815b91506116478160646139ff565b82111561165e576116598160646139ff565b611660565b815b6000848152600160208181526040808420909201546001600160a01b031683528290529020549092505b8282101561174a57600e546001036116d557600082815260076020908152604080832060030154878452600190925282206008018054919290916116cf9084906139ff565b90915550505b6000828152600760205260409020600101548414611738576000828152600760205260408120600401546117099083613a5b565b90508060016000878152602001908152602001600020600801600082825461173191906139ff565b9091555050505b8161174281613a90565b92505061168a565b600084815260016020526040808220600b0185905580518082019091528061177061250b565b815242602091820152601580546000908152600983526040812084518155928401516001909301929092558054929350906117aa83613a90565b91905055505050505050565b336000818152600260205260409020546117e25760405162461bcd60e51b815260040161114c90613aeb565b600034116118245760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420616d6f756e742160881b604482015260640161114c565b674563918244f4000034101561187c5760405162461bcd60e51b815260206004820152601b60248201527f4d696e696d756d20696e7665737420616d6f756e742069732035210000000000604482015260640161114c565b6001600160a01b0381166000908152600260205260408120546107c09134906129f0565b6060600c80546107d2906139af565b606060006118be846018613a5b565b6118c990603c613a5b565b6118d490603c613a5b565b6118de9042613a17565b905060008060016015546118f29190613a17565b90505b60018110611935576000818152600960205260409020600101548311611923578161191f81613a90565b9250505b8061192d81613a44565b9150506118f5565b506000808511611946576064611948565b845b905060006119568284613b12565b905080156119645780611967565b60015b90508167ffffffffffffffff81111561198257611982613a2e565b6040519080825280602002602001820160405280156119c757816020015b60408051808201909152600080825260208201528152602001906001900390816119a05790505b50945060008060016015546119dc9190613a17565b90505b828110611a63576000818152600960205260409020600101548611611a525760008181526009602090815260409182902082518084019093528054835260010154908201528751889084908110611a3857611a38613a7a565b60200260200101819052508180611a4e90613a90565b9250505b611a5c8382613a17565b90506119df565b50505050505092915050565b6000818152600160209081526040808320600901805482518185028101850190935280835284938493929190830182828015611aca57602002820191906000526020600020905b815481526020019060010190808311611ab6575b5050505050905060005b8151811015611b1657818181518110611aef57611aef613a7a565b602002602001015183611b0291906139ff565b925080611b0e81613a90565b915050611ad4565b50909392505050565b600073ba9c6a2f87c2c28f7c64b457b9145a57b3f0c388193301611b44575047919050565b611b4c611f74565b611b5e83670de0b6b3a7640000613a5b565b611b689190613b12565b92915050565b3373ba9c6a2f87c2c28f7c64b457b9145a57b3f0c38914611b8e57600080fd5b601355565b6000818152600160205260408120600a0154611bae83611a6f565b611bba846012546114d3565b611bc491906139ff565b611b689190613a17565b611bd6613277565b600082815260016020818152604080842081516101e08101835281548152938101546001600160a01b0316848401526002810154848301526003810154606085015260048101546080850152600581015460a0850152600681015460ff1660c0850152600781018054835181860281018601909452808452919360e08601939290830182828015611c8657602002820191906000526020600020905b815481526020019060010190808311611c72575b505050505081526020016008820154815260200160098201805480602002602001604051908101604052809291908181526020018280548015611ce857602002820191906000526020600020905b815481526020019060010190808311611cd4575b50505050508152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152505090506000600360008360c0015160ff1681526020019081526020016000206001018054611d4f906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7b906139af565b8015611dc85780601f10611d9d57610100808354040283529160200191611dc8565b820191906000526020600020905b815481529060010190602001808311611dab57829003601f168201915b50505050509050600060048360c0015160ff1610611df55760405180602001604052806000815250611ea8565b600360008460c001516001611e0a9190613c42565b60ff1681526020019081526020016000206001018054611e29906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054611e55906139af565b8015611ea25780601f10611e7757610100808354040283529160200191611ea2565b820191906000526020600020905b815481529060010190602001808311611e8557829003601f168201915b50505050505b90506000600360008560c001516001611ec19190613c42565b60ff1681526020019081526020016000206002015490506000611ee2611f74565b6020808701516001600160a01b03166000908152908190526040812054919250611f0b89611a6f565b90506000611f1b8a6012546114d3565b60408051610120810182528a81526020810199909952880196909652506060860193909352608085019190915260a084015260c09384015160ff169383019390935260e082019290925261010081019190915292915050565b600080611b6861250b565b3360009081526002602052604090205480611fac5760405162461bcd60e51b815260040161114c90613aeb565b6000818152600160205260408120600e0154611fc89042613a17565b90506201518081101561201d5760405162461bcd60e51b815260206004820152601f60248201527f596f752063616e207769746864726177206f6e636520696e2061206461792100604482015260640161114c565b3360009081526020819052604090205483111561207c5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e7420746f6b656e2062616c616e6365210000000000604482015260640161114c565b600061208784611b1f565b9050804710156120d95760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e6420696e20636f6e7472616374210000604482015260640161114c565b33600090815260208190526040902054600a906064906120fa906005613a5b565b6121049190613b12565b8511801561213957503360009081526020819052604090205460649061212b906019613a5b565b6121359190613b12565b8511155b1561214657506032612179565b33600090815260208190526040902054606490612164906019613a5b565b61216e9190613b12565b851115612179575060505b600060646121878385613a5b565b6121919190613b12565b9050600061219f8285613a17565b9050600060405180608001604052808681526020018981526020016121c2611f74565b8152604080518082018252600a81526929b2b636102a37b5b2b760b11b6020828101919091529283015260008a815260088352818120600193849052918120600d0154939450849391929091612217916139ff565b81526020808201929092526040908101600020835181559183015160018301558201516002820155606082015160038201906122539082613b82565b5050506000878152600160205260408120600d0180549161227383613a90565b9091555050600087815260016020526040902042600e9091015560125461229b908890611614565b6122a53389612fce565b84601154106122cb5784601160008282546122c09190613a17565b909155506122d19050565b60016011555b604051339083156108fc029084906000818181858888f193505050501580156122fe573d6000803e3d6000fd5b5082156123485760405173ba9c6a2f87c2c28f7c64b457b9145a57b3f0c3899084156108fc029085906000818181858888f19350505050158015612346573d6000803e3d6000fd5b505b5050505050505050565b6000818152600160205260409020600d01546060908067ffffffffffffffff81111561238057612380613a2e565b6040519080825280602002602001820160405280156123dc57816020015b6123c96040518060800160405280600081526020016000815260200160008152602001606081525090565b81526020019060019003908161239e5790505b50915060015b81811161250457600860008581526020019081526020016000206000828152602001908152602001600020604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382018054612446906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054612472906139af565b80156124bf5780601f10612494576101008083540402835291602001916124bf565b820191906000526020600020905b8154815290600101906020018083116124a257829003601f168201915b505050505081525050836001836124d69190613a17565b815181106124e6576124e6613a7a565b602002602001018190525080806124fc90613a90565b9150506123e2565b5050919050565b600069152d02c7e14af6800000601154101561256957620186a060115460096125349190613a5b565b61253e9190613b12565b61255090670de0b6b3a76400006139ff565b6125649069021e19e0c9bab2400000613b12565b905090565b670de0b6b3a76400006011541015612582575060105490565b60115460105461259a90670de0b6b3a7640000613a5b565b6125649190613b12565b33346125e45760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420616d6f756e742160881b604482015260640161114c565b674563918244f4000034101561263c5760405162461bcd60e51b815260206004820152601b60248201527f4d696e696d756d20696e7665737420616d6f756e742069732035210000000000604482015260640161114c565b6001600160a01b038116600090815260026020526040902054612921576001600160a01b0382166000908152600260205260409020546126b15760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642073706f6e736f722160801b604482015260640161114c565b6001600160a01b038216600090815260026020526040812054600e549091906126db9060016139ff565b90506000604051806101e00160405280838152602001856001600160a01b03168152602001848152602001600081526020016000815260200160008152602001600160ff168152602001600067ffffffffffffffff81111561273f5761273f613a2e565b604051908082528060200260200182016040528015612768578160200160208202803683370190505b5081526000602082015260408051600a808252610160820183529190920191908160200160208202803683375050508152600060208083018290526012546040808501829052606080860192909252608080860185905260a0958601859052888552600180855294829020875181558785015195810180546001600160a01b0319166001600160a01b0390971696909617909555908601516002850155908501516003840155840151600483015591830151600582015560c083015160068201805460ff191660ff90921691909117905560e083015180519394508493919261285992600785019290910190613346565b5061010082015160088201556101208201518051612881916009840191602090910190613346565b50610140820151600a820155610160820151600b820155610180820151600c8201556101a0820151600d8201556101c090910151600e918201556001600160a01b0385166000908152600260205260408120849055815491906128e383613a90565b90915550506000838152600160208181526040832060070180548084018255908452922090910183905561291a90839034906129f0565b5050505050565b6129296117b6565b5050565b600a546000901561294857600a546129459084613b12565b90505b6040805160e0810182526012548082526020808301898152838501898152606085018981526080860188815260a087018a8152600a5460c089015260009687526007909552969094208551815591516001830155516002820155915160038301559251600482015591519091829160058201906129c59082613b82565b5060c09190910151600690910155601280549060006129e383613a90565b9190505550505050505050565b60006129fa61250b565b9050600068056bc75e2d6310000082612a1486603c613a5b565b612a1e9190613a5b565b612a289190613b12565b905083600160008781526020019081526020016000206005016000828254612a5091906139ff565b92505081905550612a6385601254611614565b604080516080810182528581526020808201849052818301859052825180840184526009815268213abc902a37b5b2b760b91b818301526060830152600088815260088252838120600192839052938120600d0154929384939092612ac891906139ff565b8152602080820192909252604090810160002083518155918301516001830155820151600282015560608201516003820190612b049082613b82565b5050506000868152600160205260408120600d01805491612b2483613a90565b91905055508460146000828254612b3b91906139ff565b90915550506000868152600160208190526040909120600201545b8015612e105760008181526001602052604081206003018054899290612b7d9084906139ff565b909155505060008181526001602052604081206004018054899290612ba39084906139ff565b9091555050600160ff83161115612be957600081815260066020908152604080832060ff8616845290915281206001018054899290612be39084906139ff565b90915550505b8515612c1d57600081815260066020908152604080832060ff861684529091528120805491612c1783613a90565b91905055505b600a8260ff1611612de35760008181526001602052604081206006015460ff808516911610612d755760ff831660009081526004602052604090205461271090612c67908a613a5b565b612c719190613b12565b90508260ff16600103612d1a5760008281526001602090815260408083206006015460ff1680845260059092529091205461271090612cb0908b613a5b565b612cba9190613b12565b91508160016000858152602001908152602001600020600901600186612ce09190613aa9565b60ff1681548110612cf357612cf3613a7a565b906000526020600020016000828254612d0c91906139ff565b90915550909350612de19050565b8060016000848152602001908152602001600020600901600185612d3e9190613aa9565b60ff1681548110612d5157612d51613a7a565b906000526020600020016000828254612d6a91906139ff565b90915550612de19050565b60016000819052602081905281907fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688793890612daf9086613aa9565b60ff1681548110612dc257612dc2613a7a565b906000526020600020016000828254612ddb91906139ff565b90915550505b505b612dec81613136565b60009081526001602052604090206002015481612e0881613acc565b925050612b56565b600a8260ff1611612ec85760ff821660009081526004602052604081205461271090612e3c908a613a5b565b612e469190613b12565b60016000819052602081905290915081907fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688793890612e839086613aa9565b60ff1681548110612e9657612e96613a7a565b906000526020600020016000828254612eaf91906139ff565b90915550839050612ebf81613acc565b93505050612e10565b612f0988886064612eda82600a613a5b565b612ee49190613b12565b6040518060400160405280600781526020016611195c1bdcda5d60ca1b81525061292d565b600e54600103612f1f57612f1f88601254611614565b60008881526001602081905260409091200154612f45906001600160a01b0316856131d9565b6064612f5288603c613a5b565b612f5c9190613b12565b60116000828254612f6d91906139ff565b9091555050600f54737be81ee18269e8cebd26fe561f681d4c09b5a6a0906108fc90606490612f9c908b613a5b565b612fa69190613b12565b6040518115909202916000818181858888f19350505050158015612346573d6000803e3d6000fd5b6001600160a01b03821661302e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161114c565b6001600160a01b038216600090815260208190526040902054818110156130a25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161114c565b81600a5410156130f45760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420616d6f756e74206f6620746f6b656e732100000000000000604482015260640161114c565b6130fe8282613a17565b6001600160a01b038416600090815260208190526040812091909155600a805484929061312c908490613a17565b9091555050505050565b600081815260016020819052604082206006015460ff16919061315a908390613c42565b60ff811660009081526003602052604090206002015490915061318590670de0b6b3a7640000613a5b565b600084815260016020526040902060040154108015906131a85750600a8260ff16105b156131d45760008381526001602052604081206004810191909155600601805460ff191660ff83161790555b505050565b6001600160a01b03821661322f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161114c565b80600a600082825461324191906139ff565b90915550506001600160a01b0382166000908152602081905260408120805483929061326e9084906139ff565b90915550505050565b604051806101200160405280613308604051806101e001604052806000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600060ff16815260200160608152602001600081526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b815260200160608152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054828255906000526020600020908101928215613381579160200282015b82811115613381578251825591602001919060010190613366565b5061338d929150613391565b5090565b5b8082111561338d5760008155600101613392565b6000602082840312156133b857600080fd5b81356001600160a01b03811681146133cf57600080fd5b9392505050565b6000815180845260005b818110156133fc576020818501810151868301820152016133e0565b8181111561340e576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006133cf60208301846133d6565b60006020828403121561344857600080fd5b5035919050565b83815260606020820152600061346860608301856133d6565b9050826040830152949350505050565b6000806040838503121561348b57600080fd5b50508035926020909101359150565b600060a080830181845280895180835260c092508286019150828160051b8701016020808d0160005b8481101561355e5760bf198a850301865281516101208151865284820151858701526040808301516134ff828901826001600160a01b03169052565b50506060828101519087015260808083015190870152898201518a87015288820151898701829052613533828801826133d6565b60e08481015190890152610100938401519390970192909252505094820194908201906001016134c3565b505087018b9052891515604088015294506135799350505050565b6060820193909352608001529392505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561362557603f19898403018552815160a08151855288820151818a8701526135e1828701826133d6565b915050878201518886015260608083015181870152506080808301519250858203818701525061361181836133d6565b9689019694505050908601906001016135b3565b509098975050505050505050565b600081518084526020808501945080840160005b8381101561366357815187529582019590820190600101613647565b509495945050505050565b606080825284519082018190526000906020906080840190828801845b828110156136bb576136a884835180518252602090810151910152565b604093909301929084019060010161368b565b505050838103828501526136cf8187613633565b91505082810360408401526136e48185613633565b9695505050505050565b60006101e082518452602083015161371160208601826001600160a01b03169052565b5060408301516040850152606083015160608501526080830151608085015260a083015160a085015260c083015161374e60c086018260ff169052565b5060e08301518160e086015261376682860182613633565b915050610100808401518186015250610120808401518583038287015261378d8382613633565b6101408681015190880152610160808701519088015261018080870151908801526101a080870151908801526101c095860151959096019490945250929392505050565b600061012082518185526137e7828601826136ee565b9150506020830151848203602086015261380182826133d6565b9150506040830151848203604086015261381b82826133d6565b915050606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152508091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156138bb57603f198886030184526138a98583516137d1565b9450928501929085019060010161388d565b5092979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156139125761390284835180518252602090810151910152565b92840192908501906001016138e5565b5091979650505050505050565b6020815260006133cf60208301846137d1565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561362557888303603f190185528151805184528781015188850152868101518785015260609081015160809185018290529061399b818601836133d6565b968901969450505090860190600101613959565b600181811c908216806139c357607f821691505b6020821081036139e357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115613a1257613a126139e9565b500190565b600082821015613a2957613a296139e9565b500390565b634e487b7160e01b600052604160045260246000fd5b600081613a5357613a536139e9565b506000190190565b6000816000190483118215151615613a7557613a756139e9565b500290565b634e487b7160e01b600052603260045260246000fd5b600060018201613aa257613aa26139e9565b5060010190565b600060ff821660ff841680821015613ac357613ac36139e9565b90039392505050565b600060ff821660ff8103613ae257613ae26139e9565b60010192915050565b6020808252600d908201526c496e76616c696420757365722160981b604082015260600190565b600082613b2f57634e487b7160e01b600052601260045260246000fd5b500490565b601f8211156131d457600081815260208120601f850160051c81016020861015613b5b5750805b601f850160051c820191505b81811015613b7a57828155600101613b67565b505050505050565b815167ffffffffffffffff811115613b9c57613b9c613a2e565b613bb081613baa84546139af565b84613b34565b602080601f831160018114613be55760008415613bcd5750858301515b600019600386901b1c1916600185901b178555613b7a565b600085815260208120601f198616915b82811015613c1457888601518255948401946001909101908401613bf5565b5085821015613c325787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060ff821660ff84168060ff03821115613c5f57613c5f6139e9565b01939250505056fea264697066735822122048558bbeff5f69b43d90376dd0b50fb88bcff1dc03b88907b85c91e886fa9a2564736f6c634300080f0033

Deployed Bytecode Sourcemap

621:25735:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4810:111;;;;;;:::i;:::-;;:::i;3637:106::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;801:36;;;;;;;;;;-1:-1:-1;801:36:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;3979:114::-;;;;;;;;;;-1:-1:-1;4073:12:0;;3979:114;;;1705:25:1;;;1693:2;1678:18;3979:114:0;1559:177:1;23125:1906:0;;;;;;;;;;-1:-1:-1;23125:1906:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;3873:98::-;;;;;;;;;;-1:-1:-1;3873:98:0;;3931:5;4457:36:1;;4445:2;4430:18;3873:98:0;4315:184:1;20276:890:0;;;;;;;;;;-1:-1:-1;20276:890:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1136:57::-;;;;;;;;;;-1:-1:-1;1136:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;6081:25:1;;;6137:2;6122:18;;6115:34;;;;6054:18;1136:57:0;5907:248:1;3472:27:0;;;;;;;;;;;;;;;;22577:540;;;;;;;;;;-1:-1:-1;22577:540:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;15484:1210::-;;;;;;;;;;-1:-1:-1;15484:1210:0;;;;;:::i;:::-;;:::i;19872:396::-;;;;;;;;;;-1:-1:-1;19872:396:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;710:36::-;;;;;;;;;;-1:-1:-1;710:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;710:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11551:25:1;;;-1:-1:-1;;;;;11612:32:1;;;11607:2;11592:18;;11585:60;11661:18;;;11654:34;;;;11719:2;11704:18;;11697:34;;;;11762:3;11747:19;;11740:35;;;;11632:3;11791:19;;11784:35;;;;11868:4;11856:17;;;11850:3;11835:19;;11828:46;11905:3;11890:19;;11883:35;11949:3;11934:19;;11927:35;11993:3;11978:19;;11971:35;12037:3;12022:19;;12015:36;12082:3;12067:19;;12060:36;12127:3;12112:19;;12105:36;11538:3;11523:19;710:36:0;11069:1078:1;21419:817:0;;;;;;;;;;-1:-1:-1;21419:817:0;;;;;:::i;:::-;;:::i;11765:133::-;;;;;;;;;;-1:-1:-1;11765:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;11872:18:0;11839:7;11872:18;;;;;;;;;;;;11765:133;5309:1097;;;;;;;;;;-1:-1:-1;5309:1097:0;;;;;:::i;:::-;;:::i;1202:72::-;;;;;;;;;;;;1232:42;1202:72;;;;;-1:-1:-1;;;;;12316:32:1;;;12298:51;;12286:2;12271:18;1202:72:0;12152:203:1;4929:372:0;;;:::i;3755:110::-;;;;;;;;;;;;;:::i;3573:16::-;;;;;;;;;;;;;;;;1281:83;;;;;;;;;;;;1322:42;1281:83;;25467:886;;;;;;;;;;-1:-1:-1;25467:886:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22244:325::-;;;;;;;;;;-1:-1:-1;22244:325:0;;;;;:::i;:::-;;:::i;12035:202::-;;;;;;;;;;-1:-1:-1;12035:202:0;;;;;:::i;:::-;;:::i;18543:143::-;;;;;;;;;;-1:-1:-1;18543:143:0;;;;;:::i;:::-;;:::i;21174:237::-;;;;;;;;;;-1:-1:-1;21174:237:0;;;;;:::i;:::-;;:::i;18694:1170::-;;;;;;;;;;-1:-1:-1;18694:1170:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12566:119::-;;;;;;;;;;;;;:::i;16702:1833::-;;;;;;;;;;-1:-1:-1;16702:1833:0;;;;;:::i;:::-;;:::i;753:41::-;;;;;;;;;;-1:-1:-1;753:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;25039:416;;;;;;;;;;-1:-1:-1;25039:416:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11906:121::-;;;;;;;;;;-1:-1:-1;11906:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;11996:21:0;11967:4;11996:21;;;:11;:21;;;;;;:23;;;11906:121;;;;14740:14:1;;14733:22;14715:41;;14703:2;14688:18;11906:121:0;14575:187:1;3598:30:0;;;;;;;;;;;;;;;;12245:313;;;;;;;;;;;;;:::i;4810:111::-;4883:30;4898:14;4883;:30::i;:::-;4810:111;:::o;3637:106::-;3691:13;3730:5;3723:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3637:106;:::o;801:36::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23125:1906::-;23260:16;23363:19;;;:9;:19;;;;;:43;;;23215;;23260:16;;;;;;;23426:2;23422:6;;23419:38;;;23449:2;23445:6;;23419:38;23469:16;23498:19;;;:9;:19;;;;;;;;:27;;;;-1:-1:-1;;;;;23498:27:0;23488:38;;;;;;;;;23547:10;23554:3;23547:6;:10;:::i;:::-;23535:22;;23611:17;;23593:16;;23586:6;:23;;;;:::i;:::-;:42;;:53;;23634:5;23586:53;;;23629:4;23586:53;23568:71;;23663:17;;23657:4;:23;;:46;;23686:17;;23657:46;;;23681:4;23657:46;23650:53;;23727:16;;23721:4;:22;;:44;;23749:16;;23721:44;;;23744:4;23721:44;23714:51;-1:-1:-1;23778:38:0;23849:11;23854:6;23714:51;23849:11;:::i;:::-;23819:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23819:42:0;;;;;;;;;;;;;;;;-1:-1:-1;23778:83:0;-1:-1:-1;23876:6:0;23897;;;;:::i;:::-;;;;23914:1009;23926:6;23920:4;:12;23914:1009;;23961:29;;;;:23;:29;;;;;:40;;;:50;;;;;:97;;-1:-1:-1;24015:29:0;;;;:23;:29;;;;;:40;;;:43;;23961:97;23958:933;;;24092:31;24126:23;:29;24150:4;24126:29;;;;;;;;;;;24092:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24092:63:0;;;-1:-1:-1;;24092:63:0;;;;;;;;;;;-1:-1:-1;24199:29:0;;;:23;:29;;;;;;:34;;;24092:63;;-1:-1:-1;;24187:46:0;;:11;:46;:::i;:::-;24174:59;;24270:38;24311:505;;;;;;;;24374:4;:19;;;24311:505;;;;24428:4;:15;;;24311:505;;;;24483:9;:26;24493:4;:15;;;24483:26;;;;;;;;;;;:34;;;;;;;;;;-1:-1:-1;;;;;24483:34:0;-1:-1:-1;;;;;24311:505:0;;;;;24550:4;:13;;;24311:505;;;;24606:4;:23;;;24311:505;;;;24658:4;:9;;;24311:505;;;;24787:4;:9;;;24311:505;;;;24703:4;:16;;;24311:505;;;;24753:5;24311:505;;;24270:546;;24846:7;24835:5;24841:1;24835:8;;;;;;;;:::i;:::-;;;;;;:18;;;;24872:3;;;;;:::i;:::-;;;;24073:818;;;23958:933;24905:6;;;;:::i;:::-;;;;23914:1009;;;-1:-1:-1;24948:19:0;;;;:9;:19;;;;;;:31;;;25006:16;;24941:5;;24948:31;;23125:1906;;-1:-1:-1;24998:6:0;;-1:-1:-1;25006:16:0;;-1:-1:-1;23125:1906:0;;-1:-1:-1;;;;23125:1906:0:o;20276:890::-;20378:17;20398:19;;;:9;:19;;;;;;:26;;;;20457:28;;;;;20528:18;;20543:2;20528:18;;;;;;;;;20334:26;;20398;;;;;20457:28;;20378:17;20528:18;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20528:18:0;;;;;;;;;;;;;;;-1:-1:-1;20498:48:0;-1:-1:-1;20570:1:0;20559:573;20575:2;20572:1;:5;20559:573;;20607:13;20623:9;:12;20633:1;20623:12;;;;;;;;;;;20607:28;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20650:29;20682:293;;;;;;;;20713:1;20682:293;;;;20742:1;:6;;;20682:293;;;;20779:1;:10;;;20682:293;;;;20836:1;:10;;;20847:7;20836:18;;;;:::i;:::-;20821:14;:33;:67;;20874:14;20821:67;;;20855:10;;;;:18;;20866:7;20855:18;:::i;:::-;20682:293;;;;20928:1;20914:12;:15;;:45;;;;;;;;;;;;;;;-1:-1:-1;;;20914:45:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20914:45:0;;;;20682:293;;20650:325;-1:-1:-1;20650:325:0;20990:9;21000:3;21002:1;21000;:3;:::i;:::-;20990:14;;;;;;;;:::i;:::-;;;;;;:28;;;;21064:1;:10;;;21075:7;21064:18;;;;:::i;:::-;21048:14;:34;;:72;;21119:1;21048:72;;;21099:10;;;;:18;;21110:7;21099:18;:::i;:::-;21083:35;;:14;:35;:::i;:::-;21033:87;;20592:540;;20578:3;;;;;:::i;:::-;;;;20559:573;;;-1:-1:-1;21149:9:0;20276:890;-1:-1:-1;;;;20276:890:0:o;22577:540::-;22779:23;;;22799:2;22779:23;;;;;;;;;22645:32;;;;;;22748:28;;22779:23;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;22779:23:0;;;;;;;;;;;;-1:-1:-1;;22846:14:0;;;22857:2;22846:14;;;;;;;;;22748:54;;-1:-1:-1;22813:30:0;;22846:14;;;;;;;;;;;-1:-1:-1;;22813:47:0;-1:-1:-1;22883:1:0;22871:159;22889:2;22886:1;:5;;;22871:159;;22933:27;;;;:17;:27;;;;;;;;:30;;;;;;;;;;;22922:41;;;;;;;;;;;;;;;;;;;;;;;;:5;;22928:3;;22961:1;22928:3;:::i;:::-;22922:10;;;;;;;;;;:::i;:::-;;;;;;;;;;;:41;;;;23000:18;;;;;;;:15;:18;;;;;;;22978:16;22995:3;22997:1;23016;22995:3;:::i;:::-;22978:21;;;;;;;;;;:::i;:::-;;;;;;;;;;:40;22893:3;;;;:::i;:::-;;;;22871:159;;;;23050:5;23057:16;23075:9;:19;23085:8;23075:19;;;;;;;;;;;:33;;23042:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22577:540;;;;;:::o;15484:1210::-;15574:10;15546:13;15562:23;;;:11;:23;;;;;;;15619:32;15562:23;15619:22;:32::i;:::-;15596:55;;15679:1;15670:8;:10;15662:36;;;;-1:-1:-1;;;15662:36:0;;;;;;;:::i;:::-;;;;;;;;;15734:6;15717:15;:23;;15709:70;;;;-1:-1:-1;;;15709:70:0;;17189:2:1;15709:70:0;;;17171:21:1;17228:2;17208:18;;;17201:30;17267:34;17247:18;;;17240:62;-1:-1:-1;;;17318:18:1;;;17311:32;17360:19;;15709:70:0;16987:398:1;15709:70:0;15792:39;15803:8;15813:17;;15792:10;:39::i;:::-;15844:14;15871:3;15861:9;:6;15868:2;15861:9;:::i;:::-;:13;;;;:::i;:::-;15844:30;-1:-1:-1;15885:19:0;15907:16;15844:30;15907:6;:16;:::i;:::-;15885:38;;15983:6;15944:9;:19;15954:8;15944:19;;;;;;;;;;;:37;;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;16025:141:0;;;;;;;;;;;16002:20;16025:141;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16025:141:0;;;;;;;;16179:30;;;:20;:30;;;;;16210:9;:19;;;;;;;:36;;;16025:141;;;;16179:30;;16002:20;16210:38;;:36;:38;:::i;:::-;16179:70;;;;;;;;;;;;;;-1:-1:-1;16179:70:0;:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;16266:19:0;;;;:9;:19;;;;;:36;;:38;;;;;;:::i;:::-;;;;-1:-1:-1;16317:8:0;;-1:-1:-1;16338:3:0;16328:9;:6;16335:2;16328:9;:::i;:::-;:13;;;;:::i;:::-;16317:24;;16352:50;16366:8;16376:6;16384:3;16352:50;;;;;;;;;;;;;-1:-1:-1;;;16352:50:0;;;:13;:50::i;:::-;16415:44;;16423:10;;16415:44;;;;;16444:14;;16415:44;;;;16444:14;16423:10;16415:44;;;;;;;;;;;;;;;;;;;;;16480:24;16507:98;;;;;;;;16543:10;:8;:10::i;:::-;16507:98;;16578:15;16507:98;;;;;16636:16;;;-1:-1:-1;16616:37:0;;;:19;:37;;;;;:41;;;;;;;;;;;;;;;;16668:18;;16480:125;;-1:-1:-1;16636:16:0;16668:18;;;:::i;:::-;;;;;;15535:1159;;;;;;;15484:1210;:::o;19872:396::-;19971:23;19997:19;;;:9;:19;;;;;;;;:29;;19971:55;;;;;;;;;;;;;;;;;19928:25;;19971:23;:55;;19997:29;19971:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20037:30;20083:9;:16;20068:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;20037:63;;20117:6;20113:118;20129:9;:16;20127:1;:18;20113:118;;;20194:25;20206:9;20216:1;20206:12;;;;;;;;:::i;:::-;;;;;;;20194:11;:25::i;:::-;20176:12;20189:1;20176:15;;;;;;;;:::i;:::-;;;;;;:43;;;;20147:3;;;;;:::i;:::-;;;;20113:118;;;-1:-1:-1;20248:12:0;19872:396;-1:-1:-1;;;19872:396:0:o;21419:817::-;21500:4;21537:19;;;:9;:19;;;;;:31;;;;21604:43;;;;;21675:17;;21668:24;;;:48;;21699:17;;21668:48;;;21693:5;21668:48;21660:56;;21760:16;;21752:7;:24;;;;:::i;:::-;21745:5;:31;;21737:104;;;;-1:-1:-1;;;21737:104:0;;20018:2:1;21737:104:0;;;20000:21:1;20057:2;20037:18;;;20030:30;20096:34;20076:18;;;20069:62;20167:30;20147:18;;;20140:58;20215:19;;21737:104:0;19816:424:1;21737:104:0;21854:16;21883:19;;;:9;:19;;;;;;;;:27;;;;-1:-1:-1;;;;;21883:27:0;21873:38;;;;;;;;21922:282;21936:5;21928:7;:13;21922:282;;;21971:32;;;;:23;:32;;;;;:43;;;:53;;21967:202;;22058:10;22083:32;;;:23;:32;;;;;:37;;;22071:49;;:11;:49;:::i;:::-;22058:62;-1:-1:-1;22139:14:0;22058:62;22139:14;;:::i;:::-;;;22039:130;21967:202;22183:9;;;;:::i;:::-;;;;21922:282;;;-1:-1:-1;22221:7:0;;21419:817;-1:-1:-1;;;;21419:817:0:o;5309:1097::-;5379:12;5394:19;;;:9;:19;;;;;:43;;;5465:17;;5458:24;;;:48;;5489:17;;5458:48;;;5483:5;5458:48;5450:56;-1:-1:-1;5542:11:0;:7;5550:3;5542:11;:::i;:::-;5535:5;:18;;:36;;5560:11;:7;5568:3;5560:11;:::i;:::-;5535:36;;;5554:5;5535:36;5584:16;5613:19;;;:9;:19;;;;;;;;:27;;;;-1:-1:-1;;;;;5613:27:0;5603:38;;;;;;;;5527:44;;-1:-1:-1;5652:460:0;5666:5;5658:7;:13;5652:460;;;5701:9;;5714:1;5701:14;5697:139;;5769:32;;;;:23;:32;;;;;;;;:51;;;5736:19;;;:9;:19;;;;;:31;;:84;;5769:51;;5736:31;;:84;;5769:51;;5736:84;:::i;:::-;;;;-1:-1:-1;;5697:139:0;5854:32;;;;:23;:32;;;;;:43;;;:53;;5850:227;;5942:10;5967:32;;;:23;:32;;;;;:37;;;5955:49;;:11;:49;:::i;:::-;5942:62;;6056:5;6023:9;:19;6033:8;6023:19;;;;;;;;;;;:31;;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;;5850:227:0;6091:9;;;;:::i;:::-;;;;5652:460;;;6122:19;;;;:9;:19;;;;;;:43;;:49;;;6219:98;;;;;;;;;6255:10;:8;:10::i;:::-;6219:98;;6290:15;6219:98;;;;;6348:16;;;-1:-1:-1;6328:37:0;;;:19;:37;;;;;:41;;;;;;;;;;;;;;;;6380:18;;6192:125;;-1:-1:-1;6348:16:0;6380:18;;;:::i;:::-;;;;;;5368:1038;;;5309:1097;;:::o;4929:372::-;5010:10;11967:4;11996:21;;;:11;:21;;;;;;5031:55;;;;-1:-1:-1;;;5031:55:0;;;;;;;:::i;:::-;5115:1;5105:9;:11;5097:39;;;;-1:-1:-1;;;5097:39:0;;20447:2:1;5097:39:0;;;20429:21:1;20486:2;20466:18;;;20459:30;-1:-1:-1;;;20505:18:1;;;20498:45;20560:18;;5097:39:0;20245:339:1;5097:39:0;5167:11;5155:9;:24;;5147:64;;;;-1:-1:-1;;;5147:64:0;;20791:2:1;5147:64:0;;;20773:21:1;20830:2;20810:18;;;20803:30;20869:29;20849:18;;;20842:57;20916:18;;5147:64:0;20589:351:1;5147:64:0;-1:-1:-1;;;;;5247:27:0;;;;;;:11;:27;;;;;;5224:69;;5276:9;;5224:22;:69::i;3755:110::-;3811:13;3850:7;3843:14;;;;;:::i;25467:886::-;25535:32;25585:19;25625:8;:5;25631:2;25625:8;:::i;:::-;:11;;25634:2;25625:11;:::i;:::-;:14;;25637:2;25625:14;:::i;:::-;25607:32;;:15;:32;:::i;:::-;25585:54;;25652:8;25679:6;25703:1;25686:16;;:18;;;;:::i;:::-;25679:25;;25675:183;25709:1;25706;:4;25675:183;;25744:22;;;;:19;:22;;;;;:32;;;:48;-1:-1:-1;25741:106:0;;25826:5;;;;:::i;:::-;;;;25741:106;25712:3;;;;:::i;:::-;;;;25675:183;;;;25870:8;25887:1;25882:4;:6;:15;;25894:3;25882:15;;;25889:4;25882:15;25870:28;-1:-1:-1;25909:9:0;25921:7;25870:28;25921:3;:7;:::i;:::-;25909:19;-1:-1:-1;25956:7:0;;:14;;25966:4;25956:14;;;25964:1;25956:14;25949:21;;26021:3;25999:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;25999:26:0;;;;;;;;;;;;;;;;25991:34;;26038:8;26065:6;26089:1;26072:16;;:18;;;;:::i;:::-;26065:25;;26061:258;26095:4;26092:1;:7;26061:258;;26137:22;;;;:19;:22;;;;;:32;;;:48;-1:-1:-1;26134:160:0;;26232:22;;;;:19;:22;;;;;;;;;26219:35;;;;;;;;;;;;;;;;;;;:12;;:7;;26227:3;;26219:12;;;;;;:::i;:::-;;;;;;:35;;;;26273:5;;;;;:::i;:::-;;;;26134:160;26101:7;26104:4;26101:7;;:::i;:::-;;;26061:258;;;;26331:14;;;;;25467:886;;;;:::o;22244:325::-;22317:4;22393:19;;;:9;:19;;;;;;;;:33;;22364:62;;;;;;;;;;;;;;;;;22317:4;;;;22364:62;22393:33;22364:62;;;22393:33;22364:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22441:6;22437:100;22452:12;:19;22450:1;:21;22437:100;;;22510:12;22523:1;22510:15;;;;;;;;:::i;:::-;;;;;;;22501:24;;;;;:::i;:::-;;-1:-1:-1;22472:3:0;;;;:::i;:::-;;;;22437:100;;;-1:-1:-1;22554:7:0;;22244:325;-1:-1:-1;;;22244:325:0:o;12035:202::-;12097:4;-1:-1:-1;;12122:10:0;:19;12119:110;;-1:-1:-1;12150:21:0;;12035:202;-1:-1:-1;12035:202:0:o;12119:110::-;12216:13;:11;:13::i;:::-;12194:21;:11;12207:7;12194:21;:::i;:::-;:35;;;;:::i;:::-;12187:42;12035:202;-1:-1:-1;;12035:202:0:o;18543:143::-;18622:10;1232:42;18622:17;18614:26;;;;;;18651:16;:27;18543:143::o;21174:237::-;21242:4;21366:19;;;:9;:19;;;;;:37;;;21326;21376:8;21326:27;:37::i;:::-;21271:52;21295:8;21305:17;;21271:23;:52::i;:::-;:92;;;;:::i;:::-;:132;;;;:::i;18694:1170::-;18750:24;;:::i;:::-;18792:21;18816:19;;;:9;:19;;;;;;;;18792:43;;;;;;;;;;;;;;;-1:-1:-1;;;;;18792:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18816:19;;18792:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18846:30;18879:9;:27;18889:9;:16;;;18879:27;;;;;;;;;;;;;:32;;18846:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18922:27;18969:1;18952:9;:16;;;:18;;;:56;;;;;;;;;;;;;;;;;18971:9;:29;18981:9;:16;;;18998:1;18981:18;;;;:::i;:::-;18971:29;;;;;;;;;;;;;:34;;18952:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18922:86;;19019:33;19055:9;:29;19065:9;:16;;;19082:1;19065:18;;;;:::i;:::-;19055:29;;;;;;;;;;;;;:38;;;19019:74;;19104:14;19121:13;:11;:13::i;:::-;19176:17;;;;;-1:-1:-1;;;;;19166:28:0;19145:18;19166:28;;;;;;;;;;;19104:30;;-1:-1:-1;19232:37:0;19260:8;19232:27;:37::i;:::-;19205:64;;19280:22;19305:52;19329:8;19339:17;;19305:23;:52::i;:::-;19390:443;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19390:443:0;;;;;;;;;;;;;;;;;;;19701:16;;;;19390:443;;;;;;;;;;;;;;;;;;;;;;;;18694:1170;-1:-1:-1;;18694:1170:0:o;12566:119::-;12609:4;12631:10;12644;:8;:10::i;16702:1833::-;16796:10;16768:13;16784:23;;;:11;:23;;;;;;16826:10;16818:36;;;;-1:-1:-1;;;16818:36:0;;;;;;;:::i;:::-;16865:13;16899:19;;;:9;:19;;;;;:32;;;16881:50;;:15;:50;:::i;:::-;16865:66;;16962:8;16950;:20;;16942:64;;;;-1:-1:-1;;;16942:64:0;;21356:2:1;16942:64:0;;;21338:21:1;21395:2;21375:18;;;21368:30;21434:33;21414:18;;;21407:61;21485:18;;16942:64:0;21154:355:1;16942:64:0;17035:10;17025:9;:21;;;;;;;;;;;:34;-1:-1:-1;17025:34:0;17017:74;;;;-1:-1:-1;;;17017:74:0;;21716:2:1;17017:74:0;;;21698:21:1;21755:2;21735:18;;;21728:30;21794:29;21774:18;;;21767:57;21841:18;;17017:74:0;21514:351:1;17017:74:0;17104:16;17123:26;17137:11;17123:13;:26::i;:::-;17104:45;;17193:11;17170:21;:34;;17162:77;;;;-1:-1:-1;;;17162:77:0;;22072:2:1;17162:77:0;;;22054:21:1;22111:2;22091:18;;;22084:30;22150:32;22130:18;;;22123:60;22200:18;;17162:77:0;21870:354:1;17162:77:0;17323:10;17252:24;17313:21;;;;;;;;;;;17279:2;;17338:3;;17313:23;;17335:1;17313:23;:::i;:::-;17312:29;;;;:::i;:::-;17297:11;:45;:96;;;;-1:-1:-1;17373:10:0;17363:9;:21;;;;;;;;;;;17389:3;;17363:24;;17385:2;17363:24;:::i;:::-;17362:30;;;;:::i;:::-;17346:11;:47;;17297:96;17294:287;;;-1:-1:-1;17441:2:0;17294:287;;;17499:10;17489:9;:21;;;;;;;;;;;17515:3;;17489:24;;17511:2;17489:24;:::i;:::-;17488:30;;;;:::i;:::-;17473:11;:46;17470:111;;;-1:-1:-1;17567:2:0;17470:111;17593:14;17644:3;17611:31;17623:19;17611:11;:31;:::i;:::-;17610:37;;;;:::i;:::-;17593:54;-1:-1:-1;17658:19:0;17680:21;17593:54;17680:11;:21;:::i;:::-;17658:43;;17722:20;17745:160;;;;;;;;17779:11;17745:160;;;;17817:11;17745:160;;;;17848:13;:11;:13::i;:::-;17745:160;;;;;;;;;;;;;-1:-1:-1;;;17745:160:0;;;;;;;;;;;;-1:-1:-1;17918:30:0;;;:20;:30;;;;;17949:9;:19;;;;;;;:36;;;17722:183;;-1:-1:-1;17722:183:0;;17918:30;;-1:-1:-1;;17949:38:0;;;:::i;:::-;17918:70;;;;;;;;;;;;;;-1:-1:-1;17918:70:0;:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;18005:19:0;;;;:9;:19;;;;;:36;;:38;;;;;;:::i;:::-;;;;-1:-1:-1;;18056:19:0;;;;:9;:19;;;;;18091:15;18056:32;;;;:50;18140:17;;18119:39;;18066:8;;18119:10;:39::i;:::-;18171:30;18177:10;18189:11;18171:5;:30::i;:::-;18232:11;18217:13;;:26;18214:159;;18284:11;18269:13;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;18214:159:0;;-1:-1:-1;18214:159:0;;18360:1;18346:13;:15;18214:159;18385:44;;18393:10;;18385:44;;;;;18414:14;;18385:44;;;;18414:14;18393:10;18385:44;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18445:11:0;;18442:86;;18482:34;;1232:42;;18482:34;;;;;18506:9;;18482:34;;;;18506:9;1232:42;18482:34;;;;;;;;;;;;;;;;;;;;;18442:86;16757:1778;;;;;;;16702:1833;:::o;25039:416::-;25155:21;25179:19;;;:9;:19;;;;;:36;;;25104:33;;25179:36;25241:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25241:35:0;;;;;;;;;;;;;;;;-1:-1:-1;25228:48:0;-1:-1:-1;25300:1:0;25289:127;25306:16;25303:1;:19;25289:127;;25371:20;:30;25392:8;25371:30;;;;;;;;;;;:33;25402:1;25371:33;;;;;;;;;;;25353:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;25368:1;25366;:3;;;;:::i;:::-;25353:17;;;;;;;;:::i;:::-;;;;;;:51;;;;25324:3;;;;;:::i;:::-;;;;25289:127;;;;25428:19;25039:416;;;:::o;12245:313::-;12285:4;12327:16;12311:13;;:32;12307:244;;;12411:6;12397:13;;12395:1;:15;;;;:::i;:::-;:22;;;;:::i;:::-;12384:34;;12385:7;12384:34;:::i;:::-;12367:52;;:15;:52;:::i;:::-;12360:59;;12245:313;:::o;12307:244::-;12473:7;12457:13;;:24;;:82;;-1:-1:-1;12523:16:0;;;12245:313::o;12457:82::-;12509:13;;12482:16;;:26;;12500:7;12482:26;:::i;:::-;:40;;;;:::i;6414:1399::-;6513:10;6544:9;6536:39;;;;-1:-1:-1;;;6536:39:0;;20447:2:1;6536:39:0;;;20429:21:1;20486:2;20466:18;;;20459:30;-1:-1:-1;;;20505:18:1;;;20498:45;20560:18;;6536:39:0;20245:339:1;6536:39:0;6606:11;6594:9;:24;;6586:64;;;;-1:-1:-1;;;6586:64:0;;20791:2:1;6586:64:0;;;20773:21:1;20830:2;20810:18;;;20803:30;20869:29;20849:18;;;20842:57;20916:18;;6586:64:0;20589:351:1;6586:64:0;-1:-1:-1;;;;;11996:21:0;;11967:4;11996:21;;;:11;:21;;;;;;6663:1143;;-1:-1:-1;;;;;11996:21:0;;11967:4;11996:21;;;:11;:21;;;;;;6726:59;;;;-1:-1:-1;;;6726:59:0;;22431:2:1;6726:59:0;;;22413:21:1;22470:2;22450:18;;;22443:30;-1:-1:-1;;;22489:18:1;;;22482:46;22545:18;;6726:59:0;22229:340:1;6726:59:0;-1:-1:-1;;;;;6819:28:0;;6802:14;6819:28;;;:11;:28;;;;;;6870:9;;6819:28;;6802:14;6870:11;;6880:1;6870:11;:::i;:::-;6862:19;;6898:13;6914:601;;;;;;;;6941:2;6914:601;;;;6970:14;-1:-1:-1;;;;;6914:601:0;;;;;7013:9;6914:601;;;;7050:1;6914:601;;;;7087:1;6914:601;;;;7118:1;6914:601;;;;7145:1;6914:601;;;;;;7186:1;7175:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7175:13:0;-1:-1:-1;6914:601:0;;7219:1;6914:601;;;;;7253:14;;7264:2;7253:14;;;;;;;;6914:601;;;;;7253:14;;;;;;;;;;;-1:-1:-1;;;6914:601:0;;7304:1;6914:601;;;;;;;7348:17;;6914:601;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7532:13;;;:9;:13;;;;;;;:15;;;;;;;;;;;;;-1:-1:-1;;;;;;7532:15:0;-1:-1:-1;;;;;7532:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7532:15:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;7532:15:0;;:13;;:15;;;;;;;;;;;:::i;:::-;-1:-1:-1;7532:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7532:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7562:27:0;;-1:-1:-1;7562:27:0;;;:11;:27;;;;;:32;;;7611:11;;;7532:15;7611:11;;;:::i;:::-;;;;-1:-1:-1;;7639:20:0;;;;:9;:20;;;;;;;:30;;:39;;;;;;;;;;;;;;;;;;7695:43;;7675:2;;7722:9;;7695:22;:43::i;:::-;6697:1053;;;6477:1336;6414:1399;:::o;6663:1143::-;7779:15;:13;:15::i;:::-;6477:1336;6414:1399;:::o;11112:645::-;11252:12;;11224:10;;11252:14;11249:80;;11305:12;;11300:17;;:4;:17;:::i;:::-;11292:25;;11249:80;11374:282;;;;;;;;11425:17;;11374:282;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11606:12;;11374:282;;;;11339:32;11669:42;;;:23;:42;;;;;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11374:282;;;;11669:50;;;;;;;;:::i;:::-;-1:-1:-1;11669:50:0;;;;;;;;;;;11730:17;:19;;;:17;:19;;;:::i;:::-;;;;;;11213:544;;11112:645;;;;:::o;7821:2685::-;7931:10;7944;:8;:10::i;:::-;7931:23;-1:-1:-1;7965:11:0;7998;7931:23;7980:9;:6;7987:2;7980:9;:::i;:::-;:15;;;;:::i;:::-;7979:31;;;;:::i;:::-;7965:45;;8055:6;8023:9;:19;8033:8;8023:19;;;;;;;;;;;:30;;;:38;;;;;;;:::i;:::-;;;;;;;;8074:39;8085:8;8095:17;;8074:10;:39::i;:::-;8149:141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8149:141:0;;;;;;;;8126:20;8303:30;;;:20;:30;;;;;8334:9;:19;;;;;;;:36;;;8149:141;;;;8303:30;;8334:38;;:36;:38;:::i;:::-;8303:70;;;;;;;;;;;;;;-1:-1:-1;8303:70:0;:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;8390:19:0;;;;:9;:19;;;;;:36;;:38;;;;;;:::i;:::-;;;;;;8445:6;8441:2;;:10;;;;;;;:::i;:::-;;;;-1:-1:-1;;8464:11:0;8501:19;;;8476:1;8501:19;;;;;;;;:29;;;8541:1396;8547:7;;8541:1396;;8580:16;;;;:9;:16;;;;;:25;;:33;;8607:6;;8580:16;:33;;8607:6;;8580:33;:::i;:::-;;;;-1:-1:-1;;8642:16:0;;;;:9;:16;;;;;:33;;:41;;8677:6;;8642:16;:41;;8677:6;;8642:41;:::i;:::-;;;;-1:-1:-1;;8706:1:0;8700:7;;;;8697:75;;;8722:24;;;;:17;:24;;;;;;;;:31;;;;;;;;;;:42;;:50;;8766:6;;8722:24;:50;;8766:6;;8722:50;:::i;:::-;;;;-1:-1:-1;;8697:75:0;8790:18;8787:116;;;8842:24;;;;:17;:24;;;;;;;;:31;;;;;;;;;;:45;;;;;;:::i;:::-;;;;;;8787:116;8927:2;8920:5;:9;;;8917:894;;8973:17;9013:16;;;:9;:16;;;;;:23;;;:30;;;;:23;;:30;9010:785;;9107:22;;;;;;;:15;:22;;;;;;9132:7;;9100:29;;:6;:29;:::i;:::-;9099:41;;;;:::i;:::-;9084:56;;9166:5;:8;;9173:1;9166:8;9163:467;;9224:17;9242:16;;;:9;:16;;;;;;;;:23;;;;;9315:26;;;:13;:26;;;;;;;9344:7;;9308:33;;:6;:33;:::i;:::-;9307:45;;;;:::i;:::-;9292:60;;9420:12;9379:9;:16;9389:5;9379:16;;;;;;;;;;;:30;;9416:1;9410:5;:7;;;;:::i;:::-;9379:39;;;;;;;;;;:::i;:::-;;;;;;;;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;9465:11:0;;-1:-1:-1;9010:785:0;;-1:-1:-1;9010:785:0;9163:467;9594:12;9553:9;:16;9563:5;9553:16;;;;;;;;;;;:30;;9590:1;9584:5;:7;;;;:::i;:::-;9553:39;;;;;;;;;;:::i;:::-;;;;;;;;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;9010:785:0;;-1:-1:-1;9010:785:0;;9726:9;:12;;;;;;;;9763;;9726:26;;9753:7;;:5;:7;:::i;:::-;9726:35;;;;;;;;;;:::i;:::-;;;;;;;;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;9010:785:0;8944:867;8917:894;9836:17;9847:5;9836:10;:17::i;:::-;9877:16;;;;:9;:16;;;;;:26;;;9918:7;;;;:::i;:::-;;;;8541:1396;;;9962:2;9955:5;:9;;;9949:200;;10018:22;;;9990:17;10018:22;;;:15;:22;;;;;;10043:7;;10011:29;;:6;:29;:::i;:::-;10010:41;;;;:::i;:::-;10066:9;:12;;;;;;;;9990:61;;-1:-1:-1;9990:61:0;;10066:26;;10093:7;;:5;:7;:::i;:::-;10066:35;;;;;;;;;;:::i;:::-;;;;;;;;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;10130:7:0;;-1:-1:-1;10130:7:0;;;:::i;:::-;;;;9975:174;9949:200;;;10159:57;10173:8;10183:6;10201:3;10191:9;10183:6;10198:2;10191:9;:::i;:::-;:13;;;;:::i;:::-;10159:57;;;;;;;;;;;;;-1:-1:-1;;;10159:57:0;;;:13;:57::i;:::-;10230:9;;10243:1;10230:14;10227:84;;10260:39;10271:8;10281:17;;10260:10;:39::i;:::-;10329:19;;;;:9;:19;;;;;;;;:27;;10323:42;;-1:-1:-1;;;;;10329:27:0;10358:6;10323:5;:42::i;:::-;10404:3;10394:9;:6;10401:2;10394:9;:::i;:::-;:13;;;;:::i;:::-;10378;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;10471:22:0;;1322:42;;10429:69;;10494:3;;10464:29;;:6;:29;:::i;:::-;:33;;;;:::i;:::-;10429:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4338:464;-1:-1:-1;;;;;4428:21:0;;4420:67;;;;-1:-1:-1;;;4420:67:0;;22776:2:1;4420:67:0;;;22758:21:1;22815:2;22795:18;;;22788:30;22854:34;22834:18;;;22827:62;-1:-1:-1;;;22905:18:1;;;22898:31;22946:19;;4420:67:0;22574:397:1;4420:67:0;-1:-1:-1;;;;;4525:18:0;;4500:22;4525:18;;;;;;;;;;;4562:24;;;;4554:71;;;;-1:-1:-1;;;4554:71:0;;23178:2:1;4554:71:0;;;23160:21:1;23217:2;23197:18;;;23190:30;23256:34;23236:18;;;23229:62;-1:-1:-1;;;23307:18:1;;;23300:32;23349:19;;4554:71:0;22976:398:1;4554:71:0;4658:6;4644:12;;:20;;4636:58;;;;-1:-1:-1;;;4636:58:0;;23581:2:1;4636:58:0;;;23563:21:1;23620:2;23600:18;;;23593:30;23659:27;23639:18;;;23632:55;23704:18;;4636:58:0;23379:349:1;4636:58:0;4728:23;4745:6;4728:14;:23;:::i;:::-;-1:-1:-1;;;;;4707:18:0;;:9;:18;;;;;;;;;;:44;;;;4772:12;:22;;4788:6;;4707:9;4772:22;;4788:6;;4772:22;:::i;:::-;;;;-1:-1:-1;;;;;4338:464:0:o;10515:471::-;10576:17;10596:20;;;:9;:20;;;;;;;:27;;;;;;10576:17;10651:13;;10596:27;;10651:13;:::i;:::-;10719:19;;;;;;;:9;:19;;;;;:28;;;10634:30;;-1:-1:-1;10719:38:0;;10749:7;10719:38;:::i;:::-;10680:20;;;;:9;:20;;;;;:37;;;:77;;;;:153;;;10831:2;10819:11;:14;;;10680:153;10677:302;;;10905:1;10867:20;;;:9;:20;;;;;:37;;;:39;;;;10925:27;;:38;;-1:-1:-1;;10925:38:0;;;;;;;10677:302;10565:421;;10515:471;:::o;4101:229::-;-1:-1:-1;;;;;4191:21:0;;4183:65;;;;-1:-1:-1;;;4183:65:0;;23935:2:1;4183:65:0;;;23917:21:1;23974:2;23954:18;;;23947:30;24013:33;23993:18;;;23986:61;24064:18;;4183:65:0;23733:355:1;4183:65:0;4277:6;4261:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;4294:18:0;;:9;:18;;;;;;;;;;:28;;4316:6;;4294:9;:28;;4316:6;;4294:28;:::i;:::-;;;;-1:-1:-1;;;;4101:229:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:286:1;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;168:23;;-1:-1:-1;;;;;220:31:1;;210:42;;200:70;;266:1;263;256:12;200:70;289:5;14:286;-1:-1:-1;;;14:286:1:o;305:472::-;347:3;385:5;379:12;412:6;407:3;400:19;437:1;447:162;461:6;458:1;455:13;447:162;;;523:4;579:13;;;575:22;;569:29;551:11;;;547:20;;540:59;476:12;447:162;;;627:6;624:1;621:13;618:87;;;693:1;686:4;677:6;672:3;668:16;664:27;657:38;618:87;-1:-1:-1;759:2:1;738:15;-1:-1:-1;;734:29:1;725:39;;;;766:4;721:50;;305:472;-1:-1:-1;;305:472:1:o;782:220::-;931:2;920:9;913:21;894:4;951:45;992:2;981:9;977:18;969:6;951:45;:::i;1007:180::-;1066:6;1119:2;1107:9;1098:7;1094:23;1090:32;1087:52;;;1135:1;1132;1125:12;1087:52;-1:-1:-1;1158:23:1;;1007:180;-1:-1:-1;1007:180:1:o;1192:362::-;1397:6;1386:9;1379:25;1440:2;1435;1424:9;1420:18;1413:30;1360:4;1460:45;1501:2;1490:9;1486:18;1478:6;1460:45;:::i;:::-;1452:53;;1541:6;1536:2;1525:9;1521:18;1514:34;1192:362;;;;;;:::o;1741:248::-;1809:6;1817;1870:2;1858:9;1849:7;1845:23;1841:32;1838:52;;;1886:1;1883;1876:12;1838:52;-1:-1:-1;;1909:23:1;;;1979:2;1964:18;;;1951:32;;-1:-1:-1;1741:248:1:o;2199:2031::-;2527:4;2556:3;2597:2;2586:9;2582:18;2627:2;2616:9;2609:21;2650:6;2685;2679:13;2716:6;2708;2701:22;2742:3;2732:13;;2776:2;2765:9;2761:18;2754:25;;2838:2;2828:6;2825:1;2821:14;2810:9;2806:30;2802:39;2860:4;2899:2;2891:6;2887:15;2920:1;2930:1084;2944:6;2941:1;2938:13;2930:1084;;;3037:3;3033:8;3021:9;3013:6;3009:22;3005:37;3000:3;2993:50;3072:6;3066:13;3102:6;3142:2;3136:9;3128:6;3121:25;3197:2;3193;3189:11;3183:18;3178:2;3170:6;3166:15;3159:43;3225:4;3276:2;3272;3268:11;3262:18;3293:49;3338:2;3330:6;3326:15;3312:12;-1:-1:-1;;;;;2060:31:1;2048:44;;1994:104;3293:49;-1:-1:-1;;3365:4:1;3412:11;;;3406:18;3389:15;;;3382:43;3448:4;3495:11;;;3489:18;3472:15;;;3465:43;3551:11;;;3545:18;3528:15;;;3521:43;3605:11;;;3599:18;3637:15;;;3630:27;;;3684:50;3718:15;;;3599:18;3684:50;:::i;:::-;3757:4;3804:11;;;3798:18;3781:15;;;3774:43;3841:6;3891:12;;;3885:19;3867:16;;;;3860:45;;;;-1:-1:-1;;3992:12:1;;;;3957:15;;;;2966:1;2959:9;2930:1084;;;-1:-1:-1;;4053:18:1;;4046:34;;;2173:13;;2166:21;4128:4;4113:20;;2154:34;4031:6;-1:-1:-1;4089:45:1;;-1:-1:-1;;;;2103:91:1;4089:45;4165:4;4150:20;;4143:36;;;;4210:4;4195:20;4188:36;2199:2031;;-1:-1:-1;;;2199:2031:1:o;4504:1398::-;4696:4;4725:2;4765;4754:9;4750:18;4795:2;4784:9;4777:21;4818:6;4853;4847:13;4884:6;4876;4869:22;4910:2;4900:12;;4943:2;4932:9;4928:18;4921:25;;5005:2;4995:6;4992:1;4988:14;4977:9;4973:30;4969:39;5043:2;5035:6;5031:15;5064:1;5074:799;5088:6;5085:1;5082:13;5074:799;;;5181:2;5177:7;5165:9;5157:6;5153:22;5149:36;5144:3;5137:49;5215:6;5209:13;5245:4;5283:2;5277:9;5269:6;5262:25;5334:2;5330;5326:11;5320:18;5375:2;5370;5362:6;5358:15;5351:27;5405:48;5449:2;5441:6;5437:15;5423:12;5405:48;:::i;:::-;5391:62;;;5504:2;5500;5496:11;5490:18;5485:2;5477:6;5473:15;5466:43;5532:4;5587:2;5583;5579:11;5573:18;5568:2;5560:6;5556:15;5549:43;;5615:4;5668:2;5664;5660:11;5654:18;5632:40;;5721:6;5713;5709:19;5704:2;5696:6;5692:15;5685:44;;5752:41;5786:6;5770:14;5752:41;:::i;:::-;5851:12;;;;5742:51;-1:-1:-1;;;5816:15:1;;;;5110:1;5103:9;5074:799;;;-1:-1:-1;5890:6:1;;4504:1398;-1:-1:-1;;;;;;;;4504:1398:1:o;6319:435::-;6372:3;6410:5;6404:12;6437:6;6432:3;6425:19;6463:4;6492:2;6487:3;6483:12;6476:19;;6529:2;6522:5;6518:14;6550:1;6560:169;6574:6;6571:1;6568:13;6560:169;;;6635:13;;6623:26;;6669:12;;;;6704:15;;;;6596:1;6589:9;6560:169;;;-1:-1:-1;6745:3:1;;6319:435;-1:-1:-1;;;;;6319:435:1:o;6759:1100::-;7165:2;7177:21;;;7247:13;;7150:18;;;7269:22;;;7117:4;;7345;;7322:3;7307:19;;;7372:15;;;7117:4;7415:196;7429:6;7426:1;7423:13;7415:196;;;7478:51;7525:3;7516:6;7510:13;6239:12;;6227:25;;6301:4;6290:16;;;6284:23;6268:14;;6261:47;6160:154;7478:51;7558:4;7549:14;;;;;7586:15;;;;7451:1;7444:9;7415:196;;;7419:3;;;7656:9;7651:3;7647:19;7642:2;7631:9;7627:18;7620:47;7690:41;7727:3;7719:6;7690:41;:::i;:::-;7676:55;;;7781:9;7773:6;7769:22;7762:4;7751:9;7747:20;7740:52;7809:44;7846:6;7838;7809:44;:::i;:::-;7801:52;6759:1100;-1:-1:-1;;;;;;6759:1100:1:o;7864:1412::-;7911:3;7939:6;7972:5;7966:12;7961:3;7954:25;8025:4;8018:5;8014:16;8008:23;8040:48;8082:4;8077:3;8073:14;8059:12;-1:-1:-1;;;;;2060:31:1;2048:44;;1994:104;8040:48;;8137:4;8130:5;8126:16;8120:23;8113:4;8108:3;8104:14;8097:47;8193:4;8186:5;8182:16;8176:23;8169:4;8164:3;8160:14;8153:47;8249:4;8242:5;8238:16;8232:23;8225:4;8220:3;8216:14;8209:47;8305:4;8298:5;8294:16;8288:23;8281:4;8276:3;8272:14;8265:47;8360:4;8353:5;8349:16;8343:23;8375:48;8417:4;8412:3;8408:14;8392;4302:4;4291:16;4279:29;;4235:75;8375:48;;8471:4;8464:5;8460:16;8454:23;8509:2;8502:4;8497:3;8493:14;8486:26;8533:58;8587:2;8582:3;8578:12;8562:14;8533:58;:::i;:::-;8521:70;;;8610:6;8663:2;8656:5;8652:14;8646:21;8641:2;8636:3;8632:12;8625:43;;8687:6;8741:2;8734:5;8730:14;8724:21;8785:3;8779:4;8775:14;8770:2;8765:3;8761:12;8754:36;8813:50;8858:4;8842:14;8813:50;:::i;:::-;8882:6;8924:14;;;8918:21;8904:12;;;8897:43;8959:6;9001:14;;;8995:21;8981:12;;;8974:43;9036:6;9078:14;;;9072:21;9058:12;;;9051:43;9113:6;9155:14;;;9149:21;9135:12;;;9128:43;9190:6;9232:14;;;9226:21;9212:12;;;;9205:43;;;;-1:-1:-1;8799:64:1;;7864:1412;-1:-1:-1;;;7864:1412:1:o;9281:936::-;9332:3;9360:6;9401:5;9395:12;9428:2;9423:3;9416:15;9452:50;9498:2;9493:3;9489:12;9475;9452:50;:::i;:::-;9440:62;;;9550:4;9543:5;9539:16;9533:23;9598:3;9592:4;9588:14;9581:4;9576:3;9572:14;9565:38;9626:39;9660:4;9644:14;9626:39;:::i;:::-;9612:53;;;9713:4;9706:5;9702:16;9696:23;9763:3;9755:6;9751:16;9744:4;9739:3;9735:14;9728:40;9791:41;9825:6;9809:14;9791:41;:::i;:::-;9777:55;;;9881:4;9874:5;9870:16;9864:23;9857:4;9852:3;9848:14;9841:47;9937:4;9930:5;9926:16;9920:23;9913:4;9908:3;9904:14;9897:47;9993:4;9986:5;9982:16;9976:23;9969:4;9964:3;9960:14;9953:47;10049:4;10042:5;10038:16;10032:23;10025:4;10020:3;10016:14;10009:47;10105:4;10098:5;10094:16;10088:23;10081:4;10076:3;10072:14;10065:47;10131:6;10184:2;10177:5;10173:14;10167:21;10162:2;10157:3;10153:12;10146:43;;10205:6;10198:13;;;9281:936;;;;:::o;10222:842::-;10414:4;10443:2;10483;10472:9;10468:18;10513:2;10502:9;10495:21;10536:6;10571;10565:13;10602:6;10594;10587:22;10640:2;10629:9;10625:18;10618:25;;10702:2;10692:6;10689:1;10685:14;10674:9;10670:30;10666:39;10652:53;;10740:2;10732:6;10728:15;10761:1;10771:264;10785:6;10782:1;10779:13;10771:264;;;10878:2;10874:7;10862:9;10854:6;10850:22;10846:36;10841:3;10834:49;10906;10948:6;10939;10933:13;10906:49;:::i;:::-;10896:59;-1:-1:-1;11013:12:1;;;;10978:15;;;;10807:1;10800:9;10771:264;;;-1:-1:-1;11052:6:1;;10222:842;-1:-1:-1;;;;;;;10222:842:1:o;12360:742::-;12595:2;12647:21;;;12717:13;;12620:18;;;12739:22;;;12566:4;;12595:2;12780;;12798:18;;;;12839:15;;;12566:4;12882:194;12896:6;12893:1;12890:13;12882:194;;;12945:51;12992:3;12983:6;12977:13;6239:12;;6227:25;;6301:4;6290:16;;;6284:23;6268:14;;6261:47;6160:154;12945:51;13016:12;;;;13051:15;;;;12918:1;12911:9;12882:194;;;-1:-1:-1;13093:3:1;;12360:742;-1:-1:-1;;;;;;;12360:742:1:o;13107:259::-;13286:2;13275:9;13268:21;13249:4;13306:54;13356:2;13345:9;13341:18;13333:6;13306:54;:::i;13371:1199::-;13569:4;13598:2;13638;13627:9;13623:18;13668:2;13657:9;13650:21;13691:6;13726;13720:13;13757:6;13749;13742:22;13783:2;13773:12;;13816:2;13805:9;13801:18;13794:25;;13878:2;13868:6;13865:1;13861:14;13850:9;13846:30;13842:39;13916:2;13908:6;13904:15;13937:1;13947:594;13961:6;13958:1;13955:13;13947:594;;;14026:22;;;-1:-1:-1;;14022:36:1;14010:49;;14082:13;;14150:9;;14135:25;;14203:11;;;14197:18;14180:15;;;14173:43;14259:11;;;14253:18;14236:15;;;14229:43;14295:4;14338:11;;;14332:18;14118:4;14370:15;;;14363:27;;;14332:18;14413:48;14445:15;;;14332:18;14413:48;:::i;:::-;14519:12;;;;14403:58;-1:-1:-1;;;14484:15:1;;;;13983:1;13976:9;13947:594;;14767:380;14846:1;14842:12;;;;14889;;;14910:61;;14964:4;14956:6;14952:17;14942:27;;14910:61;15017:2;15009:6;15006:14;14986:18;14983:38;14980:161;;15063:10;15058:3;15054:20;15051:1;15044:31;15098:4;15095:1;15088:15;15126:4;15123:1;15116:15;14980:161;;14767:380;;;:::o;15152:127::-;15213:10;15208:3;15204:20;15201:1;15194:31;15244:4;15241:1;15234:15;15268:4;15265:1;15258:15;15284:128;15324:3;15355:1;15351:6;15348:1;15345:13;15342:39;;;15361:18;;:::i;:::-;-1:-1:-1;15397:9:1;;15284:128::o;15417:125::-;15457:4;15485:1;15482;15479:8;15476:34;;;15490:18;;:::i;:::-;-1:-1:-1;15527:9:1;;15417:125::o;15547:127::-;15608:10;15603:3;15599:20;15596:1;15589:31;15639:4;15636:1;15629:15;15663:4;15660:1;15653:15;15679:136;15718:3;15746:5;15736:39;;15755:18;;:::i;:::-;-1:-1:-1;;;15791:18:1;;15679:136::o;15820:168::-;15860:7;15926:1;15922;15918:6;15914:14;15911:1;15908:21;15903:1;15896:9;15889:17;15885:45;15882:71;;;15933:18;;:::i;:::-;-1:-1:-1;15973:9:1;;15820:168::o;15993:127::-;16054:10;16049:3;16045:20;16042:1;16035:31;16085:4;16082:1;16075:15;16109:4;16106:1;16099:15;16125:135;16164:3;16185:17;;;16182:43;;16205:18;;:::i;:::-;-1:-1:-1;16252:1:1;16241:13;;16125:135::o;16265:195::-;16303:4;16340;16337:1;16333:12;16372:4;16369:1;16365:12;16397:3;16392;16389:12;16386:38;;;16404:18;;:::i;:::-;16441:13;;;16265:195;-1:-1:-1;;;16265:195:1:o;16465:175::-;16502:3;16546:4;16539:5;16535:16;16575:4;16566:7;16563:17;16560:43;;16583:18;;:::i;:::-;16632:1;16619:15;;16465:175;-1:-1:-1;;16465:175:1:o;16645:337::-;16847:2;16829:21;;;16886:2;16866:18;;;16859:30;-1:-1:-1;;;16920:2:1;16905:18;;16898:43;16973:2;16958:18;;16645:337::o;17390:217::-;17430:1;17456;17446:132;;17500:10;17495:3;17491:20;17488:1;17481:31;17535:4;17532:1;17525:15;17563:4;17560:1;17553:15;17446:132;-1:-1:-1;17592:9:1;;17390:217::o;17738:545::-;17840:2;17835:3;17832:11;17829:448;;;17876:1;17901:5;17897:2;17890:17;17946:4;17942:2;17932:19;18016:2;18004:10;18000:19;17997:1;17993:27;17987:4;17983:38;18052:4;18040:10;18037:20;18034:47;;;-1:-1:-1;18075:4:1;18034:47;18130:2;18125:3;18121:12;18118:1;18114:20;18108:4;18104:31;18094:41;;18185:82;18203:2;18196:5;18193:13;18185:82;;;18248:17;;;18229:1;18218:13;18185:82;;;18189:3;;;17738:545;;;:::o;18459:1352::-;18585:3;18579:10;18612:18;18604:6;18601:30;18598:56;;;18634:18;;:::i;:::-;18663:97;18753:6;18713:38;18745:4;18739:11;18713:38;:::i;:::-;18707:4;18663:97;:::i;:::-;18815:4;;18879:2;18868:14;;18896:1;18891:663;;;;19598:1;19615:6;19612:89;;;-1:-1:-1;19667:19:1;;;19661:26;19612:89;-1:-1:-1;;18416:1:1;18412:11;;;18408:24;18404:29;18394:40;18440:1;18436:11;;;18391:57;19714:81;;18861:944;;18891:663;17685:1;17678:14;;;17722:4;17709:18;;-1:-1:-1;;18927:20:1;;;19045:236;19059:7;19056:1;19053:14;19045:236;;;19148:19;;;19142:26;19127:42;;19240:27;;;;19208:1;19196:14;;;;19075:19;;19045:236;;;19049:3;19309:6;19300:7;19297:19;19294:201;;;19370:19;;;19364:26;-1:-1:-1;;19453:1:1;19449:14;;;19465:3;19445:24;19441:37;19437:42;19422:58;19407:74;;19294:201;-1:-1:-1;;;;;19541:1:1;19525:14;;;19521:22;19508:36;;-1:-1:-1;18459:1352:1:o;20945:204::-;20983:3;21019:4;21016:1;21012:12;21051:4;21048:1;21044:12;21086:3;21080:4;21076:14;21071:3;21068:23;21065:49;;;21094:18;;:::i;:::-;21130:13;;20945:204;-1:-1:-1;;;20945:204:1:o

Swarm Source

ipfs://48558bbeff5f69b43d90376dd0b50fb88bcff1dc03b88907b85c91e886fa9a25

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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