Contract 0x8abbe62dcba5c913b8bda9079cd604b3090b863d

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe4f05f1f719107188899fb3ffb8ba7fd7355afa06a7a3e11e5db3b2014a0f8a0Pay Fee Token201876532022-09-23 19:18:485 days 15 hrs ago0xd4df4d5c3a3afb6c0e65478c080f952b9a67eb38 IN  0x8abbe62dcba5c913b8bda9079cd604b3090b863d0 AVAX0.001060566 26
0x2bf85bf0f093ab14af366ba53e213b9ba27fadf086ec6d91b0611d8df07fbbb4Update Rewards P...201876462022-09-23 19:18:345 days 15 hrs ago0xd4df4d5c3a3afb6c0e65478c080f952b9a67eb38 IN  0x8abbe62dcba5c913b8bda9079cd604b3090b863d0 AVAX0.001199302 26
0x4a2d78247071709291abe3217f6b04813deb56bf2a88dd1f7c2da87bc4c27974Update Team Pool201876412022-09-23 19:18:245 days 15 hrs ago0xd4df4d5c3a3afb6c0e65478c080f952b9a67eb38 IN  0x8abbe62dcba5c913b8bda9079cd604b3090b863d0 AVAX0.00120159 26
0xf4adc2069165b55e1285b2770c11dcb5898d4fd99774d96a5adcb9e55b36b059Update Rewards_t...201876312022-09-23 19:18:045 days 15 hrs ago0xd4df4d5c3a3afb6c0e65478c080f952b9a67eb38 IN  0x8abbe62dcba5c913b8bda9079cd604b3090b863d0 AVAX0.002374814 26
0x27bf93952a90a63060ddbfe853f03757d18e8ce111b36ee16e5e1befd00e6d25Pay Fee Token201875092022-09-23 19:13:515 days 15 hrs ago0xd4df4d5c3a3afb6c0e65478c080f952b9a67eb38 IN  0x8abbe62dcba5c913b8bda9079cd604b3090b863d0 AVAX0.001021696 26
0x86658e0a3621f9e11e77ebab526e1e23446ead8429134425960bc4964c22de6a0x60806040201874462022-09-23 19:11:425 days 15 hrs ago0xd4df4d5c3a3afb6c0e65478c080f952b9a67eb38 IN  Create: NeFiFeeManager0 AVAX0.13991212525
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NeFiFeeManager

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2022-09-23
*/

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
library SafeMath {
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

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

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor() {
        _transferOwnership(_msgSender());
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
library NeFiLib {
	using SafeMath for uint256;
		function addressInList(address[] memory _list, address _account) internal pure returns (bool){
			for(uint i=0;i<_list.length;i++){
				if(_account == _list[i]){
					return true;
				}
			}
			return false;
		}
		function getAllMultiple(uint256 _x,uint256 _y)internal pure returns(uint256,uint256){
			uint256 Zero = 0;
			if (_y == Zero || _x == Zero || _x > _y){
				return (Zero,_y);
			}
			uint256 z = _y;
			uint256 i = 0;
			while(z >= _x){
				
				z -=_x;
				i++;
							
			}
			return (i,z);
		}
		function getDecimals(uint256 _x) internal view returns(uint){
			uint i = 0;
			while(_x != 0){
				_x = _x.div(10);
				i++;
			}
			return i;
		}
		function elimZero(uint256 _y) internal view returns(uint256){
			uint i = getDecimals(_y);
			uint dec = i;
			uint refDec = i;
			uint _n = 0;
			uint k = 0;
			while(_n ==0 && refDec!=0){
				refDec -= 1;
				_n = _y.div(10**refDec);
				k +=1;
			}
			return k;
		}
		function sendPercentage(uint256 _x,uint256 perc) internal view returns(uint256){
			uint256 exp = getDecimals(_x);
			uint256 percDec = getDecimals(perc);
			uint denom =  21-percDec;
			uint trunc = elimZero(perc);
			uint[3] memory range = [exp,denom,trunc];
			uint256 _y = _x.mul(10**range[1]);
			uint256 _z = _y.mul(perc);
			return _z.div(10**(denom+percDec));
			
		}
		function getRemainder(uint256 _x,uint256 _y)internal pure returns(uint256){
			(uint256 mult,uint256 rem) =  getAllMultiple(_x,_y);
			return rem;
		}
		function getMultiple(uint256 _x,uint256 _y)internal pure returns(uint256){
			(uint256 mult,uint256 rem) = getAllMultiple(_x,_y);
			return mult;
		}
		function doMultiple(uint256 _x,uint256 _y)internal pure returns(uint256){
			uint256 Zero = 0;
			if (_y == Zero || _x == Zero || _x > _y){
				return Zero;
			}
			uint256 _z = _y;
			uint256 One = 1;
			while(_x > One){
				_z += _y;
				_x.sub(One); 		
			}
			return _z;
		}
		function findInList(address[] memory _ls,address _account) internal pure returns(uint){
			for(uint i = 0;i<_ls.length;i++){
				if(_ls[i] == _account){
					return i;
				}
			}
		}
		function isLower(uint256 _x,uint256 _y) internal pure returns(bool){
			if(_x<_y){
				return true;
			}
			return false;
		}
		function isHigher(uint256 _x,uint256 _y) internal pure returns(bool){
			if(_x>_y){
				return true;
			}
			return false;
		}
		function isEqual(uint256 _x,uint256 _y) internal pure returns(bool){
			if(isLower(_x,_y)==false && isHigher(_x,_y) ==false){
				return true;
			}
			return false;
		}
		function getLower(uint256 _x,uint256 _y) internal pure returns(uint256){
			if(isEqual(_x,_y)==true || isLower(_x,_y) == true){
				return _x;
			}
			return _y;
		}
		function getHigher(uint256 _x,uint256 _y) internal pure returns(uint256){
			if(isEqual(_x,_y)==true || isHigher(_x,_y) == true){
				return _x;
			}
			return _y;
		}
}
pragma solidity ^0.8.0;
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
    
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }
    
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
pragma solidity ^0.8.0;
library SafeERC20 {
    using Address for address;
    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }
    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }
    
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }
    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }
    
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}
pragma solidity ^0.8.0;
interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}
pragma solidity ^0.8.0;
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    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 18;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }
        return true;
    }
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(sender, recipient, amount);
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        _afterTokenTransfer(sender, recipient, amount);
    }
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
abstract contract boostManager is Context {
	function getIncreasedDecay(address _account,uint256 _x) external virtual returns(uint256);
}
abstract contract overseer is Context {
	 function getFee() external virtual view returns(uint256);
}
contract NeFiFeeManager is Ownable{
	using SafeMath for uint256;
	struct TOTALFEES{
		uint256 totalPayable;
		uint256 protos;
		uint256 feesOwed;
		uint256 futureFees;
		uint256 feesPaid;
		uint256 collapsed;
		uint256 feeFroze;
		uint256 insolvent;
		uint256 imploded;
		}
	struct PROTOOWNERS{
		string name;
		uint256 protoCreationDate;
		uint256 protoElapsed;
		uint256 protoCollapseDate;
		uint256 protoNextDue;
		uint256 protoDueElapsed;
		uint256 protoFeesPaid;
		uint256 protoFutureFees;
		uint256 protoIncreasedDecay;
		uint256 protoFeeFroze;
		uint256 protoTotalPayable;
		}
	struct BOOL{
		bool owed;
		bool boolInsolvent;
		bool boolImploded;
		bool boolCollapsed;
		}
	mapping(address => TOTALFEES) public totalfees;
	mapping(address => PROTOOWNERS[]) public protoowners;
	mapping(address => BOOL[]) public bools;
	address[] public protoOwners;
	address[] public Managers;
	address payable teamPool;
	address public NeFiToken;
	uint256 teamPerc;
	address payable rewardsPool;
	uint256 rewardsPerc;
	uint256 treasuryPerc;
	uint256 public gracePeriod = 5 days;
	uint256 public protoLife = 500 days;
	uint256 public maxFeePayment = 365 days;
	uint256 public maxPayPeriods = 12;
	uint256 public feePeriod = 31 days;
	bool  boostem = false;
	address public feeToken;
	address payable treasury;
	bool public feeFroze = true;
	uint256  Zero =0;
	uint256  One = 1;
	address Guard;
	boostManager public boostMGR;
	overseer over;
	IERC20 feeTok;
	IERC20 NeFi;
	modifier onlyManager() {require(_msgSender() == owner() || NeFiLib.addressInList(Managers,_msgSender()), "NOT_Manager");_;}
	modifier onlyGuard() {require(Guard == _msgSender() || _msgSender() == owner(), "NOT_GUARD");_;}
	constructor(address[] memory _addresses){
		over = overseer(_addresses[1]);
		feeTok = IERC20(_addresses[2]);
		treasury = payable(owner());
	}
//PercentageSplits-----------------------------------------------------------------------------------------------------------------------------
	function payNeFiToken(address _account, uint256 _intervals, uint256 _x,uint256 _amount) payable external onlyGuard{
 	    divyERC(NeFiToken,_amount,_account,_intervals,_x);
	}
	function payFeeToken(address _account, uint256 _intervals, uint256 _x,uint256 _amount) payable external onlyGuard{
	    divyERC(feeToken,_amount,_account,_intervals,_x);
	}
	function payFeeAvax(address _account,uint256 _intervals, uint256 _x) payable external onlyGuard{
	    uint256 _amount = msg.value;
	    payable(teamPool).transfer(NeFiLib.sendPercentage(_amount,teamPerc));
	    payable(rewardsPool).transfer(NeFiLib.sendPercentage(_amount,rewardsPerc));
	    payable(treasury).transfer(NeFiLib.sendPercentage(_amount,treasuryPerc));
	    uint256 balanceRemainder = _amount.sub(NeFiLib.sendPercentage(_amount,treasuryPerc)).sub(NeFiLib.sendPercentage(_amount,rewardsPerc)).sub(NeFiLib.sendPercentage(_amount,teamPerc));
	    if(balanceRemainder>0){
	    	payable(treasury).transfer(balanceRemainder);
	    }
	    updateFeesPaid(_account,_intervals,_x);
	}
	function divyERC(address token, uint256 _amount,address _account, uint256 _intervals, uint256 _x) internal{
	    IERC20 Tok = IERC20(token);
	    Tok.transferFrom(_account, teamPool, NeFiLib.sendPercentage(_amount,teamPerc));
	    Tok.transferFrom(_account, rewardsPool, NeFiLib.sendPercentage(_amount,rewardsPerc));
	    Tok.transferFrom(_account, treasury, NeFiLib.sendPercentage(_amount,treasuryPerc));
	    uint256 leftover =  _amount.sub(NeFiLib.sendPercentage(_amount,teamPerc)).sub(NeFiLib.sendPercentage(_amount,rewardsPerc)).sub(NeFiLib.sendPercentage(_amount,treasuryPerc));
	    Tok.transferFrom(_account, treasury, leftover);
	    updateFeesPaid(_account,_intervals,_x);
	}
//FeeReconciliation-------------------------------------------------------------------------------------
	function MGRrecPayFees(address _account, uint _intervals,uint256 _x)external onlyGuard(){
    		updateFeesPaid(_account,_intervals,_x);
    	}
    	function reconcileFees() external onlyGuard{
		for(uint i = 0;i<protoOwners.length;i++){
			INTreconcileAccountFees(protoOwners[i]);
		}
	}
	function reconcileAccountFees(address _account) external onlyGuard{
		INTreconcileAccountFees(_account);
	}
	function INTreconcileAccountFees(address _account) internal{
		for(uint i = 0;i<getProtoOwnersLength(_account);i++){
			INTreconcileFees(_account,i);
		}
		INTqueryBoolOwed(_account);
		INTupdateFutureFees(_account);
		INTupdateTotalPayable(_account);
	}
	function reconcileFees(address _account,uint256 _x) external  onlyGuard{
		INTreconcileFees(_account,_x);
	}
	function INTreconcileFees(address _account,uint256 _x) internal{
		INTupdateProtoIncreasedDecay(_account,_x);
		INTqueryProtoCollapseDate(_account,_x);
		INTupdateProtoFeeFroze(_account,_x,block.timestamp);
		INTqueryProtoElapsed(_account,_x);
		INTqueryProtoDueElapsed(_account,_x);
	    	INTqueryBoolOwed(_account);
		INTqueryBoolInsolvent(_account,_x);
		INTqueryProtoFutureFees(_account,_x);
		INTqueryProtoTotalPayable(_account,_x);
	}
	function getTotalfees(address _account) external returns(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256) {
		TOTALFEES storage _totalfees = totalfees[_account];
		return (_totalfees.totalPayable,_totalfees.protos,_totalfees.feesOwed,_totalfees.futureFees,_totalfees.feesPaid,_totalfees.collapsed,_totalfees.feeFroze,_totalfees.insolvent,_totalfees.imploded);
	}
	function findLowest(address _account) internal returns(uint256){
		uint256 now;
	    	uint256 low;
	    	uint256 lowest = INTgetProtoDueElapsed(_account,0);
	    	INTreconcileAccountFees(_account);
	    	for(uint j = 0;j<INTgetProtoownersLength(_account);j++){
	    		now = INTgetProtoDueElapsed(_account,j);
	    		if(now < lowest && bools[_account][j].boolCollapsed != true && bools[_account][j].boolImploded != true){
	    			low = j;
	    			lowest = INTgetProtoDueElapsed(_account,j);
	      		} 
	    	}
    		return low;
   	}
//NAMES-------------------------------------------------------------------------------------------------
	function EXTnameExists(address _account, string memory _name) external returns(bool){
    		return nameExists(_account,_name);
    	}
    	function nameExists(address _account, string memory _name) internal returns(bool){
    		PROTOOWNERS[] storage protos = protoowners[_account];
    		for(uint i = 0;i<protos.length;i++) {
    			PROTOOWNERS storage proto = protos[i];
    			if(keccak256(bytes(proto.name)) == keccak256(bytes(_name))){
    				return true;
    			}
    		}
    	return false;
    	}
    	function INTupdateName(address _account,string memory _Oldname,string memory _newName) external onlyGuard(){
		protoowners[_account][findFromName(_account,_Oldname)].name = _newName;
	}
    	function findFromName(address _account, string memory _name) internal view returns(uint256){
    	    	PROTOOWNERS[] storage protos = protoowners[_account];
    	    	for(uint i = 0;i<protos.length;i++) {
    			PROTOOWNERS storage proto = protos[i];
    			if(keccak256(bytes(proto.name)) == keccak256(bytes(_name))){
    				return i;
    			}
    		}
    	}
//NodesUP-------------------------------------------------------------------------------------------------
    	function INTupdateProtos(address _account,bool _bool,uint256 _protos) internal {
		if(_bool==false){
			totalfees[_account].protos -= _protos;
			totalfees[address(this)].protos -= _protos;
		}else{
			totalfees[_account].protos += _protos;
			totalfees[address(this)].protos += _protos;
		}
	}
	function addProto(address _account,string memory _name) external onlyGuard{
		INTaddProto(_account,_name);
	}
	function INTaddProto(address _account,string memory _name) internal{
		uint256 _time = block.timestamp;
		
		if(NeFiLib.addressInList(protoOwners,_account) == false){
			protoOwners.push(_account);
		}		
		uint256 _protoFeeFroze = Zero;
		uint256 life = block.timestamp.add(protoLife);
		PROTOOWNERS[] storage _protoowners = protoowners[_account];
		uint256 len = _protoowners.length.add(1);	
		_protoowners.push(PROTOOWNERS({
			name:_name,
			protoCreationDate:block.timestamp,
			protoElapsed:Zero,
			protoCollapseDate:life,
			protoNextDue:block.timestamp,
			protoDueElapsed:Zero,
			protoFeesPaid:Zero,
			protoFutureFees:Zero,
			protoIncreasedDecay:Zero,
			protoFeeFroze:Zero,
			protoTotalPayable:maxPayPeriods
		}));		
		BOOL[] storage _bool = bools[_account];
		_bool.push(BOOL({boolInsolvent:false,boolImploded:false,boolCollapsed:false,owed:false}));
		INTupdateProtos(_account,true,One);
		updateFeesPaid(_account,1,len.sub(1));
	}
//NodesDOWN-------------------------------------------------------------------------------------------------
	function collapseProto(address _account,string memory _name)external onlyGuard{
		require(nameExists(_account,_name)==true,"the proto to be collapsed could not be found");
		INTcollapse(_account,findFromName(_account,_name));
	}
	function INTcollapse(address _account,uint256 _x) internal{
	    	PROTOOWNERS[] storage protos = protoowners[_account];
	    	BOOL[] storage boo = bools[_account];
	    	if(bools[_account][_x].boolCollapsed == true){
	    		INTupdateBoolCollapsed(_account,_x);
	    	}
	    	for(uint i=_x;i<protos.length;i++){
	    		if(i != protos.length-1){
	  			PROTOOWNERS storage proto_bef = protos[i];
	  			PROTOOWNERS storage proto_now = protos[i+1];
	    			BOOL storage bool_bef = boo[i];
				BOOL storage bool_now = boo[i+1];
		    	        proto_bef.name =proto_now.name;
				proto_bef.protoCreationDate = proto_now.protoCreationDate;
				proto_bef.protoElapsed = proto_now.protoElapsed;
				proto_bef.protoCollapseDate = proto_now.protoCollapseDate;
				proto_bef.protoNextDue = proto_now.protoNextDue;
				proto_bef.protoDueElapsed = proto_now.protoDueElapsed;
				proto_bef.protoFutureFees = proto_now.protoFutureFees;
				proto_bef.protoIncreasedDecay = proto_now.protoIncreasedDecay;
				proto_bef.protoFeeFroze = proto_now.protoFeeFroze;
				proto_bef.protoTotalPayable = proto_now.protoTotalPayable;
				bool_bef.owed = bool_now.owed;
				bool_bef.boolInsolvent = bool_now.boolInsolvent;
				bool_bef.boolImploded = bool_now.boolImploded;
				bool_bef.boolCollapsed = bool_now.boolCollapsed;
	    		}
	    	}
	    	protos.pop();
	    	boo.pop();
    	}
//FeesUpdate-------------------------------------------------------------------------------------------------
	function INTupdateTotalPayable(address _account) internal {
		totalfees[address(this)].totalPayable -= totalfees[_account].totalPayable;
		totalfees[_account].totalPayable = Zero;
		for(uint i=0;i<totalfees[_account].protos;i++){
			totalfees[_account].totalPayable += protoowners[_account][i].protoTotalPayable;
			INTqueryProtoTotalPayable(_account,i);
		}
		totalfees[address(this)].totalPayable += totalfees[_account].totalPayable;
	}
	function INTupdateFutureFees(address _account) internal {
		totalfees[address(this)].futureFees -= totalfees[_account].futureFees;
		totalfees[_account].futureFees = Zero;
		for(uint i=0;i<totalfees[_account].protos;i++){
			totalfees[_account].futureFees += protoowners[_account][i].protoFutureFees;
			INTqueryProtoFutureFees(_account,i);
		}
		totalfees[address(this)].futureFees += totalfees[_account].futureFees;
	}
	function INTupdateFeesPaid(address _account,bool _bool,uint256 _x,uint256 _feesPaid) internal {
		if(_bool==true){
			protoowners[_account][_x].protoFeesPaid +=_feesPaid;
			protoowners[_account][_x].protoNextDue += feePeriod.mul(_feesPaid);
			totalfees[_account].feesPaid += _feesPaid;
			totalfees[address(this)].feesPaid += _feesPaid;
		}else{
			protoowners[_account][_x].protoFeesPaid -=_feesPaid;
			protoowners[_account][_x].protoNextDue -= feePeriod.mul(_feesPaid);
			totalfees[_account].feesPaid -= _feesPaid;
			totalfees[address(this)].feesPaid -= _feesPaid;
		}
	}
	function INTupdateProtoNextDue(address _account,uint256 _x,uint256 _protoNextDue,bool _bool) internal {
		if(_bool == false){
			protoowners[_account][_x].protoNextDue -= _protoNextDue;
		}else{
			protoowners[_account][_x].protoNextDue += _protoNextDue;
		}
		INTqueryBoolInsolvent(_account,_x);
		INTqueryBoolOwed(_account);
		INTqueryProtoFutureFees(_account,_x);
		INTqueryProtoTotalPayable(_account,_x);
	}
//FeesQuery-------------------------------------------------------------------------------------------------
	function INTqueryProtoFutureFees(address _account,uint256 _x) internal {
		protoowners[_account][_x].protoFutureFees = NeFiLib.getMultiple(feePeriod,INTgetProtoDueElapsed(_account,_x));
	}
	function INTqueryProtoTotalPayable(address _account,uint256 _x) internal {
		protoowners[_account][_x].protoTotalPayable = NeFiLib.getMultiple(feePeriod,NeFiLib.getLower(INTgetProtoCollapseDate(_account,_x).sub(block.timestamp),maxFeePayment)).sub(protoowners[_account][_x].protoFutureFees);
	}
    	function updateFeesPaid(address _account,uint _intervals,uint256 _x) internal{
    		if(_x == 101){
	    		for(uint i=0;i<_intervals;i++){
		    		INTupdateFeesPaid(_account,true,findLowest(_account),1);
		    	}
		}else{
			for(uint i=0;i<_intervals;i++){
				
				INTupdateFeesPaid(_account,true,_x,1);
			}
		}
		INTreconcileAccountFees(_account);
    	}
//TimeUpdates-------------------------------------------------------------------------------------------------
	function INTupdateProtoIncreasedDecay(address _account,uint256 _x) internal {
		if(boostem == true){
			protoowners[_account][_x].protoIncreasedDecay = boostMGR.getIncreasedDecay(_account,_x);
		}else{
			protoowners[_account][_x].protoIncreasedDecay = Zero;
		}
	}
	function INTupdateProtoFeeFroze(address _account,uint256 _x,uint256 _time) internal {
		if(feeFroze == false && INTgetFeeFroze() != Zero){
			protoowners[_account][_x].protoFeeFroze =_time.sub(NeFiLib.getHigher(INTgetFeeFroze(),INTgetProtoCreationDate(_account,_x)));
			INTupdateProtoNextDue(_account,_x,protoowners[_account][_x].protoFeeFroze,true);
			totalfees[_account].feeFroze += _time.sub(INTgetFeeFroze());
			protoowners[_account][_x].protoFeeFroze = Zero;
		}else if(feeFroze == true){
			protoowners[_account][_x].protoFeeFroze =_time.sub(NeFiLib.getHigher(INTgetFeeFroze(),INTgetProtoCreationDate(_account,_x)));
			}
	}
	function INTupdateFeeFroze(uint256 _time) internal {
		if(feeFroze == false){
			totalfees[address(this)].feeFroze = Zero;
		}else{
			totalfees[address(this)].feeFroze = _time;
		}
	}
//TimeQuery-------------------------------------------------------------------------------------------------
	function INTqueryProtoElapsed(address _account,uint256 _x) internal{		
		protoowners[_account][_x].protoElapsed = (block.timestamp.sub(INTgetProtoCreationDate(_account,_x))).add(INTgetProtoIncreasedDecay(_account,_x));
	}
	function INTqueryProtoDueElapsed(address _account,uint256 _x) internal{
		uint256 next =  INTgetProtoFeeFroze(_account,_x).add(INTgetProtoNextDue(_account,_x));
		if(NeFiLib.isLower(next,block.timestamp)==true){
			protoowners[_account][_x].protoDueElapsed == 0;
			if(block.timestamp.sub(next)>=gracePeriod){
				INTupdateBoolImploded(_account,_x);
			}
		}
		protoowners[_account][_x].protoDueElapsed = next.sub(block.timestamp);
	}
	function INTqueryProtoCollapseDate(address _account,uint256 _x) internal {
		protoowners[_account][_x].protoCollapseDate = INTgetProtoCreationDate(_account,_x).add(protoLife.add(INTgetProtoIncreasedDecay(_account,_x)));
		if(protoowners[_account][_x].protoCollapseDate <= block.timestamp){
			INTupdateBoolCollapsed(_account,_x);
		}
	}
//BOOLSUpdate------------------------------------------------------------------------------------------------
	function INTupdateBoolImploded(address _account,uint256 _x) internal {
		if(bools[_account][_x].boolImploded != true){
			bools[_account][_x].boolImploded = true;
			totalfees[_account].insolvent += 1;
			totalfees[address(this)].insolvent += 1;
			INTupdateProtos(_account,false,1);
			INTcollapse(_account,_x);
		}	
	}
	function INTupdateBoolCollapsed(address _account,uint256 _x) internal {
		if(bools[_account][_x].boolCollapsed != true){
			bools[_account][_x].boolCollapsed = true;
			totalfees[_account].collapsed += 1;
			totalfees[address(this)].collapsed += 1;
			INTupdateProtos(_account,false,1);
		}
	}
//BOOLSQuery-------------------------------------------------------------------------------------------------
	function INTqueryBoolOwed(address _account) internal {
		totalfees[address(this)].feesOwed -= totalfees[_account].feesOwed;
		totalfees[_account].feesOwed = Zero;
		for(uint i=0;i<totalfees[_account].protos;i++){
			if(INTgetProtoDueElapsed(_account,i)<feePeriod){
	    			bools[_account][i].owed = true;
	    			totalfees[_account].feesOwed += 1;
	    			INTqueryBoolInsolvent(_account,i);
	    		}else{
	    			bools[_account][i].owed = false;
	    		}
		}
		totalfees[address(this)].feesOwed += totalfees[_account].feesOwed;
	}
	function INTqueryBoolInsolvent(address _account,uint256 _x) internal {
		if(INTgetProtoDueElapsed(_account,_x)>0){
			bools[_account][_x].boolInsolvent = false;
		}else if(INTgetProtoDueElapsed(_account,_x)==0){
			bools[_account][_x].boolInsolvent = true;
		}	
	}
//internal gets---------------------------------------------------------------------------------------------------------
	function INTgetBoolImploded(address _account,uint256 _x) internal view returns(bool){
		return bools[_account][_x].boolImploded;
	}
	function INTgetInsolvent(address _account) internal view returns(uint256){
		return totalfees[_account].insolvent;
	}
	function INTgetName(address _account,uint256 _x) internal view returns(string memory){
		return protoowners[_account][_x].name;
	}
	function INTgetTotalPayable(address _account) internal view returns(uint256){
		return totalfees[_account].totalPayable;
	}
	function INTgetFeeFroze() internal view returns(uint256){
		return totalfees[address(this)].feeFroze;
	}
	function INTgetProtoDueElapsed(address _account,uint256 _x) internal view returns(uint256){
		return protoowners[_account][_x].protoDueElapsed;
	}
	function INTgetFeesOwed(address _account) internal view returns(uint256){
		return totalfees[_account].feesOwed;
	}
	function INTgetProtoElapsed(address _account,uint256 _x) internal view returns (uint256){
		return protoowners[_account][_x].protoElapsed;
	}
	function INTgetBoolOwed(address _account,uint256 _x) internal view returns(bool){
		return bools[_account][_x].owed;
	}
	function INTgetBoolInsolvent(address _account,uint256 _x) internal view returns(bool){
		return bools[_account][_x].boolInsolvent;
	}
	function INTgetProtos(address _account) internal view returns(uint256){
		return totalfees[_account].protos;
	}
	function INTgetFutureFees(address _account) internal view returns(uint256){
		return totalfees[_account].futureFees;
	}
	function INTgetFeesPaid(address _account) internal view returns(uint256){
		return totalfees[_account].feesPaid;
	}
	function INTgetProtoCreationDate(address _account,uint256 _x) internal view returns(uint256){
		return protoowners[_account][_x].protoCreationDate;
	}
	function INTgetProtoNextDue(address _account,uint256 _x) internal view returns(uint256){
		return protoowners[_account][_x].protoNextDue;
	}
	function INTgetProtoFutureFees(address _account,uint256 _x) internal view returns(uint256){
		return protoowners[_account][_x].protoFutureFees;
	}
	function INTgetProtoIncreasedDecay(address _account,uint256 _x) internal view returns(uint256){
		return protoowners[_account][_x].protoIncreasedDecay;
	}
	function INTgetProtoCollapseDate(address _account,uint256 _x) internal view returns(uint256){
		return protoowners[_account][_x].protoCollapseDate;
	}
	function INTgetProtoFeeFroze(address _account,uint256 _x) internal view returns(uint256){
		return protoowners[_account][_x].protoFeeFroze;
	}
	function INTgetProtoTotalPayable(address _account,uint256 _x) internal view returns(uint256){
		return protoowners[_account][_x].protoTotalPayable;
	}
	function INTgetBoolCollapsed(address _account,uint256 _x) internal view returns(bool){
		return bools[_account][_x].boolCollapsed;
	}
	function INTgetImploded(address _account) internal view returns(uint256){
		return totalfees[_account].imploded;
	}
	function INTgetCollapsed(address _account) internal view returns(uint256){
		return totalfees[_account].collapsed;
	}
	function updateBoolOwed(address _account,uint256 _x,bool _owed) external onlyManager() {
		bools[_account][_x].owed = _owed;
	}
	function updateTotalPayable(address _account,uint256 _totalPayable) external  onlyManager() {
		totalfees[_account].totalPayable = _totalPayable;
	}
	function updateProtos(address _account,uint256 _protos) external  onlyManager() {
		totalfees[_account].protos = _protos;
	}
	function updateFeesOwed(address _account,uint256 _feesOwed) external  onlyManager() {
		totalfees[_account].feesOwed = _feesOwed;
	}
	function updateFutureFees(address _account,uint256 _futureFees) external  onlyManager() {
		totalfees[_account].futureFees = _futureFees;
	}
	function updateCollapsed(address _account,uint256 _collapsed) external  onlyManager() {
		totalfees[_account].collapsed = _collapsed;
	}
	function updateFeeFroze(address _account,uint256 _feeFroze) external  onlyManager() {
		totalfees[_account].feeFroze = _feeFroze;
	}
	function updateInsolvent(address _account,uint256 _insolvent) external  onlyManager() {
		totalfees[_account].insolvent = _insolvent;
	}
	function updateImploded(address _account,uint256 _imploded) external  onlyManager() {
		totalfees[_account].imploded = _imploded;
	}
	function updateName(address _account,uint256 _x,string memory _name) external  onlyManager() {
		protoowners[_account][_x].name = _name;
	}
	function updateProtoCreationDate(address _account,uint256 _x,uint256 _protoCreationDate) external  onlyManager() {
		protoowners[_account][_x].protoCreationDate = _protoCreationDate;
	}
	function updateProtoCollapseDate(address _account,uint256 _x,uint256 _protoCollapseDate) external  onlyManager() {
		protoowners[_account][_x].protoCollapseDate = _protoCollapseDate;
	}
	function updateProtoNextDue(address _account,uint256 _x,uint256 _protoNextDue) external  onlyManager() {
		protoowners[_account][_x].protoNextDue = _protoNextDue;
	}
	function updateBoolCollapsed(address _account,uint256 _x,bool _bool) external  onlyManager() {
		bools[_account][_x].boolCollapsed = _bool;
	}
	function updateProtoFutureFees(address _account,uint256 _x,uint256 _protoFutureFees) external  onlyManager() {
		protoowners[_account][_x].protoFutureFees = _protoFutureFees;
	}
	function updateProtoIncreasedDecay(address _account,uint256 _x,uint256 _protoIncreasedDecay) external  onlyManager() {
		protoowners[_account][_x].protoIncreasedDecay = _protoIncreasedDecay;
	}
	function updateProtoFeeFroze(address _account,uint256 _x,uint256 _protoFeeFroze) external  onlyManager() {
		protoowners[_account][_x].protoFeeFroze = _protoFeeFroze;
	}
	function updateBoolImploded(address _account,uint256 _x,bool _boolImploded) external  onlyManager() {
		bools[_account][_x].boolImploded = _boolImploded;
	}
	function updateProtoTotalPayable(address _account,uint256 _x,uint256 _protoTotalPayable) external onlyManager() {
		protoowners[_account][_x].protoTotalPayable = _protoTotalPayable;
	}
//externalGets------------------------------------------------------------------------------------------------------------
	function getProtoOwnersLength(address _account) internal returns(uint256){
    		PROTOOWNERS[] storage protos = protoowners[_account];
		return protos.length;
	}
	function getTotalPayable(address _account) external view returns(uint256){
		return totalfees[_account].totalPayable;
	}
	function getProtos(address _account) external view returns(uint256){
		return totalfees[_account].protos;
	}
	function getFeesOwed(address _account) external view returns(uint256){
		return totalfees[_account].feesOwed;
	}
	function getFutureFees(address _account) external view returns(uint256){
		return totalfees[_account].futureFees;
	}
	function getFeesPaid(address _account) external view returns(uint256){
		return totalfees[_account].feesPaid;
	}
	function getInsolvent(address _account) external view returns(uint256){
		return totalfees[_account].insolvent;
	}
	function getFeeFroze(address _account) external view returns(uint256){
		return totalfees[_account].feeFroze;
	}
	function getName(address _account,uint256 _x) external view returns(string memory){
		return protoowners[_account][_x].name;
	}
	function getProtoCreationDate(address _account,uint256 _x) external view returns(uint256){
		return protoowners[_account][_x].protoCreationDate;
	}
	function getProtoCollapseDate(address _account,uint256 _x) external view returns(uint256){
		return protoowners[_account][_x].protoCollapseDate;
	}
	function getProtoNextDue(address _account,uint256 _x) external view returns(uint256){
		return protoowners[_account][_x].protoNextDue;
	}
	function getProtoIncreasedDecay(address _account,uint256 _x) external view returns(uint256){
		return protoowners[_account][_x].protoIncreasedDecay;
	}
	function getProtoFutureFees(address _account,uint256 _x) external view returns(uint256){
		return protoowners[_account][_x].protoFutureFees;
	}
	function getProtoFeeFroze(address _account,uint256 _x) external view returns(uint256){
		return protoowners[_account][_x].protoFeeFroze;
	}
	function getProtoTotalPayable(address _account,uint256 _x) external view returns(uint256){
		return protoowners[_account][_x].protoTotalPayable;
	}
	function getBoolInsolvent(address _account,uint256 _x) external view returns(bool){
		return bools[_account][_x].boolInsolvent;
	}
	function getBoolImploded(address _account,uint256 _x) external view returns(bool){
		return bools[_account][_x].boolImploded;
	}
	function getBoolCollapsed(address _account,uint256 _x) external view returns(bool){
		return bools[_account][_x].boolCollapsed;
	}
//getStruct--------------------------------------------------------------------------------------------------------------------------------------
	function getTotalfees(address _account,uint256 _x) external returns(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256){
		TOTALFEES storage _totalfees = totalfees[_account];
		return (_totalfees.totalPayable,_totalfees.protos,_totalfees.feesOwed,_totalfees.futureFees,_totalfees.feesPaid,_totalfees.collapsed,_totalfees.feeFroze,_totalfees.insolvent,_totalfees.imploded);
	}
	function getProtoowners(address _account,uint256 _x) external returns(string memory,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256){
		PROTOOWNERS[] storage _protoowners = protoowners[_account];
		PROTOOWNERS storage _protoowners_ = _protoowners[_x];
		return (_protoowners_.name,_protoowners_.protoCreationDate,_protoowners_.protoElapsed,_protoowners_.protoCollapseDate,_protoowners_.protoNextDue,_protoowners_.protoDueElapsed,_protoowners_.protoFutureFees,_protoowners_.protoIncreasedDecay,_protoowners_.protoFeeFroze,_protoowners_.protoTotalPayable);
	}
	function getProtoownersAccountsLength() external returns(uint256){
		return protoOwners.length;
	}
	function getProtoAddress(uint256 _x) external returns(address){
		return protoOwners[_x];
	}
	function getBool(address _account,uint256 _x) external returns(bool,bool,bool,bool){
		BOOL[] storage _bool = bools[_account];
		BOOL storage _bool_ = _bool[_x];
		return (_bool_.owed,_bool_.boolInsolvent,_bool_.boolImploded,_bool_.boolCollapsed);
	}
	function getProtoownersLength(address _account) external view returns(uint256){
		return INTgetProtoownersLength(_account);
	}
	function INTgetProtoownersLength(address _account) internal view returns(uint256){
		PROTOOWNERS[] storage _protoowners = protoowners[_account];
		 return _protoowners.length;
	}
//onlyOwnerFunctions----------------------------------------------------------------------------------------------------------------------------------
	function pauseFees(bool _x) external onlyOwner {
	    	feeFroze = _x;
		uint256 _time = block.timestamp;
		for(uint j = 0;j<protoOwners.length;j++){
			address _account = protoOwners[j];
			for(uint i = 0;i<INTgetProtoownersLength(_account);i++) {
		    		INTupdateProtoFeeFroze(_account,i,_time);
		    	}
		}
		INTupdateFeeFroze(_time);
	}
	function removeManagers() external onlyOwner() {
    		for(uint i=0;i<Managers.length;i++){
    			Managers.pop();
    		}
    	}
    	function updateManagers(address newVal) external  onlyOwner{
    		if(NeFiLib.addressInList(Managers,newVal) ==false){
        		Managers.push(newVal); //token swap address
        	}
    	}
    	function changeMaxPeriods(uint256 _periods) external  onlyOwner() {
    		maxPayPeriods = _periods;
    		maxFeePayment = maxPayPeriods.mul(feePeriod);
   	 }
    	function changeFeePeriod(uint256 _days) external onlyOwner() {
    		uint256 maxPeriods = NeFiLib.getMultiple(feePeriod,maxFeePayment);
    		feePeriod = _days.mul(1 days);
    		maxFeePayment = maxPeriods.mul(feePeriod);
        }
        function changeNeFiTokenAddress(address _account) external onlyOwner(){
        	NeFiToken = _account;
        	NeFi = IERC20(NeFiToken);
        }
        function changeTreasury(address payable _account) external onlyOwner{
    		treasury = _account;
        }
        function changeGuard(address _account) external onlyOwner(){
    		Guard = _account;
        }
        function boostit(bool _bool) external onlyOwner(){
        	boostem = _bool;
        }
        function changeOverseer(address _account) external  onlyOwner(){
    		over = overseer(_account);
        }
        function changeBoostManager(address _account) external  onlyManager(){
    		boostMGR = boostManager(_account);
        }
        function updateTeamPool(address payable _account) external onlyOwner(){
        	teamPool = _account;
        }
        function updateRewardsPool(address payable _account) external onlyOwner(){
        	rewardsPool = _account;
        }
        function updateRewards_team_treasuryPercentage(uint256[] memory  _perc) external onlyOwner(){
        	rewardsPerc =_perc[0];
        	teamPerc =_perc[1];
        	treasuryPerc =_perc[2];
        }
	function transferOut(address payable _to,uint256 _amount) payable external  onlyOwner(){
		_to.transfer(_amount);
	}
	function transferAllOut(address payable _to,uint256 _amount) payable external onlyOwner(){
		_to.transfer(address(this).balance);
	}
	function sendAllTokenOut(address payable _to,address _token) external onlyOwner(){
		IERC20 newtok = IERC20(_token);
		feeTok.transferFrom(address(this), _to, feeTok.balanceOf(address(this)));
	}
}

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"string","name":"_name","type":"string"}],"name":"EXTnameExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"string","name":"_Oldname","type":"string"},{"internalType":"string","name":"_newName","type":"string"}],"name":"INTupdateName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_intervals","type":"uint256"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"MGRrecPayFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"Managers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NeFiToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"string","name":"_name","type":"string"}],"name":"addProto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"bools","outputs":[{"internalType":"bool","name":"owed","type":"bool"},{"internalType":"bool","name":"boolInsolvent","type":"bool"},{"internalType":"bool","name":"boolImploded","type":"bool"},{"internalType":"bool","name":"boolCollapsed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boostMGR","outputs":[{"internalType":"contract boostManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"boostit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"changeBoostManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"changeFeePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"changeGuard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_periods","type":"uint256"}],"name":"changeMaxPeriods","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"changeNeFiTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"changeOverseer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_account","type":"address"}],"name":"changeTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"string","name":"_name","type":"string"}],"name":"collapseProto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeFroze","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getBool","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getBoolCollapsed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getBoolImploded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getBoolInsolvent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getFeeFroze","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getFeesOwed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getFeesPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getFutureFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getInsolvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoCollapseDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoCreationDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoFeeFroze","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoFutureFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoIncreasedDecay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoNextDue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoTotalPayable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoowners","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getProtoownersAccountsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getProtoownersLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getProtos","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getTotalPayable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getTotalfees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getTotalfees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gracePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFeePayment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPayPeriods","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_x","type":"bool"}],"name":"pauseFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_intervals","type":"uint256"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"payFeeAvax","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_intervals","type":"uint256"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"payFeeToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_intervals","type":"uint256"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"payNeFiToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"protoLife","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"protoOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"protoowners","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"protoCreationDate","type":"uint256"},{"internalType":"uint256","name":"protoElapsed","type":"uint256"},{"internalType":"uint256","name":"protoCollapseDate","type":"uint256"},{"internalType":"uint256","name":"protoNextDue","type":"uint256"},{"internalType":"uint256","name":"protoDueElapsed","type":"uint256"},{"internalType":"uint256","name":"protoFeesPaid","type":"uint256"},{"internalType":"uint256","name":"protoFutureFees","type":"uint256"},{"internalType":"uint256","name":"protoIncreasedDecay","type":"uint256"},{"internalType":"uint256","name":"protoFeeFroze","type":"uint256"},{"internalType":"uint256","name":"protoTotalPayable","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"reconcileAccountFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reconcileFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"reconcileFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeManagers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"sendAllTokenOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalfees","outputs":[{"internalType":"uint256","name":"totalPayable","type":"uint256"},{"internalType":"uint256","name":"protos","type":"uint256"},{"internalType":"uint256","name":"feesOwed","type":"uint256"},{"internalType":"uint256","name":"futureFees","type":"uint256"},{"internalType":"uint256","name":"feesPaid","type":"uint256"},{"internalType":"uint256","name":"collapsed","type":"uint256"},{"internalType":"uint256","name":"feeFroze","type":"uint256"},{"internalType":"uint256","name":"insolvent","type":"uint256"},{"internalType":"uint256","name":"imploded","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferAllOut","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferOut","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"updateBoolCollapsed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"bool","name":"_boolImploded","type":"bool"}],"name":"updateBoolImploded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"bool","name":"_owed","type":"bool"}],"name":"updateBoolOwed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_collapsed","type":"uint256"}],"name":"updateCollapsed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_feeFroze","type":"uint256"}],"name":"updateFeeFroze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_feesOwed","type":"uint256"}],"name":"updateFeesOwed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_futureFees","type":"uint256"}],"name":"updateFutureFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_imploded","type":"uint256"}],"name":"updateImploded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_insolvent","type":"uint256"}],"name":"updateInsolvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVal","type":"address"}],"name":"updateManagers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"string","name":"_name","type":"string"}],"name":"updateName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_protoCollapseDate","type":"uint256"}],"name":"updateProtoCollapseDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_protoCreationDate","type":"uint256"}],"name":"updateProtoCreationDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_protoFeeFroze","type":"uint256"}],"name":"updateProtoFeeFroze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_protoFutureFees","type":"uint256"}],"name":"updateProtoFutureFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_protoIncreasedDecay","type":"uint256"}],"name":"updateProtoIncreasedDecay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_protoNextDue","type":"uint256"}],"name":"updateProtoNextDue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_protoTotalPayable","type":"uint256"}],"name":"updateProtoTotalPayable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_protos","type":"uint256"}],"name":"updateProtos","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_account","type":"address"}],"name":"updateRewardsPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_perc","type":"uint256[]"}],"name":"updateRewards_team_treasuryPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_account","type":"address"}],"name":"updateTeamPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_totalPayable","type":"uint256"}],"name":"updateTotalPayable","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405262069780600c9081556302932e00600d556301e13380600e55600f556228de806010556011805460ff191690556012805460ff60a01b1916600160a01b179055600060135560016014553480156200005b57600080fd5b50604051620062a5380380620062a58339810160408190526200007e91620001b8565b620000893362000135565b806001815181106200009f576200009f6200028a565b6020026020010151601760006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600281518110620000e357620000e36200028a565b6020908102919091010151601880546001600160a01b0319166001600160a01b0392831617905560005416601280546001600160a01b0319166001600160a01b039290921691909117905550620002a0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001b357600080fd5b919050565b60006020808385031215620001cc57600080fd5b82516001600160401b0380821115620001e457600080fd5b818501915085601f830112620001f957600080fd5b8151818111156200020e576200020e62000185565b8060051b604051601f19603f8301168101818110858211171562000236576200023662000185565b6040529182528482019250838101850191888311156200025557600080fd5b938501935b828510156200027e576200026e856200019b565b845293850193928501926200025a565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b615ff580620002b06000396000f3fe6080604052600436106104d55760003560e01c806396c5f95711610281578063d11895c31161015a578063e44f288c116100cc578063f2fde38b11610085578063f2fde38b146110cd578063f32bff80146110ed578063f56b4f231461110d578063f9ca8a111461117f578063fba26bbc1461119f578063fecdb2c1146111bf57600080fd5b8063e44f288c14610ffe578063e49e0cba14611037578063e84e4ccc14611057578063ea8f6d9814611077578063eebab6aa14611097578063f250ed22146110ad57600080fd5b8063db9a99281161011e578063db9a992814610ed2578063dbadca1114610ef2578063dc45ae9f14610f12578063dd10bd2c14610f32578063e0bf364714610f9b578063e1090cff14610fd157600080fd5b8063d11895c314610e32578063d2299b2414610e52578063d298479b14610e72578063d490cc0714610e92578063dadb318c14610eb257600080fd5b8063b17086f8116101f3578063bd524163116101b7578063bd52416314610cdd578063be5f667d14610cf0578063c7a96bbb14610d10578063cc96ebc614610dc7578063cde1107414610de7578063cfcf69b014610e1d57600080fd5b8063b17086f814610c14578063b3fdf9d214610c4e578063b884383314610c64578063b9cc523114610c84578063ba2e350c14610ca457600080fd5b8063a08af92111610245578063a08af92114610b5d578063a38a6dbc14610b7d578063ac3d083214610b9d578063ad23dd5614610bb3578063af76880014610bd4578063b14f2a3914610bf457600080fd5b806396c5f95714610aae5780639a4a5fec14610ace5780639a8d9b6a14610b075780639edd6e4214610b27578063a06db7dc14610b4757600080fd5b806349ca605e116103b3578063715018a6116103255780637c73b9cc116102e95780637c73b9cc146109d95780637e19494f146109f95780637ebcf69f14610a305780638da5cb5b14610a505780638e7de8b514610a6e57806393e3118a14610a8e57600080fd5b8063715018a614610938578063761733461461094d57806376890c581461096d57806378e68025146109805780637a0ee7fc146109b957600080fd5b806365876f201161037757806365876f20146108925780636653a340146108a55780636872e994146108c55780636bdd6be7146108e55780636ccc8d03146109055780636eacab121461091857600080fd5b806349ca605e146107d55780634c2f9687146107f55780634e3c1581146108155780634f89478a14610835578063647846a51461085557600080fd5b80631a7f51da1161044c578063370fce3711610410578063370fce371461071f5780633c2b2fe01461073f5780634046603a1461075f57806345d2655b1461077f57806345deeda61461079f578063476b183d146107b557600080fd5b80631a7f51da1461062e57806328d237bf146106785780632f0a32b1146106985780632faee1f1146106df5780633322c058146106ff57600080fd5b80630c2c9e4d1161049e5780630c2c9e4d1461058457806311cf4093146105a457806317e01596146105c4578063191475b5146105e4578063191c986d146105f957806319854b5c1461060e57600080fd5b80625f4417146104da57806302bf5518146104fc57806303dd07331461051c578063090e5ac31461053c57806309b6cb3014610571575b600080fd5b3480156104e657600080fd5b506104fa6104f5366004615757565b6111df565b005b34801561050857600080fd5b506104fa610517366004615783565b61129e565b34801561052857600080fd5b506104fa610537366004615783565b611378565b34801561054857600080fd5b5061055c610557366004615757565b611452565b60405190151581526020015b60405180910390f35b6104fa61057f3660046157b8565b61149b565b34801561059057600080fd5b506104fa61059f366004615801565b6114f9565b3480156105b057600080fd5b506104fa6105bf366004615783565b6115d4565b3480156105d057600080fd5b506104fa6105df366004615783565b611623565b3480156105f057600080fd5b506104fa6116fd565b34801561060557600080fd5b506104fa61177c565b34801561061a57600080fd5b506104fa6106293660046158d5565b61180a565b34801561063a57600080fd5b5061064e610649366004615757565b6118a1565b60408051941515855292151560208501529015159183019190915215156060820152608001610568565b34801561068457600080fd5b5061055c610693366004615757565b61190e565b3480156106a457600080fd5b506106d16106b336600461594b565b6001600160a01b031660009081526001602052604090206006015490565b604051908152602001610568565b3480156106eb57600080fd5b506106d16106fa366004615757565b611954565b34801561070b57600080fd5b506104fa61071a366004615968565b611998565b34801561072b57600080fd5b506104fa61073a366004615968565b6119db565b34801561074b57600080fd5b506104fa61075a36600461594b565b611a3b565b34801561076b57600080fd5b506106d161077a366004615757565b611af0565b34801561078b57600080fd5b506104fa61079a366004615981565b611b34565b3480156107ab57600080fd5b506106d160105481565b3480156107c157600080fd5b506104fa6107d0366004615757565b611bc4565b3480156107e157600080fd5b506104fa6107f0366004615757565b611c76565b34801561080157600080fd5b506104fa610810366004615757565b611d28565b34801561082157600080fd5b506104fa610830366004615a27565b611dda565b34801561084157600080fd5b5061055c610850366004615757565b611ec2565b34801561086157600080fd5b5060115461087a9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610568565b6104fa6108a0366004615783565b611f07565b3480156108b157600080fd5b506104fa6108c036600461594b565b6120b6565b3480156108d157600080fd5b506104fa6108e0366004615757565b612102565b3480156108f157600080fd5b5060165461087a906001600160a01b031681565b6104fa610913366004615757565b6121b4565b34801561092457600080fd5b506104fa61093336600461594b565b612213565b34801561094457600080fd5b506104fa61225f565b34801561095957600080fd5b506104fa610968366004615a69565b612295565b6104fa61097b366004615757565b612399565b34801561098c57600080fd5b506106d161099b36600461594b565b6001600160a01b031660009081526001602052604090206002015490565b3480156109c557600080fd5b506104fa6109d4366004615757565b6123f9565b3480156109e557600080fd5b506104fa6109f4366004615a27565b6124ac565b348015610a0557600080fd5b50610a19610a14366004615757565b61258b565b6040516105689b9a99989796959493929190615aef565b348015610a3c57600080fd5b506106d1610a4b366004615757565b61268a565b348015610a5c57600080fd5b506000546001600160a01b031661087a565b348015610a7a57600080fd5b5061064e610a89366004615757565b6126ce565b348015610a9a57600080fd5b506106d1610aa9366004615757565b61271a565b348015610aba57600080fd5b506104fa610ac9366004615757565b61275e565b348015610ada57600080fd5b506106d1610ae936600461594b565b6001600160a01b031660009081526001602052604090206003015490565b348015610b1357600080fd5b506106d1610b22366004615757565b612810565b348015610b3357600080fd5b506104fa610b42366004615783565b612854565b348015610b5357600080fd5b506106d1600c5481565b348015610b6957600080fd5b506104fa610b78366004615801565b61292e565b348015610b8957600080fd5b506104fa610b98366004615783565b61296b565b348015610ba957600080fd5b506106d1600f5481565b348015610bbf57600080fd5b5060125461055c90600160a01b900460ff1681565b348015610be057600080fd5b506104fa610bef366004615783565b612a45565b348015610c0057600080fd5b506104fa610c0f36600461594b565b612b1f565b348015610c2057600080fd5b506106d1610c2f36600461594b565b6001600160a01b03166000908152600160208190526040909120015490565b348015610c5a57600080fd5b506106d1600e5481565b348015610c7057600080fd5b506106d1610c7f366004615757565b612b6b565b348015610c9057600080fd5b5061087a610c9f366004615968565b612baf565b348015610cb057600080fd5b506106d1610cbf36600461594b565b6001600160a01b031660009081526001602052604090206004015490565b6104fa610ceb3660046157b8565b612bd9565b348015610cfc57600080fd5b506106d1610d0b366004615757565b612c36565b348015610d1c57600080fd5b50610d83610d2b366004615757565b506001600160a01b031660009081526001602081905260409091208054918101546002820154600383015460048401546005850154600686015460078701546008909701549798959794969395929491939092909190565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e083015261010082015261012001610568565b348015610dd357600080fd5b506104fa610de2366004615783565b612c7a565b348015610df357600080fd5b50610e07610e02366004615757565b612d54565b6040516105689a99989796959493929190615b52565b348015610e2957600080fd5b506004546106d1565b348015610e3e57600080fd5b506104fa610e4d36600461594b565b612e92565b348015610e5e57600080fd5b5061087a610e6d366004615968565b612ede565b348015610e7e57600080fd5b506104fa610e8d366004615bac565b612f0e565b348015610e9e57600080fd5b506104fa610ead36600461594b565b612fce565b348015610ebe57600080fd5b5060075461087a906001600160a01b031681565b348015610ede57600080fd5b506104fa610eed366004615a27565b6130b5565b348015610efe57600080fd5b5061087a610f0d366004615968565b61319f565b348015610f1e57600080fd5b506104fa610f2d36600461594b565b6131af565b348015610f3e57600080fd5b50610d83610f4d36600461594b565b60016020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b348015610fa757600080fd5b506106d1610fb636600461594b565b6001600160a01b031660009081526001602052604090205490565b348015610fdd57600080fd5b50610ff1610fec366004615757565b613205565b6040516105689190615bfb565b34801561100a57600080fd5b506106d161101936600461594b565b6001600160a01b031660009081526001602052604090206007015490565b34801561104357600080fd5b506104fa611052366004615c0e565b6132d5565b34801561106357600080fd5b5061055c611072366004615c0e565b613397565b34801561108357600080fd5b506104fa61109236600461594b565b6133aa565b3480156110a357600080fd5b506106d1600d5481565b3480156110b957600080fd5b506104fa6110c836600461594b565b6133f2565b3480156110d957600080fd5b506104fa6110e836600461594b565b61343e565b3480156110f957600080fd5b506106d161110836600461594b565b6134d6565b34801561111957600080fd5b50610d8361112836600461594b565b6001600160a01b031660009081526001602081905260409091208054918101546002820154600383015460048401546005850154600686015460078701546008909701549798959794969395929491939092909190565b34801561118b57600080fd5b506104fa61119a366004615757565b6134f4565b3480156111ab57600080fd5b506104fa6111ba366004615757565b6135a6565b3480156111cb57600080fd5b506104fa6111da366004615c0e565b6135ef565b6000546001600160a01b031633148061125d575061125d600580548060200260200160405190810160405280929190818152602001828054801561124c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161122e575b50505050506112583390565b613638565b6112825760405162461bcd60e51b815260040161127990615c5e565b60405180910390fd5b6001600160a01b03909116600090815260016020526040902055565b6000546001600160a01b03163314806113155750611315600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b6113315760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b038316600090815260026020526040902080548291908490811061135e5761135e615c83565b90600052602060002090600b020160030181905550505050565b6000546001600160a01b03163314806113ef57506113ef600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b61140b5760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b038316600090815260026020526040902080548291908490811061143857611438615c83565b90600052602060002090600b0201600a0181905550505050565b6001600160a01b038216600090815260036020526040812080548390811061147c5761147c615c83565b6000918252602090912001546301000000900460ff1690505b92915050565b6015546001600160a01b03163314806114be57506000546001600160a01b031633145b6114da5760405162461bcd60e51b815260040161127990615c99565b6007546114f3906001600160a01b03168286868661369d565b50505050565b6000546001600160a01b031633146115235760405162461bcd60e51b815260040161127990615cbc565b6012805460ff60a01b1916600160a01b831515021790554260005b6004548110156115c65760006004828154811061155d5761155d615c83565b60009182526020822001546001600160a01b031691505b6001600160a01b0382166000908152600260205260409020548110156115b15761159f828286613916565b806115a981615d07565b915050611574565b505080806115be90615d07565b91505061153e565b506115d081613ae9565b5050565b6015546001600160a01b03163314806115f757506000546001600160a01b031633145b6116135760405162461bcd60e51b815260040161127990615c99565b61161e838383613b2d565b505050565b6000546001600160a01b031633148061169a575061169a600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b6116b65760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b03831660009081526002602052604090208054829190849081106116e3576116e3615c83565b90600052602060002090600b020160090181905550505050565b6000546001600160a01b031633146117275760405162461bcd60e51b815260040161127990615cbc565b60005b60055481101561177957600580548061174557611745615d20565b600082815260209020810160001990810180546001600160a01b03191690550190558061177181615d07565b91505061172a565b50565b6015546001600160a01b031633148061179f57506000546001600160a01b031633145b6117bb5760405162461bcd60e51b815260040161127990615c99565b60005b600454811015611779576117f8600482815481106117de576117de615c83565b6000918252602090912001546001600160a01b0316613ba0565b8061180281615d07565b9150506117be565b6015546001600160a01b031633148061182d57506000546001600160a01b031633145b6118495760405162461bcd60e51b815260040161127990615c99565b6001600160a01b0383166000908152600260205260409020819061186d8585613bfb565b8154811061187d5761187d615c83565b90600052602060002090600b020160000190805190602001906114f39291906155f8565b6001600160a01b038216600090815260036020526040812080548291829182919082908290889081106118d6576118d6615c83565b60009182526020909120015460ff8082169a610100830482169a50620100008304821699506301000000909204169650945050505050565b6001600160a01b038216600090815260036020526040812080548390811061193857611938615c83565b60009182526020909120015462010000900460ff169392505050565b6001600160a01b038216600090815260026020526040812080548390811061197e5761197e615c83565b90600052602060002090600b020160070154905092915050565b6000546001600160a01b031633146119c25760405162461bcd60e51b815260040161127990615cbc565b600f8190556010546119d5908290613c8d565b600e5550565b6000546001600160a01b03163314611a055760405162461bcd60e51b815260040161127990615cbc565b6000611a15601054600e54613c99565b9050611a248262015180613c8d565b6010819055611a34908290613c8d565b600e555050565b6000546001600160a01b0316331480611ab25750611ab2600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b611ace5760405162461bcd60e51b815260040161127990615c5e565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382166000908152600260205260408120805483908110611b1a57611b1a615c83565b90600052602060002090600b020160010154905092915050565b6000546001600160a01b03163314611b5e5760405162461bcd60e51b815260040161127990615cbc565b80600081518110611b7157611b71615c83565b6020026020010151600a8190555080600181518110611b9257611b92615c83565b602002602001015160088190555080600281518110611bb357611bb3615c83565b6020026020010151600b8190555050565b6000546001600160a01b0316331480611c3b5750611c3b600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b611c575760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b03909116600090815260016020526040902060080155565b6000546001600160a01b0316331480611ced5750611ced600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b611d095760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b03909116600090815260016020526040902060020155565b6000546001600160a01b0316331480611d9f5750611d9f600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b611dbb5760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b03909116600090815260016020526040902060070155565b6000546001600160a01b0316331480611e515750611e51600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b611e6d5760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b0383166000908152600360205260409020805482919084908110611e9a57611e9a615c83565b60009182526020909120018054911515620100000262ff000019909216919091179055505050565b6001600160a01b0382166000908152600360205260408120805483908110611eec57611eec615c83565b600091825260209091200154610100900460ff169392505050565b6015546001600160a01b0316331480611f2a57506000546001600160a01b031633145b611f465760405162461bcd60e51b815260040161127990615c99565b60065460085434916001600160a01b0316906108fc90611f67908490613cb2565b6040518115909202916000818181858888f19350505050158015611f8f573d6000803e3d6000fd5b50600954600a546001600160a01b03909116906108fc90611fb1908490613cb2565b6040518115909202916000818181858888f19350505050158015611fd9573d6000803e3d6000fd5b50601254600b546001600160a01b03909116906108fc90611ffb908490613cb2565b6040518115909202916000818181858888f19350505050158015612023573d6000803e3d6000fd5b50600061206061203583600854613cb2565b61205a61204485600a54613cb2565b61205a61205387600b54613cb2565b8790613d58565b90613d58565b905080156120a4576012546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156120a2573d6000803e3d6000fd5b505b6120af858585613b2d565b5050505050565b6000546001600160a01b031633146120e05760405162461bcd60e51b815260040161127990615cbc565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314806121795750612179600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b6121955760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b03909116600090815260016020526040902060060155565b6000546001600160a01b031633146121de5760405162461bcd60e51b815260040161127990615cbc565b6040516001600160a01b038316904780156108fc02916000818181858888f1935050505015801561161e573d6000803e3d6000fd5b6000546001600160a01b0316331461223d5760405162461bcd60e51b815260040161127990615cbc565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146122895760405162461bcd60e51b815260040161127990615cbc565b6122936000613d64565b565b6000546001600160a01b031633146122bf5760405162461bcd60e51b815260040161127990615cbc565b6018546040516370a0823160e01b8152306004820181905283926001600160a01b0316916323b872dd9190869084906370a0823190602401602060405180830381865afa158015612314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123389190615d36565b6040518463ffffffff1660e01b815260040161235693929190615d4f565b6020604051808303816000875af1158015612375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f39190615d73565b6000546001600160a01b031633146123c35760405162461bcd60e51b815260040161127990615cbc565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561161e573d6000803e3d6000fd5b6000546001600160a01b03163314806124705750612470600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b61248c5760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b0390911660009081526001602081905260409091200155565b6000546001600160a01b03163314806125235750612523600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b61253f5760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b038316600090815260036020526040902080548291908490811061256c5761256c615c83565b6000918252602090912001805460ff1916911515919091179055505050565b600260205281600052604060002081815481106125a757600080fd5b90600052602060002090600b0201600091509150508060000180546125cb90615d90565b80601f01602080910402602001604051908101604052809291908181526020018280546125f790615d90565b80156126445780601f1061261957610100808354040283529160200191612644565b820191906000526020600020905b81548152906001019060200180831161262757829003601f168201915b50505050509080600101549080600201549080600301549080600401549080600501549080600601549080600701549080600801549080600901549080600a015490508b565b6001600160a01b03821660009081526002602052604081208054839081106126b4576126b4615c83565b90600052602060002090600b0201600a0154905092915050565b600360205281600052604060002081815481106126ea57600080fd5b60009182526020909120015460ff8082169350610100820481169250620100008204811691630100000090041684565b6001600160a01b038216600090815260026020526040812080548390811061274457612744615c83565b90600052602060002090600b020160040154905092915050565b6000546001600160a01b03163314806127d557506127d5600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b6127f15760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b03909116600090815260016020526040902060030155565b6001600160a01b038216600090815260026020526040812080548390811061283a5761283a615c83565b90600052602060002090600b020160030154905092915050565b6000546001600160a01b03163314806128cb57506128cb600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b6128e75760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b038316600090815260026020526040902080548291908490811061291457612914615c83565b90600052602060002090600b020160040181905550505050565b6000546001600160a01b031633146129585760405162461bcd60e51b815260040161127990615cbc565b6011805460ff1916911515919091179055565b6000546001600160a01b03163314806129e257506129e2600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b6129fe5760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b0383166000908152600260205260409020805482919084908110612a2b57612a2b615c83565b90600052602060002090600b020160080181905550505050565b6000546001600160a01b0316331480612abc5750612abc600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b612ad85760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b0383166000908152600260205260409020805482919084908110612b0557612b05615c83565b90600052602060002090600b020160010181905550505050565b6000546001600160a01b03163314612b495760405162461bcd60e51b815260040161127990615cbc565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382166000908152600260205260408120805483908110612b9557612b95615c83565b90600052602060002090600b020160090154905092915050565b60058181548110612bbf57600080fd5b6000918252602090912001546001600160a01b0316905081565b6015546001600160a01b0316331480612bfc57506000546001600160a01b031633145b612c185760405162461bcd60e51b815260040161127990615c99565b6011546114f39061010090046001600160a01b03168286868661369d565b6001600160a01b0382166000908152600260205260408120805483908110612c6057612c60615c83565b90600052602060002090600b020160080154905092915050565b6000546001600160a01b0316331480612cf15750612cf1600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b612d0d5760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b0383166000908152600260205260409020805482919084908110612d3a57612d3a615c83565b90600052602060002090600b020160070181905550505050565b6060600080600080600080600080600080600260008e6001600160a01b03166001600160a01b0316815260200190815260200160002090506000818d81548110612da057612da0615c83565b90600052602060002090600b02019050806000018160010154826002015483600301548460040154856005015486600701548760080154886009015489600a0154898054612ded90615d90565b80601f0160208091040260200160405190810160405280929190818152602001828054612e1990615d90565b8015612e665780601f10612e3b57610100808354040283529160200191612e66565b820191906000526020600020905b815481529060010190602001808311612e4957829003601f168201915b505050505099509b509b509b509b509b509b509b509b509b509b5050509295989b9194979a5092959850565b6000546001600160a01b03163314612ebc5760405162461bcd60e51b815260040161127990615cbc565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b600060048281548110612ef357612ef3615c83565b6000918252602090912001546001600160a01b031692915050565b6000546001600160a01b0316331480612f855750612f85600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b612fa15760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b038316600090815260026020526040902080548291908490811061187d5761187d615c83565b6000546001600160a01b03163314612ff85760405162461bcd60e51b815260040161127990615cbc565b61305c600580548060200260200160405190810160405280929190818152602001828054801561305157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613033575b505050505082613638565b151560000361177957600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0383166001600160a01b031990911617905550565b6000546001600160a01b031633148061312c575061312c600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b6131485760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b038316600090815260036020526040902080548291908490811061317557613175615c83565b6000918252602090912001805491151563010000000263ff00000019909216919091179055505050565b60048181548110612bbf57600080fd5b6000546001600160a01b031633146131d95760405162461bcd60e51b815260040161127990615cbc565b600780546001600160a01b039092166001600160a01b0319928316811790915560198054909216179055565b6001600160a01b03821660009081526002602052604090208054606091908390811061323357613233615c83565b90600052602060002090600b0201600001805461324f90615d90565b80601f016020809104026020016040519081016040528092919081815260200182805461327b90615d90565b80156132c85780601f1061329d576101008083540402835291602001916132c8565b820191906000526020600020905b8154815290600101906020018083116132ab57829003601f168201915b5050505050905092915050565b6015546001600160a01b03163314806132f857506000546001600160a01b031633145b6133145760405162461bcd60e51b815260040161127990615c99565b61331e8282613db4565b15156001146133845760405162461bcd60e51b815260206004820152602c60248201527f7468652070726f746f20746f20626520636f6c6c617073656420636f756c642060448201526b1b9bdd08189948199bdd5b9960a21b6064820152608401611279565b6115d0826133928484613bfb565b613e4b565b60006133a38383613db4565b9392505050565b6015546001600160a01b03163314806133cd57506000546001600160a01b031633145b6133e95760405162461bcd60e51b815260040161127990615c99565b61177981613ba0565b6000546001600160a01b0316331461341c5760405162461bcd60e51b815260040161127990615cbc565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146134685760405162461bcd60e51b815260040161127990615cbc565b6001600160a01b0381166134cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611279565b61177981613d64565b6001600160a01b038116600090815260026020526040812054611495565b6000546001600160a01b031633148061356b575061356b600580548060200260200160405190810160405280929190818152602001828054801561124c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161122e5750505050506112583390565b6135875760405162461bcd60e51b815260040161127990615c5e565b6001600160a01b03909116600090815260016020526040902060050155565b6015546001600160a01b03163314806135c957506000546001600160a01b031633145b6135e55760405162461bcd60e51b815260040161127990615c99565b6115d0828261412c565b6015546001600160a01b031633148061361257506000546001600160a01b031633145b61362e5760405162461bcd60e51b815260040161127990615c99565b6115d08282614186565b6000805b83518110156136935783818151811061365757613657615c83565b60200260200101516001600160a01b0316836001600160a01b031603613681576001915050611495565b8061368b81615d07565b91505061363c565b5060009392505050565b60065460085486916001600160a01b03808416926323b872dd92889216906136c6908a90613cb2565b6040518463ffffffff1660e01b81526004016136e493929190615d4f565b6020604051808303816000875af1158015613703573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137279190615d73565b50806001600160a01b03166323b872dd85600960009054906101000a90046001600160a01b031661375a89600a54613cb2565b6040518463ffffffff1660e01b815260040161377893929190615d4f565b6020604051808303816000875af1158015613797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bb9190615d73565b50806001600160a01b03166323b872dd85601260009054906101000a90046001600160a01b03166137ee89600b54613cb2565b6040518463ffffffff1660e01b815260040161380c93929190615d4f565b6020604051808303816000875af115801561382b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061384f9190615d73565b50600061388661386187600b54613cb2565b61205a61387089600a54613cb2565b61205a61387f8b600854613cb2565b8b90613d58565b6012546040516323b872dd60e01b81529192506001600160a01b03808516926323b872dd926138be928a929116908690600401615d4f565b6020604051808303816000875af11580156138dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139019190615d73565b5061390d858585613b2d565b50505050505050565b601254600160a01b900460ff1615801561394457506013543060009081526001602052604090206006015414155b15613a8a5761397e6139776139683060009081526001602052604090206006015490565b6139728686611af0565b61444d565b8290613d58565b6001600160a01b03841660009081526002602052604090208054849081106139a8576139a8615c83565b90600052602060002090600b020160090181905550613a11838360026000876001600160a01b03166001600160a01b0316815260200190815260200160002085815481106139f8576139f8615c83565b90600052602060002090600b0201600901546001614486565b613a2d6139773060009081526001602052604090206006015490565b6001600160a01b03841660009081526001602052604081206006018054909190613a58908490615dc4565b90915550506013546001600160a01b03841660009081526002602052604090208054849081106116e3576116e3615c83565b601254600160a01b900460ff16151560010361161e57613abf6139776139683060009081526001602052604090206006015490565b6001600160a01b03841660009081526002602052604090208054849081106116e3576116e3615c83565b601254600160a01b900460ff161515600003613b18576013543060009081526001602052604090206006015550565b30600090815260016020526040902060060155565b80606503613b6e5760005b82811015613b6857613b56846001613b4f87614562565b600161467c565b80613b6081615d07565b915050613b38565b50613b9b565b60005b82811015613b9957613b8784600184600161467c565b80613b9181615d07565b915050613b71565b505b61161e835b60005b6001600160a01b038216600090815260026020526040902054811015613bdf57613bcd828261412c565b80613bd781615d07565b915050613ba3565b50613be98161489c565b613bf281614a53565b61177981614ba3565b6001600160a01b0382166000908152600260205260408120815b8154811015613c85576000828281548110613c3257613c32615c83565b90600052602060002090600b02019050848051906020012081600001604051613c5b9190615ddc565b604051809103902003613c72575091506114959050565b5080613c7d81615d07565b915050613c15565b505092915050565b60006133a38284615e77565b6000806000613ca88585614ce4565b5095945050505050565b600080613cbe84614d43565b90506000613ccb84614d43565b90506000613cda826015615e96565b90506000613ce786614d6c565b60408051606081018252868152602081018590529081018290529091506000613d1b613d1485600a615f91565b8a90613c8d565b90506000613d29828a613c8d565b9050613d4a613d388787615dc4565b613d4390600a615f91565b8290614dd2565b9a9950505050505050505050565b60006133a38284615e96565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166000908152600260205260408120815b8154811015613e40576000828281548110613deb57613deb615c83565b90600052602060002090600b02019050848051906020012081600001604051613e149190615ddc565b604051809103902003613e2d5760019350505050611495565b5080613e3881615d07565b915050613dce565b506000949350505050565b6001600160a01b038216600090815260026020908152604080832060039092529091208054819084908110613e8257613e82615c83565b6000918252602090912001546301000000900460ff161515600103613eab57613eab8484614dde565b825b8254811015614072578254613ec490600190615e96565b8114614060576000838281548110613ede57613ede615c83565b600091825260208220600b90910201915084613efb846001615dc4565b81548110613f0b57613f0b615c83565b90600052602060002090600b020190506000848481548110613f2f57613f2f615c83565b60009182526020822001915085613f47866001615dc4565b81548110613f5757613f57615c83565b9060005260206000200190508260000184600001908054613f7790615d90565b613f8292919061567c565b506001808401549085015560028084015490850155600380840154908501556004808401549085015560058084015490850155600780840154908501556008808401549085015560098084015490850155600a9283015492909301919091558154815460ff918216151560ff19821681178455845461010090819004841615150261ff001990911661ffff19909216919091171780835583546201000090819004831615150262ff0000198216811784559354630100000090819004909216151590910263ff0000001990931663ffff000019909116179190911790555b8061406a81615d07565b915050613ead565b508180548061408357614083615d20565b60008281526020812060001990920191600b830201906140a382826156f7565b600182016000905560028201600090556003820160009055600482016000905560058201600090556006820160009055600782016000905560088201600090556009820160009055600a820160009055505090558080548061410757614107615d20565b6000828152602090208101600019908101805463ffffffff1916905501905550505050565b6141368282614ee3565b6141408282614fd9565b61414b828242613916565b6141558282615099565b61415f82826150fd565b6141688261489c565b61417282826151c3565b61417c8282615263565b6115d082826152bb565b60004290506141ef60048054806020026020016040519081016040528092919081815260200182805480156141e457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116141c6575b505050505084613638565b151560000361424457600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0385161790555b601354600d5460009061425890429061535e565b6001600160a01b038616600090815260026020526040812080549293509161428190600161535e565b604080516101608101825288815242602080830182905260135493830184905260608301889052608083019190915260a0820183905260c0820183905260e082018390526101008201839052610120820192909252600f5461014082015284546001810186556000868152839020825180519596509294600b909202019261430d9284929101906155f8565b506020828101516001808401919091556040808501516002850155606080860151600380870191909155608080880151600488015560a0880151600588015560c0880151600688015560e08801516007880155610100808901516008890155610120890151600989015561014090980151600a909701969096556001600160a01b038e1660009081529085528281208351968701845281875286860182815293870182815292870182815281548087018355828452969092209651969095018054935192519151151563010000000263ff0000001992151562010000029290921663ffff00001993151590980261ff00199715159790971661ffff19909416939093179590951716949094179290921790925560145461442e918a9161536a565b61444388600161443e8582613d58565b613b2d565b5050505050505050565b6000614459838361542d565b151560011480614474575061446e8383615463565b15156001145b15614480575081611495565b50919050565b8015156000036144e8576001600160a01b03841660009081526002602052604090208054839190859081106144bd576144bd615c83565b90600052602060002090600b020160040160008282546144dd9190615e96565b9091555061453b9050565b6001600160a01b038416600090815260026020526040902080548391908590811061451557614515615c83565b90600052602060002090600b020160040160008282546145359190615dc4565b90915550505b61454584846151c3565b61454e8461489c565b6145588484615263565b6114f384846152bb565b600080600080614573856000615475565b905061457e85613ba0565b60005b6001600160a01b038616600090815260026020526040902054811015614672576145ab8682615475565b935081841080156145fe57506001600160a01b03861660009081526003602052604090208054829081106145e1576145e1615c83565b6000918252602090912001546301000000900460ff161515600114155b801561464b57506001600160a01b038616600090815260036020526040902080548290811061462f5761462f615c83565b60009182526020909120015462010000900460ff161515600114155b156146605780925061465d8682615475565b91505b8061466a81615d07565b915050614581565b5090949350505050565b821515600103614791576001600160a01b03841660009081526002602052604090208054829190849081106146b3576146b3615c83565b90600052602060002090600b020160060160008282546146d39190615dc4565b90915550506010546146e59082613c8d565b6001600160a01b038516600090815260026020526040902080548490811061470f5761470f615c83565b90600052602060002090600b0201600401600082825461472f9190615dc4565b90915550506001600160a01b0384166000908152600160205260408120600401805483929061475f908490615dc4565b90915550503060009081526001602052604081206004018054839290614786908490615dc4565b909155506114f39050565b6001600160a01b03841660009081526002602052604090208054829190849081106147be576147be615c83565b90600052602060002090600b020160060160008282546147de9190615e96565b90915550506010546147f09082613c8d565b6001600160a01b038516600090815260026020526040902080548490811061481a5761481a615c83565b90600052602060002090600b0201600401600082825461483a9190615e96565b90915550506001600160a01b0384166000908152600160205260408120600401805483929061486a908490615e96565b90915550503060009081526001602052604081206004018054839290614891908490615e96565b909155505050505050565b6001600160a01b038116600090815260016020526040808220600290810154308452918320018054919290916148d3908490615e96565b90915550506013546001600160a01b0382166000908152600160205260408120600201919091555b6001600160a01b03821660009081526001602081905260409091200154811015614a135760105461492c8383615475565b10156149bc576001600160a01b03821660009081526003602052604090208054600191908390811061496057614960615c83565b6000918252602080832091909101805460ff1916931515939093179092556001600160a01b03841681526001918290526040812060020180549091906149a7908490615dc4565b909155506149b7905082826151c3565b614a01565b6001600160a01b03821660009081526003602052604081208054839081106149e6576149e6615c83565b6000918252602090912001805460ff19169115159190911790555b80614a0b81615d07565b9150506148fb565b506001600160a01b03811660009081526001602052604080822060029081015430845291832001805491929091614a4b908490615dc4565b909155505050565b6001600160a01b03811660009081526001602052604080822060039081015430845291832001805491929091614a8a908490615e96565b90915550506013546001600160a01b0382166000908152600160205260408120600301919091555b6001600160a01b03821660009081526001602081905260409091200154811015614b6b576001600160a01b0382166000908152600260205260409020805482908110614b0057614b00615c83565b90600052602060002090600b02016007015460016000846001600160a01b03166001600160a01b031681526020019081526020016000206003016000828254614b499190615dc4565b90915550614b5990508282615263565b80614b6381615d07565b915050614ab2565b506001600160a01b03811660009081526001602052604080822060039081015430845291832001805491929091614a4b908490615dc4565b6001600160a01b03811660009081526001602052604080822054308352908220805491929091614bd4908490615e96565b90915550506013546001600160a01b0382166000908152600160205260408120919091555b6001600160a01b03821660009081526001602081905260409091200154811015614cb2576001600160a01b0382166000908152600260205260409020805482908110614c4757614c47615c83565b90600052602060002090600b0201600a015460016000846001600160a01b03166001600160a01b031681526020019081526020016000206000016000828254614c909190615dc4565b90915550614ca0905082826152bb565b80614caa81615d07565b915050614bf9565b506001600160a01b03811660009081526001602052604080822054308352908220805491929091614a4b908490615dc4565b60008080831580614cf457508085145b80614cfe57508385115b15614d0d579150829050614d3c565b8360005b868210614d3657614d228783615e96565b915080614d2e81615d07565b915050614d11565b93509150505b9250929050565b6000805b821561149557614d5883600a614dd2565b925080614d6481615d07565b915050614d47565b600080614d7883614d43565b905080806000805b81158015614d8d57508215155b15614dc857614d9d600184615e96565b9250614db4614dad84600a615f91565b8890614dd2565b9150614dc1600182615dc4565b9050614d80565b9695505050505050565b60006133a38284615f9d565b6001600160a01b0382166000908152600360205260409020805482908110614e0857614e08615c83565b6000918252602090912001546301000000900460ff1615156001146115d0576001600160a01b038216600090815260036020526040902080546001919083908110614e5557614e55615c83565b60009182526020808320909101805493151563010000000263ff00000019909416939093179092556001600160a01b0384168152600191829052604081206005018054909190614ea6908490615dc4565b90915550503060009081526001602081905260408220600501805491929091614ed0908490615dc4565b909155506115d09050826000600161536a565b60115460ff161515600103614fac576016546040516357e094a360e11b81526001600160a01b038481166004830152602482018490529091169063afc12946906044016020604051808303816000875af1158015614f45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f699190615d36565b6001600160a01b0383166000908152600260205260409020805483908110614f9357614f93615c83565b90600052602060002090600b0201600801819055505050565b6013546001600160a01b0383166000908152600260205260409020805483908110614f9357614f93615c83565b615002614ff2614fe98484612c36565b600d549061535e565b614ffc8484611af0565b9061535e565b6001600160a01b038316600090815260026020526040902080548390811061502c5761502c615c83565b90600052602060002090600b0201600301819055504260026000846001600160a01b03166001600160a01b03168152602001908152602001600020828154811061507857615078615c83565b90600052602060002090600b020160030154116115d0576115d08282614dde565b6150ba6150a68383612c36565b614ffc6150b38585611af0565b4290613d58565b6001600160a01b03831660009081526002602052604090208054839081106150e4576150e4615c83565b90600052602060002090600b0201600201819055505050565b600061511661510c848461271a565b614ffc8585612b6b565b905061512281426154b9565b1515600103615175576001600160a01b038316600090815260026020526040902080548390811061515557615155615c83565b50600052600c546151664283613d58565b106151755761517583836154cb565b61517f8142613d58565b6001600160a01b03841660009081526002602052604090208054849081106151a9576151a9615c83565b90600052602060002090600b020160050181905550505050565b60006151cf8383615475565b1115615224576001600160a01b03821660009081526003602052604081208054839081106151ff576151ff615c83565b600091825260209091200180549115156101000261ff00199092169190911790555050565b61522e8282615475565b6000036115d0576001600160a01b0382166000908152600360205260409020805460019190839081106151ff576151ff615c83565b6152786010546152738484615475565b613c99565b6001600160a01b03831660009081526002602052604090208054839081106152a2576152a2615c83565b90600052602060002090600b0201600701819055505050565b6001600160a01b0382166000908152600260205260409020805461531b9190839081106152ea576152ea615c83565b90600052602060002090600b02016007015461205a6010546152736153134261205a8989612810565b600e546155d7565b6001600160a01b038316600090815260026020526040902080548390811061534557615345615c83565b90600052602060002090600b0201600a01819055505050565b60006133a38284615dc4565b8115156000036153d1576001600160a01b0383166000908152600160208190526040822001805483929061539f908490615e96565b909155505030600090815260016020819052604082200180548392906153c6908490615e96565b9091555061161e9050565b6001600160a01b038316600090815260016020819052604082200180548392906153fc908490615dc4565b90915550503060009081526001602081905260408220018054839290615423908490615dc4565b9091555050505050565b600061543983836154b9565b15801561544d575061544b8383615463565b155b1561545a57506001611495565b50600092915050565b60008183111561545a57506001611495565b6001600160a01b038216600090815260026020526040812080548390811061549f5761549f615c83565b90600052602060002090600b020160050154905092915050565b60008183101561545a57506001611495565b6001600160a01b03821660009081526003602052604090208054829081106154f5576154f5615c83565b60009182526020909120015462010000900460ff1615156001146115d0576001600160a01b03821660009081526003602052604090208054600191908390811061554157615541615c83565b600091825260208083209091018054931515620100000262ff000019909416939093179092556001600160a01b0384168152600191829052604081206007018054909190615590908490615dc4565b909155505030600090815260016020819052604082206007018054919290916155ba908490615dc4565b909155506155cd9050826000600161536a565b6115d08282613e4b565b60006155e3838361542d565b151560011480614474575061446e83836154b9565b82805461560490615d90565b90600052602060002090601f016020900481019282615626576000855561566c565b82601f1061563f57805160ff191683800117855561566c565b8280016001018555821561566c579182015b8281111561566c578251825591602001919060010190615651565b5061567892915061572d565b5090565b82805461568890615d90565b90600052602060002090601f0160209004810192826156aa576000855561566c565b82601f106156bb578054855561566c565b8280016001018555821561566c57600052602060002091601f016020900482015b8281111561566c5782548255916001019190600101906156dc565b50805461570390615d90565b6000825580601f10615713575050565b601f01602090049060005260206000209081019061177991905b5b80821115615678576000815560010161572e565b6001600160a01b038116811461177957600080fd5b6000806040838503121561576a57600080fd5b823561577581615742565b946020939093013593505050565b60008060006060848603121561579857600080fd5b83356157a381615742565b95602085013595506040909401359392505050565b600080600080608085870312156157ce57600080fd5b84356157d981615742565b966020860135965060408601359560600135945092505050565b801515811461177957600080fd5b60006020828403121561581357600080fd5b81356133a3816157f3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561585d5761585d61581e565b604052919050565b600082601f83011261587657600080fd5b813567ffffffffffffffff8111156158905761589061581e565b6158a3601f8201601f1916602001615834565b8181528460208386010111156158b857600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156158ea57600080fd5b83356158f581615742565b9250602084013567ffffffffffffffff8082111561591257600080fd5b61591e87838801615865565b9350604086013591508082111561593457600080fd5b5061594186828701615865565b9150509250925092565b60006020828403121561595d57600080fd5b81356133a381615742565b60006020828403121561597a57600080fd5b5035919050565b6000602080838503121561599457600080fd5b823567ffffffffffffffff808211156159ac57600080fd5b818501915085601f8301126159c057600080fd5b8135818111156159d2576159d261581e565b8060051b91506159e3848301615834565b81815291830184019184810190888411156159fd57600080fd5b938501935b83851015615a1b57843582529385019390850190615a02565b98975050505050505050565b600080600060608486031215615a3c57600080fd5b8335615a4781615742565b9250602084013591506040840135615a5e816157f3565b809150509250925092565b60008060408385031215615a7c57600080fd5b8235615a8781615742565b91506020830135615a9781615742565b809150509250929050565b6000815180845260005b81811015615ac857602081850181015186830182015201615aac565b81811115615ada576000602083870101525b50601f01601f19169290920160200192915050565b6000610160808352615b038184018f615aa2565b602084019d909d52505060408101999099526060890197909752608088019590955260a087019390935260c086019190915260e085015261010084015261012083015261014090910152919050565b6000610140808352615b668184018e615aa2565b602084019c909c52505060408101989098526060880196909652608087019490945260a086019290925260c085015260e084015261010083015261012090910152919050565b600080600060608486031215615bc157600080fd5b8335615bcc81615742565b925060208401359150604084013567ffffffffffffffff811115615bef57600080fd5b61594186828701615865565b6020815260006133a36020830184615aa2565b60008060408385031215615c2157600080fd5b8235615c2c81615742565b9150602083013567ffffffffffffffff811115615c4857600080fd5b615c5485828601615865565b9150509250929050565b6020808252600b908201526a2727aa2fa6b0b730b3b2b960a91b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252600990820152681393d517d1d550549160ba1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600060018201615d1957615d19615cf1565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600060208284031215615d4857600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215615d8557600080fd5b81516133a3816157f3565b600181811c90821680615da457607f821691505b60208210810361448057634e487b7160e01b600052602260045260246000fd5b60008219821115615dd757615dd7615cf1565b500190565b600080835481600182811c915080831680615df857607f831692505b60208084108203615e1757634e487b7160e01b86526022600452602486fd5b818015615e2b5760018114615e3c57615e69565b60ff19861689528489019650615e69565b60008a81526020902060005b86811015615e615781548b820152908501908301615e48565b505084890196505b509498975050505050505050565b6000816000190483118215151615615e9157615e91615cf1565b500290565b600082821015615ea857615ea8615cf1565b500390565b600181815b80851115615ee8578160001904821115615ece57615ece615cf1565b80851615615edb57918102915b93841c9390800290615eb2565b509250929050565b600082615eff57506001611495565b81615f0c57506000611495565b8160018114615f225760028114615f2c57615f48565b6001915050611495565b60ff841115615f3d57615f3d615cf1565b50506001821b611495565b5060208310610133831016604e8410600b8410161715615f6b575081810a611495565b615f758383615ead565b8060001904821115615f8957615f89615cf1565b029392505050565b60006133a38383615ef0565b600082615fba57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122016f12d329f7873a6f8161f09e93ff8d1a74c05d2a7d57491fece180b9a7ce8fc64736f6c634300080d003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000c00e5e886e571c5451766289e3fe73bd2ffa0a5a000000000000000000000000dfd6fa1d4ec0888480aa4ac21ec82e98b0f5708e000000000000000000000000b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e000000000000000000000000efa645af8ed503ac944c38965729454341917b9c

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000c00e5e886e571c5451766289e3fe73bd2ffa0a5a000000000000000000000000dfd6fa1d4ec0888480aa4ac21ec82e98b0f5708e000000000000000000000000b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e000000000000000000000000efa645af8ed503ac944c38965729454341917b9c

