MATIC Price: $0.648452 (+5.09%)
Gas: 40 GWei
 

Overview

MATIC Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo1.147732017756025745 MATIC

MATIC Value

$0.74 (@ $0.65/MATIC)

Token Holdings

Multichain Info

Transaction Hash
Method
Block
From
To
Value
Increase Allowan...580373712024-06-11 16:59:4422 hrs ago1718125184IN
Sphere Finance: Old SPHERE Token
0 MATIC0.0019799742.29453449
Approve580353652024-06-11 15:48:3323 hrs ago1718120913IN
Sphere Finance: Old SPHERE Token
0 MATIC0.00637402264.0439332
Approve580044622024-06-10 21:01:1142 hrs ago1718053271IN
Sphere Finance: Old SPHERE Token
0 MATIC0.000724230.00000002
Approve578929442024-06-08 0:12:344 days ago1717805554IN
Sphere Finance: Old SPHERE Token
0 MATIC0.0014771232
Approve576035472024-05-31 11:46:0312 days ago1717155963IN
Sphere Finance: Old SPHERE Token
0 MATIC0.000903634.56793633
Approve576034762024-05-31 11:43:0912 days ago1717155789IN
Sphere Finance: Old SPHERE Token
0 MATIC0.000784230.00000015
Approve576034642024-05-31 11:42:4312 days ago1717155763IN
Sphere Finance: Old SPHERE Token
0 MATIC0.000724230.00000016
Approve576034582024-05-31 11:42:3112 days ago1717155751IN
Sphere Finance: Old SPHERE Token
0 MATIC0.000724230.00000017
Approve575715272024-05-30 15:39:1312 days ago1717083553IN
Sphere Finance: Old SPHERE Token
0 MATIC0.0007346530.43305388
Approve574991242024-05-28 18:49:2014 days ago1716922160IN
Sphere Finance: Old SPHERE Token
0 MATIC0.000724230.00000095
Approve574371262024-05-27 4:14:3716 days ago1716783277IN
Sphere Finance: Old SPHERE Token
0 MATIC0.003621150.0000378
Approve574371062024-05-27 4:13:4116 days ago1716783221IN
Sphere Finance: Old SPHERE Token
0 MATIC0.003621150.00004218
Approve574233482024-05-26 19:41:0916 days ago1716752469IN
Sphere Finance: Old SPHERE Token
0 MATIC0.000784230.00000003
Approve574233292024-05-26 19:40:2916 days ago1716752429IN
Sphere Finance: Old SPHERE Token
0 MATIC0.000724230.00000002
Approve572638142024-05-22 15:34:3820 days ago1716392078IN
Sphere Finance: Old SPHERE Token
0 MATIC0.0023797198.57962871
Approve571929712024-05-20 18:14:0922 days ago1716228849IN
Sphere Finance: Old SPHERE Token
0 MATIC0.0007242430.00177598
Approve571280202024-05-19 1:16:0224 days ago1716081362IN
Sphere Finance: Old SPHERE Token
0 MATIC0.000724230.00000007
Approve571280152024-05-19 1:15:5024 days ago1716081350IN
Sphere Finance: Old SPHERE Token
0 MATIC0.000724230.00000006
Approve570768352024-05-17 16:27:3325 days ago1715963253IN
Sphere Finance: Old SPHERE Token
0 MATIC0.002077245
Approve570766772024-05-17 16:21:5725 days ago1715962917IN
Sphere Finance: Old SPHERE Token
0 MATIC0.0018652840.40902664
Approve570637932024-05-17 8:11:5226 days ago1715933512IN
Sphere Finance: Old SPHERE Token
0 MATIC0.0009252638.32923908
Approve570140332024-05-15 23:46:1427 days ago1715816774IN
Sphere Finance: Old SPHERE Token
0 MATIC0.000724230.00000002
Approve569560682024-05-14 10:47:5829 days ago1715683678IN
Sphere Finance: Old SPHERE Token
0 MATIC0.0013845230.00178436
Approve569265952024-05-13 16:34:2129 days ago1715618061IN
Sphere Finance: Old SPHERE Token
0 MATIC0.0009173238
Approve569104212024-05-13 6:38:5030 days ago1715582330IN
Sphere Finance: Old SPHERE Token
0 MATIC0.000724230.00000749
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To Value
305203732022-07-09 10:48:35704 days ago1657363715
Sphere Finance: Old SPHERE Token
5,956.541851 MATIC
276855942022-04-28 17:48:50775 days ago1651168130
Sphere Finance: Old SPHERE Token
3,545.59575781 MATIC
276855942022-04-28 17:48:50775 days ago1651168130
Sphere Finance: Old SPHERE Token
3,545.59575781 MATIC
276821792022-04-28 15:39:46775 days ago1651160386
Sphere Finance: Old SPHERE Token
3,785.9324227 MATIC
276821792022-04-28 15:39:46775 days ago1651160386
Sphere Finance: Old SPHERE Token
3,785.9324227 MATIC
276782962022-04-28 13:20:38776 days ago1651152038
Sphere Finance: Old SPHERE Token
3,808.59520489 MATIC
276782962022-04-28 13:20:38776 days ago1651152038
Sphere Finance: Old SPHERE Token
3,808.59520489 MATIC
276750392022-04-28 11:23:14776 days ago1651144994
Sphere Finance: Old SPHERE Token
3,876.13633617 MATIC
276750392022-04-28 11:23:14776 days ago1651144994
Sphere Finance: Old SPHERE Token
3,876.13633617 MATIC
276750122022-04-28 11:22:20776 days ago1651144940
Sphere Finance: Old SPHERE Token
3,876.13633617 MATIC
276750122022-04-28 11:22:20776 days ago1651144940
Sphere Finance: Old SPHERE Token
3,876.13633617 MATIC
276750012022-04-28 11:21:54776 days ago1651144914
Sphere Finance: Old SPHERE Token
3,876.13633617 MATIC
276750012022-04-28 11:21:54776 days ago1651144914
Sphere Finance: Old SPHERE Token
3,876.13633617 MATIC
276690682022-04-28 7:51:09776 days ago1651132269
Sphere Finance: Old SPHERE Token
4,088.39493265 MATIC
276690682022-04-28 7:51:09776 days ago1651132269
Sphere Finance: Old SPHERE Token
4,088.39493265 MATIC
276637022022-04-28 4:44:15776 days ago1651121055
Sphere Finance: Old SPHERE Token
3,920.80899903 MATIC
276637022022-04-28 4:44:15776 days ago1651121055
Sphere Finance: Old SPHERE Token
3,920.80899903 MATIC
276588722022-04-28 1:49:03776 days ago1651110543
Sphere Finance: Old SPHERE Token
4,340.57289881 MATIC
276588722022-04-28 1:49:03776 days ago1651110543
Sphere Finance: Old SPHERE Token
4,340.57289881 MATIC
276588692022-04-28 1:48:57776 days ago1651110537
Sphere Finance: Old SPHERE Token
4,340.57289881 MATIC
276588692022-04-28 1:48:57776 days ago1651110537
Sphere Finance: Old SPHERE Token
4,340.57289881 MATIC
276573592022-04-28 0:49:33776 days ago1651106973
Sphere Finance: Old SPHERE Token
4,134.00265486 MATIC
276573592022-04-28 0:49:33776 days ago1651106973
Sphere Finance: Old SPHERE Token
4,134.00265486 MATIC
276573582022-04-28 0:49:27776 days ago1651106967
Sphere Finance: Old SPHERE Token
4,134.00265486 MATIC
276573582022-04-28 0:49:27776 days ago1651106967
Sphere Finance: Old SPHERE Token
4,134.00265486 MATIC
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SphereToken

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-03-15
*/

