ETH Price: $2,332.63 (-0.60%)

Contract

0x6db47D5A1D1722503f09F658EbBbB2604b984604
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve185446072023-11-10 22:44:23306 days ago1699656263IN
0x6db47D5A...04b984604
0 ETH0.0009424638.74167388
Approve183739772023-10-18 1:30:35330 days ago1697592635IN
0x6db47D5A...04b984604
0 ETH0.000252855.42474149
Approve181888372023-09-22 3:52:47356 days ago1695354767IN
0x6db47D5A...04b984604
0 ETH0.00040588.70615879
Approve181807552023-09-21 0:42:47357 days ago1695256967IN
0x6db47D5A...04b984604
0 ETH0.000195068.01853402
Approve181807462023-09-21 0:40:59357 days ago1695256859IN
0x6db47D5A...04b984604
0 ETH0.000252648.67376084
Approve181476732023-09-16 8:57:59362 days ago1694854679IN
0x6db47D5A...04b984604
0 ETH0.000256478.76914168
Approve180657142023-09-04 21:10:23373 days ago1693861823IN
0x6db47D5A...04b984604
0 ETH0.0010650222.97343584
Approve180656222023-09-04 20:51:59373 days ago1693860719IN
0x6db47D5A...04b984604
0 ETH0.0010610222.88723158
Approve179960132023-08-26 2:55:47383 days ago1693018547IN
0x6db47D5A...04b984604
0 ETH0.000414814.20602677
Approve179581812023-08-20 19:55:59388 days ago1692561359IN
0x6db47D5A...04b984604
0 ETH0.0005105217.48445252
Approve179581612023-08-20 19:51:59388 days ago1692561119IN
0x6db47D5A...04b984604
0 ETH0.0003884214.72023703
Approve179581562023-08-20 19:50:59388 days ago1692561059IN
0x6db47D5A...04b984604
0 ETH0.0004123715.62781459
Approve179433142023-08-18 17:58:59390 days ago1692381539IN
0x6db47D5A...04b984604
0 ETH0.001320928.49297753
Approve179346322023-08-17 12:47:11392 days ago1692276431IN
0x6db47D5A...04b984604
0 ETH0.000526519.95301157
Approve179346242023-08-17 12:45:35392 days ago1692276335IN
0x6db47D5A...04b984604
0 ETH0.0009394720.29677581
Approve178563302023-08-06 13:51:47403 days ago1691329907IN
0x6db47D5A...04b984604
0 ETH0.0013174828.2291836
Approve178509622023-08-05 19:49:23403 days ago1691264963IN
0x6db47D5A...04b984604
0 ETH0.0007975917.22702104
Approve178483532023-08-05 11:04:47404 days ago1691233487IN
0x6db47D5A...04b984604
0 ETH0.0008172517.53351078
Approve178480612023-08-05 10:05:35404 days ago1691229935IN
0x6db47D5A...04b984604
0 ETH0.00040513.87057356
Approve178476602023-08-05 8:44:59404 days ago1691225099IN
0x6db47D5A...04b984604
0 ETH0.0008399117.99654848
Approve178476322023-08-05 8:39:23404 days ago1691224763IN
0x6db47D5A...04b984604
0 ETH0.0006656114.28013595
Approve178474132023-08-05 7:55:11404 days ago1691222111IN
0x6db47D5A...04b984604
0 ETH0.000656914.09334168
Approve178467352023-08-05 5:38:59404 days ago1691213939IN
0x6db47D5A...04b984604
0 ETH0.0003809413.01974056
Approve178462262023-08-05 3:56:23404 days ago1691207783IN
0x6db47D5A...04b984604
0 ETH0.0006877914.75604859
Approve178452962023-08-05 0:49:11404 days ago1691196551IN
0x6db47D5A...04b984604
0 ETH0.0004111514.08099294
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
180217662023-08-29 17:29:47379 days ago1693330187
0x6db47D5A...04b984604
0.004204 ETH
180217662023-08-29 17:29:47379 days ago1693330187
0x6db47D5A...04b984604
0.00418308 ETH
180217662023-08-29 17:29:47379 days ago1693330187
0x6db47D5A...04b984604
0.00838709 ETH
178592462023-08-06 23:39:59402 days ago1691365199
0x6db47D5A...04b984604
0.00409832 ETH
178592462023-08-06 23:39:59402 days ago1691365199
0x6db47D5A...04b984604
0.00407793 ETH
178592462023-08-06 23:39:59402 days ago1691365199
0x6db47D5A...04b984604
0.00817626 ETH
178476832023-08-05 8:49:35404 days ago1691225375
0x6db47D5A...04b984604
0.00507518 ETH
178476832023-08-05 8:49:35404 days ago1691225375
0x6db47D5A...04b984604
0.00504993 ETH
178476832023-08-05 8:49:35404 days ago1691225375
0x6db47D5A...04b984604
0.01012512 ETH
178476602023-08-05 8:44:59404 days ago1691225099
0x6db47D5A...04b984604
0.00507518 ETH
178476602023-08-05 8:44:59404 days ago1691225099
0x6db47D5A...04b984604
0.00504993 ETH
178476602023-08-05 8:44:59404 days ago1691225099
0x6db47D5A...04b984604
0.01012512 ETH
178443682023-08-04 21:42:35404 days ago1691185355
0x6db47D5A...04b984604
0.00612057 ETH
178443682023-08-04 21:42:35404 days ago1691185355
0x6db47D5A...04b984604
0.00609012 ETH
178443682023-08-04 21:42:35404 days ago1691185355
0x6db47D5A...04b984604
0.01221069 ETH
178442442023-08-04 21:17:47404 days ago1691183867
0x6db47D5A...04b984604
0.00712004 ETH
178442442023-08-04 21:17:47404 days ago1691183867
0x6db47D5A...04b984604
0.00708461 ETH
178442442023-08-04 21:17:47404 days ago1691183867
0x6db47D5A...04b984604
0.01420465 ETH
178440902023-08-04 20:46:59404 days ago1691182019
0x6db47D5A...04b984604
0.00980905 ETH
178440902023-08-04 20:46:59404 days ago1691182019
0x6db47D5A...04b984604
0.00976025 ETH
178440902023-08-04 20:46:59404 days ago1691182019
0x6db47D5A...04b984604
0.0195693 ETH
178438552023-08-04 19:59:23404 days ago1691179163
0x6db47D5A...04b984604
0.0125732 ETH
178438552023-08-04 19:59:23404 days ago1691179163
0x6db47D5A...04b984604
0.01251065 ETH
178438552023-08-04 19:59:23404 days ago1691179163
0x6db47D5A...04b984604
0.02508386 ETH
178437702023-08-04 19:42:11404 days ago1691178131
0x6db47D5A...04b984604
0.01280661 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ButterflyEffect

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-04
*/