-----Decoded View---------------
Arg [0] : _addresses (address[]): 0xc00e5e886e571c5451766289e3fe73bd2ffa0a5a,0xdfd6fa1d4ec0888480aa4ac21ec82e98b0f5708e,0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e,0xefa645af8ed503ac944c38965729454341917b9c

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [2] : 000000000000000000000000c00e5e886e571c5451766289e3fe73bd2ffa0a5a
Arg [3] : 000000000000000000000000dfd6fa1d4ec0888480aa4ac21ec82e98b0f5708e
Arg [4] : 000000000000000000000000b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e
Arg [5] : 000000000000000000000000efa645af8ed503ac944c38965729454341917b9c


Deployed ByteCode Sourcemap

16274:31280:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37170:150;;;;;;;;;;-1:-1:-1;37170:150:0;;;;;:::i;:::-;;:::i;:::-;;38624:187;;;;;;;;;;-1:-1:-1;38624:187:0;;;;;:::i;:::-;;:::i;39846:186::-;;;;;;;;;;-1:-1:-1;39846:186:0;;;;;:::i;:::-;;:::i;42601:132::-;;;;;;;;;;-1:-1:-1;42601:132:0;;;;;:::i;:::-;;:::i;:::-;;;1023:14:1;;1016:22;998:41;;986:2;971:18;42601:132:0;;;;;;;;18316:177;;;;;;:::i;:::-;;:::i;44797:351::-;;;;;;;;;;-1:-1:-1;44797:351:0;;;;;:::i;:::-;;:::i;20175:144::-;;;;;;;;;;-1:-1:-1;20175:144:0;;;;;:::i;:::-;;:::i;39511:171::-;;;;;;;;;;-1:-1:-1;39511:171:0;;;;;:::i;:::-;;:::i;45151:133::-;;;;;;;;;;;;;:::i;20326:143::-;;;;;;;;;;;;;:::i;22983:187::-;;;;;;;;;;-1:-1:-1;22983:187:0;;;;;:::i;:::-;;:::i;44073:254::-;;;;;;;;;;-1:-1:-1;44073:254:0;;;;;:::i;:::-;;:::i;:::-;;;;3739:14:1;;3732:22;3714:41;;3798:14;;3791:22;3786:2;3771:18;;3764:50;3857:14;;3850:22;3830:18;;;3823:50;;;;3916:14;3909:22;3904:2;3889:18;;3882:50;3701:3;3686:19;44073:254:0;3507:431:1;42468:130:0;;;;;;;;;;-1:-1:-1;42468:130:0;;;;;:::i;:::-;;:::i;41038:114::-;;;;;;;;;;-1:-1:-1;41038:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;41119:19:0;41099:7;41119:19;;;:9;:19;;;;;:28;;;;41038:114;;;;4341:25:1;;;4329:2;4314:18;41038:114:0;4195:177:1;41889:145:0;;;;;;;;;;-1:-1:-1;41889:145:0;;;;;:::i;:::-;;:::i;45492:161::-;;;;;;;;;;-1:-1:-1;45492:161:0;;;;;:::i;:::-;;:::i;45660:235::-;;;;;;;;;;-1:-1:-1;45660:235:0;;;;;:::i;:::-;;:::i;46506:123::-;;;;;;;;;;-1:-1:-1;46506:123:0;;;;;:::i;:::-;;:::i;41287:149::-;;;;;;;;;;-1:-1:-1;41287:149:0;;;;;:::i;:::-;;:::i;46891:201::-;;;;;;;;;;-1:-1:-1;46891:201:0;;;;;:::i;:::-;;:::i;17509:34::-;;;;;;;;;;;;;;;;38153:134;;;;;;;;;;-1:-1:-1;38153:134:0;;;;;:::i;:::-;;:::i;37452:::-;;;;;;;;;;-1:-1:-1;37452:134:0;;;;;:::i;:::-;;:::i;38012:138::-;;;;;;;;;;-1:-1:-1;38012:138:0;;;;;:::i;:::-;;:::i;39685:158::-;;;;;;;;;;-1:-1:-1;39685:158:0;;;;;:::i;:::-;;:::i;42333:132::-;;;;;;;;;;-1:-1:-1;42333:132:0;;;;;:::i;:::-;;:::i;17572:23::-;;;;;;;;;;-1:-1:-1;17572:23:0;;;;;;;-1:-1:-1;;;;;17572:23:0;;;;;;-1:-1:-1;;;;;6132:32:1;;;6114:51;;6102:2;6087:18;17572:23:0;5968:203:1;18673:697:0;;;;;;:::i;:::-;;:::i;46762:119::-;;;;;;;;;;-1:-1:-1;46762:119:0;;;;;:::i;:::-;;:::i;37875:134::-;;;;;;;;;;-1:-1:-1;37875:134:0;;;;;:::i;:::-;;:::i;17715:28::-;;;;;;;;;;-1:-1:-1;17715:28:0;;;;-1:-1:-1;;;;;17715:28:0;;;47216:134;;;;;;:::i;:::-;;:::i;46639:113::-;;;;;;;;;;-1:-1:-1;46639:113:0;;;;;:::i;:::-;;:::i;2457:103::-;;;;;;;;;;;;;:::i;47353:198::-;;;;;;;;;;-1:-1:-1;47353:198:0;;;;;:::i;:::-;;:::i;47095:118::-;;;;;;:::i;:::-;;:::i;40564:114::-;;;;;;;;;;-1:-1:-1;40564:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;40645:19:0;40625:7;40645:19;;;:9;:19;;;;;:28;;;;40564:114;37323:126;;;;;;;;;;-1:-1:-1;37323:126:0;;;;;:::i;:::-;;:::i;37038:129::-;;;;;;;;;;-1:-1:-1;37038:129:0;;;;;:::i;:::-;;:::i;17037:52::-;;;;;;;;;;-1:-1:-1;17037:52:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;42181:149::-;;;;;;;;;;-1:-1:-1;42181:149:0;;;;;:::i;:::-;;:::i;2238:87::-;;;;;;;;;;-1:-1:-1;2284:7:0;2311:6;-1:-1:-1;;;;;2311:6:0;2238:87;;17093:39;;;;;;;;;;-1:-1:-1;17093:39:0;;;;;:::i;:::-;;:::i;41591:139::-;;;;;;;;;;-1:-1:-1;41591:139:0;;;;;:::i;:::-;;:::i;37589:142::-;;;;;;;;;;-1:-1:-1;37589:142:0;;;;;:::i;:::-;;:::i;40681:118::-;;;;;;;;;;-1:-1:-1;40681:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;40764:19:0;40744:7;40764:19;;;:9;:19;;;;;:30;;;;40681:118;41439:149;;;;;;;;;;-1:-1:-1;41439:149:0;;;;;:::i;:::-;;:::i;38814:167::-;;;;;;;;;;-1:-1:-1;38814:167:0;;;;;:::i;:::-;;:::i;17351:35::-;;;;;;;;;;;;;;;;46289:88;;;;;;;;;;-1:-1:-1;46289:88:0;;;;;:::i;:::-;;:::i;39313:195::-;;;;;;;;;;-1:-1:-1;39313:195:0;;;;;:::i;:::-;;:::i;17472:33::-;;;;;;;;;;;;;;;;17627:27;;;;;;;;;;-1:-1:-1;17627:27:0;;;;-1:-1:-1;;;17627:27:0;;;;;;38434:187;;;;;;;;;;-1:-1:-1;38434:187:0;;;;;:::i;:::-;;:::i;46065:108::-;;;;;;;;;;-1:-1:-1;46065:108:0;;;;;:::i;:::-;;:::i;40451:110::-;;;;;;;;;;-1:-1:-1;40451:110:0;;;;;:::i;:::-;-1:-1:-1;;;;;40530:19:0;40510:7;40530:19;;;:9;:19;;;;;;;;:26;;;40451:110;17429:39;;;;;;;;;;;;;;;;42037:141;;;;;;;;;;-1:-1:-1;42037:141:0;;;;;:::i;:::-;;:::i;17168:25::-;;;;;;;;;;-1:-1:-1;17168:25:0;;;;;:::i;:::-;;:::i;40802:114::-;;;;;;;;;;-1:-1:-1;40802:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;40883:19:0;40863:7;40883:19;;;:9;:19;;;;;:28;;;;40802:114;18496:174;;;;;;:::i;:::-;;:::i;41733:153::-;;;;;;;;;;-1:-1:-1;41733:153:0;;;;;:::i;:::-;;:::i;42883:399::-;;;;;;;;;;-1:-1:-1;42883:399:0;;;;;:::i;:::-;-1:-1:-1;;;;;;43059:19:0;42951:7;43059:19;;;:9;:19;;;;;;;;43091:23;;43115:17;;;;43133:19;;;;43153:21;;;;43175:19;;;;43195:20;;;;43216:19;;;;43236:20;;;;43257:19;;;;;43091:23;;43115:17;;43133:19;;43153:21;;43175:19;;43195:20;;43216:19;;43236:20;;43257:19;42883:399;;;;;9208:25:1;;;9264:2;9249:18;;9242:34;;;;9292:18;;;9285:34;;;;9350:2;9335:18;;9328:34;;;;9393:3;9378:19;;9371:35;;;;9437:3;9422:19;;9415:35;9481:3;9466:19;;9459:35;9525:3;9510:19;;9503:35;9569:3;9554:19;;9547:35;9195:3;9180:19;42883:399:0;8837:751:1;39131:179:0;;;;;;;;;;-1:-1:-1;39131:179:0;;;;;:::i;:::-;;:::i;43285:585::-;;;;;;;;;;-1:-1:-1;43285:585:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;43873:100::-;;;;;;;;;;-1:-1:-1;43950:11:0;:18;43873:100;;46183:96;;;;;;;;;;-1:-1:-1;46183:96:0;;;;;:::i;:::-;;:::i;43976:94::-;;;;;;;;;;-1:-1:-1;43976:94:0;;;;;:::i;:::-;;:::i;38290:141::-;;;;;;;;;;-1:-1:-1;38290:141:0;;;;;:::i;:::-;;:::i;45291:194::-;;;;;;;;;;-1:-1:-1;45291:194:0;;;;;:::i;:::-;;:::i;17225:24::-;;;;;;;;;;-1:-1:-1;17225:24:0;;;;-1:-1:-1;;;;;17225:24:0;;;38984:144;;;;;;;;;;-1:-1:-1;38984:144:0;;;;;:::i;:::-;;:::i;17136:28::-;;;;;;;;;;-1:-1:-1;17136:28:0;;;;;:::i;:::-;;:::i;45905:150::-;;;;;;;;;;-1:-1:-1;45905:150:0;;;;;:::i;:::-;;:::i;16987:46::-;;;;;;;;;;-1:-1:-1;16987:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40326:122;;;;;;;;;;-1:-1:-1;40326:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;40411:19:0;40391:7;40411:19;;;:9;:19;;;;;:32;;40326:122;41155:129;;;;;;;;;;-1:-1:-1;41155:129:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;40919:116::-;;;;;;;;;;-1:-1:-1;40919:116:0;;;;;:::i;:::-;-1:-1:-1;;;;;41001:19:0;40981:7;41001:19;;;:9;:19;;;;;:29;;;;40919:116;25166:231;;;;;;;;;;-1:-1:-1;25166:231:0;;;;;:::i;:::-;;:::i;22461:135::-;;;;;;;;;;-1:-1:-1;22461:135:0;;;;;:::i;:::-;;:::i;20472:109::-;;;;;;;;;;-1:-1:-1;20472:109:0;;;;;:::i;:::-;;:::i;17390:35::-;;;;;;;;;;;;;;;;46387:109;;;;;;;;;;-1:-1:-1;46387:109:0;;;;;:::i;:::-;;:::i;2572:201::-;;;;;;;;;;-1:-1:-1;2572:201:0;;;;;:::i;:::-;;:::i;44330:128::-;;;;;;;;;;-1:-1:-1;44330:128:0;;;;;:::i;:::-;;:::i;21414:389::-;;;;;;;;;;-1:-1:-1;21414:389:0;;;;;:::i;:::-;-1:-1:-1;;;;;21580:19:0;21471:7;21580:19;;;:9;:19;;;;;;;;21612:23;;21636:17;;;;21654:19;;;;21674:21;;;;21696:19;;;;21716:20;;;;21737:19;;;;21757:20;;;;21778:19;;;;;21612:23;;21636:17;;21654:19;;21674:21;;21696:19;;21716:20;;21737:19;;21757:20;;21778:19;21414:389;37734:138;;;;;;;;;;-1:-1:-1;37734:138:0;;;;;:::i;:::-;;:::i;20848:110::-;;;;;;;;;;-1:-1:-1;20848:110:0;;;;;:::i;:::-;;:::i;23965:111::-;;;;;;;;;;-1:-1:-1;23965:111:0;;;;;:::i;:::-;;:::i;37170:150::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17886:12;17855:21;:44::i;:::-;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;37267:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:48;37170:150::o;38624:187::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38742:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:25;;38788:18;;38742:21;38764:2;;38742:25;::::1;;;;;:::i;:::-;;;;;;;;;;;:43;;:64;;;;38624:187:::0;;;:::o;39846:186::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39963:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:25;;40009:18;;39963:21;39985:2;;39963:25;::::1;;;;;:::i;:::-;;;;;;;;;;;:43;;:64;;;;39846:186:::0;;;:::o;42601:132::-;-1:-1:-1;;;;;42695:15:0;;42678:4;42695:15;;;:5;:15;;;;;:19;;42711:2;;42695:19;;;;;;:::i;:::-;;;;;;;;;;:33;;;;;;;-1:-1:-1;42601:132:0;;;;;:::o;18316:177::-;17952:5;;-1:-1:-1;;;;;17952:5:0;1868:10;17952:21;;:48;;-1:-1:-1;2284:7:0;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17977:23;17952:48;17944:70;;;;-1:-1:-1;;;17944:70:0;;;;;;;:::i;:::-;18447:9:::1;::::0;18439:49:::1;::::0;-1:-1:-1;;;;;18447:9:0::1;18457:7:::0;18465:8;18474:10;18485:2;18439:7:::1;:49::i;:::-;18316:177:::0;;;;:::o;44797:351::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;44853:8:::1;:13:::0;;-1:-1:-1;;;;44853:13:0::1;-1:-1:-1::0;;;44853:13:0;::::1;;;;::::0;;44887:15:::1;-1:-1:-1::0;44907:208:0::1;44924:11;:18:::0;44922:20;::::1;44907:208;;;44953:16;44972:11;44984:1;44972:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;44972:14:0::1;::::0;-1:-1:-1;44992:118:0::1;-1:-1:-1::0;;;;;44584:21:0;;44534:7;44584:21;;;:11;:21;;;;;44618:19;45007:1:::1;:35;44992:118;;;45059:40;45082:8;45091:1;45093:5;45059:22;:40::i;:::-;45043:3:::0;::::1;::::0;::::1;:::i;:::-;;;;44992:118;;;;44947:168;44943:3;;;;;:::i;:::-;;;;44907:208;;;;45119:24;45137:5;45119:17;:24::i;:::-;44844:304;44797:351:::0;:::o;20175:144::-;17952:5;;-1:-1:-1;;;;;17952:5:0;1868:10;17952:21;;:48;;-1:-1:-1;2284:7:0;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17977:23;17952:48;17944:70;;;;-1:-1:-1;;;17944:70:0;;;;;;;:::i;:::-;20272:38:::1;20287:8;20296:10;20307:2;20272:14;:38::i;:::-;20175:144:::0;;;:::o;39511:171::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39621:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:25;;39663:14;;39621:21;39643:2;;39621:25;::::1;;;;;:::i;:::-;;;;;;;;;;;:39;;:56;;;;39511:171:::0;;;:::o;45151:133::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;45211:6:::1;45207:69;45222:8;:15:::0;45220:17;::::1;45207:69;;;45252:8;:14;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;45252:14:0;;;;;-1:-1:-1;;;;;;45252:14:0::1;::::0;;;;;45238:3;::::1;::::0;::::1;:::i;:::-;;;;45207:69;;;;45151:133::o:0;20326:143::-;17952:5;;-1:-1:-1;;;;;17952:5:0;1868:10;17952:21;;:48;;-1:-1:-1;2284:7:0;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17977:23;17952:48;17944:70;;;;-1:-1:-1;;;17944:70:0;;;;;;;:::i;:::-;20378:6:::1;20374:91;20391:11;:18:::0;20389:20;::::1;20374:91;;;20420:39;20444:11;20456:1;20444:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;20444:14:0::1;20420:23;:39::i;:::-;20410:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20374:91;;22983:187:::0;17952:5;;-1:-1:-1;;;;;17952:5:0;1868:10;17952:21;;:48;;-1:-1:-1;2284:7:0;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17977:23;17952:48;17944:70;;;;-1:-1:-1;;;17944:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23095:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;23157:8;;23117:31:::1;23107:8:::0;23139;23117:12:::1;:31::i;:::-;23095:54;;;;;;;;:::i;:::-;;;;;;;;;;;:59;;:70;;;;;;;;;;;;:::i;44073:254::-:0;-1:-1:-1;;;;;44184:15:0;;44136:4;44184:15;;;:5;:15;;;;;44226:9;;44136:4;;;;;;44184:15;44136:4;;44184:15;;44232:2;;44226:9;;;;;;:::i;:::-;;;;;;;;;;44248:11;;;;;;;44260:20;;;;;-1:-1:-1;44281:19:0;;;;;;-1:-1:-1;44301:20:0;;;;;;-1:-1:-1;44073:254:0;-1:-1:-1;;;;;44073:254:0:o;42468:130::-;-1:-1:-1;;;;;42561:15:0;;42544:4;42561:15;;;:5;:15;;;;;:19;;42577:2;;42561:19;;;;;;:::i;:::-;;;;;;;;;;:32;;;;;;;42468:130;-1:-1:-1;;;42468:130:0:o;41889:145::-;-1:-1:-1;;;;;41988:21:0;;41968:7;41988:21;;;:11;:21;;;;;:25;;42010:2;;41988:25;;;;;;:::i;:::-;;;;;;;;;;;:41;;;41981:48;;41889:145;;;;:::o;45492:161::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;45567:13:::1;:24:::0;;;45634:9:::1;::::0;45616:28:::1;::::0;45583:8;;45616:17:::1;:28::i;:::-;45600:13;:44:::0;-1:-1:-1;45492:161:0:o;45660:235::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;45730:18:::1;45751:44;45771:9;;45781:13;;45751:19;:44::i;:::-;45730:65:::0;-1:-1:-1;45816:17:0::1;:5:::0;45826:6:::1;45816:9;:17::i;:::-;45804:9;:29:::0;;;45858:25:::1;::::0;:10;;:14:::1;:25::i;:::-;45842:13;:41:::0;-1:-1:-1;;45660:235:0:o;46506:123::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;46584:8:::1;:33:::0;;-1:-1:-1;;;;;;46584:33:0::1;-1:-1:-1::0;;;;;46584:33:0;;;::::1;::::0;;;::::1;::::0;;46506:123::o;41287:149::-;-1:-1:-1;;;;;41388:21:0;;41368:7;41388:21;;;:11;:21;;;;;:25;;41410:2;;41388:25;;;;;;:::i;:::-;;;;;;;;;;;:43;;;41381:50;;41287:149;;;;:::o;46891:201::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;47008:5:::1;47014:1;47008:8;;;;;;;;:::i;:::-;;;;;;;46995:11;:21;;;;47038:5;47044:1;47038:8;;;;;;;;:::i;:::-;;;;;;;47028;:18;;;;47072:5;47078:1;47072:8;;;;;;;;:::i;:::-;;;;;;;47058:12;:22;;;;46891:201:::0;:::o;38153:134::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38242:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:28:::1;;:40:::0;38153:134::o;37452:::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37541:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:28:::1;;:40:::0;37452:134::o;38012:138::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38103:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:29:::1;;:42:::0;38012:138::o;39685:158::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39790:15:0;::::1;;::::0;;;:5:::1;:15;::::0;;;;:19;;39825:13;;39790:15;39806:2;;39790:19;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:48:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;39790:48:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;39685:158:0:o;42333:132::-;-1:-1:-1;;;;;42427:15:0;;42410:4;42427:15;;;:5;:15;;;;;:19;;42443:2;;42427:19;;;;;;:::i;:::-;;;;;;;;;;:33;;;;;;;42333:132;-1:-1:-1;;;42333:132:0:o;18673:697::-;17952:5;;-1:-1:-1;;;;;17952:5:0;1868:10;17952:21;;:48;;-1:-1:-1;2284:7:0;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17977:23;17952:48;17944:70;;;;-1:-1:-1;;;17944:70:0;;;;;;;:::i;:::-;18819:8:::1;::::0;18869::::1;::::0;18794:9:::1;::::0;-1:-1:-1;;;;;18819:8:0::1;::::0;18811:68:::1;::::0;18838:40:::1;::::0;18794:9;;18838:22:::1;:40::i;:::-;18811:68;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;18895:11:0::1;::::0;18948::::1;::::0;-1:-1:-1;;;;;18895:11:0;;::::1;::::0;18887:74:::1;::::0;18917:43:::1;::::0;18940:7;;18917:22:::1;:43::i;:::-;18887:74;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;18977:8:0::1;::::0;19027:12:::1;::::0;-1:-1:-1;;;;;18977:8:0;;::::1;::::0;18969:72:::1;::::0;18996:44:::1;::::0;19019:7;;18996:22:::1;:44::i;:::-;18969:72;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;19049:24;19076:152;19187:40;19210:7;19218:8;;19187:22;:40::i;:::-;19076:106;19138:43;19161:7;19169:11;;19138:22;:43::i;:::-;19076:57;19088:44;19111:7;19119:12;;19088:22;:44::i;:::-;19076:7:::0;;:11:::1;:57::i;:::-;:61:::0;::::1;:106::i;:152::-;19049:179:::0;-1:-1:-1;19239:18:0;;19236:84:::1;;19275:8;::::0;19267:44:::1;::::0;-1:-1:-1;;;;;19275:8:0;;::::1;::::0;19267:44;::::1;;;::::0;19294:16;;19275:8:::1;19267:44:::0;19275:8;19267:44;19294:16;19275:8;19267:44;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;19236:84;19327:38;19342:8;19351:10;19362:2;19327:14;:38::i;:::-;18768:602;;18673:697:::0;;;:::o;46762:119::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;46847:11:::1;:22:::0;;-1:-1:-1;;;;;;46847:22:0::1;-1:-1:-1::0;;;;;46847:22:0;;;::::1;::::0;;;::::1;::::0;;46762:119::o;37875:134::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37964:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:28:::1;;:40:::0;37875:134::o;47216:::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;47310:35:::1;::::0;-1:-1:-1;;;;;47310:12:0;::::1;::::0;47323:21:::1;47310:35:::0;::::1;;;::::0;::::1;::::0;;;47323:21;47310:12;:35;::::1;;;;;;;;;;;;;::::0;::::1;;;;46639:113:::0;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;46721:8:::1;:19:::0;;-1:-1:-1;;;;;;46721:19:0::1;-1:-1:-1::0;;;;;46721:19:0;;;::::1;::::0;;;::::1;::::0;;46639:113::o;2457:103::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;2522:30:::1;2549:1;2522:18;:30::i;:::-;2457:103::o:0;47353:198::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;47474:6:::1;::::0;47514:31:::1;::::0;-1:-1:-1;;;47514:31:0;;47502:4:::1;47514:31;::::0;::::1;6114:51:1::0;;;47462:6:0;;-1:-1:-1;;;;;47474:6:0::1;::::0;:19:::1;::::0;47502:4;47509:3;;47474:6;;47514:16:::1;::::0;6087:18:1;;47514:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47474:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;47095:118::-:0;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;47187:21:::1;::::0;-1:-1:-1;;;;;47187:12:0;::::1;::::0;:21;::::1;;;::::0;47200:7;;47187:21:::1;::::0;;;47200:7;47187:12;:21;::::1;;;;;;;;;;;;;::::0;::::1;;;;37323:126:::0;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37408:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;;;;:26:::1;:36:::0;37323:126::o;37038:129::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37130:15:0;::::1;;::::0;;;:5:::1;:15;::::0;;;;:19;;37157:5;;37130:15;37146:2;;37130:19;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:32:::0;;-1:-1:-1;;37130:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;;;37038:129:0:o;17037:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42181:149::-;-1:-1:-1;;;;;42282:21:0;;42262:7;42282:21;;;:11;:21;;;;;:25;;42304:2;;42282:25;;;;;;:::i;:::-;;;;;;;;;;;:43;;;42275:50;;42181:149;;;;:::o;17093:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17093:39:0;;;;;;-1:-1:-1;17093:39:0;;;;;;;;;;;:::o;41591:139::-;-1:-1:-1;;;;;41687:21:0;;41667:7;41687:21;;;:11;:21;;;;;:25;;41709:2;;41687:25;;;;;;:::i;:::-;;;;;;;;;;;:38;;;41680:45;;41591:139;;;;:::o;37589:142::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37682:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:30:::1;;:44:::0;37589:142::o;41439:149::-;-1:-1:-1;;;;;41540:21:0;;41520:7;41540:21;;;:11;:21;;;;;:25;;41562:2;;41540:25;;;;;;:::i;:::-;;;;;;;;;;;:43;;;41533:50;;41439:149;;;;:::o;38814:167::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38922:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:25;;38963:13;;38922:21;38944:2;;38922:25;::::1;;;;;:::i;:::-;;;;;;;;;;;:38;;:54;;;;38814:167:::0;;;:::o;46289:88::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;46350:7:::1;:15:::0;;-1:-1:-1;;46350:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46289:88::o;39313:195::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39435:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:25;;39483:20;;39435:21;39457:2;;39435:25;::::1;;;;;:::i;:::-;;;;;;;;;;;:45;;:68;;;;39313:195:::0;;;:::o;38434:187::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38552:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:25;;38598:18;;38552:21;38574:2;;38552:25;::::1;;;;;:::i;:::-;;;;;;;;;;;:43;;:64;;;;38434:187:::0;;;:::o;46065:108::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;46142:8:::1;:19:::0;;-1:-1:-1;;;;;;46142:19:0::1;-1:-1:-1::0;;;;;46142:19:0;;;::::1;::::0;;;::::1;::::0;;46065:108::o;42037:141::-;-1:-1:-1;;;;;42134:21:0;;42114:7;42134:21;;;:11;:21;;;;;:25;;42156:2;;42134:25;;;;;;:::i;:::-;;;;;;;;;;;:39;;;42127:46;;42037:141;;;;:::o;17168:25::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17168:25:0;;-1:-1:-1;17168:25:0;:::o;18496:174::-;17952:5;;-1:-1:-1;;;;;17952:5:0;1868:10;17952:21;;:48;;-1:-1:-1;2284:7:0;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17977:23;17952:48;17944:70;;;;-1:-1:-1;;;17944:70:0;;;;;;;:::i;:::-;18625:8:::1;::::0;18617:48:::1;::::0;18625:8:::1;::::0;::::1;-1:-1:-1::0;;;;;18625:8:0::1;18634:7:::0;18642:8;18651:10;18662:2;18617:7:::1;:48::i;41733:153::-:0;-1:-1:-1;;;;;41836:21:0;;41816:7;41836:21;;;:11;:21;;;;;:25;;41858:2;;41836:25;;;;;;:::i;:::-;;;;;;;;;;;:45;;;41829:52;;41733:153;;;;:::o;39131:179::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39245:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:25;;39289:16;;39245:21;39267:2;;39245:25;::::1;;;;;:::i;:::-;;;;;;;;;;;:41;;:60;;;;39131:179:::0;;;:::o;43285:585::-;43355:13;43369:7;43377;43385;43393;43401;43409;43417;43425;43433;43446:34;43483:11;:21;43495:8;-1:-1:-1;;;;;43483:21:0;-1:-1:-1;;;;;43483:21:0;;;;;;;;;;;;43446:58;;43509:33;43545:12;43558:2;43545:16;;;;;;;;:::i;:::-;;;;;;;;;;;43509:52;;43574:13;:18;;43593:13;:31;;;43625:13;:26;;;43652:13;:31;;;43684:13;:26;;;43711:13;:29;;;43741:13;:29;;;43771:13;:33;;;43805:13;:27;;;43833:13;:31;;;43566:299;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43285:585;;;;;;;;;;;;;:::o;46183:96::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;46251:5:::1;:16:::0;;-1:-1:-1;;;;;;46251:16:0::1;-1:-1:-1::0;;;;;46251:16:0;;;::::1;::::0;;;::::1;::::0;;46183:96::o;43976:94::-;44030:7;44050:11;44062:2;44050:15;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;44050:15:0;;43976:94;-1:-1:-1;;43976:94:0:o;38290:141::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38388:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:25;;38421:5;;38388:21;38410:2;;38388:25;::::1;;;;;:::i;45291:194::-:0;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;45362:38:::1;45384:8;45362:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;45362:38:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;45393:6;45362:21;:38::i;:::-;:46;;45403:5;45362:46:::0;45359:118:::1;;45422:8;:21:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;45422:21:0;;;;;::::1;::::0;;-1:-1:-1;;;;;45422:21:0;::::1;-1:-1:-1::0;;;;;;45422:21:0;;::::1;;::::0;;45291:194;:::o;38984:144::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39082:15:0;::::1;;::::0;;;:5:::1;:15;::::0;;;;:19;;39118:5;;39082:15;39098:2;;39082:19;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:41:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;39082:41:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;38984:144:0:o;17136:28::-;;;;;;;;;;;;45905:150;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;45987:9:::1;:20:::0;;-1:-1:-1;;;;;45987:20:0;;::::1;-1:-1:-1::0;;;;;;45987:20:0;;::::1;::::0;::::1;::::0;;;46019:4:::1;:24:::0;;;;::::1;;::::0;;45905:150::o;41155:129::-;-1:-1:-1;;;;;41249:21:0;;;;;;:11;:21;;;;;:25;;41223:13;;41249:21;41271:2;;41249:25;;;;;;:::i;:::-;;;;;;;;;;;:30;;41242:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41155:129;;;;:::o;25166:231::-;17952:5;;-1:-1:-1;;;;;17952:5:0;1868:10;17952:21;;:48;;-1:-1:-1;2284:7:0;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17977:23;17952:48;17944:70;;;;-1:-1:-1;;;17944:70:0;;;;;;;:::i;:::-;25257:26:::1;25268:8;25277:5;25257:10;:26::i;:::-;:32;;25285:4;25257:32;25249:88;;;::::0;-1:-1:-1;;;25249:88:0;;14690:2:1;25249:88:0::1;::::0;::::1;14672:21:1::0;14729:2;14709:18;;;14702:30;14768:34;14748:18;;;14741:62;-1:-1:-1;;;14819:18:1;;;14812:42;14871:19;;25249:88:0::1;14488:408:1::0;25249:88:0::1;25342:50;25354:8;25363:28;25376:8;25385:5;25363:12;:28::i;:::-;25342:11;:50::i;22461:135::-:0;22540:4;22561:26;22572:8;22581:5;22561:10;:26::i;:::-;22554:33;22461:135;-1:-1:-1;;;22461:135:0:o;20472:109::-;17952:5;;-1:-1:-1;;;;;17952:5:0;1868:10;17952:21;;:48;;-1:-1:-1;2284:7:0;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17977:23;17952:48;17944:70;;;;-1:-1:-1;;;17944:70:0;;;;;;;:::i;:::-;20543:33:::1;20567:8;20543:23;:33::i;46387:109::-:0;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;46459:4:::1;:25:::0;;-1:-1:-1;;;;;;46459:25:0::1;-1:-1:-1::0;;;;;46459:25:0;;;::::1;::::0;;;::::1;::::0;;46387:109::o;2572:201::-;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;2371:23;2363:68;;;;-1:-1:-1;;;2363:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2661:22:0;::::1;2653:73;;;::::0;-1:-1:-1;;;2653:73:0;;15103:2:1;2653:73:0::1;::::0;::::1;15085:21:1::0;15142:2;15122:18;;;15115:30;15181:34;15161:18;;;15154:62;-1:-1:-1;;;15232:18:1;;;15225:36;15278:19;;2653:73:0::1;14901:402:1::0;2653:73:0::1;2737:28;2756:8;2737:18;:28::i;44330:128::-:0;-1:-1:-1;;;;;44584:21:0;;44400:7;44584:21;;;:11;:21;;;;;44618:19;44420:33;44461:181;37734:138;2284:7;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17828:23;;:71;;;17855:44;17877:8;17855:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17855:44:0;;;;;;;;;;;;;;;;;;;;17886:12;1868:10;;1788:98;17855:44;17820:95;;;;-1:-1:-1;;;17820:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37825:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:29:::1;;:42:::0;37734:138::o;20848:110::-;17952:5;;-1:-1:-1;;;;;17952:5:0;1868:10;17952:21;;:48;;-1:-1:-1;2284:7:0;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17977:23;17952:48;17944:70;;;;-1:-1:-1;;;17944:70:0;;;;;;;:::i;:::-;20924:29:::1;20941:8;20950:2;20924:16;:29::i;23965:111::-:0;17952:5;;-1:-1:-1;;;;;17952:5:0;1868:10;17952:21;;:48;;-1:-1:-1;2284:7:0;2311:6;-1:-1:-1;;;;;2311:6:0;1868:10;17977:23;17952:48;17944:70;;;;-1:-1:-1;;;17944:70:0;;;;;;;:::i;:::-;24044:27:::1;24056:8;24065:5;24044:11;:27::i;3026:218::-:0;3114:4;;3125:96;3140:5;:12;3138:1;:14;3125:96;;;3179:5;3185:1;3179:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3167:20:0;:8;-1:-1:-1;;;;;3167:20:0;;3164:51;;3203:4;3196:11;;;;;3164:51;3153:3;;;;:::i;:::-;;;;3125:96;;;-1:-1:-1;3233:5:0;;3026:218;-1:-1:-1;;;3026:218:0:o;19373:693::-;19548:8;;19589;;19507:5;;-1:-1:-1;;;;;19521:16:0;;;;;;19538:8;;19548;;19558:40;;19581:7;;19558:22;:40::i;:::-;19521:78;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19607:3;-1:-1:-1;;;;;19607:16:0;;19624:8;19634:11;;;;;;;;;-1:-1:-1;;;;;19634:11:0;19647:43;19670:7;19678:11;;19647:22;:43::i;:::-;19607:84;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19699:3;-1:-1:-1;;;;;19699:16:0;;19716:8;19726;;;;;;;;;-1:-1:-1;;;;;19726:8:0;19736:44;19759:7;19767:12;;19736:22;:44::i;:::-;19699:82;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19789:16;19809:152;19916:44;19939:7;19947:12;;19916:22;:44::i;:::-;19809:102;19867:43;19890:7;19898:11;;19867:22;:43::i;:::-;19809:53;19821:40;19844:7;19852:8;;19821:22;:40::i;:::-;19809:7;;:11;:53::i;:152::-;19996:8;;19969:46;;-1:-1:-1;;;19969:46:0;;19789:172;;-1:-1:-1;;;;;;19969:16:0;;;;;;:46;;19986:8;;19996;;;19789:172;;19969:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20023:38;20038:8;20047:10;20058:2;20023:14;:38::i;:::-;19479:587;;19373:693;;;;;:::o;30161:642::-;30253:8;;-1:-1:-1;;;30253:8:0;;;;:17;;;:45;;-1:-1:-1;30294:4:0;;34529;34491:7;34511:24;;;:9;:24;;;;;:33;;;30274:24;;30253:45;30250:549;;;30346:83;30356:72;30374:16;34529:4;34491:7;34511:24;;;:9;:24;;;;;:33;;;;34443:106;30374:16;30391:36;30415:8;30424:2;30391:23;:36::i;:::-;30356:17;:72::i;:::-;30346:5;;:9;:83::i;:::-;-1:-1:-1;;;;;30305:21:0;;;;;;:11;:21;;;;;:25;;30327:2;;30305:25;;;;;;:::i;:::-;;;;;;;;;;;:39;;:124;;;;30435:79;30457:8;30466:2;30469:11;:21;30481:8;-1:-1:-1;;;;;30469:21:0;-1:-1:-1;;;;;30469:21:0;;;;;;;;;;;;30491:2;30469:25;;;;;;;;:::i;:::-;;;;;;;;;;;:39;;;30509:4;30435:21;:79::i;:::-;30552:27;30562:16;34529:4;34491:7;34511:24;;;:9;:24;;;;;:33;;;;34443:106;30552:27;-1:-1:-1;;;;;30520:19:0;;;;;;:9;:19;;;;;:28;;:59;;:28;;:19;:59;;;;;:::i;:::-;;;;-1:-1:-1;;30627:4:0;;-1:-1:-1;;;;;30585:21:0;;;;;;:11;:21;;;;;:25;;30607:2;;30585:25;;;;;;:::i;30250:549::-;30645:8;;-1:-1:-1;;;30645:8:0;;;;:16;;30657:4;30645:16;30642:157;;30709:83;30719:72;30737:16;34529:4;34491:7;34511:24;;;:9;:24;;;;;:33;;;;34443:106;30709:83;-1:-1:-1;;;;;30668:21:0;;;;;;:11;:21;;;;;:25;;30690:2;;30668:25;;;;;;:::i;30806:190::-;30865:8;;-1:-1:-1;;;30865:8:0;;;;:17;;30877:5;30865:17;30862:130;;30925:4;;30907;30889:24;;;;:9;:24;;;;;:33;;:40;45207:69:::1;45151:133::o:0;30862:130::-;30963:4;30945:24;;;;:9;:24;;;;;:33;;:41;30806:190::o;29403:369::-;29492:2;29498:3;29492:9;29489:237;;29516:6;29512:107;29527:10;29525:1;:12;29512:107;;;29553:55;29571:8;29580:4;29585:20;29596:8;29585:10;:20::i;:::-;29606:1;29553:17;:55::i;:::-;29538:3;;;;:::i;:::-;;;;29512:107;;;;29489:237;;;29638:6;29634:87;29649:10;29647:1;:12;29634:87;;;29677:37;29695:8;29704:4;29709:2;29712:1;29677:17;:37::i;:::-;29660:3;;;;:::i;:::-;;;;29634:87;;;;29489:237;29730:33;29754:8;20584:261;20652:6;20648:92;-1:-1:-1;;;;;44584:21:0;;44534:7;44584:21;;;:11;:21;;;;;44618:19;20663:1;:32;20648:92;;;20706:28;20723:8;20732:1;20706:16;:28::i;:::-;20696:3;;;;:::i;:::-;;;;20648:92;;;;20744:26;20761:8;20744:16;:26::i;:::-;20775:29;20795:8;20775:19;:29::i;:::-;20809:31;20831:8;20809:21;:31::i;23177:368::-;-1:-1:-1;;;;;23312:21:0;;23260:7;23312:21;;;:11;:21;;;;;23260:7;23346:191;23363:13;;23361:15;;23346:191;;;23392:25;23420:6;23427:1;23420:9;;;;;;;;:::i;:::-;;;;;;;;;;;23392:37;;23490:5;23474:23;;;;;;23458:5;:10;;23442:28;;;;;;:::i;:::-;;;;;;;;:55;23439:89;;-1:-1:-1;23516:1:0;-1:-1:-1;23509:8:0;;-1:-1:-1;23509:8:0;23439:89;-1:-1:-1;23377:3:0;;;;:::i;:::-;;;;23346:191;;;;23268:277;23177:368;;;;:::o;698:98::-;756:7;783:5;787:1;783;:5;:::i;4548:152::-;4613:7;4628:12;4641:11;4656:21;4671:2;4674;4656:14;:21::i;:::-;-1:-1:-1;4627:50:0;4548:152;-1:-1:-1;;;;;4548:152:0:o;4002:385::-;4073:7;4087:11;4101:15;4113:2;4101:11;:15::i;:::-;4087:29;;4122:15;4140:17;4152:4;4140:11;:17::i;:::-;4122:35;-1:-1:-1;4163:10:0;4177;4122:35;4177:2;:10;:::i;:::-;4163:24;;4193:10;4206:14;4215:4;4206:8;:14::i;:::-;4226:40;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4285:20:0;4292:12;4226:40;4292:2;:12;:::i;:::-;4285:2;;:6;:20::i;:::-;4272:33;-1:-1:-1;4311:10:0;4324:12;4272:33;4331:4;4324:6;:12::i;:::-;4311:25;-1:-1:-1;4349:27:0;4361:13;4367:7;4361:5;:13;:::i;:::-;4356:19;;:2;:19;:::i;:::-;4349:2;;:6;:27::i;:::-;4342:34;4002:385;-1:-1:-1;;;;;;;;;;4002:385:0:o;592:98::-;650:7;677:5;681:1;677;:5;:::i;2779:191::-;2853:16;2872:6;;-1:-1:-1;;;;;2889:17:0;;;-1:-1:-1;;;;;;2889:17:0;;;;;;2922:40;;2872:6;;;;;;;2922:40;;2853:16;2922:40;2842:128;2779:191;:::o;22603:373::-;-1:-1:-1;;;;;22724:21:0;;22679:4;22724:21;;;:11;:21;;;;;22679:4;22754:194;22771:13;;22769:15;;22754:194;;;22800:25;22828:6;22835:1;22828:9;;;;;;;;:::i;:::-;;;;;;;;;;;22800:37;;22898:5;22882:23;;;;;;22866:5;:10;;22850:28;;;;;;:::i;:::-;;;;;;;;:55;22847:92;;22924:4;22917:11;;;;;;;22847:92;-1:-1:-1;22785:3:0;;;;:::i;:::-;;;;22754:194;;;-1:-1:-1;22962:5:0;;22603:373;-1:-1:-1;;;;22603:373:0:o;25400:1386::-;-1:-1:-1;;;;;25498:21:0;;25467:28;25498:21;;;:11;:21;;;;;;;;25549:5;:15;;;;;;25576:19;;25549:15;;25592:2;;25576:19;;;;;;:::i;:::-;;;;;;;;;;:33;;;;;;:41;;25613:4;25576:41;25573:100;;25628:35;25651:8;25660:2;25628:22;:35::i;:::-;25692:2;25681:1058;25697:13;;25695:15;;25681:1058;;;25733:13;;:15;;25747:1;;25733:15;:::i;:::-;25728:1;:20;25725:1005;;25758:29;25790:6;25797:1;25790:9;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;25840:6:0;25847:3;:1;25849;25847:3;:::i;:::-;25840:11;;;;;;;;:::i;:::-;;;;;;;;;;;25808:43;;25862:21;25886:3;25890:1;25886:6;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;25923:3:0;25927;:1;25929;25927:3;:::i;:::-;25923:8;;;;;;;;:::i;:::-;;;;;;;;25899:32;;25965:9;:14;;25949:9;:14;;:30;;;;;;:::i;:::-;;;;;;:::i;:::-;-1:-1:-1;26016:27:0;;;;;25986;;;:57;26075:22;;;;;26050;;;:47;26134:27;;;;;26104;;;:57;26193:22;;;;;26168;;;:47;26250:25;;;;;26222;;;:53;26310:25;;;;;26282;;;:53;26374:29;;;;;26342;;;:61;26436:23;;;;;26410;;;:49;26496:27;;;;;26466;;;;:57;;;;26546:13;;26530:29;;26546:13;;;;26530:29;;-1:-1:-1;;26530:29:0;;;;;;26591:22;;26546:13;26591:22;;;;;;26566:47;;;-1:-1:-1;;26566:47:0;;;-1:-1:-1;;26566:47:0;;;;;;;;;;;26644:21;;;;;;;;;26620:45;;;-1:-1:-1;;26620:45:0;;;;;;26697:22;;;;;;;;;;26672:47;;;;;-1:-1:-1;;26672:47:0;;;-1:-1:-1;;26672:47:0;;;;;;;;;;25725:1005;25711:3;;;;:::i;:::-;;;;25681:1058;;;;26747:6;:12;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;26747:12:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26768:3;:9;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;26768:9:0;;;;;-1:-1:-1;;26768:9:0;;;;;;-1:-1:-1;;;;25400:1386:0:o;20961:450::-;21029:41;21058:8;21067:2;21029:28;:41::i;:::-;21075:38;21101:8;21110:2;21075:25;:38::i;:::-;21118:51;21141:8;21150:2;21153:15;21118:22;:51::i;:::-;21174:33;21195:8;21204:2;21174:20;:33::i;:::-;21212:36;21236:8;21245:2;21212:23;:36::i;:::-;21257:26;21274:8;21257:16;:26::i;:::-;21288:34;21310:8;21319:2;21288:21;:34::i;:::-;21327:36;21351:8;21360:2;21327:23;:36::i;:::-;21368:38;21394:8;21403:2;21368:25;:38::i;24079:974::-;24151:13;24167:15;24151:31;;24194:43;24216:11;24194:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24194:43:0;;;;;;;;;;;;;;;;;;;;;24228:8;24194:21;:43::i;:::-;:52;;24241:5;24194:52;24191:94;;24253:11;:26;;;;;;;-1:-1:-1;24253:26:0;;;;;;;;-1:-1:-1;;;;;;24253:26:0;-1:-1:-1;;;;;24253:26:0;;;;;24191:94;24316:4;;24360:9;;24291:22;;24340:30;;:15;;:19;:30::i;:::-;-1:-1:-1;;;;;24412:21:0;;24375:34;24412:21;;;:11;:21;;;;;24452:19;;24325:45;;-1:-1:-1;24412:21:0;24452:26;;24476:1;24452:23;:26::i;:::-;24502:325;;;;;;;;;;;24554:15;24502:325;;;;;;;24588:4;;24502:325;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24808:13;;24502:325;;;;24484:344;;;;;;;-1:-1:-1;24484:344:0;;;;;;;;;;24438:40;;-1:-1:-1;24502:325:0;;24484:344;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;24484:344:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24858:15:0;;-1:-1:-1;24858:15:0;;;;;;;;;24889:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;24878:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24878:89:0;;;;;;;;;-1:-1:-1;;24878:89:0;;;;;;-1:-1:-1;;24878:89:0;;;;;;;-1:-1:-1;;24878:89:0;;;;;;;;;;;;;;;;;;;;;;;25002:3;;24972:34;;24864:8;;24972:15;:34::i;:::-;25011:37;25026:8;25035:1;25037:10;:3;25035:1;25037:7;:10::i;:::-;25011:14;:37::i;:::-;24146:907;;;;;;24079:974;;:::o;5810:172::-;5874:7;5891:14;5899:2;5902;5891:7;:14::i;:::-;:20;;5907:4;5891:20;;:47;;;5915:15;5924:2;5927;5915:8;:15::i;:::-;:23;;5934:4;5915:23;5891:47;5888:74;;;-1:-1:-1;5953:2:0;5946:9;;5888:74;-1:-1:-1;5974:2:0;5810:172;-1:-1:-1;5810:172:0:o;28373:421::-;28483:14;;;28492:5;28483:14;28480:156;;-1:-1:-1;;;;;28504:21:0;;;;;;:11;:21;;;;;:25;;28546:13;;28504:21;28526:2;;28504:25;;;;;;:::i;:::-;;;;;;;;;;;:38;;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;28480:156:0;;-1:-1:-1;28480:156:0;;-1:-1:-1;;;;;28575:21:0;;;;;;:11;:21;;;;;:25;;28617:13;;28575:21;28597:2;;28575:25;;;;;;:::i;:::-;;;;;;;;;;;:38;;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;28480:156:0;28640:34;28662:8;28671:2;28640:21;:34::i;:::-;28679:26;28696:8;28679:16;:26::i;:::-;28710:36;28734:8;28743:2;28710:23;:36::i;:::-;28751:38;28777:8;28786:2;28751:25;:38::i;21806:546::-;21861:7;21874:11;21894;21914:14;21931:33;21953:8;21962:1;21931:21;:33::i;:::-;21914:50;;21973:33;21997:8;21973:23;:33::i;:::-;22019:6;22015:311;-1:-1:-1;;;;;44584:21:0;;44534:7;44584:21;;;:11;:21;;;;;44618:19;22030:1;:35;22015:311;;;22086:33;22108:8;22117:1;22086:21;:33::i;:::-;22080:39;;22138:6;22132:3;:12;:56;;;;-1:-1:-1;;;;;;22148:15:0;;;;;;:5;:15;;;;;:18;;22164:1;;22148:18;;;;;;:::i;:::-;;;;;;;;;;:32;;;;;;:40;;22184:4;22148:40;;22132:56;:99;;;;-1:-1:-1;;;;;;22192:15:0;;;;;;:5;:15;;;;;:18;;22208:1;;22192:18;;;;;;:::i;:::-;;;;;;;;;;:31;;;;;;:39;;22227:4;22192:39;;22132:99;22129:187;;;22249:1;22243:7;;22270:33;22292:8;22301:1;22270:21;:33::i;:::-;22261:42;;22129:187;22066:3;;;;:::i;:::-;;;;22015:311;;;-1:-1:-1;22341:3:0;;21806:546;-1:-1:-1;;;;21806:546:0:o;27780:590::-;27882:11;;;27889:4;27882:11;27879:487;;-1:-1:-1;;;;;27900:21:0;;;;;;:11;:21;;;;;:25;;27942:9;;27900:21;27922:2;;27900:25;;;;;;:::i;:::-;;;;;;;;;;;:39;;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;27999:9:0;;:24;;28013:9;27999:13;:24::i;:::-;-1:-1:-1;;;;;27957:21:0;;;;;;:11;:21;;;;;:25;;27979:2;;27957:25;;;;;;:::i;:::-;;;;;;;;;;;:38;;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;28029:19:0;;;;;;:9;:19;;;;;:28;;:41;;28061:9;;28029:19;:41;;28061:9;;28029:41;:::i;:::-;;;;-1:-1:-1;;28094:4:0;28076:24;;;;:9;:24;;;;;:33;;:46;;28113:9;;28076:24;:46;;28113:9;;28076:46;:::i;:::-;;;;-1:-1:-1;27879:487:0;;-1:-1:-1;27879:487:0;;-1:-1:-1;;;;;28138:21:0;;;;;;:11;:21;;;;;:25;;28180:9;;28138:21;28160:2;;28138:25;;;;;;:::i;:::-;;;;;;;;;;;:39;;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;28237:9:0;;:24;;28251:9;28237:13;:24::i;:::-;-1:-1:-1;;;;;28195:21:0;;;;;;:11;:21;;;;;:25;;28217:2;;28195:25;;;;;;:::i;:::-;;;;;;;;;;;:38;;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;28267:19:0;;;;;;:9;:19;;;;;:28;;:41;;28299:9;;28267:19;:41;;28299:9;;28267:41;:::i;:::-;;;;-1:-1:-1;;28332:4:0;28314:24;;;;:9;:24;;;;;:33;;:46;;28351:9;;28314:24;:46;;28351:9;;28314:46;:::i;:::-;;;;-1:-1:-1;;27780:590:0;;;;:::o;32981:543::-;-1:-1:-1;;;;;33076:19:0;;;;;;:9;:19;;;;;;:28;;;;;33057:4;33039:24;;;;;:33;:65;;33076:28;;33039:33;;:65;;33076:28;;33039:65;:::i;:::-;;;;-1:-1:-1;;33140:4:0;;-1:-1:-1;;;;;33109:19:0;;;;;;:9;:19;;;;;:28;;:35;;;;33149:301;-1:-1:-1;;;;;33164:19:0;;;;;;:9;:19;;;;;;;;:26;;33162:28;;33149:301;;;33238:9;;33204:33;33226:8;33235:1;33204:21;:33::i;:::-;:43;33201:244;;;-1:-1:-1;;;;;33259:15:0;;;;;;:5;:15;;;;;:18;;33285:4;;33259:15;33275:1;;33259:18;;;;;;:::i;:::-;;;;;;;;;;;;;:30;;-1:-1:-1;;33259:30:0;;;;;;;;;;;-1:-1:-1;;;;;33300:19:0;;;;-1:-1:-1;33300:19:0;;;;;;;:28;;:33;;:28;;33259:18;33300:33;;-1:-1:-1;;33300:33:0;:::i;:::-;;;;-1:-1:-1;33344:33:0;;-1:-1:-1;33366:8:0;33375:1;33344:21;:33::i;:::-;33201:244;;;-1:-1:-1;;;;;33403:15:0;;33429:5;33403:15;;;:5;:15;;;;;:18;;33419:1;;33403:18;;;;;;:::i;:::-;;;;;;;;;;:31;;-1:-1:-1;;33403:31:0;;;;;;;;;;33201:244;33191:3;;;;:::i;:::-;;;;33149:301;;;-1:-1:-1;;;;;;33491:19:0;;;;;;:9;:19;;;;;;:28;;;;;33472:4;33454:24;;;;;:33;:65;;33491:28;;33454:33;;:65;;33491:28;;33454:65;:::i;:::-;;;;-1:-1:-1;;;32981:543:0:o;27349:428::-;-1:-1:-1;;;;;27449:19:0;;;;;;:9;:19;;;;;;:30;;;;;27428:4;27410:24;;;;;:35;:69;;27449:30;;27410:35;;:69;;27449:30;;27410:69;:::i;:::-;;;;-1:-1:-1;;27517:4:0;;-1:-1:-1;;;;;27484:19:0;;;;;;:9;:19;;;;;:30;;:37;;;;27526:173;-1:-1:-1;;;;;27541:19:0;;;;;;:9;:19;;;;;;;;:26;;27539:28;;27526:173;;;-1:-1:-1;;;;;27612:21:0;;;;;;:11;:21;;;;;:24;;27634:1;;27612:24;;;;;;:::i;:::-;;;;;;;;;;;:40;;;27578:9;:19;27588:8;-1:-1:-1;;;;;27578:19:0;-1:-1:-1;;;;;27578:19:0;;;;;;;;;;;;:30;;;:74;;;;;;;:::i;:::-;;;;-1:-1:-1;27658:35:0;;-1:-1:-1;27682:8:0;27691:1;27658:23;:35::i;:::-;27568:3;;;;:::i;:::-;;;;27526:173;;;-1:-1:-1;;;;;;27742:19:0;;;;;;:9;:19;;;;;;:30;;;;;27721:4;27703:24;;;;;:35;:69;;27742:30;;27703:35;;:69;;27742:30;;27703:69;:::i;26900:446::-;-1:-1:-1;;;;;27004:19:0;;;;;;:9;:19;;;;;;:32;26981:4;26963:24;;;;;:73;;27004:32;;26963:24;;:73;;27004:32;;26963:73;:::i;:::-;;;;-1:-1:-1;;27076:4:0;;-1:-1:-1;;;;;27041:19:0;;;;;;:9;:19;;;;;:39;;;;27085:179;-1:-1:-1;;;;;27100:19:0;;;;;;:9;:19;;;;;;;;:26;;27098:28;;27085:179;;;-1:-1:-1;;;;;27173:21:0;;;;;;:11;:21;;;;;:24;;27195:1;;27173:24;;;;;;:::i;:::-;;;;;;;;;;;:42;;;27137:9;:19;27147:8;-1:-1:-1;;;;;27137:19:0;-1:-1:-1;;;;;27137:19:0;;;;;;;;;;;;:32;;;:78;;;;;;;:::i;:::-;;;;-1:-1:-1;27221:37:0;;-1:-1:-1;27247:8:0;27256:1;27221:25;:37::i;:::-;27127:3;;;;:::i;:::-;;;;27085:179;;;-1:-1:-1;;;;;;27309:19:0;;;;;;:9;:19;;;;;;:32;27286:4;27268:24;;;;;:73;;27309:32;;27268:24;;:73;;27309:32;;27268:73;:::i;3248:308::-;3316:7;;;3364:10;;;:24;;;3384:4;3378:2;:10;3364:24;:35;;;;3397:2;3392;:7;3364:35;3360:70;;;3415:4;-1:-1:-1;3420:2:0;;-1:-1:-1;3407:16:0;;3360:70;3447:2;3435:9;3474:59;3485:2;3480:1;:7;3474:59;;3501:6;3505:2;3501:6;;:::i;:::-;;-1:-1:-1;3514:3:0;;;;:::i;:::-;;;;3474:59;;;3546:1;-1:-1:-1;3548:1:0;-1:-1:-1;;3248:308:0;;;;;;:::o;3560:154::-;3615:4;;3642:53;3648:7;;3642:53;;3668:10;:2;3675;3668:6;:10::i;:::-;3663:15;-1:-1:-1;3685:3:0;;;;:::i;:::-;;;;3642:53;;3718:280;3770:7;3784:6;3793:15;3805:2;3793:11;:15::i;:::-;3784:24;-1:-1:-1;3784:24:0;;3814:8;;3886:93;3892:6;;:19;;;;-1:-1:-1;3902:9:0;;;3892:19;3886:93;;;3919:11;3929:1;3919:11;;:::i;:::-;;-1:-1:-1;3942:18:0;3949:10;3919:11;3949:2;:10;:::i;:::-;3942:2;;:6;:18::i;:::-;3937:23;-1:-1:-1;3967:5:0;3971:1;3967:5;;:::i;:::-;;;3886:93;;;3991:1;3718:280;-1:-1:-1;;;;;;3718:280:0:o;804:98::-;862:7;889:5;893:1;889;:5;:::i;32567:300::-;-1:-1:-1;;;;;32645:15:0;;;;;;:5;:15;;;;;:19;;32661:2;;32645:19;;;;;;:::i;:::-;;;;;;;;;;:33;;;;;;:41;;32682:4;32645:41;32642:221;;-1:-1:-1;;;;;32693:15:0;;;;;;:5;:15;;;;;:19;;32729:4;;32693:15;32709:2;;32693:19;;;;;;:::i;:::-;;;;;;;;;;;;:40;;;;;;;-1:-1:-1;;32693:40:0;;;;;;;;;;-1:-1:-1;;;;;32739:19:0;;;;-1:-1:-1;32739:19:0;;;;;;;:29;;:34;;:29;;32693:19;32739:34;;-1:-1:-1;;32739:34:0;:::i;:::-;;;;-1:-1:-1;;32797:4:0;32779:24;;;;32817:1;32779:24;;;;;;;:34;;:39;;32817:1;;32779:34;;:39;;32817:1;;32779:39;:::i;:::-;;;;-1:-1:-1;32824:33:0;;-1:-1:-1;32840:8:0;32849:5;32855:1;32824:15;:33::i;29887:271::-;29971:7;;;;:15;;:7;:15;29968:186;;30041:8;;:39;;-1:-1:-1;;;30041:39:0;;-1:-1:-1;;;;;18770:32:1;;;30041:39:0;;;18752:51:1;18819:18;;;18812:34;;;30041:8:0;;;;:26;;18725:18:1;;30041:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29993:21:0;;;;;;:11;:21;;;;;:25;;30015:2;;29993:25;;;;;;:::i;:::-;;;;;;;;;;;:45;;:87;;;;44844:304:::1;44797:351:::0;:::o;29968:186::-;30144:4;;-1:-1:-1;;;;;30096:21:0;;;;;;:11;:21;;;;;:25;;30118:2;;30096:25;;;;;;:::i;31781:341::-;31905:95;31946:53;31960:38;31986:8;31995:2;31960:25;:38::i;:::-;31946:9;;;:13;:53::i;:::-;31905:36;31929:8;31938:2;31905:23;:36::i;:::-;:40;;:95::i;:::-;-1:-1:-1;;;;;31859:21:0;;;;;;:11;:21;;;;;:25;;31881:2;;31859:25;;;;;;:::i;:::-;;;;;;;;;;;:43;;:141;;;;32055:15;32008:11;:21;32020:8;-1:-1:-1;;;;;32008:21:0;-1:-1:-1;;;;;32008:21:0;;;;;;;;;;;;32030:2;32008:25;;;;;;;;:::i;:::-;;;;;;;;;;;:43;;;:62;32005:113;;32077:35;32100:8;32109:2;32077:22;:35::i;31109:223::-;31224:103;31288:38;31314:8;31323:2;31288:25;:38::i;:::-;31225:57;31245:36;31269:8;31278:2;31245:23;:36::i;:::-;31225:15;;:19;:57::i;31224:103::-;-1:-1:-1;;;;;31183:21:0;;;;;;:11;:21;;;;;:25;;31205:2;;31183:25;;;;;;:::i;:::-;;;;;;;;;;;:38;;:144;;;;31109:223;;:::o;31335:443::-;31410:12;31426:69;31463:31;31482:8;31491:2;31463:18;:31::i;:::-;31426:32;31446:8;31455:2;31426:19;:32::i;:69::-;31410:85;;31503:37;31519:4;31524:15;31503;:37::i;:::-;:43;;31542:4;31503:43;31500:200;;-1:-1:-1;;;;;31553:21:0;;;;;;:11;:21;;;;;:25;;31575:2;;31553:25;;;;;;:::i;:::-;-1:-1:-1;31553:25:0;;31635:11;;31608:25;:15;31628:4;31608:19;:25::i;:::-;:38;31605:90;;31654:34;31676:8;31685:2;31654:21;:34::i;:::-;31748:25;:4;31757:15;31748:8;:25::i;:::-;-1:-1:-1;;;;;31704:21:0;;;;;;:11;:21;;;;;:25;;31726:2;;31704:25;;;;;;:::i;:::-;;;;;;;;;;;:41;;:69;;;;31405:373;31335:443;;:::o;33527:270::-;33639:1;33604:34;33626:8;33635:2;33604:21;:34::i;:::-;:36;33601:191;;;-1:-1:-1;;;;;33647:15:0;;33683:5;33647:15;;;:5;:15;;;;;:19;;33663:2;;33647:19;;;;;;:::i;:::-;;;;;;;;;;:41;;;;;;;-1:-1:-1;;33647:41:0;;;;;;;;;44844:304:::1;44797:351:::0;:::o;33601:191::-;33702:34;33724:8;33733:2;33702:21;:34::i;:::-;33738:1;33702:37;33699:93;;-1:-1:-1;;;;;33746:15:0;;;;;;:5;:15;;;;;:19;;33782:4;;33746:15;33762:2;;33746:19;;;;;;:::i;28907:190::-;29027:65;29047:9;;29057:34;29079:8;29088:2;29057:21;:34::i;:::-;29027:19;:65::i;:::-;-1:-1:-1;;;;;28983:21:0;;;;;;:11;:21;;;;;:25;;29005:2;;28983:25;;;;;;:::i;:::-;;;;;;;;;;;:41;;:109;;;;28907:190;;:::o;29100:296::-;-1:-1:-1;;;;;29349:21:0;;;;;;:11;:21;;;;;:25;;29224:167;;29349:21;29371:2;;29349:25;;;;;;:::i;:::-;;;;;;;;;;;:41;;;29224:120;29244:9;;29254:89;29271:57;29312:15;29271:36;29295:8;29304:2;29271:23;:36::i;:57::-;29329:13;;29254:16;:89::i;29224:167::-;-1:-1:-1;;;;;29178:21:0;;;;;;:11;:21;;;;;:25;;29200:2;;29178:25;;;;;;:::i;:::-;;;;;;;;;;;:43;;:213;;;;29100:296;;:::o;486:98::-;544:7;571:5;575:1;571;:5;:::i;23660:302::-;23747:12;;;23754:5;23747:12;23744:214;;-1:-1:-1;;;;;23766:19:0;;;;;;:9;:19;;;;;;;:26;:37;;23796:7;;23766:19;:37;;23796:7;;23766:37;:::i;:::-;;;;-1:-1:-1;;23827:4:0;23809:24;;;;:9;:24;;;;;;;:31;:42;;23844:7;;23809:24;:42;;23844:7;;23809:42;:::i;:::-;;;;-1:-1:-1;23744:214:0;;-1:-1:-1;23744:214:0;;-1:-1:-1;;;;;23867:19:0;;;;;;:9;:19;;;;;;;:26;:37;;23897:7;;23867:19;:37;;23897:7;;23867:37;:::i;:::-;;;;-1:-1:-1;;23928:4:0;23910:24;;;;:9;:24;;;;;;;:31;:42;;23945:7;;23910:24;:42;;23945:7;;23910:42;:::i;:::-;;;;-1:-1:-1;;23660:302:0;;;:::o;5459:173::-;5521:4;5535:14;5543:2;5546;5535:7;:14::i;:::-;:21;;;:48;;;5560:15;5569:2;5572;5560:8;:15::i;:::-;:23;5535:48;5532:77;;;-1:-1:-1;5598:4:0;5591:11;;5532:77;-1:-1:-1;5621:5:0;5459:173;;;;:::o;5324:131::-;5387:4;5404:2;5401;:5;5398:34;;;-1:-1:-1;5421:4:0;5414:11;;34552:148;-1:-1:-1;;;;;34654:21:0;;34634:7;34654:21;;;:11;:21;;;;;:25;;34676:2;;34654:25;;;;;;:::i;:::-;;;;;;;;;;;:41;;;34647:48;;34552:148;;;;:::o;5190:130::-;5252:4;5269:2;5266;:5;5263:34;;;-1:-1:-1;5286:4:0;5279:11;;32236:328;-1:-1:-1;;;;;32313:15:0;;;;;;:5;:15;;;;;:19;;32329:2;;32313:19;;;;;;:::i;:::-;;;;;;;;;;:32;;;;;;:40;;32349:4;32313:40;32310:249;;-1:-1:-1;;;;;32360:15:0;;;;;;:5;:15;;;;;:19;;32395:4;;32360:15;32376:2;;32360:19;;;;;;:::i;:::-;;;;;;;;;;;;:39;;;;;;;-1:-1:-1;;32360:39:0;;;;;;;;;;-1:-1:-1;;;;;32405:19:0;;;;-1:-1:-1;32405:19:0;;;;;;;:29;;:34;;:29;;32360:19;32405:34;;-1:-1:-1;;32405:34:0;:::i;:::-;;;;-1:-1:-1;;32463:4:0;32445:24;;;;32483:1;32445:24;;;;;;;:34;;:39;;32483:1;;32445:34;;:39;;32483:1;;32445:39;:::i;:::-;;;;-1:-1:-1;32490:33:0;;-1:-1:-1;32506:8:0;32515:5;32521:1;32490:15;:33::i;:::-;32529:24;32541:8;32550:2;32529:11;:24::i;5636:170::-;5699:7;5716:14;5724:2;5727;5716:7;:14::i;:::-;:20;;5732:4;5716:20;;:46;;;5740:14;5748:2;5751;5740:7;:14::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:1:o;470:383::-;547:6;555;563;616:2;604:9;595:7;591:23;587:32;584:52;;;632:1;629;622:12;584:52;671:9;658:23;690:31;715:5;690:31;:::i;:::-;740:5;792:2;777:18;;764:32;;-1:-1:-1;843:2:1;828:18;;;815:32;;470:383;-1:-1:-1;;;470:383:1:o;1050:452::-;1136:6;1144;1152;1160;1213:3;1201:9;1192:7;1188:23;1184:33;1181:53;;;1230:1;1227;1220:12;1181:53;1269:9;1256:23;1288:31;1313:5;1288:31;:::i;:::-;1338:5;1390:2;1375:18;;1362:32;;-1:-1:-1;1441:2:1;1426:18;;1413:32;;1492:2;1477:18;1464:32;;-1:-1:-1;1050:452:1;-1:-1:-1;;;1050:452:1:o;1507:118::-;1593:5;1586:13;1579:21;1572:5;1569:32;1559:60;;1615:1;1612;1605:12;1630:241;1686:6;1739:2;1727:9;1718:7;1714:23;1710:32;1707:52;;;1755:1;1752;1745:12;1707:52;1794:9;1781:23;1813:28;1835:5;1813:28;:::i;1876:127::-;1937:10;1932:3;1928:20;1925:1;1918:31;1968:4;1965:1;1958:15;1992:4;1989:1;1982:15;2008:275;2079:2;2073:9;2144:2;2125:13;;-1:-1:-1;;2121:27:1;2109:40;;2179:18;2164:34;;2200:22;;;2161:62;2158:88;;;2226:18;;:::i;:::-;2262:2;2255:22;2008:275;;-1:-1:-1;2008:275:1:o;2288:531::-;2331:5;2384:3;2377:4;2369:6;2365:17;2361:27;2351:55;;2402:1;2399;2392:12;2351:55;2438:6;2425:20;2464:18;2460:2;2457:26;2454:52;;;2486:18;;:::i;:::-;2530:55;2573:2;2554:13;;-1:-1:-1;;2550:27:1;2579:4;2546:38;2530:55;:::i;:::-;2610:2;2601:7;2594:19;2656:3;2649:4;2644:2;2636:6;2632:15;2628:26;2625:35;2622:55;;;2673:1;2670;2663:12;2622:55;2738:2;2731:4;2723:6;2719:17;2712:4;2703:7;2699:18;2686:55;2786:1;2761:16;;;2779:4;2757:27;2750:38;;;;2765:7;2288:531;-1:-1:-1;;;2288:531:1:o;2824:678::-;2921:6;2929;2937;2990:2;2978:9;2969:7;2965:23;2961:32;2958:52;;;3006:1;3003;2996:12;2958:52;3045:9;3032:23;3064:31;3089:5;3064:31;:::i;:::-;3114:5;-1:-1:-1;3170:2:1;3155:18;;3142:32;3193:18;3223:14;;;3220:34;;;3250:1;3247;3240:12;3220:34;3273:50;3315:7;3306:6;3295:9;3291:22;3273:50;:::i;:::-;3263:60;;3376:2;3365:9;3361:18;3348:32;3332:48;;3405:2;3395:8;3392:16;3389:36;;;3421:1;3418;3411:12;3389:36;;3444:52;3488:7;3477:8;3466:9;3462:24;3444:52;:::i;:::-;3434:62;;;2824:678;;;;;:::o;3943:247::-;4002:6;4055:2;4043:9;4034:7;4030:23;4026:32;4023:52;;;4071:1;4068;4061:12;4023:52;4110:9;4097:23;4129:31;4154:5;4129:31;:::i;4377:180::-;4436:6;4489:2;4477:9;4468:7;4464:23;4460:32;4457:52;;;4505:1;4502;4495:12;4457:52;-1:-1:-1;4528:23:1;;4377:180;-1:-1:-1;4377:180:1:o;4562:946::-;4646:6;4677:2;4720;4708:9;4699:7;4695:23;4691:32;4688:52;;;4736:1;4733;4726:12;4688:52;4776:9;4763:23;4805:18;4846:2;4838:6;4835:14;4832:34;;;4862:1;4859;4852:12;4832:34;4900:6;4889:9;4885:22;4875:32;;4945:7;4938:4;4934:2;4930:13;4926:27;4916:55;;4967:1;4964;4957:12;4916:55;5003:2;4990:16;5025:2;5021;5018:10;5015:36;;;5031:18;;:::i;:::-;5077:2;5074:1;5070:10;5060:20;;5100:28;5124:2;5120;5116:11;5100:28;:::i;:::-;5162:15;;;5232:11;;;5228:20;;;5193:12;;;;5260:19;;;5257:39;;;5292:1;5289;5282:12;5257:39;5316:11;;;;5336:142;5352:6;5347:3;5344:15;5336:142;;;5418:17;;5406:30;;5369:12;;;;5456;;;;5336:142;;;5497:5;4562:946;-1:-1:-1;;;;;;;;4562:946:1:o;5513:450::-;5587:6;5595;5603;5656:2;5644:9;5635:7;5631:23;5627:32;5624:52;;;5672:1;5669;5662:12;5624:52;5711:9;5698:23;5730:31;5755:5;5730:31;:::i;:::-;5780:5;-1:-1:-1;5832:2:1;5817:18;;5804:32;;-1:-1:-1;5888:2:1;5873:18;;5860:32;5901:30;5860:32;5901:30;:::i;:::-;5950:7;5940:17;;;5513:450;;;;;:::o;6993:396::-;7069:6;7077;7130:2;7118:9;7109:7;7105:23;7101:32;7098:52;;;7146:1;7143;7136:12;7098:52;7185:9;7172:23;7204:31;7229:5;7204:31;:::i;:::-;7254:5;-1:-1:-1;7311:2:1;7296:18;;7283:32;7324:33;7283:32;7324:33;:::i;:::-;7376:7;7366:17;;;6993:396;;;;;:::o;7394:472::-;7436:3;7474:5;7468:12;7501:6;7496:3;7489:19;7526:1;7536:162;7550:6;7547:1;7544:13;7536:162;;;7612:4;7668:13;;;7664:22;;7658:29;7640:11;;;7636:20;;7629:59;7565:12;7536:162;;;7716:6;7713:1;7710:13;7707:87;;;7782:1;7775:4;7766:6;7761:3;7757:16;7753:27;7746:38;7707:87;-1:-1:-1;7848:2:1;7827:15;-1:-1:-1;;7823:29:1;7814:39;;;;7855:4;7810:50;;7394:472;-1:-1:-1;;7394:472:1:o;7871:961::-;8264:4;8293:3;8323:2;8312:9;8305:21;8343:45;8384:2;8373:9;8369:18;8361:6;8343:45;:::i;:::-;8419:2;8404:18;;8397:34;;;;-1:-1:-1;;8462:2:1;8447:18;;8440:34;;;;8505:2;8490:18;;8483:34;;;;8548:3;8533:19;;8526:35;;;;8592:3;8577:19;;8570:35;;;;8636:3;8621:19;;8614:35;;;;8680:3;8665:19;;8658:35;8724:3;8709:19;;8702:35;8768:3;8753:19;;8746:35;8812:3;8797:19;;;8790:36;8335:53;7871:961;-1:-1:-1;7871:961:1:o;9593:887::-;9957:4;9986:3;10016:2;10005:9;9998:21;10036:45;10077:2;10066:9;10062:18;10054:6;10036:45;:::i;:::-;10112:2;10097:18;;10090:34;;;;-1:-1:-1;;10155:2:1;10140:18;;10133:34;;;;10198:2;10183:18;;10176:34;;;;10241:3;10226:19;;10219:35;;;;10285:3;10270:19;;10263:35;;;;10329:3;10314:19;;10307:35;10373:3;10358:19;;10351:35;10417:3;10402:19;;10395:35;10461:3;10446:19;;;10439:35;10028:53;9593:887;-1:-1:-1;9593:887:1:o;10485:525::-;10572:6;10580;10588;10641:2;10629:9;10620:7;10616:23;10612:32;10609:52;;;10657:1;10654;10647:12;10609:52;10696:9;10683:23;10715:31;10740:5;10715:31;:::i;:::-;10765:5;-1:-1:-1;10817:2:1;10802:18;;10789:32;;-1:-1:-1;10872:2:1;10857:18;;10844:32;10899:18;10888:30;;10885:50;;;10931:1;10928;10921:12;10885:50;10954;10996:7;10987:6;10976:9;10972:22;10954:50;:::i;11015:220::-;11164:2;11153:9;11146:21;11127:4;11184:45;11225:2;11214:9;11210:18;11202:6;11184:45;:::i;11240:457::-;11318:6;11326;11379:2;11367:9;11358:7;11354:23;11350:32;11347:52;;;11395:1;11392;11385:12;11347:52;11434:9;11421:23;11453:31;11478:5;11453:31;:::i;:::-;11503:5;-1:-1:-1;11559:2:1;11544:18;;11531:32;11586:18;11575:30;;11572:50;;;11618:1;11615;11608:12;11572:50;11641;11683:7;11674:6;11663:9;11659:22;11641:50;:::i;:::-;11631:60;;;11240:457;;;;;:::o;11702:335::-;11904:2;11886:21;;;11943:2;11923:18;;;11916:30;-1:-1:-1;;;11977:2:1;11962:18;;11955:41;12028:2;12013:18;;11702:335::o;12042:127::-;12103:10;12098:3;12094:20;12091:1;12084:31;12134:4;12131:1;12124:15;12158:4;12155:1;12148:15;12174:332;12376:2;12358:21;;;12415:1;12395:18;;;12388:29;-1:-1:-1;;;12448:2:1;12433:18;;12426:39;12497:2;12482:18;;12174:332::o;12511:356::-;12713:2;12695:21;;;12732:18;;;12725:30;12791:34;12786:2;12771:18;;12764:62;12858:2;12843:18;;12511:356::o;12872:127::-;12933:10;12928:3;12924:20;12921:1;12914:31;12964:4;12961:1;12954:15;12988:4;12985:1;12978:15;13004:135;13043:3;13064:17;;;13061:43;;13084:18;;:::i;:::-;-1:-1:-1;13131:1:1;13120:13;;13004:135::o;13144:127::-;13205:10;13200:3;13196:20;13193:1;13186:31;13236:4;13233:1;13226:15;13260:4;13257:1;13250:15;13276:184;13346:6;13399:2;13387:9;13378:7;13374:23;13370:32;13367:52;;;13415:1;13412;13405:12;13367:52;-1:-1:-1;13438:16:1;;13276:184;-1:-1:-1;13276:184:1:o;13465:383::-;-1:-1:-1;;;;;13731:15:1;;;13713:34;;13783:15;;;;13778:2;13763:18;;13756:43;13830:2;13815:18;;13808:34;;;;13663:2;13648:18;;13465:383::o;13853:245::-;13920:6;13973:2;13961:9;13952:7;13948:23;13944:32;13941:52;;;13989:1;13986;13979:12;13941:52;14021:9;14015:16;14040:28;14062:5;14040:28;:::i;14103:380::-;14182:1;14178:12;;;;14225;;;14246:61;;14300:4;14292:6;14288:17;14278:27;;14246:61;14353:2;14345:6;14342:14;14322:18;14319:38;14316:161;;14399:10;14394:3;14390:20;14387:1;14380:31;14434:4;14431:1;14424:15;14462:4;14459:1;14452:15;15308:128;15348:3;15379:1;15375:6;15372:1;15369:13;15366:39;;;15385:18;;:::i;:::-;-1:-1:-1;15421:9:1;;15308:128::o;15570:1104::-;15700:3;15729:1;15762:6;15756:13;15792:3;15814:1;15842:9;15838:2;15834:18;15824:28;;15902:2;15891:9;15887:18;15924;15914:61;;15968:4;15960:6;15956:17;15946:27;;15914:61;15994:2;16042;16034:6;16031:14;16011:18;16008:38;16005:165;;-1:-1:-1;;;16069:33:1;;16125:4;16122:1;16115:15;16155:4;16076:3;16143:17;16005:165;16186:18;16213:104;;;;16331:1;16326:323;;;;16179:470;;16213:104;-1:-1:-1;;16246:24:1;;16234:37;;16291:16;;;;-1:-1:-1;16213:104:1;;16326:323;15517:1;15510:14;;;15554:4;15541:18;;16424:1;16438:165;16452:6;16449:1;16446:13;16438:165;;;16530:14;;16517:11;;;16510:35;16573:16;;;;16467:10;;16438:165;;;16442:3;;16632:6;16627:3;16623:16;16616:23;;16179:470;-1:-1:-1;16665:3:1;;15570:1104;-1:-1:-1;;;;;;;;15570:1104:1:o;16679:168::-;16719:7;16785:1;16781;16777:6;16773:14;16770:1;16767:21;16762:1;16755:9;16748:17;16744:45;16741:71;;;16792:18;;:::i;:::-;-1:-1:-1;16832:9:1;;16679:168::o;16852:125::-;16892:4;16920:1;16917;16914:8;16911:34;;;16925:18;;:::i;:::-;-1:-1:-1;16962:9:1;;16852:125::o;16982:422::-;17071:1;17114:5;17071:1;17128:270;17149:7;17139:8;17136:21;17128:270;;;17208:4;17204:1;17200:6;17196:17;17190:4;17187:27;17184:53;;;17217:18;;:::i;:::-;17267:7;17257:8;17253:22;17250:55;;;17287:16;;;;17250:55;17366:22;;;;17326:15;;;;17128:270;;;17132:3;16982:422;;;;;:::o;17409:806::-;17458:5;17488:8;17478:80;;-1:-1:-1;17529:1:1;17543:5;;17478:80;17577:4;17567:76;;-1:-1:-1;17614:1:1;17628:5;;17567:76;17659:4;17677:1;17672:59;;;;17745:1;17740:130;;;;17652:218;;17672:59;17702:1;17693:10;;17716:5;;;17740:130;17777:3;17767:8;17764:17;17761:43;;;17784:18;;:::i;:::-;-1:-1:-1;;17840:1:1;17826:16;;17855:5;;17652:218;;17954:2;17944:8;17941:16;17935:3;17929:4;17926:13;17922:36;17916:2;17906:8;17903:16;17898:2;17892:4;17889:12;17885:35;17882:77;17879:159;;;-1:-1:-1;17991:19:1;;;18023:5;;17879:159;18070:34;18095:8;18089:4;18070:34;:::i;:::-;18140:6;18136:1;18132:6;18128:19;18119:7;18116:32;18113:58;;;18151:18;;:::i;:::-;18189:20;;17409:806;-1:-1:-1;;;17409:806:1:o;18220:131::-;18280:5;18309:36;18336:8;18330:4;18309:36;:::i;18356:217::-;18396:1;18422;18412:132;;18466:10;18461:3;18457:20;18454:1;18447:31;18501:4;18498:1;18491:15;18529:4;18526:1;18519:15;18412:132;-1:-1:-1;18558:9:1;;18356:217::o

Swarm Source

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