Token Blue Hippo

Overview ERC20

Price
$0.00 @ 0.000000 AVAX
Fully Diluted Market Cap
Total Supply:
1,329,227,995,759,820,000.637587 BHIP

Holders:
43 addresses

Transfers:
-

Contract:
0x9f3e56e5ef6ed22cb586397644e016ca462f5a150x9f3e56E5EF6ed22CB586397644e016Ca462F5a15

Decimals:
18

Social Profiles:
Not Available, Update ?

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BlueHippo

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 4: bluehippo.sol
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;

import "./IERC20.sol";
import "./SafeMath.sol";
import "./IWAGMI20.sol";


/*

Website - https://hippo.blue
Telegram - https://t.me/blue_hippo

 .----------------.  .----------------.  .----------------.  .----------------. 
| .--------------. || .--------------. || .--------------. || .--------------. |
| |   ______     | || |   _____      | || | _____  _____ | || |  _________   | |
| |  |_   _ \    | || |  |_   _|     | || ||_   _||_   _|| || | |_   ___  |  | |
| |    | |_) |   | || |    | |       | || |  | |    | |  | || |   | |_  \_|  | |
| |    |  __'.   | || |    | |   _   | || |  | '    ' |  | || |   |  _|  _   | |
| |   _| |__) |  | || |   _| |__/ |  | || |   \ `--' /   | || |  _| |___/ |  | |
| |  |_______/   | || |  |________|  | || |    `.__.'    | || | |_________|  | |
| |              | || |              | || |              | || |              | |
| '--------------' || '--------------' || '--------------' || '--------------' |
 '----------------'  '----------------'  '----------------'  '----------------' 
                     .^.,*.
                    (   )  )
                   .~       "-._   _.-'-*'-*'-*'-*'-'-.--._
                 /'             `"'                        `.
               _/'                                           `.
          __,""                                                ).--.
       .-'       `._.'                                          .--.\
      '                                                         )   \`:
     ;                                                          ;    "
    :                                                           )
    | 8                                                        ;
     =                  )                                     .
      \                .                                    .'
       `.            ~  \                                .-'
         `-._ _ _ . '    `.          ._        _        |
                           |        /  `"-*--*' |       |  mb
                           |        |           |       :


/**
 * Implement the basic ERC20 functions
 */
abstract contract ERC20 is IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) internal _balances;
    mapping (address => mapping (address => uint256)) internal _allowances;

    uint256 internal _totalSupply = 0;
    
    string internal _name;
    string internal _symbol;
    uint8 internal _decimals = 18;

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

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

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    
    function name() public view override returns (string memory) {
        return _name;
    }
    
    function symbol() public view override returns (string memory) {
        return _symbol;
    }
    
    function decimals() public view override returns (uint8) {
        return _decimals;
    }
}

/**
 * Store contract creation block & timestamp. 
 * Useful for APY calculations
 */
abstract contract RecordsCreation {
    uint256 public creationBlock;
    uint256 public creationTimestamp;
    
    constructor(){
        creationBlock = block.number;
        creationTimestamp = block.timestamp;
    }
}


/**
 * Provides ownable context 
 */
abstract contract Ownable {
    constructor() { _owner = msg.sender; }
    address payable _owner;
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }    
    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == _owner;
    }
    
    /**
     * Function modifier to require caller to be contract owner
     */
    modifier owned() {
        require(isOwner(msg.sender)); _;
    }
    
    /**
     * Transfer ownership to the zero address. Caller must be owner.
     */
    function renounceOwnership() public owned() {
        transferOwnership(address(0));
    }
    
    /**
     * Transfer ownership to new address. Caller must be owner.
     */
    function transferOwnership(address payable adr) public owned() {
        _owner = adr;
    }
}

/**
 * BlueHippoBot interface for accepting transfer hooks
 */
interface IBlueHippoBot {
    function txHook(address caller, address sender, address receiver, uint256 amount) external;
}

/**
 * Allow external contracts (BlueHippoBots) to hook into BlueHippo transactions
 */