/**

"What happens today will effect your tomorrow."

https://butterflyeffect-erc.vip/
https://t.me/ButterflyEffectCoin
https://twitter.com/Effect_ERC


*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;


library SafeMath {
    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;}}}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function circulatingSupply() 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);}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

interface stakeIntegration {
    function stakingWithdraw(address depositor, uint256 _amount) external;
    function stakingDeposit(address depositor, uint256 _amount) external;
    function stakingClaimToCompound(address sender, address recipient) external;
    function internalClaimRewards(address sender) external;
}

interface tokenStaking {
    function deposit(uint256 amount) external;
    function withdraw(uint256 amount) external;
    function compound() external;
}

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline) external;
}

contract ButterflyEffect is IERC20, tokenStaking, Ownable {
    using SafeMath for uint256;
    string private constant _name = 'Butterfly Effect';
    string private constant _symbol = 'EFFECT';
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 1000000 * (10 ** _decimals);
    uint256 public _maxTxAmount = ( _totalSupply * 100 ) / 10000;
    uint256 public _maxWalletToken = ( _totalSupply * 100 ) / 10000;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isDividendExempt;
    IRouter router;
    address public pair;
    bool private swapEnabled = true;
    bool private tradingAllowed = false;
    bool public reflectionsEnabled = true;
    uint256 private liquidityFee = 0;
    uint256 private marketingFee = 900;
    uint256 private reflectionFee = 100;
    uint256 private developmentFee = 1000;
    uint256 private burnFee = 0;
    uint256 private tokenFee = 0;
    uint256 private totalFee = 2000;
    uint256 private sellFee = 4000;
    uint256 private transferFee = 4000;
    uint256 private denominator = 10000;
    uint256 private swapTimes;
    bool private swapping;
    bool private feeless;
    uint256 private swapAmount = 1;
    uint256 private swapThreshold = ( _totalSupply * 1000 ) / 100000;
    uint256 private minTokenAmount = ( _totalSupply * 10 ) / 100000;
    modifier feelessTransaction {feeless = true; _; feeless = false;}
    modifier lockTheSwap {swapping = true; _; swapping = false;}
    mapping(address => uint256) public amountStaked;
    uint256 public totalStaked;
    uint256 private staking = 0;
    stakeIntegration internal stakingContract;
    address internal token_receiver;
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public currentDividends;
    uint256 public dividendsBeingDistributed;
    uint256 internal dividendsPerShare;
    uint256 internal dividendsPerShareAccuracyFactor = 10 ** 36;
    address[] shareholders; mapping (address => Share) public shares; 
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    struct Share {uint256 amount; uint256 totalExcluded; uint256 totalRealised; }
    uint256 public excessDividends;
    uint256 public eventFeesCollected;
    uint256 public reflectionEvent;
    bool public distributingReflections;
    uint256 internal disbursements;
    bool internal releaseDistributing;
    mapping (address => uint256) public buyMultiplier;
    uint256 internal currentIndex;
    uint256 public gasAmount = 500000;
    uint256 public distributionInterval = 12 hours;
    uint256 public distributionTime;
    uint256 private minBuyAmount = ( _totalSupply * 10 ) / 100000;
    uint256 private maxDropAmount = ( _totalSupply * 500 ) / 10000;
    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal utility_receiver = 0x6F623E84da9880138DF9362cB596e13291C3C4ae;
    address internal staking_receiver = 0x6F623E84da9880138DF9362cB596e13291C3C4ae; 
    address internal marketing_receiver = 0x3f20cB334FFd23D0Ec8eeFaFAe485728774Ea1b0;
    address internal liquidity_receiver = 0x6F623E84da9880138DF9362cB596e13291C3C4ae;
    mapping (uint256 => mapping (address => uint256)) internal userEventData;
    struct eventData {
        uint256 reflectionAmount;
        uint256 reflectionsDisbursed;
        uint256 eventTimestamp;
        uint256 totalFees;
        uint256 totalExcess;}
    mapping(uint256 => eventData) public eventStats;

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;
        token_receiver = msg.sender;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[token_receiver] = true;
        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(stakingContract)] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[address(pair)] = true;
        isDividendExempt[address(DEAD)] = true;
        isDividendExempt[address(0)] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function getOwner() external view override returns (address) { return owner; }
    function totalSupply() public view override returns (uint256) {return _totalSupply;}
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;}
    function availableBalance(address wallet) public view returns (uint256) {return _balances[wallet].sub(amountStaked[wallet]);}
    function circulatingSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));}

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amount);
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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 _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount); 
        checkTxLimit(sender, recipient, amount);
        transactionCounters(sender, recipient);
        setBuyMultiplier(sender, recipient, amount);
        swapBack(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
        processRewards(sender, recipient);
    }

    function setStructure(uint256 _liquidity, uint256 _marketing, uint256 _reflections, uint256 _burn, 
        uint256 _token, uint256 _staking, uint256 _development, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner {
        liquidityFee = _liquidity; marketingFee = _marketing; reflectionFee = _reflections; staking = _staking; developmentFee = _development;
        burnFee = _burn; totalFee = _total; sellFee = _sell; transferFee = _trans; tokenFee = _token;
        require(totalFee <= denominator && sellFee <= denominator && burnFee <= denominator && tokenFee <= denominator 
            && transferFee <= denominator, "totalFee and sellFee cannot be more than 20%");
    }

    function setParameters(uint256 _buy, uint256 _wallet) external onlyOwner {
        uint256 newTx = totalSupply().mul(_buy).div(uint256(10000));
        uint256 newWallet = totalSupply().mul(_wallet).div(uint256(10000)); uint256 limit = totalSupply().mul(5).div(1000);
        require(newTx >= limit && newWallet >= limit, "ERC20: max TXs and max Wallet cannot be less than .5%");
        _maxTxAmount = newTx; _maxWalletToken = newWallet;
    }

    function internalDeposit(address sender, uint256 amount) internal {
        require(amount <= _balances[sender].sub(amountStaked[sender]), "ERC20: Cannot stake more than available balance");
        stakingContract.stakingDeposit(sender, amount);
        amountStaked[sender] = amountStaked[sender].add(amount);
        totalStaked = totalStaked.add(amount);
    }

    function deposit(uint256 amount) override external {
        internalDeposit(msg.sender, amount);
    }

    function withdraw(uint256 amount) override external {
        require(amount <= amountStaked[msg.sender], "ERC20: Cannot unstake more than amount staked");
        stakingContract.stakingWithdraw(msg.sender, amount);
        amountStaked[msg.sender] = amountStaked[msg.sender].sub(amount);
        totalStaked = totalStaked.sub(amount);
    }

    function compound() override external feelessTransaction {
        uint256 initialToken = balanceOf(msg.sender);
        stakingContract.stakingClaimToCompound(msg.sender, msg.sender);
        uint256 afterToken = balanceOf(msg.sender).sub(initialToken);
        internalDeposit(msg.sender, afterToken);
    }

    function setStakingAddress(address _staking) external onlyOwner {
        stakingContract = stakeIntegration(_staking); isFeeExempt[_staking] = true;
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "tradingAllowed");}
    }
    
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient] && recipient != address(pair) && recipient != address(DEAD)){
            require((_balances[recipient].add(amount)) <= _maxWalletToken, "Exceeds maximum wallet amount.");}
    }

    function transactionCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender] && !swapping){swapTimes += uint256(1);}
    }

    function setBuyMultiplier(address sender, address recipient, uint256 amount) internal {
        if(sender == pair && amount >= minBuyAmount){buyMultiplier[recipient] = buyMultiplier[recipient].add(uint256(1));}
        if(sender == pair && amount < minBuyAmount){buyMultiplier[recipient] = uint256(1);}
        if(recipient == pair){buyMultiplier[sender] = uint256(0);}
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
        if(amountStaked[sender] > uint256(0)){require((amount.add(amountStaked[sender])) <= balanceOf(sender), "ERC20: Exceeds maximum allowed not currently staked.");}
        require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");
    }

    function startTrading() external onlyOwner {
        tradingAllowed = true;
        distributionTime = block.timestamp;
    }

    function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 _minTokenAmount) external onlyOwner {
        swapAmount = _swapAmount; swapThreshold = totalSupply().mul(_swapThreshold).div(uint256(100000)); minTokenAmount = totalSupply().mul(_minTokenAmount).div(uint256(100000));
    }

    function setUserMultiplier(address user, uint256 multiplier) external onlyOwner {
        buyMultiplier[user] = multiplier;
    }

    function setInternalAddresses(address _marketing, address _liquidity, address _utility, address _token, address _staking) external onlyOwner {
        marketing_receiver = _marketing; liquidity_receiver = _liquidity; utility_receiver = _utility; token_receiver = _token; staking_receiver = _staking;
        isFeeExempt[_marketing] = true; isFeeExempt[_liquidity] = true; isFeeExempt[_utility] = true; isFeeExempt[_token] = true; isFeeExempt[_staking] = true;
    }

    function setisExempt(address _address, bool _enabled) external onlyOwner {
        isFeeExempt[_address] = _enabled;
    }

    function setDividendInfo(uint256 excess, uint256 current, uint256 distributing) external onlyOwner {
        excessDividends = excess; currentDividends = current; dividendsBeingDistributed = distributing;
    }

    function setMinBuyAmount(uint256 amount) external onlyOwner {
        minBuyAmount = _totalSupply.mul(amount).div(100000);
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = totalFee.add(1).mul(2);
        if(totalFee == uint256(0)){_denominator = liquidityFee.add(
            marketingFee).add(staking).add(developmentFee).add(1).mul(2);}
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator);
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(
            tokensToAddLiquidityWith, ETHToAddLiquidityWith, liquidity_receiver); }
        uint256 stakingAmount = unitBalance.mul(2).mul(staking);
        if(stakingAmount > 0){payable(staking_receiver).transfer(stakingAmount);}
        uint256 marketingAmount = unitBalance.mul(2).mul(marketingFee);
        if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount);}
        uint256 excessAmount = address(this).balance;
        if(excessAmount > uint256(0)){payable(utility_receiver).transfer(excessAmount);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount, address receiver) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(receiver),
            block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);
    }

    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= minTokenAmount;
        bool aboveThreshold = viewAvailableBalance() >= swapThreshold;
        return !swapping && swapEnabled && tradingAllowed && aboveMin && !isFeeExempt[sender] 
            && recipient == pair && swapTimes >= swapAmount && aboveThreshold;
    }

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = uint256(0);}
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function getTotalFee(address sender, address recipient) internal view returns (uint256) {
        if(recipient == pair && sellFee > uint256(0)){return sellFee;}
        if(sender == pair && totalFee > uint256(0)){return totalFee;}
        return transferFee;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if(getTotalFee(sender, recipient) > 0 && !swapping){
        uint256 feeAmount = amount.div(denominator).mul(getTotalFee(sender, recipient));
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
        if(reflectionFee > uint256(0) && reflectionFee <= getTotalFee(sender, recipient)){
            currentDividends = currentDividends.add((amount.div(denominator).mul(reflectionFee)));
            eventFeesCollected = eventFeesCollected.add((amount.div(denominator).mul(reflectionFee)));}
        if(burnFee > uint256(0) && burnFee <= getTotalFee(sender, recipient)){
            _transfer(address(this), address(DEAD), amount.div(denominator).mul(burnFee));}
        if(tokenFee > uint256(0) && tokenFee <= getTotalFee(sender, recipient)){
            _transfer(address(this), address(token_receiver), amount.div(denominator).mul(tokenFee));}
        return amount.sub(feeAmount);} return amount;
    }

    function setisDividendExempt(address holder, bool exempt) external onlyOwner {
        isDividendExempt[holder] = exempt;
        if(exempt){setShare(holder, 0);}
        if(buyMultiplier[holder] > 0){setShare(holder, balanceOf(holder).mul(buyMultiplier[holder]));}
        else{setShare(holder, balanceOf(holder));}
    }

    function processRewards(address sender, address recipient) internal {
        if(releaseDistributing){dividendsBeingDistributed = uint256(0);}
        if(shares[recipient].amount > uint256(0)){distributeDividend(recipient);}
        if(shares[sender].amount > uint256(0) && recipient != pair){distributeDividend(sender);}
        if(recipient == pair && shares[sender].amount > uint256(0)){excessDividends = excessDividends.add(getUnpaidEarnings(sender));}
        if(!isDividendExempt[sender]){setShare(sender, balanceOf(sender));}
        if(!isDividendExempt[recipient]){setShare(recipient, balanceOf(recipient));}
        if(!isDividendExempt[recipient] && sender == pair && buyMultiplier[recipient] >= uint256(1)){
            setShare(recipient, balanceOf(recipient).mul(buyMultiplier[recipient]));}
        if(distributionTime.add(distributionInterval) <= block.timestamp && tradingAllowed && 
            currentDividends > uint256(0) && !swapping && reflectionsEnabled){
            createReflectionEvent();}
        processReflections(gasAmount);
        if(shares[recipient].amount > uint256(0)){distributeDividend(recipient);}
    }

    function createReflectionEvent() internal {
            distributingReflections = true;
            eventStats[reflectionEvent].totalExcess = excessDividends;
            excessDividends = uint256(0);
            reflectionEvent = reflectionEvent.add(uint256(1));
            eventStats[reflectionEvent].totalFees = eventFeesCollected;
            eventStats[reflectionEvent].reflectionAmount = currentDividends;
            eventStats[reflectionEvent].eventTimestamp = block.timestamp;
            if(currentDividends > maxDropAmount){currentDividends = maxDropAmount;}
            depositRewards(currentDividends);
            currentDividends = uint256(0);
            eventFeesCollected = uint256(0);
            distributionTime = block.timestamp;
            processReflections(gasAmount);
    }

    function manualReflectionEvent() external onlyOwner {
        createReflectionEvent();
    }

    function rescueERC20(address _address) external onlyOwner {
        uint256 _amount = IERC20(_address).balanceOf(address(this));
        IERC20(_address).transfer(utility_receiver, _amount);
    }

    function setMaxDropAmount(uint256 amount) external onlyOwner {
        maxDropAmount = _totalSupply.mul(amount).div(100000);
    }

    function setDistributionInterval(uint256 interval) external onlyOwner {
        distributionInterval = interval;
    }

    function setReleaseDistributing(bool enable) external onlyOwner {
        releaseDistributing = enable;
    }

    function enableReflections(bool enable) external onlyOwner {
        reflectionsEnabled = enable;
    }

    function setGasAmount(uint256 gas) external onlyOwner {
        gasAmount = gas;
    }

    function closeReflectionEvent() external onlyOwner {
        dividendsBeingDistributed = uint256(0);
    }

    function setShare(address shareholder, uint256 amount) internal {
        if(amount > 0 && shares[shareholder].amount == 0){addShareholder(shareholder);}
        else if(amount == 0 && shares[shareholder].amount > 0){removeShareholder(shareholder); }
        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function depositRewards(uint256 amount) internal {
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
        dividendsBeingDistributed = amount;
    }

    function rescueETH(uint256 _amount) external {
        payable(utility_receiver).transfer(_amount);
    }

    function setTokenAddress(address _address) external onlyOwner {
        token_receiver = _address;
    }

    function totalReflectionsDistributed(address _wallet) external view returns (uint256) {
        address shareholder = _wallet;
        return uint256(shares[shareholder].totalRealised);
    }

    function claimReflections() external {
        distributeDividend(msg.sender);
    }

    function viewRemainingBeingDisbursed() external view returns (uint256 distributing, uint256 distributed) {
        return(dividendsBeingDistributed, eventStats[reflectionEvent].reflectionsDisbursed);
    }

    function viewDisbursementShareholders() external view returns (uint256 disbursementsAmt, uint256 shareholdersAmt) {
        return(disbursements, shareholders.length);
    }

    function manualProcessReflections(uint256 gas) external onlyOwner {
        processReflections(gas);
    }

    function processReflections(uint256 gas) internal {
        uint256 currentAmount = totalDistributed;
        uint256 shareholderCount = shareholders.length;
        if(shareholderCount == uint256(0)) { return; }
        uint256 gasUsed = uint256(0);
        uint256 gasLeft = gasleft();
        uint256 iterations = uint256(0);
        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = uint256(0);}
                distributeDividend(shareholders[currentIndex]);
            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
            disbursements++;}
        if(disbursements >= shareholderCount && totalDistributed > currentAmount){
            distributingReflections = false;
            dividendsBeingDistributed = uint256(0);
            disbursements = uint256(0);}
    }

    function distributeDividend(address shareholder) internal {
        uint256 amount = getUnpaidEarnings(shareholder);
        if(shares[shareholder].amount == 0 || amount > balanceOf(address(this))){ return; }
        if(amount > uint256(0)){
            totalDistributed = totalDistributed.add(amount);
            eventStats[reflectionEvent].reflectionsDisbursed = eventStats[reflectionEvent].reflectionsDisbursed.add(amount);
            _basicTransfer(address(this), shareholder, amount);
            userEventData[reflectionEvent][shareholder] = amount;
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
            buyMultiplier[shareholder] = uint256(0);
            setShare(shareholder, balanceOf(shareholder));}
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }
        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }
        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }

    function balanceInformation() external view returns (uint256 balance, uint256 available, uint256 current, uint256 distributing, uint256 excess) {
        return(balanceOf(address(this)), balanceOf(address(this)).sub(currentDividends).sub(dividendsBeingDistributed), currentDividends, dividendsBeingDistributed, excessDividends);
    }

    function viewAvailableBalance() public view returns (uint256 contractBalance) {
        return balanceOf(address(this)).sub(currentDividends).sub(dividendsBeingDistributed);
    }

    function viewLastFiveReflectionEvents() external view returns (uint256, uint256, uint256, uint256, uint256) {
        return(eventStats[reflectionEvent].reflectionAmount, eventStats[reflectionEvent.sub(1)].reflectionAmount, eventStats[reflectionEvent.sub(2)].reflectionAmount,
            eventStats[reflectionEvent.sub(3)].reflectionAmount, eventStats[reflectionEvent.sub(4)].reflectionAmount);
    }

    function viewUserReflectionStats(uint256 eventNumber, address wallet) external view returns (uint256) {
        return userEventData[eventNumber][wallet];
    }

    function viewMyReflectionStats(uint256 eventNumber) external view returns (uint256) {
        return userEventData[eventNumber][msg.sender];
    }
}

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":"owner","type":"address"}],"name":"OwnershipTransferred","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"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"address"}],"name":"amountStaked","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":"wallet","type":"address"}],"name":"availableBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceInformation","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"available","type":"uint256"},{"internalType":"uint256","name":"current","type":"uint256"},{"internalType":"uint256","name":"distributing","type":"uint256"},{"internalType":"uint256","name":"excess","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buyMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReflections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"closeReflectionEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"compound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributingReflections","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributionInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributionTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendsBeingDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"enableReflections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eventFeesCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"eventStats","outputs":[{"internalType":"uint256","name":"reflectionAmount","type":"uint256"},{"internalType":"uint256","name":"reflectionsDisbursed","type":"uint256"},{"internalType":"uint256","name":"eventTimestamp","type":"uint256"},{"internalType":"uint256","name":"totalFees","type":"uint256"},{"internalType":"uint256","name":"totalExcess","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"excessDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","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":"uint256","name":"gas","type":"uint256"}],"name":"manualProcessReflections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualReflectionEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"setDistributionInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"excess","type":"uint256"},{"internalType":"uint256","name":"current","type":"uint256"},{"internalType":"uint256","name":"distributing","type":"uint256"}],"name":"setDividendInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_utility","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"name":"setInternalAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxDropAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setReleaseDistributing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_reflections","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_token","type":"uint256"},{"internalType":"uint256","name":"_staking","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"_minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"multiplier","type":"uint256"}],"name":"setUserMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"totalReflectionsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":[],"name":"viewAvailableBalance","outputs":[{"internalType":"uint256","name":"contractBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewDisbursementShareholders","outputs":[{"internalType":"uint256","name":"disbursementsAmt","type":"uint256"},{"internalType":"uint256","name":"shareholdersAmt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewLastFiveReflectionEvents","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"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"eventNumber","type":"uint256"}],"name":"viewMyReflectionStats","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewRemainingBeingDisbursed","outputs":[{"internalType":"uint256","name":"distributing","type":"uint256"},{"internalType":"uint256","name":"distributed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"eventNumber","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"}],"name":"viewUserReflectionStats","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a620005e0565b6200002190620f4240620005f8565b6001556127106001546064620000389190620005f8565b62000044919062000612565b60025561271060015460646200005b9190620005f8565b62000067919062000612565b6003556009805462ffffff60a01b19166201000160a01b1790556000600a819055610384600b556064600c556103e8600d819055600e829055600f919091556107d0601055610fa060118190556012556127106013556001601681905554620186a091620000d69190620005f8565b620000e2919062000612565b601755620186a0600154600a620000fa9190620005f8565b62000106919062000612565b6018556000601b556ec097ce7bc90715b34b9f10000000006024556207a12060315561a8c0603255620186a0600154600a620001439190620005f8565b6200014f919062000612565b6034556127106001546101f4620001679190620005f8565b62000173919062000612565b603555603680546001600160a01b0319908116736f623e84da9880138df9362cb596e13291c3c4ae90811790925560378054821683179055603880548216733f20cb334ffd23d0ec8eefafae485728774ea1b0179055603980549091169091179055348015620001e257600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa1580156200024a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000270919062000635565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e4919062000635565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000332573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000358919062000635565b600880546001600160a01b038581166001600160a01b03199283161790925560098054848416908316178155601d8054909216339081178355306000818152600660209081526040808320805460ff1990811660019081179092556039548a16855282852080548216831790556038548a168552828520805482168317905597548916845281842080548916821790558584528184208054891682179055601c548916845281842080548916821790559383526007825280832080548816851790559454909616815283812080548616831790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d80548616831790557f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df805490951682179094555481845260048552828420819055915191825293945090917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000660565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000522578160001904821115620005065762000506620004cb565b808516156200051457918102915b93841c9390800290620004e6565b509250929050565b6000826200053b57506001620005da565b816200054a57506000620005da565b81600181146200056357600281146200056e576200058e565b6001915050620005da565b60ff841115620005825762000582620004cb565b50506001821b620005da565b5060208310610133831016604e8410600b8410161715620005b3575081810a620005da565b620005bf8383620004e1565b8060001904821115620005d657620005d6620004cb565b0290505b92915050565b6000620005f160ff8416836200052a565b9392505050565b8082028115828204841417620005da57620005da620004cb565b6000826200063057634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200064857600080fd5b81516001600160a01b0381168114620005f157600080fd5b613a4d80620006706000396000f3fe60806040526004361061041f5760003560e01c8063893d20e81161021e578063ccec371611610123578063e2910950116100ab578063efca2eed1161007a578063efca2eed14610d6c578063f2fde38b14610d82578063f4e0d9ac14610da2578063f69e204614610dc2578063feb3040214610dd757600080fd5b8063e291095014610cbc578063e94dd17c14610cff578063ef40a67014610d1f578063ef43b02b14610d4c57600080fd5b8063d494c388116100f2578063d494c38814610bf5578063d9c47ade14610c15578063dbb108b714610c35578063dd62ed3e14610c56578063dee5434b14610c9c57600080fd5b8063ccec371614610b4e578063ce7c2ac214610b6e578063d156875014610bc5578063d4348de014610bdb57600080fd5b8063a61fba42116101a6578063b7e5595c11610175578063b7e5595c14610a9d578063bbc3f06914610aca578063c0c4939414610adf578063c61ca2b714610af5578063caa2344414610b2e57600080fd5b8063a61fba4214610a05578063a8aa1b3114610a3d578063a9059cbb14610a5d578063b6b55f2514610a7d57600080fd5b806395d89b41116101ed57806395d89b4114610960578063997664d71461098f5780639e252f00146109a55780639fb05d37146109c5578063a0821be3146109e557600080fd5b8063893d20e8146108d95780638c7d13021461090b57806392a65e001461092b5780639358928b1461094b57600080fd5b80633850f6871161032457806371201a0e116102ac5780637d1db4a51161027b5780637d1db4a514610863578063817b1cd214610879578063822628081461088f5780638331c106146108a4578063884870c7146108b957600080fd5b806371201a0e1461080257806375a729441461081857806378109e541461082d5780637a16a49e1461084357600080fd5b806348ff2b8b116102f357806348ff2b8b1461078157806349c1cf6e146107a15780636570e4eb146107b757806367b50af9146107cc57806370a08231146107e257600080fd5b80633850f687146106f55780633a98ef391461070b5780633f4218e0146107215780634355855a1461075157600080fd5b8063234353aa116103a7578063293230b811610376578063293230b8146106555780632b37e0cc1461066a5780632e1a7d4d1461068a5780632f54bf6e146106aa578063313ce567146106d957600080fd5b8063234353aa146105ab57806323b872dd146105f557806326a4e8d21461061557806328fd31981461063557600080fd5b80630c8f78fb116103ee5780630c8f78fb146104dc5780630dc6e50e146104fe57806312f02ffe1461051e57806318160ddd1461055957806319e4574d1461056e57600080fd5b80630122690f1461042b57806306fdde031461045457806308e20e1f14610496578063095ea7b3146104ac57600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5061044160225481565b6040519081526020015b60405180910390f35b34801561046057600080fd5b5060408051808201909152601081526f109d5d1d195c999b1e481159999958dd60821b60208201525b60405161044b919061353f565b3480156104a257600080fd5b5061044160215481565b3480156104b857600080fd5b506104cc6104c73660046135a2565b610def565b604051901515815260200161044b565b3480156104e857600080fd5b506104fc6104f73660046135ce565b610e06565b005b34801561050a57600080fd5b506104fc6105193660046135e7565b610e3e565b34801561052a57600080fd5b50602254602b546000908152603b60205260409020600101545b6040805192835260208301919091520161044b565b34801561056557600080fd5b50600154610441565b34801561057a57600080fd5b50610583610f4d565b604080519586526020860194909452928401919091526060830152608082015260a00161044b565b3480156105b757600080fd5b506105836105c63660046135ce565b603b60205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b34801561060157600080fd5b506104cc61061036600461364f565b61102f565b34801561062157600080fd5b506104fc610630366004613690565b611099565b34801561064157600080fd5b50610441610650366004613690565b6110e5565b34801561066157600080fd5b506104fc611170565b34801561067657600080fd5b506104fc6106853660046135a2565b6111b3565b34801561069657600080fd5b506104fc6106a53660046135ce565b6111f9565b3480156106b657600080fd5b506104cc6106c5366004613690565b6000546001600160a01b0391821691161490565b3480156106e557600080fd5b506040516009815260200161044b565b34801561070157600080fd5b50610441602b5481565b34801561071757600080fd5b50610441601e5481565b34801561072d57600080fd5b506104cc61073c366004613690565b60066020526000908152604090205460ff1681565b34801561075d57600080fd5b506104cc61076c366004613690565b60076020526000908152604090205460ff1681565b34801561078d57600080fd5b506104fc61079c3660046136bb565b611310565b3480156107ad57600080fd5b5061044160335481565b3480156107c357600080fd5b50610441611365565b3480156107d857600080fd5b5061044160315481565b3480156107ee57600080fd5b506104416107fd366004613690565b611387565b34801561080e57600080fd5b5061044160325481565b34801561082457600080fd5b506105836113a2565b34801561083957600080fd5b5061044160035481565b34801561084f57600080fd5b506104fc61085e3660046135ce565b6113e2565b34801561086f57600080fd5b5061044160025481565b34801561088557600080fd5b50610441601a5481565b34801561089b57600080fd5b506104fc611411565b3480156108b057600080fd5b506104fc61141c565b3480156108c557600080fd5b506104fc6108d43660046136f4565b61144d565b3480156108e557600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161044b565b34801561091757600080fd5b506104fc6109263660046135ce565b611551565b34801561093757600080fd5b506104fc610946366004613716565b61159d565b34801561095757600080fd5b506104416115e5565b34801561096c57600080fd5b506040805180820190915260068152651151919150d560d21b6020820152610489565b34801561099b57600080fd5b50610441601f5481565b3480156109b157600080fd5b506104fc6109c03660046135ce565b61160b565b3480156109d157600080fd5b506104fc6109e0366004613733565b611649565b3480156109f157600080fd5b50610441610a00366004613690565b611726565b348015610a1157600080fd5b50610441610a203660046135ce565b6000908152603a6020908152604080832033845290915290205490565b348015610a4957600080fd5b506009546108f3906001600160a01b031681565b348015610a6957600080fd5b506104cc610a783660046135a2565b611753565b348015610a8957600080fd5b506104fc610a983660046135ce565b611760565b348015610aa957600080fd5b50610441610ab8366004613690565b602f6020526000908152604090205481565b348015610ad657600080fd5b506104fc61176d565b348015610aeb57600080fd5b5061044160295481565b348015610b0157600080fd5b50610441610b10366004613690565b6001600160a01b031660009081526026602052604090206002015490565b348015610b3a57600080fd5b506104fc610b49366004613716565b61179f565b348015610b5a57600080fd5b506104fc610b69366004613690565b6117dc565b348015610b7a57600080fd5b50610baa610b89366004613690565b60266020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161044b565b348015610bd157600080fd5b50610441602a5481565b348015610be757600080fd5b50602c546104cc9060ff1681565b348015610c0157600080fd5b506104fc610c103660046135ce565b6118ef565b348015610c2157600080fd5b506104fc610c303660046135ce565b61193b565b348015610c4157600080fd5b506009546104cc90600160b01b900460ff1681565b348015610c6257600080fd5b50610441610c713660046137a4565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610ca857600080fd5b506104fc610cb73660046137d2565b61196e565b348015610cc857600080fd5b50610441610cd73660046137fe565b6000918252603a602090815260408084206001600160a01b0393909316845291905290205490565b348015610d0b57600080fd5b506104fc610d1a3660046137d2565b6119a6565b348015610d2b57600080fd5b50610441610d3a366004613690565b60196020526000908152604090205481565b348015610d5857600080fd5b506104fc610d673660046136bb565b611a08565b348015610d7857600080fd5b5061044160205481565b348015610d8e57600080fd5b506104fc610d9d366004613690565b611ac6565b348015610dae57600080fd5b506104fc610dbd366004613690565b611b44565b348015610dce57600080fd5b506104fc611ba8565b348015610de357600080fd5b50602d54602554610544565b6000610dfc338484611c51565b5060015b92915050565b6000546001600160a01b03163314610e395760405162461bcd60e51b8152600401610e3090613823565b60405180910390fd5b603155565b6000546001600160a01b03163314610e685760405162461bcd60e51b8152600401610e3090613823565b600a8a9055600b899055600c889055601b859055600d849055600e879055601083905560118290556012819055600f8690556013548311801590610eb0575060135460115411155b8015610ec05750601354600e5411155b8015610ed05750601354600f5411155b8015610ee0575060135460125411155b610f415760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b6064820152608401610e30565b50505050505050505050565b6000806000806000603b6000602b54815260200190815260200160002060000154603b6000610f886001602b54611d7590919063ffffffff16565b815260200190815260200160002060000154603b6000610fb46002602b54611d7590919063ffffffff16565b815260200190815260200160002060000154603b6000610fe06003602b54611d7590919063ffffffff16565b815260200190815260200160002060000154603b600061100c6004602b54611d7590919063ffffffff16565b815260200190815260200160002060000154945094509450945094509091929394565b600061103c848484611d81565b61108e8433611089856040518060600160405280602881526020016139f0602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611ebc565b611c51565b5060015b9392505050565b6000546001600160a01b031633146110c35760405162461bcd60e51b8152600401610e3090613823565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260266020526040812054810361110c57506000919050565b6001600160a01b03821660009081526026602052604081205461112e90611ee8565b6001600160a01b03841660009081526026602052604090206001015490915080821161115e575060009392505050565b6111688282611d75565b949350505050565b6000546001600160a01b0316331461119a5760405162461bcd60e51b8152600401610e3090613823565b6009805460ff60a81b1916600160a81b17905542603355565b6000546001600160a01b031633146111dd5760405162461bcd60e51b8152600401610e3090613823565b6001600160a01b039091166000908152602f6020526040902055565b3360009081526019602052604090205481111561126e5760405162461bcd60e51b815260206004820152602d60248201527f45524332303a2043616e6e6f7420756e7374616b65206d6f7265207468616e2060448201526c185b5bdd5b9d081cdd185ad959609a1b6064820152608401610e30565b601c5460405163d8a9bf2960e01b8152336004820152602481018390526001600160a01b039091169063d8a9bf2990604401600060405180830381600087803b1580156112ba57600080fd5b505af11580156112ce573d6000803e3d6000fd5b5050336000908152601960205260409020546112ed9250905082611d75565b33600090815260196020526040902055601a5461130a9082611d75565b601a5550565b6000546001600160a01b0316331461133a5760405162461bcd60e51b8152600401610e3090613823565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600061138260225461137c60215461137c30611387565b90611d75565b905090565b6001600160a01b031660009081526004602052604090205490565b60008060008060006113b330611387565b6113c860225461137c60215461137c30611387565b602154602254602954945094509450945094509091929394565b6000546001600160a01b0316331461140c5760405162461bcd60e51b8152600401610e3090613823565b603255565b61141a33611f05565b565b6000546001600160a01b031633146114465760405162461bcd60e51b8152600401610e3090613823565b6000602255565b6000546001600160a01b031633146114775760405162461bcd60e51b8152600401610e3090613823565b60006114986127106114928561148c60015490565b90612048565b90612054565b905060006114af6127106114928561148c60015490565b905060006114c76103e8611492600561148c60015490565b90508083101580156114d95750808210155b6115435760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610e30565b506002919091556003555050565b6000546001600160a01b0316331461157b5760405162461bcd60e51b8152600401610e3090613823565b611597620186a06114928360015461204890919063ffffffff16565b60355550565b6000546001600160a01b031633146115c75760405162461bcd60e51b8152600401610e3090613823565b60098054911515600160b01b0260ff60b01b19909216919091179055565b60006113826115f46000611387565b61137c61160261dead611387565b60015490611d75565b6036546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611645573d6000803e3d6000fd5b5050565b6000546001600160a01b031633146116735760405162461bcd60e51b8152600401610e3090613823565b603880546001600160a01b039687166001600160a01b0319918216811790925560398054968816968216871790556036805495881695821686179055601d805494881694821685179055603780549390971692168217909555600094855260066020526040808620805460ff199081166001908117909255958752818720805487168217905593865280862080548616851790559185528185208054851684179055845290922080549091169091179055565b6001600160a01b0381166000908152601960209081526040808320546004909252822054610e0091611d75565b6000610dfc338484611d81565b61176a3382612060565b50565b6000546001600160a01b031633146117975760405162461bcd60e51b8152600401610e3090613823565b61141a6121ab565b6000546001600160a01b031633146117c95760405162461bcd60e51b8152600401610e3090613823565b602e805460ff1916911515919091179055565b6000546001600160a01b031633146118065760405162461bcd60e51b8152600401610e3090613823565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561184d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118719190613843565b60365460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044016020604051808303816000875af11580156118c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ea919061385c565b505050565b6000546001600160a01b031633146119195760405162461bcd60e51b8152600401610e3090613823565b611935620186a06114928360015461204890919063ffffffff16565b60345550565b6000546001600160a01b031633146119655760405162461bcd60e51b8152600401610e3090613823565b61176a8161224f565b6000546001600160a01b031633146119985760405162461bcd60e51b8152600401610e3090613823565b602992909255602155602255565b6000546001600160a01b031633146119d05760405162461bcd60e51b8152600401610e3090613823565b60168390556119e9620186a06114928461148c60015490565b601755611a00620186a06114928361148c60015490565b601855505050565b6000546001600160a01b03163314611a325760405162461bcd60e51b8152600401610e3090613823565b6001600160a01b0382166000908152600760205260409020805460ff19168215801591909117909155611a6a57611a6a82600061234a565b6001600160a01b0382166000908152602f602052604090205415611ab9576001600160a01b0382166000908152602f6020526040902054611645908390611ab49061148c83611387565b61234a565b61164582611ab484611387565b6000546001600160a01b03163314611af05760405162461bcd60e51b8152600401610e3090613823565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b03163314611b6e5760405162461bcd60e51b8152600401610e3090613823565b601c80546001600160a01b039092166001600160a01b0319909216821790556000908152600660205260409020805460ff19166001179055565b6015805461ff0019166101001790556000611bc233611387565b601c546040516334c5cbab60e11b8152336004820181905260248201529192506001600160a01b03169063698b975690604401600060405180830381600087803b158015611c0f57600080fd5b505af1158015611c23573d6000803e3d6000fd5b505050506000611c368261137c33611387565b9050611c423382612060565b50506015805461ff0019169055565b6001600160a01b038316611cb35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e30565b6001600160a01b038216611d145760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e30565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611092828461388f565b611d8c838383612484565b611d9683836125bc565b611da183838361264d565b611dac838383612739565b611db6838361287b565b611dc18383836128e1565b611dcc8383836129b5565b6001600160a01b038316600090815260046020526040902054611def9082611d75565b6001600160a01b038416600090815260046020526040812091909155611e1584846129da565b611e1f5781611e2a565b611e2a848484612a20565b6001600160a01b038416600090815260046020526040902054909150611e509082612bf6565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ea49085815260200190565b60405180910390a3611eb68484612c02565b50505050565b60008184841115611ee05760405162461bcd60e51b8152600401610e30919061353f565b505050900390565b6000610e006024546114926023548561204890919063ffffffff16565b6000611f10826110e5565b6001600160a01b0383166000908152602660205260409020549091501580611f3f5750611f3c30611387565b81115b15611f48575050565b801561164557602054611f5b9082612bf6565b6020908155602b546000908152603b9091526040902060010154611f7f9082612bf6565b602b546000908152603b6020526040902060010155611f9f308383612e55565b50602b546000908152603a602090815260408083206001600160a01b03861684528252808320849055602882528083204290556026909152902060020154611fe79082612bf6565b6001600160a01b038316600090815260266020526040902060028101919091555461201190611ee8565b6001600160a01b038316600090815260266020908152604080832060010193909355602f90529081205561164582611ab481611387565b600061109282846138a2565b600061109282846138b9565b6001600160a01b03821660009081526019602090815260408083205460049092529091205461208e91611d75565b8111156120f55760405162461bcd60e51b815260206004820152602f60248201527f45524332303a2043616e6e6f74207374616b65206d6f7265207468616e20617660448201526e61696c61626c652062616c616e636560881b6064820152608401610e30565b601c5460405163773a0f0960e01b81526001600160a01b038481166004830152602482018490529091169063773a0f0990604401600060405180830381600087803b15801561214357600080fd5b505af1158015612157573d6000803e3d6000fd5b5050506001600160a01b03831660009081526019602052604090205461217e915082612bf6565b6001600160a01b038316600090815260196020526040902055601a546121a49082612bf6565b601a555050565b602c805460ff1916600190811790915560298054602b80546000908152603b60205260408120600401929092559155546121e491612bf6565b602b818155602a546000928352603b60205260408084206003019190915560218054835485528285205591548352909120426002909101556035549054111561222e576035546021555b612239602154612eca565b60006021819055602a554260335560315461141a905b6020546025548061225f57505050565b6000805a905060005b858310801561227657508381105b1561231557836030541061228a5760006030555b6122bc6025603054815481106122a2576122a26138db565b6000918252602090912001546001600160a01b0316611f05565b6122d16122ca5a8490611d75565b8490612bf6565b92505a6030805491935060006122e6836138f1565b919050555080806122f6906138f1565b602d8054919350909150600061230b836138f1565b9190505550612268565b83602d5410158015612328575084602054115b1561234257602c805460ff1916905560006022819055602d555b505050505050565b60008111801561237057506001600160a01b038216600090815260266020526040902054155b156123d657602580546001600160a01b0384166000818152602760205260408120839055600183018455929092527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055612409565b801580156123fb57506001600160a01b03821660009081526026602052604090205415155b156124095761240982612f03565b6001600160a01b038216600090815260266020526040902054601e5461243a91839161243491611d75565b90612bf6565b601e556001600160a01b038216600090815260266020526040902081905561246181611ee8565b6001600160a01b0390921660009081526026602052604090206001019190915550565b6001600160a01b0383166124e85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e30565b6001600160a01b03821661254a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e30565b61255383611387565b8111156118ea5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610e30565b6001600160a01b03821660009081526006602052604090205460ff161580156125fe57506001600160a01b03811660009081526006602052604090205460ff16155b1561164557600954600160a81b900460ff166116455760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b6044820152606401610e30565b6001600160a01b03831660009081526006602052604090205460ff1615801561268f57506001600160a01b03821660009081526006602052604090205460ff16155b80156126a957506009546001600160a01b03838116911614155b80156126c057506001600160a01b03821661dead14155b156118ea576003546001600160a01b0383166000908152600460205260409020546126eb9083612bf6565b11156118ea5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610e30565b6001600160a01b038316600090815260196020526040902054156127ef5761276083611387565b6001600160a01b038416600090815260196020526040902054612784908390612bf6565b11156127ef5760405162461bcd60e51b815260206004820152603460248201527f45524332303a2045786365656473206d6178696d756d20616c6c6f776564206e60448201527337ba1031bab93932b73a363c9039ba30b5b2b21760611b6064820152608401610e30565b6002548111158061281857506001600160a01b03831660009081526006602052604090205460ff165b8061283b57506001600160a01b03821660009081526006602052604090205460ff165b6118ea5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610e30565b6009546001600160a01b0382811691161480156128b157506001600160a01b03821660009081526006602052604090205460ff16155b80156128c0575060155460ff16155b15611645576001601460008282546128d8919061390a565b90915550505050565b6009546001600160a01b03848116911614801561290057506034548110155b15612943576001600160a01b0382166000908152602f6020526040902054612929906001612bf6565b6001600160a01b0383166000908152602f60205260409020555b6009546001600160a01b038481169116148015612961575060345481105b15612983576001600160a01b0382166000908152602f60205260409020600190555b6009546001600160a01b03908116908316036118ea5750506001600160a01b03166000908152602f6020526040812055565b6129c0838383613018565b156118ea576129d06017546130d0565b6000601455505050565b6001600160a01b03821660009081526006602052604081205460ff161580156110925750506001600160a01b031660009081526006602052604090205460ff1615919050565b600080612a2d85856132db565b118015612a3d575060155460ff16155b15612bef576000612a5f612a5186866132db565b60135461148c908690612054565b30600090815260046020526040902054909150612a7c9082612bf6565b30600081815260046020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612acd9085815260200190565b60405180910390a36000600c54118015612af25750612aec85856132db565b600c5411155b15612b4757612b1e612b15600c5461148c6013548761205490919063ffffffff16565b60215490612bf6565b602155600c54601354612b4391612b3a9161148c908790612054565b602a5490612bf6565b602a555b6000600e54118015612b645750612b5e85856132db565b600e5411155b15612b9057612b903061dead612b8b600e5461148c6013548961205490919063ffffffff16565b611d81565b6000600f54118015612bad5750612ba785856132db565b600f5411155b15612bdd57601d54600f54601354612bdd9230926001600160a01b0390911691612b8b919061148c908990612054565b612be78382611d75565b915050611092565b5092915050565b6000611092828461390a565b602e5460ff1615612c135760006022555b6001600160a01b03811660009081526026602052604090205415612c3a57612c3a81611f05565b6001600160a01b03821660009081526026602052604090205415801590612c6f57506009546001600160a01b03828116911614155b15612c7d57612c7d82611f05565b6009546001600160a01b038281169116148015612cb157506001600160a01b03821660009081526026602052604090205415155b15612ccf57612ccb612cc2836110e5565b60295490612bf6565b6029555b6001600160a01b03821660009081526007602052604090205460ff16612cfc57612cfc82611ab484611387565b6001600160a01b03811660009081526007602052604090205460ff16612d2957612d2981611ab483611387565b6001600160a01b03811660009081526007602052604090205460ff16158015612d5f57506009546001600160a01b038381169116145b8015612d8457506001600160a01b0381166000908152602f6020526040902054600111155b15612db5576001600160a01b0381166000908152602f6020526040902054612db5908290611ab49061148c83611387565b42612dcd603254603354612bf690919063ffffffff16565b11158015612de45750600954600160a81b900460ff165b8015612df257506000602154115b8015612e01575060155460ff16155b8015612e165750600954600160b01b900460ff165b15612e2357612e236121ab565b612e2e60315461224f565b6001600160a01b038116600090815260266020526040902054156116455761164581611f05565b6001600160a01b038316600090815260046020526040812054612e789083611d75565b6001600160a01b038086166000908152600460205260408082209390935590851681522054612ea79083612bf6565b6001600160a01b0384166000908152600460205260409020555060019392505050565b601f54612ed79082612bf6565b601f55601e54602454612efb91612ef2916114929085612048565b60235490612bf6565b602355602255565b60258054612f139060019061388f565b81548110612f2357612f236138db565b60009182526020808320909101546001600160a01b0384811684526027909252604090922054602580549290931692918110612f6157612f616138db565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260279182905260408120546025805491939291612fad9060019061388f565b81548110612fbd57612fbd6138db565b60009182526020808320909101546001600160a01b031683528201929092526040019020556025805480612ff357612ff361391d565b600082815260209020810160001990810180546001600160a01b031916905501905550565b60008060185483101590506000601754613030611365565b601554911115915060ff161580156130515750600954600160a01b900460ff165b80156130665750600954600160a81b900460ff165b801561306f5750815b801561309457506001600160a01b03861660009081526006602052604090205460ff16155b80156130ad57506009546001600160a01b038681169116145b80156130bd575060165460145410155b80156130c65750805b9695505050505050565b6015805460ff191660019081179091556010546000916130f79160029161148c9190612bf6565b6010549091506131315761312e600261148c6001612434600d54612434601b54612434600b54600a54612bf690919063ffffffff16565b90505b600061314c82611492600a548661204890919063ffffffff16565b9050600061315a8483611d75565b90504761316682613342565b60006131724783611d75565b9050600061319561318e600a5488611d7590919063ffffffff16565b8390612054565b905060006131ae600a548361204890919063ffffffff16565b905080156131cf576039546131cf90879083906001600160a01b0316613494565b601b546000906131e49061148c856002612048565b90508015613228576037546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613226573d6000803e3d6000fd5b505b600b5460009061323d9061148c866002612048565b90508015613281576038546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561327f573d6000803e3d6000fd5b505b4780156132c4576036546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156132c2573d6000803e3d6000fd5b505b50506015805460ff19169055505050505050505050565b6009546000906001600160a01b0383811691161480156132fd57506000601154115b1561330b5750601154610e00565b6009546001600160a01b03848116911614801561332a57506000601054115b156133385750601054610e00565b5060125492915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613377576133776138db565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156133d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f49190613933565b81600181518110613407576134076138db565b6001600160a01b03928316602091820292909201015260085461342d9130911684611c51565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac94790613466908590600090869030904290600401613950565b600060405180830381600087803b15801561348057600080fd5b505af1158015612342573d6000803e3d6000fd5b6008546134ac9030906001600160a01b031685611c51565b60085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0383811660848301524260a48301529091169063f305d71990849060c40160606040518083038185885af115801561351a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061234291906139c1565b600060208083528351808285015260005b8181101561356c57858101830151858201604001528201613550565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461176a57600080fd5b600080604083850312156135b557600080fd5b82356135c08161358d565b946020939093013593505050565b6000602082840312156135e057600080fd5b5035919050565b6000806000806000806000806000806101408b8d03121561360757600080fd5b505088359a60208a01359a5060408a013599606081013599506080810135985060a0810135975060c0810135965060e081013595506101008101359450610120013592509050565b60008060006060848603121561366457600080fd5b833561366f8161358d565b9250602084013561367f8161358d565b929592945050506040919091013590565b6000602082840312156136a257600080fd5b81356110928161358d565b801515811461176a57600080fd5b600080604083850312156136ce57600080fd5b82356136d98161358d565b915060208301356136e9816136ad565b809150509250929050565b6000806040838503121561370757600080fd5b50508035926020909101359150565b60006020828403121561372857600080fd5b8135611092816136ad565b600080600080600060a0868803121561374b57600080fd5b85356137568161358d565b945060208601356137668161358d565b935060408601356137768161358d565b925060608601356137868161358d565b915060808601356137968161358d565b809150509295509295909350565b600080604083850312156137b757600080fd5b82356137c28161358d565b915060208301356136e98161358d565b6000806000606084860312156137e757600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561381157600080fd5b8235915060208301356136e98161358d565b60208082526006908201526510a7aba722a960d11b604082015260600190565b60006020828403121561385557600080fd5b5051919050565b60006020828403121561386e57600080fd5b8151611092816136ad565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e0057610e00613879565b8082028115828204841417610e0057610e00613879565b6000826138d657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820161390357613903613879565b5060010190565b80820180821115610e0057610e00613879565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561394557600080fd5b81516110928161358d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139a05784516001600160a01b03168352938301939183019160010161397b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156139d657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212202a502d07ee857a601fcd87eefb5e6acb014ed1e37b75aeaf99042f5342a1f1a164736f6c63430008130033

Deployed Bytecode

0x60806040526004361061041f5760003560e01c8063893d20e81161021e578063ccec371611610123578063e2910950116100ab578063efca2eed1161007a578063efca2eed14610d6c578063f2fde38b14610d82578063f4e0d9ac14610da2578063f69e204614610dc2578063feb3040214610dd757600080fd5b8063e291095014610cbc578063e94dd17c14610cff578063ef40a67014610d1f578063ef43b02b14610d4c57600080fd5b8063d494c388116100f2578063d494c38814610bf5578063d9c47ade14610c15578063dbb108b714610c35578063dd62ed3e14610c56578063dee5434b14610c9c57600080fd5b8063ccec371614610b4e578063ce7c2ac214610b6e578063d156875014610bc5578063d4348de014610bdb57600080fd5b8063a61fba42116101a6578063b7e5595c11610175578063b7e5595c14610a9d578063bbc3f06914610aca578063c0c4939414610adf578063c61ca2b714610af5578063caa2344414610b2e57600080fd5b8063a61fba4214610a05578063a8aa1b3114610a3d578063a9059cbb14610a5d578063b6b55f2514610a7d57600080fd5b806395d89b41116101ed57806395d89b4114610960578063997664d71461098f5780639e252f00146109a55780639fb05d37146109c5578063a0821be3146109e557600080fd5b8063893d20e8146108d95780638c7d13021461090b57806392a65e001461092b5780639358928b1461094b57600080fd5b80633850f6871161032457806371201a0e116102ac5780637d1db4a51161027b5780637d1db4a514610863578063817b1cd214610879578063822628081461088f5780638331c106146108a4578063884870c7146108b957600080fd5b806371201a0e1461080257806375a729441461081857806378109e541461082d5780637a16a49e1461084357600080fd5b806348ff2b8b116102f357806348ff2b8b1461078157806349c1cf6e146107a15780636570e4eb146107b757806367b50af9146107cc57806370a08231146107e257600080fd5b80633850f687146106f55780633a98ef391461070b5780633f4218e0146107215780634355855a1461075157600080fd5b8063234353aa116103a7578063293230b811610376578063293230b8146106555780632b37e0cc1461066a5780632e1a7d4d1461068a5780632f54bf6e146106aa578063313ce567146106d957600080fd5b8063234353aa146105ab57806323b872dd146105f557806326a4e8d21461061557806328fd31981461063557600080fd5b80630c8f78fb116103ee5780630c8f78fb146104dc5780630dc6e50e146104fe57806312f02ffe1461051e57806318160ddd1461055957806319e4574d1461056e57600080fd5b80630122690f1461042b57806306fdde031461045457806308e20e1f14610496578063095ea7b3146104ac57600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5061044160225481565b6040519081526020015b60405180910390f35b34801561046057600080fd5b5060408051808201909152601081526f109d5d1d195c999b1e481159999958dd60821b60208201525b60405161044b919061353f565b3480156104a257600080fd5b5061044160215481565b3480156104b857600080fd5b506104cc6104c73660046135a2565b610def565b604051901515815260200161044b565b3480156104e857600080fd5b506104fc6104f73660046135ce565b610e06565b005b34801561050a57600080fd5b506104fc6105193660046135e7565b610e3e565b34801561052a57600080fd5b50602254602b546000908152603b60205260409020600101545b6040805192835260208301919091520161044b565b34801561056557600080fd5b50600154610441565b34801561057a57600080fd5b50610583610f4d565b604080519586526020860194909452928401919091526060830152608082015260a00161044b565b3480156105b757600080fd5b506105836105c63660046135ce565b603b60205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b34801561060157600080fd5b506104cc61061036600461364f565b61102f565b34801561062157600080fd5b506104fc610630366004613690565b611099565b34801561064157600080fd5b50610441610650366004613690565b6110e5565b34801561066157600080fd5b506104fc611170565b34801561067657600080fd5b506104fc6106853660046135a2565b6111b3565b34801561069657600080fd5b506104fc6106a53660046135ce565b6111f9565b3480156106b657600080fd5b506104cc6106c5366004613690565b6000546001600160a01b0391821691161490565b3480156106e557600080fd5b506040516009815260200161044b565b34801561070157600080fd5b50610441602b5481565b34801561071757600080fd5b50610441601e5481565b34801561072d57600080fd5b506104cc61073c366004613690565b60066020526000908152604090205460ff1681565b34801561075d57600080fd5b506104cc61076c366004613690565b60076020526000908152604090205460ff1681565b34801561078d57600080fd5b506104fc61079c3660046136bb565b611310565b3480156107ad57600080fd5b5061044160335481565b3480156107c357600080fd5b50610441611365565b3480156107d857600080fd5b5061044160315481565b3480156107ee57600080fd5b506104416107fd366004613690565b611387565b34801561080e57600080fd5b5061044160325481565b34801561082457600080fd5b506105836113a2565b34801561083957600080fd5b5061044160035481565b34801561084f57600080fd5b506104fc61085e3660046135ce565b6113e2565b34801561086f57600080fd5b5061044160025481565b34801561088557600080fd5b50610441601a5481565b34801561089b57600080fd5b506104fc611411565b3480156108b057600080fd5b506104fc61141c565b3480156108c557600080fd5b506104fc6108d43660046136f4565b61144d565b3480156108e557600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161044b565b34801561091757600080fd5b506104fc6109263660046135ce565b611551565b34801561093757600080fd5b506104fc610946366004613716565b61159d565b34801561095757600080fd5b506104416115e5565b34801561096c57600080fd5b506040805180820190915260068152651151919150d560d21b6020820152610489565b34801561099b57600080fd5b50610441601f5481565b3480156109b157600080fd5b506104fc6109c03660046135ce565b61160b565b3480156109d157600080fd5b506104fc6109e0366004613733565b611649565b3480156109f157600080fd5b50610441610a00366004613690565b611726565b348015610a1157600080fd5b50610441610a203660046135ce565b6000908152603a6020908152604080832033845290915290205490565b348015610a4957600080fd5b506009546108f3906001600160a01b031681565b348015610a6957600080fd5b506104cc610a783660046135a2565b611753565b348015610a8957600080fd5b506104fc610a983660046135ce565b611760565b348015610aa957600080fd5b50610441610ab8366004613690565b602f6020526000908152604090205481565b348015610ad657600080fd5b506104fc61176d565b348015610aeb57600080fd5b5061044160295481565b348015610b0157600080fd5b50610441610b10366004613690565b6001600160a01b031660009081526026602052604090206002015490565b348015610b3a57600080fd5b506104fc610b49366004613716565b61179f565b348015610b5a57600080fd5b506104fc610b69366004613690565b6117dc565b348015610b7a57600080fd5b50610baa610b89366004613690565b60266020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161044b565b348015610bd157600080fd5b50610441602a5481565b348015610be757600080fd5b50602c546104cc9060ff1681565b348015610c0157600080fd5b506104fc610c103660046135ce565b6118ef565b348015610c2157600080fd5b506104fc610c303660046135ce565b61193b565b348015610c4157600080fd5b506009546104cc90600160b01b900460ff1681565b348015610c6257600080fd5b50610441610c713660046137a4565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610ca857600080fd5b506104fc610cb73660046137d2565b61196e565b348015610cc857600080fd5b50610441610cd73660046137fe565b6000918252603a602090815260408084206001600160a01b0393909316845291905290205490565b348015610d0b57600080fd5b506104fc610d1a3660046137d2565b6119a6565b348015610d2b57600080fd5b50610441610d3a366004613690565b60196020526000908152604090205481565b348015610d5857600080fd5b506104fc610d673660046136bb565b611a08565b348015610d7857600080fd5b5061044160205481565b348015610d8e57600080fd5b506104fc610d9d366004613690565b611ac6565b348015610dae57600080fd5b506104fc610dbd366004613690565b611b44565b348015610dce57600080fd5b506104fc611ba8565b348015610de357600080fd5b50602d54602554610544565b6000610dfc338484611c51565b5060015b92915050565b6000546001600160a01b03163314610e395760405162461bcd60e51b8152600401610e3090613823565b60405180910390fd5b603155565b6000546001600160a01b03163314610e685760405162461bcd60e51b8152600401610e3090613823565b600a8a9055600b899055600c889055601b859055600d849055600e879055601083905560118290556012819055600f8690556013548311801590610eb0575060135460115411155b8015610ec05750601354600e5411155b8015610ed05750601354600f5411155b8015610ee0575060135460125411155b610f415760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b6064820152608401610e30565b50505050505050505050565b6000806000806000603b6000602b54815260200190815260200160002060000154603b6000610f886001602b54611d7590919063ffffffff16565b815260200190815260200160002060000154603b6000610fb46002602b54611d7590919063ffffffff16565b815260200190815260200160002060000154603b6000610fe06003602b54611d7590919063ffffffff16565b815260200190815260200160002060000154603b600061100c6004602b54611d7590919063ffffffff16565b815260200190815260200160002060000154945094509450945094509091929394565b600061103c848484611d81565b61108e8433611089856040518060600160405280602881526020016139f0602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611ebc565b611c51565b5060015b9392505050565b6000546001600160a01b031633146110c35760405162461bcd60e51b8152600401610e3090613823565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260266020526040812054810361110c57506000919050565b6001600160a01b03821660009081526026602052604081205461112e90611ee8565b6001600160a01b03841660009081526026602052604090206001015490915080821161115e575060009392505050565b6111688282611d75565b949350505050565b6000546001600160a01b0316331461119a5760405162461bcd60e51b8152600401610e3090613823565b6009805460ff60a81b1916600160a81b17905542603355565b6000546001600160a01b031633146111dd5760405162461bcd60e51b8152600401610e3090613823565b6001600160a01b039091166000908152602f6020526040902055565b3360009081526019602052604090205481111561126e5760405162461bcd60e51b815260206004820152602d60248201527f45524332303a2043616e6e6f7420756e7374616b65206d6f7265207468616e2060448201526c185b5bdd5b9d081cdd185ad959609a1b6064820152608401610e30565b601c5460405163d8a9bf2960e01b8152336004820152602481018390526001600160a01b039091169063d8a9bf2990604401600060405180830381600087803b1580156112ba57600080fd5b505af11580156112ce573d6000803e3d6000fd5b5050336000908152601960205260409020546112ed9250905082611d75565b33600090815260196020526040902055601a5461130a9082611d75565b601a5550565b6000546001600160a01b0316331461133a5760405162461bcd60e51b8152600401610e3090613823565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600061138260225461137c60215461137c30611387565b90611d75565b905090565b6001600160a01b031660009081526004602052604090205490565b60008060008060006113b330611387565b6113c860225461137c60215461137c30611387565b602154602254602954945094509450945094509091929394565b6000546001600160a01b0316331461140c5760405162461bcd60e51b8152600401610e3090613823565b603255565b61141a33611f05565b565b6000546001600160a01b031633146114465760405162461bcd60e51b8152600401610e3090613823565b6000602255565b6000546001600160a01b031633146114775760405162461bcd60e51b8152600401610e3090613823565b60006114986127106114928561148c60015490565b90612048565b90612054565b905060006114af6127106114928561148c60015490565b905060006114c76103e8611492600561148c60015490565b90508083101580156114d95750808210155b6115435760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610e30565b506002919091556003555050565b6000546001600160a01b0316331461157b5760405162461bcd60e51b8152600401610e3090613823565b611597620186a06114928360015461204890919063ffffffff16565b60355550565b6000546001600160a01b031633146115c75760405162461bcd60e51b8152600401610e3090613823565b60098054911515600160b01b0260ff60b01b19909216919091179055565b60006113826115f46000611387565b61137c61160261dead611387565b60015490611d75565b6036546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611645573d6000803e3d6000fd5b5050565b6000546001600160a01b031633146116735760405162461bcd60e51b8152600401610e3090613823565b603880546001600160a01b039687166001600160a01b0319918216811790925560398054968816968216871790556036805495881695821686179055601d805494881694821685179055603780549390971692168217909555600094855260066020526040808620805460ff199081166001908117909255958752818720805487168217905593865280862080548616851790559185528185208054851684179055845290922080549091169091179055565b6001600160a01b0381166000908152601960209081526040808320546004909252822054610e0091611d75565b6000610dfc338484611d81565b61176a3382612060565b50565b6000546001600160a01b031633146117975760405162461bcd60e51b8152600401610e3090613823565b61141a6121ab565b6000546001600160a01b031633146117c95760405162461bcd60e51b8152600401610e3090613823565b602e805460ff1916911515919091179055565b6000546001600160a01b031633146118065760405162461bcd60e51b8152600401610e3090613823565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561184d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118719190613843565b60365460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044016020604051808303816000875af11580156118c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ea919061385c565b505050565b6000546001600160a01b031633146119195760405162461bcd60e51b8152600401610e3090613823565b611935620186a06114928360015461204890919063ffffffff16565b60345550565b6000546001600160a01b031633146119655760405162461bcd60e51b8152600401610e3090613823565b61176a8161224f565b6000546001600160a01b031633146119985760405162461bcd60e51b8152600401610e3090613823565b602992909255602155602255565b6000546001600160a01b031633146119d05760405162461bcd60e51b8152600401610e3090613823565b60168390556119e9620186a06114928461148c60015490565b601755611a00620186a06114928361148c60015490565b601855505050565b6000546001600160a01b03163314611a325760405162461bcd60e51b8152600401610e3090613823565b6001600160a01b0382166000908152600760205260409020805460ff19168215801591909117909155611a6a57611a6a82600061234a565b6001600160a01b0382166000908152602f602052604090205415611ab9576001600160a01b0382166000908152602f6020526040902054611645908390611ab49061148c83611387565b61234a565b61164582611ab484611387565b6000546001600160a01b03163314611af05760405162461bcd60e51b8152600401610e3090613823565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b03163314611b6e5760405162461bcd60e51b8152600401610e3090613823565b601c80546001600160a01b039092166001600160a01b0319909216821790556000908152600660205260409020805460ff19166001179055565b6015805461ff0019166101001790556000611bc233611387565b601c546040516334c5cbab60e11b8152336004820181905260248201529192506001600160a01b03169063698b975690604401600060405180830381600087803b158015611c0f57600080fd5b505af1158015611c23573d6000803e3d6000fd5b505050506000611c368261137c33611387565b9050611c423382612060565b50506015805461ff0019169055565b6001600160a01b038316611cb35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e30565b6001600160a01b038216611d145760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e30565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611092828461388f565b611d8c838383612484565b611d9683836125bc565b611da183838361264d565b611dac838383612739565b611db6838361287b565b611dc18383836128e1565b611dcc8383836129b5565b6001600160a01b038316600090815260046020526040902054611def9082611d75565b6001600160a01b038416600090815260046020526040812091909155611e1584846129da565b611e1f5781611e2a565b611e2a848484612a20565b6001600160a01b038416600090815260046020526040902054909150611e509082612bf6565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ea49085815260200190565b60405180910390a3611eb68484612c02565b50505050565b60008184841115611ee05760405162461bcd60e51b8152600401610e30919061353f565b505050900390565b6000610e006024546114926023548561204890919063ffffffff16565b6000611f10826110e5565b6001600160a01b0383166000908152602660205260409020549091501580611f3f5750611f3c30611387565b81115b15611f48575050565b801561164557602054611f5b9082612bf6565b6020908155602b546000908152603b9091526040902060010154611f7f9082612bf6565b602b546000908152603b6020526040902060010155611f9f308383612e55565b50602b546000908152603a602090815260408083206001600160a01b03861684528252808320849055602882528083204290556026909152902060020154611fe79082612bf6565b6001600160a01b038316600090815260266020526040902060028101919091555461201190611ee8565b6001600160a01b038316600090815260266020908152604080832060010193909355602f90529081205561164582611ab481611387565b600061109282846138a2565b600061109282846138b9565b6001600160a01b03821660009081526019602090815260408083205460049092529091205461208e91611d75565b8111156120f55760405162461bcd60e51b815260206004820152602f60248201527f45524332303a2043616e6e6f74207374616b65206d6f7265207468616e20617660448201526e61696c61626c652062616c616e636560881b6064820152608401610e30565b601c5460405163773a0f0960e01b81526001600160a01b038481166004830152602482018490529091169063773a0f0990604401600060405180830381600087803b15801561214357600080fd5b505af1158015612157573d6000803e3d6000fd5b5050506001600160a01b03831660009081526019602052604090205461217e915082612bf6565b6001600160a01b038316600090815260196020526040902055601a546121a49082612bf6565b601a555050565b602c805460ff1916600190811790915560298054602b80546000908152603b60205260408120600401929092559155546121e491612bf6565b602b818155602a546000928352603b60205260408084206003019190915560218054835485528285205591548352909120426002909101556035549054111561222e576035546021555b612239602154612eca565b60006021819055602a554260335560315461141a905b6020546025548061225f57505050565b6000805a905060005b858310801561227657508381105b1561231557836030541061228a5760006030555b6122bc6025603054815481106122a2576122a26138db565b6000918252602090912001546001600160a01b0316611f05565b6122d16122ca5a8490611d75565b8490612bf6565b92505a6030805491935060006122e6836138f1565b919050555080806122f6906138f1565b602d8054919350909150600061230b836138f1565b9190505550612268565b83602d5410158015612328575084602054115b1561234257602c805460ff1916905560006022819055602d555b505050505050565b60008111801561237057506001600160a01b038216600090815260266020526040902054155b156123d657602580546001600160a01b0384166000818152602760205260408120839055600183018455929092527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055612409565b801580156123fb57506001600160a01b03821660009081526026602052604090205415155b156124095761240982612f03565b6001600160a01b038216600090815260266020526040902054601e5461243a91839161243491611d75565b90612bf6565b601e556001600160a01b038216600090815260266020526040902081905561246181611ee8565b6001600160a01b0390921660009081526026602052604090206001019190915550565b6001600160a01b0383166124e85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e30565b6001600160a01b03821661254a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e30565b61255383611387565b8111156118ea5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610e30565b6001600160a01b03821660009081526006602052604090205460ff161580156125fe57506001600160a01b03811660009081526006602052604090205460ff16155b1561164557600954600160a81b900460ff166116455760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b6044820152606401610e30565b6001600160a01b03831660009081526006602052604090205460ff1615801561268f57506001600160a01b03821660009081526006602052604090205460ff16155b80156126a957506009546001600160a01b03838116911614155b80156126c057506001600160a01b03821661dead14155b156118ea576003546001600160a01b0383166000908152600460205260409020546126eb9083612bf6565b11156118ea5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610e30565b6001600160a01b038316600090815260196020526040902054156127ef5761276083611387565b6001600160a01b038416600090815260196020526040902054612784908390612bf6565b11156127ef5760405162461bcd60e51b815260206004820152603460248201527f45524332303a2045786365656473206d6178696d756d20616c6c6f776564206e60448201527337ba1031bab93932b73a363c9039ba30b5b2b21760611b6064820152608401610e30565b6002548111158061281857506001600160a01b03831660009081526006602052604090205460ff165b8061283b57506001600160a01b03821660009081526006602052604090205460ff165b6118ea5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610e30565b6009546001600160a01b0382811691161480156128b157506001600160a01b03821660009081526006602052604090205460ff16155b80156128c0575060155460ff16155b15611645576001601460008282546128d8919061390a565b90915550505050565b6009546001600160a01b03848116911614801561290057506034548110155b15612943576001600160a01b0382166000908152602f6020526040902054612929906001612bf6565b6001600160a01b0383166000908152602f60205260409020555b6009546001600160a01b038481169116148015612961575060345481105b15612983576001600160a01b0382166000908152602f60205260409020600190555b6009546001600160a01b03908116908316036118ea5750506001600160a01b03166000908152602f6020526040812055565b6129c0838383613018565b156118ea576129d06017546130d0565b6000601455505050565b6001600160a01b03821660009081526006602052604081205460ff161580156110925750506001600160a01b031660009081526006602052604090205460ff1615919050565b600080612a2d85856132db565b118015612a3d575060155460ff16155b15612bef576000612a5f612a5186866132db565b60135461148c908690612054565b30600090815260046020526040902054909150612a7c9082612bf6565b30600081815260046020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612acd9085815260200190565b60405180910390a36000600c54118015612af25750612aec85856132db565b600c5411155b15612b4757612b1e612b15600c5461148c6013548761205490919063ffffffff16565b60215490612bf6565b602155600c54601354612b4391612b3a9161148c908790612054565b602a5490612bf6565b602a555b6000600e54118015612b645750612b5e85856132db565b600e5411155b15612b9057612b903061dead612b8b600e5461148c6013548961205490919063ffffffff16565b611d81565b6000600f54118015612bad5750612ba785856132db565b600f5411155b15612bdd57601d54600f54601354612bdd9230926001600160a01b0390911691612b8b919061148c908990612054565b612be78382611d75565b915050611092565b5092915050565b6000611092828461390a565b602e5460ff1615612c135760006022555b6001600160a01b03811660009081526026602052604090205415612c3a57612c3a81611f05565b6001600160a01b03821660009081526026602052604090205415801590612c6f57506009546001600160a01b03828116911614155b15612c7d57612c7d82611f05565b6009546001600160a01b038281169116148015612cb157506001600160a01b03821660009081526026602052604090205415155b15612ccf57612ccb612cc2836110e5565b60295490612bf6565b6029555b6001600160a01b03821660009081526007602052604090205460ff16612cfc57612cfc82611ab484611387565b6001600160a01b03811660009081526007602052604090205460ff16612d2957612d2981611ab483611387565b6001600160a01b03811660009081526007602052604090205460ff16158015612d5f57506009546001600160a01b038381169116145b8015612d8457506001600160a01b0381166000908152602f6020526040902054600111155b15612db5576001600160a01b0381166000908152602f6020526040902054612db5908290611ab49061148c83611387565b42612dcd603254603354612bf690919063ffffffff16565b11158015612de45750600954600160a81b900460ff165b8015612df257506000602154115b8015612e01575060155460ff16155b8015612e165750600954600160b01b900460ff165b15612e2357612e236121ab565b612e2e60315461224f565b6001600160a01b038116600090815260266020526040902054156116455761164581611f05565b6001600160a01b038316600090815260046020526040812054612e789083611d75565b6001600160a01b038086166000908152600460205260408082209390935590851681522054612ea79083612bf6565b6001600160a01b0384166000908152600460205260409020555060019392505050565b601f54612ed79082612bf6565b601f55601e54602454612efb91612ef2916114929085612048565b60235490612bf6565b602355602255565b60258054612f139060019061388f565b81548110612f2357612f236138db565b60009182526020808320909101546001600160a01b0384811684526027909252604090922054602580549290931692918110612f6157612f616138db565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260279182905260408120546025805491939291612fad9060019061388f565b81548110612fbd57612fbd6138db565b60009182526020808320909101546001600160a01b031683528201929092526040019020556025805480612ff357612ff361391d565b600082815260209020810160001990810180546001600160a01b031916905501905550565b60008060185483101590506000601754613030611365565b601554911115915060ff161580156130515750600954600160a01b900460ff165b80156130665750600954600160a81b900460ff165b801561306f5750815b801561309457506001600160a01b03861660009081526006602052604090205460ff16155b80156130ad57506009546001600160a01b038681169116145b80156130bd575060165460145410155b80156130c65750805b9695505050505050565b6015805460ff191660019081179091556010546000916130f79160029161148c9190612bf6565b6010549091506131315761312e600261148c6001612434600d54612434601b54612434600b54600a54612bf690919063ffffffff16565b90505b600061314c82611492600a548661204890919063ffffffff16565b9050600061315a8483611d75565b90504761316682613342565b60006131724783611d75565b9050600061319561318e600a5488611d7590919063ffffffff16565b8390612054565b905060006131ae600a548361204890919063ffffffff16565b905080156131cf576039546131cf90879083906001600160a01b0316613494565b601b546000906131e49061148c856002612048565b90508015613228576037546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613226573d6000803e3d6000fd5b505b600b5460009061323d9061148c866002612048565b90508015613281576038546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561327f573d6000803e3d6000fd5b505b4780156132c4576036546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156132c2573d6000803e3d6000fd5b505b50506015805460ff19169055505050505050505050565b6009546000906001600160a01b0383811691161480156132fd57506000601154115b1561330b5750601154610e00565b6009546001600160a01b03848116911614801561332a57506000601054115b156133385750601054610e00565b5060125492915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613377576133776138db565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156133d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f49190613933565b81600181518110613407576134076138db565b6001600160a01b03928316602091820292909201015260085461342d9130911684611c51565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac94790613466908590600090869030904290600401613950565b600060405180830381600087803b15801561348057600080fd5b505af1158015612342573d6000803e3d6000fd5b6008546134ac9030906001600160a01b031685611c51565b60085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0383811660848301524260a48301529091169063f305d71990849060c40160606040518083038185885af115801561351a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061234291906139c1565b600060208083528351808285015260005b8181101561356c57858101830151858201604001528201613550565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461176a57600080fd5b600080604083850312156135b557600080fd5b82356135c08161358d565b946020939093013593505050565b6000602082840312156135e057600080fd5b5035919050565b6000806000806000806000806000806101408b8d03121561360757600080fd5b505088359a60208a01359a5060408a013599606081013599506080810135985060a0810135975060c0810135965060e081013595506101008101359450610120013592509050565b60008060006060848603121561366457600080fd5b833561366f8161358d565b9250602084013561367f8161358d565b929592945050506040919091013590565b6000602082840312156136a257600080fd5b81356110928161358d565b801515811461176a57600080fd5b600080604083850312156136ce57600080fd5b82356136d98161358d565b915060208301356136e9816136ad565b809150509250929050565b6000806040838503121561370757600080fd5b50508035926020909101359150565b60006020828403121561372857600080fd5b8135611092816136ad565b600080600080600060a0868803121561374b57600080fd5b85356137568161358d565b945060208601356137668161358d565b935060408601356137768161358d565b925060608601356137868161358d565b915060808601356137968161358d565b809150509295509295909350565b600080604083850312156137b757600080fd5b82356137c28161358d565b915060208301356136e98161358d565b6000806000606084860312156137e757600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561381157600080fd5b8235915060208301356136e98161358d565b60208082526006908201526510a7aba722a960d11b604082015260600190565b60006020828403121561385557600080fd5b5051919050565b60006020828403121561386e57600080fd5b8151611092816136ad565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e0057610e00613879565b8082028115828204841417610e0057610e00613879565b6000826138d657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820161390357613903613879565b5060010190565b80820180821115610e0057610e00613879565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561394557600080fd5b81516110928161358d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139a05784516001600160a01b03168352938301939183019160010161397b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156139d657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212202a502d07ee857a601fcd87eefb5e6acb014ed1e37b75aeaf99042f5342a1f1a164736f6c63430008130033

Deployed Bytecode Sourcemap

4478:27341:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6473:40;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;6473:40:0;;;;;;;;9168:67;;;;;;;;;;-1:-1:-1;9228:5:0;;;;;;;;;;;;-1:-1:-1;;;9228:5:0;;;;9168:67;;;;;;;:::i;6435:31::-;;;;;;;;;;;;;;;;9952:133;;;;;;;;;;-1:-1:-1;9952:133:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;9952:133:0;1205:187:1;25469:88:0;;;;;;;;;;-1:-1:-1;25469:88:0;;;;;:::i;:::-;;:::i;:::-;;12448:700;;;;;;;;;;-1:-1:-1;12448:700:0;;;;;:::i;:::-;;:::i;26974:207::-;;;;;;;;;;-1:-1:-1;27097:25:0;;27135:15;;27036:20;27124:27;;;:10;:27;;;;;:48;;;26974:207;;;;2560:25:1;;;2616:2;2601:18;;2594:34;;;;2533:18;26974:207:0;2386:248:1;9475:84:0;;;;;;;;;;-1:-1:-1;9545:12:0;;9475:84;;31086:404;;;;;;;;;;;;;:::i;:::-;;;;2898:25:1;;;2954:2;2939:18;;2932:34;;;;2982:18;;;2975:34;;;;3040:2;3025:18;;3018:34;3083:3;3068:19;;3061:35;2885:3;2870:19;31086:404:0;2639:463:1;8178:47:0;;;;;;;;;;-1:-1:-1;8178:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10731:309;;;;;;;;;;-1:-1:-1;10731:309:0;;;;;:::i;:::-;;:::i;26564:106::-;;;;;;;;;;-1:-1:-1;26564:106:0;;;;;:::i;:::-;;:::i;29423:473::-;;;;;;;;;;-1:-1:-1;29423:473:0;;;;;:::i;:::-;;:::i;16442:128::-;;;;;;;;;;;;;:::i;16893:131::-;;;;;;;;;;-1:-1:-1;16893:131:0;;;;;:::i;:::-;;:::i;14103:347::-;;;;;;;;;;-1:-1:-1;14103:347:0;;;;;:::i;:::-;;:::i;2366:87::-;;;;;;;;;;-1:-1:-1;2366:87:0;;;;;:::i;:::-;2421:4;2446:5;-1:-1:-1;;;;;2435:16:0;;;2446:5;;2435:16;;2366:87;9318:67;;;;;;;;;;-1:-1:-1;9318:67:0;;4717:1;3962:36:1;;3950:2;3935:18;9318:67:0;3820:184:1;6966:30:0;;;;;;;;;;;;;;;;6328:26;;;;;;;;;;;;;;;;5048:44;;;;;;;;;;-1:-1:-1;5048:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5099:49;;;;;;;;;;-1:-1:-1;5099:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17508:124;;;;;;;;;;-1:-1:-1;17508:124:0;;;;;:::i;:::-;;:::i;7307:31::-;;;;;;;;;;;;;;;;30897:181;;;;;;;;;;;;;:::i;7214:33::-;;;;;;;;;;;;;;;;9565:103;;;;;;;;;;-1:-1:-1;9565:103:0;;;;;:::i;:::-;;:::i;7254:46::-;;;;;;;;;;;;;;;;30553:336;;;;;;;;;;;;;:::i;4857:63::-;;;;;;;;;;;;;;;;25109:120;;;;;;;;;;-1:-1:-1;25109:120:0;;;;;:::i;:::-;;:::i;4790:60::-;;;;;;;;;;;;;;;;6175:26;;;;;;;;;;;;;;;;26880:86;;;;;;;;;;;;;:::i;25565:108::-;;;;;;;;;;;;;:::i;13156:449::-;;;;;;;;;;-1:-1:-1;13156:449:0;;;;;:::i;:::-;;:::i;9391:78::-;;;;;;;;;;-1:-1:-1;9443:7:0;9461:5;-1:-1:-1;;;;;9461:5:0;9391:78;;;-1:-1:-1;;;;;4936:32:1;;;4918:51;;4906:2;4891:18;9391:78:0;4772:203:1;24969:132:0;;;;;;;;;;-1:-1:-1;24969:132:0;;;;;:::i;:::-;;:::i;25356:105::-;;;;;;;;;;-1:-1:-1;25356:105:0;;;;;:::i;:::-;;:::i;10222:138::-;;;;;;;;;;;;;:::i;9241:71::-;;;;;;;;;;-1:-1:-1;9303:7:0;;;;;;;;;;;;-1:-1:-1;;;9303:7:0;;;;9241:71;;6361:29;;;;;;;;;;;;;;;;26449:107;;;;;;;;;;-1:-1:-1;26449:107:0;;;;;:::i;:::-;;:::i;17032:468::-;;;;;;;;;;-1:-1:-1;17032:468:0;;;;;:::i;:::-;;:::i;10091:125::-;;;;;;;;;;-1:-1:-1;10091:125:0;;;;;:::i;:::-;;:::i;31668:148::-;;;;;;;;;;-1:-1:-1;31668:148:0;;;;;:::i;:::-;31743:7;31770:26;;;:13;:26;;;;;;;;31797:10;31770:38;;;;;;;;;31668:148;5176:19;;;;;;;;;;-1:-1:-1;5176:19:0;;;;-1:-1:-1;;;;;5176:19:0;;;9674:139;;;;;;;;;;-1:-1:-1;9674:139:0;;;;;:::i;:::-;;:::i;13990:105::-;;;;;;;;;;-1:-1:-1;13990:105:0;;;;;:::i;:::-;;:::i;7122:49::-;;;;;;;;;;-1:-1:-1;7122:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;24660:94;;;;;;;;;;;;;:::i;6889:30::-;;;;;;;;;;;;;;;;26678:194;;;;;;;;;;-1:-1:-1;26678:194:0;;;;;:::i;:::-;-1:-1:-1;;;;;26830:19:0;26755:7;26830:19;;;:6;:19;;;;;:33;;;;26678:194;25237:111;;;;;;;;;;-1:-1:-1;25237:111:0;;;;;:::i;:::-;;:::i;24762:199::-;;;;;;;;;;-1:-1:-1;24762:199:0;;;;;:::i;:::-;;:::i;6651:40::-;;;;;;;;;;-1:-1:-1;6651:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6246:25:1;;;6302:2;6287:18;;6280:34;;;;6330:18;;;6323:34;6234:2;6219:18;6651:40:0;6044:319:1;6926:33:0;;;;;;;;;;;;;;;;7003:35;;;;;;;;;;-1:-1:-1;7003:35:0;;;;;;;;17860:130;;;;;;;;;;-1:-1:-1;17860:130:0;;;;;:::i;:::-;;:::i;27372:108::-;;;;;;;;;;-1:-1:-1;27372:108:0;;;;;:::i;:::-;;:::i;5282:37::-;;;;;;;;;;-1:-1:-1;5282:37:0;;;;-1:-1:-1;;;5282:37:0;;;;;;9819:127;;;;;;;;;;-1:-1:-1;9819:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9917:18:0;;;9900:7;9917:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9819:127;17640:212;;;;;;;;;;-1:-1:-1;17640:212:0;;;;;:::i;:::-;;:::i;31498:162::-;;;;;;;;;;-1:-1:-1;31498:162:0;;;;;:::i;:::-;31591:7;31618:26;;;:13;:26;;;;;;;;-1:-1:-1;;;;;31618:34:0;;;;;;;;;;;;;31498:162;16578:307;;;;;;;;;;-1:-1:-1;16578:307:0;;;;;:::i;:::-;;:::i;6121:47::-;;;;;;;;;;-1:-1:-1;6121:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;22336:327;;;;;;;;;;-1:-1:-1;22336:327:0;;;;;:::i;:::-;;:::i;6397:31::-;;;;;;;;;;;;;;;;2459:111;;;;;;;;;;-1:-1:-1;2459:111:0;;;;;:::i;:::-;;:::i;14780:157::-;;;;;;;;;;-1:-1:-1;14780:157:0;;;;;:::i;:::-;;:::i;14458:314::-;;;;;;;;;;;;;:::i;27189:175::-;;;;;;;;;;-1:-1:-1;27321:13:0;;27336:12;:19;27189:175;;9952:133;10027:4;10034:37;10043:10;10055:7;10064:6;10034:8;:37::i;:::-;-1:-1:-1;10079:4:0;9952:133;;;;;:::o;25469:88::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;;;;;;;;;25534:9:::1;:15:::0;25469:88::o;12448:700::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;12690:12:::1;:25:::0;;;12717:12:::1;:25:::0;;;12744:13:::1;:28:::0;;;12774:7:::1;:18:::0;;;12794:14:::1;:29:::0;;;-1:-1:-1;12834:15:0;;;12851:8:::1;:17:::0;;;12870:7:::1;:15:::0;;;12887:11:::1;:20:::0;;;12909:8:::1;:17:::0;;;12957:11:::1;::::0;12945:23;::::1;::::0;::::1;::::0;:49:::1;;;12983:11;;12972:7;;:22;;12945:49;:75;;;;;13009:11;;12998:7;;:22;;12945:75;:102;;;;;13036:11;;13024:8;;:23;;12945:102;:146;;;;;13080:11;;13065;;:26;;12945:146;12937:203;;;::::0;-1:-1:-1;;;12937:203:0;;8198:2:1;12937:203:0::1;::::0;::::1;8180:21:1::0;8237:2;8217:18;;;8210:30;8276:34;8256:18;;;8249:62;-1:-1:-1;;;8327:18:1;;;8320:42;8379:19;;12937:203:0::1;7996:408:1::0;12937:203:0::1;12448:700:::0;;;;;;;;;;:::o;31086:404::-;31149:7;31158;31167;31176;31185;31212:10;:27;31223:15;;31212:27;;;;;;;;;;;:44;;;31258:10;:34;31269:22;31289:1;31269:15;;:19;;:22;;;;:::i;:::-;31258:34;;;;;;;;;;;:51;;;31311:10;:34;31322:22;31342:1;31322:15;;:19;;:22;;;;:::i;:::-;31311:34;;;;;;;;;;;:51;;;31377:10;:34;31388:22;31408:1;31388:15;;:19;;:22;;;;:::i;:::-;31377:34;;;;;;;;;;;:51;;;31430:10;:34;31441:22;31461:1;31441:15;;:19;;:22;;;;:::i;:::-;31430:34;;;;;;;;;;;:51;;;31205:277;;;;;;;;;;31086:404;;;;;:::o;10731:309::-;10829:4;10846:36;10856:6;10864:9;10875:6;10846:9;:36::i;:::-;10893:117;10902:6;10910:10;10922:87;10958:6;10922:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10922:19:0;;;;;;:11;:19;;;;;;;;10942:10;10922:31;;;;;;;;;:87;:35;:87::i;:::-;10893:8;:117::i;:::-;-1:-1:-1;11028:4:0;10731:309;;;;;;:::o;26564:106::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;26637:14:::1;:25:::0;;-1:-1:-1;;;;;;26637:25:0::1;-1:-1:-1::0;;;;;26637:25:0;;;::::1;::::0;;;::::1;::::0;;26564:106::o;29423:473::-;-1:-1:-1;;;;;29515:19:0;;29492:7;29515:19;;;:6;:19;;;;;:26;:31;;29512:48;;-1:-1:-1;29556:1:0;;29423:473;-1:-1:-1;29423:473:0:o;29512:48::-;-1:-1:-1;;;;;29629:19:0;;29570:33;29629:19;;;:6;:19;;;;;:26;29606:50;;:22;:50::i;:::-;-1:-1:-1;;;;;29702:19:0;;29667:32;29702:19;;;:6;:19;;;;;:33;;;29570:86;;-1:-1:-1;29749:53:0;;;29746:70;;-1:-1:-1;29812:1:0;;29423:473;-1:-1:-1;;;29423:473:0:o;29746:70::-;29833:55;:25;29863:24;29833:29;:55::i;:::-;29826:62;29423:473;-1:-1:-1;;;;29423:473:0:o;16442:128::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;16496:14:::1;:21:::0;;-1:-1:-1;;;;16496:21:0::1;-1:-1:-1::0;;;16496:21:0::1;::::0;;16547:15:::1;16528:16;:34:::0;16442:128::o;16893:131::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16984:19:0;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:32;16893:131::o;14103:347::-;14197:10;14184:24;;;;:12;:24;;;;;;14174:34;;;14166:92;;;;-1:-1:-1;;;14166:92:0;;8611:2:1;14166:92:0;;;8593:21:1;8650:2;8630:18;;;8623:30;8689:34;8669:18;;;8662:62;-1:-1:-1;;;8740:18:1;;;8733:43;8793:19;;14166:92:0;8409:409:1;14166:92:0;14269:15;;:51;;-1:-1:-1;;;14269:51:0;;14301:10;14269:51;;;8997::1;9064:18;;;9057:34;;;-1:-1:-1;;;;;14269:15:0;;;;:31;;8970:18:1;;14269:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14371:10:0;14358:24;;;;:12;:24;;;;;;:36;;-1:-1:-1;14358:24:0;-1:-1:-1;14387:6:0;14358:28;:36::i;:::-;14344:10;14331:24;;;;:12;:24;;;;;:63;14419:11;;:23;;14435:6;14419:15;:23::i;:::-;14405:11;:37;-1:-1:-1;14103:347:0:o;17508:124::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17592:21:0;;;::::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;17592:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17508:124::o;30897:181::-;30950:23;30993:77;31044:25;;30993:46;31022:16;;30993:24;31011:4;30993:9;:24::i;:::-;:28;;:46::i;:77::-;30986:84;;30897:181;:::o;9565:103::-;-1:-1:-1;;;;;9648:18:0;9631:7;9648:18;;;:9;:18;;;;;;;9565:103::o;30553:336::-;30606:15;30623:17;30642:15;30659:20;30681:14;30715:24;30733:4;30715:9;:24::i;:::-;30741:77;30792:25;;30741:46;30770:16;;30741:24;30759:4;30741:9;:24::i;:77::-;30820:16;;30838:25;;30865:15;;30708:173;;;;;;;;;;30553:336;;;;;:::o;25109:120::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;25190:20:::1;:31:::0;25109:120::o;26880:86::-;26928:30;26947:10;26928:18;:30::i;:::-;26880:86::o;25565:108::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;25663:1:::1;25627:25;:38:::0;25565:108::o;13156:449::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;13240:13:::1;13256:43;13292:5;13256:23;13274:4;13256:13;9545:12:::0;;;9475:84;13256:13:::1;:17:::0;::::1;:23::i;:::-;:27:::0;::::1;:43::i;:::-;13240:59;;13310:17;13330:46;13369:5;13330:26;13348:7;13330:13;9545:12:::0;;;9475:84;13330:46:::1;13310:66;;13378:13;13394:30;13419:4;13394:20;13412:1;13394:13;9545:12:::0;;;9475:84;13394:30:::1;13378:46;;13452:5;13443;:14;;:36;;;;;13474:5;13461:9;:18;;13443:36;13435:102;;;::::0;-1:-1:-1;;;13435:102:0;;9304:2:1;13435:102:0::1;::::0;::::1;9286:21:1::0;9343:2;9323:18;;;9316:30;9382:34;9362:18;;;9355:62;-1:-1:-1;;;9433:18:1;;;9426:51;9494:19;;13435:102:0::1;9102:417:1::0;13435:102:0::1;-1:-1:-1::0;13548:12:0::1;:20:::0;;;;13570:15:::1;:27:::0;-1:-1:-1;;13156:449:0:o;24969:132::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;25057:36:::1;25086:6;25057:24;25074:6;25057:12;;:16;;:24;;;;:::i;:36::-;25041:13;:52:::0;-1:-1:-1;24969:132:0:o;25356:105::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;25426:18:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;25426:27:0::1;-1:-1:-1::0;;;;25426:27:0;;::::1;::::0;;;::::1;::::0;;25356:105::o;10222:138::-;10281:7;10298:60;10336:21;10354:1;10336:9;:21::i;:::-;10298:33;10315:15;7515:42;10315:9;:15::i;:::-;10298:12;;;:16;:33::i;26449:107::-;26513:16;;26505:43;;-1:-1:-1;;;;;26513:16:0;;;;26505:43;;;;;26540:7;;26513:16;26505:43;26513:16;26505:43;26540:7;26513:16;26505:43;;;;;;;;;;;;;;;;;;;;;26449:107;:::o;17032:468::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;17184:18:::1;:31:::0;;-1:-1:-1;;;;;17184:31:0;;::::1;-1:-1:-1::0;;;;;;17184:31:0;;::::1;::::0;::::1;::::0;;;17217:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;17250:16:::1;:27:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;17279:14:::1;:23:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;17304:16:::1;:27:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;17184:18:::1;17342:23:::0;;;:11:::1;:23;::::0;;;;;:30;;-1:-1:-1;;17342:30:0;;::::1;17184:31:::0;17342:30;;::::1;::::0;;;17374:23;;;;;;:30;;;::::1;::::0;::::1;::::0;;17406:21;;;;;;:28;;;::::1;::::0;::::1;::::0;;17436:19;;;;;;:26;;;::::1;::::0;::::1;::::0;;17464:21;;;;;:28;;;;::::1;::::0;;::::1;::::0;;17032:468::o;10091:125::-;-1:-1:-1;;;;;10193:20:0;;10154:7;10193:20;;;:12;:20;;;;;;;;;10171:9;:17;;;;;;:43;;:21;:43::i;9674:139::-;9752:4;9759:40;9769:10;9781:9;9792:6;9759:9;:40::i;13990:105::-;14052:35;14068:10;14080:6;14052:15;:35::i;:::-;13990:105;:::o;24660:94::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;24723:23:::1;:21;:23::i;25237:111::-:0;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;25312:19:::1;:28:::0;;-1:-1:-1;;25312:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25237:111::o;24762:199::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;24849:41:::1;::::0;-1:-1:-1;;;24849:41:0;;24884:4:::1;24849:41;::::0;::::1;4918:51:1::0;24831:15:0::1;::::0;-1:-1:-1;;;;;24849:26:0;::::1;::::0;::::1;::::0;4891:18:1;;24849:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24927:16;::::0;24901:52:::1;::::0;-1:-1:-1;;;24901:52:0;;-1:-1:-1;;;;;24927:16:0;;::::1;24901:52;::::0;::::1;8997:51:1::0;9064:18;;;9057:34;;;24831:59:0;;-1:-1:-1;24901:25:0;::::1;::::0;::::1;::::0;8970:18:1;;24901:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24820:141;24762:199:::0;:::o;17860:130::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;17946:36:::1;17975:6;17946:24;17963:6;17946:12;;:16;;:24;;;;:::i;:36::-;17931:12;:51:::0;-1:-1:-1;17860:130:0:o;27372:108::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;27449:23:::1;27468:3;27449:18;:23::i;17640:212::-:0;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;17750:15:::1;:24:::0;;;;17776:16:::1;:26:::0;17804:25:::1;:40:::0;17640:212::o;16578:307::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;16707:10:::1;:24:::0;;;16749:54:::1;16795:6;16749:33;16767:14:::0;16749:13:::1;9545:12:::0;;;9475:84;16749:54:::1;16733:13;:70:::0;16822:55:::1;16869:6;16822:34;16840:15:::0;16822:13:::1;9545:12:::0;;;9475:84;16822:55:::1;16805:14;:72:::0;-1:-1:-1;;;16578:307:0:o;22336:327::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22424:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;22424:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;22468:32:::1;;22479:19;22488:6;22496:1;22479:8;:19::i;:::-;-1:-1:-1::0;;;;;22513:21:0;::::1;22537:1;22513:21:::0;;;:13:::1;:21;::::0;;;;;:25;22510:146:::1;;-1:-1:-1::0;;;;;22579:21:0;::::1;;::::0;;;:13:::1;:21;::::0;;;;;22540:62:::1;::::0;22549:6;;22557:44:::1;::::0;:17:::1;22549:6:::0;22557:9:::1;:17::i;:44::-;22540:8;:62::i;22510:146::-;22619:35;22628:6;22636:17;22646:6;22636:9;:17::i;2459:111::-:0;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;2525:5:::1;:11:::0;;-1:-1:-1;;;;;;2525:11:0::1;-1:-1:-1::0;;;;;2525:11:0;::::1;::::0;;::::1;::::0;;;2543:25:::1;::::0;4918:51:1;;;2543:25:0::1;::::0;4906:2:1;4891:18;2543:25:0::1;;;;;;;2459:111:::0;:::o;14780:157::-;2421:4;2446:5;-1:-1:-1;;;;;2446:5:0;2333:10;2435:16;2317:38;;;;-1:-1:-1;;;2317:38:0;;;;;;;:::i;:::-;14855:15:::1;:44:::0;;-1:-1:-1;;;;;14855:44:0;;::::1;-1:-1:-1::0;;;;;;14855:44:0;;::::1;::::0;::::1;::::0;;:15:::1;14901:21:::0;;;:11:::1;:21;::::0;;;;:28;;-1:-1:-1;;14901:28:0::1;14855:44:::0;14901:28:::1;::::0;;14780:157::o;14458:314::-;6013:7;:14;;-1:-1:-1;;6013:14:0;;;;;;14549:21:::1;14559:10;14549:9;:21::i;:::-;14581:15;::::0;:62:::1;::::0;-1:-1:-1;;;14581:62:0;;14620:10:::1;14581:62;::::0;::::1;10391:34:1::0;;;10441:18;;;10434:43;14526:44:0;;-1:-1:-1;;;;;;14581:15:0::1;::::0;:38:::1;::::0;10326:18:1;;14581:62:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14654:18;14675:39;14701:12;14675:21;14685:10;14675:9;:21::i;:39::-;14654:60;;14725:39;14741:10;14753;14725:15;:39::i;:::-;-1:-1:-1::0;;6032:7:0;:15;;-1:-1:-1;;6032:15:0;;;14458:314::o;11311:335::-;-1:-1:-1;;;;;11404:19:0;;11396:68;;;;-1:-1:-1;;;11396:68:0;;10690:2:1;11396:68:0;;;10672:21:1;10729:2;10709:18;;;10702:30;10768:34;10748:18;;;10741:62;-1:-1:-1;;;10819:18:1;;;10812:34;10863:19;;11396:68:0;10488:400:1;11396:68:0;-1:-1:-1;;;;;11483:21:0;;11475:68;;;;-1:-1:-1;;;11475:68:0;;11095:2:1;11475:68:0;;;11077:21:1;11134:2;11114:18;;;11107:30;11173:34;11153:18;;;11146:62;-1:-1:-1;;;11224:18:1;;;11217:32;11266:19;;11475:68:0;10893:398:1;11475:68:0;-1:-1:-1;;;;;11554:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11606:32;;160:25:1;;;11606:32:0;;133:18:1;11606:32:0;;;;;;;11311:335;;;:::o;344:82::-;402:7;419:5;423:1;419;:5;:::i;11654:786::-;11743:37;11754:6;11762:9;11773:6;11743:10;:37::i;:::-;11791:38;11811:6;11819:9;11791:19;:38::i;:::-;11840:41;11855:6;11863:9;11874:6;11840:14;:41::i;:::-;11893:39;11906:6;11914:9;11925:6;11893:12;:39::i;:::-;11943:38;11963:6;11971:9;11943:19;:38::i;:::-;11992:43;12009:6;12017:9;12028:6;11992:16;:43::i;:::-;12046:35;12055:6;12063:9;12074:6;12046:8;:35::i;:::-;-1:-1:-1;;;;;12112:17:0;;;;;;:9;:17;;;;;;:29;;12134:6;12112:21;:29::i;:::-;-1:-1:-1;;;;;12092:17:0;;;;;;:9;:17;;;;;:49;;;;12177:32;12102:6;12199:9;12177:13;:32::i;:::-;:78;;12249:6;12177:78;;;12212:34;12220:6;12228:9;12239:6;12212:7;:34::i;:::-;-1:-1:-1;;;;;12289:20:0;;;;;;:9;:20;;;;;;12152:103;;-1:-1:-1;12289:40:0;;12152:103;12289:24;:40::i;:::-;-1:-1:-1;;;;;12266:20:0;;;;;;;:9;:20;;;;;;;:63;;;;12345:43;;;;;;;;;;12373:14;160:25:1;;148:2;133:18;;14:177;12345:43:0;;;;;;;;12399:33;12414:6;12422:9;12399:14;:33::i;:::-;11732:708;11654:786;;;:::o;698:162::-;784:7;830:12;822:6;;;;814:29;;;;-1:-1:-1;;;814:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;852:5:0;;;698:162::o;29904:170::-;29974:7;30001:65;30034:31;;30001:28;30011:17;;30001:5;:9;;:28;;;;:::i;28469:946::-;28538:14;28555:30;28573:11;28555:17;:30::i;:::-;-1:-1:-1;;;;;28599:19:0;;;;;;:6;:19;;;;;:26;28538:47;;-1:-1:-1;28599:31:0;;:68;;;28643:24;28661:4;28643:9;:24::i;:::-;28634:6;:33;28599:68;28596:83;;;28670:7;28469:946;:::o;28596:83::-;28692:19;;28689:719;;28746:16;;:28;;28767:6;28746:20;:28::i;:::-;28727:16;:47;;;28851:15;;28840:27;;;;:10;:27;;;;;;:48;;;:60;;28893:6;28840:52;:60::i;:::-;28800:15;;28789:27;;;;:10;:27;;;;;:48;;:111;28915:50;28938:4;28945:11;28958:6;28915:14;:50::i;:::-;-1:-1:-1;28994:15:0;;28980:30;;;;:13;:30;;;;;;;;-1:-1:-1;;;;;28980:43:0;;;;;;;;;:52;;;29047:17;:30;;;;;29080:15;29047:48;;29146:6;:19;;;;;:33;;;:45;;29026:6;29146:37;:45::i;:::-;-1:-1:-1;;;;;29110:19:0;;;;;;:6;:19;;;;;:33;;;:81;;;;29265:26;29242:50;;:22;:50::i;:::-;-1:-1:-1;;;;;29206:19:0;;;;;;:6;:19;;;;;;;;:33;;:86;;;;29307:13;:26;;;;;:39;29361:45;29213:11;29383:22;29213:11;29383:9;:22::i;432:82::-;490:7;507:5;511:1;507;:5;:::i;520:82::-;578:7;595:5;599:1;595;:5;:::i;13613:369::-;-1:-1:-1;;;;;13730:20:0;;;;;;:12;:20;;;;;;;;;13708:9;:17;;;;;;;:43;;:21;:43::i;:::-;13698:6;:53;;13690:113;;;;-1:-1:-1;;;13690:113:0;;12158:2:1;13690:113:0;;;12140:21:1;12197:2;12177:18;;;12170:30;12236:34;12216:18;;;12209:62;-1:-1:-1;;;12287:18:1;;;12280:45;12342:19;;13690:113:0;11956:411:1;13690:113:0;13814:15;;:46;;-1:-1:-1;;;13814:46:0;;-1:-1:-1;;;;;9015:32:1;;;13814:46:0;;;8997:51:1;9064:18;;;9057:34;;;13814:15:0;;;;:30;;8970:18:1;;13814:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;13894:20:0;;;;;;:12;:20;;;;;;:32;;-1:-1:-1;13919:6:0;13894:24;:32::i;:::-;-1:-1:-1;;;;;13871:20:0;;;;;;:12;:20;;;;;:55;13951:11;;:23;;13967:6;13951:15;:23::i;:::-;13937:11;:37;-1:-1:-1;;13613:369:0:o;23837:815::-;23894:23;:30;;-1:-1:-1;;23894:30:0;23920:4;23894:30;;;;;;23981:15;;;23950;;;23894:23;23939:27;;;:10;:27;;;;;:39;;:57;;;;24011:28;;24072:15;:31;;:19;:31::i;:::-;24054:15;:49;;;24158:18;;24118:27;;;;:10;:27;;;;;;:37;;:58;;;;24238:16;;;24202:15;;24191:27;;;;;:63;24280:15;;24269:27;;;;;24314:15;24269:42;;;;:60;24366:13;;24347:16;;:32;24344:71;;;24400:13;;24381:16;:32;24344:71;24429:32;24444:16;;24429:14;:32::i;:::-;24503:1;24476:16;:29;;;24520:18;:31;24585:15;24566:16;:34;24634:9;;24615:29;;27488:973;27573:16;;27627:12;:19;;27657:46;;27694:7;;27488:973;:::o;27657:46::-;27713:15;27752;27770:9;27752:27;;27790:18;27832:397;27848:3;27838:7;:13;:46;;;;;27868:16;27855:10;:29;27838:46;27832:397;;;27920:16;27904:12;;:32;27901:82;;27979:1;27956:12;:25;27901:82;28001:46;28020:12;28033;;28020:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;28020:26:0;28001:18;:46::i;:::-;28072:35;28084:22;28096:9;28084:7;;:11;:22::i;:::-;28072:7;;:11;:35::i;:::-;28062:45;;28132:9;28156:12;:14;;28122:19;;-1:-1:-1;28156:12:0;:14;;;:::i;:::-;;;;;;28185:12;;;;;:::i;:::-;28212:13;:15;;28185:12;;-1:-1:-1;28212:15:0;;-1:-1:-1;28212:13:0;:15;;;:::i;:::-;;;;;;27832:397;;;28259:16;28242:13;;:33;;:69;;;;;28298:13;28279:16;;:32;28242:69;28239:215;;;28327:23;:31;;-1:-1:-1;;28327:31:0;;;28353:5;28373:25;:38;;;28426:13;:26;28239:215;27538:923;;;;;27488:973;:::o;25681:482::-;25768:1;25759:6;:10;:45;;;;-1:-1:-1;;;;;;25773:19:0;;;;;;:6;:19;;;;;:26;:31;25759:45;25756:177;;;30181:12;:19;;-1:-1:-1;;;;;30147:31:0;;;;;;:18;:31;;;;;:53;;;30211:30;;;;;;;;;;;;;-1:-1:-1;;;;;;30211:30:0;;;;;;25756:177;;;25853:11;;:45;;;;-1:-1:-1;;;;;;25868:19:0;;25897:1;25868:19;;;:6;:19;;;;;:26;:30;;25853:45;25850:83;;;25900:30;25918:11;25900:17;:30::i;:::-;-1:-1:-1;;;;;25973:19:0;;;;;;:6;:19;;;;;:26;25957:11;;:55;;26005:6;;25957:43;;:15;:43::i;:::-;:47;;:55::i;:::-;25943:11;:69;-1:-1:-1;;;;;26023:19:0;;;;;;:6;:19;;;;;:35;;;26105:50;26052:6;26105:22;:50::i;:::-;-1:-1:-1;;;;;26069:19:0;;;;;;;:6;:19;;;;;:33;;:86;;;;-1:-1:-1;25681:482:0:o;10368:355::-;-1:-1:-1;;;;;10472:20:0;;10464:70;;;;-1:-1:-1;;;10464:70:0;;12846:2:1;10464:70:0;;;12828:21:1;12885:2;12865:18;;;12858:30;12924:34;12904:18;;;12897:62;-1:-1:-1;;;12975:18:1;;;12968:35;13020:19;;10464:70:0;12644:401:1;10464:70:0;-1:-1:-1;;;;;10553:23:0;;10545:71;;;;-1:-1:-1;;;10545:71:0;;13252:2:1;10545:71:0;;;13234:21:1;13291:2;13271:18;;;13264:30;13330:34;13310:18;;;13303:62;-1:-1:-1;;;13381:18:1;;;13374:33;13424:19;;10545:71:0;13050:399:1;10545:71:0;10645:17;10655:6;10645:9;:17::i;:::-;10635:6;:27;;10627:88;;;;-1:-1:-1;;;10627:88:0;;13656:2:1;10627:88:0;;;13638:21:1;13695:2;13675:18;;;13668:30;13734:34;13714:18;;;13707:62;-1:-1:-1;;;13785:18:1;;;13778:47;13842:19;;10627:88:0;13454:413:1;14945:191:0;-1:-1:-1;;;;;15038:19:0;;;;;;:11;:19;;;;;;;;15037:20;:47;;;;-1:-1:-1;;;;;;15062:22:0;;;;;;:11;:22;;;;;;;;15061:23;15037:47;15034:95;;;15094:14;;-1:-1:-1;;;15094:14:0;;;;15086:41;;;;-1:-1:-1;;;15086:41:0;;14074:2:1;15086:41:0;;;14056:21:1;14113:2;14093:18;;;14086:30;-1:-1:-1;;;14132:18:1;;;14125:44;14186:18;;15086:41:0;13872:338:1;15148:331:0;-1:-1:-1;;;;;15252:19:0;;;;;;:11;:19;;;;;;;;15251:20;:47;;;;-1:-1:-1;;;;;;15276:22:0;;;;;;:11;:22;;;;;;;;15275:23;15251:47;:77;;;;-1:-1:-1;15323:4:0;;-1:-1:-1;;;;;15302:26:0;;;15323:4;;15302:26;;15251:77;:107;;;;-1:-1:-1;;;;;;15332:26:0;;7515:42;15332:26;;15251:107;15248:224;;;15420:15;;-1:-1:-1;;;;;15383:20:0;;;;;;:9;:20;;;;;;:32;;15408:6;15383:24;:32::i;:::-;15382:53;;15374:96;;;;-1:-1:-1;;;15374:96:0;;14417:2:1;15374:96:0;;;14399:21:1;14456:2;14436:18;;;14429:30;14495:32;14475:18;;;14468:60;14545:18;;15374:96:0;14215:354:1;16057:377:0;-1:-1:-1;;;;;16158:20:0;;16189:1;16158:20;;;:12;:20;;;;;;:33;16155:160;;16239:17;16249:6;16239:9;:17::i;:::-;-1:-1:-1;;;;;16213:20:0;;;;;;:12;:20;;;;;;16202:32;;:6;;:10;:32::i;:::-;16201:55;;16193:120;;;;-1:-1:-1;;;16193:120:0;;14776:2:1;16193:120:0;;;14758:21:1;14815:2;14795:18;;;14788:30;14854:34;14834:18;;;14827:62;-1:-1:-1;;;14905:18:1;;;14898:50;14965:19;;16193:120:0;14574:416:1;16193:120:0;16343:12;;16333:6;:22;;:45;;;-1:-1:-1;;;;;;16359:19:0;;;;;;:11;:19;;;;;;;;16333:45;:71;;;-1:-1:-1;;;;;;16382:22:0;;;;;;:11;:22;;;;;;;;16333:71;16325:101;;;;-1:-1:-1;;;16325:101:0;;15197:2:1;16325:101:0;;;15179:21:1;15236:2;15216:18;;;15209:30;-1:-1:-1;;;15255:18:1;;;15248:47;15312:18;;16325:101:0;14995:341:1;15487:175:0;15587:4;;-1:-1:-1;;;;;15574:17:0;;;15587:4;;15574:17;:41;;;;-1:-1:-1;;;;;;15596:19:0;;;;;;:11;:19;;;;;;;;15595:20;15574:41;:54;;;;-1:-1:-1;15620:8:0;;;;15619:9;15574:54;15571:84;;;15651:1;15630:9;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;15487:175:0;;:::o;15670:379::-;15780:4;;-1:-1:-1;;;;;15770:14:0;;;15780:4;;15770:14;:40;;;;;15798:12;;15788:6;:22;;15770:40;15767:114;;;-1:-1:-1;;;;;15839:24:0;;;;;;:13;:24;;;;;;:40;;15876:1;15839:28;:40::i;:::-;-1:-1:-1;;;;;15812:24:0;;;;;;:13;:24;;;;;:67;15767:114;15904:4;;-1:-1:-1;;;;;15894:14:0;;;15904:4;;15894:14;:39;;;;;15921:12;;15912:6;:21;15894:39;15891:83;;;-1:-1:-1;;;;;15935:24:0;;;;;;:13;:24;;;;;15970:1;15935:37;;15891:83;16000:4;;-1:-1:-1;;;;;16000:4:0;;;15987:17;;;;15984:58;;-1:-1:-1;;;;;;;16006:21:0;16038:1;16006:21;;;:13;:21;;;;;:34;15670:379::o;20578:197::-;20670:41;20685:6;20693:9;20704:6;20670:14;:41::i;:::-;20667:101;;;20713:29;20728:13;;20713:14;:29::i;:::-;20764:1;20744:9;:22;20578:197;;;:::o;20783:160::-;-1:-1:-1;;;;;20889:19:0;;20864:4;20889:19;;;:11;:19;;;;;;;;20888:20;:47;;;;-1:-1:-1;;;;;;;20913:22:0;;;;;:11;:22;;;;;;;;20912:23;;20783:160;-1:-1:-1;20783:160:0:o;21227:1101::-;21313:7;21369:1;21336:30;21348:6;21356:9;21336:11;:30::i;:::-;:34;:47;;;;-1:-1:-1;21375:8:0;;;;21374:9;21336:47;21333:973;;;21395:17;21415:59;21443:30;21455:6;21463:9;21443:11;:30::i;:::-;21426:11;;21415:23;;:6;;:10;:23::i;:59::-;21530:4;21512:24;;;;:9;:24;;;;;;21395:79;;-1:-1:-1;21512:39:0;;21395:79;21512:28;:39::i;:::-;21503:4;21485:24;;;;:9;:24;;;;;;;:66;;;;21567:42;;-1:-1:-1;;;;;21567:42:0;;;;;;;21599:9;160:25:1;;148:2;133:18;;14:177;21567:42:0;;;;;;;;21647:1;21623:13;;:26;:77;;;;;21670:30;21682:6;21690:9;21670:11;:30::i;:::-;21653:13;;:47;;21623:77;21620:287;;;21735:66;21757:42;21785:13;;21757:23;21768:11;;21757:6;:10;;:23;;;;:::i;:42::-;21735:16;;;:20;:66::i;:::-;21716:16;:85;21889:13;;21872:11;;21837:68;;21861:42;;:23;;:6;;:10;:23::i;:42::-;21837:18;;;:22;:68::i;:::-;21816:18;:89;21620:287;21938:1;21920:7;;:20;:65;;;;;21955:30;21967:6;21975:9;21955:11;:30::i;:::-;21944:7;;:41;;21920:65;21917:163;;;22001:77;22019:4;7515:42;22041:36;22069:7;;22041:23;22052:11;;22041:6;:10;;:23;;;;:::i;:36::-;22001:9;:77::i;:::-;22112:1;22093:8;;:21;:67;;;;;22130:30;22142:6;22150:9;22130:11;:30::i;:::-;22118:8;;:42;;22093:67;22090:176;;;22209:14;;22254:8;;22237:11;;22176:88;;22194:4;;-1:-1:-1;;;;;22209:14:0;;;;22226:37;;22254:8;22226:23;;:6;;:10;:23::i;22176:88::-;22283:21;:6;22294:9;22283:10;:21::i;:::-;22276:28;;;;;21333:973;-1:-1:-1;22314:6:0;21227:1101;-1:-1:-1;;21227:1101:0:o;256:82::-;314:7;331:5;335:1;331;:5;:::i;22671:1158::-;22753:19;;;;22750:64;;;22810:1;22774:25;:38;22750:64;-1:-1:-1;;;;;22827:17:0;;22862:1;22827:17;;;:6;:17;;;;;:24;:37;22824:73;;22866:29;22885:9;22866:18;:29::i;:::-;-1:-1:-1;;;;;22910:14:0;;22942:1;22910:14;;;:6;:14;;;;;:21;:34;;;;:55;;-1:-1:-1;22961:4:0;;-1:-1:-1;;;;;22948:17:0;;;22961:4;;22948:17;;22910:55;22907:88;;;22967:26;22986:6;22967:18;:26::i;:::-;23021:4;;-1:-1:-1;;;;;23008:17:0;;;23021:4;;23008:17;:55;;;;-1:-1:-1;;;;;;23029:14:0;;23061:1;23029:14;;;:6;:14;;;;;:21;:34;;23008:55;23005:126;;;23083:46;23103:25;23121:6;23103:17;:25::i;:::-;23083:15;;;:19;:46::i;:::-;23065:15;:64;23005:126;-1:-1:-1;;;;;23145:24:0;;;;;;:16;:24;;;;;;;;23141:67;;23171:35;23180:6;23188:17;23198:6;23188:9;:17::i;23171:35::-;-1:-1:-1;;;;;23222:27:0;;;;;;:16;:27;;;;;;;;23218:76;;23251:41;23260:9;23271:20;23281:9;23271;:20::i;23251:41::-;-1:-1:-1;;;;;23308:27:0;;;;;;:16;:27;;;;;;;;23307:28;:46;;;;-1:-1:-1;23349:4:0;;-1:-1:-1;;;;;23339:14:0;;;23349:4;;23339:14;23307:46;:88;;;;-1:-1:-1;;;;;;23357:24:0;;;;;;:13;:24;;;;;;23393:1;-1:-1:-1;23357:38:0;23307:88;23304:180;;;-1:-1:-1;;;;;23456:24:0;;;;;;:13;:24;;;;;;23411:71;;23420:9;;23431:50;;:20;23420:9;23431;:20::i;23411:71::-;23543:15;23497:42;23518:20;;23497:16;;:20;;:42;;;;:::i;:::-;:61;;:79;;;;-1:-1:-1;23562:14:0;;-1:-1:-1;;;23562:14:0;;;;23497:79;:126;;;;;23621:1;23594:16;;:29;23497:126;:139;;;;-1:-1:-1;23628:8:0;;;;23627:9;23497:139;:161;;;;-1:-1:-1;23640:18:0;;-1:-1:-1;;;23640:18:0;;;;23497:161;23494:205;;;23674:23;:21;:23::i;:::-;23709:29;23728:9;;23709:18;:29::i;:::-;-1:-1:-1;;;;;23752:17:0;;23787:1;23752:17;;;:6;:17;;;;;:24;:37;23749:73;;23791:29;23810:9;23791:18;:29::i;11048:255::-;-1:-1:-1;;;;;11178:17:0;;11141:4;11178:17;;;:9;:17;;;;;;:29;;11200:6;11178:21;:29::i;:::-;-1:-1:-1;;;;;11158:17:0;;;;;;;:9;:17;;;;;;:49;;;;11241:20;;;;;;;:32;;11266:6;11241:24;:32::i;:::-;-1:-1:-1;;;;;11218:20:0;;;;;;:9;:20;;;;;:55;-1:-1:-1;11291:4:0;11048:255;;;;;:::o;26171:270::-;26248:14;;:26;;26267:6;26248:18;:26::i;:::-;26231:14;:43;26375:11;;26327:31;;26305:83;;26327:60;;:43;;26363:6;26327:35;:43::i;:60::-;26305:17;;;:21;:83::i;:::-;26285:17;:103;26399:25;:34;26171:270::o;30257:288::-;30373:12;30386:19;;:21;;30406:1;;30386:21;:::i;:::-;30373:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30338:31:0;;;;;:18;:31;;;;;;;;30325:12;:45;;30373:35;;;;;30325:12;:45;;;;;;:::i;:::-;;;;;;;;;;;;;:83;;-1:-1:-1;;;;;;30325:83:0;-1:-1:-1;;;;;30325:83:0;;;;;;30477:31;;;;;:18;:31;;;;;;;;30438:12;30451:19;;30477:31;;:18;30325:45;30451:21;;-1:-1:-1;;30451:21:0;:::i;:::-;30438:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30438:35:0;30419:55;;;;;;;;;;;;:89;30519:12;:18;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;30519:18:0;;;;;-1:-1:-1;;;;;;30519:18:0;;;;;;-1:-1:-1;30257:288:0:o;20159:411::-;20257:4;20274:13;20300:14;;20290:6;:24;;20274:40;;20325:19;20373:13;;20347:22;:20;:22::i;:::-;20405:8;;20347:39;-1:-1:-1;20347:39:0;;-1:-1:-1;20405:8:0;;20404:9;:24;;;;-1:-1:-1;20417:11:0;;-1:-1:-1;;;20417:11:0;;;;20404:24;:42;;;;-1:-1:-1;20432:14:0;;-1:-1:-1;;;20432:14:0;;;;20404:42;:54;;;;;20450:8;20404:54;:78;;;;-1:-1:-1;;;;;;20463:19:0;;;;;;:11;:19;;;;;;;;20462:20;20404:78;:113;;;;-1:-1:-1;20513:4:0;;-1:-1:-1;;;;;20500:17:0;;;20513:4;;20500:17;20404:113;:140;;;;;20534:10;;20521:9;;:23;;20404:140;:158;;;;;20548:14;20404:158;20397:165;20159:411;-1:-1:-1;;;;;;20159:411:0:o;17998:1343::-;6077:8;:15;;-1:-1:-1;;6077:15:0;6088:4;6077:15;;;;;;18092:8:::1;::::0;6077;;18092:22:::1;::::0;18112:1:::1;::::0;18092:15:::1;::::0;:8;:12:::1;:15::i;:22::-;18128:8;::::0;18069:45;;-1:-1:-1;18125:135:0::1;;18167:91;18256:1;18167:84;18249:1;18167:77;18229:14;;18167:57;18216:7;;18167:44;18198:12;;18167;;:16;;:44;;;;:::i;:91::-;18152:106;;18125:135;18270:32;18305:42;18334:12;18305:24;18316:12;;18305:6;:10;;:24;;;;:::i;:42::-;18270:77:::0;-1:-1:-1;18358:14:0::1;18375:36;:6:::0;18270:77;18375:10:::1;:36::i;:::-;18358:53:::0;-1:-1:-1;18447:21:0::1;18479:24;18358:53:::0;18479:16:::1;:24::i;:::-;18514:20;18537:41;:21;18563:14:::0;18537:25:::1;:41::i;:::-;18514:64;;18589:19;18610:48;18627:30;18644:12;;18627;:16;;:30;;;;:::i;:::-;18610:12:::0;;:16:::1;:48::i;:::-;18589:69;;18669:29;18701;18717:12;;18701:11;:15;;:29;;;;:::i;:::-;18669:61:::0;-1:-1:-1;18744:34:0;;18741:137:::1;;18856:18;::::0;18780:95:::1;::::0;18807:24;;18833:21;;-1:-1:-1;;;;;18856:18:0::1;18780:12;:95::i;:::-;18935:7;::::0;18888:21:::1;::::0;18912:31:::1;::::0;:18:::1;:11:::0;18928:1:::1;18912:15;:18::i;:31::-;18888:55:::0;-1:-1:-1;18957:17:0;;18954:73:::1;;18984:16;::::0;18976:49:::1;::::0;-1:-1:-1;;;;;18984:16:0;;::::1;::::0;18976:49;::::1;;;::::0;19011:13;;18984:16:::1;18976:49:::0;18984:16;18976:49;19011:13;18984:16;18976:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18954:73;19086:12;::::0;19037:23:::1;::::0;19063:36:::1;::::0;:18:::1;:11:::0;19079:1:::1;19063:15;:18::i;:36::-;19037:62:::0;-1:-1:-1;19113:19:0;;19110:79:::1;;19142:18;::::0;19134:53:::1;::::0;-1:-1:-1;;;;;19142:18:0;;::::1;::::0;19134:53;::::1;;;::::0;19171:15;;19142:18:::1;19134:53:::0;19142:18;19134:53;19171:15;19142:18;19134:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;19110:79;19222:21;19257:25:::0;;19254:80:::1;;19292:16;::::0;19284:48:::1;::::0;-1:-1:-1;;;;;19292:16:0;;::::1;::::0;19284:48;::::1;;;::::0;19319:12;;19292:16:::1;19284:48:::0;19292:16;19284:48;19319:12;19292:16;19284:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;19254:80;-1:-1:-1::0;;6097:8:0;:16;;-1:-1:-1;;6097:16:0;;;-1:-1:-1;;;;;;;;;17998:1343:0:o;20951:268::-;21066:4;;21030:7;;-1:-1:-1;;;;;21053:17:0;;;21066:4;;21053:17;:41;;;;;21092:1;21074:7;;:20;21053:41;21050:62;;;-1:-1:-1;21103:7:0;;21096:14;;21050:62;21135:4;;-1:-1:-1;;;;;21125:14:0;;;21135:4;;21125:14;:39;;;;;21162:1;21143:8;;:21;21125:39;21122:61;;;-1:-1:-1;21173:8:0;;21166:15;;21122:61;-1:-1:-1;21200:11:0;;20951:268;;;;:::o;19717:434::-;19807:16;;;19821:1;19807:16;;;;;;;;19783:21;;19807:16;;;;;;;;;;-1:-1:-1;19807:16:0;19783:40;;19852:4;19834;19839:1;19834:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19834:23:0;;;:7;;;;;;;;;;:23;;;;19878:6;;:13;;;-1:-1:-1;;;19878:13:0;;;;:6;;;;;:11;;:13;;;;;19834:7;;19878:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19868:4;19873:1;19868:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19868:23:0;;;:7;;;;;;;;;:23;19934:6;;19902:53;;19919:4;;19934:6;19943:11;19902:8;:53::i;:::-;19966:6;;:177;;-1:-1:-1;;;19966:177:0;;-1:-1:-1;;;;;19966:6:0;;;;:57;;:177;;20038:11;;19966:6;;20080:4;;20107;;20127:15;;19966:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19349:360;19480:6;;19448:53;;19465:4;;-1:-1:-1;;;;;19480:6:0;19489:11;19448:8;:53::i;:::-;19512:6;;:189;;-1:-1:-1;;;19512:189:0;;19575:4;19512:189;;;17317:34:1;17367:18;;;17360:34;;;19512:6:0;17410:18:1;;;17403:34;;;17453:18;;;17446:34;-1:-1:-1;;;;;17517:15:1;;;17496:19;;;17489:44;19685:15:0;17549:19:1;;;17542:35;19512:6:0;;;;:22;;19542:9;;17251:19:1;;19512:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:180::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;-1:-1:-1;1548:23:1;;1397:180;-1:-1:-1;1397:180:1:o;1582:799::-;1722:6;1730;1738;1746;1754;1762;1770;1778;1786;1794;1847:3;1835:9;1826:7;1822:23;1818:33;1815:53;;;1864:1;1861;1854:12;1815:53;-1:-1:-1;;1887:23:1;;;1957:2;1942:18;;1929:32;;-1:-1:-1;2008:2:1;1993:18;;1980:32;;2059:2;2044:18;;2031:32;;-1:-1:-1;2110:3:1;2095:19;;2082:33;;-1:-1:-1;2162:3:1;2147:19;;2134:33;;-1:-1:-1;2214:3:1;2199:19;;2186:33;;-1:-1:-1;2266:3:1;2251:19;;2238:33;;-1:-1:-1;2318:3:1;2303:19;;2290:33;;-1:-1:-1;2370:3:1;2355:19;2342:33;;-1:-1:-1;1582:799:1;-1:-1:-1;1582:799:1:o;3107:456::-;3184:6;3192;3200;3253:2;3241:9;3232:7;3228:23;3224:32;3221:52;;;3269:1;3266;3259:12;3221:52;3308:9;3295:23;3327:31;3352:5;3327:31;:::i;:::-;3377:5;-1:-1:-1;3434:2:1;3419:18;;3406:32;3447:33;3406:32;3447:33;:::i;:::-;3107:456;;3499:7;;-1:-1:-1;;;3553:2:1;3538:18;;;;3525:32;;3107:456::o;3568:247::-;3627:6;3680:2;3668:9;3659:7;3655:23;3651:32;3648:52;;;3696:1;3693;3686:12;3648:52;3735:9;3722:23;3754:31;3779:5;3754:31;:::i;4009:118::-;4095:5;4088:13;4081:21;4074:5;4071:32;4061:60;;4117:1;4114;4107:12;4132:382;4197:6;4205;4258:2;4246:9;4237:7;4233:23;4229:32;4226:52;;;4274:1;4271;4264:12;4226:52;4313:9;4300:23;4332:31;4357:5;4332:31;:::i;:::-;4382:5;-1:-1:-1;4439:2:1;4424:18;;4411:32;4452:30;4411:32;4452:30;:::i;:::-;4501:7;4491:17;;;4132:382;;;;;:::o;4519:248::-;4587:6;4595;4648:2;4636:9;4627:7;4623:23;4619:32;4616:52;;;4664:1;4661;4654:12;4616:52;-1:-1:-1;;4687:23:1;;;4757:2;4742:18;;;4729:32;;-1:-1:-1;4519:248:1:o;4980:241::-;5036:6;5089:2;5077:9;5068:7;5064:23;5060:32;5057:52;;;5105:1;5102;5095:12;5057:52;5144:9;5131:23;5163:28;5185:5;5163:28;:::i;5226:813::-;5321:6;5329;5337;5345;5353;5406:3;5394:9;5385:7;5381:23;5377:33;5374:53;;;5423:1;5420;5413:12;5374:53;5462:9;5449:23;5481:31;5506:5;5481:31;:::i;:::-;5531:5;-1:-1:-1;5588:2:1;5573:18;;5560:32;5601:33;5560:32;5601:33;:::i;:::-;5653:7;-1:-1:-1;5712:2:1;5697:18;;5684:32;5725:33;5684:32;5725:33;:::i;:::-;5777:7;-1:-1:-1;5836:2:1;5821:18;;5808:32;5849:33;5808:32;5849:33;:::i;:::-;5901:7;-1:-1:-1;5960:3:1;5945:19;;5932:33;5974;5932;5974;:::i;:::-;6026:7;6016:17;;;5226:813;;;;;;;;:::o;6368:388::-;6436:6;6444;6497:2;6485:9;6476:7;6472:23;6468:32;6465:52;;;6513:1;6510;6503:12;6465:52;6552:9;6539:23;6571:31;6596:5;6571:31;:::i;:::-;6621:5;-1:-1:-1;6678:2:1;6663:18;;6650:32;6691:33;6650:32;6691:33;:::i;6761:316::-;6838:6;6846;6854;6907:2;6895:9;6886:7;6882:23;6878:32;6875:52;;;6923:1;6920;6913:12;6875:52;-1:-1:-1;;6946:23:1;;;7016:2;7001:18;;6988:32;;-1:-1:-1;7067:2:1;7052:18;;;7039:32;;6761:316;-1:-1:-1;6761:316:1:o;7082:315::-;7150:6;7158;7211:2;7199:9;7190:7;7186:23;7182:32;7179:52;;;7227:1;7224;7217:12;7179:52;7263:9;7250:23;7240:33;;7323:2;7312:9;7308:18;7295:32;7336:31;7361:5;7336:31;:::i;7662:329::-;7864:2;7846:21;;;7903:1;7883:18;;;7876:29;-1:-1:-1;;;7936:2:1;7921:18;;7914:36;7982:2;7967:18;;7662:329::o;9524:184::-;9594:6;9647:2;9635:9;9626:7;9622:23;9618:32;9615:52;;;9663:1;9660;9653:12;9615:52;-1:-1:-1;9686:16:1;;9524:184;-1:-1:-1;9524:184:1:o;9713:245::-;9780:6;9833:2;9821:9;9812:7;9808:23;9804:32;9801:52;;;9849:1;9846;9839:12;9801:52;9881:9;9875:16;9900:28;9922:5;9900:28;:::i;11296:127::-;11357:10;11352:3;11348:20;11345:1;11338:31;11388:4;11385:1;11378:15;11412:4;11409:1;11402:15;11428:128;11495:9;;;11516:11;;;11513:37;;;11530:18;;:::i;11561:168::-;11634:9;;;11665;;11682:15;;;11676:22;;11662:37;11652:71;;11703:18;;:::i;11734:217::-;11774:1;11800;11790:132;;11844:10;11839:3;11835:20;11832:1;11825:31;11879:4;11876:1;11869:15;11907:4;11904:1;11897:15;11790:132;-1:-1:-1;11936:9:1;;11734:217::o;12372:127::-;12433:10;12428:3;12424:20;12421:1;12414:31;12464:4;12461:1;12454:15;12488:4;12485:1;12478:15;12504:135;12543:3;12564:17;;;12561:43;;12584:18;;:::i;:::-;-1:-1:-1;12631:1:1;12620:13;;12504:135::o;15341:125::-;15406:9;;;15427:10;;;15424:36;;;15440:18;;:::i;15471:127::-;15532:10;15527:3;15523:20;15520:1;15513:31;15563:4;15560:1;15553:15;15587:4;15584:1;15577:15;15735:251;15805:6;15858:2;15846:9;15837:7;15833:23;15829:32;15826:52;;;15874:1;15871;15864:12;15826:52;15906:9;15900:16;15925:31;15950:5;15925:31;:::i;15991:980::-;16253:4;16301:3;16290:9;16286:19;16332:6;16321:9;16314:25;16358:2;16396:6;16391:2;16380:9;16376:18;16369:34;16439:3;16434:2;16423:9;16419:18;16412:31;16463:6;16498;16492:13;16529:6;16521;16514:22;16567:3;16556:9;16552:19;16545:26;;16606:2;16598:6;16594:15;16580:29;;16627:1;16637:195;16651:6;16648:1;16645:13;16637:195;;;16716:13;;-1:-1:-1;;;;;16712:39:1;16700:52;;16807:15;;;;16772:12;;;;16748:1;16666:9;16637:195;;;-1:-1:-1;;;;;;;16888:32:1;;;;16883:2;16868:18;;16861:60;-1:-1:-1;;;16952:3:1;16937:19;16930:35;16849:3;15991:980;-1:-1:-1;;;15991:980:1:o;17588:306::-;17676:6;17684;17692;17745:2;17733:9;17724:7;17720:23;17716:32;17713:52;;;17761:1;17758;17751:12;17713:52;17790:9;17784:16;17774:26;;17840:2;17829:9;17825:18;17819:25;17809:35;;17884:2;17873:9;17869:18;17863:25;17853:35;;17588:306;;;;;:::o

Swarm Source

ipfs://2a502d07ee857a601fcd87eefb5e6acb014ed1e37b75aeaf99042f5342a1f1a1

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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