/**
 *Submitted for verification at polygonscan.com on 2022-03-14
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.7.4;

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a), 'mul overflow');
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);

        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a),
            'sub overflow');
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a),
            'add overflow');
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256,
            'abs overflow');
        return a < 0 ? -a : a;
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender)
    external
    view
    returns (uint256);

    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, 'SafeMath: addition overflow');

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, 'SafeMath: subtraction overflow');
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, 'SafeMath: division by zero');
    }

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

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0,
            'parameter 2 can not be 0');
        return a % b;
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }
}

interface InterfaceLP {
    function sync() external;
}

library Roles {
    struct Role {
        mapping(address => bool) bearer;
    }

    function add(Role storage role, address account) internal {
        require(!has(role, account), 'Roles: account already has role');
        role.bearer[account] = true;
    }

    function remove(Role storage role, address account) internal {
        require(has(role, account), 'Roles: account does not have role');
        role.bearer[account] = false;
    }

    function has(Role storage role, address account)
    internal
    view
    returns (bool)
    {
        require(account != address(0), 'Roles: account is the zero address');
        return role.bearer[account];
    }
}

abstract contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(
        string memory _tokenName,
        string memory _tokenSymbol,
        uint8 _tokenDecimals
    ) {
        _name = _tokenName;
        _symbol = _tokenSymbol;
        _decimals = _tokenDecimals;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

interface IDEXRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
    external
    returns (
        uint256 amountA,
        uint256 amountB,
        uint256 liquidity
    );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
    external
    payable
    returns (
        uint256 amountToken,
        uint256 amountETH,
        uint256 liquidity
    );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

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

interface IDEXFactory {
    function createPair(address tokenA, address tokenB)
    external
    returns (address pair);
}

interface IBalanceOfSphere {
    function balanceOfSphere(address _address) external view returns (uint256);
}

interface IPublicBalance {
    function balanceOf(address _address) external view returns (uint256);
}

interface IDexPair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
    external
    view
    returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
    external
    view
    returns (
        uint112 reserve0,
        uint112 reserve1,
        uint32 blockTimestampLast
    );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
    external
    returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

contract Ownable {
    address private _owner;

    event OwnershipRenounced(address indexed previousOwner);
    event TransferOwnerShip(address indexed previousOwner);

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        _owner = msg.sender;
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(msg.sender == _owner, 'Not owner');
        _;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(_owner);
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        emit TransferOwnerShip(newOwner);
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0),
            'Owner can not be 0');
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract SphereToken is ERC20Detailed, Ownable {
    using SafeMath for uint256;
    using SafeMathInt for int256;

    bool public initialDistributionFinished = false;
    bool public swapEnabled = true;
    bool public autoRebase = false;
    bool public feesOnNormalTransfers = false;
    bool public isLiquidityInMatic = true;
    bool public isBurnEnabled = false;
    bool public isTaxBracketEnabled = false;
    bool public isStillLaunchPeriod = true;
    bool public taxNonMarketMaker = false;
    bool public isPartyOver = false;

    uint256 public rebaseIndex = 1 * 10**18;
    uint256 public oneEEighteen = 1 * 10**18;
    uint256 public secondsPerDay = 86400;
    uint256 public rewardYield = 3943560072416;
    uint256 public rewardYieldDenominator = 10000000000000000;
    uint256 public maxSellTransactionAmount = 2500000 * 10**18;
    uint256 public maxBuyTransactionAmount = 2500000 * 10**18;

    uint256 public rebaseFrequency = 1800;
    uint256 public nextRebase = block.timestamp + 31536000;
    uint256 public rebaseEpoch = 0;
    uint256 public taxBracketMultiplier = 5;
    uint256 public nonMarketMakerFee = 5;

    mapping(address => bool) _isFeeExempt;
    address[] public _markerPairs;
    uint256 public _markerPairCount;
    address[] public subContracts;
    address[] public sphereGamesContracts;
    address[] public partyArray;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) public subContractCheck;
    mapping(address => bool) public sphereGamesCheck;
    mapping(address => bool) public partyArrayCheck;

    uint256 public constant MAX_FEE_RATE = 25;
    uint256 public constant MAX_TAX_BRACKET_FEE_RATE = 5;
    uint256 public constant MAX_PARTY_LIST_DIVISOR_RATE = 75;
    uint256 public constant NON_MARKET_MAKER_FEE_RATE = 5;
    uint256 public constant MIN_SELL_AMOUNT_RATE = 1500000 * 10**18;
    uint256 public constant MIN_BUY_AMOUNT_RATE = 1500000 * 10**18;
    uint256 private constant MAX_REBASE_FREQUENCY = 1800;
    uint256 public constant feeDenominator = 100;

    uint256 private constant DECIMALS = 18;
    uint256 private constant MAX_UINT256 = ~uint256(0);
    uint256 private constant INITIAL_FRAGMENTS_SUPPLY =
    5 * 10**9 * 10**DECIMALS;
    uint256 private constant TOTAL_GONS =
    MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY);
    uint256 private constant MAX_SUPPLY = ~uint128(0);

    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;

    address public liquidityReceiver =
    0x1a2Ce410A034424B784D4b228f167A061B94CFf4;
    address public treasuryReceiver =
    0x20D61737f972EEcB0aF5f0a85ab358Cd083Dd56a;
    address public riskFreeValueReceiver =
    0x826b8d2d523E7af40888754E3De64348C00B99f4;
    address public stableCoin = 0xa3Fa99A148fA48D14Ed51d610c367C61876997F1;

    IDEXRouter public router;
    IDEXFactory public factory;
    IDexPair public iDexPair;
    address public pair;

    uint256 private constant maxBracketTax = 10; // max bracket is holding 10%

    uint256 public liquidityFee = 5;
    uint256 public treasuryFee = 3;
    uint256 public burnFee = 0;
    uint256 public sellBurnFee = 0;
    uint256 public buyFeeRFV = 5;
    uint256 public sellFeeTreasuryAdded = 2;
    uint256 public sellFeeRFVAdded = 5;
    uint256 public sellLaunchFeeAdded = 10;
    uint256 public sellLaunchFeeSubtracted = 0;
    uint256 public partyListDivisor = 50;
    uint256 public totalBuyFee = liquidityFee.add(treasuryFee).add(buyFeeRFV);
    uint256 public totalSellFee =
    totalBuyFee.add(sellFeeTreasuryAdded).add(sellFeeRFVAdded).add(
        sellLaunchFeeAdded
    );
    uint256 targetLiquidity = 50;
    uint256 targetLiquidityDenominator = 100;

    bool inSwap;

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier validRecipient(address to) {
        require(to != address(0x0),
            'recipient is not valid');
        _;
    }

    uint256 private _totalSupply;
    uint256 private _gonsPerFragment;
    uint256 private gonSwapThreshold = (TOTAL_GONS * 10) / 10000;

    mapping(address => uint256) private _gonBalances;
    mapping(address => mapping(address => uint256)) private _allowedFragments;

    constructor() ERC20Detailed('Sphere Finance', 'SPHERE', uint8(DECIMALS)) {
        router = IDEXRouter(0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff);
        pair = IDEXFactory(router.factory()).createPair(
            address(this),
            router.WETH()
        );

        address pairStableCoin = IDEXFactory(router.factory()).createPair(
            address(this),
            stableCoin
        );

        _allowedFragments[address(this)][address(router)] = uint256(-1);
        _allowedFragments[address(this)][pair] = uint256(-1);
        _allowedFragments[address(this)][address(this)] = uint256(-1);
        _allowedFragments[address(this)][pairStableCoin] = uint256(-1);

        setAutomatedMarketMakerPair(pair, true);
        setAutomatedMarketMakerPair(pairStableCoin, true);

        _totalSupply = INITIAL_FRAGMENTS_SUPPLY;
        _gonBalances[msg.sender] = TOTAL_GONS;
        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);

        _isFeeExempt[treasuryReceiver] = true;
        _isFeeExempt[riskFreeValueReceiver] = true;
        _isFeeExempt[address(this)] = true;
        _isFeeExempt[msg.sender] = true;

        IERC20(stableCoin).approve(address(router), uint256(-1));
        IERC20(stableCoin).approve(address(pairStableCoin), uint256(-1));
        IERC20(stableCoin).approve(address(this), uint256(-1));

        emit Transfer(address(0x0), msg.sender, _totalSupply);
    }

    receive() external payable {}

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

    function allowance(address owner_, address spender)
    external
    view
    override
    returns (uint256)
    {
        return _allowedFragments[owner_][spender];
    }

    function balanceOf(address who) public view override returns (uint256) {
        return _gonBalances[who].div(_gonsPerFragment);
    }

    function markerPairAddress(uint256 value) public view returns (address) {
        return _markerPairs[value];
    }

    function currentIndex() public view returns (uint256) {
        return rebaseIndex;
    }

    function checkFeeExempt(address _addr) external view returns (bool) {
        return _isFeeExempt[_addr];
    }

    function checkSwapThreshold() external view returns (uint256) {
        return gonSwapThreshold.div(_gonsPerFragment);
    }

    function shouldRebase() internal view returns (bool) {
        return nextRebase <= block.timestamp;
    }

    function shouldBurn() internal view returns (bool) {
        return isBurnEnabled;
    }

    function isStillLaunchPhase() internal view returns (bool) {
        return isStillLaunchPeriod;
    }

    function isTaxBracket() internal view returns (bool) {
        return isTaxBracketEnabled;
    }

    function shouldTakeFee(address from, address to)
    internal
    view
    returns (bool)
    {
        if (_isFeeExempt[from] || _isFeeExempt[to]) {
            return false;
        } else if (feesOnNormalTransfers) {
            return true;
        } else {
            return (automatedMarketMakerPairs[from] ||
            automatedMarketMakerPairs[to]);
        }
    }

    function shouldSwapBack() internal view returns (bool) {
        return
        !automatedMarketMakerPairs[msg.sender] &&
        !inSwap &&
        swapEnabled &&
        totalBuyFee.add(totalSellFee) > 0 &&
        _gonBalances[address(this)] >= gonSwapThreshold;
    }

    function getGonBalances() public view returns (bool thresholdReturn, uint256 gonBalanceReturn ) {
        thresholdReturn  = _gonBalances[address(this)] >= gonSwapThreshold;
        gonBalanceReturn = _gonBalances[address(this)];

    }

    function getCirculatingSupply() public view returns (uint256) {
        return
        (TOTAL_GONS.sub(_gonBalances[DEAD]).sub(_gonBalances[ZERO])).div(
            _gonsPerFragment
        );
    }

    function getCurrentTimestamp() public view returns (uint256) {
        return block.timestamp;
    }

    function getLiquidityBacking(uint256 accuracy)
    public
    view
    returns (uint256)
    {
        uint256 liquidityBalance = 0;
        for (uint256 i = 0; i < _markerPairs.length; i++) {
            liquidityBalance.add(balanceOf(_markerPairs[i]).div(10**9));
        }

        return
        accuracy.mul(liquidityBalance.mul(2)).div(
            getCirculatingSupply().div(10**9)
        );
    }

    function getUserTotalOnDifferentContractsSphere(address sender)
    public
    view
    returns (uint256)
    {
        uint256 userTotal = balanceOf(sender);
        uint256 balanceOfAllSubContracts;
        uint256 balanceOfAllSphereGamesContracts;

        //calculate the balance of different contracts on different wallets and sum them
        balanceOfAllSubContracts = getBalanceOfAllSubContracts(sender);
        balanceOfAllSphereGamesContracts = getBalanceOfAllSphereGamesContracts(
            sender
        );

        userTotal.add(balanceOfAllSubContracts).add(
            balanceOfAllSphereGamesContracts
        );
        return userTotal;
    }

    //this function iterates through all other contracts that are being part of the Sphere ecosystem
    //we add a new contract like wSPHERE or sSPHERE, whales could technically abuse this
    //by swapping to these contracts and leave the dynamic tax bracket
    function getBalanceOfAllSubContracts(address sender)
    public
    view
    returns (uint256)
    {
        uint256 userTotal;

        for (uint256 i = 0; i < subContracts.length; i++) {
            userTotal += IBalanceOfSphere(subContracts[i]).balanceOfSphere(
                sender
            );
        }

        return userTotal;
    }

    //get S.P.H.E.R.E. Games Tickets Count For Tax
    function getBalanceOfAllSphereGamesContracts(address sender)
    public
    view
    returns (uint256)
    {
        uint256 sphereGamesTotal;

        for (uint256 i = 0; i < sphereGamesContracts.length; i++) {
            sphereGamesTotal += IPublicBalance(sphereGamesContracts[i])
            .balanceOf(sender);
        }

        return sphereGamesTotal;
    }

    function getTokensInLPCirculation() public view returns (uint256) {
        uint112 reserve0;
        uint112 reserve1;
        uint32 blockTimestampLast;
        address token0;
        address token1;
        IDexPair iDexFeeCalculator;
        uint256 LPTotal;

        for (uint256 i = 0; i < _markerPairs.length; i++) {
            iDexFeeCalculator = IDexPair(_markerPairs[i]);
            (reserve0, reserve1, blockTimestampLast) = iDexFeeCalculator
            .getReserves();

            token0 = iDexFeeCalculator.token0();
            token1 = iDexFeeCalculator.token1();

            if (token0 == address(this)) {
                LPTotal += reserve0;
                //first one
            } else if (token1 == address(this)) {
                LPTotal += reserve1;
            }
        }

        return LPTotal;
    }

    function getOneTokenInLPCirculation(uint256 _id)
    public
    view
    returns (
        uint256 LPTotal,
        uint112 reserve0,
        uint112 reserve1
    )
    {
        uint32 blockTimestampLast;
        address token0;
        address token1;
        IDexPair iDexFeeCalculator;

        iDexFeeCalculator = IDexPair(_markerPairs[_id]);
        (reserve0, reserve1, blockTimestampLast) = iDexFeeCalculator
        .getReserves();

        token0 = iDexFeeCalculator.token0();
        token1 = iDexFeeCalculator.token1();

        if (token0 == address(this)) {
            LPTotal += reserve0;
        } else if (token1 == address(this)) {
            LPTotal += reserve1;
        }

        return (LPTotal, reserve0, reserve1);
    }

    function getCurrentTaxBracket(address _address)
    public
    view
    returns (uint256)
    {
        //gets the total balance of the user
        uint256 userTotal = getUserTotalOnDifferentContractsSphere(_address);

        //calculate the percentage
        uint256 totalCap = userTotal.mul(100).div(getTokensInLPCirculation());

        //calculate what is smaller, and use that
        uint256 _bracket = SafeMath.min(totalCap, maxBracketTax);

        //multiply the bracket with the multiplier
        _bracket *= taxBracketMultiplier;

        return _bracket;
    }

    function isOverLiquified(uint256 target, uint256 accuracy)
    public
    view
    returns (bool)
    {
        return getLiquidityBacking(accuracy) > target;
    }

    function manualSync() public {
        for (uint256 i = 0; i < _markerPairs.length; i++) {
            IDexPair(_markerPairs[i]).sync();
        }
    }

    function transfer(address to, uint256 value)
    external
    override
    validRecipient(to)
    returns (bool)
    {
        _transferFrom(msg.sender, to, value);
        return true;
    }

    function _basicTransfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        uint256 gonAmount = amount.mul(_gonsPerFragment);
        _gonBalances[from] = _gonBalances[from].sub(gonAmount);
        _gonBalances[to] = _gonBalances[to].add(gonAmount);

        emit Transfer(from, to, amount);

        return true;
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        bool excludedAccount = _isFeeExempt[sender] || _isFeeExempt[recipient];

        require(
            initialDistributionFinished || excludedAccount,
            'Trading not started'
        );

        if (automatedMarketMakerPairs[recipient] && !excludedAccount) {
            require(amount <= maxSellTransactionAmount, 'Error amount');
        }

        if (automatedMarketMakerPairs[sender] && !excludedAccount) {
            require(amount <= maxBuyTransactionAmount, 'Buy Amount Exceeded!');
        }

        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }

        uint256 gonAmount = amount.mul(_gonsPerFragment);

        if (shouldSwapBack()) {
            swapBack();
        }

        _gonBalances[sender] = _gonBalances[sender].sub(gonAmount);

        uint256 gonAmountReceived = shouldTakeFee(sender, recipient)
        ? takeFee(sender, recipient, gonAmount)
        : gonAmount;
        _gonBalances[recipient] = _gonBalances[recipient].add(
            gonAmountReceived
        );

        emit Transfer(
            sender,
            recipient,
            gonAmountReceived.div(_gonsPerFragment)
        );

        if (shouldRebase() && autoRebase) {
            _rebase();
        }

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external override validRecipient(to) returns (bool) {
        if (_allowedFragments[from][msg.sender] != uint256(-1)) {
            _allowedFragments[from][msg.sender] = _allowedFragments[from][
            msg.sender
            ].sub(value, 'Insufficient Allowance');
        }

        _transferFrom(from, to, value);
        return true;
    }

    function _swapAndLiquify(uint256 contractTokenBalance) private {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        if (isLiquidityInMatic) {
            uint256 initialBalance = address(this).balance;

            _swapTokensForMATIC(half, address(this));

            uint256 newBalance = address(this).balance.sub(initialBalance);

            _addLiquidity(otherHalf, newBalance);

            emit SwapAndLiquify(half, newBalance, otherHalf);
        } else {
            uint256 initialBalance = IERC20(stableCoin).balanceOf(
                address(this)
            );

            _swapTokensForStableCoin(half, address(this));

            uint256 newBalance = IERC20(stableCoin)
            .balanceOf(address(this))
            .sub(initialBalance);

            _addLiquidityStableCoin(otherHalf, newBalance);

            emit SwapAndLiquifyStableCoin(half, newBalance, otherHalf);
        }
    }

    function _addLiquidity(uint256 tokenAmount, uint256 MATICAmount) private {
        router.addLiquidityETH{value: MATICAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityReceiver,
            block.timestamp
        );
    }

    function _addLiquidityStableCoin(
        uint256 tokenAmount,
        uint256 StableCoinAmount
    ) private {
        router.addLiquidity(
            address(this),
            stableCoin,
            tokenAmount,
            StableCoinAmount,
            0,
            0,
            liquidityReceiver,
            block.timestamp
        );
    }

    function _swapTokensForMATIC(uint256 tokenAmount, address receiver)
    private
    {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            receiver,
            block.timestamp
        );
    }

    function _swapTokensForStableCoin(uint256 tokenAmount, address receiver)
    private
    {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = router.WETH();
        path[2] = stableCoin;

        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            receiver,
            block.timestamp
        );
    }

    function swapBack() internal swapping {
        uint256 realTotalFee = totalBuyFee.add(totalSellFee);

        uint256 dynamicLiquidityFee = isOverLiquified(
            targetLiquidity,
            targetLiquidityDenominator
        )
        ? 0
        : liquidityFee;
        uint256 contractTokenBalance = _gonBalances[address(this)].div(
            _gonsPerFragment
        );

        uint256 amountToLiquify = contractTokenBalance
        .mul(dynamicLiquidityFee.mul(2))
        .div(realTotalFee);

        uint256 amountToRFV = contractTokenBalance
        .mul(buyFeeRFV.mul(2).add(sellFeeRFVAdded))
        .div(realTotalFee);

        uint256 amountToTreasury = contractTokenBalance
        .sub(amountToLiquify)
        .sub(amountToRFV);

        if (amountToLiquify > 0) {
            _swapAndLiquify(amountToLiquify);
        }

        if (amountToRFV > 0) {
            _swapTokensForStableCoin(amountToRFV, riskFreeValueReceiver);
        }

        if (amountToTreasury > 0) {
            _swapTokensForMATIC(amountToTreasury, treasuryReceiver);
        }

        emit SwapBack(
            contractTokenBalance,
            amountToLiquify,
            amountToRFV,
            amountToTreasury
        );
    }

    function manualSwapBack() external onlyOwner {
        uint256 realTotalFee = totalBuyFee.add(totalSellFee);

        uint256 dynamicLiquidityFee = isOverLiquified(
            targetLiquidity,
            targetLiquidityDenominator
        )
        ? 0
        : liquidityFee;
        uint256 contractTokenBalance = _gonBalances[address(this)].div(
            _gonsPerFragment
        );

        uint256 amountToLiquify = contractTokenBalance
        .mul(dynamicLiquidityFee.mul(2))
        .div(realTotalFee);

        uint256 amountToRFV = contractTokenBalance
        .mul(buyFeeRFV.mul(2).add(sellFeeRFVAdded))
        .div(realTotalFee);

        uint256 amountToTreasury = contractTokenBalance
        .sub(amountToLiquify)
        .sub(amountToRFV);

        if (amountToLiquify > 0) {
            _swapAndLiquify(amountToLiquify);
        }

        if (amountToRFV > 0) {
            _swapTokensForStableCoin(amountToRFV, riskFreeValueReceiver);
        }

        if (amountToTreasury > 0) {
            _swapTokensForMATIC(amountToTreasury, treasuryReceiver);
        }

        emit SwapBack(
            contractTokenBalance,
            amountToLiquify,
            amountToRFV,
            amountToTreasury
        );
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 gonAmount
    ) internal returns (uint256) {
        uint256 _realFee = totalBuyFee;
        uint256 _burnFee = burnFee;

        //check if it's a sell fee embedded
        if (automatedMarketMakerPairs[recipient]) {
            _realFee = totalSellFee;
            _burnFee = _burnFee.add(sellBurnFee);
        }

        //calculate Tax
        if (isTaxBracketEnabled) {
            _realFee += getCurrentTaxBracket(sender);
        }

        //trying to join our party? Become the party maker :)
        if ((partyArrayCheck[sender] || partyArrayCheck[recipient])) {
            if (_realFee < 49) _realFee = 49;
        }

        uint256 feeAmount = gonAmount.mul(_realFee).div(feeDenominator);

        //make sure Burn is enabled and burnFee is > 0 (integer 0 equals to false)
        if (shouldBurn() && _burnFee > 0) {
            // burn the amount given % every transaction
            tokenBurner(
                (gonAmount.div(_gonsPerFragment)).mul(_burnFee).div(100)
            );
        }

        _gonBalances[address(this)] = _gonBalances[address(this)].add(
            feeAmount
        );
        emit Transfer(sender, address(this), feeAmount.div(_gonsPerFragment));

        return gonAmount.sub(feeAmount);
    }

    function tokenBurner(uint256 _tokenAmount) private {
        _transferFrom(address(this), address(DEAD), _tokenAmount);
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
    external
    returns (bool)
    {
        uint256 oldValue = _allowedFragments[msg.sender][spender];
        if (subtractedValue >= oldValue) {
            _allowedFragments[msg.sender][spender] = 0;
        } else {
            _allowedFragments[msg.sender][spender] = oldValue.sub(
                subtractedValue
            );
        }
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
    external
    returns (bool)
    {
        _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][
        spender
        ].add(addedValue);
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

    function approve(address spender, uint256 value)
    external
    override
    returns (bool)
    {

        _allowedFragments[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function _rebase() private {
        if (!inSwap) {
            uint256 circulatingSupply = getCirculatingSupply();
            int256 supplyDelta = int256(
                circulatingSupply.mul(rewardYield).div(rewardYieldDenominator)
            );

            coreRebase(supplyDelta);
        }
    }

    function coreRebase(int256 supplyDelta) private returns (uint256) {
        uint256 epoch = block.timestamp;

        if (supplyDelta == 0) {
            emit LogRebase(epoch, _totalSupply);
            return _totalSupply;
        }

        if (supplyDelta < 0) {
            _totalSupply = _totalSupply.sub(uint256(-supplyDelta));
        } else {
            _totalSupply = _totalSupply.add(uint256(supplyDelta));
        }

        if (_totalSupply > MAX_SUPPLY) {
            _totalSupply = MAX_SUPPLY;
        }

        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);

        updateRebaseIndex(epoch);

        if (isStillLaunchPhase()) {
            updateLaunchPeriodFee();
        }

        emit LogRebase(epoch, _totalSupply);
        return _totalSupply;
    }

    function manualRebase() external onlyOwner {
        require(!inSwap, 'Try again');
        require(nextRebase <= block.timestamp, 'Not in time');

        uint256 circulatingSupply = getCirculatingSupply();
        int256 supplyDelta = int256(
            circulatingSupply.mul(rewardYield).div(rewardYieldDenominator)
        );

        emit LogManualRebase(circulatingSupply, block.timestamp);
        coreRebase(supplyDelta);
    }

    function updateRebaseIndex(uint256 epoch) private {
        // update the next Rebase time
        nextRebase = epoch.add(rebaseFrequency);

        //update Index similarly to OHM, so a wrapped token created is possible (wSPHERE)

        //formula: rebaseIndex * (1 * 10 ** 18 + ((1 * 10 ** 18) + rewardYield / rewardYieldDenominator)) / 1 * 10 ** 18
        rebaseIndex = rebaseIndex
        .mul(
            oneEEighteen.add(
                oneEEighteen.mul(rewardYield).div(rewardYieldDenominator)
            )
        )
        .div(oneEEighteen);

        //simply show how often we rebased since inception (how many epochs)
        rebaseEpoch += 1;
    }

    //create a dynamic decrease of sell launch fees within first 5 days (immutable)
    function updateLaunchPeriodFee() private {
        //thanks to integer, if rebaseEpoch is > rebase frequency (30 minutes), sellLaunchFeeSubtracted goes to 1 (48 rebases everyday)
        //the calculation should always round down to the lowest fee deduction every day
        //this calculates how often the rebase frequency is (maximum of 48) - every 30 minutes, so 24 hours / rebase frequency
        uint256 _sellLaunchFeeSubtracted = rebaseEpoch.div(
            secondsPerDay.div(rebaseFrequency)
        );

        //multiply by 2 to remove 5% everyday
        sellLaunchFeeSubtracted = _sellLaunchFeeSubtracted.mul(5);

        //if the sellLaunchFeeSubtracted epochs have exceeded or are same as the sellLaunchFeeAdded, set the sellLaunchFeeAdded to 0 (false)
        if (sellLaunchFeeAdded <= sellLaunchFeeSubtracted) {
            isStillLaunchPeriod = false;
            sellLaunchFeeSubtracted = sellLaunchFeeAdded;
        }

        //set the sellFee
        setSellFee(
            totalBuyFee
            .add(sellFeeTreasuryAdded)
            .add(sellFeeRFVAdded)
            .add(sellBurnFee)
            .add(sellLaunchFeeAdded - sellLaunchFeeSubtracted)
        );
    }

    //add new subcontracts to the protocol so they can be calculated
    function addSubContracts(address _subContract, bool _value)
    public
    onlyOwner
    {
        require(subContractCheck[_subContract] != _value, 'Value already set');

        subContractCheck[_subContract] = _value;

        if (_value) {
            subContracts.push(_subContract);
        } else {
            for (uint256 i = 0; i < subContracts.length; i++) {
                if (subContracts[i] == _subContract) {
                    subContracts[i] = subContracts[subContracts.length - 1];
                    subContracts.pop();
                    break;
                }
            }
        }

        emit SetSubContracts(_subContract, _value);
    }

    //Add S.P.H.E.R.E. Games Contracts
    function addSphereGamesAddies(address _sphereGamesAddy, bool _value)
    private
    {
        require(
            sphereGamesCheck[_sphereGamesAddy] != _value,
            'Value already set'
        );

        sphereGamesCheck[_sphereGamesAddy] = _value;

        if (_value) {
            sphereGamesContracts.push(_sphereGamesAddy);
        } else {
            require(sphereGamesContracts.length > 1, 'Required 1 pair');
            for (uint256 i = 0; i < sphereGamesContracts.length; i++) {
                if (sphereGamesContracts[i] == _sphereGamesAddy) {
                    sphereGamesContracts[i] = sphereGamesContracts[
                    sphereGamesContracts.length - 1
                    ];
                    sphereGamesContracts.pop();
                    break;
                }
            }
        }

        emit SetSphereGamesAddresses(_sphereGamesAddy, _value);
    }

    function addPartyAddies(address _partyAddy, bool _value) public onlyOwner {
        require(partyArrayCheck[_partyAddy] != _value, 'Value already set');

        partyArrayCheck[_partyAddy] = _value;

        if (_value) {
            partyArray.push(_partyAddy);
        } else {
            for (uint256 i = 0; i < partyArray.length; i++) {
                if (partyArray[i] == _partyAddy) {
                    partyArray[i] = partyArray[partyArray.length - 1];
                    partyArray.pop();
                    break;
                }
            }
        }

        emit SetPartyAddresses(_partyAddy, _value);
    }

    function setAutomatedMarketMakerPair(address _pair, bool _value)
    public
    onlyOwner
    {
        require(
            automatedMarketMakerPairs[_pair] != _value,
            'Value already set'
        );

        automatedMarketMakerPairs[_pair] = _value;

        if (_value) {
            _markerPairs.push(_pair);
            _markerPairCount++;
        } else {
            require(_markerPairs.length > 1, 'Required 1 pair');
            for (uint256 i = 0; i < _markerPairs.length; i++) {
                if (_markerPairs[i] == _pair) {
                    _markerPairs[i] = _markerPairs[_markerPairs.length - 1];
                    _markerPairs.pop();
                    break;
                }
            }
        }

        emit SetAutomatedMarketMakerPair(_pair, _value);
    }

    function setInitialDistributionFinished(bool _value) external onlyOwner {
        require(initialDistributionFinished != _value, 'Not changed');
        initialDistributionFinished = _value;

        emit SetInitialDistribution(_value);
    }

    function setPartyListDivisor(uint256 _value) external onlyOwner {
        require(partyListDivisor != _value, 'Not changed');
        require(
            _value <= MAX_PARTY_LIST_DIVISOR_RATE,
            'max party divisor amount'
        );
        partyListDivisor = _value;

        emit SetPartyListDivisor(_value);
    }

    function setFeeExempt(address _addr, bool _value) external onlyOwner {
        require(_isFeeExempt[_addr] != _value, 'Not changed');
        _isFeeExempt[_addr] = _value;

        emit SetFeeExempt(_addr, _value);
    }

    function setTaxNonMarketMaker(bool _value) external onlyOwner {
        require(taxNonMarketMaker != _value, 'Not changed');
        taxNonMarketMaker = _value;
        emit TaxNonMarketMakerSet(_value, block.timestamp);
    }

    function setTargetLiquidity(uint256 target, uint256 accuracy)
    external
    onlyOwner
    {
        targetLiquidity = target;
        targetLiquidityDenominator = accuracy;
        emit SetTargetLiquidity(target, accuracy);
    }

    function setSwapBackSettings(
        bool _enabled,
        uint256 _num,
        uint256 _denom
    ) external onlyOwner {
        swapEnabled = _enabled;
        gonSwapThreshold = TOTAL_GONS.mul(_num).div(_denom);
        emit SetSwapBackSettings(_enabled, _num, _denom);
    }

    function setFeeReceivers(
        address _liquidityReceiver,
        address _treasuryReceiver,
        address _riskFreeValueReceiver
    ) external onlyOwner {
        require(_liquidityReceiver != address(0), '_liquidityReceiver not set');
        require(_treasuryReceiver != address(0), '_treasuryReceiver not set');
        require(
            _riskFreeValueReceiver != address(0),
            '_riskFreeValueReceiver not set'
        );
        liquidityReceiver = _liquidityReceiver;
        treasuryReceiver = _treasuryReceiver;
        riskFreeValueReceiver = _riskFreeValueReceiver;
        emit SetFeeReceivers(_liquidityReceiver, _treasuryReceiver, _riskFreeValueReceiver);
    }

    function setFees(
        uint256 _liquidityFee,
        uint256 _riskFreeValue,
        uint256 _treasuryFee,
        uint256 _burnFee,
        uint256 _sellFeeTreasuryAdded,
        uint256 _sellFeeRFVAdded,
        uint256 _sellBurnFee
    ) external onlyOwner {
        //check if total value does not exceed 20%
        //PoC that Libero's contract is exploitable:
        //https://mumbai.polygonscan.com/address/0x6fc034596feb97a522346d7a42e705b075632d0c#readContract
        //Libero Contract: https://bscscan.com/address/0x0dfcb45eae071b3b846e220560bbcdd958414d78#readContract
        uint256 maxTotalBuyFee = _liquidityFee.add(_treasuryFee).add(
            _riskFreeValue
        );

        uint256 maxTotalSellFee = maxTotalBuyFee.add(_sellFeeTreasuryAdded).add(
            _sellFeeRFVAdded
        );

        require(
            _liquidityFee <= MAX_FEE_RATE &&
            _riskFreeValue <= MAX_FEE_RATE &&
            _treasuryFee <= MAX_FEE_RATE &&
            _sellFeeTreasuryAdded <= MAX_FEE_RATE &&
            _sellFeeRFVAdded <= MAX_FEE_RATE,
            'set fee higher than max fee allowing'
        );

        require(maxTotalBuyFee < MAX_FEE_RATE, 'exceeded max buy fees');

        require(maxTotalSellFee < MAX_FEE_RATE, 'exceeded max sell fees');

        liquidityFee = _liquidityFee;
        buyFeeRFV = _riskFreeValue;
        treasuryFee = _treasuryFee;
        sellFeeTreasuryAdded = _sellFeeTreasuryAdded;
        sellFeeRFVAdded = _sellFeeRFVAdded;
        burnFee = _burnFee;
        sellBurnFee = _sellBurnFee;
        totalBuyFee = liquidityFee.add(treasuryFee).add(buyFeeRFV);

        setSellFee(
            totalBuyFee.add(sellFeeTreasuryAdded).add(sellFeeRFVAdded).add(
                sellLaunchFeeAdded - sellLaunchFeeSubtracted
            )
        );

        emit SetFees(_liquidityFee, _riskFreeValue, _treasuryFee, _sellFeeTreasuryAdded, _sellFeeRFVAdded, _burnFee, sellBurnFee, totalBuyFee);
    }

    function setSellFee(uint256 _sellFee) internal {
        totalSellFee = _sellFee;
    }

    function setStablecoin(address _stableCoin) external onlyOwner {
        require(_stableCoin != address(0x0), 'can not use 0x0 address');
        stableCoin = _stableCoin;
        emit SetStablecoin(_stableCoin);
    }

    function setPartyIsOver() external onlyOwner {
        isPartyOver = true;
        emit SetPartyIsOver(true, block.timestamp);
    }

    function setTaxBracketFeeMultiplier(uint256 _taxBracketFeeMultiplier)
    external
    onlyOwner
    {
        require(
            _taxBracketFeeMultiplier <= MAX_TAX_BRACKET_FEE_RATE,
            'max bracket fee exceeded'
        );
        taxBracketMultiplier = _taxBracketFeeMultiplier;
        emit SetTaxBracketFeeMultiplier(_taxBracketFeeMultiplier, block.timestamp);
    }

    function clearStuckBalance(address _receiver) external onlyOwner {
        require(_receiver != address(0x0), 'invalid address');
        uint256 balance = address(this).balance;
        payable(_receiver).transfer(balance);
        emit ClearStuckBalance(balance, _receiver, block.timestamp);

    }

    function rescueToken(address tokenAddress, uint256 tokens)
    external
    onlyOwner
    returns (bool success)
    {
        emit RescueToken(tokenAddress, msg.sender, tokens, block.timestamp);
        return ERC20Detailed(tokenAddress).transfer(msg.sender, tokens);
    }

    function setAutoRebase(bool _autoRebase) external onlyOwner {
        require(autoRebase != _autoRebase, 'Not changed');
        autoRebase = _autoRebase;
        emit SetAutoRebase(_autoRebase, block.timestamp);
    }

    //enable burn fee if necessary
    function setBurnFee(bool _isBurnEnabled) external onlyOwner {
        require(
            isBurnEnabled != _isBurnEnabled,
            "Burn function hasn't changed"
        );
        isBurnEnabled = _isBurnEnabled;
        emit SetBurnFee(_isBurnEnabled, block.timestamp);
    }

    //disable launch fee so calculations are not necessarily made
    function setLaunchPeriod(bool _isStillLaunchPeriod) external onlyOwner {
        require(
            isStillLaunchPeriod != _isStillLaunchPeriod,
            "Launch function hasn't changed"
        );
        require(isStillLaunchPeriod, 'launch period already over');
        isStillLaunchPeriod = _isStillLaunchPeriod;
        emit SetLaunchPeriod(_isStillLaunchPeriod, block.timestamp);
    }

    //enable burn fee if necessary
    function setTaxBracket(bool _isTaxBracketEnabled) external onlyOwner {
        require(
            isTaxBracketEnabled != _isTaxBracketEnabled,
            "Tax Bracket function hasn't changed"
        );
        isTaxBracketEnabled = _isTaxBracketEnabled;
        emit SetTaxBracket(_isTaxBracketEnabled, block.timestamp);
    }

    function setRebaseFrequency(uint256 _rebaseFrequency) external onlyOwner {
        require(_rebaseFrequency <= MAX_REBASE_FREQUENCY, 'Too high');
        rebaseFrequency = _rebaseFrequency;
        emit SetRebaseFrequency(_rebaseFrequency, block.timestamp);
    }

    function setRewardYield(
        uint256 _rewardYield,
        uint256 _rewardYieldDenominator
    ) external onlyOwner {
        rewardYield = _rewardYield;
        rewardYieldDenominator = _rewardYieldDenominator;
        emit SetRewardYield(_rewardYield, _rewardYieldDenominator, block.timestamp);
    }

    function setFeesOnNormalTransfers(bool _enabled) external onlyOwner {
        require(feesOnNormalTransfers != _enabled, 'Not changed');
        feesOnNormalTransfers = _enabled;
        emit SetFeesOnNormalTransfers(_enabled, block.timestamp);
    }

    function setIsLiquidityInMATIC(bool _value) external onlyOwner {
        require(isLiquidityInMatic != _value, 'Not changed');
        isLiquidityInMatic = _value;
        emit SetIsLiquidityInMATIC(_value, block.timestamp);
    }

    function setNextRebase(uint256 _nextRebase) external onlyOwner {
        require(
            _nextRebase > block.timestamp,
            'Next rebase can not be in the past'
        );
        nextRebase = _nextRebase;
        emit SetNextRebase(_nextRebase, block.timestamp);
    }

    function setMaxSellTransaction(uint256 _maxTxn) external onlyOwner {
        require(_maxTxn > MIN_SELL_AMOUNT_RATE, 'Below minimum sell amount');
        maxSellTransactionAmount = _maxTxn;
        emit SetMaxSellTransaction(_maxTxn, block.timestamp);
    }

    function setMaxBuyTransactionAmount(uint256 _maxTxn) external onlyOwner {
        require(_maxTxn > MIN_BUY_AMOUNT_RATE, 'Below minimum buy amount');
        maxBuyTransactionAmount = _maxTxn;
        emit SetMaxBuyTransactionAmount(_maxTxn, block.timestamp);
    }

    event SwapBack(
        uint256 contractTokenBalance,
        uint256 amountToLiquify,
        uint256 amountToRFV,
        uint256 amountToTreasury
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 MATICReceived,
        uint256 tokensIntoLiqudity
    );

    event SwapAndLiquifyStableCoin(
        uint256 tokensSwapped,
        uint256 StableCoinReceived,
        uint256 tokensIntoLiqudity
    );


    event SetFeeReceivers(
        address indexed _liquidityReceiver,
        address indexed _treasuryReceiver,
        address indexed _riskFreeValueReceiver
    );

    event SetStablecoin(
        address indexed stableCoin
    );

    event SetPartyIsOver(
        bool indexed state,
        uint256 indexed time
    );

    event SetTaxBracketFeeMultiplier(
        uint256 indexed state,
        uint256 indexed time
    );

    event ClearStuckBalance(
        uint256 indexed amount,
        address indexed receiver,
        uint256 indexed time
    );

    event RescueToken(
        address indexed tokenAddress,
        address indexed sender,
        uint256 indexed tokens,
        uint256 time
    );

    event SetAutoRebase(
        bool indexed value,
        uint256 indexed time
    );

    event SetLaunchPeriod(
        bool indexed value,
        uint256 indexed time
    );

    event SetTaxBracket(
        bool indexed value,
        uint256 indexed time
    );

    event SetRebaseFrequency(
        uint256 indexed frequency,
        uint256 indexed time
    );

    event SetRewardYield(
        uint256 indexed rewardYield,
        uint256 indexed frequency,
        uint256 indexed time
    );

    event SetFeesOnNormalTransfers(
        bool indexed value,
        uint256 indexed time
    );

    event SetIsLiquidityInMATIC(
        bool indexed value,
        uint256 indexed time
    );

    event SetNextRebase(
        uint256 indexed value,
        uint256 indexed time
    );

    event SetMaxSellTransaction(
        uint256 indexed value,
        uint256 indexed time
    );

    event SetMaxBuyTransactionAmount(
        uint256 indexed value,
        uint256 indexed time
    );

    event SetBurnFee(
        bool indexed value,
        uint256 indexed time
    );

    event SetSwapBackSettings(
        bool indexed enabled,
        uint256 indexed num,
        uint256 indexed denum
    );

    event MainLPAddressSet(address mainLP, uint256 time);

    event TaxNonMarketMakerSet(bool value, uint256 time);
    event SetTargetLiquidity(uint256 indexed target, uint256 indexed accuracy);


    event Main(bool enabled, uint256 time);

    event SetFees(
        uint256 indexed _liquidityFee,
        uint256 indexed _riskFreeValue,
        uint256 indexed _treasuryFee,
        uint256 _sellFeeTreasuryAdded,
        uint256 _sellFeeRFVAdded,
        uint256 _burnFee,
        uint256 sellBurnFee,
        uint256 totalBuyFee
    );

    event LogRebase(uint256 indexed epoch, uint256 totalSupply);
    event LogManualRebase(uint256 circulatingSupply, uint256 timeStamp);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SetInitialDistribution(bool indexed value);
    event SetPartyListDivisor(uint256 indexed value);
    event SetFeeExempt(address indexed addy, bool indexed value);
    event SetSubContracts(address indexed pair, bool indexed value);
    event SetPartyAddresses(address indexed pair, bool indexed value);
    event SetSphereGamesAddresses(address indexed pair, bool indexed value);
}

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":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ClearStuckBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"circulatingSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timeStamp","type":"uint256"}],"name":"LogManualRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"Main","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"mainLP","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"MainLPAddressSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"RescueToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetAutoRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetBurnFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addy","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetFeeExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_liquidityReceiver","type":"address"},{"indexed":true,"internalType":"address","name":"_treasuryReceiver","type":"address"},{"indexed":true,"internalType":"address","name":"_riskFreeValueReceiver","type":"address"}],"name":"SetFeeReceivers","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_riskFreeValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellFeeTreasuryAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellFeeRFVAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_burnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBuyFee","type":"uint256"}],"name":"SetFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetFeesOnNormalTransfers","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetInitialDistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetIsLiquidityInMATIC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetLaunchPeriod","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetMaxBuyTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetMaxSellTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetNextRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetPartyAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"state","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetPartyIsOver","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetPartyListDivisor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"frequency","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetRebaseFrequency","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"rewardYield","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"frequency","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetRewardYield","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetSphereGamesAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"stableCoin","type":"address"}],"name":"SetStablecoin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetSubContracts","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":true,"internalType":"uint256","name":"num","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"denum","type":"uint256"}],"name":"SetSwapBackSettings","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"target","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"SetTargetLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetTaxBracket","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"state","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetTaxBracketFeeMultiplier","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"MATICReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"StableCoinReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquifyStableCoin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"contractTokenBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToLiquify","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToRFV","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToTreasury","type":"uint256"}],"name":"SwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"value","type":"bool"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"TaxNonMarketMakerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"TransferOwnerShip","type":"event"},{"inputs":[],"name":"MAX_FEE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PARTY_LIST_DIVISOR_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TAX_BRACKET_FEE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_BUY_AMOUNT_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_SELL_AMOUNT_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NON_MARKET_MAKER_FEE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_markerPairCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_markerPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_partyAddy","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"addPartyAddies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_subContract","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"addSubContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeRFV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IDEXFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesOnNormalTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"getBalanceOfAllSphereGamesContracts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"getBalanceOfAllSubContracts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getCurrentTaxBracket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGonBalances","outputs":[{"internalType":"bool","name":"thresholdReturn","type":"bool"},{"internalType":"uint256","name":"gonBalanceReturn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getOneTokenInLPCirculation","outputs":[{"internalType":"uint256","name":"LPTotal","type":"uint256"},{"internalType":"uint112","name":"reserve0","type":"uint112"},{"internalType":"uint112","name":"reserve1","type":"uint112"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokensInLPCirculation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"getUserTotalOnDifferentContractsSphere","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"iDexPair","outputs":[{"internalType":"contract IDexPair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialDistributionFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquidityInMatic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPartyOver","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isStillLaunchPeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTaxBracketEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"markerPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonMarketMakerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oneEEighteen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"partyArray","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"partyArrayCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partyListDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardYieldDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"riskFreeValueReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondsPerDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeRFVAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeTreasuryAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLaunchFeeAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLaunchFeeSubtracted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_autoRebase","type":"bool"}],"name":"setAutoRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isBurnEnabled","type":"bool"}],"name":"setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityReceiver","type":"address"},{"internalType":"address","name":"_treasuryReceiver","type":"address"},{"internalType":"address","name":"_riskFreeValueReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_riskFreeValue","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_sellFeeTreasuryAdded","type":"uint256"},{"internalType":"uint256","name":"_sellFeeRFVAdded","type":"uint256"},{"internalType":"uint256","name":"_sellBurnFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnNormalTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setInitialDistributionFinished","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setIsLiquidityInMATIC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isStillLaunchPeriod","type":"bool"}],"name":"setLaunchPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxn","type":"uint256"}],"name":"setMaxBuyTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxn","type":"uint256"}],"name":"setMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nextRebase","type":"uint256"}],"name":"setNextRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPartyIsOver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setPartyListDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rebaseFrequency","type":"uint256"}],"name":"setRebaseFrequency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardYield","type":"uint256"},{"internalType":"uint256","name":"_rewardYieldDenominator","type":"uint256"}],"name":"setRewardYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stableCoin","type":"address"}],"name":"setStablecoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_num","type":"uint256"},{"internalType":"uint256","name":"_denom","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isTaxBracketEnabled","type":"bool"}],"name":"setTaxBracket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxBracketFeeMultiplier","type":"uint256"}],"name":"setTaxBracketFeeMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setTaxNonMarketMaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sphereGamesCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sphereGamesContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stableCoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"subContractCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"subContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxBracketMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxNonMarketMaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","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":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526002805461ffff60e81b1962ffffff60d01b1962ffffff60b81b1961ffff60a81b19909316600160b01b1792909216600160c81b1791909116600160e01b17168155670de0b6b3a764000060038181556004919091556201518060059081556503962e7f4ce0600655662386f26fc100006007556a02116545850052128000006008819055600955610708600a9081556301e133804201600b556000600c819055600d839055600e839055601980546001600160a01b0319908116731a2ce410a034424b784d4b228f167a061b94cff417909155601a805482167320d61737f972eecb0af5f0a85ab358cd083dd56a179055601b8054821673826b8d2d523e7af40888754e3de64348c00b99f4179055601c805490911673a3fa99a148fa48d14ed51d610c367c61876997f11790556021839055602284905560238190556024819055602583905560269490945560278290556028556029929092556032602a556200019b919062000187908290620048a362000814602090811b91909117901c565b6200081460201b620048a31790919060201c565b602b55620001ca6028546200018760275462000187602654602b546200081460201b620048a31790919060201c565b602c556032602d556064602e556127106b1239a002a3db32d57fffffff1904603255348015620001f957600080fd5b50604080518082018252600e81526d5370686572652046696e616e636560901b60208083019182528351808501909452600684526553504845524560d01b90840152815191929160129162000252916000919062000c19565b5081516200026890600190602085019062000c19565b506002805460ff191660ff9290921691909117610100600160a81b03191661010033021790555050601d805473a5e0829caced8ffdd4de3c43696c57f7d7a678ff6001600160a01b031990911617908190556040805163c45a015560e01b815290516001600160a01b039092169163c45a015591600480820192602092909190829003018186803b158015620002fd57600080fd5b505afa15801562000312573d6000803e3d6000fd5b505050506040513d60208110156200032957600080fd5b5051601d54604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693309391169163ad5c464891600480820192602092909190829003018186803b1580156200037c57600080fd5b505afa15801562000391573d6000803e3d6000fd5b505050506040513d6020811015620003a857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620003fb57600080fd5b505af115801562000410573d6000803e3d6000fd5b505050506040513d60208110156200042757600080fd5b5051602080546001600160a01b0319166001600160a01b03928316178155601d546040805163c45a015560e01b81529051600094929092169263c45a015592600480840193829003018186803b1580156200048157600080fd5b505afa15801562000496573d6000803e3d6000fd5b505050506040513d6020811015620004ad57600080fd5b5051601c54604080516364e329cb60e11b81523060048201526001600160a01b0392831660248201529051919092169163c9c653969160448083019260209291908290030181600087803b1580156200050557600080fd5b505af11580156200051a573d6000803e3d6000fd5b505050506040513d60208110156200053157600080fd5b5051306000818152603460209081526040808320601d546001600160a01b0390811685529083528184206000199081905583548216855282852081905594845281842085905580861684529220929092559054919250620005959116600162000876565b620005a281600162000876565b6b1027e72f1f1281308800000060309081553360009081526033602090815260409091206b01d290004395eb7bbfffffff19908190559154620005ef9291620048fd62000b28821b17901c565b603155601a546001600160a01b039081166000908152600f602090815260408083208054600160ff199182168117909255601b54861685528285208054821683179055308552828520805482168317905533855282852080549091169091179055601c54601d54825163095ea7b360e01b815290861660048201526000196024820152915194169363095ea7b393604480840194938390030190829087803b1580156200069b57600080fd5b505af1158015620006b0573d6000803e3d6000fd5b505050506040513d6020811015620006c757600080fd5b5050601c546040805163095ea7b360e01b81526001600160a01b03848116600483015260001960248301529151919092169163095ea7b39160448083019260209291908290030181600087803b1580156200072157600080fd5b505af115801562000736573d6000803e3d6000fd5b505050506040513d60208110156200074d57600080fd5b5050601c546040805163095ea7b360e01b8152306004820152600019602482015290516001600160a01b039092169163095ea7b3916044808201926020929091908290030181600087803b158015620007a557600080fd5b505af1158015620007ba573d6000803e3d6000fd5b505050506040513d6020811015620007d157600080fd5b5050603054604080519182525133916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35062000cc5565b6000828201838110156200086f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60025461010090046001600160a01b03163314620008c7576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b03821660009081526015602052604090205460ff161515811515141562000930576040805162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152601560205260409020805460ff19168215801591909117909155620009b95760108054600180820183556000929092527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b03851617905560118054909101905562000aec565b60105460011062000a03576040805162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015290519081900360640190fd5b60005b60105481101562000aea57826001600160a01b03166010828154811062000a2957fe5b6000918252602090912001546001600160a01b0316141562000ae15760108054600019810190811062000a5857fe5b600091825260209091200154601080546001600160a01b03909216918390811062000a7f57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601080548062000ab957fe5b600082815260209020810160001990810180546001600160a01b031916905501905562000aea565b60010162000a06565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60006200086f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000b7260201b60201c565b6000818362000c025760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000bc657818101518382015260200162000bac565b50505050905090810190601f16801562000bf45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000c0f57fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000c51576000855562000c9c565b82601f1062000c6c57805160ff191683800117855562000c9c565b8280016001018555821562000c9c579182015b8281111562000c9c57825182559160200191906001019062000c7f565b5062000caa92915062000cae565b5090565b5b8082111562000caa576000815560010162000caf565b615d4e8062000cd56000396000f3fe60806040526004361061060e5760003560e01c8063764d72bf1161031b578063b62496f5116101a7578063d7c01032116100ed578063f2fde38b1161009b578063f2fde38b14611560578063f3a54f2c14611593578063f477a2c5146115bf578063f5b01e15146115d4578063f6bbe516146115fe578063f887ea4014611628578063fce589d81461163d578063fcf232911461165257610615565b8063d7c01032146113f4578063da2e3bad14611439578063dd62ed3e14611487578063e088bfc0146114c2578063e15beb80146114f5578063e1d5584c14611521578063e77ef6981461154b57610615565b8063c45a015511610155578063c45a0155146112d8578063cc32d176146112ed578063d088935814611302578063d1fce2641461133a578063d38af8851461134f578063d439979014611382578063d51ed1c8146113b5578063d7832b11146113df57610615565b8063b62496f5146111dd578063b6d438f314611210578063b6e98ad61461123c578063b915db5a14611251578063bc7e68a31461127b578063bfce486e14611290578063c0da424c146112a557610615565b806395d89b411161026c578063a0c147221161021a578063a0c1472214610c47578063a3c4e7d3146110db578063a457c2d71461110e578063a8aa1b3114611147578063a9059cbb1461115c578063a9b38cb014611195578063ab428a2314610b14578063adb873bd146111c857610615565b806395d89b411461100d5780639763eec41461102257806398118cb414611037578063992642e51461104c5780639a7a23d6146110615780639ae7372d1461109c5780639d9241ec146110c657610615565b80638b8a214e116102c95780638b8a214e14610f3d5780638c755af414610f525780638da5cb5b14610f675780638dbb08ba14610f7c5780638ebfc79614610fa85780639079f93214610fe357806392f6576e14610ff857610615565b8063764d72bf14610e5957806377d9474314610e8c5780637ac8292714610eb65780637d4b501714610ecb5780638102c57014610ee057806386fe511d14610ef557806389375abf14610f2857610615565b80633c22e5161161049a5780635e1af682116103eb5780636aa217a1116103995780636aa217a114610d935780636c9230db14610da85780636d351d1a14610dbd5780636ddd171314610dd257806370a0823114610de7578063715018a614610e1a578063716cc28014610e2f578063753d02a114610e4457610615565b80635e1af68214610cda5780635fdd4ed514610cef57806361a9d1b114610d045780636380995314610d195780636542609514610d2e57806366eb378514610d6957806368348dc114610d7e57610615565b80634e8c0bf3116104485780634e8c0bf314610c3257806356af7d0614610c4757806357b535c014610c5c57806359b107b914610c715780635aa821a914610c865780635abe671114610c9b5780635c38ffe214610cb057610615565b80633c22e51614610b145780633c5c780014610b295780634527881e14610b6457806347e1b37214610b945780634cd9ddf214610ba95780634d666ad214610bd35780634e66160c14610bff57610615565b80631d0d78dd1161055f578063264d26dd1161050d578063264d26dd146109f957806326987b6014610a0e5780632b112e4914610a235780632e01803e14610a38578063313ce56714610a4d57806333f3d62814610a7857806335179d6b14610ab15780633950935114610adb57610615565b80631d0d78dd146108ab5780631dbbcf70146108d7578063201e7991146108ec578063202018cc1461091c5780632248e5391461094f57806323b872dd146109a1578063240cd448146109e457610615565b8063095ea7b3116105bc578063095ea7b3146107ad5780630af08314146107e65780631161ae39146107fb5780631276089b1461082b578063180b0d7e1461085757806318160ddd1461086c578063198b763e1461088157610615565b8063011bc9871461061a57806301b168271461064657806302259e9e1461067657806303c4bb531461069d57806306fdde03146106c957806307ebec271461075357806308b1fd8f1461077c57610615565b3661061557005b600080fd5b34801561062657600080fd5b506106446004803603602081101561063d57600080fd5b5035611667565b005b34801561065257600080fd5b506106446004803603604081101561066957600080fd5b5080359060200135611780565b34801561068257600080fd5b5061068b61180d565b60408051918252519081900360200190f35b3480156106a957600080fd5b50610644600480360360208110156106c057600080fd5b50351515611813565b3480156106d557600080fd5b506106de611910565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610718578181015183820152602001610700565b50505050905090810190601f1680156107455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561075f57600080fd5b506107686119a6565b604080519115158252519081900360200190f35b34801561078857600080fd5b506107916119b6565b604080516001600160a01b039092168252519081900360200190f35b3480156107b957600080fd5b50610768600480360360408110156107d057600080fd5b506001600160a01b0381351690602001356119c5565b3480156107f257600080fd5b5061068b611a1a565b34801561080757600080fd5b506107686004803603604081101561081e57600080fd5b5080359060200135611a20565b34801561083757600080fd5b506106446004803603602081101561084e57600080fd5b50351515611a34565b34801561086357600080fd5b5061068b611b21565b34801561087857600080fd5b5061068b611b26565b34801561088d57600080fd5b50610791600480360360208110156108a457600080fd5b5035611b2c565b3480156108b757600080fd5b50610644600480360360208110156108ce57600080fd5b50351515611b56565b3480156108e357600080fd5b5061068b611c42565b3480156108f857600080fd5b506106446004803603604081101561090f57600080fd5b5080359060200135611c48565b34801561092857600080fd5b5061068b6004803603602081101561093f57600080fd5b50356001600160a01b0316611cd3565b34801561095b57600080fd5b506109796004803603602081101561097257600080fd5b5035611d85565b604080519384526001600160701b039283166020850152911682820152519081900360600190f35b3480156109ad57600080fd5b50610768600480360360608110156109c457600080fd5b506001600160a01b03813581169160208101359091169060400135611f5e565b3480156109f057600080fd5b50610768612079565b348015610a0557600080fd5b50610791612089565b348015610a1a57600080fd5b5061068b612098565b348015610a2f57600080fd5b5061068b61209e565b348015610a4457600080fd5b5061068b612128565b348015610a5957600080fd5b50610a6261212e565b6040805160ff9092168252519081900360200190f35b348015610a8457600080fd5b5061076860048036036040811015610a9b57600080fd5b506001600160a01b038135169060200135612137565b348015610abd57600080fd5b5061079160048036036020811015610ad457600080fd5b503561224f565b348015610ae757600080fd5b5061076860048036036040811015610afe57600080fd5b506001600160a01b03813516906020013561225f565b348015610b2057600080fd5b5061068b6122e0565b348015610b3557600080fd5b5061064460048036036040811015610b4c57600080fd5b506001600160a01b03813516906020013515156122ef565b348015610b7057600080fd5b50610b79612541565b60408051921515835260208301919091528051918290030190f35b348015610ba057600080fd5b5061068b61255b565b348015610bb557600080fd5b5061064460048036036020811015610bcc57600080fd5b5035612561565b348015610bdf57600080fd5b5061064460048036036020811015610bf657600080fd5b50351515612628565b348015610c0b57600080fd5b5061076860048036036020811015610c2257600080fd5b50356001600160a01b031661272a565b348015610c3e57600080fd5b5061079161273f565b348015610c5357600080fd5b5061068b61274e565b348015610c6857600080fd5b5061068b612753565b348015610c7d57600080fd5b5061068b612759565b348015610c9257600080fd5b5061068b61275f565b348015610ca757600080fd5b50610768612765565b348015610cbc57600080fd5b5061064460048036036020811015610cd357600080fd5b5035612775565b348015610ce657600080fd5b50610768612855565b348015610cfb57600080fd5b5061068b612865565b348015610d1057600080fd5b5061064461286b565b348015610d2557600080fd5b5061068b6129b8565b348015610d3a57600080fd5b5061064460048036036040811015610d5157600080fd5b506001600160a01b03813516906020013515156129be565b348015610d7557600080fd5b50610644612c10565b348015610d8a57600080fd5b5061068b612db7565b348015610d9f57600080fd5b5061068b612dbc565b348015610db457600080fd5b5061068b612dc2565b348015610dc957600080fd5b5061068b612dc6565b348015610dde57600080fd5b50610768612ddf565b348015610df357600080fd5b5061068b60048036036020811015610e0a57600080fd5b50356001600160a01b0316612def565b348015610e2657600080fd5b50610644612e17565b348015610e3b57600080fd5b5061068b612eb6565b348015610e5057600080fd5b50610644612ebc565b348015610e6557600080fd5b5061064460048036036020811015610e7c57600080fd5b50356001600160a01b0316612f48565b348015610e9857600080fd5b5061079160048036036020811015610eaf57600080fd5b503561305a565b348015610ec257600080fd5b5061068b613084565b348015610ed757600080fd5b5061079161308a565b348015610eec57600080fd5b5061068b613099565b348015610f0157600080fd5b5061068b60048036036020811015610f1857600080fd5b50356001600160a01b031661309f565b348015610f3457600080fd5b5061068b6130de565b348015610f4957600080fd5b506106446130e4565b348015610f5e57600080fd5b50610768613177565b348015610f7357600080fd5b50610791613187565b348015610f8857600080fd5b5061064460048036036020811015610f9f57600080fd5b5035151561319b565b348015610fb457600080fd5b5061064460048036036040811015610fcb57600080fd5b506001600160a01b038135169060200135151561328b565b348015610fef57600080fd5b50610768613391565b34801561100457600080fd5b5061068b6133a1565b34801561101957600080fd5b506106de6133a6565b34801561102e57600080fd5b5061068b613406565b34801561104357600080fd5b5061068b61340c565b34801561105857600080fd5b50610791613412565b34801561106d57600080fd5b506106446004803603604081101561108457600080fd5b506001600160a01b0381351690602001351515613421565b3480156110a857600080fd5b50610644600480360360208110156110bf57600080fd5b50356136c6565b3480156110d257600080fd5b5061068b613789565b3480156110e757600080fd5b5061068b600480360360208110156110fe57600080fd5b50356001600160a01b031661378f565b34801561111a57600080fd5b506107686004803603604081101561113157600080fd5b506001600160a01b0381351690602001356137d1565b34801561115357600080fd5b506107916138a8565b34801561116857600080fd5b506107686004803603604081101561117f57600080fd5b506001600160a01b0381351690602001356138b7565b3480156111a157600080fd5b50610768600480360360208110156111b857600080fd5b50356001600160a01b0316613924565b3480156111d457600080fd5b5061068b613939565b3480156111e957600080fd5b506107686004803603602081101561120057600080fd5b50356001600160a01b031661393f565b34801561121c57600080fd5b506106446004803603602081101561123357600080fd5b50351515613954565b34801561124857600080fd5b50610768613ab4565b34801561125d57600080fd5b506106446004803603602081101561127457600080fd5b5035613ac4565b34801561128757600080fd5b5061068b613b9a565b34801561129c57600080fd5b50610768613ba0565b3480156112b157600080fd5b50610768600480360360208110156112c857600080fd5b50356001600160a01b0316613bb0565b3480156112e457600080fd5b50610791613bc5565b3480156112f957600080fd5b5061068b613bd4565b34801561130e57600080fd5b506106446004803603606081101561132557600080fd5b50803515159060208101359060400135613bda565b34801561134657600080fd5b50610768613c95565b34801561135b57600080fd5b5061068b6004803603602081101561137257600080fd5b50356001600160a01b0316613ca5565b34801561138e57600080fd5b50610768600480360360208110156113a557600080fd5b50356001600160a01b0316613d4e565b3480156113c157600080fd5b5061068b600480360360208110156113d857600080fd5b5035613d6c565b3480156113eb57600080fd5b5061068b613de9565b34801561140057600080fd5b506106446004803603606081101561141757600080fd5b506001600160a01b038135811691602081013582169160409091013516613def565b34801561144557600080fd5b50610644600480360360e081101561145c57600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c00135613fba565b34801561149357600080fd5b5061068b600480360360408110156114aa57600080fd5b506001600160a01b038135811691602001351661420c565b3480156114ce57600080fd5b50610644600480360360208110156114e557600080fd5b50356001600160a01b0316614237565b34801561150157600080fd5b506106446004803603602081101561151857600080fd5b50351515614326565b34801561152d57600080fd5b506107916004803603602081101561154457600080fd5b5035614416565b34801561155757600080fd5b5061068b614426565b34801561156c57600080fd5b506106446004803603602081101561158357600080fd5b50356001600160a01b031661442c565b34801561159f57600080fd5b50610644600480360360208110156115b657600080fd5b503515156144b9565b3480156115cb57600080fd5b5061068b6145a9565b3480156115e057600080fd5b50610644600480360360208110156115f757600080fd5b50356145af565b34801561160a57600080fd5b506107916004803603602081101561162157600080fd5b503561468e565b34801561163457600080fd5b5061079161469e565b34801561164957600080fd5b5061068b6146ad565b34801561165e57600080fd5b5061068b6146b3565b60025461010090046001600160a01b031633146116b7576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b80602a5414156116fc576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b604b81111561174d576040805162461bcd60e51b81526020600482015260186024820152771b585e081c185c9d1e48191a5d9a5cdbdc88185b5bdd5b9d60421b604482015290519081900360640190fd5b602a81905560405181907f99595bf6e2815a96807fe941420680afd549926424c257ec2c34de018f2f732290600090a250565b60025461010090046001600160a01b031633146117d0576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b600682905560078190556040514290829084907fef6d28afa3906f68dea1466ffdf937f009b334e097aa2f14cd6bdad23495a6f490600090a45050565b60085481565b60025461010090046001600160a01b03163314611863576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160e81b90910416151581151514156118b7576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6002805460ff60e81b1916600160e81b831515908102919091179091556040805191825242602083015280517fed329be12c4ee8ba2949470d46cf2b987dfd11d7228517b3498966a13941256e9281900390910190a150565b60008054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561199c5780601f106119715761010080835404028352916020019161199c565b820191906000526020600020905b81548152906001019060200180831161197f57829003601f168201915b5050505050905090565b600254600160d01b900460ff1681565b601a546001600160a01b031681565b3360008181526034602090815260408083206001600160a01b03871680855290835281842086905581518681529151939490939092600080516020615cd7833981519152928290030190a35060015b92915050565b60065481565b600082611a2c83613d6c565b119392505050565b60025461010090046001600160a01b03163314611a84576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160a81b9091041615158115151415611ad8576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6002805460ff60a81b1916600160a81b831515908102919091179091556040517fadd2ae1e48fad2610e967f44a01d455adca45c693dc959f9a0b5b6f807946f2390600090a250565b606481565b60305490565b60138181548110611b3c57600080fd5b6000918252602090912001546001600160a01b0316905081565b60025461010090046001600160a01b03163314611ba6576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160d81b9091041615158115151415611bf65760405162461bcd60e51b8152600401808060200182810382526023815260200180615c736023913960400191505060405180910390fd5b6002805460ff60d81b1916600160d81b831515908102919091179091556040514291907f4c517ace8b393532103aa3aef88487adfce14f3cd4ef23139821ebc43298d52c90600090a350565b602a5481565b60025461010090046001600160a01b03163314611c98576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b602d829055602e819055604051819083907f61b037fbf40888c3d344a3dfa6986a7d511feda40cac15b93162e3e21713aed690600090a35050565b60008060005b601354811015611d7c5760138181548110611cf057fe5b60009182526020918290200154604080516370a0823160e01b81526001600160a01b038881166004830152915191909216926370a082319260248082019391829003018186803b158015611d4357600080fd5b505afa158015611d57573d6000803e3d6000fd5b505050506040513d6020811015611d6d57600080fd5b50519190910190600101611cd9565b5090505b919050565b600080600080600080600060108881548110611d9d57fe5b9060005260206000200160009054906101000a90046001600160a01b03169050806001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611df657600080fd5b505afa158015611e0a573d6000803e3d6000fd5b505050506040513d6060811015611e2057600080fd5b5080516020808301516040938401518451630dfe168160e01b81529451939a5090985096506001600160a01b03841692630dfe16819260048083019392829003018186803b158015611e7157600080fd5b505afa158015611e85573d6000803e3d6000fd5b505050506040513d6020811015611e9b57600080fd5b50516040805163d21220a760e01b815290519194506001600160a01b0383169163d21220a791600480820192602092909190829003018186803b158015611ee157600080fd5b505afa158015611ef5573d6000803e3d6000fd5b505050506040513d6020811015611f0b57600080fd5b505191506001600160a01b038316301415611f3357856001600160701b031687019650611f53565b6001600160a01b038216301415611f5357846001600160701b0316870196505b505050509193909250565b6000826001600160a01b038116611fb5576040805162461bcd60e51b81526020600482015260166024820152751c9958da5c1a595b9d081a5cc81b9bdd081d985b1a5960521b604482015290519081900360640190fd5b6001600160a01b038516600090815260346020908152604080832033845290915290205460001914612062576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b038816600090815260348252838120338252909152919091205461203d91859061493f565b6001600160a01b03861660009081526034602090815260408083203384529091529020555b61206d8585856149d6565b50600195945050505050565b600254600160c81b900460ff1681565b6019546001600160a01b031681565b60035490565b60315460336020527f44496df070da3f045064f6d6f394484a8de10d5710290d619b67d975ec89320f5461dead60009081527f797464dbf411727de94027e1fdf88bb523a37123d715877a38fefe312b70e15a54909261212392909161211d9190612117906b01d290004395eb7bbfffffff1990614cb7565b90614cb7565b906148fd565b905090565b60295481565b60025460ff1690565b60025460009061010090046001600160a01b0316331461218a576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b604080514281529051839133916001600160a01b038716917fed3c8f48a6c3247e7a68382e752734feed4bf63004c064208e3117e35097dabb919081900360200190a46040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b0385169163a9059cbb9160448083019260209291908290030181600087803b15801561221c57600080fd5b505af1158015612230573d6000803e3d6000fd5b505050506040513d602081101561224657600080fd5b50519392505050565b60148181548110611b3c57600080fd5b3360009081526034602090815260408083206001600160a01b038616845290915281205461228d90836148a3565b3360008181526034602090815260408083206001600160a01b038916808552908352928190208590558051948552519193600080516020615cd7833981519152929081900390910190a350600192915050565b6a013da329b633647180000081565b60025461010090046001600160a01b0316331461233f576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b03821660009081526016602052604090205460ff16151581151514156123a7576040805162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152601660205260409020805460ff1916821580159190911790915561242457601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b038416179055612505565b60005b60125481101561250357826001600160a01b03166012828154811061244857fe5b6000918252602090912001546001600160a01b031614156124fb5760128054600019810190811061247557fe5b600091825260209091200154601280546001600160a01b03909216918390811061249b57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060128054806124d457fe5b600082815260209020810160001990810180546001600160a01b0319169055019055612503565b600101612427565b505b604051811515906001600160a01b038416907f8f1936ddb0e6b394e1edf1ac695592d1a059eecc4786f7083e71b11ec945e7ca90600090a35050565b603254306000908152603360205260409020549081101591565b60035481565b60025461010090046001600160a01b031633146125b1576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6107088111156125f3576040805162461bcd60e51b81526020600482015260086024820152670a8dede40d0d2ced60c31b604482015290519081900360640190fd5b600a819055604051429082907f9147f2d3ae1a14e9012c81c143c7c834a15f3afffcd29d3b35631aa0a3b0093e90600090a350565b60025461010090046001600160a01b03163314612678576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160d01b90910416151581151514156126de576040805162461bcd60e51b815260206004820152601c60248201527f4275726e2066756e6374696f6e206861736e2774206368616e67656400000000604482015290519081900360640190fd5b6002805460ff60d01b1916600160d01b831515908102919091179091556040514291907f5fae21b30f26eaaf4f039e77ecd02610468d0745d882434a2174baae8747605290600090a350565b60166020526000908152604090205460ff1681565b601f546001600160a01b031681565b600581565b600c5481565b602b5481565b60095481565b600254600160c01b900460ff1681565b60025461010090046001600160a01b031633146127c5576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6a013da329b63364718000008111612820576040805162461bcd60e51b815260206004820152601960248201527810995b1bddc81b5a5b9a5b5d5b481cd95b1b08185b5bdd5b9d603a1b604482015290519081900360640190fd5b6008819055604051429082907f283fcbdd6058cba4467ffc64b789f7da17231b7f66872896c41c987cc1f28b6290600090a350565b600254600160e81b900460ff1681565b600d5481565b60025461010090046001600160a01b031633146128bb576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b602f5460ff16156128ff576040805162461bcd60e51b81526020600482015260096024820152682a393c9030b3b0b4b760b91b604482015290519081900360640190fd5b42600b541115612944576040805162461bcd60e51b815260206004820152600b60248201526a4e6f7420696e2074696d6560a81b604482015290519081900360640190fd5b600061294e61209e565b9050600061296d60075461211d60065485614cf990919063ffffffff16565b6040805184815242602082015281519293507ffd9e18baf5879d8b1194dafab4a5798cfd9ac06e0282a3e1c7488b536bbccb43929081900390910190a16129b381614d52565b505050565b60055481565b60025461010090046001600160a01b03163314612a0e576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b03821660009081526018602052604090205460ff1615158115151415612a76576040805162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152601860205260409020805460ff19168215801591909117909155612af357601480546001810182556000919091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319166001600160a01b038416179055612bd4565b60005b601454811015612bd257826001600160a01b031660148281548110612b1757fe5b6000918252602090912001546001600160a01b03161415612bca57601480546000198101908110612b4457fe5b600091825260209091200154601480546001600160a01b039092169183908110612b6a57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506014805480612ba357fe5b600082815260209020810160001990810180546001600160a01b0319169055019055612bd2565b600101612af6565b505b604051811515906001600160a01b038416907f6b76292a2c57cfaa171cd21b53bac8a6a622da6e9c08b9f63a79a50275ff538990600090a35050565b60025461010090046001600160a01b03163314612c60576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6000612c79602c54602b546148a390919063ffffffff16565b90506000612c8b602d54602e54611a20565b612c9757602154612c9a565b60005b6031543060009081526033602052604081205492935091612cba916148fd565b90506000612cd78461211d612cd0866002614cf9565b8590614cf9565b90506000612d0b8561211d612d04602754612cfe6002602554614cf990919063ffffffff16565b906148a3565b8690614cf9565b90506000612d1d826121178686614cb7565b90508215612d2e57612d2e83614e6a565b8115612d4b57601b54612d4b9083906001600160a01b0316615060565b8015612d6857601a54612d689082906001600160a01b031661524b565b60408051858152602081018590528082018490526060810183905290517fa4903880285538fa6ffa51cad044f25c39cc7f89aa6cbbda844135ff94827edf9181900360800190a1505050505050565b604b81565b600e5481565b4290565b60006121236031546032546148fd90919063ffffffff16565b600254600160b01b900460ff1681565b6031546001600160a01b0382166000908152603360205260408120549091611a1491906148fd565b60025461010090046001600160a01b03163314612e67576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b60115481565b60005b601054811015612f455760108181548110612ed657fe5b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b158015612f2157600080fd5b505af1158015612f35573d6000803e3d6000fd5b505060019092019150612ebf9050565b50565b60025461010090046001600160a01b03163314612f98576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b038116612fe5576040805162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206164647265737360881b604482015290519081900360640190fd5b60405147906001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561301d573d6000803e3d6000fd5b5042826001600160a01b0316827f764ac18b38788ceb5d273876574dd816d95e562605c44e30f5638e7f92ceef8860405160405180910390a45050565b60006010828154811061306957fe5b6000918252602090912001546001600160a01b031692915050565b60275481565b601b546001600160a01b031681565b60265481565b6000806130ab83612def565b90506000806130b985613ca5565b91506130c485611cd3565b90506130d481612cfe85856148a3565b5091949350505050565b600a5481565b60025461010090046001600160a01b03163314613134576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6002805460ff60f01b1916600160f01b17905560405142906001907fb59dc360088de0f0576079416500b46f6ad5b08db9e752ed2688eaf8a6582a2990600090a3565b600254600160f01b900460ff1681565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b031633146131eb576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160c81b909104161515811515141561323f576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6002805460ff60c81b1916600160c81b831515908102919091179091556040514291907fcd99475fc595c5f66adc1960999196cae6d212cf2d00a7670a085507ead059b090600090a350565b60025461010090046001600160a01b031633146132db576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0382166000908152600f602052604090205460ff161515811515141561333d576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6001600160a01b0382166000818152600f6020526040808220805460ff191685151590811790915590519092917f2f640a0ab7e2a6d9ec57f3932923908568f2984073dcebac1b9a3db32debe91d91a35050565b600254600160b81b900460ff1681565b601981565b60018054604080516020601f6002600019610100878916150201909516949094049384018190048102820181019092528281526060939092909183018282801561199c5780601f106119715761010080835404028352916020019161199c565b60255481565b60215481565b601c546001600160a01b031681565b60025461010090046001600160a01b03163314613471576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b03821660009081526015602052604090205460ff16151581151514156134d9576040805162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152601560205260409020805460ff191682158015919091179091556135605760108054600180820183556000929092527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b03851617905560118054909101905561368a565b6010546001106135a9576040805162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015290519081900360640190fd5b60005b60105481101561368857826001600160a01b0316601082815481106135cd57fe5b6000918252602090912001546001600160a01b03161415613680576010805460001981019081106135fa57fe5b600091825260209091200154601080546001600160a01b03909216918390811061362057fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601080548061365957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055613688565b6001016135ac565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60025461010090046001600160a01b03163314613716576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b4281116137545760405162461bcd60e51b8152600401808060200182810382526022815260200180615cf76022913960400191505060405180910390fd5b600b819055604051429082907f3a97bbcdf9724661e5a691bf707b0b97b7fb6814227e9ee3253016b1198e32e790600090a350565b602c5481565b60008061379b8361309f565b905060006137b56137aa6146b3565b61211d846064614cf9565b905060006137c482600a6153a0565b600d540295945050505050565b3360009081526034602090815260408083206001600160a01b0386168452909152812054808310613825573360009081526034602090815260408083206001600160a01b0388168452909152812055613854565b61382f8184614cb7565b3360009081526034602090815260408083206001600160a01b03891684529091529020555b3360008181526034602090815260408083206001600160a01b038916808552908352928190205481519081529051929392600080516020615cd7833981519152929181900390910190a35060019392505050565b6020546001600160a01b031681565b6000826001600160a01b03811661390e576040805162461bcd60e51b81526020600482015260166024820152751c9958da5c1a595b9d081a5cc81b9bdd081d985b1a5960521b604482015290519081900360640190fd5b6139193385856149d6565b506001949350505050565b60176020526000908152604090205460ff1681565b60245481565b60156020526000908152604090205460ff1681565b60025461010090046001600160a01b031633146139a4576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160e01b9091041615158115151415613a0a576040805162461bcd60e51b815260206004820152601e60248201527f4c61756e63682066756e6374696f6e206861736e2774206368616e6765640000604482015290519081900360640190fd5b600254600160e01b900460ff16613a68576040805162461bcd60e51b815260206004820152601a60248201527f6c61756e636820706572696f6420616c7265616479206f766572000000000000604482015290519081900360640190fd5b6002805460ff60e01b1916600160e01b831515908102919091179091556040514291907f9e188e4be28f15bcf4cb979131d9f68653cba1ff26a8f7ee4bffcfaa1e9d437a90600090a350565b600254600160e01b900460ff1681565b60025461010090046001600160a01b03163314613b14576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6005811115613b65576040805162461bcd60e51b81526020600482015260186024820152771b585e08189c9858dad95d0819995948195e18d95959195960421b604482015290519081900360640190fd5b600d819055604051429082907f6b9cf7de592c5c9de3888c90ad577bfa90287fe1bb45e4c0a69822dbb578cc9a90600090a350565b600b5481565b600254600160d81b900460ff1681565b60186020526000908152604090205460ff1681565b601e546001600160a01b031681565b60225481565b60025461010090046001600160a01b03163314613c2a576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6002805460ff60b01b1916600160b01b85151502179055613c5c8161211d6b01d290004395eb7bbfffffff1985614cf9565b60325560405181908390851515907f512cfe1aedabdc06d12a680ace7434d88a9532c8853515536842f5ff52cbe55a90600090a4505050565b600254600160a81b900460ff1681565b60008060005b601254811015611d7c5760128181548110613cc257fe5b600091825260209182902001546040805163453d3db360e11b81526001600160a01b03888116600483015291519190921692638a7a7b669260248082019391829003018186803b158015613d1557600080fd5b505afa158015613d29573d6000803e3d6000fd5b505050506040513d6020811015613d3f57600080fd5b50519190910190600101613cab565b6001600160a01b03166000908152600f602052604090205460ff1690565b600080805b601054811015613dc057613db7613db0633b9aca0061211d60108581548110613d9657fe5b6000918252602090912001546001600160a01b0316612def565b83906148a3565b50600101613d71565b50613de2613dd4633b9aca0061211d61209e565b61211d612d04846002614cf9565b9392505050565b60075481565b60025461010090046001600160a01b03163314613e3f576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b038316613e9a576040805162461bcd60e51b815260206004820152601a60248201527f5f6c69717569646974795265636569766572206e6f7420736574000000000000604482015290519081900360640190fd5b6001600160a01b038216613ef1576040805162461bcd60e51b815260206004820152601960248201527817dd1c99585cdd5c9e549958d95a5d995c881b9bdd081cd95d603a1b604482015290519081900360640190fd5b6001600160a01b038116613f4c576040805162461bcd60e51b815260206004820152601e60248201527f5f7269736b4672656556616c75655265636569766572206e6f74207365740000604482015290519081900360640190fd5b601980546001600160a01b03199081166001600160a01b03868116918217909355601a80548316868516908117909155601b80549093169385169384179092556040517fb923dcdfa226a9163e9324bacc07634c44fc26e1268f8341bc0989d83f4794b890600090a4505050565b60025461010090046001600160a01b0316331461400a576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b600061401a87612cfe8a896148a3565b9050600061402c84612cfe84886148a3565b905060198911158015614040575060198811155b801561404d575060198711155b801561405a575060198511155b8015614067575060198411155b6140a25760405162461bcd60e51b8152600401808060200182810382526024815260200180615c4f6024913960400191505060405180910390fd5b601982106140ef576040805162461bcd60e51b81526020600482015260156024820152746578636565646564206d617820627579206665657360581b604482015290519081900360640190fd5b6019811061413d576040805162461bcd60e51b81526020600482015260166024820152756578636565646564206d61782073656c6c206665657360501b604482015290519081900360640190fd5b602189905560258890556022879055602685905560278490556023869055602483905561416e88612cfe8b8a6148a3565b602b819055506141a361419e60295460285403612cfe602754612cfe602654602b546148a390919063ffffffff16565b6153b6565b86888a7f741ea12e6017fe664434788bce4b248cf0e6182249fcbbe2477b971e0e0d1d6388888b602454602b54604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a4505050505050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b60025461010090046001600160a01b03163314614287576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0381166142dc576040805162461bcd60e51b815260206004820152601760248201527663616e206e6f742075736520307830206164647265737360481b604482015290519081900360640190fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f214c2cae0f5c69a93599efe5c6da92cb4e38b02fe0544f339c189b21f57c5a6090600090a250565b60025461010090046001600160a01b03163314614376576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160b81b90910416151581151514156143ca576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6002805460ff60b81b1916600160b81b831515908102919091179091556040514291907f832ed7895e341f17afc036cc051864a91809bb5c898a2d5645323b97b6925ec990600090a350565b60108181548110611b3c57600080fd5b60285481565b60025461010090046001600160a01b0316331461447c576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6040516001600160a01b038216907fb1eb34684306bcea7f9ed508931dc13b5993c8fdd00fe65c2e4680ae2610a70190600090a2612f45816153bb565b60025461010090046001600160a01b03163314614509576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160c01b909104161515811515141561455d576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6002805460ff60c01b1916600160c01b831515908102919091179091556040514291907f06667769ba3c307bbbc51d6789871daff6351211f28781c8ae7c391f84cbe38390600090a350565b60045481565b60025461010090046001600160a01b031633146145ff576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6a013da329b63364718000008111614659576040805162461bcd60e51b815260206004820152601860248201527710995b1bddc81b5a5b9a5b5d5b48189d5e48185b5bdd5b9d60421b604482015290519081900360640190fd5b6009819055604051429082907f3c0d1676b036060d919711fdd530ad3de8d21c3b3ba80e014042db98e8c7763890600090a350565b60128181548110611b3c57600080fd5b601d546001600160a01b031681565b60235481565b60008060008060008060008060005b60105481101561489757601081815481106146d957fe5b9060005260206000200160009054906101000a90046001600160a01b03169250826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561473257600080fd5b505afa158015614746573d6000803e3d6000fd5b505050506040513d606081101561475c57600080fd5b5080516020808301516040938401518451630dfe168160e01b81529451939c50909a5098506001600160a01b03861692630dfe16819260048083019392829003018186803b1580156147ad57600080fd5b505afa1580156147c1573d6000803e3d6000fd5b505050506040513d60208110156147d757600080fd5b50516040805163d21220a760e01b815290519196506001600160a01b0385169163d21220a791600480820192602092909190829003018186803b15801561481d57600080fd5b505afa158015614831573d6000803e3d6000fd5b505050506040513d602081101561484757600080fd5b505193506001600160a01b03851630141561486f57876001600160701b03168201915061488f565b6001600160a01b03841630141561488f57866001600160701b0316820191505b6001016146c2565b50965050505050505090565b600082820183811015613de2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000613de283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615472565b600081848411156149ce5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561499357818101518382015260200161497b565b50505050905090810190601f1680156149c05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0383166000908152600f6020526040812054819060ff1680614a1757506001600160a01b0384166000908152600f602052604090205460ff165b600254909150600160a81b900460ff1680614a2f5750805b614a76576040805162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd081cdd185c9d1959606a1b604482015290519081900360640190fd5b6001600160a01b03841660009081526015602052604090205460ff168015614a9c575080155b15614ae757600854831115614ae7576040805162461bcd60e51b815260206004820152600c60248201526b115c9c9bdc88185b5bdd5b9d60a21b604482015290519081900360640190fd5b6001600160a01b03851660009081526015602052604090205460ff168015614b0d575080155b15614b6057600954831115614b60576040805162461bcd60e51b815260206004820152601460248201527342757920416d6f756e742045786365656465642160601b604482015290519081900360640190fd5b602f5460ff1615614b7e57614b768585856154d7565b915050613de2565b6000614b9560315485614cf990919063ffffffff16565b9050614b9f615594565b15614bac57614bac61560e565b6001600160a01b038616600090815260336020526040902054614bcf9082614cb7565b6001600160a01b038716600090815260336020526040812091909155614bf58787615762565b614bff5781614c0a565b614c0a87878461580e565b6001600160a01b038716600090815260336020526040902054909150614c3090826148a3565b6001600160a01b0380881660008181526033602052604090209290925560315490891690600080516020615cb783398151915290614c6f9085906148fd565b60408051918252519081900360200190a3614c8861599c565b8015614c9d5750600254600160b81b900460ff165b15614caa57614caa6159a5565b5060019695505050505050565b6000613de283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061493f565b600082614d0857506000611a14565b82820282848281614d1557fe5b0414613de25760405162461bcd60e51b8152600401808060200182810382526021815260200180615c966021913960400191505060405180910390fd5b60004282614d9c57603054604080519182525182917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a25050603054611d80565b6000831215614dbe57603054614db6906000859003614cb7565b603055614dcf565b603054614dcb90846148a3565b6030555b6030546001600160801b031015614dec576001600160801b036030555b603054614e07906b01d290004395eb7bbfffffff19906148fd565b603155614e13816159e5565b614e1b615a43565b15614e2857614e28615a53565b603054604080519182525182917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a25050603054919050565b6000614e778260026148fd565b90506000614e858383614cb7565b600254909150600160c81b900460ff1615614f045747614ea5833061524b565b6000614eb14783614cb7565b9050614ebd8382615ad6565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a150506129b3565b601c54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015614f4f57600080fd5b505afa158015614f63573d6000803e3d6000fd5b505050506040513d6020811015614f7957600080fd5b50519050614f878330615060565b601c54604080516370a0823160e01b8152306004820152905160009261500d9285926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015614fdb57600080fd5b505afa158015614fef573d6000803e3d6000fd5b505050506040513d602081101561500557600080fd5b505190614cb7565b90506150198382615b7c565b604080518581526020810183905280820185905290517f7a4f8347ba895fa7bcb359c73d941a5783865500645a7111f978008a5332ffa69181900360600190a15050505050565b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061509157fe5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156150e557600080fd5b505afa1580156150f9573d6000803e3d6000fd5b505050506040513d602081101561510f57600080fd5b505181518290600190811061512057fe5b6001600160a01b039283166020918202929092010152601c5482519116908290600290811061514b57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050601d60009054906101000a90046001600160a01b03166001600160a01b0316635c11d7958460008486426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156152055781810151838201526020016151ed565b505050509050019650505050505050600060405180830381600087803b15801561522e57600080fd5b505af1158015615242573d6000803e3d6000fd5b50505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061527a57fe5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156152ce57600080fd5b505afa1580156152e2573d6000803e3d6000fd5b505050506040513d60208110156152f857600080fd5b505181518290600190811061530957fe5b6001600160a01b03928316602091820292909201810191909152601d5460405163791ac94760e01b8152600481018781526000602483018190528786166064840152426084840181905260a060448501908152885160a48601528851959097169663791ac947968b9693958a958c9590939260c49092019187810191028083838b83156152055781810151838201526020016151ed565b60008183106153af5781613de2565b5090919050565b602c55565b6001600160a01b03811661540b576040805162461bcd60e51b815260206004820152601260248201527104f776e65722063616e206e6f7420626520360741b604482015290519081900360640190fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081836154c15760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561499357818101518382015260200161497b565b5060008385816154cd57fe5b0495945050505050565b6000806154ef60315484614cf990919063ffffffff16565b6001600160a01b0386166000908152603360205260409020549091506155159082614cb7565b6001600160a01b03808716600090815260336020526040808220939093559086168152205461554490826148a3565b6001600160a01b038086166000818152603360209081526040918290209490945580518781529051919392891692600080516020615cb783398151915292918290030190a3506001949350505050565b3360009081526015602052604081205460ff161580156155b75750602f5460ff16155b80156155cc5750600254600160b01b900460ff165b80156155ee575060006155ec602c54602b546148a390919063ffffffff16565b115b801561212357505060325430600090815260336020526040902054101590565b602f805460ff19166001179055602c54602b5460009161562e91906148a3565b90506000615640602d54602e54611a20565b61564c5760215461564f565b60005b603154306000908152603360205260408120549293509161566f916148fd565b905060006156858461211d612cd0866002614cf9565b905060006156ac8561211d612d04602754612cfe6002602554614cf990919063ffffffff16565b905060006156be826121178686614cb7565b905082156156cf576156cf83614e6a565b81156156ec57601b546156ec9083906001600160a01b0316615060565b801561570957601a546157099082906001600160a01b031661524b565b60408051858152602081018590528082018490526060810183905290517fa4903880285538fa6ffa51cad044f25c39cc7f89aa6cbbda844135ff94827edf9181900360800190a15050602f805460ff1916905550505050565b6001600160a01b0382166000908152600f602052604081205460ff16806157a157506001600160a01b0382166000908152600f602052604090205460ff165b156157ae57506000611a14565b600254600160c01b900460ff16156157c857506001611a14565b6001600160a01b03831660009081526015602052604090205460ff168061580757506001600160a01b03821660009081526015602052604090205460ff165b9050611a14565b602b546023546001600160a01b0384166000908152601560205260408120549092919060ff161561585657602c549150615853602454826148a390919063ffffffff16565b90505b600254600160d81b900460ff1615615876576158718661378f565b820191505b6001600160a01b03861660009081526018602052604090205460ff16806158b557506001600160a01b03851660009081526018602052604090205460ff165b156158c85760318210156158c857603191505b60006158d9606461211d8786614cf9565b90506158e3615c2d565b80156158ef5750600082115b156159205761592061591b606461211d856159156031548b6148fd90919063ffffffff16565b90614cf9565b615c3d565b3060009081526033602052604090205461593a90826148a3565b306000818152603360205260409020919091556031546001600160a01b03891690600080516020615cb7833981519152906159769085906148fd565b60408051918252519081900360200190a36159918582614cb7565b979650505050505050565b600b5442101590565b602f5460ff166159e35760006159b961209e565b905060006159d860075461211d60065485614cf990919063ffffffff16565b90506129b381614d52565b565b600a546159f39082906148a3565b600b81905550615a3460045461211d615a2b615a2260075461211d600654600454614cf990919063ffffffff16565b600454906148a3565b60035490614cf9565b60035550600c80546001019055565b600254600160e01b900460ff1690565b6000615a78615a6f600a546005546148fd90919063ffffffff16565b600c54906148fd565b9050615a85816005614cf9565b602981905560285411615aa6576002805460ff60e01b191690556028546029555b612f4561419e60295460285403612cfe602454612cfe602754612cfe602654602b546148a390919063ffffffff16565b601d546019546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b158015615b4b57600080fd5b505af1158015615b5f573d6000803e3d6000fd5b50505050506040513d6060811015615b7657600080fd5b50505050565b601d54601c546019546040805162e8e33760e81b81523060048201526001600160a01b039384166024820152604481018790526064810186905260006084820181905260a4820181905292841660c48201524260e48201529051929093169263e8e33700926101048083019360609383900390910190829087803b158015615c0357600080fd5b505af1158015615c17573d6000803e3d6000fd5b505050506040513d6060811015615b7657600080fd5b600254600160d01b900460ff1690565b615c4a3061dead836149d6565b505056fe7365742066656520686967686572207468616e206d61782066656520616c6c6f77696e6754617820427261636b65742066756e6374696f6e206861736e2774206368616e676564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9254e657874207265626173652063616e206e6f7420626520696e207468652070617374a26469706673582212209b36d5d1aa9f4f10f44bbf37d23c32cd65fbdb833d1f75b1da9190857f44ea9064736f6c63430007060033

Deployed Bytecode

0x60806040526004361061060e5760003560e01c8063764d72bf1161031b578063b62496f5116101a7578063d7c01032116100ed578063f2fde38b1161009b578063f2fde38b14611560578063f3a54f2c14611593578063f477a2c5146115bf578063f5b01e15146115d4578063f6bbe516146115fe578063f887ea4014611628578063fce589d81461163d578063fcf232911461165257610615565b8063d7c01032146113f4578063da2e3bad14611439578063dd62ed3e14611487578063e088bfc0146114c2578063e15beb80146114f5578063e1d5584c14611521578063e77ef6981461154b57610615565b8063c45a015511610155578063c45a0155146112d8578063cc32d176146112ed578063d088935814611302578063d1fce2641461133a578063d38af8851461134f578063d439979014611382578063d51ed1c8146113b5578063d7832b11146113df57610615565b8063b62496f5146111dd578063b6d438f314611210578063b6e98ad61461123c578063b915db5a14611251578063bc7e68a31461127b578063bfce486e14611290578063c0da424c146112a557610615565b806395d89b411161026c578063a0c147221161021a578063a0c1472214610c47578063a3c4e7d3146110db578063a457c2d71461110e578063a8aa1b3114611147578063a9059cbb1461115c578063a9b38cb014611195578063ab428a2314610b14578063adb873bd146111c857610615565b806395d89b411461100d5780639763eec41461102257806398118cb414611037578063992642e51461104c5780639a7a23d6146110615780639ae7372d1461109c5780639d9241ec146110c657610615565b80638b8a214e116102c95780638b8a214e14610f3d5780638c755af414610f525780638da5cb5b14610f675780638dbb08ba14610f7c5780638ebfc79614610fa85780639079f93214610fe357806392f6576e14610ff857610615565b8063764d72bf14610e5957806377d9474314610e8c5780637ac8292714610eb65780637d4b501714610ecb5780638102c57014610ee057806386fe511d14610ef557806389375abf14610f2857610615565b80633c22e5161161049a5780635e1af682116103eb5780636aa217a1116103995780636aa217a114610d935780636c9230db14610da85780636d351d1a14610dbd5780636ddd171314610dd257806370a0823114610de7578063715018a614610e1a578063716cc28014610e2f578063753d02a114610e4457610615565b80635e1af68214610cda5780635fdd4ed514610cef57806361a9d1b114610d045780636380995314610d195780636542609514610d2e57806366eb378514610d6957806368348dc114610d7e57610615565b80634e8c0bf3116104485780634e8c0bf314610c3257806356af7d0614610c4757806357b535c014610c5c57806359b107b914610c715780635aa821a914610c865780635abe671114610c9b5780635c38ffe214610cb057610615565b80633c22e51614610b145780633c5c780014610b295780634527881e14610b6457806347e1b37214610b945780634cd9ddf214610ba95780634d666ad214610bd35780634e66160c14610bff57610615565b80631d0d78dd1161055f578063264d26dd1161050d578063264d26dd146109f957806326987b6014610a0e5780632b112e4914610a235780632e01803e14610a38578063313ce56714610a4d57806333f3d62814610a7857806335179d6b14610ab15780633950935114610adb57610615565b80631d0d78dd146108ab5780631dbbcf70146108d7578063201e7991146108ec578063202018cc1461091c5780632248e5391461094f57806323b872dd146109a1578063240cd448146109e457610615565b8063095ea7b3116105bc578063095ea7b3146107ad5780630af08314146107e65780631161ae39146107fb5780631276089b1461082b578063180b0d7e1461085757806318160ddd1461086c578063198b763e1461088157610615565b8063011bc9871461061a57806301b168271461064657806302259e9e1461067657806303c4bb531461069d57806306fdde03146106c957806307ebec271461075357806308b1fd8f1461077c57610615565b3661061557005b600080fd5b34801561062657600080fd5b506106446004803603602081101561063d57600080fd5b5035611667565b005b34801561065257600080fd5b506106446004803603604081101561066957600080fd5b5080359060200135611780565b34801561068257600080fd5b5061068b61180d565b60408051918252519081900360200190f35b3480156106a957600080fd5b50610644600480360360208110156106c057600080fd5b50351515611813565b3480156106d557600080fd5b506106de611910565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610718578181015183820152602001610700565b50505050905090810190601f1680156107455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561075f57600080fd5b506107686119a6565b604080519115158252519081900360200190f35b34801561078857600080fd5b506107916119b6565b604080516001600160a01b039092168252519081900360200190f35b3480156107b957600080fd5b50610768600480360360408110156107d057600080fd5b506001600160a01b0381351690602001356119c5565b3480156107f257600080fd5b5061068b611a1a565b34801561080757600080fd5b506107686004803603604081101561081e57600080fd5b5080359060200135611a20565b34801561083757600080fd5b506106446004803603602081101561084e57600080fd5b50351515611a34565b34801561086357600080fd5b5061068b611b21565b34801561087857600080fd5b5061068b611b26565b34801561088d57600080fd5b50610791600480360360208110156108a457600080fd5b5035611b2c565b3480156108b757600080fd5b50610644600480360360208110156108ce57600080fd5b50351515611b56565b3480156108e357600080fd5b5061068b611c42565b3480156108f857600080fd5b506106446004803603604081101561090f57600080fd5b5080359060200135611c48565b34801561092857600080fd5b5061068b6004803603602081101561093f57600080fd5b50356001600160a01b0316611cd3565b34801561095b57600080fd5b506109796004803603602081101561097257600080fd5b5035611d85565b604080519384526001600160701b039283166020850152911682820152519081900360600190f35b3480156109ad57600080fd5b50610768600480360360608110156109c457600080fd5b506001600160a01b03813581169160208101359091169060400135611f5e565b3480156109f057600080fd5b50610768612079565b348015610a0557600080fd5b50610791612089565b348015610a1a57600080fd5b5061068b612098565b348015610a2f57600080fd5b5061068b61209e565b348015610a4457600080fd5b5061068b612128565b348015610a5957600080fd5b50610a6261212e565b6040805160ff9092168252519081900360200190f35b348015610a8457600080fd5b5061076860048036036040811015610a9b57600080fd5b506001600160a01b038135169060200135612137565b348015610abd57600080fd5b5061079160048036036020811015610ad457600080fd5b503561224f565b348015610ae757600080fd5b5061076860048036036040811015610afe57600080fd5b506001600160a01b03813516906020013561225f565b348015610b2057600080fd5b5061068b6122e0565b348015610b3557600080fd5b5061064460048036036040811015610b4c57600080fd5b506001600160a01b03813516906020013515156122ef565b348015610b7057600080fd5b50610b79612541565b60408051921515835260208301919091528051918290030190f35b348015610ba057600080fd5b5061068b61255b565b348015610bb557600080fd5b5061064460048036036020811015610bcc57600080fd5b5035612561565b348015610bdf57600080fd5b5061064460048036036020811015610bf657600080fd5b50351515612628565b348015610c0b57600080fd5b5061076860048036036020811015610c2257600080fd5b50356001600160a01b031661272a565b348015610c3e57600080fd5b5061079161273f565b348015610c5357600080fd5b5061068b61274e565b348015610c6857600080fd5b5061068b612753565b348015610c7d57600080fd5b5061068b612759565b348015610c9257600080fd5b5061068b61275f565b348015610ca757600080fd5b50610768612765565b348015610cbc57600080fd5b5061064460048036036020811015610cd357600080fd5b5035612775565b348015610ce657600080fd5b50610768612855565b348015610cfb57600080fd5b5061068b612865565b348015610d1057600080fd5b5061064461286b565b348015610d2557600080fd5b5061068b6129b8565b348015610d3a57600080fd5b5061064460048036036040811015610d5157600080fd5b506001600160a01b03813516906020013515156129be565b348015610d7557600080fd5b50610644612c10565b348015610d8a57600080fd5b5061068b612db7565b348015610d9f57600080fd5b5061068b612dbc565b348015610db457600080fd5b5061068b612dc2565b348015610dc957600080fd5b5061068b612dc6565b348015610dde57600080fd5b50610768612ddf565b348015610df357600080fd5b5061068b60048036036020811015610e0a57600080fd5b50356001600160a01b0316612def565b348015610e2657600080fd5b50610644612e17565b348015610e3b57600080fd5b5061068b612eb6565b348015610e5057600080fd5b50610644612ebc565b348015610e6557600080fd5b5061064460048036036020811015610e7c57600080fd5b50356001600160a01b0316612f48565b348015610e9857600080fd5b5061079160048036036020811015610eaf57600080fd5b503561305a565b348015610ec257600080fd5b5061068b613084565b348015610ed757600080fd5b5061079161308a565b348015610eec57600080fd5b5061068b613099565b348015610f0157600080fd5b5061068b60048036036020811015610f1857600080fd5b50356001600160a01b031661309f565b348015610f3457600080fd5b5061068b6130de565b348015610f4957600080fd5b506106446130e4565b348015610f5e57600080fd5b50610768613177565b348015610f7357600080fd5b50610791613187565b348015610f8857600080fd5b5061064460048036036020811015610f9f57600080fd5b5035151561319b565b348015610fb457600080fd5b5061064460048036036040811015610fcb57600080fd5b506001600160a01b038135169060200135151561328b565b348015610fef57600080fd5b50610768613391565b34801561100457600080fd5b5061068b6133a1565b34801561101957600080fd5b506106de6133a6565b34801561102e57600080fd5b5061068b613406565b34801561104357600080fd5b5061068b61340c565b34801561105857600080fd5b50610791613412565b34801561106d57600080fd5b506106446004803603604081101561108457600080fd5b506001600160a01b0381351690602001351515613421565b3480156110a857600080fd5b50610644600480360360208110156110bf57600080fd5b50356136c6565b3480156110d257600080fd5b5061068b613789565b3480156110e757600080fd5b5061068b600480360360208110156110fe57600080fd5b50356001600160a01b031661378f565b34801561111a57600080fd5b506107686004803603604081101561113157600080fd5b506001600160a01b0381351690602001356137d1565b34801561115357600080fd5b506107916138a8565b34801561116857600080fd5b506107686004803603604081101561117f57600080fd5b506001600160a01b0381351690602001356138b7565b3480156111a157600080fd5b50610768600480360360208110156111b857600080fd5b50356001600160a01b0316613924565b3480156111d457600080fd5b5061068b613939565b3480156111e957600080fd5b506107686004803603602081101561120057600080fd5b50356001600160a01b031661393f565b34801561121c57600080fd5b506106446004803603602081101561123357600080fd5b50351515613954565b34801561124857600080fd5b50610768613ab4565b34801561125d57600080fd5b506106446004803603602081101561127457600080fd5b5035613ac4565b34801561128757600080fd5b5061068b613b9a565b34801561129c57600080fd5b50610768613ba0565b3480156112b157600080fd5b50610768600480360360208110156112c857600080fd5b50356001600160a01b0316613bb0565b3480156112e457600080fd5b50610791613bc5565b3480156112f957600080fd5b5061068b613bd4565b34801561130e57600080fd5b506106446004803603606081101561132557600080fd5b50803515159060208101359060400135613bda565b34801561134657600080fd5b50610768613c95565b34801561135b57600080fd5b5061068b6004803603602081101561137257600080fd5b50356001600160a01b0316613ca5565b34801561138e57600080fd5b50610768600480360360208110156113a557600080fd5b50356001600160a01b0316613d4e565b3480156113c157600080fd5b5061068b600480360360208110156113d857600080fd5b5035613d6c565b3480156113eb57600080fd5b5061068b613de9565b34801561140057600080fd5b506106446004803603606081101561141757600080fd5b506001600160a01b038135811691602081013582169160409091013516613def565b34801561144557600080fd5b50610644600480360360e081101561145c57600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c00135613fba565b34801561149357600080fd5b5061068b600480360360408110156114aa57600080fd5b506001600160a01b038135811691602001351661420c565b3480156114ce57600080fd5b50610644600480360360208110156114e557600080fd5b50356001600160a01b0316614237565b34801561150157600080fd5b506106446004803603602081101561151857600080fd5b50351515614326565b34801561152d57600080fd5b506107916004803603602081101561154457600080fd5b5035614416565b34801561155757600080fd5b5061068b614426565b34801561156c57600080fd5b506106446004803603602081101561158357600080fd5b50356001600160a01b031661442c565b34801561159f57600080fd5b50610644600480360360208110156115b657600080fd5b503515156144b9565b3480156115cb57600080fd5b5061068b6145a9565b3480156115e057600080fd5b50610644600480360360208110156115f757600080fd5b50356145af565b34801561160a57600080fd5b506107916004803603602081101561162157600080fd5b503561468e565b34801561163457600080fd5b5061079161469e565b34801561164957600080fd5b5061068b6146ad565b34801561165e57600080fd5b5061068b6146b3565b60025461010090046001600160a01b031633146116b7576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b80602a5414156116fc576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b604b81111561174d576040805162461bcd60e51b81526020600482015260186024820152771b585e081c185c9d1e48191a5d9a5cdbdc88185b5bdd5b9d60421b604482015290519081900360640190fd5b602a81905560405181907f99595bf6e2815a96807fe941420680afd549926424c257ec2c34de018f2f732290600090a250565b60025461010090046001600160a01b031633146117d0576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b600682905560078190556040514290829084907fef6d28afa3906f68dea1466ffdf937f009b334e097aa2f14cd6bdad23495a6f490600090a45050565b60085481565b60025461010090046001600160a01b03163314611863576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160e81b90910416151581151514156118b7576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6002805460ff60e81b1916600160e81b831515908102919091179091556040805191825242602083015280517fed329be12c4ee8ba2949470d46cf2b987dfd11d7228517b3498966a13941256e9281900390910190a150565b60008054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561199c5780601f106119715761010080835404028352916020019161199c565b820191906000526020600020905b81548152906001019060200180831161197f57829003601f168201915b5050505050905090565b600254600160d01b900460ff1681565b601a546001600160a01b031681565b3360008181526034602090815260408083206001600160a01b03871680855290835281842086905581518681529151939490939092600080516020615cd7833981519152928290030190a35060015b92915050565b60065481565b600082611a2c83613d6c565b119392505050565b60025461010090046001600160a01b03163314611a84576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160a81b9091041615158115151415611ad8576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6002805460ff60a81b1916600160a81b831515908102919091179091556040517fadd2ae1e48fad2610e967f44a01d455adca45c693dc959f9a0b5b6f807946f2390600090a250565b606481565b60305490565b60138181548110611b3c57600080fd5b6000918252602090912001546001600160a01b0316905081565b60025461010090046001600160a01b03163314611ba6576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160d81b9091041615158115151415611bf65760405162461bcd60e51b8152600401808060200182810382526023815260200180615c736023913960400191505060405180910390fd5b6002805460ff60d81b1916600160d81b831515908102919091179091556040514291907f4c517ace8b393532103aa3aef88487adfce14f3cd4ef23139821ebc43298d52c90600090a350565b602a5481565b60025461010090046001600160a01b03163314611c98576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b602d829055602e819055604051819083907f61b037fbf40888c3d344a3dfa6986a7d511feda40cac15b93162e3e21713aed690600090a35050565b60008060005b601354811015611d7c5760138181548110611cf057fe5b60009182526020918290200154604080516370a0823160e01b81526001600160a01b038881166004830152915191909216926370a082319260248082019391829003018186803b158015611d4357600080fd5b505afa158015611d57573d6000803e3d6000fd5b505050506040513d6020811015611d6d57600080fd5b50519190910190600101611cd9565b5090505b919050565b600080600080600080600060108881548110611d9d57fe5b9060005260206000200160009054906101000a90046001600160a01b03169050806001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611df657600080fd5b505afa158015611e0a573d6000803e3d6000fd5b505050506040513d6060811015611e2057600080fd5b5080516020808301516040938401518451630dfe168160e01b81529451939a5090985096506001600160a01b03841692630dfe16819260048083019392829003018186803b158015611e7157600080fd5b505afa158015611e85573d6000803e3d6000fd5b505050506040513d6020811015611e9b57600080fd5b50516040805163d21220a760e01b815290519194506001600160a01b0383169163d21220a791600480820192602092909190829003018186803b158015611ee157600080fd5b505afa158015611ef5573d6000803e3d6000fd5b505050506040513d6020811015611f0b57600080fd5b505191506001600160a01b038316301415611f3357856001600160701b031687019650611f53565b6001600160a01b038216301415611f5357846001600160701b0316870196505b505050509193909250565b6000826001600160a01b038116611fb5576040805162461bcd60e51b81526020600482015260166024820152751c9958da5c1a595b9d081a5cc81b9bdd081d985b1a5960521b604482015290519081900360640190fd5b6001600160a01b038516600090815260346020908152604080832033845290915290205460001914612062576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b038816600090815260348252838120338252909152919091205461203d91859061493f565b6001600160a01b03861660009081526034602090815260408083203384529091529020555b61206d8585856149d6565b50600195945050505050565b600254600160c81b900460ff1681565b6019546001600160a01b031681565b60035490565b60315460336020527f44496df070da3f045064f6d6f394484a8de10d5710290d619b67d975ec89320f5461dead60009081527f797464dbf411727de94027e1fdf88bb523a37123d715877a38fefe312b70e15a54909261212392909161211d9190612117906b01d290004395eb7bbfffffff1990614cb7565b90614cb7565b906148fd565b905090565b60295481565b60025460ff1690565b60025460009061010090046001600160a01b0316331461218a576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b604080514281529051839133916001600160a01b038716917fed3c8f48a6c3247e7a68382e752734feed4bf63004c064208e3117e35097dabb919081900360200190a46040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b0385169163a9059cbb9160448083019260209291908290030181600087803b15801561221c57600080fd5b505af1158015612230573d6000803e3d6000fd5b505050506040513d602081101561224657600080fd5b50519392505050565b60148181548110611b3c57600080fd5b3360009081526034602090815260408083206001600160a01b038616845290915281205461228d90836148a3565b3360008181526034602090815260408083206001600160a01b038916808552908352928190208590558051948552519193600080516020615cd7833981519152929081900390910190a350600192915050565b6a013da329b633647180000081565b60025461010090046001600160a01b0316331461233f576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b03821660009081526016602052604090205460ff16151581151514156123a7576040805162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152601660205260409020805460ff1916821580159190911790915561242457601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b038416179055612505565b60005b60125481101561250357826001600160a01b03166012828154811061244857fe5b6000918252602090912001546001600160a01b031614156124fb5760128054600019810190811061247557fe5b600091825260209091200154601280546001600160a01b03909216918390811061249b57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060128054806124d457fe5b600082815260209020810160001990810180546001600160a01b0319169055019055612503565b600101612427565b505b604051811515906001600160a01b038416907f8f1936ddb0e6b394e1edf1ac695592d1a059eecc4786f7083e71b11ec945e7ca90600090a35050565b603254306000908152603360205260409020549081101591565b60035481565b60025461010090046001600160a01b031633146125b1576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6107088111156125f3576040805162461bcd60e51b81526020600482015260086024820152670a8dede40d0d2ced60c31b604482015290519081900360640190fd5b600a819055604051429082907f9147f2d3ae1a14e9012c81c143c7c834a15f3afffcd29d3b35631aa0a3b0093e90600090a350565b60025461010090046001600160a01b03163314612678576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160d01b90910416151581151514156126de576040805162461bcd60e51b815260206004820152601c60248201527f4275726e2066756e6374696f6e206861736e2774206368616e67656400000000604482015290519081900360640190fd5b6002805460ff60d01b1916600160d01b831515908102919091179091556040514291907f5fae21b30f26eaaf4f039e77ecd02610468d0745d882434a2174baae8747605290600090a350565b60166020526000908152604090205460ff1681565b601f546001600160a01b031681565b600581565b600c5481565b602b5481565b60095481565b600254600160c01b900460ff1681565b60025461010090046001600160a01b031633146127c5576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6a013da329b63364718000008111612820576040805162461bcd60e51b815260206004820152601960248201527810995b1bddc81b5a5b9a5b5d5b481cd95b1b08185b5bdd5b9d603a1b604482015290519081900360640190fd5b6008819055604051429082907f283fcbdd6058cba4467ffc64b789f7da17231b7f66872896c41c987cc1f28b6290600090a350565b600254600160e81b900460ff1681565b600d5481565b60025461010090046001600160a01b031633146128bb576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b602f5460ff16156128ff576040805162461bcd60e51b81526020600482015260096024820152682a393c9030b3b0b4b760b91b604482015290519081900360640190fd5b42600b541115612944576040805162461bcd60e51b815260206004820152600b60248201526a4e6f7420696e2074696d6560a81b604482015290519081900360640190fd5b600061294e61209e565b9050600061296d60075461211d60065485614cf990919063ffffffff16565b6040805184815242602082015281519293507ffd9e18baf5879d8b1194dafab4a5798cfd9ac06e0282a3e1c7488b536bbccb43929081900390910190a16129b381614d52565b505050565b60055481565b60025461010090046001600160a01b03163314612a0e576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b03821660009081526018602052604090205460ff1615158115151415612a76576040805162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152601860205260409020805460ff19168215801591909117909155612af357601480546001810182556000919091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319166001600160a01b038416179055612bd4565b60005b601454811015612bd257826001600160a01b031660148281548110612b1757fe5b6000918252602090912001546001600160a01b03161415612bca57601480546000198101908110612b4457fe5b600091825260209091200154601480546001600160a01b039092169183908110612b6a57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506014805480612ba357fe5b600082815260209020810160001990810180546001600160a01b0319169055019055612bd2565b600101612af6565b505b604051811515906001600160a01b038416907f6b76292a2c57cfaa171cd21b53bac8a6a622da6e9c08b9f63a79a50275ff538990600090a35050565b60025461010090046001600160a01b03163314612c60576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6000612c79602c54602b546148a390919063ffffffff16565b90506000612c8b602d54602e54611a20565b612c9757602154612c9a565b60005b6031543060009081526033602052604081205492935091612cba916148fd565b90506000612cd78461211d612cd0866002614cf9565b8590614cf9565b90506000612d0b8561211d612d04602754612cfe6002602554614cf990919063ffffffff16565b906148a3565b8690614cf9565b90506000612d1d826121178686614cb7565b90508215612d2e57612d2e83614e6a565b8115612d4b57601b54612d4b9083906001600160a01b0316615060565b8015612d6857601a54612d689082906001600160a01b031661524b565b60408051858152602081018590528082018490526060810183905290517fa4903880285538fa6ffa51cad044f25c39cc7f89aa6cbbda844135ff94827edf9181900360800190a1505050505050565b604b81565b600e5481565b4290565b60006121236031546032546148fd90919063ffffffff16565b600254600160b01b900460ff1681565b6031546001600160a01b0382166000908152603360205260408120549091611a1491906148fd565b60025461010090046001600160a01b03163314612e67576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b60115481565b60005b601054811015612f455760108181548110612ed657fe5b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b158015612f2157600080fd5b505af1158015612f35573d6000803e3d6000fd5b505060019092019150612ebf9050565b50565b60025461010090046001600160a01b03163314612f98576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b038116612fe5576040805162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206164647265737360881b604482015290519081900360640190fd5b60405147906001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561301d573d6000803e3d6000fd5b5042826001600160a01b0316827f764ac18b38788ceb5d273876574dd816d95e562605c44e30f5638e7f92ceef8860405160405180910390a45050565b60006010828154811061306957fe5b6000918252602090912001546001600160a01b031692915050565b60275481565b601b546001600160a01b031681565b60265481565b6000806130ab83612def565b90506000806130b985613ca5565b91506130c485611cd3565b90506130d481612cfe85856148a3565b5091949350505050565b600a5481565b60025461010090046001600160a01b03163314613134576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6002805460ff60f01b1916600160f01b17905560405142906001907fb59dc360088de0f0576079416500b46f6ad5b08db9e752ed2688eaf8a6582a2990600090a3565b600254600160f01b900460ff1681565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b031633146131eb576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160c81b909104161515811515141561323f576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6002805460ff60c81b1916600160c81b831515908102919091179091556040514291907fcd99475fc595c5f66adc1960999196cae6d212cf2d00a7670a085507ead059b090600090a350565b60025461010090046001600160a01b031633146132db576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0382166000908152600f602052604090205460ff161515811515141561333d576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6001600160a01b0382166000818152600f6020526040808220805460ff191685151590811790915590519092917f2f640a0ab7e2a6d9ec57f3932923908568f2984073dcebac1b9a3db32debe91d91a35050565b600254600160b81b900460ff1681565b601981565b60018054604080516020601f6002600019610100878916150201909516949094049384018190048102820181019092528281526060939092909183018282801561199c5780601f106119715761010080835404028352916020019161199c565b60255481565b60215481565b601c546001600160a01b031681565b60025461010090046001600160a01b03163314613471576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b03821660009081526015602052604090205460ff16151581151514156134d9576040805162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152601560205260409020805460ff191682158015919091179091556135605760108054600180820183556000929092527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b03851617905560118054909101905561368a565b6010546001106135a9576040805162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015290519081900360640190fd5b60005b60105481101561368857826001600160a01b0316601082815481106135cd57fe5b6000918252602090912001546001600160a01b03161415613680576010805460001981019081106135fa57fe5b600091825260209091200154601080546001600160a01b03909216918390811061362057fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601080548061365957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055613688565b6001016135ac565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60025461010090046001600160a01b03163314613716576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b4281116137545760405162461bcd60e51b8152600401808060200182810382526022815260200180615cf76022913960400191505060405180910390fd5b600b819055604051429082907f3a97bbcdf9724661e5a691bf707b0b97b7fb6814227e9ee3253016b1198e32e790600090a350565b602c5481565b60008061379b8361309f565b905060006137b56137aa6146b3565b61211d846064614cf9565b905060006137c482600a6153a0565b600d540295945050505050565b3360009081526034602090815260408083206001600160a01b0386168452909152812054808310613825573360009081526034602090815260408083206001600160a01b0388168452909152812055613854565b61382f8184614cb7565b3360009081526034602090815260408083206001600160a01b03891684529091529020555b3360008181526034602090815260408083206001600160a01b038916808552908352928190205481519081529051929392600080516020615cd7833981519152929181900390910190a35060019392505050565b6020546001600160a01b031681565b6000826001600160a01b03811661390e576040805162461bcd60e51b81526020600482015260166024820152751c9958da5c1a595b9d081a5cc81b9bdd081d985b1a5960521b604482015290519081900360640190fd5b6139193385856149d6565b506001949350505050565b60176020526000908152604090205460ff1681565b60245481565b60156020526000908152604090205460ff1681565b60025461010090046001600160a01b031633146139a4576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160e01b9091041615158115151415613a0a576040805162461bcd60e51b815260206004820152601e60248201527f4c61756e63682066756e6374696f6e206861736e2774206368616e6765640000604482015290519081900360640190fd5b600254600160e01b900460ff16613a68576040805162461bcd60e51b815260206004820152601a60248201527f6c61756e636820706572696f6420616c7265616479206f766572000000000000604482015290519081900360640190fd5b6002805460ff60e01b1916600160e01b831515908102919091179091556040514291907f9e188e4be28f15bcf4cb979131d9f68653cba1ff26a8f7ee4bffcfaa1e9d437a90600090a350565b600254600160e01b900460ff1681565b60025461010090046001600160a01b03163314613b14576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6005811115613b65576040805162461bcd60e51b81526020600482015260186024820152771b585e08189c9858dad95d0819995948195e18d95959195960421b604482015290519081900360640190fd5b600d819055604051429082907f6b9cf7de592c5c9de3888c90ad577bfa90287fe1bb45e4c0a69822dbb578cc9a90600090a350565b600b5481565b600254600160d81b900460ff1681565b60186020526000908152604090205460ff1681565b601e546001600160a01b031681565b60225481565b60025461010090046001600160a01b03163314613c2a576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6002805460ff60b01b1916600160b01b85151502179055613c5c8161211d6b01d290004395eb7bbfffffff1985614cf9565b60325560405181908390851515907f512cfe1aedabdc06d12a680ace7434d88a9532c8853515536842f5ff52cbe55a90600090a4505050565b600254600160a81b900460ff1681565b60008060005b601254811015611d7c5760128181548110613cc257fe5b600091825260209182902001546040805163453d3db360e11b81526001600160a01b03888116600483015291519190921692638a7a7b669260248082019391829003018186803b158015613d1557600080fd5b505afa158015613d29573d6000803e3d6000fd5b505050506040513d6020811015613d3f57600080fd5b50519190910190600101613cab565b6001600160a01b03166000908152600f602052604090205460ff1690565b600080805b601054811015613dc057613db7613db0633b9aca0061211d60108581548110613d9657fe5b6000918252602090912001546001600160a01b0316612def565b83906148a3565b50600101613d71565b50613de2613dd4633b9aca0061211d61209e565b61211d612d04846002614cf9565b9392505050565b60075481565b60025461010090046001600160a01b03163314613e3f576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b038316613e9a576040805162461bcd60e51b815260206004820152601a60248201527f5f6c69717569646974795265636569766572206e6f7420736574000000000000604482015290519081900360640190fd5b6001600160a01b038216613ef1576040805162461bcd60e51b815260206004820152601960248201527817dd1c99585cdd5c9e549958d95a5d995c881b9bdd081cd95d603a1b604482015290519081900360640190fd5b6001600160a01b038116613f4c576040805162461bcd60e51b815260206004820152601e60248201527f5f7269736b4672656556616c75655265636569766572206e6f74207365740000604482015290519081900360640190fd5b601980546001600160a01b03199081166001600160a01b03868116918217909355601a80548316868516908117909155601b80549093169385169384179092556040517fb923dcdfa226a9163e9324bacc07634c44fc26e1268f8341bc0989d83f4794b890600090a4505050565b60025461010090046001600160a01b0316331461400a576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b600061401a87612cfe8a896148a3565b9050600061402c84612cfe84886148a3565b905060198911158015614040575060198811155b801561404d575060198711155b801561405a575060198511155b8015614067575060198411155b6140a25760405162461bcd60e51b8152600401808060200182810382526024815260200180615c4f6024913960400191505060405180910390fd5b601982106140ef576040805162461bcd60e51b81526020600482015260156024820152746578636565646564206d617820627579206665657360581b604482015290519081900360640190fd5b6019811061413d576040805162461bcd60e51b81526020600482015260166024820152756578636565646564206d61782073656c6c206665657360501b604482015290519081900360640190fd5b602189905560258890556022879055602685905560278490556023869055602483905561416e88612cfe8b8a6148a3565b602b819055506141a361419e60295460285403612cfe602754612cfe602654602b546148a390919063ffffffff16565b6153b6565b86888a7f741ea12e6017fe664434788bce4b248cf0e6182249fcbbe2477b971e0e0d1d6388888b602454602b54604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a4505050505050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b60025461010090046001600160a01b03163314614287576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0381166142dc576040805162461bcd60e51b815260206004820152601760248201527663616e206e6f742075736520307830206164647265737360481b604482015290519081900360640190fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f214c2cae0f5c69a93599efe5c6da92cb4e38b02fe0544f339c189b21f57c5a6090600090a250565b60025461010090046001600160a01b03163314614376576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160b81b90910416151581151514156143ca576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6002805460ff60b81b1916600160b81b831515908102919091179091556040514291907f832ed7895e341f17afc036cc051864a91809bb5c898a2d5645323b97b6925ec990600090a350565b60108181548110611b3c57600080fd5b60285481565b60025461010090046001600160a01b0316331461447c576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6040516001600160a01b038216907fb1eb34684306bcea7f9ed508931dc13b5993c8fdd00fe65c2e4680ae2610a70190600090a2612f45816153bb565b60025461010090046001600160a01b03163314614509576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160c01b909104161515811515141561455d576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6002805460ff60c01b1916600160c01b831515908102919091179091556040514291907f06667769ba3c307bbbc51d6789871daff6351211f28781c8ae7c391f84cbe38390600090a350565b60045481565b60025461010090046001600160a01b031633146145ff576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6a013da329b63364718000008111614659576040805162461bcd60e51b815260206004820152601860248201527710995b1bddc81b5a5b9a5b5d5b48189d5e48185b5bdd5b9d60421b604482015290519081900360640190fd5b6009819055604051429082907f3c0d1676b036060d919711fdd530ad3de8d21c3b3ba80e014042db98e8c7763890600090a350565b60128181548110611b3c57600080fd5b601d546001600160a01b031681565b60235481565b60008060008060008060008060005b60105481101561489757601081815481106146d957fe5b9060005260206000200160009054906101000a90046001600160a01b03169250826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561473257600080fd5b505afa158015614746573d6000803e3d6000fd5b505050506040513d606081101561475c57600080fd5b5080516020808301516040938401518451630dfe168160e01b81529451939c50909a5098506001600160a01b03861692630dfe16819260048083019392829003018186803b1580156147ad57600080fd5b505afa1580156147c1573d6000803e3d6000fd5b505050506040513d60208110156147d757600080fd5b50516040805163d21220a760e01b815290519196506001600160a01b0385169163d21220a791600480820192602092909190829003018186803b15801561481d57600080fd5b505afa158015614831573d6000803e3d6000fd5b505050506040513d602081101561484757600080fd5b505193506001600160a01b03851630141561486f57876001600160701b03168201915061488f565b6001600160a01b03841630141561488f57866001600160701b0316820191505b6001016146c2565b50965050505050505090565b600082820183811015613de2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000613de283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615472565b600081848411156149ce5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561499357818101518382015260200161497b565b50505050905090810190601f1680156149c05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0383166000908152600f6020526040812054819060ff1680614a1757506001600160a01b0384166000908152600f602052604090205460ff165b600254909150600160a81b900460ff1680614a2f5750805b614a76576040805162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd081cdd185c9d1959606a1b604482015290519081900360640190fd5b6001600160a01b03841660009081526015602052604090205460ff168015614a9c575080155b15614ae757600854831115614ae7576040805162461bcd60e51b815260206004820152600c60248201526b115c9c9bdc88185b5bdd5b9d60a21b604482015290519081900360640190fd5b6001600160a01b03851660009081526015602052604090205460ff168015614b0d575080155b15614b6057600954831115614b60576040805162461bcd60e51b815260206004820152601460248201527342757920416d6f756e742045786365656465642160601b604482015290519081900360640190fd5b602f5460ff1615614b7e57614b768585856154d7565b915050613de2565b6000614b9560315485614cf990919063ffffffff16565b9050614b9f615594565b15614bac57614bac61560e565b6001600160a01b038616600090815260336020526040902054614bcf9082614cb7565b6001600160a01b038716600090815260336020526040812091909155614bf58787615762565b614bff5781614c0a565b614c0a87878461580e565b6001600160a01b038716600090815260336020526040902054909150614c3090826148a3565b6001600160a01b0380881660008181526033602052604090209290925560315490891690600080516020615cb783398151915290614c6f9085906148fd565b60408051918252519081900360200190a3614c8861599c565b8015614c9d5750600254600160b81b900460ff165b15614caa57614caa6159a5565b5060019695505050505050565b6000613de283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061493f565b600082614d0857506000611a14565b82820282848281614d1557fe5b0414613de25760405162461bcd60e51b8152600401808060200182810382526021815260200180615c966021913960400191505060405180910390fd5b60004282614d9c57603054604080519182525182917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a25050603054611d80565b6000831215614dbe57603054614db6906000859003614cb7565b603055614dcf565b603054614dcb90846148a3565b6030555b6030546001600160801b031015614dec576001600160801b036030555b603054614e07906b01d290004395eb7bbfffffff19906148fd565b603155614e13816159e5565b614e1b615a43565b15614e2857614e28615a53565b603054604080519182525182917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a25050603054919050565b6000614e778260026148fd565b90506000614e858383614cb7565b600254909150600160c81b900460ff1615614f045747614ea5833061524b565b6000614eb14783614cb7565b9050614ebd8382615ad6565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a150506129b3565b601c54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015614f4f57600080fd5b505afa158015614f63573d6000803e3d6000fd5b505050506040513d6020811015614f7957600080fd5b50519050614f878330615060565b601c54604080516370a0823160e01b8152306004820152905160009261500d9285926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015614fdb57600080fd5b505afa158015614fef573d6000803e3d6000fd5b505050506040513d602081101561500557600080fd5b505190614cb7565b90506150198382615b7c565b604080518581526020810183905280820185905290517f7a4f8347ba895fa7bcb359c73d941a5783865500645a7111f978008a5332ffa69181900360600190a15050505050565b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061509157fe5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156150e557600080fd5b505afa1580156150f9573d6000803e3d6000fd5b505050506040513d602081101561510f57600080fd5b505181518290600190811061512057fe5b6001600160a01b039283166020918202929092010152601c5482519116908290600290811061514b57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050601d60009054906101000a90046001600160a01b03166001600160a01b0316635c11d7958460008486426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156152055781810151838201526020016151ed565b505050509050019650505050505050600060405180830381600087803b15801561522e57600080fd5b505af1158015615242573d6000803e3d6000fd5b50505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061527a57fe5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156152ce57600080fd5b505afa1580156152e2573d6000803e3d6000fd5b505050506040513d60208110156152f857600080fd5b505181518290600190811061530957fe5b6001600160a01b03928316602091820292909201810191909152601d5460405163791ac94760e01b8152600481018781526000602483018190528786166064840152426084840181905260a060448501908152885160a48601528851959097169663791ac947968b9693958a958c9590939260c49092019187810191028083838b83156152055781810151838201526020016151ed565b60008183106153af5781613de2565b5090919050565b602c55565b6001600160a01b03811661540b576040805162461bcd60e51b815260206004820152601260248201527104f776e65722063616e206e6f7420626520360741b604482015290519081900360640190fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081836154c15760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561499357818101518382015260200161497b565b5060008385816154cd57fe5b0495945050505050565b6000806154ef60315484614cf990919063ffffffff16565b6001600160a01b0386166000908152603360205260409020549091506155159082614cb7565b6001600160a01b03808716600090815260336020526040808220939093559086168152205461554490826148a3565b6001600160a01b038086166000818152603360209081526040918290209490945580518781529051919392891692600080516020615cb783398151915292918290030190a3506001949350505050565b3360009081526015602052604081205460ff161580156155b75750602f5460ff16155b80156155cc5750600254600160b01b900460ff165b80156155ee575060006155ec602c54602b546148a390919063ffffffff16565b115b801561212357505060325430600090815260336020526040902054101590565b602f805460ff19166001179055602c54602b5460009161562e91906148a3565b90506000615640602d54602e54611a20565b61564c5760215461564f565b60005b603154306000908152603360205260408120549293509161566f916148fd565b905060006156858461211d612cd0866002614cf9565b905060006156ac8561211d612d04602754612cfe6002602554614cf990919063ffffffff16565b905060006156be826121178686614cb7565b905082156156cf576156cf83614e6a565b81156156ec57601b546156ec9083906001600160a01b0316615060565b801561570957601a546157099082906001600160a01b031661524b565b60408051858152602081018590528082018490526060810183905290517fa4903880285538fa6ffa51cad044f25c39cc7f89aa6cbbda844135ff94827edf9181900360800190a15050602f805460ff1916905550505050565b6001600160a01b0382166000908152600f602052604081205460ff16806157a157506001600160a01b0382166000908152600f602052604090205460ff165b156157ae57506000611a14565b600254600160c01b900460ff16156157c857506001611a14565b6001600160a01b03831660009081526015602052604090205460ff168061580757506001600160a01b03821660009081526015602052604090205460ff165b9050611a14565b602b546023546001600160a01b0384166000908152601560205260408120549092919060ff161561585657602c549150615853602454826148a390919063ffffffff16565b90505b600254600160d81b900460ff1615615876576158718661378f565b820191505b6001600160a01b03861660009081526018602052604090205460ff16806158b557506001600160a01b03851660009081526018602052604090205460ff165b156158c85760318210156158c857603191505b60006158d9606461211d8786614cf9565b90506158e3615c2d565b80156158ef5750600082115b156159205761592061591b606461211d856159156031548b6148fd90919063ffffffff16565b90614cf9565b615c3d565b3060009081526033602052604090205461593a90826148a3565b306000818152603360205260409020919091556031546001600160a01b03891690600080516020615cb7833981519152906159769085906148fd565b60408051918252519081900360200190a36159918582614cb7565b979650505050505050565b600b5442101590565b602f5460ff166159e35760006159b961209e565b905060006159d860075461211d60065485614cf990919063ffffffff16565b90506129b381614d52565b565b600a546159f39082906148a3565b600b81905550615a3460045461211d615a2b615a2260075461211d600654600454614cf990919063ffffffff16565b600454906148a3565b60035490614cf9565b60035550600c80546001019055565b600254600160e01b900460ff1690565b6000615a78615a6f600a546005546148fd90919063ffffffff16565b600c54906148fd565b9050615a85816005614cf9565b602981905560285411615aa6576002805460ff60e01b191690556028546029555b612f4561419e60295460285403612cfe602454612cfe602754612cfe602654602b546148a390919063ffffffff16565b601d546019546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b158015615b4b57600080fd5b505af1158015615b5f573d6000803e3d6000fd5b50505050506040513d6060811015615b7657600080fd5b50505050565b601d54601c546019546040805162e8e33760e81b81523060048201526001600160a01b039384166024820152604481018790526064810186905260006084820181905260a4820181905292841660c48201524260e48201529051929093169263e8e33700926101048083019360609383900390910190829087803b158015615c0357600080fd5b505af1158015615c17573d6000803e3d6000fd5b505050506040513d6060811015615b7657600080fd5b600254600160d01b900460ff1690565b615c4a3061dead836149d6565b505056fe7365742066656520686967686572207468616e206d61782066656520616c6c6f77696e6754617820427261636b65742066756e6374696f6e206861736e2774206368616e676564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9254e657874207265626173652063616e206e6f7420626520696e207468652070617374a26469706673582212209b36d5d1aa9f4f10f44bbf37d23c32cd65fbdb833d1f75b1da9190857f44ea9064736f6c63430007060033

Deployed Bytecode Sourcemap

11113:43403:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41912:336;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41912:336:0;;:::i;:::-;;49171:313;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49171:313:0;;;;;;;:::i;11921:58::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;42489:230;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42489:230:0;;;;:::i;5029:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11457:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;13817:81;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;13817:81:0;;;;;;;;;;;;;;34587:243;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34587:243:0;;;;;;;;:::i;11808:42::-;;;;;;;;;;;;;:::i;24056:170::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24056:170:0;;;;;;;:::i;41657:247::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41657:247:0;;;;:::i;13175:44::-;;;;;;;;;;;;;:::i;17014:102::-;;;;;;;;;;;;;:::i;12439:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12439:37:0;;:::i;48551:337::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48551:337:0;;;;:::i;14643:36::-;;;;;;;;;;;;;:::i;42727:239::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42727:239:0;;;;;;;:::i;21418:378::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21418:378:0;-1:-1:-1;;;;;21418:378:0;;:::i;22672:774::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22672:774:0;;:::i;:::-;;;;;;;-1:-1:-1;;;;;22672:774:0;;;;;;;;;;;;;;;;;;;;;;26473:453;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26473:453:0;;;;;;;;;;;;;;;;;:::i;11413:37::-;;;;;;;;;;;;;:::i;13728:82::-;;;;;;;;;;;;;:::i;17579:91::-;;;;;;;;;;;;;:::i;19296:203::-;;;;;;;;;;;;;:::i;14594:42::-;;;;;;;;;;;;;:::i;5215:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47184:281;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;47184:281:0;;;;;;;;:::i;12483:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12483:27:0;;:::i;34185:394::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34185:394:0;;;;;;;;:::i;13047:62::-;;;;;;;;;;;;;:::i;38497:690::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38497:690:0;;;;;;;;;;:::i;19048:240::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;11672:39;;;;;;;;;;;;;:::i;48896:267::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48896:267:0;;:::i;47739:288::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47739:288:0;;;;:::i;12581:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12581:48:0;-1:-1:-1;;;;;12581:48:0;;:::i;14141:24::-;;;;;;;;;;;;;:::i;12795:52::-;;;;;;;;;;;;;:::i;12157:30::-;;;;;;;;;;;;;:::i;14686:73::-;;;;;;;;;;;;;:::i;11986:57::-;;;;;;;;;;;;;:::i;11365:41::-;;;;;;;;;;;;;:::i;50293:262::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50293:262:0;;:::i;11588:37::-;;;;;;;;;;;;;:::i;12194:39::-;;;;;;;;;;;;;:::i;35971:447::-;;;;;;;;;;;;;:::i;11765:36::-;;;;;;;;;;;;;:::i;40167:648::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40167:648:0;;;;;;;;;;:::i;30785:1286::-;;;;;;;;;;;;;:::i;12854:56::-;;;;;;;;;;;;;:::i;12240:36::-;;;;;;;;;;;;;:::i;19507:102::-;;;;;;;;;;;;;:::i;17799:126::-;;;;;;;;;;;;;:::i;11291:30::-;;;;;;;;;;;;;:::i;17310:136::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17310:136:0;-1:-1:-1;;;;;17310:136:0;;:::i;10590:126::-;;;;;;;;;;;;;:::i;12365:31::-;;;;;;;;;;;;;:::i;24234:156::-;;;;;;;;;;;;;:::i;46870:306::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46870:306:0;-1:-1:-1;;;;;46870:306:0;;:::i;17454:117::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17454:117:0;;:::i;14508:34::-;;;;;;;;;;;;;:::i;13905:86::-;;;;;;;;;;;;;:::i;14462:39::-;;;;;;;;;;;;;:::i;20044:683::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20044:683:0;-1:-1:-1;;;;;20044:683:0;;:::i;12052:37::-;;;;;;;;;;;;;:::i;46327:135::-;;;;;;;;;;;;;:::i;11632:31::-;;;;;;;;;;;;;:::i;10401:79::-;;;;;;;;;;;;;:::i;49754:234::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49754:234:0;;;;:::i;42256:225::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;42256:225:0;;;;;;;;;;:::i;11328:30::-;;;;;;;;;;;;;:::i;12747:41::-;;;;;;;;;;;;;:::i;5120:87::-;;;;;;;;;;;;;:::i;14427:28::-;;;;;;;;;;;;;:::i;14282:31::-;;;;;;;;;;;;;:::i;13998:70::-;;;;;;;;;;;;;:::i;40823:826::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40823:826:0;;;;;;;;;;:::i;49996:289::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49996:289:0;;:::i;14766:133::-;;;;;;;;;;;;;:::i;23454:594::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23454:594:0;-1:-1:-1;;;;;23454:594:0;;:::i;33589:588::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33589:588:0;;;;;;;;:::i;14172:19::-;;;;;;;;;;;;;:::i;24398:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24398:199:0;;;;;;;;:::i;12636:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12636:48:0;-1:-1:-1;;;;;12636:48:0;;:::i;14390:30::-;;;;;;;;;;;;;:::i;12517:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12517:57:0;-1:-1:-1;;;;;12517:57:0;;:::i;48102:405::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48102:405:0;;;;:::i;11543:38::-;;;;;;;;;;;;;:::i;46470:392::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46470:392:0;;:::i;12096:54::-;;;;;;;;;;;;;:::i;11497:39::-;;;;;;;;;;;;;:::i;12691:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12691:47:0;-1:-1:-1;;;;;12691:47:0;;:::i;14108:26::-;;;;;;;;;;;;;:::i;14320:30::-;;;;;;;;;;;;;:::i;42974:289::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42974:289:0;;;;;;;;;;;;;;:::i;11237:47::-;;;;;;;;;;;;;:::i;20999:359::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20999:359:0;-1:-1:-1;;;;;20999:359:0;;:::i;17678:113::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17678:113:0;-1:-1:-1;;;;;17678:113:0;;:::i;19617:419::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19617:419:0;;:::i;11857:57::-;;;;;;;;;;;;;:::i;43271:709::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;43271:709:0;;;;;;;;;;;;;;;;;;;:::i;43988:2004::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43988:2004:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17124:178::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17124:178:0;;;;;;;;;;:::i;46097:222::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46097:222:0;-1:-1:-1;;;;;46097:222:0;;:::i;47473:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47473:222:0;;;;:::i;12329:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12329:29:0;;:::i;14549:38::-;;;;;;;;;;;;;:::i;10724:152::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10724:152:0;-1:-1:-1;;;;;10724:152:0;;:::i;49492:254::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49492:254:0;;;;:::i;11718:40::-;;;;;;;;;;;;;:::i;50563:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50563:269:0;;:::i;12403:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12403:29:0;;:::i;14077:24::-;;;;;;;;;;;;;:::i;14357:26::-;;;;;;;;;;;;;:::i;21804:860::-;;;;;;;;;;;;;:::i;41912:336::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;42015:6:::1;41995:16;;:26;;41987:50;;;::::0;;-1:-1:-1;;;41987:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;41987:50:0;;;;;;;;;;;;;::::1;;12908:2;42070:6;:37;;42048:111;;;::::0;;-1:-1:-1;;;42048:111:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;42048:111:0;;;;;;;;;;;;;::::1;;42170:16;:25:::0;;;42213:27:::1;::::0;42189:6;;42213:27:::1;::::0;;;::::1;41912:336:::0;:::o;49171:313::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;49305:11:::1;:26:::0;;;49342:22:::1;:48:::0;;;49406:70:::1;::::0;49460:15:::1;::::0;49367:23;;49319:12;;49406:70:::1;::::0;-1:-1:-1;;49406:70:0::1;49171:313:::0;;:::o;11921:58::-;;;;:::o;42489:230::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;42570:17:::1;::::0;::::1;-1:-1:-1::0;;;42570:17:0;;::::1;;:27;;::::0;::::1;;;;42562:51;;;::::0;;-1:-1:-1;;;42562:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;42562:51:0;;;;;;;;;;;;;::::1;;42624:17;:26:::0;;-1:-1:-1;;;;42624:26:0::1;-1:-1:-1::0;;;42624:26:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;42666:45:::1;::::0;;;;;42695:15:::1;42666:45;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;42489:230:::0;:::o;5029:83::-;5099:5;5092:12;;;;;;;;-1:-1:-1;;5092:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5066:13;;5092:12;;5099:5;;5092:12;;5099:5;5092:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5029:83;:::o;11457:33::-;;;-1:-1:-1;;;11457:33:0;;;;;:::o;13817:81::-;;;-1:-1:-1;;;;;13817:81:0;;:::o;34587:243::-;34720:10;34678:4;34702:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;34702:38:0;;;;;;;;;;;:46;;;34764:36;;;;;;;34678:4;;34702:38;;34720:10;;-1:-1:-1;;;;;;;;;;;34764:36:0;;;;;;;-1:-1:-1;34818:4:0;34587:243;;;;;:::o;11808:42::-;;;;:::o;24056:170::-;24151:4;24212:6;24180:29;24200:8;24180:19;:29::i;:::-;:38;;24056:170;-1:-1:-1;;;24056:170:0:o;41657:247::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;41748:27:::1;::::0;::::1;-1:-1:-1::0;;;41748:27:0;;::::1;;:37;;::::0;::::1;;;;41740:61;;;::::0;;-1:-1:-1;;;41740:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;41740:61:0;;;;;;;;;;;;;::::1;;41812:27;:36:::0;;-1:-1:-1;;;;41812:36:0::1;-1:-1:-1::0;;;41812:36:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;41866:30:::1;::::0;::::1;::::0;-1:-1:-1;;41866:30:0::1;41657:247:::0;:::o;13175:44::-;13216:3;13175:44;:::o;17014:102::-;17096:12;;17014:102;:::o;12439:37::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12439:37:0;;-1:-1:-1;12439:37:0;:::o;48551:337::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;48653:19:::1;::::0;::::1;-1:-1:-1::0;;;48653:19:0;;::::1;;:43;;::::0;::::1;;;;48631:128;;;;-1:-1:-1::0;;;48631:128:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48770:19;:42:::0;;-1:-1:-1;;;;48770:42:0::1;-1:-1:-1::0;;;48770:42:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;48828:52:::1;::::0;48864:15:::1;::::0;48770:42;48828:52:::1;::::0;-1:-1:-1;;48828:52:0::1;48551:337:::0;:::o;14643:36::-;;;;:::o;42727:239::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;42834:15:::1;:24:::0;;;42869:26:::1;:37:::0;;;42922:36:::1;::::0;42898:8;;42852:6;;42922:36:::1;::::0;-1:-1:-1;;42922:36:0::1;42727:239:::0;;:::o;21418:378::-;21515:7;21540:24;21582:9;21577:176;21601:20;:27;21597:31;;21577:176;;;21685:20;21706:1;21685:23;;;;;;;;;;;;;;;;;;;21670:71;;;-1:-1:-1;;;21670:71:0;;-1:-1:-1;;;;;21670:71:0;;;;;;;;;21685:23;;;;;21670:63;;:71;;;;;;;;;;;21685:23;21670:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21670:71:0;21650:91;;;;;21630:3;;21577:176;;;-1:-1:-1;21772:16:0;-1:-1:-1;21418:378:0;;;;:::o;22672:774::-;22767:15;22793:16;22820;22860:25;22896:14;22921;22946:26;23014:12;23027:3;23014:17;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23014:17:0;22985:47;;23086:17;-1:-1:-1;;;;;23086:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23086:41:0;;;;;;;;;;;;23149:26;;-1:-1:-1;;;23149:26:0;;;;23086:41;;-1:-1:-1;23086:41:0;;-1:-1:-1;23086:41:0;-1:-1:-1;;;;;;23149:24:0;;;;;:26;;;;;23086:41;23149:26;;;;;:24;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23149:26:0;23195;;;-1:-1:-1;;;23195:26:0;;;;23149;;-1:-1:-1;;;;;;23195:24:0;;;;;:26;;;;;23149;;23195;;;;;;;;:24;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23195:26:0;;-1:-1:-1;;;;;;23238:23:0;;23256:4;23238:23;23234:156;;;23289:8;-1:-1:-1;;;;;23278:19:0;;;;;23234:156;;;-1:-1:-1;;;;;23319:23:0;;23337:4;23319:23;23315:75;;;23370:8;-1:-1:-1;;;;;23359:19:0;;;;;23315:75;23402:36;;;;22672:774;;;;;:::o;26473:453::-;26616:4;26603:2;-1:-1:-1;;;;;15162:18:0;;15154:66;;;;;-1:-1:-1;;;15154:66:0;;;;;;;;;;;;-1:-1:-1;;;15154:66:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26637:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;26661:10:::1;26637:35:::0;;;;;;;;-1:-1:-1;;26637:50:0::1;26633:221;;26742:100;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;26742:100:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;26742:23:0;::::1;-1:-1:-1::0;26742:23:0;;;:17:::1;:23:::0;;;;;26780:10:::1;26742:63:::0;;;;;;;;;;:100:::1;::::0;26810:5;;26742:67:::1;:100::i;:::-;-1:-1:-1::0;;;;;26704:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;26728:10:::1;26704:35:::0;;;;;;;:138;26633:221:::1;26866:30;26880:4;26886:2;26890:5;26866:13;:30::i;:::-;-1:-1:-1::0;26914:4:0::1;::::0;26473:453;-1:-1:-1;;;;;26473:453:0:o;11413:37::-;;;-1:-1:-1;;;11413:37:0;;;;;:::o;13728:82::-;;;-1:-1:-1;;;;;13728:82:0;;:::o;17579:91::-;17651:11;;17579:91;:::o;19296:203::-;19464:16;;19425:12;:18;;;;13604:42;19349:7;19401:18;;;;;19349:7;;19385:106;;19464:16;;19386:58;;19425:18;19386:34;;-1:-1:-1;;13461:54:0;19386:14;:34::i;:::-;:38;;:58::i;:::-;19385:64;;:106::i;:::-;19369:122;;19296:203;:::o;14594:42::-;;;;:::o;5215:83::-;5281:9;;;;5215:83;:::o;47184:281::-;10542:6;;47286:12;;10542:6;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;47321:62:::1;::::0;;47367:15:::1;47321:62:::0;;;;47359:6;;47347:10:::1;::::0;-1:-1:-1;;;;;47321:62:0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;47401:56;::::0;;-1:-1:-1;;;47401:56:0;;47438:10:::1;47401:56;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;47401:36:0;::::1;::::0;::::1;::::0;:56;;;;;::::1;::::0;;;;;;;;-1:-1:-1;47401:36:0;:56;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;47401:56:0;;47184:281;-1:-1:-1;;;47184:281:0:o;12483:27::-;;;;;;;;;;;;34185:394;34358:10;34277:4;34340:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;34340:58:0;;;;;;;;;;:74;;34403:10;34340:62;:74::i;:::-;34317:10;34299:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;34299:38:0;;;;;;;;;;;;:115;;;34430:119;;;;;;34299:38;;-1:-1:-1;;;;;;;;;;;34430:119:0;;;;;;;;;;-1:-1:-1;34567:4:0;34185:394;;;;:::o;13047:62::-;13093:16;13047:62;:::o;38497:690::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;38608:30:0;::::1;;::::0;;;:16:::1;:30;::::0;;;;;::::1;;:40;;::::0;::::1;;;;38600:70;;;::::0;;-1:-1:-1;;;38600:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;38600:70:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;38683:30:0;::::1;;::::0;;;:16:::1;:30;::::0;;;;:39;;-1:-1:-1;;38683:39:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;38735:390:::1;;38762:12;:31:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;38762:31:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;38762:31:0::1;-1:-1:-1::0;;;;;38762:31:0;::::1;;::::0;;38735:390:::1;;;38831:9;38826:288;38850:12;:19:::0;38846:23;::::1;38826:288;;;38918:12;-1:-1:-1::0;;;;;38899:31:0::1;:12;38912:1;38899:15;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38899:15:0::1;:31;38895:204;;;38973:12;38986:19:::0;;-1:-1:-1;;38986:23:0;;;38973:37;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;38955:12:::1;:15:::0;;-1:-1:-1;;;;;38973:37:0;;::::1;::::0;38968:1;;38955:15;::::1;;;;;;;;;;;;;:55;;;;;-1:-1:-1::0;;;;;38955:55:0::1;;;;;-1:-1:-1::0;;;;;38955:55:0::1;;;;;;39033:12;:18;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;39033:18:0;;;;;-1:-1:-1;;;;;;39033:18:0::1;::::0;;;;;39074:5:::1;;38895:204;38871:3;;38826:288;;;;38735:390;39142:37;::::0;;::::1;;::::0;-1:-1:-1;;;;;39142:37:0;::::1;::::0;::::1;::::0;;;::::1;38497:690:::0;;:::o;19048:240::-;19205:16;;19195:4;19095:20;19174:27;;;:12;:27;;;;;;:47;;;;;19048:240::o;11672:39::-;;;;:::o;48896:267::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;13164:4:::1;48988:16;:40;;48980:61;;;::::0;;-1:-1:-1;;;48980:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;48980:61:0;;;;;;;;;;;;;::::1;;49052:15;:34:::0;;;49102:53:::1;::::0;49139:15:::1;::::0;49070:16;;49102:53:::1;::::0;;;::::1;48896:267:::0;:::o;47739:288::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;47832:13:::1;::::0;::::1;-1:-1:-1::0;;;47832:13:0;;::::1;;:31;;::::0;::::1;;;;47810:109;;;::::0;;-1:-1:-1;;;47810:109:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;47930:13;:30:::0;;-1:-1:-1;;;;47930:30:0::1;-1:-1:-1::0;;;47930:30:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;47976:43:::1;::::0;48003:15:::1;::::0;47930:30;47976:43:::1;::::0;-1:-1:-1;;47976:43:0::1;47739:288:::0;:::o;12581:48::-;;;;;;;;;;;;;;;:::o;14141:24::-;;;-1:-1:-1;;;;;14141:24:0;;:::o;12795:52::-;12846:1;12795:52;:::o;12157:30::-;;;;:::o;14686:73::-;;;;:::o;11986:57::-;;;;:::o;11365:41::-;;;-1:-1:-1;;;11365:41:0;;;;;:::o;50293:262::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;13024:16:::1;50379:7;:30;50371:68;;;::::0;;-1:-1:-1;;;50371:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;50371:68:0;;;;;;;;;;;;;::::1;;50450:24;:34:::0;;;50500:47:::1;::::0;50531:15:::1;::::0;50477:7;;50500:47:::1;::::0;;;::::1;50293:262:::0;:::o;11588:37::-;;;-1:-1:-1;;;11588:37:0;;;;;:::o;12194:39::-;;;;:::o;35971:447::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;36034:6:::1;::::0;::::1;;36033:7;36025:29;;;::::0;;-1:-1:-1;;;36025:29:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36025:29:0;;;;;;;;;;;;;::::1;;36087:15;36073:10;;:29;;36065:53;;;::::0;;-1:-1:-1;;;36065:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36065:53:0;;;;;;;;;;;;;::::1;;36131:25;36159:22;:20;:22::i;:::-;36131:50;;36192:18;36234:62;36273:22;;36234:34;36256:11;;36234:17;:21;;:34;;;;:::i;:62::-;36325:51;::::0;;;;;36360:15:::1;36325:51;::::0;::::1;::::0;;;36192:115;;-1:-1:-1;36325:51:0::1;::::0;;;;;;;;;::::1;36387:23;36398:11;36387:10;:23::i;:::-;;10573:1;;35971:447::o:0;11765:36::-;;;;:::o;40167:648::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;40260:27:0;::::1;;::::0;;;:15:::1;:27;::::0;;;;;::::1;;:37;;::::0;::::1;;;;40252:67;;;::::0;;-1:-1:-1;;;40252:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;40252:67:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;40332:27:0;::::1;;::::0;;;:15:::1;:27;::::0;;;;:36;;-1:-1:-1;;40332:36:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;40381:372:::1;;40408:10;:27:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;40408:27:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;40408:27:0::1;-1:-1:-1::0;;;;;40408:27:0;::::1;;::::0;;40381:372:::1;;;40473:9;40468:274;40492:10;:17:::0;40488:21;::::1;40468:274;;;40556:10;-1:-1:-1::0;;;;;40539:27:0::1;:10;40550:1;40539:13;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;40539:13:0::1;:27;40535:192;;;40607:10;40618:17:::0;;-1:-1:-1;;40618:21:0;;;40607:33;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;40591:10:::1;:13:::0;;-1:-1:-1;;;;;40607:33:0;;::::1;::::0;40602:1;;40591:13;::::1;;;;;;;;;;;;;:49;;;;;-1:-1:-1::0;;;;;40591:49:0::1;;;;;-1:-1:-1::0;;;;;40591:49:0::1;;;;;;40663:10;:16;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;40663:16:0;;;;;-1:-1:-1;;;;;;40663:16:0::1;::::0;;;;;40702:5:::1;;40535:192;40511:3;;40468:274;;;;40381:372;40770:37;::::0;;::::1;;::::0;-1:-1:-1;;;;;40770:37:0;::::1;::::0;::::1;::::0;;;::::1;40167:648:::0;;:::o;30785:1286::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;30841:20:::1;30864:29;30880:12;;30864:11;;:15;;:29;;;;:::i;:::-;30841:52;;30906:27;30936:97;30966:15;;30996:26;;30936:15;:97::i;:::-;:134;;31058:12;;30936:134;;;31045:1;30936:134;31158:16;::::0;31133:4:::1;31081:28;31112:27:::0;;;:12:::1;:27;::::0;;;;;30906:164;;-1:-1:-1;31081:28:0;31112:73:::1;::::0;:31:::1;:73::i;:::-;31081:104:::0;-1:-1:-1;31198:23:0::1;31224:90;31301:12:::0;31224:62:::1;31259:26;:19:::0;31283:1:::1;31259:23;:26::i;:::-;31224:20:::0;;:34:::1;:62::i;:90::-;31198:116;;31327:19;31349:101;31437:12;31349:73;31384:37;31405:15;;31384:16;31398:1;31384:9;;:13;;:16;;;;:::i;:::-;:20:::0;::::1;:37::i;:::-;31349:20:::0;;:34:::1;:73::i;:101::-;31327:123:::0;-1:-1:-1;31463:24:0::1;31490:78;31327:123:::0;31490:51:::1;:20:::0;31525:15;31490:34:::1;:51::i;:78::-;31463:105:::0;-1:-1:-1;31585:19:0;;31581:84:::1;;31621:32;31637:15;31621;:32::i;:::-;31681:15:::0;;31677:108:::1;;31751:21;::::0;31713:60:::1;::::0;31738:11;;-1:-1:-1;;;;;31751:21:0::1;31713:24;:60::i;:::-;31801:20:::0;;31797:108:::1;;31876:16;::::0;31838:55:::1;::::0;31858:16;;-1:-1:-1;;;;;31876:16:0::1;31838:19;:55::i;:::-;31922:141;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;10573:1;;;;;;30785:1286::o:0;12854:56::-;12908:2;12854:56;:::o;12240:36::-;;;;:::o;19507:102::-;19586:15;19507:102;:::o;17799:126::-;17852:7;17879:38;17900:16;;17879;;:20;;:38;;;;:::i;11291:30::-;;;-1:-1:-1;;;11291:30:0;;;;;:::o;17310:136::-;17421:16;;-1:-1:-1;;;;;17399:17:0;;17372:7;17399:17;;;:12;:17;;;;;;17372:7;;17399:39;;:17;:21;:39::i;10590:126::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;10671:6:::1;::::0;10652:26:::1;::::0;10671:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;10671:6:0::1;::::0;10652:26:::1;::::0;;;::::1;10689:6;:19:::0;;-1:-1:-1;;;;;;10689:19:0::1;::::0;;10590:126::o;12365:31::-;;;;:::o;24234:156::-;24279:9;24274:109;24298:12;:19;24294:23;;24274:109;;;24348:12;24361:1;24348:15;;;;;;;;;;;;;;;;;24339:32;;;-1:-1:-1;;;;;;24339:32:0;;;;-1:-1:-1;;;;;24348:15:0;;;;24339:30;;:32;;;;;;;;;;24348:15;;24339:32;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24319:3:0;;;;;-1:-1:-1;24274:109:0;;-1:-1:-1;24274:109:0;;;24234:156::o;46870:306::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;46954:25:0;::::1;46946:53;;;::::0;;-1:-1:-1;;;46946:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;46946:53:0;;;;;;;;;;;;;::::1;;47060:36;::::0;47028:21:::1;::::0;-1:-1:-1;;;;;47060:27:0;::::1;::::0;:36;::::1;;;::::0;47028:21;;47010:15:::1;47060:36:::0;47010:15;47060:36;47028:21;47060:27;:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;47150:15;47139:9;-1:-1:-1::0;;;;;47112:54:0::1;47130:7;47112:54;;;;;;;;;;10573:1;46870:306:::0;:::o;17454:117::-;17517:7;17544:12;17557:5;17544:19;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17544:19:0;;17454:117;-1:-1:-1;;17454:117:0:o;14508:34::-;;;;:::o;13905:86::-;;;-1:-1:-1;;;;;13905:86:0;;:::o;14462:39::-;;;;:::o;20044:683::-;20144:7;20169:17;20189;20199:6;20189:9;:17::i;:::-;20169:37;;20217:32;20260:40;20430:35;20458:6;20430:27;:35::i;:::-;20403:62;;20511:67;20561:6;20511:35;:67::i;:::-;20476:102;-1:-1:-1;20591:101:0;20476:102;20591:39;:9;20605:24;20591:13;:39::i;:101::-;-1:-1:-1;20710:9:0;;20044:683;-1:-1:-1;;;;20044:683:0:o;12052:37::-;;;;:::o;46327:135::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;46383:11:::1;:18:::0;;-1:-1:-1;;;;46383:18:0::1;-1:-1:-1::0;;;46383:18:0::1;::::0;;46417:37:::1;::::0;46438:15:::1;::::0;46397:4:::1;::::0;46417:37:::1;::::0;46383:18;;46417:37:::1;46327:135::o:0;11632:31::-;;;-1:-1:-1;;;11632:31:0;;;;;:::o;10401:79::-;10466:6;;;;;-1:-1:-1;;;;;10466:6:0;;10401:79::o;49754:234::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;49836:18:::1;::::0;::::1;-1:-1:-1::0;;;49836:18:0;;::::1;;:28;;::::0;::::1;;;;49828:52;;;::::0;;-1:-1:-1;;;49828:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;49828:52:0;;;;;;;;;;;;;::::1;;49891:18;:27:::0;;-1:-1:-1;;;;49891:27:0::1;-1:-1:-1::0;;;49891:27:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;49934:46:::1;::::0;49964:15:::1;::::0;49891:27;49934:46:::1;::::0;-1:-1:-1;;49934:46:0::1;49754:234:::0;:::o;42256:225::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;42344:19:0;::::1;;::::0;;;:12:::1;:19;::::0;;;;;::::1;;:29;;::::0;::::1;;;;42336:53;;;::::0;;-1:-1:-1;;;42336:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;42336:53:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;42400:19:0;::::1;;::::0;;;:12:::1;:19;::::0;;;;;:28;;-1:-1:-1;;42400:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;42446:27;;42400:28;;:19;42446:27:::1;::::0;::::1;42256:225:::0;;:::o;11328:30::-;;;-1:-1:-1;;;11328:30:0;;;;;:::o;12747:41::-;12786:2;12747:41;:::o;5120:87::-;5192:7;5185:14;;;;;;;;-1:-1:-1;;5185:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5159:13;;5185:14;;5192:7;;5185:14;;5192:7;5185:14;;;;;;;;;;;;;;;;;;;;;;;;14427:28;;;;:::o;14282:31::-;;;;:::o;13998:70::-;;;-1:-1:-1;;;;;13998:70:0;;:::o;40823:826::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;40953:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;::::1;;:42;;::::0;::::1;;;;40931:109;;;::::0;;-1:-1:-1;;;40931:109:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;40931:109:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;41053:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;:41;;-1:-1:-1;;41053:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;41107:475:::1;;41134:12;:24:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;41134:24:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;41134:24:0::1;-1:-1:-1::0;;;;;41134:24:0;::::1;;::::0;;41173:16:::1;:18:::0;;;;::::1;::::0;;41107:475:::1;;;41232:12;:19:::0;41254:1:::1;-1:-1:-1::0;41224:51:0::1;;;::::0;;-1:-1:-1;;;41224:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;41224:51:0;;;;;;;;;;;;;::::1;;41295:9;41290:281;41314:12;:19:::0;41310:23;::::1;41290:281;;;41382:5;-1:-1:-1::0;;;;;41363:24:0::1;:12;41376:1;41363:15;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;41363:15:0::1;:24;41359:197;;;41430:12;41443:19:::0;;-1:-1:-1;;41443:23:0;;;41430:37;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;41412:12:::1;:15:::0;;-1:-1:-1;;;;;41430:37:0;;::::1;::::0;41425:1;;41412:15;::::1;;;;;;;;;;;;;:55;;;;;-1:-1:-1::0;;;;;41412:55:0::1;;;;;-1:-1:-1::0;;;;;41412:55:0::1;;;;;;41490:12;:18;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;41490:18:0;;;;;-1:-1:-1;;;;;;41490:18:0::1;::::0;;;;;41531:5:::1;;41359:197;41335:3;;41290:281;;;;41107:475;41599:42;::::0;;::::1;;::::0;-1:-1:-1;;;;;41599:42:0;::::1;::::0;::::1;::::0;;;::::1;40823:826:::0;;:::o;49996:289::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;50106:15:::1;50092:11;:29;50070:113;;;;-1:-1:-1::0;;;50070:113:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50194:10;:24:::0;;;50234:43:::1;::::0;50261:15:::1;::::0;50207:11;;50234:43:::1;::::0;;;::::1;49996:289:::0;:::o;14766:133::-;;;;:::o;23454:594::-;23538:7;23609:17;23629:48;23668:8;23629:38;:48::i;:::-;23609:68;;23726:16;23745:50;23768:26;:24;:26::i;:::-;23745:18;:9;23759:3;23745:13;:18::i;:50::-;23726:69;;23859:16;23878:37;23891:8;14241:2;23878:12;:37::i;:::-;23992:20;;23980:32;;23454:594;-1:-1:-1;;;;;23454:594:0:o;33589:588::-;33745:10;33686:4;33727:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;33727:38:0;;;;;;;;;;33780:27;;;33776:237;;33842:10;33865:1;33824:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;33824:38:0;;;;;;;;;:42;33776:237;;;33940:61;:8;33971:15;33940:12;:61::i;:::-;33917:10;33899:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;33899:38:0;;;;;;;;;:102;33776:237;34051:10;34098:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;34028:119:0;;34098:38;;;;;;;;;;;34028:119;;;;;;;;;34051:10;-1:-1:-1;;;;;;;;;;;34028:119:0;;;;;;;;;;-1:-1:-1;34165:4:0;;33589:588;-1:-1:-1;;;33589:588:0:o;14172:19::-;;;-1:-1:-1;;;;;14172:19:0;;:::o;24398:199::-;24509:4;24491:2;-1:-1:-1;;;;;15162:18:0;;15154:66;;;;;-1:-1:-1;;;15154:66:0;;;;;;;;;;;;-1:-1:-1;;;15154:66:0;;;;;;;;;;;;;;;24531:36:::1;24545:10;24557:2;24561:5;24531:13;:36::i;:::-;-1:-1:-1::0;24585:4:0::1;::::0;24398:199;-1:-1:-1;;;;24398:199:0:o;12636:48::-;;;;;;;;;;;;;;;:::o;14390:30::-;;;;:::o;12517:57::-;;;;;;;;;;;;;;;:::o;48102:405::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;48206:19:::1;::::0;::::1;-1:-1:-1::0;;;48206:19:0;;::::1;;:43;;::::0;::::1;;;;48184:123;;;::::0;;-1:-1:-1;;;48184:123:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;48326:19;::::0;-1:-1:-1;;;48326:19:0;::::1;;;48318:58;;;::::0;;-1:-1:-1;;;48318:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;48387:19;:42:::0;;-1:-1:-1;;;;48387:42:0::1;-1:-1:-1::0;;;48387:42:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;48445:54:::1;::::0;48483:15:::1;::::0;48387:42;48445:54:::1;::::0;-1:-1:-1;;48445:54:0::1;48102:405:::0;:::o;11543:38::-;;;-1:-1:-1;;;11543:38:0;;;;;:::o;46470:392::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;12846:1:::1;46607:24;:52;;46585:126;;;::::0;;-1:-1:-1;;;46585:126:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;46585:126:0;;;;;;;;;;;;;::::1;;46722:20;:47:::0;;;46785:69:::1;::::0;46838:15:::1;::::0;46745:24;;46785:69:::1;::::0;;;::::1;46470:392:::0;:::o;12096:54::-;;;;:::o;11497:39::-;;;-1:-1:-1;;;11497:39:0;;;;;:::o;12691:47::-;;;;;;;;;;;;;;;:::o;14108:26::-;;;-1:-1:-1;;;;;14108:26:0;;:::o;14320:30::-;;;;:::o;42974:289::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;43112:11:::1;:22:::0;;-1:-1:-1;;;;43112:22:0::1;-1:-1:-1::0;;;43112:22:0;::::1;;;;::::0;;43164:32:::1;43189:6:::0;43164:20:::1;-1:-1:-1::0;;43179:4:0;43164:14:::1;:20::i;:32::-;43145:16;:51:::0;43212:43:::1;::::0;43248:6;;43242:4;;43212:43;::::1;;::::0;::::1;::::0;;;::::1;42974:289:::0;;;:::o;11237:47::-;;;-1:-1:-1;;;11237:47:0;;;;;:::o;20999:359::-;21088:7;21113:17;21148:9;21143:179;21167:12;:19;21163:23;;21143:179;;;21238:12;21251:1;21238:15;;;;;;;;;;;;;;;;;;;21221:89;;;-1:-1:-1;;;21221:89:0;;-1:-1:-1;;;;;21221:89:0;;;;;;;;;21238:15;;;;;21221:49;;:89;;;;;;;;;;;21238:15;21221:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21221:89:0;21208:102;;;;;21188:3;;21143:179;;17678:113;-1:-1:-1;;;;;17764:19:0;17740:4;17764:19;;;:12;:19;;;;;;;;;17678:113::o;19617:419::-;19700:7;;;19764:136;19788:12;:19;19784:23;;19764:136;;;19829:59;19850:37;19881:5;19850:26;19860:12;19873:1;19860:15;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19860:15:0;19850:9;:26::i;:37::-;19829:16;;:20;:59::i;:::-;-1:-1:-1;19809:3:0;;19764:136;;;;19928:100;19984:33;20011:5;19984:22;:20;:22::i;:33::-;19928:37;19941:23;:16;19962:1;19941:20;:23::i;19928:100::-;19912:116;19617:419;-1:-1:-1;;;19617:419:0:o;11857:57::-;;;;:::o;43271:709::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;43455:32:0;::::1;43447:71;;;::::0;;-1:-1:-1;;;43447:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;43537:31:0;::::1;43529:69;;;::::0;;-1:-1:-1;;;43529:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;43529:69:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;43631:36:0;::::1;43609:116;;;::::0;;-1:-1:-1;;;43609:116:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;43736:17;:38:::0;;-1:-1:-1;;;;;;43736:38:0;;::::1;-1:-1:-1::0;;;;;43736:38:0;;::::1;::::0;;::::1;::::0;;;43785:16:::1;:36:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;43832:21:::1;:46:::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;43894:78:::1;::::0;::::1;::::0;-1:-1:-1;;43894:78:0::1;43271:709:::0;;;:::o;43988:2004::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;44595:22:::1;44620:75;44670:14:::0;44620:31:::1;:13:::0;44638:12;44620:17:::1;:31::i;:75::-;44595:100:::0;-1:-1:-1;44708:23:0::1;44734:87;44794:16:::0;44734:41:::1;44595:100:::0;44753:21;44734:18:::1;:41::i;:87::-;44708:113;;12786:2;44856:13;:29;;:76;;;;;12786:2;44902:14;:30;;44856:76;:121;;;;;12786:2;44949:12;:28;;44856:121;:175;;;;;12786:2;44994:21;:37;;44856:175;:224;;;;;12786:2;45048:16;:32;;44856:224;44834:310;;;;-1:-1:-1::0;;;44834:310:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12786:2;45165:14;:29;45157:63;;;::::0;;-1:-1:-1;;;45157:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;45157:63:0;;;;;;;;;;;;;::::1;;12786:2;45241:15;:30;45233:65;;;::::0;;-1:-1:-1;;;45233:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;45233:65:0;;;;;;;;;;;;;::::1;;45311:12;:28:::0;;;45350:9:::1;:26:::0;;;45387:11:::1;:26:::0;;;45424:20:::1;:44:::0;;;45479:15:::1;:34:::0;;;45524:7:::1;:18:::0;;;45553:11:::1;:26:::0;;;45604:44:::1;45362:14:::0;45604:29:::1;45326:13:::0;45401:12;45604:16:::1;:29::i;:44::-;45590:11;:58;;;;45661:176;45686:140;45788:23;;45767:18;;:44;45686:58;45728:15;;45686:37;45702:20;;45686:11;;:15;;:37;;;;:::i;:140::-;45661:10;:176::i;:::-;45894:12;45878:14;45863:13;45855:129;45908:21;45931:16;45949:8;45959:11;;45972;;45855:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10573:1;;43988:2004:::0;;;;;;;:::o;17124:178::-;-1:-1:-1;;;;;17260:25:0;;;17228:7;17260:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;17124:178::o;46097:222::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;46179:27:0;::::1;46171:63;;;::::0;;-1:-1:-1;;;46171:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;46171:63:0;;;;;;;;;;;;;::::1;;46245:10;:24:::0;;-1:-1:-1;;;;;;46245:24:0::1;-1:-1:-1::0;;;;;46245:24:0;::::1;::::0;;::::1;::::0;;;46285:26:::1;::::0;::::1;::::0;-1:-1:-1;;46285:26:0::1;46097:222:::0;:::o;47473:::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;47552:10:::1;::::0;::::1;-1:-1:-1::0;;;47552:10:0;;::::1;;:25;;::::0;::::1;;;;47544:49;;;::::0;;-1:-1:-1;;;47544:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;47544:49:0;;;;;;;;;;;;;::::1;;47604:10;:24:::0;;-1:-1:-1;;;;47604:24:0::1;-1:-1:-1::0;;;47604:24:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;47644:43:::1;::::0;47671:15:::1;::::0;47604:24;47644:43:::1;::::0;-1:-1:-1;;47644:43:0::1;47473:222:::0;:::o;12329:29::-;;;;;;;;;;;;14549:38;;;;:::o;10724:152::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;10802:27:::1;::::0;-1:-1:-1;;;;;10802:27:0;::::1;::::0;::::1;::::0;;;::::1;10840:28;10859:8;10840:18;:28::i;49492:254::-:0;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;49579:21:::1;::::0;::::1;-1:-1:-1::0;;;49579:21:0;;::::1;;:33;;::::0;::::1;;;;49571:57;;;::::0;;-1:-1:-1;;;49571:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;49571:57:0;;;;;;;;;;;;;::::1;;49639:21;:32:::0;;-1:-1:-1;;;;49639:32:0::1;-1:-1:-1::0;;;49639:32:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;49687:51:::1;::::0;49722:15:::1;::::0;49639:32;49687:51:::1;::::0;-1:-1:-1;;49687:51:0::1;49492:254:::0;:::o;11718:40::-;;;;:::o;50563:269::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;13093:16:::1;50654:7;:29;50646:66;;;::::0;;-1:-1:-1;;;50646:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;50646:66:0;;;;;;;;;;;;;::::1;;50723:23;:33:::0;;;50772:52:::1;::::0;50808:15:::1;::::0;50749:7;;50772:52:::1;::::0;;;::::1;50563:269:::0;:::o;12403:29::-;;;;;;;;;;;;14077:24;;;-1:-1:-1;;;;;14077:24:0;;:::o;14357:26::-;;;;:::o;21804:860::-;21861:7;21881:16;21908;21935:25;21971:14;21996;22021:26;22058:15;22091:9;22086:544;22110:12;:19;22106:23;;22086:544;;;22180:12;22193:1;22180:15;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22180:15:0;22151:45;;22254:17;-1:-1:-1;;;;;22254:43:0;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22254:45:0;;;;;;;;;;;;22325:26;;-1:-1:-1;;;22325:26:0;;;;22254:45;;-1:-1:-1;22254:45:0;;-1:-1:-1;22254:45:0;-1:-1:-1;;;;;;22325:24:0;;;;;:26;;;;;22254:45;22325:26;;;;;:24;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22325:26:0;22375;;;-1:-1:-1;;;22375:26:0;;;;22325;;-1:-1:-1;;;;;;22375:24:0;;;;;:26;;;;;22325;;22375;;;;;;;;:24;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22375:26:0;;-1:-1:-1;;;;;;22422:23:0;;22440:4;22422:23;22418:201;;;22477:8;-1:-1:-1;;;;;22466:19:0;;;;;22418:201;;;-1:-1:-1;;;;;22540:23:0;;22558:4;22540:23;22536:83;;;22595:8;-1:-1:-1;;;;;22584:19:0;;;;;22536:83;22131:3;;22086:544;;;-1:-1:-1;22649:7:0;-1:-1:-1;;;;;;;21804:860:0;:::o;2297:181::-;2355:7;2387:5;;;2411:6;;;;2403:46;;;;;-1:-1:-1;;;2403:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3122:132;3180:7;3207:39;3211:1;3214;3207:39;;;;;;;;;;;;;;;;;:3;:39::i;2630:226::-;2750:7;2786:12;2778:6;;;;2770:29;;;;-1:-1:-1;;;2770:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2822:5:0;;;2630:226::o;24998:1467::-;-1:-1:-1;;;;;25164:20:0;;25124:4;25164:20;;;:12;:20;;;;;;25124:4;;25164:20;;;:47;;-1:-1:-1;;;;;;25188:23:0;;;;;;:12;:23;;;;;;;;25164:47;25246:27;;25141:70;;-1:-1:-1;;;;25246:27:0;;;;;:46;;;25277:15;25246:46;25224:115;;;;;-1:-1:-1;;;25224:115:0;;;;;;;;;;;;-1:-1:-1;;;25224:115:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25356:36:0;;;;;;:25;:36;;;;;;;;:56;;;;;25397:15;25396:16;25356:56;25352:148;;;25447:24;;25437:6;:34;;25429:59;;;;;-1:-1:-1;;;25429:59:0;;;;;;;;;;;;-1:-1:-1;;;25429:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25516:33:0;;;;;;:25;:33;;;;;;;;:53;;;;;25554:15;25553:16;25516:53;25512:152;;;25604:23;;25594:6;:33;;25586:66;;;;;-1:-1:-1;;;25586:66:0;;;;;;;;;;;;-1:-1:-1;;;25586:66:0;;;;;;;;;;;;;;;25680:6;;;;25676:87;;;25710:41;25725:6;25733:9;25744:6;25710:14;:41::i;:::-;25703:48;;;;;25676:87;25775:17;25795:28;25806:16;;25795:6;:10;;:28;;;;:::i;:::-;25775:48;;25840:16;:14;:16::i;:::-;25836:59;;;25873:10;:8;:10::i;:::-;-1:-1:-1;;;;;25930:20:0;;;;;;:12;:20;;;;;;:35;;25955:9;25930:24;:35::i;:::-;-1:-1:-1;;;;;25907:20:0;;;;;;:12;:20;;;;;:58;;;;26006:32;25920:6;26028:9;26006:13;:32::i;:::-;:102;;26099:9;26006:102;;;26050:37;26058:6;26066:9;26077;26050:7;:37::i;:::-;-1:-1:-1;;;;;26145:23:0;;;;;;:12;:23;;;;;;25978:130;;-1:-1:-1;26145:70:0;;25978:130;26145:27;:70::i;:::-;-1:-1:-1;;;;;26119:23:0;;;;;;;:12;:23;;;;;:96;;;;26323:16;;26233:118;;;;-1:-1:-1;;;;;;;;;;;26233:118:0;26301:39;;:17;;:21;:39::i;:::-;26233:118;;;;;;;;;;;;;;;26368:14;:12;:14::i;:::-;:28;;;;-1:-1:-1;26386:10:0;;-1:-1:-1;;;26386:10:0;;;;26368:28;26364:70;;;26413:9;:7;:9::i;:::-;-1:-1:-1;26453:4:0;;24998:1467;-1:-1:-1;;;;;;24998:1467:0:o;2486:136::-;2544:7;2571:43;2575:1;2578;2571:43;;;;;;;;;;;;;;;;;:3;:43::i;2864:250::-;2922:7;2946:6;2942:47;;-1:-1:-1;2976:1:0;2969:8;;2942:47;3013:5;;;3017:1;3013;:5;:1;3037:5;;;;;:10;3029:56;;;;-1:-1:-1;;;3029:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35159:804;35216:7;35252:15;35284:16;35280:118;;35339:12;;35322:30;;;;;;;35332:5;;35322:30;;;;;;;;;;-1:-1:-1;;35374:12:0;;35367:19;;35280:118;35428:1;35414:11;:15;35410:188;;;35461:12;;:39;;35486:12;;;;35461:16;:39::i;:::-;35446:12;:54;35410:188;;;35548:12;;:38;;35573:11;35548:16;:38::i;:::-;35533:12;:53;35410:188;35614:12;;-1:-1:-1;;;;;;35610:83:0;;;-1:-1:-1;;;;;35656:12:0;:25;35610:83;35739:12;;35724:28;;-1:-1:-1;;13461:54:0;35724:14;:28::i;:::-;35705:16;:47;35765:24;35783:5;35765:17;:24::i;:::-;35806:20;:18;:20::i;:::-;35802:76;;;35843:23;:21;:23::i;:::-;35912:12;;35895:30;;;;;;;35905:5;;35895:30;;;;;;;;;;-1:-1:-1;;35943:12:0;;35159:804;;;:::o;26934:1010::-;27008:12;27023:27;:20;27048:1;27023:24;:27::i;:::-;27008:42;-1:-1:-1;27061:17:0;27081:30;:20;27008:42;27081:24;:30::i;:::-;27128:18;;27061:50;;-1:-1:-1;;;;27128:18:0;;;;27124:813;;;27188:21;27226:40;27246:4;27260;27226:19;:40::i;:::-;27283:18;27304:41;:21;27330:14;27304:25;:41::i;:::-;27283:62;;27362:36;27376:9;27387:10;27362:13;:36::i;:::-;27420:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27124:813;;;;;27528:10;;27521:75;;;-1:-1:-1;;;27521:75:0;;27576:4;27521:75;;;;;;27496:22;;-1:-1:-1;;;;;27528:10:0;;27521:28;;:75;;;;;;;;;;;;;;27528:10;27521:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27521:75:0;;-1:-1:-1;27613:45:0;27638:4;27652;27613:24;:45::i;:::-;27703:10;;27696:57;;;-1:-1:-1;;;27696:57:0;;27747:4;27696:57;;;;;;27675:18;;27696:91;;27772:14;;-1:-1:-1;;;;;27703:10:0;;;;27696:42;;:57;;;;;;;;;;;;;;;27703:10;27696:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27696:57:0;;:75;:91::i;:::-;27675:112;;27804:46;27828:9;27839:10;27804:23;:46::i;:::-;27872:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27124:813;;26934:1010;;;:::o;29043:447::-;29169:16;;;29183:1;29169:16;;;;;;;;;29145:21;;29169:16;;;;;;;;;;-1:-1:-1;29169:16:0;29145:40;;29214:4;29196;29201:1;29196:7;;;;;;;;-1:-1:-1;;;;;29196:23:0;;;:7;;;;;;;;;;:23;;;;29240:6;;:13;;;-1:-1:-1;;;29240:13:0;;;;:6;;;;;:11;;:13;;;;;29196:7;;29240:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29240:13:0;29230:7;;:4;;29235:1;;29230:7;;;;;;-1:-1:-1;;;;;29230:23:0;;;:7;;;;;;;;;:23;29274:10;;29264:7;;29274:10;;;29264:4;;29269:1;;29264:7;;;;;;;;;;;:20;-1:-1:-1;;;;;29264:20:0;;;-1:-1:-1;;;;;29264:20:0;;;;;29297:6;;;;;;;;;-1:-1:-1;;;;;29297:6:0;-1:-1:-1;;;;;29297:60:0;;29372:11;29398:1;29414:4;29433:8;29456:15;29297:185;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29297:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29043:447;;;:::o;28627:408::-;28748:16;;;28762:1;28748:16;;;;;;;;28724:21;;28748:16;;;;;;;;;;-1:-1:-1;28748:16:0;28724:40;;28793:4;28775;28780:1;28775:7;;;;;;;;-1:-1:-1;;;;;28775:23:0;;;:7;;;;;;;;;;:23;;;;28819:6;;:13;;;-1:-1:-1;;;28819:13:0;;;;:6;;;;;:11;;:13;;;;;28775:7;;28819:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28819:13:0;28809:7;;:4;;28814:1;;28809:7;;;;;;-1:-1:-1;;;;;28809:23:0;;;:7;;;;;;;;;;:23;;;;28845:6;;:182;;-1:-1:-1;;;28845:182:0;;;;;;;;:6;:182;;;;;;;;;;;;;29001:15;28845:182;;;;;;;;;;;;;;;;;;;;;:6;;;;;:57;;28917:11;;28845:6;;28959:4;;28978:8;;28845:182;;;;;;;;;;;;;;;;:6;:182;;;;;;;;;;;;;;;;3783:106;3841:7;3872:1;3868;:5;:13;;3880:1;3868:13;;;-1:-1:-1;3876:1:0;;3783:106;-1:-1:-1;3783:106:0:o;46000:89::-;46058:12;:23;46000:89::o;10884:222::-;-1:-1:-1;;;;;10958:22:0;;10950:66;;;;;-1:-1:-1;;;10950:66:0;;;;;;;;;;;;-1:-1:-1;;;10950:66:0;;;;;;;;;;;;;;;11053:6;;11032:38;;-1:-1:-1;;;;;11032:38:0;;;;11053:6;;;;;11032:38;;;;;11081:6;:17;;-1:-1:-1;;;;;11081:17:0;;;;;-1:-1:-1;;;;;;11081:17:0;;;;;;;;;10884:222::o;3262:225::-;3382:7;3417:12;3410:5;3402:28;;;;-1:-1:-1;;;3402:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3441:9;3457:1;3453;:5;;;;;;;3262:225;-1:-1:-1;;;;;3262:225:0:o;24605:385::-;24723:4;24740:17;24760:28;24771:16;;24760:6;:10;;:28;;;;:::i;:::-;-1:-1:-1;;;;;24820:18:0;;;;;;:12;:18;;;;;;24740:48;;-1:-1:-1;24820:33:0;;24740:48;24820:22;:33::i;:::-;-1:-1:-1;;;;;24799:18:0;;;;;;;:12;:18;;;;;;:54;;;;24883:16;;;;;;;:31;;24904:9;24883:20;:31::i;:::-;-1:-1:-1;;;;;24864:16:0;;;;;;;:12;:16;;;;;;;;;:50;;;;24932:26;;;;;;;24864:16;;24932:26;;;;-1:-1:-1;;;;;;;;;;;24932:26:0;;;;;;;;-1:-1:-1;24978:4:0;;24605:385;-1:-1:-1;;;;24605:385:0:o;18762:278::-;18871:10;18811:4;18845:37;;;:25;:37;;;;;;;;18844:38;:58;;;;-1:-1:-1;18896:6:0;;;;18895:7;18844:58;:82;;;;-1:-1:-1;18915:11:0;;-1:-1:-1;;;18915:11:0;;;;18844:82;:128;;;;;18971:1;18939:29;18955:12;;18939:11;;:15;;:29;;;;:::i;:::-;:33;18844:128;:188;;;;-1:-1:-1;;19016:16:0;;19006:4;18985:27;;;;:12;:27;;;;;;:47;;;18762:278::o;29498:1279::-;15041:6;:13;;-1:-1:-1;;15041:13:0;15050:4;15041:13;;;29586:12:::1;::::0;29570:11:::1;::::0;15041:6;;29570:29:::1;::::0;:11;:15:::1;:29::i;:::-;29547:52;;29612:27;29642:97;29672:15;;29702:26;;29642:15;:97::i;:::-;:134;;29764:12;;29642:134;;;29751:1;29642:134;29864:16;::::0;29839:4:::1;29787:28;29818:27:::0;;;:12:::1;:27;::::0;;;;;29612:164;;-1:-1:-1;29787:28:0;29818:73:::1;::::0;:31:::1;:73::i;:::-;29787:104:::0;-1:-1:-1;29904:23:0::1;29930:90;30007:12:::0;29930:62:::1;29965:26;:19:::0;29989:1:::1;29965:23;:26::i;29930:90::-;29904:116;;30033:19;30055:101;30143:12;30055:73;30090:37;30111:15;;30090:16;30104:1;30090:9;;:13;;:16;;;;:::i;30055:101::-;30033:123:::0;-1:-1:-1;30169:24:0::1;30196:78;30033:123:::0;30196:51:::1;:20:::0;30231:15;30196:34:::1;:51::i;:78::-;30169:105:::0;-1:-1:-1;30291:19:0;;30287:84:::1;;30327:32;30343:15;30327;:32::i;:::-;30387:15:::0;;30383:108:::1;;30457:21;::::0;30419:60:::1;::::0;30444:11;;-1:-1:-1;;;;;30457:21:0::1;30419:24;:60::i;:::-;30507:20:::0;;30503:108:::1;;30582:16;::::0;30544:55:::1;::::0;30564:16;;-1:-1:-1;;;;;30582:16:0::1;30544:19;:55::i;:::-;30628:141;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;15077:6:0;:14;;-1:-1:-1;;15077:14:0;;;-1:-1:-1;;;;29498:1279:0:o;18365:389::-;-1:-1:-1;;;;;18478:18:0;;18452:4;18478:18;;;:12;:18;;;;;;;;;:38;;-1:-1:-1;;;;;;18500:16:0;;;;;;:12;:16;;;;;;;;18478:38;18474:273;;;-1:-1:-1;18540:5:0;18533:12;;18474:273;18567:21;;-1:-1:-1;;;18567:21:0;;;;18563:184;;;-1:-1:-1;18612:4:0;18605:11;;18563:184;-1:-1:-1;;;;;18657:31:0;;;;;;:25;:31;;;;;;;;;:77;;-1:-1:-1;;;;;;18705:29:0;;;;;;:25;:29;;;;;;;;18657:77;18649:86;;;;32079:1367;32241:11;;32282:7;;-1:-1:-1;;;;;32351:36:0;;32202:7;32351:36;;;:25;:36;;;;;;32202:7;;32241:11;32282:7;32351:36;;32347:143;;;32415:12;;32404:23;;32453:25;32466:11;;32453:8;:12;;:25;;;;:::i;:::-;32442:36;;32347:143;32531:19;;-1:-1:-1;;;32531:19:0;;;;32527:92;;;32579:28;32600:6;32579:20;:28::i;:::-;32567:40;;;;32527:92;-1:-1:-1;;;;;32699:23:0;;;;;;:15;:23;;;;;;;;;:53;;-1:-1:-1;;;;;;32726:26:0;;;;;;:15;:26;;;;;;;;32699:53;32694:120;;;32785:2;32774:8;:13;32770:32;;;32800:2;32789:13;;32770:32;32826:17;32846:43;13216:3;32846:23;:9;32860:8;32846:13;:23::i;:43::-;32826:63;;32990:12;:10;:12::i;:::-;:28;;;;;33017:1;33006:8;:12;32990:28;32986:220;;;33093:101;33123:56;33175:3;33123:47;33161:8;33124:31;33138:16;;33124:9;:13;;:31;;;;:::i;:::-;33123:37;;:47::i;:56::-;33093:11;:101::i;:::-;33269:4;33248:27;;;;:12;:27;;;;;;:66;;33294:9;33248:31;:66::i;:::-;33239:4;33218:27;;;;:12;:27;;;;;:96;;;;33376:16;;-1:-1:-1;;;;;33330:64:0;;;-1:-1:-1;;;;;;;;;;;33330:64:0;33362:31;;:9;;:13;:31::i;:::-;33330:64;;;;;;;;;;;;;;;33414:24;:9;33428;33414:13;:24::i;:::-;33407:31;32079:1367;-1:-1:-1;;;;;;;32079:1367:0:o;17933:108::-;18004:10;;18018:15;-1:-1:-1;18004:29:0;17933:108;:::o;34838:313::-;34881:6;;;;34876:268;;34904:25;34932:22;:20;:22::i;:::-;34904:50;;34969:18;35015:62;35054:22;;35015:34;35037:11;;35015:17;:21;;:34;;;;:::i;:62::-;34969:123;;35109:23;35120:11;35109:10;:23::i;34876:268::-;34838:313::o;36426:683::-;36550:15;;36540:26;;:5;;:9;:26::i;:::-;36527:10;:39;;;;36808:186;36981:12;;36808:158;36848:107;36883:57;36917:22;;36883:29;36900:11;;36883:12;;:16;;:29;;;;:::i;:57::-;36848:12;;;:16;:107::i;:::-;36808:11;;;:25;:158::i;:186::-;36794:11;:200;-1:-1:-1;37085:11:0;:16;;37100:1;37085:16;;;36426:683::o;18147:104::-;18224:19;;-1:-1:-1;;;18224:19:0;;;;;18147:104::o;37202:1217::-;37609:32;37644:75;37674:34;37692:15;;37674:13;;:17;;:34;;;;:::i;:::-;37644:11;;;:15;:75::i;:::-;37609:110;-1:-1:-1;37805:31:0;37609:110;37834:1;37805:28;:31::i;:::-;37779:23;:57;;;37995:18;;:45;37991:164;;38057:19;:27;;-1:-1:-1;;;;38057:27:0;;;38125:18;;38099:23;:44;37991:164;38194:217;38219:181;38376:23;;38355:18;;:44;38219:117;38324:11;;38219:86;38289:15;;38219:51;38249:20;;38219:11;;:29;;:51;;;;:::i;27952:293::-;28036:6;;28179:17;;28036:201;;;-1:-1:-1;;;28036:201:0;;28101:4;28036:201;;;;;;;;;;:6;:201;;;;;;;;;;-1:-1:-1;;;;;28179:17:0;;;28036:201;;;;28211:15;28036:201;;;;;;:6;;;;;:22;;28066:11;;28036:201;;;;;;;;;;;;;;;28066:11;28036:6;:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;27952:293:0:o;28253:366::-;28377:6;;28439:10;;28553:17;;28377:234;;;-1:-1:-1;;;28377:234:0;;28419:4;28377:234;;;;-1:-1:-1;;;;;28439:10:0;;;28377:234;;;;;;;;;;;;;;;;:6;:234;;;;;;;;;;;;28553:17;;;28377:234;;;;28585:15;28377:234;;;;;;:6;;;;;:19;;:234;;;;;;;;;;;;;;;;:6;:234;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18049:90;18118:13;;-1:-1:-1;;;18118:13:0;;;;;18049:90::o;33454:127::-;33516:57;33538:4;13604:42;33560:12;33516:13;:57::i;:::-;;33454:127;:::o

Swarm Source

ipfs://9b36d5d1aa9f4f10f44bbf37d23c32cd65fbdb833d1f75b1da9190857f44ea90

Block Transaction Gas Used Reward
view all blocks produced

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

Validator Index Block Amount
View All Withdrawals

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

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