abstract contract BlueHippoBotController is Ownable {
    struct BlueHippoBotInfo {
        bool bot;
        uint256 adrIndex;
    }
    
    mapping (address => BlueHippoBotInfo) _botsInfo;
    address[] _BlueHippoBots;
    uint256 _BlueHippoBotsCount;
    
    /**
     * Returns array of BlueHippoBots
     */
    function getBots() public view returns (address[] memory) {
        return _BlueHippoBots;
    }
    
    /**
     * Returns BlueHippoBot count
     */
    function getBotCount() public view returns (uint256) {
        return _BlueHippoBotsCount;
    }
    
    /**
     * Check if address is registered as BlueHippoBot
     */
    function isBot(address account) public view returns (bool) {
        return _botsInfo[account].bot;
    }
    
    /**
     * Add contract to list
     */
    function addBlueHippoBot(address bot) external owned {
        require(isContract(bot));
        _botsInfo[bot].bot = true;
        _botsInfo[bot].adrIndex = _BlueHippoBots.length;
        _BlueHippoBots.push(bot);
        _BlueHippoBotsCount++;
    }
    
    /**
     * Remove bot from list
     */
    function removeBlueHippoBot(address bot) external owned {
        require(isBot(bot));
        _botsInfo[bot].bot = false;
        _BlueHippoBotsCount--; 
        
        uint256 i = _botsInfo[bot].adrIndex; // gas savings
        
        // swap in removed bot with last holder and then pop from end
        _BlueHippoBots[i] = _BlueHippoBots[_BlueHippoBots.length-1];
        _botsInfo[_BlueHippoBots[i]].adrIndex = i;
        _BlueHippoBots.pop();
    }
    
    /**
     * Call all BlueHippoBot hooks
     */
    function BlueHippoBotTxHook(address sender, address receiver, uint256 amount) internal {
        if(getBotCount() == 0){ return; }
        for(uint256 i=0; i<_BlueHippoBots.length; i++){ 
            /* 
             * Using try-catch ensures that any errors / fails in one of the BlueHippoBot contracts will not cancel the overall transaction
             */
            try IBlueHippoBot(_BlueHippoBots[i]).txHook(msg.sender, sender, receiver, amount) {} catch {}
        }
    }
    
    /**
     * Check if address is contract.
     * Credit to OpenZeppelin
     */
    function isContract(address addr) internal view returns (bool) {
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
    
        bytes32 codehash;
        assembly {
            codehash := extcodehash(addr)
        }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

/**
 * Keeps a record of all holders.
 * Allows all holder data to be used on-chain by other contracts. ;)
 */
abstract contract TracksHolders is Ownable {
    
    /**
     * Struct for storing holdings data
     */
    struct Holding {
        bool holding; // whether address is currently holding
        uint256 adrIndex; // index of address in holders array
    }
    
    mapping (address => Holding) _holdings;
    address[] _holders;
    uint256 _holdersCount;
    
    /**
     * Returns array of holders
     */
    function getHolders() public view returns (address[] memory) {
        return _holders;
    }
    
    /**
     * Returns holders count
     */
    function getHoldersCount() public view returns (uint256) {
        return _holdersCount;
    }
    
    /**
     * Returns whether address is currently holder
     */
    function isHolder(address holder) public view returns (bool) {
        return _holdings[holder].holding;
    }
    
    /**
     * Add address to holders list
     */
    function addHolder(address account) internal {
        _holdings[account].holding = true;
        _holdings[account].adrIndex = _holders.length;
        _holders.push(account);
        _holdersCount++;
    }
    
    /**
     * Remove address from holders list
     */
    function removeHolder(address account) internal {
        _holdings[account].holding = false;
        
        // saves gas
        uint256 i = _holdings[account].adrIndex;
        
        // remove holder from array by swapping in end holder
        _holders[i] = _holders[_holders.length-1];
        _holders.pop();
        
        // update end holder index
        _holdings[_holders[i]].adrIndex = i;
        
        _holdersCount--;
    }
}

interface IBlueHippoDistributive {
    function getTotalStaked() external view returns (uint256);
    function getTotalFees() external view returns (uint256);
    
    function getStake(address staker) external view returns (uint256);
    function getEarnings(address staker) external view returns (uint256);
    
    function stake(uint256 amount) external;
    function unstake(uint256 amount) external;
    
    function getPairAddress() external view returns (address);
    function forceUnstakeAll() external;
    
    event Staked(address account, uint256 amount);
    event Unstaked(address account, uint256 amount);
    
    event FeesDistributed(address account, uint256 amount);
}

/* > We can soon purchase Sri Lanka with our market cap */

/**
 * This is where the fun begins
 */
abstract contract BlueHippoDistributive is IBlueHippoDistributive, ERC20, Ownable, TracksHolders {
    using SafeMath for uint256;
    
    IERC20 _pair;
    bool _pairInitialized;
    
    /**
     * Struct for holding record of account stakes.
     */
    struct Stake {
        uint256 LP; // Amount of LP tokens staked
        uint256 excludedAmt; // Amount of staking rewards to exclude from returns (if claimed or staked after)
        uint256 realised; // realised rewards
    }
    
    mapping (address => Stake) _stakes;
    
    uint256 _totalLP;
    uint256 _totalFees;
    uint256 _totalRealised;
    
    /**
     * Total LP tokens staked
     */
    function getTotalStaked() external override view returns (uint256) {
        return _totalLP;
    }
    
    /**
     * Total amount of transaction fees reflected to stakers
     */
    function getTotalFees() external override view returns (uint256) {
        return _totalFees;
    }
    
    /**
     * Returns amount of LP that address has staked
     */
    function getStake(address account) public override view returns (uint256) {
        return _stakes[account].LP;
    }
    
    /**
     * Returns total earnings (realised + unrealised)
     */
    function getEarnings(address staker) external override view returns (uint256) {
        return _stakes[staker].realised.add(earnt(staker)); // realised gains plus outstanding earnings
    }
    
    /**
     * Returns unrealised earnings
     */
    function getUnrealisedEarnings(address staker) external view returns (uint256) {
        return earnt(staker);
    }
    
    /**
     * Stake LP tokens to earn a share of the 4% tx fee
     */
    function stake(uint256 amount) external override pairInitialized {
        _stake(msg.sender, amount);
    }
    
    /**
     * Unstake LP tokens
     */
    function unstake(uint256 amount) external override pairInitialized {
        _unstake(msg.sender, amount);
    }
    
    /**
     * Return Cake-LP pair address
     */
    function getPairAddress() external view override returns (address) {
        return address(_pair);
    }
    
    /**
     * Return stakes to all holders
     */
    function forceUnstakeAll() external override owned {
        for(uint256 i=0; i<_holders.length; i++){
            uint256 amt = getStake(_holders[i]); // saves gas
            if(amt > 0){ _unstake(_holders[i], amt); }
        }
    }
    
    /**
     * Add outstanding staking rewards to balance
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account].add(earnt(account));
    }
    
    /**
     * Convert unrealised staking gains into actual balance
     */
    function realise() public {
        _realise(msg.sender);
    }
    
    /**
     * Realises outstanding staking rewards into balance
     */
    function _realise(address account) internal {
        if(getStake(account) != 0){
            uint256 amount = earnt(account);
            _balances[account] = _balances[account].add(amount);
            _stakes[account].realised = _stakes[account].realised.add(amount);
            _totalRealised = _totalRealised.add(amount);
        }
        _stakes[account].excludedAmt = _totalFees;
    }
    
    /**
     * Calculate current outstanding staking gains
     */
    function earnt(address account) internal view returns (uint256) {
        if(_stakes[account].excludedAmt == _totalFees || _stakes[account].LP == 0){ return 0; }
        uint256 availableFees = _totalFees.sub(_stakes[account].excludedAmt);
        uint256 share = availableFees.mul(_stakes[account].LP).div(_totalLP); // won't overflow as even totalsupply^2 is less than uint256 max
        return share;
    }
    
    /**
     * Stake amount LP from account
     */
    function _stake(address account, uint256 amount) internal {
        _pair.transferFrom(account, address(this), amount); // transfer LP tokens from account
        
        // realise staking gains now (also works to set excluded amt to current total rewards)
        _realise(account); 
        
        // add to current address' stake
        _stakes[account].LP = _stakes[account].LP.add(amount);
        _totalLP = _totalLP.add(amount);
        
        // ensure staker is recorded as holder
        updateHoldersStaked(account);
        
        emit Staked(account, amount);
    }
    
    /**
     * Unstake amount for account
     */
    function _unstake(address account, uint256 amount) internal {
        require(_stakes[account].LP >= amount); // ensure sender has staked more than or equal to requested amount
        
        _realise(account); // realise staking gains
        
        // remove stake
        _stakes[account].LP = _stakes[account].LP.sub(amount);
        _totalLP = _totalLP.sub(amount);
        
        // send LP tokens back
        _pair.transfer(account, amount);
        
        // check if sender is no longer a holder
        updateHoldersUnstaked(account);
        
        emit Unstaked(account, amount);
    }
    
    /**
     * Distribute amount to stakers.
     */
    function distribute(uint256 amount) external {
        _realise(msg.sender);
        require(_balances[msg.sender] >= amount);
        
        _balances[msg.sender] = _balances[msg.sender].sub(amount);
        _distribute(msg.sender, amount);
    }
    
    /**
     * Distribute amount from account as transaction fee
     */
    function _distribute(address account, uint256 amount) internal {
        _totalFees = _totalFees.add(amount);
        emit FeesDistributed(account, amount);
    }
    
    /**
     * Check if account is holding in context of transaction sender
     */
    function updateHoldersTransferSender(address account) internal {
        if(!isStillHolding(account)){ removeHolder(account); }
    }
    
    /**
     * Check if account is still holding in context of transaction recipient
     */
    function updateHoldersTransferRecipient(address account) internal {
        if(!isHolder(account)){ addHolder(account); }
    }
    
    /**
     * Check if account is holding in context of staking tokens
     */
    function updateHoldersStaked(address account) internal {
        if(!isHolder(account)){ addHolder(account); }
    }
    
    /**
     * Check if account is still holding in context of unstaking tokens
     */
    function updateHoldersUnstaked(address account) internal {
        if(!isStillHolding(account)){ removeHolder(account); }
    }
    
    /**
     * Check if account has a balance or a stake
     */
    function isStillHolding(address account) internal view returns (bool) {
        return balanceOf(account) > 0 || getStake(account) > 0;
    }
    
    /**
     * Require pair address to be set
     */
    modifier pairInitialized() { require(_pairInitialized); _; }
    
    /**
     * Set the pair address.
     * Don't allow changing whilst LP is staked (as this would prevent stakers getting their LP back)
     */
    function setPairAddress(address pair) external owned {
        require(_totalLP == 0, "Cannot change pair whilst there is LP staked");
        _pair = IERC20(pair);
        _pairInitialized = true;
    }
}

/* > BlueHippo governs exchanges & pools globally */

/**
 * This contract burns tokens on transactions
 */
abstract contract Burnable is BlueHippoDistributive {
    using SafeMath for uint256;
    
    uint256 _burnRate = 10; // 1.0% of tx's to  be split between burn/distribute
    uint256 _distributeRatio = 1; // 1:1 ratio of burn:distribute
    uint256 _totalBurnt;
    
    /**
     * Total amount of tokens burnt
     */
    function getTotalBurnt() external view returns (uint256) {
        return _totalBurnt;
    }
    
    /**
     * Current burn rate
     */
    function getBurnRate() public view returns (uint256) {
        return _burnRate;
    }
    
    /**
     * Current distribution ratio
     */
     function getDistributionRatio() public view returns (uint256) {
         return _distributeRatio;
     }
    
    /**
     * Change to a new burn rate
     */
    function setBurnRate(uint256 newRate) external owned {
        require(newRate < 100);
        _burnRate = newRate;
    }
    
    /**
     * Change the burn:stakers distribution ratio
     */
    function setDistributionRatio(uint256 newRatio) external owned {
        require(newRatio >= 1);
        _distributeRatio = newRatio;
    }  

    /**
     * Burns transaction amount as per burn rate & returns remaining transfer amount. 
     */
    function _txBurn(address account, uint256 txAmount) internal returns (uint256) {
        uint256 toBurn = txAmount.mul(_burnRate).div(1000); // calculate amount to burn
        
        _distribute(account, toBurn.mul(_distributeRatio-1).div(_distributeRatio));
        _burn(account, toBurn.div(_distributeRatio));
        
        return txAmount.sub(toBurn); // return amount left after burn
    }
    
    /**
     * Burn amount tokens from sender
     */
    function burn(uint256 amount) public {
        require(_balances[msg.sender] >= amount);
        _burn(msg.sender, amount);
    }
    
    /**
     * Burns amount of tokens from account
     */
    function _burn(address account, uint256 amount) internal {
        if(amount == 0){ return; }
        
        _totalSupply = _totalSupply.sub(amount);
        _totalBurnt = _totalBurnt.add(amount);
        _balances[account] = _balances[account].sub(amount);
        
        emit Burn(account, amount);
    }
    
    event Burn(address account, uint256 amount);
}

/**
 * Implements high level functions
 */
abstract contract WAGMI20 is IWAGMI20, Burnable, BlueHippoBotController {
    using SafeMath for uint256;
    
    uint32 _maxTxPercent = 30; // max size as % of supply as percentage to 1d.p, eg 30 = 3.0%
    bool _firstTx = true; // flag for first tx (as this will be to provide liquidity so don't want limit)
    
    /**
     * Mint tx sender with initial supply
     */
    constructor(uint256 supply) {
        uint256 amount = supply * (10 ** _decimals);
        _balances[msg.sender] = _balances[msg.sender].add(amount);
        _totalSupply = _totalSupply.add(amount);
        updateHoldersTransferRecipient(msg.sender); // ensure receiver is set as sender
        emit Transfer(address(0), msg.sender, amount);
    }
    
    /**
     * >Can I get a quick rundown?
     */
    function quickRundown(address account) external view override returns (uint256) {
        return balanceOf(account);    
    }
    
    /**
     * funds are safu?
     */
    function fundsAreSafu() external pure override returns (bool) {
        return true; // always ;)
    }

    /**
    * burns BlueHippo to the dead address 
    */

    function _burnToDeadAddress(address account, uint256 amount) internal virtual {
        _balances[account] = _balances[account].sub(amount);
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }   
   
    /**
     * Return owner address as per ERC20 standard
     */
    function getOwner() external view override returns (address) {
        return _owner;
    }
    
    /**
     * Ensure tx size is within allowed % of supply
     */
    function checkTxAmount(uint256 amount) internal {
        if(_firstTx){ _firstTx = amount == 0 ? true : false; return; } // skip first tx as this will be providing 100% as liquidity
        require(amount <= _totalSupply.mul(_maxTxPercent).div(1000), "Tx size exceeds limit");
    }

    /**
    * calls burn function
    */

    function burnToDeadAddress(uint256 amount) public onlyOwner {
        _burnToDeadAddress(msg.sender, amount);
    }    

    /**
     * Change the max tx size percent. Required to be from 1% to 100%
     */
    function setMaxTxPercent(uint32 amount) external owned {
        require(amount > 10 && amount < 1000, "Invalid max tx size"); // ensure > 1% & < 100%
        _maxTxPercent = amount;
    }
       
    /**
     * The transfer function. 
     * Normal transfer is also called through this and a sender==msg.sender check is used to determine whether to use allowance
     */
    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(sender != address(0), "Can't transfer from zero");
        require(recipient != address(0), "Can't transfer to zero");
        
        // ensure tx size is below limit
        checkTxAmount(amount); 
        
        // realise staked gains & then check if enough balance to cover
        _realise(sender);
        require(_balances[sender] >= amount, "Not enough balance");
        
        // require allowance if sender is not transaction creator
        if(sender != msg.sender){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Not enough allowance");
        }
        
        // burn & distribute
        uint256 sendAmt = _txBurn(sender, amount); 
        
        // transfer
        _balances[sender] = _balances[sender].sub(sendAmt);
        _balances[recipient] = _balances[recipient].add(sendAmt);
        
        // update holders
        updateHoldersTransferSender(sender);
        updateHoldersTransferRecipient(recipient);
        
        // call any hooks
        BlueHippoBotTxHook(sender, recipient, amount);
        
        emit Transfer(sender, recipient, sendAmt);
        return true;
    }
    
    /**
     * Approve spender to spend amount from msg.sender
     */
    function _approve(address spender, uint256 amount) internal returns (bool) {
        _allowances[msg.sender][spender] = amount;
        return true;
    }
    
    function heBought(address account, uint256 amount) external override { /* just for the IWAGMI20 meme */}
    function heSold(address account, uint256 amount) external override { /* just for the IWAGMI20 meme */ }
    
    
    /**
     * Approve spender to spend amount from msg.sender
     */
    function approve(address spender, uint256 amount) external override returns (bool) {
        return _approve(spender, amount);
    }
    
    /**
     * Transfer from msg.sender to recipient for amount
     */
    function transfer(address recipient, uint256 amount) external override returns (bool) {
         return _transferFrom(msg.sender, recipient, amount);
     }

    /**
     * Transfer amount from sender to recipient so long as msg.sender has at least amount allowance
     */
    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(sender, recipient, amount);
    }
    
    /**
     * Bulk execute transfers
     */
    function multiTransfer(address[] memory accounts, uint256[] memory amounts) external {
        require(accounts.length == amounts.length, "Accounts & amounts must be same length");
        for(uint256 i=0; i<accounts.length; i++){
            _transferFrom(msg.sender, accounts[i], amounts[i]);
        }
    }
}

contract BlueHippo is WAGMI20, RecordsCreation {
    using SafeMath for uint256;
    
    constructor() WAGMI20(1000000) {
        _name = "Blue Hippo";
        _symbol = "BHIP";
    }
}

File 2 of 4: IERC20.sol
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.7.4;


/**
 * ERC20 standard interface.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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);
}

File 3 of 4: IWAGMI20.sol
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.7.4;


/**
 * @dev Interface of the WAGMI20 standard
 */
interface IWAGMI20 {
    function quickRundown(address account) external view returns (uint256);
    function heBought(address account, uint256 amount) external;
    function heSold(address account, uint256 amount) external;
    function fundsAreSafu() external pure returns (bool);
}

File 4 of 4: SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.7.4;
/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */

library SafeMath {

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }


    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { if (b == 1) return ~uint120(0);
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) {
        return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FeesDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[{"internalType":"address","name":"bot","type":"address"}],"name":"addBlueHippoBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnToDeadAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creationBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creationTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceUnstakeAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundsAreSafu","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getBotCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBots","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDistributionRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHoldersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalBurnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getUnrealisedEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"heBought","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"heSold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"quickRundown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"realise","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bot","type":"address"}],"name":"removeBlueHippoBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"setBurnRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRatio","type":"uint256"}],"name":"setDistributionRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"amount","type":"uint32"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006002556012600560006101000a81548160ff021916908360ff160217905550600a600e556001600f55601e601460006101000a81548163ffffffff021916908363ffffffff1602179055506001601460046101000a81548160ff0219169083151502179055503480156200007957600080fd5b50620f424033600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560009054906101000a900460ff1660ff16600a0a8202905062000133816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620002c060201b62001ef81790919060201c565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200019181600254620002c060201b62001ef81790919060201c565b600281905550620001a8336200034960201b60201c565b3373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505043601581905550426016819055506040518060400160405280600a81526020017f426c756520486970706f00000000000000000000000000000000000000000000815250600390805190602001906200026b929190620004ec565b506040518060400160405280600481526020017f424849500000000000000000000000000000000000000000000000000000000081525060049080519060200190620002b9929190620004ec565b50620005a2565b6000808284019050838110156200033f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6200035a816200037460201b60201c565b62000371576200037081620003cd60201b60201c565b5b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff169050919050565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905550600780549050600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060086000815480929190600101919050555050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000524576000855562000570565b82601f106200053f57805160ff191683800117855562000570565b8280016001018555821562000570579182015b828111156200056f57825182559160200191906001019062000552565b5b5090506200057f919062000583565b5090565b5b808211156200059e57600081600090555060010162000584565b5090565b6139c780620005b26000396000f3fe608060405234801561001057600080fd5b50600436106102a05760003560e01c806370a08231116101675780639f5a9b7c116100ce578063cbb47d4611610087578063cbb47d4614610d74578063d4d7b19a14610dcc578063dd62ed3e14610e26578063f2fde38b14610e9e578063f47aee3f14610ee2578063f5197fb914610f10576102a0565b80639f5a9b7c14610c14578063a22d483214610c32578063a694fc3a14610c76578063a9059cbb14610ca4578063b2d4a6f114610d08578063b331108614610d56576102a0565b80638d5f81e2116101205780638d5f81e214610a7c57806391c05b0b14610ab057806393005dc214610ade57806395d89b4114610b3d578063986f3a7514610bc05780639b652d0214610bf4576102a0565b806370a0823114610966578063715018a6146109be57806373889f4a146109c85780637a766460146109e65780637d8cf4b614610a3e578063893d20e814610a48576102a0565b806326c932601161020b578063482cd6c5116101c4578063482cd6c5146108375780634af5da321461085557806351d19a4e1461087357806351f4ae63146108915780635fe8e7cc146108e9578063626e1ae714610948576102a0565b806326c93260146106b85780632e17de78146107065780632f54bf6e14610734578063313ce5671461078e5780633bbac579146107af57806342966c6814610809576102a0565b8063176345141161025d578063176345141461047457806318160ddd14610492578063189d165e146104b05780631e89d545146104de578063224b2a5b1461062a57806323b872dd14610634576102a0565b806306fdde03146102a55780630917e77614610328578063095ea7b3146103465780630e53c334146103aa578063131b9c04146103d857806313e9612f14610430575b600080fd5b6102ad610f54565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ed5780820151818401526020810190506102d2565b50505050905090810190601f16801561031a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610330610ff6565b6040518082815260200191505060405180910390f35b6103926004803603604081101561035c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611000565b60405180821515815260200191505060405180910390f35b6103d6600480360360208110156103c057600080fd5b8101908080359060200190929190505050611014565b005b61041a600480360360208110156103ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061103e565b6040518082815260200191505060405180910390f35b6104726004803603602081101561044657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110a4565b005b61047c6111e7565b6040518082815260200191505060405180910390f35b61049a6111ed565b6040518082815260200191505060405180910390f35b6104dc600480360360208110156104c657600080fd5b81019080803590602001909291905050506111f7565b005b610628600480360360408110156104f457600080fd5b810190808035906020019064010000000081111561051157600080fd5b82018360208201111561052357600080fd5b8035906020019184602083028401116401000000008311171561054557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156105a557600080fd5b8201836020820111156105b757600080fd5b803590602001918460208302840111640100000000831117156105d957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611220565b005b6106326112ca565b005b6106a06004803603606081101561064a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112d5565b60405180821515815260200191505060405180910390f35b610704600480360360408110156106ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112eb565b005b6107326004803603602081101561071c57600080fd5b81019080803590602001909291905050506112ef565b005b6107766004803603602081101561074a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611315565b60405180821515815260200191505060405180910390f35b61079661136f565b604051808260ff16815260200191505060405180910390f35b6107f1600480360360208110156107c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611386565b60405180821515815260200191505060405180910390f35b6108356004803603602081101561081f57600080fd5b81019080803590602001909291905050506113df565b005b61083f611437565b6040518082815260200191505060405180910390f35b61085d611441565b6040518082815260200191505060405180910390f35b61087b61144b565b6040518082815260200191505060405180910390f35b6108d3600480360360208110156108a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611455565b6040518082815260200191505060405180910390f35b6108f1611467565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610934578082015181840152602081019050610919565b505050509050019250505060405180910390f35b6109506114f5565b6040518082815260200191505060405180910390f35b6109a86004803603602081101561097c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114ff565b6040518082815260200191505060405180910390f35b6109c6611561565b005b6109d061157f565b6040518082815260200191505060405180910390f35b610a28600480360360208110156109fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611589565b6040518082815260200191505060405180910390f35b610a466115d5565b005b610a50611697565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a846116c1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610adc60048036036020811015610ac657600080fd5b81019080803590602001909291905050506116eb565b005b610ae66117df565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610b29578082015181840152602081019050610b0e565b505050509050019250505060405180910390f35b610b4561186d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b85578082015181840152602081019050610b6a565b50505050905090810190601f168015610bb25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610bf260048036036020811015610bd657600080fd5b81019080803563ffffffff16906020019092919050505061190f565b005b610bfc6119d4565b60405180821515815260200191505060405180910390f35b610c1c6119dd565b6040518082815260200191505060405180910390f35b610c7460048036036020811015610c4857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119e7565b005b610ca260048036036020811015610c8c57600080fd5b8101908080359060200190929190505050611ab3565b005b610cf060048036036040811015610cba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ad9565b60405180821515815260200191505060405180910390f35b610d5460048036036040811015610d1e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611aee565b005b610d5e611af2565b6040518082815260200191505060405180910390f35b610db660048036036020811015610d8a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611af8565b6040518082815260200191505060405180910390f35b610e0e60048036036020811015610de257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b0a565b60405180821515815260200191505060405180910390f35b610e8860048036036040811015610e3c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b63565b6040518082815260200191505060405180910390f35b610ee060048036036020811015610eb457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bea565b005b610f0e60048036036020811015610ef857600080fd5b8101908080359060200190929190505050611c40565b005b610f5260048036036020811015610f2657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cc8565b005b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fec5780601f10610fc157610100808354040283529160200191610fec565b820191906000526020600020905b815481529060010190602001808311610fcf57829003601f168201915b5050505050905090565b6000600b54905090565b600061100c8383611f80565b905092915050565b61101d33611315565b61102657600080fd5b600181101561103457600080fd5b80600f8190555050565b600061109d61104c8361200d565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154611ef890919063ffffffff16565b9050919050565b6110ad33611315565b6110b657600080fd5b6110bf81612184565b6110c857600080fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905550601280549050601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506012819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060136000815480929190600101919050555050565b60155481565b6000600254905090565b61120033611315565b61120957600080fd5b6064811061121657600080fd5b80600e8190555050565b805182511461127a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061391f6026913960400191505060405180910390fd5b60005b82518110156112c5576112b73384838151811061129657fe5b60200260200101518484815181106112aa57fe5b60200260200101516121cf565b50808060010191505061127d565b505050565b6112d333612718565b565b60006112e28484846121cf565b90509392505050565b5050565b600960149054906101000a900460ff1661130857600080fd5b61131233826128cc565b50565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000600560009054906101000a900460ff16905090565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff169050919050565b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561142a57600080fd5b6114343382612b0b565b50565b6000600e54905090565b6000600f54905090565b6000601354905090565b6000611460826114ff565b9050919050565b606060078054806020026020016040519081016040528092919081815260200182805480156114eb57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116114a1575b5050505050905090565b6000600c54905090565b600061155a61150d8361200d565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef890919063ffffffff16565b9050919050565b61156a33611315565b61157357600080fd5b61157d6000611bea565b565b6000600854905090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b6115de33611315565b6115e757600080fd5b60005b6007805490508110156116945760006116396007838154811061160957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611589565b90506000811115611686576116856007838154811061165457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826128cc565b5b5080806001019150506115ea565b50565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116f433612718565b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561173f57600080fd5b611790816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c3c90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117dc3382612c86565b50565b6060601280548060200260200160405190810160405280929190818152602001828054801561186357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611819575b5050505050905090565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119055780601f106118da57610100808354040283529160200191611905565b820191906000526020600020905b8154815290600101906020018083116118e857829003601f168201915b5050505050905090565b61191833611315565b61192157600080fd5b600a8163ffffffff1611801561193e57506103e88163ffffffff16105b6119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c6964206d61782074782073697a650000000000000000000000000081525060200191505060405180910390fd5b80601460006101000a81548163ffffffff021916908363ffffffff16021790555050565b60006001905090565b6000601054905090565b6119f033611315565b6119f957600080fd5b6000600b5414611a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613966602c913960400191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960146101000a81548160ff02191690831515021790555050565b600960149054906101000a900460ff16611acc57600080fd5b611ad63382612cfa565b50565b6000611ae63384846121cf565b905092915050565b5050565b60165481565b6000611b038261200d565b9050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff169050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611bf333611315565b611bfc57600080fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c4933611315565b611cbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b611cc53382612f08565b50565b611cd133611315565b611cda57600080fd5b611ce381611386565b611cec57600080fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905550601360008154809291906001900391905055506000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050601260016012805490500381548110611db657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660128281548110611dee57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806011600060128481548110611e4857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506012805480611ebf57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050565b600080828401905083811015611f76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001905092915050565b6000600c54600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015414806120a357506000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156120b1576000905061217f565b600061210a600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600c54612c3c90919063ffffffff16565b90506000612177600b54612169600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548561301590919063ffffffff16565b61309b90919063ffffffff16565b905080925050505b919050565b6000807fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b90506000833f90506000801b81141580156121c65750818114155b92505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612273576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43616e2774207472616e736665722066726f6d207a65726f000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612316576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616e2774207472616e7366657220746f207a65726f0000000000000000000081525060200191505060405180910390fd5b61231f826130e5565b61232884612718565b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612556576124d5826040518060400160405280601481526020017f4e6f7420656e6f75676820616c6c6f77616e6365000000000000000000000000815250600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131e49092919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600061256285846132c9565b90506125b5816000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c3c90919063ffffffff16565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612648816000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef890919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061269385613366565b61269c84613380565b6126a785858561339a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019150509392505050565b600061272382611589565b146128805760006127338261200d565b9050612786816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061281d81600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154611ef890919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061287881600d54611ef890919063ffffffff16565b600d81905550505b600c54600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555050565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154101561291b57600080fd5b61292482612718565b61297981600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612c3c90919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506129d481600b54612c3c90919063ffffffff16565b600b81905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612a6d57600080fd5b505af1158015612a81573d6000803e3d6000fd5b505050506040513d6020811015612a9757600080fd5b810190808051906020019092919050505050612ab2826134d2565b7f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f758282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b6000811415612b1957612c38565b612b2e81600254612c3c90919063ffffffff16565b600281905550612b4981601054611ef890919063ffffffff16565b601081905550612ba0816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c3c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b5050565b6000612c7e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131e4565b905092915050565b612c9b81600c54611ef890919063ffffffff16565b600c819055507f63be20cc905d5ba0cf65db405c4999f99f2575e521875f13a8009d6eed7a09d98282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015612dab57600080fd5b505af1158015612dbf573d6000803e3d6000fd5b505050506040513d6020811015612dd557600080fd5b810190808051906020019092919050505050612df082612718565b612e4581600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611ef890919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550612ea081600b54611ef890919063ffffffff16565b600b81905550612eaf826134ec565b7f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d8282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b612f59816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c3c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000808314156130285760009050613095565b600082840290508284828161303957fe5b0414613090576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806139456021913960400191505060405180910390fd5b809150505b92915050565b60006130dd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613506565b905092915050565b601460049054906101000a900460ff161561312a576000811461310957600061310c565b60015b601460046101000a81548160ff0219169083151502179055506131e1565b61316b6103e861315d601460009054906101000a900463ffffffff1663ffffffff1660025461301590919063ffffffff16565b61309b90919063ffffffff16565b8111156131e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f54782073697a652065786365656473206c696d6974000000000000000000000081525060200191505060405180910390fd5b5b50565b6000600183141561320a576000196effffffffffffffffffffffffffffff1690506132c2565b8383111582906132b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561327a57808201518184015260208101905061325f565b50505050905090810190601f1680156132a75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150505b9392505050565b6000806132f56103e86132e7600e548661301590919063ffffffff16565b61309b90919063ffffffff16565b905061332c84613327600f546133196001600f54038661301590919063ffffffff16565b61309b90919063ffffffff16565b612c86565b61334a84613345600f548461309b90919063ffffffff16565b612b0b565b61335d8184612c3c90919063ffffffff16565b91505092915050565b61336f816135cc565b61337d5761337c816135f3565b5b50565b61338981611b0a565b61339757613396816137ff565b5b50565b60006133a461144b565b14156133af576134cd565b60005b6012805490508110156134cb57601281815481106133cc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a50e1b3e338686866040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050600060405180830381600087803b1580156134a357600080fd5b505af19250505080156134b4575060015b6134bd576134be565b5b80806001019150506133b2565b505b505050565b6134db816135cc565b6134e9576134e8816135f3565b5b50565b6134f581611b0a565b61350357613502816137ff565b5b50565b600080831182906135b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561357757808201518184015260208101905061355c565b50505050905090810190601f1680156135a45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816135be57fe5b049050809150509392505050565b6000806135d8836114ff565b11806135ec575060006135ea83611589565b115b9050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055506000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506007600160078054905003815481106136aa57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600782815481106136e257fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600780548061373557fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905580600660006007848154811061377c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600860008154809291906001900391905055505050565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905550600780549050600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506008600081548092919060010191905055505056fe4163636f756e7473202620616d6f756e7473206d7573742062652073616d65206c656e677468536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e6e6f74206368616e67652070616972207768696c7374207468657265206973204c50207374616b6564a26469706673582212202eb28838e796ffd07a1cc88a579b0499db9d796bfd616aa3ffd4d0b243e0667064736f6c63430007040033

Deployed ByteCode Sourcemap

25540:193:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2965:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10773:101;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24479:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18643:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11354:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5674:257;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3407:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2559:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18438:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25218:315;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12887:65;;;:::i;:::-;;24985:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24284:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11982:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3891:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3177:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5508:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19377:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18114:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18268:106;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5325:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20816:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8006:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10966:101;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12657:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4257:92;;;:::i;:::-;;8161:96;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11150:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12336:240;;;:::i;:::-;;21491:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12162:107;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15364:255;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5162:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3069:96;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22224:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20998:105;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17964:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17303:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11816:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24700:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24174:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3442:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11611:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8339:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2802:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4444:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22006:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5990:469;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2965:92;3011:13;3044:5;3037:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2965:92;:::o;10773:101::-;10831:7;10858:8;;10851:15;;10773:101;:::o;24479:134::-;24556:4;24580:25;24589:7;24598:6;24580:8;:25::i;:::-;24573:32;;24479:134;;;;:::o;18643:142::-;4126:19;4134:10;4126:7;:19::i;:::-;4118:28;;;;;;18737:1:::1;18725:8;:13;;18717:22;;;::::0;::::1;;18769:8;18750:16;:27;;;;18643:142:::0;:::o;11354:191::-;11423:7;11450:43;11479:13;11485:6;11479:5;:13::i;:::-;11450:7;:15;11458:6;11450:15;;;;;;;;;;;;;;;:24;;;:28;;:43;;;;:::i;:::-;11443:50;;11354:191;;;:::o;5674:257::-;4126:19;4134:10;4126:7;:19::i;:::-;4118:28;;;;;;5746:15:::1;5757:3;5746:10;:15::i;:::-;5738:24;;;::::0;::::1;;5794:4;5773:9;:14;5783:3;5773:14;;;;;;;;;;;;;;;:18;;;:25;;;;;;;;;;;;;;;;;;5835:14;:21;;;;5809:9;:14;5819:3;5809:14;;;;;;;;;;;;;;;:23;;:47;;;;5867:14;5887:3;5867:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5902:19;;:21;;;;;;;;;;;;;5674:257:::0;:::o;3407:28::-;;;;:::o;2559:100::-;2612:7;2639:12;;2632:19;;2559:100;:::o;18438:124::-;4126:19;4134:10;4126:7;:19::i;:::-;4118:28;;;;;;18520:3:::1;18510:7;:13;18502:22;;;::::0;::::1;;18547:7;18535:9;:19;;;;18438:124:::0;:::o;25218:315::-;25341:7;:14;25322:8;:15;:33;25314:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25413:9;25409:117;25428:8;:15;25426:1;:17;25409:117;;;25464:50;25478:10;25490:8;25499:1;25490:11;;;;;;;;;;;;;;25503:7;25511:1;25503:10;;;;;;;;;;;;;;25464:13;:50::i;:::-;;25445:3;;;;;;;25409:117;;;;25218:315;;:::o;12887:65::-;12924:20;12933:10;12924:8;:20::i;:::-;12887:65::o;24985:172::-;25085:4;25109:40;25123:6;25131:9;25142:6;25109:13;:40::i;:::-;25102:47;;24985:172;;;;;:::o;24284:103::-;;;:::o;11982:114::-;17117:16;;;;;;;;;;;17109:25;;;;;;12060:28:::1;12069:10;12081:6;12060:8;:28::i;:::-;11982:114:::0;:::o;3891:104::-;3946:4;3981:6;;;;;;;;;;;3970:17;;:7;:17;;;3963:24;;3891:104;;;:::o;3177:92::-;3227:5;3252:9;;;;;;;;;;;3245:16;;3177:92;:::o;5508:107::-;5561:4;5585:9;:18;5595:7;5585:18;;;;;;;;;;;;;;;:22;;;;;;;;;;;;5578:29;;5508:107;;;:::o;19377:132::-;19458:6;19433:9;:21;19443:10;19433:21;;;;;;;;;;;;;;;;:31;;19425:40;;;;;;19476:25;19482:10;19494:6;19476:5;:25::i;:::-;19377:132;:::o;18114:88::-;18158:7;18185:9;;18178:16;;18114:88;:::o;18268:106::-;18321:7;18349:16;;18342:23;;18268:106;:::o;5325:98::-;5369:7;5396:19;;5389:26;;5325:98;:::o;20816:128::-;20887:7;20914:18;20924:7;20914:9;:18::i;:::-;20907:25;;20816:128;;;:::o;8006:95::-;8049:16;8085:8;8078:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8006:95;:::o;10966:101::-;11022:7;11049:10;;11042:17;;10966:101;:::o;12657:139::-;12723:7;12750:38;12773:14;12779:7;12773:5;:14::i;:::-;12750:9;:18;12760:7;12750:18;;;;;;;;;;;;;;;;:22;;:38;;;;:::i;:::-;12743:45;;12657:139;;;:::o;4257:92::-;4126:19;4134:10;4126:7;:19::i;:::-;4118:28;;;;;;4312:29:::1;4338:1;4312:17;:29::i;:::-;4257:92::o:0;8161:96::-;8209:7;8236:13;;8229:20;;8161:96;:::o;11150:119::-;11215:7;11242;:16;11250:7;11242:16;;;;;;;;;;;;;;;:19;;;11235:26;;11150:119;;;:::o;12336:240::-;4126:19;4134:10;4126:7;:19::i;:::-;4118:28;;;;;;12402:9:::1;12398:171;12417:8;:15;;;;12415:1;:17;12398:171;;;12453:11;12467:21;12476:8;12485:1;12476:11;;;;;;;;;;;;;;;;;;;;;;;;;12467:8;:21::i;:::-;12453:35;;12525:1;12519:3;:7;12516:42;;;12529:26;12538:8;12547:1;12538:11;;;;;;;;;;;;;;;;;;;;;;;;;12551:3;12529:8;:26::i;:::-;12516:42;12398:171;12434:3;;;;;;;12398:171;;;;12336:240::o:0;21491:93::-;21543:7;21570:6;;;;;;;;;;;21563:13;;21491:93;:::o;12162:107::-;12220:7;12255:5;;;;;;;;;;;12240:21;;12162:107;:::o;15364:255::-;15420:20;15429:10;15420:8;:20::i;:::-;15484:6;15459:9;:21;15469:10;15459:21;;;;;;;;;;;;;;;;:31;;15451:40;;;;;;15536:33;15562:6;15536:9;:21;15546:10;15536:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;15512:9;:21;15522:10;15512:21;;;;;;;;;;;;;;;:57;;;;15580:31;15592:10;15604:6;15580:11;:31::i;:::-;15364:255;:::o;5162:98::-;5202:16;5238:14;5231:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5162:98;:::o;3069:96::-;3117:13;3150:7;3143:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3069:96;:::o;22224:191::-;4126:19;4134:10;4126:7;:19::i;:::-;4118:28;;;;;;22307:2:::1;22298:6;:11;;;:28;;;;;22322:4;22313:6;:13;;;22298:28;22290:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;22401:6;22385:13;;:22;;;;;;;;;;;;;;;;;;22224:191:::0;:::o;20998:105::-;21054:4;21078;21071:11;;20998:105;:::o;17964:94::-;18012:7;18039:11;;18032:18;;17964:94;:::o;17303:207::-;4126:19;4134:10;4126:7;:19::i;:::-;4118:28;;;;;;17387:1:::1;17375:8;;:13;17367:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17463:4;17448:5;;:20;;;;;;;;;;;;;;;;;;17498:4;17479:16;;:23;;;;;;;;;;;;;;;;;;17303:207:::0;:::o;11816:110::-;17117:16;;;;;;;;;;;17109:25;;;;;;11892:26:::1;11899:10;11911:6;11892;:26::i;:::-;11816:110:::0;:::o;24700:158::-;24780:4;24805:44;24819:10;24831:9;24842:6;24805:13;:44::i;:::-;24798:51;;24700:158;;;;:::o;24174:104::-;;;:::o;3442:32::-;;;;:::o;11611:118::-;11681:7;11708:13;11714:6;11708:5;:13::i;:::-;11701:20;;11611:118;;;:::o;8339:112::-;8394:4;8418:9;:17;8428:6;8418:17;;;;;;;;;;;;;;;:25;;;;;;;;;;;;8411:32;;8339:112;;;:::o;2802:151::-;2891:7;2918:11;:18;2930:5;2918:18;;;;;;;;;;;;;;;:27;2937:7;2918:27;;;;;;;;;;;;;;;;2911:34;;2802:151;;;;:::o;4444:94::-;4126:19;4134:10;4126:7;:19::i;:::-;4118:28;;;;;;4527:3:::1;4518:6;;:12;;;;;;;;;;;;;;;;;;4444:94:::0;:::o;22006:117::-;3788:19;3796:10;3788:7;:19::i;:::-;3780:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22077::::1;22096:10;22108:6;22077:18;:38::i;:::-;22006:117:::0;:::o;5990:469::-;4126:19;4134:10;4126:7;:19::i;:::-;4118:28;;;;;;6065:10:::1;6071:3;6065:5;:10::i;:::-;6057:19;;;::::0;::::1;;6108:5;6087:9;:14;6097:3;6087:14;;;;;;;;;;;;;;;:18;;;:26;;;;;;;;;;;;;;;;;;6124:19;;:21;;;;;;;;;;;;;;6167:9;6179;:14;6189:3;6179:14;;;;;;;;;;;;;;;:23;;;6167:35;;6329:14;6366:1;6344:14;:21;;;;:23;6329:39;;;;;;;;;;;;;;;;;;;;;;;;;6309:14;6324:1;6309:17;;;;;;;;;;;;;;;;:59;;;;;;;;;;;;;;;;;;6419:1;6379:9;:28;6389:14;6404:1;6389:17;;;;;;;;;;;;;;;;;;;;;;;;;6379:28;;;;;;;;;;;;;;;:37;;:41;;;;6431:14;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4148:1;5990:469:::0;:::o;605:181:2:-;663:7;683:9;699:1;695;:5;683:17;;724:1;719;:6;;711:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;777:1;770:8;;;605:181;;;;:::o;24005:157:3:-;24074:4;24126:6;24091:11;:23;24103:10;24091:23;;;;;;;;;;;;;;;:32;24115:7;24091:32;;;;;;;;;;;;;;;:41;;;;24150:4;24143:11;;24005:157;;;;:::o;13524:415::-;13579:7;13634:10;;13602:7;:16;13610:7;13602:16;;;;;;;;;;;;;;;:28;;;:42;:70;;;;13671:1;13648:7;:16;13656:7;13648:16;;;;;;;;;;;;;;;:19;;;:24;13602:70;13599:87;;;13682:1;13675:8;;;;13599:87;13696:21;13720:44;13735:7;:16;13743:7;13735:16;;;;;;;;;;;;;;;:28;;;13720:10;;:14;;:44;;;;:::i;:::-;13696:68;;13775:13;13791:52;13834:8;;13791:38;13809:7;:16;13817:7;13809:16;;;;;;;;;;;;;;;:19;;;13791:13;:17;;:38;;;;:::i;:::-;:42;;:52;;;;:::i;:::-;13775:68;;13926:5;13919:12;;;;13524:415;;;;:::o;7113:339::-;7170:4;7187:19;7209:66;7187:88;;;;7292:16;7367:4;7355:17;7343:29;;7413:3;7401:15;;:8;:15;;:42;;;;;7432:11;7420:8;:23;;7401:42;7393:51;;;;7113:339;;;:::o;22609:1310::-;22701:4;22744:1;22726:20;;:6;:20;;;;22718:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22815:1;22794:23;;:9;:23;;;;22786:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22907:21;22921:6;22907:13;:21::i;:::-;23023:16;23032:6;23023:8;:16::i;:::-;23079:6;23058:9;:17;23068:6;23058:17;;;;;;;;;;;;;;;;:27;;23050:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23209:10;23199:20;;:6;:20;;;23196:152;;23269:67;23305:6;23269:67;;;;;;;;;;;;;;;;;:11;:19;23281:6;23269:19;;;;;;;;;;;;;;;:31;23289:10;23269:31;;;;;;;;;;;;;;;;:35;;:67;;;;;:::i;:::-;23235:11;:19;23247:6;23235:19;;;;;;;;;;;;;;;:31;23255:10;23235:31;;;;;;;;;;;;;;;:101;;;;23196:152;23398:15;23416:23;23424:6;23432;23416:7;:23::i;:::-;23398:41;;23502:30;23524:7;23502:9;:17;23512:6;23502:17;;;;;;;;;;;;;;;;:21;;:30;;;;:::i;:::-;23482:9;:17;23492:6;23482:17;;;;;;;;;;;;;;;:50;;;;23566:33;23591:7;23566:9;:20;23576:9;23566:20;;;;;;;;;;;;;;;;:24;;:33;;;;:::i;:::-;23543:9;:20;23553:9;23543:20;;;;;;;;;;;;;;;:56;;;;23647:35;23675:6;23647:27;:35::i;:::-;23693:41;23724:9;23693:30;:41::i;:::-;23782:45;23801:6;23809:9;23820:6;23782:18;:45::i;:::-;23870:9;23853:36;;23862:6;23853:36;;;23881:7;23853:36;;;;;;;;;;;;;;;;;;23907:4;23900:11;;;22609:1310;;;;;:::o;13040:402::-;13119:1;13098:17;13107:7;13098:8;:17::i;:::-;:22;13095:288;;13136:14;13153;13159:7;13153:5;:14::i;:::-;13136:31;;13203:30;13226:6;13203:9;:18;13213:7;13203:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;13182:9;:18;13192:7;13182:18;;;;;;;;;;;;;;;:51;;;;13276:37;13306:6;13276:7;:16;13284:7;13276:16;;;;;;;;;;;;;;;:25;;;:29;;:37;;;;:::i;:::-;13248:7;:16;13256:7;13248:16;;;;;;;;;;;;;;;:25;;:65;;;;13345:26;13364:6;13345:14;;:18;;:26;;;;:::i;:::-;13328:14;:43;;;;13095:288;;13424:10;;13393:7;:16;13401:7;13393:16;;;;;;;;;;;;;;;:28;;:41;;;;13040:402;:::o;14672:624::-;14774:6;14751:7;:16;14759:7;14751:16;;;;;;;;;;;;;;;:19;;;:29;;14743:38;;;;;;14869:17;14878:7;14869:8;:17::i;:::-;14979:31;15003:6;14979:7;:16;14987:7;14979:16;;;;;;;;;;;;;;;:19;;;:23;;:31;;;;:::i;:::-;14957:7;:16;14965:7;14957:16;;;;;;;;;;;;;;;:19;;:53;;;;15032:20;15045:6;15032:8;;:12;;:20;;;;:::i;:::-;15021:8;:31;;;;15105:5;;;;;;;;;;;:14;;;15120:7;15129:6;15105:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15207:30;15229:7;15207:21;:30::i;:::-;15263:25;15272:7;15281:6;15263:25;;;;;;;;;;;;;;;;;;;;;;;;;;14672:624;;:::o;19583:318::-;19664:1;19654:6;:11;19651:26;;;19668:7;;19651:26;19712:24;19729:6;19712:12;;:16;;:24;;;;:::i;:::-;19697:12;:39;;;;19761:23;19777:6;19761:11;;:15;;:23;;;;:::i;:::-;19747:11;:37;;;;19816:30;19839:6;19816:9;:18;19826:7;19816:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;19795:9;:18;19805:7;19795:18;;;;;;;;;;;;;;;:51;;;;19872:21;19877:7;19886:6;19872:21;;;;;;;;;;;;;;;;;;;;;;;;;;19583:318;;;:::o;1069:136:2:-;1127:7;1154:43;1158:1;1161;1154:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1147:50;;1069:136;;;;:::o;15707:165:3:-;15794:22;15809:6;15794:10;;:14;;:22;;;;:::i;:::-;15781:10;:35;;;;15832:32;15848:7;15857:6;15832:32;;;;;;;;;;;;;;;;;;;;;;;;;;15707:165;;:::o;14006:601::-;14075:5;;;;;;;;;;;:18;;;14094:7;14111:4;14118:6;14075:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14277:17;14286:7;14277:8;:17::i;:::-;14380:31;14404:6;14380:7;:16;14388:7;14380:16;;;;;;;;;;;;;;;:19;;;:23;;:31;;;;:::i;:::-;14358:7;:16;14366:7;14358:16;;;;;;;;;;;;;;;:19;;:53;;;;14433:20;14446:6;14433:8;;:12;;:20;;;;:::i;:::-;14422:8;:31;;;;14522:28;14542:7;14522:19;:28::i;:::-;14576:23;14583:7;14592:6;14576:23;;;;;;;;;;;;;;;;;;;;;;;;;;14006:601;;:::o;21174:234::-;21284:30;21307:6;21284:9;:18;21294:7;21284:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;21263:9;:18;21273:7;21263:18;;;;;;;;;;;;;;;:51;;;;21341:6;21325:12;;:22;;;;;;;;;;;21389:1;21363:37;;21372:7;21363:37;;;21393:6;21363:37;;;;;;;;;;;;;;;;;;21174:234;;:::o;1698:237:2:-;1756:7;1776:1;1771;:6;1767:43;;;1797:1;1790:8;;;;1767:43;1822:9;1838:1;1834;:5;1822:17;;1867:1;1862;1858;:5;;;;;;:10;1850:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1926:1;1919:8;;;1698:237;;;;;:::o;2433:132::-;2491:7;2518:39;2522:1;2525;2518:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2511:46;;2433:132;;;;:::o;21667:285:3:-;21729:8;;;;;;;;;;;21726:62;;;21761:1;21751:6;:11;:26;;21772:5;21751:26;;;21765:4;21751:26;21740:8;;:37;;;;;;;;;;;;;;;;;;21779:7;;21726:62;21877:41;21913:4;21877:31;21894:13;;;;;;;;;;;21877:31;;:12;;:16;;:31;;;;:::i;:::-;:35;;:41;;;;:::i;:::-;21867:6;:51;;21859:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21667:285;;:::o;1215:224:2:-;1301:7;1321:1;1316;:6;1312:30;;;1340:1;1331:11;1324:18;;;;;;1312:30;1366:1;1361;:6;;1369:12;1353:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1393:9;1409:1;1405;:5;1393:17;;1430:1;1423:8;;;1215:224;;;;;;:::o;18901:407:3:-;18971:7;18991:14;19008:33;19036:4;19008:23;19021:9;;19008:8;:12;;:23;;;;:::i;:::-;:27;;:33;;;;:::i;:::-;18991:50;;19090:74;19102:7;19111:52;19146:16;;19111:30;19139:1;19122:16;;:18;19111:6;:10;;:30;;;;:::i;:::-;:34;;:52;;;;:::i;:::-;19090:11;:74::i;:::-;19175:44;19181:7;19190:28;19201:16;;19190:6;:10;;:28;;;;:::i;:::-;19175:5;:44::i;:::-;19247:20;19260:6;19247:8;:12;;:20;;;;:::i;:::-;19240:27;;;18901:407;;;;:::o;15971:135::-;16049:23;16064:7;16049:14;:23::i;:::-;16045:54;;16075:21;16088:7;16075:12;:21::i;:::-;16045:54;15971:135;:::o;16214:129::-;16295:17;16304:7;16295:8;:17::i;:::-;16291:45;;16315:18;16325:7;16315:9;:18::i;:::-;16291:45;16214:129;:::o;6525:489::-;6643:1;6626:13;:11;:13::i;:::-;:18;6623:33;;;6647:7;;6623:33;6670:9;6666:341;6685:14;:21;;;;6683:1;:23;6666:341;;;6921:14;6936:1;6921:17;;;;;;;;;;;;;;;;;;;;;;;;;6907:39;;;6947:10;6959:6;6967:8;6977:6;6907:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6903:93;;;;;;6708:3;;;;;;;6666:341;;;;6525:489;;;;:::o;16659:129::-;16731:23;16746:7;16731:14;:23::i;:::-;16727:54;;16757:21;16770:7;16757:12;:21::i;:::-;16727:54;16659:129;:::o;16438:118::-;16508:17;16517:7;16508:8;:17::i;:::-;16504:45;;16528:18;16538:7;16528:9;:18::i;:::-;16504:45;16438:118;:::o;2573:345:2:-;2659:7;2758:1;2754;:5;2761:12;2746:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2785:9;2801:1;2797;:5;;;;;;2785:17;;2909:1;2902:8;;;2573:345;;;;;:::o;16868:143:3:-;16932:4;16977:1;16956:18;16966:7;16956:9;:18::i;:::-;:22;:47;;;;17002:1;16982:17;16991:7;16982:8;:17::i;:::-;:21;16956:47;16949:54;;16868:143;;;:::o;8800:461::-;8888:5;8859:9;:18;8869:7;8859:18;;;;;;;;;;;;;;;:26;;;:34;;;;;;;;;;;;;;;;;;8936:9;8948;:18;8958:7;8948:18;;;;;;;;;;;;;;;:27;;;8936:39;;9073:8;9098:1;9082:8;:15;;;;:17;9073:27;;;;;;;;;;;;;;;;;;;;;;;;;9059:8;9068:1;9059:11;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;9111:8;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9216:1;9182:9;:22;9192:8;9201:1;9192:11;;;;;;;;;;;;;;;;;;;;;;;;;9182:22;;;;;;;;;;;;;;;:31;;:35;;;;9238:13;;:15;;;;;;;;;;;;;;8800:461;;:::o;8517:212::-;8602:4;8573:9;:18;8583:7;8573:18;;;;;;;;;;;;;;;:26;;;:33;;;;;;;;;;;;;;;;;;8647:8;:15;;;;8617:9;:18;8627:7;8617:18;;;;;;;;;;;;;;;:27;;:45;;;;8673:8;8687:7;8673:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8706:13;;:15;;;;;;;;;;;;;8517:212;:::o

Swarm Source

ipfs://2eb28838e796ffd07a1cc88a579b0499db9d796bfd616aa3ffd4d0b243e06670
Loading