Contract 0xfb161dda30991a4e48de65f0ac4eb17809f0c6b2

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x00ad7cfbbfe8124771f0814beade9f5e2d97a5444daac42207acb6d1574e2048Freeze LP111475772021-09-22 21:58:333 hrs 48 mins ago0x01c574c27bbb4a52a8971e86a8e4749d1892d670 IN  budz.finance: BUDZ Token0 BNB0.000824775
0xf257b7611c423f967270a93e6543c59b52bfad6935f4e8a92d8a606aaa922102Harvest Budz111474792021-09-22 21:53:393 hrs 53 mins ago0x01c574c27bbb4a52a8971e86a8e4749d1892d670 IN  budz.finance: BUDZ Token0 BNB0.000475185
0x5438d93e4ecc5401509491c0fc5b04dc409a92260f882917853a21c83e98db6cTransfer111472762021-09-22 21:43:304 hrs 3 mins ago0xd03c2b0dd17f71e3cb633046f769657b3509b264 IN  budz.finance: BUDZ Token0 BNB0.000106085
0x431d9c981132f955a91d507764f71c56b8409a99a32b8aae394bb90e48636fb5Harvest Budz111472372021-09-22 21:41:334 hrs 5 mins ago0xd03c2b0dd17f71e3cb633046f769657b3509b264 IN  budz.finance: BUDZ Token0 BNB0.000667275
0x1bb1fb304da94decf7c9aa8c3c0e7aa07baec56a6c015658a5af35213bee1adeFreeze LP111439952021-09-22 18:57:546 hrs 49 mins ago0x3a84dd77a9bc34f63b12bef70748689d8fd8dbbb IN  budz.finance: BUDZ Token0 BNB0.000749655
0x756a2f8632c1f632e8b35af1650b36a448ff1f9aeeec1c8cb21cb64c719b094eFreeze LP111428262021-09-22 17:59:057 hrs 48 mins ago0xb0ec3ffad4859eb889d1b87af7ba892e3bb0b3fb IN  budz.finance: BUDZ Token0 BNB0.00095249
0x38dd6ac8ebf3b10aa7a8bf823e52dab03e3294f159c02688dec3fffb21ed700aHarvest Budz111427402021-09-22 17:54:477 hrs 52 mins ago0xb0ec3ffad4859eb889d1b87af7ba892e3bb0b3fb IN  budz.finance: BUDZ Token0 BNB0.00019073
0xdb8818d2cf2b69a97bceac8b16fdceb9388870c6a7ad9bcb8fdf2f247c4ea3f0Harvest Budz111427272021-09-22 17:54:087 hrs 53 mins ago0xb0ec3ffad4859eb889d1b87af7ba892e3bb0b3fb IN  budz.finance: BUDZ Token0 BNB0.000592275
0x413bbd2a217706ac58105da50306ea39842314034ac7ce91e6e878c549a06578Freeze LP111405212021-09-22 16:02:079 hrs 45 mins ago0x8282c0c39446fe68ac0b6b8c20ff0327fbc6d251 IN  budz.finance: BUDZ Token0 BNB0.000824775
0xa043a5ad4adf8ab0cb5810194f6b4f191a213c19622069323290567465c023a3Harvest Budz111404852021-09-22 16:00:029 hrs 47 mins ago0x8282c0c39446fe68ac0b6b8c20ff0327fbc6d251 IN  budz.finance: BUDZ Token0 BNB0.000550185
0x6a99705c3ff9a7fbc83aa4189793db3413c1494561a0c0cdfbba698f563afe13Freeze LP111392692021-09-22 14:59:1110 hrs 48 mins ago0xd2fd416d3449c805bc2f1fb1ef5d6aa3dcbec0e4 IN  budz.finance: BUDZ Token0 BNB0.00094186
0x0560266e0b9dd078ae7bd26cb9ba684bc3f0d8cb58df248d5087cc7af4b4272bHarvest Budz111392132021-09-22 14:56:2310 hrs 50 mins ago0xd2fd416d3449c805bc2f1fb1ef5d6aa3dcbec0e4 IN  budz.finance: BUDZ Token0 BNB0.000667275
0xce793ce6ea7e467abdf3cbd8606f2517bf471b0b19bb88192bbbc47e625e7fb5Burn Budz111370832021-09-22 13:09:4112 hrs 37 mins agoBudz Finance: Deployer IN  budz.finance: BUDZ Token0 BNB0.00050071
0x2acd051a018c7ce8c0f7c5bba77de3df658076994c2de2f23c4e19ddcc04096aClaim Stake Inte...111370742021-09-22 13:09:1412 hrs 37 mins agoBudz Finance: Deployer IN  budz.finance: BUDZ Token0 BNB0.000505935
0x15fc19af6a6a8876fc47d0d2c44e96f2d896fe208dd40eda2b55655ce985abfaFreeze LP111363062021-09-22 12:30:5013 hrs 16 mins ago0x01c574c27bbb4a52a8971e86a8e4749d1892d670 IN  budz.finance: BUDZ Token0 BNB0.000824775
0x7f8e2dbfec68bfdf8a99962580ebc12866e5d93b8763acd85cf230b80c2a17faFreeze LP111362162021-09-22 12:26:2013 hrs 20 mins ago0x01c574c27bbb4a52a8971e86a8e4749d1892d670 IN  budz.finance: BUDZ Token0 BNB0.00061103
0xb067084e0427aa50b27d838e5d7624d9c009602ea02d9b0106ab4f40b82f3a71Freeze LP111362152021-09-22 12:26:1713 hrs 20 mins ago0xb4f15d7b76dcccdc503064fe9005c5019d8851b5 IN  budz.finance: BUDZ Token0 BNB0.000749775
0x0549ba4a4846757a0e18dc0c6e839fcc3b3aaf0d54aaf650162a069bda4111bdTransfer111361272021-09-22 12:21:5313 hrs 25 mins ago0x82268652dcfa4f5a1971c6429f7c52d716f9940b IN  budz.finance: BUDZ Token0 BNB0.00036181
0x574758c3c69a5ac027d6f0fef04440a5e1015bfffc200d37d944f461d7ece05dHarvest Budz111361242021-09-22 12:21:4413 hrs 25 mins ago0xb4f15d7b76dcccdc503064fe9005c5019d8851b5 IN  budz.finance: BUDZ Token0 BNB0.000475185
0xff2bd1ccfe632c46a87829f803458702011057fef05319366f0fd0694c1d11e8Harvest Budz111334732021-09-22 10:08:5615 hrs 38 mins ago0xee2c79d6cff316f28d6e092ba90e91356e9bf151 IN  budz.finance: BUDZ Token0 BNB0.000475185
0x24af058c17868b15d7078a51d0891ffc9591fbaf5d3d340218004ee56be6d4e2Freeze LP111332602021-09-22 9:58:1715 hrs 48 mins ago0xfb8bd2422fbac7275cdb7d441226ce1d2525f7e2 IN  budz.finance: BUDZ Token0 BNB0.000824715
0x330d982d824cf8caee6e362174622ad9679121156b2718821bd9f97a9b90db36Harvest Budz111331652021-09-22 9:53:3215 hrs 53 mins ago0xfb8bd2422fbac7275cdb7d441226ce1d2525f7e2 IN  budz.finance: BUDZ Token0 BNB0.000475185
0x913943fc8c15b92410a0a98d3b4aa31819b3e3712846ca4740fa9a36e5627eebHarvest Budz111329612021-09-22 9:43:2016 hrs 3 mins ago0xf277fa3aa3db9997346d15facf9b0db26a764fa5 IN  budz.finance: BUDZ Token0 BNB0.000667275
0xb5a787206d1fcb741394f1a9253a28b83457a738c657c54f63eedcd8bf23c077Harvest Budz111319522021-09-22 8:52:2616 hrs 54 mins ago0x29721c030e241e44c670ed6efbd5a922b0191054 IN  budz.finance: BUDZ Token0 BNB0.000550185
0x570eeb6adc536e1bdd3f77cb25217a83167db1760b057f914e57a9ac6821fc7bTransfer111314912021-09-22 8:29:2217 hrs 17 mins ago0xd03c2b0dd17f71e3cb633046f769657b3509b264 IN  budz.finance: BUDZ Token0 BNB0.000106085
[ Download CSV Export 

OVERVIEW

Budz finance aims to seeding an innovative decentralized platform offering high yield options. It utilizes a symbiotic relationship between burning, staking and farming through DeFi to maximise growth and sustainability.

Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BUDZFINANCE

Compiler Version
v0.6.4+commit.1dca32f3

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 4: budz-finance.sol
//budz-finance.sol
//                 |       
//                |.|      
//               |\./|     
//               |\./|
//.              |\./|              .     
//\^.\          |\\.//|          /.^/      
// \--.|\       |\\.//|       /|.--/          
//   \--.| \    |\\.//|    / |.--/
//    \---.|\    |\./|    /|.---/     
//       \--.|\  |\./|  /|.--/        
//          \ .\  |.|  /. /          
//_ -_^_^_^_-  \ \\ // /  -_^_^_^_- _   
//  - -/_/_/- ^ ^  |  ^ ^ -\_\_\- -      
//            /-./ | \.-\
//           /-/   |   \-\              
//          ;|`         '|;
//        █▀▀▄ █──█ █▀▀▄ ▀▀█ 
//        █▀▀▄ █──█ █──█ ▄▀─ 
//        ▀▀▀─ ─▀▀▀ ▀▀▀─ ▀▀▀
//
pragma solidity 0.6.4;

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

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

//Uniswap v2 interface
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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


interface IUniswapV2Pair {
  event Approval(address indexed owner, address indexed spender, uint value);
  event Transfer(address indexed from, address indexed to, uint 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 (uint);
  function balanceOf(address owner) external view returns (uint);
  function allowance(address owner, address spender) external view returns (uint);

  function approve(address spender, uint value) external returns (bool);
  function transfer(address to, uint value) external returns (bool);
  function transferFrom(address from, address to, uint 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 (uint);

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

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

  function MINIMUM_LIQUIDITY() external pure returns (uint);
  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 (uint);
  function price1CumulativeLast() external view returns (uint);
  function kLast() external view returns (uint);

  function mint(address to) external returns (uint liquidity);
  function burn(address to) external returns (uint amount0, uint amount1);
  function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
  function skim(address to) external;
  function sync() external;
}

////////////////////////////////////////////////
////////////////////EVENTS/////////////////////
//////////////////////////////////////////////

contract TokenEvents {

    //when a user freezes tokens
    event LpFreeze(
        address indexed user,
        uint value,
        address indexed lpToken
    );

    //when a user unfreezes tokens
    event LpUnfreeze(
        address indexed user,
        uint value,
        address indexed lpToken
    );
    
    //when a user stakes tokens
    event TokenStake(
        address indexed user,
        uint value
    );

    //when a user unstakes tokens
    event TokenUnstake(
        address indexed user,
        uint value
    );
    
    //when a user burns tokens
    event TokenBurn(
        address indexed user,
        uint value
    );
    
}

//////////////////////////////////////
//////////BUDZFINANCE TOKEN CONTRACT////////
////////////////////////////////////
contract BUDZFINANCE is IERC20, TokenEvents {

    using SafeMath for uint256;
    using SafeMath for uint64;
    using SafeMath for uint32;
    using SafeMath for uint16;
    using SafeMath for uint8;

    using SafeERC20 for BUDZFINANCE;
    
    
    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    //pancake setup
    address public cakeBUDZBNB;
    
    //apy setup
    mapping (address => uint) public lpApy;
    uint32 public globalApy = 1000;
    uint16 public halvening = 1;
    uint64 public halveningDays = 7;
    uint256 public halveningTimestamp;
    uint256 public stakingApyLimiter = 1;
    uint256 public burnAdjust = 3;
    
    //lp freeze / stake setup
    uint constant internal MINUTESECONDS = 60;
    uint constant internal DAYSECONDS = 86400;
    uint constant internal MINSTAKEDAYLENGTH = 7;
    uint256 public totalStaked;
    address[] public lpAddresses;
    mapping (address => uint) public totalLpFrozen;
    mapping (address => uint[]) public lpFrozenBalances;
    mapping (address => uint[]) public lpFreezeStartTimes;
    
    //tokenomics
    uint256 internal _totalSupply;
    string public constant name = "budz.finance";
    string public constant symbol = "BUDZ";
    uint8 public constant decimals = 18;

    //admin
    address constant internal _P1 = 0x670628750F15c42c9924880c69F54F1B168E8923;
    address constant internal _P2 = 0xBb294b760e48E9543713a521f13fbA11c006d6b2;
    address constant internal _P3 = 0xc7fd42a741d40c7482850fb4eDCbfc9084D6E2C4;
    bool public isLocked = false;
    bool private sync;
    
    mapping(address => bool) admins;
    mapping(address => bool) public isPoolActive;
    mapping (address => Farmer) public farmer;
    
    struct Farmer{
        uint256 stakedBalance;
        uint256 stakeStartTimestamp;
        uint256 totalStakingInterest;
        uint256 totalFarmedBudz;
        uint256 totalBurnt;
        uint256 totalReferralBonus;
        address referrer;
        bool activeUser;
    }
    
    modifier onlyAdmins(){
        require(admins[msg.sender], "not an admin");
        _;
    }
    
    //protects against potential reentrancy
    modifier synchronized {
        require(!sync, "Sync lock");
        sync = true;
        _;
        sync = false;
    }

    constructor(uint256 initialTokens) public {
        admins[_P1] = true;
        admins[_P2] = true;
        admins[_P3] = true;
        admins[msg.sender] = true;
        halveningTimestamp = now;
        //mint initial tokens
        mintInitialTokens(initialTokens);
    }


    receive() external payable{
        donate();
    }

    
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) external view override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
     
    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply unless mintBLock is true
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        uint256 amt = amount;
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply = _totalSupply.add(amt);
        _balances[account] = _balances[account].add(amt);
        emit Transfer(address(0), account, amt);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * See {_burn} and {_approve}.
     */
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, msg.sender, _allowances[account][msg.sender].sub(amount, "ERC20: burn amount exceeds allowance"));
    }

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);//from address(0) for minting

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    //mint budz initial tokens (only ever called in constructor)
    function mintInitialTokens(uint amount)
        internal
        synchronized
    {
        _mint(_P1, amount);
    }

    ////////////////////////////////////////////////////////
    /////////////////PUBLIC FACING - BUDZ CONTROL//////////
    //////////////////////////////////////////////////////
    
    
    ////////GROWROOM FARM FUNCTIONS/////////

    
    //freeze LP tokens to contract, approval needed
    function FreezeLP(uint amt, uint _lpIndex, address _referrer)
        external
        synchronized
    {
        require(isPoolActive[lpAddresses[_lpIndex]], "pool not active");
        require(amt > 0, "zero input");
        require(lpBalance(lpAddresses[_lpIndex]) >= amt, "Error: insufficient balance");//ensure user has enough funds
        scopeCheck();
        if(isHarvestable(msg.sender, _lpIndex)){
            uint256 interest = calcHarvestRewards(msg.sender, _lpIndex);
            if(interest > 0){
                harvest(interest);
            }
        }
        //set user active
        farmer[msg.sender].activeUser = true;
        //update balances
        lpFrozenBalances[msg.sender][_lpIndex] = lpFrozenBalances[msg.sender][_lpIndex].add(amt);
        totalLpFrozen[lpAddresses[_lpIndex]] = totalLpFrozen[lpAddresses[_lpIndex]].add(amt);
        //update timestamp
        lpFreezeStartTimes[msg.sender][_lpIndex] = now;

        if(_referrer != address(0) && _referrer != msg.sender){
            if(farmer[_referrer].activeUser && farmer[msg.sender].referrer == address(0)){
               farmer[msg.sender].referrer = _referrer;
            }
        }
        IUniswapV2Pair(lpAddresses[_lpIndex]).transferFrom(msg.sender, address(this), amt);//make transfer
        emit LpFreeze(msg.sender, amt, lpAddresses[_lpIndex]);
    }
    
    //unfreeze LP tokens from contract
    function UnfreezeLP(uint _lpIndex)
        external
        synchronized
    {
        require(lpFrozenBalances[msg.sender][_lpIndex] > 0,"Error: unsufficient frozen balance");//ensure user has enough frozen funds
        uint amt = lpFrozenBalances[msg.sender][_lpIndex];
        if(isHarvestable(msg.sender, _lpIndex)){
            uint256 interest = calcHarvestRewards(msg.sender, _lpIndex);
            if(interest > 0){
                harvest(interest);
            }
        }
        lpFrozenBalances[msg.sender][_lpIndex] = 0;
        lpFreezeStartTimes[msg.sender][_lpIndex] = 0;
        totalLpFrozen[lpAddresses[_lpIndex]] = totalLpFrozen[lpAddresses[_lpIndex]].sub(amt);
        IUniswapV2Pair(lpAddresses[_lpIndex]).transfer(msg.sender, amt);//make transfer
        emit LpUnfreeze(msg.sender, amt, lpAddresses[_lpIndex]);
    }
    
        
    //harvest BUDZ from lp
    function HarvestBudz(uint _lpIndex)
        external
        synchronized
    {
        require(lpFrozenBalances[msg.sender][_lpIndex] > 0,"Error: unsufficient lp balance");//ensure user has enough lp frozen 
        uint256 interest = calcHarvestRewards(msg.sender, _lpIndex);
        if(interest > 0){
            harvest(interest);
            lpFreezeStartTimes[msg.sender][_lpIndex] = now;
            farmer[msg.sender].totalFarmedBudz += interest;
        }
    }
    
    function harvest(uint rewards)
        internal
    {
        _mint(msg.sender, rewards);
        uint refFee = rewards.div(10);
        if(farmer[msg.sender].referrer != address(0)){
            _mint(msg.sender, refFee.div(2));//5% bonus for farmer using reflink
            _mint(farmer[msg.sender].referrer, refFee.div(2));//5% referrer bonus on all harvests
            farmer[farmer[msg.sender].referrer].totalReferralBonus += refFee.div(2);
        }
        _mint(_P1, refFee.mul(50).div(100));//5% dev fee
        _mint(_P2, refFee.mul(25).div(100));//2.5%
        _mint(_P3, refFee.mul(25).div(100));//2.5%
    }

    function scopeCheck()
        internal 
    {
        //ensure lpFreezeStartTimes is in scope
        if(lpFreezeStartTimes[msg.sender].length < lpAddresses.length){
            for(uint i = lpFreezeStartTimes[msg.sender].length; i < lpAddresses.length; i++){
                lpFreezeStartTimes[msg.sender].push(0);
            }
        }
        //ensure lpFrozenBalances is in scope
        if(lpFrozenBalances[msg.sender].length < lpAddresses.length){
            for(uint i = lpFrozenBalances[msg.sender].length; i < lpAddresses.length; i++){
                lpFrozenBalances[msg.sender].push(0);
            }
        }
    }
    
    
    ////////STAKING FUNCTIONS/////////
    
    //stake BUDZ tokens to contract and claims any accrued interest
    function StakeTokens(uint amt, address _referrer)
        external
        synchronized
    {
        require(amt > 0, "zero input");
        require(budzBalance() >= amt, "Error: insufficient balance");//ensure user has enough funds
        if(_referrer != address(0) && _referrer != msg.sender){
            if(farmer[_referrer].activeUser && farmer[msg.sender].referrer == address(0)){
               farmer[msg.sender].referrer = _referrer;
            }
        }
        //claim any accrued interest
        claimInterest();
        //update balances
        farmer[msg.sender].activeUser = true;
        farmer[msg.sender].stakedBalance = farmer[msg.sender].stakedBalance.add(amt);
        totalStaked = totalStaked.add(amt);
        _transfer(msg.sender, address(this), amt);//make transfer
        emit TokenStake(msg.sender, amt);
    }
    
    //unstake BUDZ tokens from contract and claims any accrued interest
    function UnstakeTokens()
        external
        synchronized
    {
        require(farmer[msg.sender].stakedBalance > 0,"Error: unsufficient frozen balance");//ensure user has enough staked funds
        require(isStakeFinished(msg.sender), "tokens cannot be unstaked yet. min 7 day stake");
        uint amt = farmer[msg.sender].stakedBalance;
        //claim any accrued interest
        claimInterest();
        //zero out staking timestamp
        farmer[msg.sender].stakeStartTimestamp = 0;
        farmer[msg.sender].stakedBalance = 0;
        totalStaked = totalStaked.sub(amt);
        _transfer(address(this), msg.sender, amt);//make transfer
        emit TokenUnstake(msg.sender, amt);
    }
    
    //claim any accrued interest
    function ClaimStakeInterest()
        external
        synchronized
    {
        require(farmer[msg.sender].stakedBalance > 0, "you have no staked balance");
        claimInterest();
    }
    
    //roll any accrued interest
    function RollStakeInterest()
        external
        synchronized
    {
        require(farmer[msg.sender].stakedBalance > 0, "you have no staked balance");
        rollInterest();
    }
    
    function rollInterest()
        internal
    {
        //calculate staking interest
        uint256 interest = calcStakingRewards(msg.sender);
        //mint interest to contract, ref and devs
        if(interest > 0){
            _mint(address(this), interest);
            //roll interest
            farmer[msg.sender].stakedBalance = farmer[msg.sender].stakedBalance.add(interest);
            totalStaked = totalStaked.add(interest);
            farmer[msg.sender].totalStakingInterest += interest;
            //reset staking timestamp
            farmer[msg.sender].stakeStartTimestamp = now;
            if(farmer[msg.sender].referrer != address(0)){
                 _mint(farmer[msg.sender].referrer, interest.div(20));//5% bonus for referrer
                 farmer[farmer[msg.sender].referrer].totalReferralBonus += interest.div(20);
            }
            _mint(_P1, interest.mul(2).div(100));//2% dev copy
            _mint(_P2, interest.mul(1).div(100));//1%
            _mint(_P3, interest.mul(1).div(100));//1%
        }
    }
    
    function claimInterest()
        internal
    {
        //calculate staking interest
        uint256 interest = calcStakingRewards(msg.sender);
        //reset staking timestamp
        farmer[msg.sender].stakeStartTimestamp = now;
        //mint interest if any
        if(interest > 0){
            _mint(msg.sender, interest);
            farmer[msg.sender].totalStakingInterest += interest;
            if(farmer[msg.sender].referrer != address(0)){
                 _mint(farmer[msg.sender].referrer, interest.div(20));//5% bonus for referrer
                 farmer[farmer[msg.sender].referrer].totalReferralBonus += interest.div(20);
            }
            _mint(_P1, interest.mul(2).div(100));//2% dev copy
            _mint(_P2, interest.mul(1).div(100));//1%
            _mint(_P3, interest.mul(1).div(100));//1%
        }
    }

    function NewHalvening()
        external
        synchronized
    {   
        require(now.sub(halveningTimestamp) >= DAYSECONDS.mul(halveningDays), "cannot call halvening yet");
        halveningDays += 7; //increase period by 1 week every halvening
        halveningTimestamp = now;
        halvening = halvening * 2;
    }

    function BurnBudz(uint amt)
        external
        synchronized
    {
        require(farmer[msg.sender].totalBurnt.add(amt) <= farmer[msg.sender].totalStakingInterest.mul(burnAdjust), "can only burn equivalent of x3 total staking interest");
        require(amt > 0, "value must be greater than 0");
        require(balanceOf(msg.sender) >= amt, "balance too low");
        //burn tokens of user
        _burn(msg.sender, amt);
        farmer[msg.sender].totalBurnt += amt;
        //burn tokens of pancake swap - pamp it
        _balances[cakeBUDZBNB] = _balances[cakeBUDZBNB].sub(amt, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amt);
        IUniswapV2Pair(cakeBUDZBNB).sync();
        emit TokenBurn(msg.sender, amt);
    }

    ///////////////////////////////
    ////////VIEW ONLY//////////////
    ///////////////////////////////

    //returns staking rewards in BUDZ
    function calcStakingRewards(address _user)
        public
        view
        returns(uint)
    {
        // totalstaked / 1000 / 1251 * (minutesPast) @ 42.0% APY
        // (adjustments up to a max of 84% APY via burning of BUDZ)
        uint budzBurnt = farmer[_user].totalBurnt;
        uint staked = farmer[_user].stakedBalance;
        uint apyAdjust = 1000;
        if(budzBurnt > 0){
            if(budzBurnt >= staked.div(2))
            {
                apyAdjust = 500;
            }
            else{
                uint burntPercentage = ((budzBurnt.mul(100) / staked));
                uint v = (1000 * burntPercentage) / 100;
                apyAdjust = apyAdjust.sub(v);
                if(apyAdjust < 500)
                {
                    apyAdjust = 500;
                }
            }
        }
        return (staked.div(apyAdjust.mul(stakingApyLimiter)).div(1251) * (minsPastStakeTime(_user)));
    }

    //returns amount of minutes past since stake start
    function minsPastStakeTime(address _user)
        public
        view
        returns(uint)
    {
        if(farmer[_user].stakeStartTimestamp == 0){
            return 0;
        }
        uint minsPast = now.sub(farmer[_user].stakeStartTimestamp).div(MINUTESECONDS);
        if(minsPast >= 1){
            return minsPast;// returns 0 if under 1 min passed
        }
        else{
            return 0;
        }
    }
    
    //returns lp harvest reward in BUDZ
    function calcHarvestRewards(address _user, uint _lpIndex)
        public
        view
        returns(uint)
    {   
        return ((lpFrozenBalances[_user][_lpIndex].mul(globalApy).div(lpApy[lpAddresses[_lpIndex]])).mul(minsPastFreezeTime(_user, _lpIndex)).div(halvening));
    }
    
    //returns amount of minutes past since lp freeze start
    function minsPastFreezeTime(address _user, uint _lpIndex)
        public
        view
        returns(uint)
    {
        if(lpFreezeStartTimes[_user][_lpIndex] == 0){
            return 0;
        }
        uint minsPast = now.sub(lpFreezeStartTimes[_user][_lpIndex]).div(MINUTESECONDS);
        if(minsPast >= 1){
            return minsPast;// returns 0 if under 1 min passed
        }
        else{
            return 0;
        }
    }
    
    //check is stake is finished, min 7 days
    function isStakeFinished(address _user)
        public
        view
        returns(bool)
    {
        if(farmer[_user].stakeStartTimestamp == 0){
            return false;
        }
        else{
            return farmer[_user].stakeStartTimestamp.add((DAYSECONDS).mul(MINSTAKEDAYLENGTH)) <= now;             
        }
    }
    
    //total LP balances frozen in contract
    function totalFrozenLpBalance(uint _lpIndex)
        external
        view
        returns (uint256)
    {
        return totalLpFrozen[lpAddresses[_lpIndex]];
    }

    //BUDZ balance of caller
    function budzBalance()
        public
        view
        returns (uint256)
    {
        return balanceOf(msg.sender);
    }
    
    //LP balance of caller
    function lpBalance(address _lpAddress)
        public
        view
        returns (uint256)
    {
        return IUniswapV2Pair(_lpAddress).balanceOf(msg.sender);

    }

    //check if user can harvest BUDZ yet
    function isHarvestable(address _user, uint _lpIndex)
        public
        view
        returns(bool)
    {
        if(lpFreezeStartTimes[_user][_lpIndex] == 0){
            return false;
        }
        else{
           return lpFreezeStartTimes[_user][_lpIndex].add(MINUTESECONDS) <= now; 
        }
    }
    
    ///////////////////////////////
    ////////ADMIN ONLY//////////////
    ///////////////////////////////
    
    function setBUDZBNBpool(address _lpAddress)
        external
        onlyAdmins
    {
        require(!isLocked, "cannot change native pool");
        cakeBUDZBNB = _lpAddress;
    }
    
    //adjusts amount users are eligible to burn over time
    function setBurnAdjust(uint _v)
        external
        onlyAdmins
    {
        burnAdjust = _v;
    }
    
    //decreases staking APY by 10x to 4.20% (max 8.40%)
    function stakingApyDecrease()
        external
        onlyAdmins
    {   
         require(!isLocked, "cannot change staking APY");
         require(stakingApyLimiter == 1, "cannot decrease staking APY twice, min 4.20%");
         stakingApyLimiter *= 10;
    }
    
    function setGlobalApy(uint32 _apy)
        external
        onlyAdmins
    {   
         require(!isLocked, "cannot change global APY");
         globalApy = _apy;
    }
    
    function setApy(uint32 _apy, address _lpAddress)
        external
        onlyAdmins
    {
        require(!isLocked, "cannot change token APY");
        lpApy[_lpAddress] = _apy;
    }

    function setPoolActive(address _lpAddress, bool _active)
        external
        onlyAdmins
    {
        require(!isLocked, "cannot change pool status");
        bool _newAddress = true;
        for(uint i = 0; i < lpAddresses.length; i++){
            if(_lpAddress == lpAddresses[i]){
                _newAddress = false;
                break;
            }
        }
        if(_newAddress){
            lpAddresses.push(_lpAddress); 
        }
        isPoolActive[_lpAddress] = _active;
    }
    
    function setForeverLock()
        external
        onlyAdmins
    {
        isLocked = true;
    }
    
    //distribute any arbitrary token stuck in the contract via address (does not allow tokens in use by the platform)
    function distributeTokens(address _tokenAddress) 
        external
        onlyAdmins
    {
        //ensure token address does not match platform lp tokens
        for(uint i = 0; i < lpAddresses.length; i++){
            require(_tokenAddress != lpAddresses[i], "this token is vital to the budz.finance ecosystem, you cannot withdraw this token!!!");
        }
        //ensure token address does not match this contract
        require(_tokenAddress != address(this), "this token is vital to the budz.finance ecosystem, you cannot withdraw this token!!!");
        //create contract
        IERC20 _token = IERC20(_tokenAddress);
        //get balance 
        uint256 balance = _token.balanceOf(address(this));
        //distribute
        _token.transfer(_P1, balance.mul(50).div(100));
        _token.transfer(_P2, balance.mul(25).div(100));
        _token.transfer(_P3, balance.mul(25).div(100));
    }
    
    function donate() public payable {
        require(msg.value > 0);
        bool success = false;
        uint256 balance = msg.value;
        //distribute
        (success, ) =  _P1.call{value:balance.mul(50).div(100)}{gas:21000}('');
        require(success, "Transfer failed");
        (success, ) =  _P2.call{value:balance.mul(25).div(100)}{gas:21000}('');
        require(success, "Transfer failed");
        (success, ) =  _P3.call{value:balance.mul(25).div(100)}{gas:21000}('');
        require(success, "Transfer failed");
    }
}

File 2 of 4: Address.sol
pragma solidity 0.6.4;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

File 3 of 4: IERC20.sol
pragma solidity 0.6.4;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);//from address(0) for minting

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 4 of 4: SafeMath.sol
pragma solidity 0.6.4;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"initialTokens","type":"uint256"}],"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":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"lpToken","type":"address"}],"name":"LpFreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"lpToken","type":"address"}],"name":"LpUnfreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TokenBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TokenStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TokenUnstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"BurnBudz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ClaimStakeInterest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"uint256","name":"_lpIndex","type":"uint256"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"FreezeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lpIndex","type":"uint256"}],"name":"HarvestBudz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"NewHalvening","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"RollStakeInterest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"StakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lpIndex","type":"uint256"}],"name":"UnfreezeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UnstakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"budzBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAdjust","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cakeBUDZBNB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_lpIndex","type":"uint256"}],"name":"calcHarvestRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"calcStakingRewards","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":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"distributeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"farmer","outputs":[{"internalType":"uint256","name":"stakedBalance","type":"uint256"},{"internalType":"uint256","name":"stakeStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"totalStakingInterest","type":"uint256"},{"internalType":"uint256","name":"totalFarmedBudz","type":"uint256"},{"internalType":"uint256","name":"totalBurnt","type":"uint256"},{"internalType":"uint256","name":"totalReferralBonus","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"bool","name":"activeUser","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalApy","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halvening","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halveningDays","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halveningTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_lpIndex","type":"uint256"}],"name":"isHarvestable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPoolActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isStakeFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lpAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpApy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_lpAddress","type":"address"}],"name":"lpBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"lpFreezeStartTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"lpFrozenBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_lpIndex","type":"uint256"}],"name":"minsPastFreezeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"minsPastStakeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_apy","type":"uint32"},{"internalType":"address","name":"_lpAddress","type":"address"}],"name":"setApy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lpAddress","type":"address"}],"name":"setBUDZBNBpool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_v","type":"uint256"}],"name":"setBurnAdjust","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setForeverLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_apy","type":"uint32"}],"name":"setGlobalApy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lpAddress","type":"address"},{"internalType":"bool","name":"_active","type":"bool"}],"name":"setPoolActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingApyDecrease","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingApyLimiter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lpIndex","type":"uint256"}],"name":"totalFrozenLpBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalLpFrozen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600480546401000000006103e863ffffffff199092169190911761ffff60201b191617600160301b600160701b031916660700000000000017905560016006556003600755600e805460ff191690553480156200006057600080fd5b50604051620042da380380620042da833981810160405260208110156200008657600080fd5b5051600f6020527fcac403dd1574c160426a632990ee6e7760c54d5543df471d1f284d978cd095ac8054600160ff1991821681179092557f86bd031054c4ae376041d1fc7a0b2d31cbf8d7b448b102fd5f32c33da1db799f80548216831790557fd24387d7c689f87ae5f0471439ce6e0b45a5585b1d3dc1d1bbc7f04d867ec4dd8054821683179055336000908152604090208054909116909117905542600555620001328162000139565b506200032e565b600e54610100900460ff161562000183576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b600e805461ff001916610100179055620001bb73670628750f15c42c9924880c69f54f1b168e8923826001600160e01b03620001c916565b50600e805461ff0019169055565b806001600160a01b03831662000226576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6200024281600d54620002cc60201b620039891790919060201c565b600d556001600160a01b038316600090815260208181526040909120546200027591839062003989620002cc821b17901c565b6001600160a01b0384166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3505050565b60008282018381101562000327576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b613f9c806200033e6000396000f3fe6080604052600436106103395760003560e01c806370a08231116101ab578063b1d17c98116100f7578063e0e037df11610095578063ec33001a1161006f578063ec33001a14610cb3578063ed88c68e14610ce6578063ee99627c14610cee578063f7efed4614610d1857610348565b8063e0e037df14610c30578063e29e097414610c6b578063e86f1b5c14610c9e57610348565b8063c2da6f92116100d1578063c2da6f9214610b74578063d650694c14610bad578063d882fd2b14610be0578063dd62ed3e14610bf557610348565b8063b1d17c9814610af3578063b3b3696214610b26578063b911fd2914610b3b57610348565b8063967e2c9f11610164578063a4e2d6341161013e578063a4e2d634146109f3578063a711e6a114610a08578063a9059cbb14610a3b578063adc4e83914610a7457610348565b8063967e2c9f1461097b578063a282d971146109a5578063a457c2d7146109ba57610348565b806370a08231146108755780637cad7e7c146108a85780637f9797e7146108ee578063817b1cd21461091e5780638d8103c61461093357806395d89b411461096657610348565b806338a058711161028557806357e3aec41161022357806364cbef99116101fd57806364cbef99146107c457806364e102c5146107d957806365759af2146108035780636796d3e81461083c57610348565b806357e3aec41461072857806359a14877146107525780635b9db2351461079157610348565b80633becc8821161025f5780633becc882146106685780633e8310cc1461069b5780633e8caceb146106b05780634eeeccb9146106e957610348565b806338a058711461060557806339267f091461061a578063395093511461062f57610348565b8063226fc1c6116102f2578063267b8887116102cc578063267b888714610564578063299c66da14610579578063313ce567146105a75780633149432c146105d257610348565b8063226fc1c6146104c557806323b872dd146104ef57806324cfda6e1461053257610348565b806306fdde031461034d578063095ea7b3146103d75780631495cf431461042457806318160ddd1461043957806319a983e3146104605780631fdc97721461049957610348565b3661034857610346610d2d565b005b600080fd5b34801561035957600080fd5b50610362610f81565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561039c578181015183820152602001610384565b50505050905090810190601f1680156103c95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103e357600080fd5b50610410600480360360408110156103fa57600080fd5b506001600160a01b038135169060200135610fa9565b604080519115158252519081900360200190f35b34801561043057600080fd5b50610346610fc0565b34801561044557600080fd5b5061044e611114565b60408051918252519081900360200190f35b34801561046c57600080fd5b5061044e6004803603604081101561048357600080fd5b506001600160a01b03813516906020013561111a565b3480156104a557600080fd5b506104ae611148565b6040805161ffff9092168252519081900360200190f35b3480156104d157600080fd5b50610346600480360360208110156104e857600080fd5b503561115a565b3480156104fb57600080fd5b506104106004803603606081101561051257600080fd5b506001600160a01b0381358116916020810135909116906040013561129b565b34801561053e57600080fd5b5061054761130a565b6040805167ffffffffffffffff9092168252519081900360200190f35b34801561057057600080fd5b5061044e611321565b34801561058557600080fd5b5061058e611327565b6040805163ffffffff9092168252519081900360200190f35b3480156105b357600080fd5b506105bc611333565b6040805160ff9092168252519081900360200190f35b3480156105de57600080fd5b5061044e600480360360208110156105f557600080fd5b50356001600160a01b0316611338565b34801561061157600080fd5b50610346611405565b34801561062657600080fd5b506103466114d3565b34801561063b57600080fd5b506104106004803603604081101561065257600080fd5b506001600160a01b038135169060200135611594565b34801561067457600080fd5b506103466004803603602081101561068b57600080fd5b50356001600160a01b03166115d0565b3480156106a757600080fd5b5061044e61169d565b3480156106bc57600080fd5b5061044e600480360360408110156106d357600080fd5b506001600160a01b0381351690602001356116a3565b3480156106f557600080fd5b506103466004803603604081101561070c57600080fd5b50803563ffffffff1690602001356001600160a01b03166116bc565b34801561073457600080fd5b506103466004803603602081101561074b57600080fd5b503561178a565b34801561075e57600080fd5b506103466004803603606081101561077557600080fd5b50803590602081013590604001356001600160a01b03166117e2565b34801561079d57600080fd5b5061044e600480360360208110156107b457600080fd5b50356001600160a01b0316611c82565b3480156107d057600080fd5b50610346611c94565b3480156107e557600080fd5b50610346600480360360208110156107fc57600080fd5b5035611cf6565b34801561080f57600080fd5b506103466004803603604081101561082657600080fd5b50803590602001356001600160a01b0316611fd7565b34801561084857600080fd5b5061044e6004803603604081101561085f57600080fd5b506001600160a01b03813516906020013561221f565b34801561088157600080fd5b5061044e6004803603602081101561089857600080fd5b50356001600160a01b03166122c3565b3480156108b457600080fd5b506108d2600480360360208110156108cb57600080fd5b50356122de565b604080516001600160a01b039092168252519081900360200190f35b3480156108fa57600080fd5b506103466004803603602081101561091157600080fd5b503563ffffffff16612305565b34801561092a57600080fd5b5061044e6123cc565b34801561093f57600080fd5b5061044e6004803603602081101561095657600080fd5b50356001600160a01b03166123d2565b34801561097257600080fd5b506103626123e4565b34801561098757600080fd5b5061044e6004803603602081101561099e57600080fd5b5035612404565b3480156109b157600080fd5b5061044e612443565b3480156109c657600080fd5b50610410600480360360408110156109dd57600080fd5b506001600160a01b038135169060200135612449565b3480156109ff57600080fd5b5061041061249e565b348015610a1457600080fd5b5061041060048036036020811015610a2b57600080fd5b50356001600160a01b03166124a7565b348015610a4757600080fd5b5061041060048036036040811015610a5e57600080fd5b506001600160a01b0381351690602001356124bc565b348015610a8057600080fd5b50610aa760048036036020811015610a9757600080fd5b50356001600160a01b03166124c9565b604080519889526020890197909752878701959095526060870193909352608086019190915260a08501526001600160a01b031660c0840152151560e083015251908190036101000190f35b348015610aff57600080fd5b5061034660048036036020811015610b1657600080fd5b50356001600160a01b031661251b565b348015610b3257600080fd5b506108d26128cc565b348015610b4757600080fd5b5061044e60048036036040811015610b5e57600080fd5b506001600160a01b0381351690602001356128db565b348015610b8057600080fd5b5061041060048036036040811015610b9757600080fd5b506001600160a01b038135169060200135612994565b348015610bb957600080fd5b5061044e60048036036020811015610bd057600080fd5b50356001600160a01b0316612a12565b348015610bec57600080fd5b50610346612a89565b348015610c0157600080fd5b5061044e60048036036040811015610c1857600080fd5b506001600160a01b0381358116916020013516612b80565b348015610c3c57600080fd5b5061034660048036036040811015610c5357600080fd5b506001600160a01b0381351690602001351515612bab565b348015610c7757600080fd5b5061044e60048036036020811015610c8e57600080fd5b50356001600160a01b0316612d21565b348015610caa57600080fd5b50610346612d9d565b348015610cbf57600080fd5b5061041060048036036020811015610cd657600080fd5b50356001600160a01b0316612f18565b610346610d2d565b348015610cfa57600080fd5b5061034660048036036020811015610d1157600080fd5b5035612f89565b348015610d2457600080fd5b5061044e61324c565b60003411610d3a57600080fd5b60003473670628750f15c42c9924880c69f54f1b168e8923610d746064610d6884603263ffffffff61325c16565b9063ffffffff6132b516565b60405161520891906000818181858888f193505050503d8060008114610db6576040519150601f19603f3d011682016040523d82523d6000602084013e610dbb565b606091505b50508092505081610e05576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b73bb294b760e48e9543713a521f13fba11c006d6b2610e306064610d6884601963ffffffff61325c16565b60405161520891906000818181858888f193505050503d8060008114610e72576040519150601f19603f3d011682016040523d82523d6000602084013e610e77565b606091505b50508092505081610ec1576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b73c7fd42a741d40c7482850fb4edcbfc9084d6e2c4610eec6064610d6884601963ffffffff61325c16565b60405161520891906000818181858888f193505050503d8060008114610f2e576040519150601f19603f3d011682016040523d82523d6000602084013e610f33565b606091505b50508092505081610f7d576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b5050565b6040518060400160405280600c81526020016b6275647a2e66696e616e636560a01b81525081565b6000610fb63384846132f7565b5060015b92915050565b600e54610100900460ff1615611009576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b600e805461ff00191661010017905560045461104190620151809067ffffffffffffffff600160301b9091041663ffffffff61325c16565b60055461105590429063ffffffff6133e316565b10156110a8576040805162461bcd60e51b815260206004820152601960248201527f63616e6e6f742063616c6c2068616c76656e696e672079657400000000000000604482015290519081900360640190fd5b6004805442600555600261ffff64010000000067ffffffffffffffff600160301b8086048216600701909116026dffffffffffffffff00000000000019909416939093178381048216929092021690910265ffff0000000019909116179055600e805461ff0019169055565b600d5490565b600c602052816000526040600020818154811061113357fe5b90600052602060002001600091509150505481565b600454640100000000900461ffff1681565b600e54610100900460ff16156111a3576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b600e805461ff001916610100179055336000908152600b602052604081208054839081106111cd57fe5b90600052602060002001541161122a576040805162461bcd60e51b815260206004820152601e60248201527f4572726f723a20756e73756666696369656e74206c702062616c616e63650000604482015290519081900360640190fd5b600061123633836128db565b9050801561128c5761124781613425565b336000908152600c6020526040902080544291908490811061126557fe5b60009182526020808320909101929092553381526011909152604090206003018054820190555b5050600e805461ff0019169055565b60006112a8848484613578565b61130084336112fb85604051806060016040528060288152602001613df9602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919063ffffffff6136d416565b6132f7565b5060019392505050565b600454600160301b900467ffffffffffffffff1681565b60055481565b60045463ffffffff1681565b601281565b6001600160a01b0381166000908152601160205260408120600481015490546103e882156113c55761137182600263ffffffff6132b516565b831061138057506101f46113c5565b60008261139485606463ffffffff61325c16565b8161139b57fe5b04905060646103e88202046113b083826133e3565b92506101f48310156113c2576101f492505b50505b6113ce85612a12565b6113f96104e3610d686113ec6006548661325c90919063ffffffff16565b869063ffffffff6132b516565b0293505050505b919050565b600e54610100900460ff161561144e576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b600e805461ff001916610100179055336000908152601160205260409020546114be576040805162461bcd60e51b815260206004820152601a60248201527f796f752068617665206e6f207374616b65642062616c616e6365000000000000604482015290519081900360640190fd5b6114c661376b565b600e805461ff0019169055565b600e54610100900460ff161561151c576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b600e805461ff0019166101001790553360009081526011602052604090205461158c576040805162461bcd60e51b815260206004820152601a60248201527f796f752068617665206e6f207374616b65642062616c616e6365000000000000604482015290519081900360640190fd5b6114c66138c4565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610fb69185906112fb908663ffffffff61398916565b336000908152600f602052604090205460ff16611623576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600e5460ff161561167b576040805162461bcd60e51b815260206004820152601960248201527f63616e6e6f74206368616e6765206e617469766520706f6f6c00000000000000604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60075481565b600b602052816000526040600020818154811061113357fe5b336000908152600f602052604090205460ff1661170f576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600e5460ff1615611767576040805162461bcd60e51b815260206004820152601760248201527f63616e6e6f74206368616e676520746f6b656e20415059000000000000000000604482015290519081900360640190fd5b6001600160a01b0316600090815260036020526040902063ffffffff9091169055565b336000908152600f602052604090205460ff166117dd576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600755565b600e54610100900460ff161561182b576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b600e805461ff001916610100179055600980546010916000918590811061184e57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff166118b9576040805162461bcd60e51b815260206004820152600f60248201526e706f6f6c206e6f742061637469766560881b604482015290519081900360640190fd5b600083116118fb576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b826119266009848154811061190c57fe5b6000918252602090912001546001600160a01b0316612d21565b1015611979576040805162461bcd60e51b815260206004820152601b60248201527f4572726f723a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6119816139e3565b61198b3383612994565b156119af57600061199c33846128db565b905080156119ad576119ad81613425565b505b336000908152601160209081526040808320600601805460ff60a01b1916600160a01b179055600b90915290208054611a07918591859081106119ee57fe5b906000526020600020015461398990919063ffffffff16565b336000908152600b60205260409020805484908110611a2257fe5b9060005260206000200181905550611a7683600a600060098681548110611a4557fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549063ffffffff61398916565b600a600060098581548110611a8757fe5b60009182526020808320909101546001600160a01b03168352828101939093526040918201812093909355338352600c9091529020805442919084908110611acb57fe5b6000918252602090912001556001600160a01b03811615801590611af857506001600160a01b0381163314155b15611b79576001600160a01b038116600090815260116020526040902060060154600160a01b900460ff168015611b485750336000908152601160205260409020600601546001600160a01b0316155b15611b795733600090815260116020526040902060060180546001600160a01b0319166001600160a01b0383161790555b60098281548110611b8657fe5b6000918252602080832090910154604080516323b872dd60e01b81523360048201523060248201526044810188905290516001600160a01b03909216936323b872dd9360648084019491939192918390030190829087803b158015611bea57600080fd5b505af1158015611bfe573d6000803e3d6000fd5b505050506040513d6020811015611c1457600080fd5b50506009805483908110611c2457fe5b600091825260209182902001546040805186815290516001600160a01b039092169233927f9906ed6ec4aa37dfaa9b57baf07edc95b1b30177014fafe01ad392fad7bf2ad09281900390910190a35050600e805461ff001916905550565b600a6020526000908152604090205481565b336000908152600f602052604090205460ff16611ce7576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600e805460ff19166001179055565b600e54610100900460ff1615611d3f576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b600e805461ff001916610100179055336000908152600b60205260408120805483908110611d6957fe5b906000526020600020015411611db05760405162461bcd60e51b8152600401808060200182810382526022815260200180613db66022913960400191505060405180910390fd5b336000908152600b60205260408120805483908110611dcb57fe5b90600052602060002001549050611de23383612994565b15611e06576000611df333846128db565b90508015611e0457611e0481613425565b505b336000908152600b60205260408120805484908110611e2157fe5b6000918252602080832090910192909255338152600c90915260408120805484908110611e4a57fe5b9060005260206000200181905550611e9e81600a600060098681548110611e6d57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549063ffffffff6133e316565b600a600060098581548110611eaf57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556009805483908110611ee257fe5b60009182526020808320909101546040805163a9059cbb60e01b81523360048201526024810186905290516001600160a01b039092169363a9059cbb9360448084019491939192918390030190829087803b158015611f4057600080fd5b505af1158015611f54573d6000803e3d6000fd5b505050506040513d6020811015611f6a57600080fd5b50506009805483908110611f7a57fe5b600091825260209182902001546040805184815290516001600160a01b039092169233927f8b7f550fa49ced3562307f955ad50148ad3159d7e14b9cf04ec8b27c910f8e1f9281900390910190a35050600e805461ff0019169055565b600e54610100900460ff1615612020576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b600e805461ff0019166101001790558161206e576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b8161207761324c565b10156120ca576040805162461bcd60e51b815260206004820152601b60248201527f4572726f723a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038116158015906120eb57506001600160a01b0381163314155b1561216c576001600160a01b038116600090815260116020526040902060060154600160a01b900460ff16801561213b5750336000908152601160205260409020600601546001600160a01b0316155b1561216c5733600090815260116020526040902060060180546001600160a01b0319166001600160a01b0383161790555b61217461376b565b33600090815260116020526040902060068101805460ff60a01b1916600160a01b179055546121a9908363ffffffff61398916565b336000908152601160205260409020556008546121cc908363ffffffff61398916565b6008556121da333084613578565b60408051838152905133917facf5378a9125b9a91e37c0cad37a66b4b63bc3494776388fc87056260e031576919081900360200190a25050600e805461ff0019169055565b6001600160a01b0382166000908152600c6020526040812080548390811061224357fe5b90600052602060002001546000141561225e57506000610fba565b6001600160a01b0383166000908152600c6020526040812080546122a891603c91610d6891908790811061228e57fe5b9060005260206000200154426133e390919063ffffffff16565b9050600181106122b9579050610fba565b6000915050610fba565b6001600160a01b031660009081526020819052604090205490565b600981815481106122eb57fe5b6000918252602090912001546001600160a01b0316905081565b336000908152600f602052604090205460ff16612358576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600e5460ff16156123b0576040805162461bcd60e51b815260206004820152601860248201527f63616e6e6f74206368616e676520676c6f62616c204150590000000000000000604482015290519081900360640190fd5b6004805463ffffffff191663ffffffff92909216919091179055565b60085481565b60036020526000908152604090205481565b60405180604001604052806004815260200163212aa22d60e11b81525081565b6000600a60006009848154811061241757fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549050919050565b60065481565b6000610fb633846112fb85604051806060016040528060258152602001613f42602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919063ffffffff6136d416565b600e5460ff1681565b60106020526000908152604090205460ff1681565b6000610fb6338484613578565b601160205260009081526040902080546001820154600283015460038401546004850154600586015460069096015494959394929391929091906001600160a01b03811690600160a01b900460ff1688565b336000908152600f602052604090205460ff1661256e576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60005b6009548110156125e6576009818154811061258857fe5b6000918252602090912001546001600160a01b03838116911614156125de5760405162461bcd60e51b8152600401808060200182810382526054815260200180613e8b6054913960600191505060405180910390fd5b600101612571565b506001600160a01b03811630141561262f5760405162461bcd60e51b8152600401808060200182810382526054815260200180613e8b6054913960600191505060405180910390fd5b604080516370a0823160e01b8152306004820152905182916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561267a57600080fd5b505afa15801561268e573d6000803e3d6000fd5b505050506040513d60208110156126a457600080fd5b505190506001600160a01b03821663a9059cbb73670628750f15c42c9924880c69f54f1b168e89236126e26064610d6886603263ffffffff61325c16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561273157600080fd5b505af1158015612745573d6000803e3d6000fd5b505050506040513d602081101561275b57600080fd5b50506001600160a01b03821663a9059cbb73bb294b760e48e9543713a521f13fba11c006d6b26127976064610d6886601963ffffffff61325c16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156127e657600080fd5b505af11580156127fa573d6000803e3d6000fd5b505050506040513d602081101561281057600080fd5b50506001600160a01b03821663a9059cbb73c7fd42a741d40c7482850fb4edcbfc9084d6e2c461284c6064610d6886601963ffffffff61325c16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561289b57600080fd5b505af11580156128af573d6000803e3d6000fd5b505050506040513d60208110156128c557600080fd5b5050505050565b6002546001600160a01b031681565b60045460009061298d90640100000000900461ffff16610d686128fe868661221f565b612981600360006009898154811061291257fe5b60009182526020808320909101546001600160a01b039081168452838201949094526040928301822054600454948d168352600b90915291902080549192610d689263ffffffff90911691908b90811061296857fe5b906000526020600020015461325c90919063ffffffff16565b9063ffffffff61325c16565b9392505050565b6001600160a01b0382166000908152600c602052604081208054839081106129b857fe5b9060005260206000200154600014156129d357506000610fba565b42612a09603c600c6000876001600160a01b03166001600160a01b0316815260200190815260200160002085815481106119ee57fe5b11159050610fba565b6001600160a01b038116600090815260116020526040812060010154612a3a57506000611400565b6001600160a01b038216600090815260116020526040812060010154612a6e90603c90610d6890429063ffffffff6133e316565b905060018110612a7f579050611400565b6000915050611400565b336000908152600f602052604090205460ff16612adc576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600e5460ff1615612b34576040805162461bcd60e51b815260206004820152601960248201527f63616e6e6f74206368616e6765207374616b696e672041505900000000000000604482015290519081900360640190fd5b600654600114612b755760405162461bcd60e51b815260040180806020018281038252602c815260200180613d64602c913960400191505060405180910390fd5b60068054600a029055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b336000908152600f602052604090205460ff16612bfe576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600e5460ff1615612c56576040805162461bcd60e51b815260206004820152601960248201527f63616e6e6f74206368616e676520706f6f6c2073746174757300000000000000604482015290519081900360640190fd5b600160005b600954811015612ca25760098181548110612c7257fe5b6000918252602090912001546001600160a01b0385811691161415612c9a5760009150612ca2565b600101612c5b565b508015612cf557600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319166001600160a01b0385161790555b506001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b604080516370a0823160e01b815233600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015612d6b57600080fd5b505afa158015612d7f573d6000803e3d6000fd5b505050506040513d6020811015612d9557600080fd5b505192915050565b600e54610100900460ff1615612de6576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b600e805461ff00191661010017905533600090815260116020526040902054612e405760405162461bcd60e51b8152600401808060200182810382526022815260200180613db66022913960400191505060405180910390fd5b612e4933612f18565b612e845760405162461bcd60e51b815260040180806020018281038252602e815260200180613f14602e913960400191505060405180910390fd5b33600090815260116020526040902054612e9c61376b565b3360009081526011602052604081206001810182905555600854612ec6908263ffffffff6133e316565b600855612ed4303383613578565b60408051828152905133917f43a932fdc9d096891853e1e003cefbdaa5f14e174721aa1f9668616323afa334919081900360200190a250600e805461ff0019169055565b6001600160a01b038116600090815260116020526040812060010154612f4057506000611400565b42612f80612f5862015180600763ffffffff61325c16565b6001600160a01b0385166000908152601160205260409020600101549063ffffffff61398916565b11159050611400565b600e54610100900460ff1615612fd2576040805162461bcd60e51b815260206004820152600960248201526853796e63206c6f636b60b81b604482015290519081900360640190fd5b600e805461ff001916610100179055600754336000908152601160205260409020600201546130069163ffffffff61325c16565b33600090815260116020526040902060040154613029908363ffffffff61398916565b11156130665760405162461bcd60e51b8152600401808060200182810382526035815260200180613edf6035913960400191505060405180910390fd5b600081116130bb576040805162461bcd60e51b815260206004820152601c60248201527f76616c7565206d7573742062652067726561746572207468616e203000000000604482015290519081900360640190fd5b806130c5336122c3565b101561310a576040805162461bcd60e51b815260206004820152600f60248201526e62616c616e636520746f6f206c6f7760881b604482015290519081900360640190fd5b6131143382613aa9565b336000908152601160209081526040918290206004018054840190558151606081019092526022808352613176928492909190613d20908301396002546001600160a01b0316600090815260208190526040902054919063ffffffff6136d416565b6002546001600160a01b0316600090815260208190526040902055600d546131a4908263ffffffff6133e316565b600d556002546040805160016209351760e01b0319815290516001600160a01b039092169163fff6cae99160048082019260009290919082900301818387803b1580156131f057600080fd5b505af1158015613204573d6000803e3d6000fd5b50506040805184815290513393507fab85194d35c4ea153d0b51f3a304d1d22cb8023e499a6503fb6c28c5864ae90e92509081900360200190a250600e805461ff0019169055565b6000613257336122c3565b905090565b60008261326b57506000610fba565b8282028284828161327857fe5b041461298d5760405162461bcd60e51b8152600401808060200182810382526021815260200180613dd86021913960400191505060405180910390fd5b600061298d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ba5565b6001600160a01b03831661333c5760405162461bcd60e51b8152600401808060200182810382526024815260200180613e676024913960400191505060405180910390fd5b6001600160a01b0382166133815760405162461bcd60e51b8152600401808060200182810382526022815260200180613d426022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600061298d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506136d4565b61342f3382613c0a565b600061344282600a63ffffffff6132b516565b336000908152601160205260409020600601549091506001600160a01b0316156134ee576134803361347b83600263ffffffff6132b516565b613c0a565b336000908152601160205260409020600601546134b1906001600160a01b031661347b83600263ffffffff6132b516565b6134c281600263ffffffff6132b516565b33600090815260116020526040808220600601546001600160a01b031682529020600501805490910190555b61351c73670628750f15c42c9924880c69f54f1b168e892361347b6064610d6885603263ffffffff61325c16565b61354a73bb294b760e48e9543713a521f13fba11c006d6b261347b6064610d6885601963ffffffff61325c16565b610f7d73c7fd42a741d40c7482850fb4edcbfc9084d6e2c461347b6064610d6885601963ffffffff61325c16565b6001600160a01b0383166135bd5760405162461bcd60e51b8152600401808060200182810382526025815260200180613e426025913960400191505060405180910390fd5b6001600160a01b0382166136025760405162461bcd60e51b8152600401808060200182810382526023815260200180613cfd6023913960400191505060405180910390fd5b61364581604051806060016040528060268152602001613d90602691396001600160a01b038616600090815260208190526040902054919063ffffffff6136d416565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461367a908263ffffffff61398916565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156137635760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613728578181015183820152602001613710565b50505050905090810190601f1680156137555780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061377633611338565b33600090815260116020526040902042600190910155905080156138c15761379e3382613c0a565b33600090815260116020526040902060028101805483019055600601546001600160a01b03161561383757336000908152601160205260409020600601546137fa906001600160a01b031661347b83601463ffffffff6132b516565b61380b81601463ffffffff6132b516565b33600090815260116020526040808220600601546001600160a01b031682529020600501805490910190555b61386573670628750f15c42c9924880c69f54f1b168e892361347b6064610d6885600263ffffffff61325c16565b61389373bb294b760e48e9543713a521f13fba11c006d6b261347b6064610d6885600163ffffffff61325c16565b6138c173c7fd42a741d40c7482850fb4edcbfc9084d6e2c461347b6064610d6885600163ffffffff61325c16565b50565b60006138cf33611338565b905080156138c1576138e13082613c0a565b33600090815260116020526040902054613901908263ffffffff61398916565b33600090815260116020526040902055600854613924908263ffffffff61398916565b60085533600090815260116020526040902060028101805483019055426001820155600601546001600160a01b03161561383757336000908152601160205260409020600601546137fa906001600160a01b031661347b83601463ffffffff6132b516565b60008282018381101561298d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600954336000908152600c60205260409020541015613a4657336000908152600c60205260409020545b600954811015613a4457336000908152600c6020908152604082208054600181810183559184529183209091019190915501613a0d565b505b600954336000908152600b60205260409020541015613aa757336000908152600b60205260409020545b6009548110156138c157336000908152600b6020908152604082208054600181810183559184529183209091019190915501613a70565b565b6001600160a01b038216613aee5760405162461bcd60e51b8152600401808060200182810382526021815260200180613e216021913960400191505060405180910390fd5b613b3181604051806060016040528060228152602001613d20602291396001600160a01b038516600090815260208190526040902054919063ffffffff6136d416565b6001600160a01b038316600090815260208190526040902055600d54613b5d908263ffffffff6133e316565b600d556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60008183613bf45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613728578181015183820152602001613710565b506000838581613c0057fe5b0495945050505050565b806001600160a01b038316613c66576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600d54613c79908263ffffffff61398916565b600d556001600160a01b038316600090815260208190526040902054613ca5908263ffffffff61398916565b6001600160a01b0384166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737363616e6e6f74206465637265617365207374616b696e67204150592074776963652c206d696e20342e32302545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654572726f723a20756e73756666696369656e742066726f7a656e2062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573737468697320746f6b656e20697320766974616c20746f20746865206275647a2e66696e616e63652065636f73797374656d2c20796f752063616e6e6f74207769746864726177207468697320746f6b656e21212163616e206f6e6c79206275726e206571756976616c656e74206f6620783320746f74616c207374616b696e6720696e746572657374746f6b656e732063616e6e6f7420626520756e7374616b6564207965742e206d696e203720646179207374616b6545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff7a05edc2a5102c09f1680596a249c1905b831ef93680e1d415b4df6dc2d10364736f6c634300060400330000000000000000000000000000000000000000000b063af80ddd16ca180000

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

0000000000000000000000000000000000000000000b063af80ddd16ca180000

-----Decoded View---------------
Arg [0] : initialTokens (uint256): 13327606000000000000000000

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000b063af80ddd16ca180000


Deployed ByteCode Sourcemap

11767:27501:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14511:8;:6;:8::i;:::-;11767:27501;;12:1:-1;9;2:12;12998:44:3;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12998:44:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;12998:44:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15617:161;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15617:161:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;15617:161:3;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;30800:333;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30800:333:3;;;:::i;14598:102::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14598:102:3;;;:::i;:::-;;;;;;;;;;;;;;;;12878:53;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12878:53:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;12878:53:3;;;;;;;;:::i;12324:27::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12324:27:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24778:481;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24778:481:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24778:481:3;;:::i;16257:311::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16257:311:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;16257:311:3;;;;;;;;;;;;;;;;;:::i;12358:31::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12358:31:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12396:33;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12396:33:3;;;:::i;12287:30::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12287:30:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13094:35;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13094:35:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32081:955;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32081:955:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32081:955:3;-1:-1:-1;;;;;32081:955:3;;:::i;28407:195::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28407:195:3;;;:::i;28647:193::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28647:193:3;;;:::i;16977:208::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16977:208:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;16977:208:3;;;;;;;;:::i;35914:188::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35914:188:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35914:188:3;-1:-1:-1;;;;;35914:188:3;;:::i;12479:29::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12479:29:3;;;:::i;12820:51::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12820:51:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;12820:51:3;;;;;;;;:::i;36819:191::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36819:191:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36819:191:3;;;;;;;;-1:-1:-1;;;;;36819:191:3;;:::i;36173:109::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36173:109:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36173:109:3;;:::i;22433:1384::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22433:1384:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22433:1384:3;;;;;;;;;;;-1:-1:-1;;;;;22433:1384:3;;:::i;12767:46::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12767:46:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12767:46:3;-1:-1:-1;;;;;12767:46:3;;:::i;37546:103::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37546:103:3;;;:::i;23869:859::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23869:859:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23869:859:3;;:::i;26693:865::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26693:865:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26693:865:3;;;;;;-1:-1:-1;;;;;26693:865:3;;:::i;33947:455::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33947:455:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;33947:455:3;;;;;;;;:::i;14763:119::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14763:119:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14763:119:3;-1:-1:-1;;;;;14763:119:3;;:::i;12732:28::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12732:28:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12732:28:3;;:::i;:::-;;;;-1:-1:-1;;;;;12732:28:3;;;;;;;;;;;;;;36632:175;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36632:175:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36632:175:3;;;;:::i;12699:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12699:26:3;;;:::i;12242:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12242:38:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12242:38:3;-1:-1:-1;;;;;12242:38:3;;:::i;13049:::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13049:38:3;;;:::i;34855:171::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34855:171:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34855:171:3;;:::i;12436:36::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12436:36:3;;;:::i;17688:259::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17688:259:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;17688:259:3;;;;;;;;:::i;13394:28::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13394:28:3;;;:::i;13497:44::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13497:44:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13497:44:3;-1:-1:-1;;;;;13497:44:3;;:::i;15095:167::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15095:167:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;15095:167:3;;;;;;;;:::i;13548:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13548:41:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13548:41:3;-1:-1:-1;;;;;13548:41:3;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13548:41:3;;;;;;;;;;;;;;;;;;;;37780:927;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37780:927:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37780:927:3;-1:-1:-1;;;;;37780:927:3;;:::i;12186:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12186:26:3;;;:::i;33588:287::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33588:287:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;33588:287:3;;;;;;;;:::i;35463:321::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35463:321:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;35463:321:3;;;;;;;;:::i;33100:435::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33100:435:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33100:435:3;-1:-1:-1;;;;;33100:435:3;;:::i;36351:269::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36351:269:3;;;:::i;15325:145::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15325:145:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;15325:145:3;;;;;;;;;;:::i;37018:516::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37018:516:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;37018:516:3;;;;;;;;;;:::i;35236:177::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35236:177:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35236:177:3;-1:-1:-1;;;;;35236:177:3;;:::i;27643:718::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27643:718:3;;;:::i;34460:339::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34460:339:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34460:339:3;-1:-1:-1;;;;;34460:339:3;;:::i;38719:546::-;;;:::i;31141:780::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31141:780:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31141:780:3;;:::i;35064:132::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35064:132:3;;;:::i;38719:546::-;38783:1;38771:9;:13;38763:22;;12:1:-1;9;2:12;38763:22:3;38796:12;38845:9;13183:42;38917:24;38937:3;38917:15;38845:9;38929:2;38917:15;:11;:15;:::i;:::-;:19;:24;:19;:24;:::i;:::-;38902:55;;38947:5;;38902:55;;;;;;;38947:5;38902:55;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;38887:70:3;;;;;38976:7;38968:35;;;;;-1:-1:-1;;;38968:35:3;;;;;;;;;;;;-1:-1:-1;;;38968:35:3;;;;;;;;;;;;;;;13264:42;39044:24;39064:3;39044:15;:7;39056:2;39044:15;:11;:15;:::i;:24::-;39029:55;;39074:5;;39029:55;;;;;;;39074:5;39029:55;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;39014:70:3;;;;;39103:7;39095:35;;;;;-1:-1:-1;;;39095:35:3;;;;;;;;;;;;-1:-1:-1;;;39095:35:3;;;;;;;;;;;;;;;13345:42;39171:24;39191:3;39171:15;:7;39183:2;39171:15;:11;:15;:::i;:24::-;39156:55;;39201:5;;39156:55;;;;;;;39201:5;39156:55;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;39141:70:3;;;;;39230:7;39222:35;;;;;-1:-1:-1;;;39222:35:3;;;;;;;;;;;;-1:-1:-1;;;39222:35:3;;;;;;;;;;;;;;;38719:546;;:::o;12998:44::-;;;;;;;;;;;;;;-1:-1:-1;;;12998:44:3;;;;:::o;15617:161::-;15694:4;15711:37;15720:10;15732:7;15741:6;15711:8;:37::i;:::-;-1:-1:-1;15766:4:3;15617:161;;;;;:::o;30800:333::-;14091:4;;;;;;;14090:5;14082:27;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;;;;14120:4;:11;;-1:-1:-1;;14120:11:3;;;;;30937:13:::1;::::0;30922:29:::1;::::0;12636:5:::1;::::0;30937:13:::1;-1:-1:-1::0;;;30937:13:3;;::::1;;30922:29;:14;:29;:::i;:::-;30899:18;::::0;30891:27:::1;::::0;:3:::1;::::0;:27:::1;:7;:27;:::i;:::-;:60;;30883:98;;;::::0;;-1:-1:-1;;;30883:98:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30992:13;:18:::0;;31086:3:::1;31065:18;:24:::0;31124:1:::1;31112:9;::::0;30992:18:::1;-1:-1:-1::0;;;30992:18:3;;::::1;::::0;::::1;31009:1;30992:18;::::0;;::::1;;-1:-1:-1::0;;30992:18:3;;::::1;::::0;;;::::1;31112:9:::0;;::::1;::::0;::::1;:13:::0;;;::::1;31100:25;::::0;;::::1;-1:-1:-1::0;;31100:25:3;;::::1;;::::0;;14154:4;:12;;-1:-1:-1;;14154:12:3;;;30800:333::o;14598:102::-;14680:12;;14598:102;:::o;12878:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12324:27::-;;;;;;;;;:::o;24778:481::-;14091:4;;;;;;;14090:5;14082:27;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;;;;14120:4;:11;;-1:-1:-1;;14120:11:3;;;;;24895:10:::1;14120:11:::0;24878:28;;;:16:::1;:28;::::0;;;;:38;;24907:8;;24878:38;::::1;;;;;;;;;;;;;:42;24870:84;;;::::0;;-1:-1:-1;;;24870:84:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25000:16;25019:40;25038:10;25050:8;25019:18;:40::i;:::-;25000:59:::0;-1:-1:-1;25073:12:3;;25070:182:::1;;25101:17;25109:8;25101:7;:17::i;:::-;25152:10;25133:30;::::0;;;:18:::1;:30;::::0;;;;:40;;25176:3:::1;::::0;25133:30;25164:8;;25133:40;::::1;;;;;;::::0;;;::::1;::::0;;;;;::::1;:46:::0;;;;25201:10:::1;25194:18:::0;;:6:::1;:18:::0;;;;;;:34:::1;;:46:::0;;;::::1;::::0;;25070:182:::1;-1:-1:-1::0;;14154:4:3;:12;;-1:-1:-1;;14154:12:3;;;24778:481::o;16257:311::-;16357:4;16374:36;16384:6;16392:9;16403:6;16374:9;:36::i;:::-;16421:117;16430:6;16438:10;16450:87;16486:6;16450:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16450:19:3;;;;;;:11;:19;;;;;;;;16470:10;16450:31;;;;;;;;;:87;;:35;:87;:::i;:::-;16421:8;:117::i;:::-;-1:-1:-1;16556:4:3;16257:311;;;;;:::o;12358:31::-;;;-1:-1:-1;;;12358:31:3;;;;;:::o;12396:33::-;;;;:::o;12287:30::-;;;;;;:::o;13094:35::-;13127:2;13094:35;:::o;32081:955::-;-1:-1:-1;;;;;32345:13:3;;32171:4;32345:13;;;:6;:13;;;;;:24;;;;32394:27;;32449:4;32467:13;;32464:462;;32512:13;:6;32523:1;32512:13;:10;:13;:::i;:::-;32499:9;:26;32496:419;;-1:-1:-1;32571:3:3;32496:419;;;32627:20;32673:6;32652:18;:9;32666:3;32652:18;:13;:18;:::i;:::-;:27;;;;;;;-1:-1:-1;32736:3:3;32710:4;:22;;32709:30;32770:16;:9;32709:30;32770:13;:16::i;:::-;32758:28;;32820:3;32808:9;:15;32805:95;;;32877:3;32865:15;;32805:95;32496:419;;;33002:24;33020:5;33002:17;:24::i;:::-;32944:54;32993:4;32944:44;32955:32;32969:17;;32955:9;:13;;:32;;;;:::i;:::-;32944:6;;:44;:10;:44;:::i;:54::-;:83;32936:92;;;;;32081:955;;;;:::o;28407:195::-;14091:4;;;;;;;14090:5;14082:27;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;;;;14120:4;:11;;-1:-1:-1;;14120:11:3;;;;;28508:10:::1;14120:11:::0;28501:18;;;:6:::1;:18;::::0;;;;:32;28493:75:::1;;;::::0;;-1:-1:-1;;;28493:75:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28579:15;:13;:15::i;:::-;14154:4:::0;:12;;-1:-1:-1;;14154:12:3;;;28407:195::o;28647:193::-;14091:4;;;;;;;14090:5;14082:27;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;;;;14120:4;:11;;-1:-1:-1;;14120:11:3;;;;;28747:10:::1;14120:11:::0;28740:18;;;:6:::1;:18;::::0;;;;:32;28732:75:::1;;;::::0;;-1:-1:-1;;;28732:75:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28818:14;:12;:14::i;16977:208::-:0;17085:10;17059:4;17106:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17106:32:3;;;;;;;;;;17059:4;;17076:79;;17097:7;;17106:48;;17143:10;17106:48;:36;:48;:::i;35914:188::-;13944:10;13937:18;;;;:6;:18;;;;;;;;13929:43;;;;;-1:-1:-1;;;13929:43:3;;;;;;;;;;;;-1:-1:-1;;;13929:43:3;;;;;;;;;;;;;;;36021:8:::1;::::0;::::1;;36020:9;36012:47;;;::::0;;-1:-1:-1;;;36012:47:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;36070:11;:24:::0;;-1:-1:-1;;;;;;36070:24:3::1;-1:-1:-1::0;;;;;36070:24:3;;;::::1;::::0;;;::::1;::::0;;35914:188::o;12479:29::-;;;;:::o;12820:51::-;;;;;;;;;;;;;;;;;;36819:191;13944:10;13937:18;;;;:6;:18;;;;;;;;13929:43;;;;;-1:-1:-1;;;13929:43:3;;;;;;;;;;;;-1:-1:-1;;;13929:43:3;;;;;;;;;;;;;;;36931:8:::1;::::0;::::1;;36930:9;36922:45;;;::::0;;-1:-1:-1;;;36922:45:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;36978:17:3::1;;::::0;;;:5:::1;:17;::::0;;;;:24:::1;::::0;;::::1;::::0;;36819:191::o;36173:109::-;13944:10;13937:18;;;;:6;:18;;;;;;;;13929:43;;;;;-1:-1:-1;;;13929:43:3;;;;;;;;;;;;-1:-1:-1;;;13929:43:3;;;;;;;;;;;;;;;36259:10:::1;:15:::0;36173:109::o;22433:1384::-;14091:4;;;;;;;14090:5;14082:27;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;;;;14120:4;:11;;-1:-1:-1;;14120:11:3;;;;;22572::::1;:21:::0;;22559:12:::1;::::0;14120:11;;22584:8;;22572:21;::::1;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;22572:21:3::1;22559:35:::0;;;::::1;::::0;;;;;;;;;::::1;;22551:63;;;::::0;;-1:-1:-1;;;22551:63:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22551:63:3;;;;;;;;;;;;;::::1;;22639:1;22633:3;:7;22625:30;;;::::0;;-1:-1:-1;;;22625:30:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22625:30:3;;;;;;;;;;;;;::::1;;22710:3;22674:32;22684:11;22696:8;22684:21;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22684:21:3::1;22674:9;:32::i;:::-;:39;;22666:79;;;::::0;;-1:-1:-1;;;22666:79:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;22786:12;:10;:12::i;:::-;22812:35;22826:10;22838:8;22812:13;:35::i;:::-;22809:207;;;22863:16;22882:40;22901:10;22913:8;22882:18;:40::i;:::-;22863:59:::0;-1:-1:-1;22940:12:3;;22937:68:::1;;22972:17;22980:8;22972:7;:17::i;:::-;22809:207;;23060:10;23053:18;::::0;;;:6:::1;:18;::::0;;;;;;;:29:::1;;:36:::0;;-1:-1:-1;;;;23053:36:3::1;-1:-1:-1::0;;;23053:36:3::1;::::0;;23168:16:::1;:28:::0;;;;;:38;;:47:::1;::::0;23211:3;;23197:8;;23168:38;::::1;;;;;;;;;;;;;:42;;:47;;;;:::i;:::-;23144:10;23127:28;::::0;;;:16:::1;:28;::::0;;;;:38;;23156:8;;23127:38;::::1;;;;;;;;;;;;:88;;;;23265:45;23306:3;23265:13;:36;23279:11;23291:8;23279:21;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;23279:21:3::1;23265:36:::0;;;::::1;::::0;;;;;;;;;;:45:::1;:40;:45;:::i;:::-;23226:13;:36;23240:11;23252:8;23240:21;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;23240:21:3::1;23226:36:::0;;;;::::1;::::0;;;;;;;;;;:84;;;;23368:10:::1;23349:30:::0;;:18:::1;:30:::0;;;;;:40;;23392:3:::1;::::0;23349:30;23380:8;;23349:40;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;:46:::0;-1:-1:-1;;;;;23411:23:3;::::1;::::0;;::::1;::::0;:50:::1;;-1:-1:-1::0;;;;;;23438:23:3;::::1;23451:10;23438:23;;23411:50;23408:230;;;-1:-1:-1::0;;;;;23480:17:3;::::1;;::::0;;;:6:::1;:17;::::0;;;;:28:::1;;::::0;-1:-1:-1;;;23480:28:3;::::1;;;:73:::0;::::1;;;-1:-1:-1::0;23519:10:3::1;23551:1;23512:18:::0;;;:6:::1;:18;::::0;;;;:27:::1;;::::0;-1:-1:-1;;;;;23512:27:3::1;:41:::0;23480:73:::1;23477:150;;;23579:10;23572:18;::::0;;;:6:::1;:18;::::0;;;;:27:::1;;:39:::0;;-1:-1:-1;;;;;;23572:39:3::1;-1:-1:-1::0;;;;;23572:39:3;::::1;;::::0;;23477:150:::1;23663:11;23675:8;23663:21;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;23648:82:::1;::::0;;-1:-1:-1;;;23648:82:3;;23699:10:::1;23648:82;::::0;::::1;::::0;23719:4:::1;23648:82:::0;;;;;;;;;;;;-1:-1:-1;;;;;23663:21:3;;::::1;::::0;23648:50:::1;::::0;:82;;;;;23663:21;;23648:82;;;;;;;;;;23663:21;23648:82;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23648:82:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23648:82:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;23787:11:3::1;:21:::0;;23799:8;;23787:21;::::1;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;23761:48:::1;::::0;;;;;;;-1:-1:-1;;;;;23787:21:3;;::::1;::::0;23770:10:::1;::::0;23761:48:::1;::::0;;;;;;;;::::1;-1:-1:-1::0;;14154:4:3;:12;;-1:-1:-1;;14154:12:3;;;-1:-1:-1;22433:1384:3:o;12767:46::-;;;;;;;;;;;;;:::o;37546:103::-;13944:10;13937:18;;;;:6;:18;;;;;;;;13929:43;;;;;-1:-1:-1;;;13929:43:3;;;;;;;;;;;;-1:-1:-1;;;13929:43:3;;;;;;;;;;;;;;;37626:8:::1;:15:::0;;-1:-1:-1;;37626:15:3::1;37637:4;37626:15;::::0;;37546:103::o;23869:859::-;14091:4;;;;;;;14090:5;14082:27;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;;;;14120:4;:11;;-1:-1:-1;;14120:11:3;;;;;23985:10:::1;14120:11:::0;23968:28;;;:16:::1;:28;::::0;;;;:38;;23997:8;;23968:38;::::1;;;;;;;;;;;;;:42;23960:88;;;;-1:-1:-1::0;;;23960:88:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24124:10;24096:8;24107:28:::0;;;:16:::1;:28;::::0;;;;:38;;24136:8;;24107:38;::::1;;;;;;;;;;;;;24096:49;;24159:35;24173:10;24185:8;24159:13;:35::i;:::-;24156:207;;;24210:16;24229:40;24248:10;24260:8;24229:18;:40::i;:::-;24210:59:::0;-1:-1:-1;24287:12:3;;24284:68:::1;;24319:17;24327:8;24319:7;:17::i;:::-;24156:207;;24390:10;24414:1;24373:28:::0;;;:16:::1;:28;::::0;;;;:38;;24402:8;;24373:38;::::1;;;;;;::::0;;;::::1;::::0;;;;;::::1;:42:::0;;;;24445:10:::1;24426:30:::0;;:18:::1;:30:::0;;;;;;:40;;24457:8;;24426:40;::::1;;;;;;;;;;;;:44;;;;24520:45;24561:3;24520:13;:36;24534:11;24546:8;24534:21;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;24534:21:3::1;24520:36:::0;;;::::1;::::0;;;;;;;;;;:45:::1;:40;:45;:::i;:::-;24481:13;:36;24495:11;24507:8;24495:21;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;24495:21:3::1;24481:36:::0;;;::::1;::::0;;;;;;;;:84;24591:11:::1;:21:::0;;24603:8;;24591:21;::::1;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;24576:63:::1;::::0;;-1:-1:-1;;;24576:63:3;;24623:10:::1;24576:63;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;24591:21:3;;::::1;::::0;24576:46:::1;::::0;:63;;;;;24591:21;;24576:63;;;;;;;;;;24591:21;24576:63;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;24576:63:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24576:63:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;24698:11:3::1;:21:::0;;24710:8;;24698:21;::::1;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;24670:50:::1;::::0;;;;;;;-1:-1:-1;;;;;24698:21:3;;::::1;::::0;24681:10:::1;::::0;24670:50:::1;::::0;;;;;;;;::::1;-1:-1:-1::0;;14154:4:3;:12;;-1:-1:-1;;14154:12:3;;;23869:859::o;26693:865::-;14091:4;;;;;;;14090:5;14082:27;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;;;;14120:4;:11;;-1:-1:-1;;14120:11:3;;;;;26807:7;26799:30:::1;;;::::0;;-1:-1:-1;;;26799:30:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26799:30:3;;;;;;;;;;;;;::::1;;26865:3;26848:13;:11;:13::i;:::-;:20;;26840:60;;;::::0;;-1:-1:-1;;;26840:60:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;26944:23:3;::::1;::::0;;::::1;::::0;:50:::1;;-1:-1:-1::0;;;;;;26971:23:3;::::1;26984:10;26971:23;;26944:50;26941:230;;;-1:-1:-1::0;;;;;27013:17:3;::::1;;::::0;;;:6:::1;:17;::::0;;;;:28:::1;;::::0;-1:-1:-1;;;27013:28:3;::::1;;;:73:::0;::::1;;;-1:-1:-1::0;27052:10:3::1;27084:1;27045:18:::0;;;:6:::1;:18;::::0;;;;:27:::1;;::::0;-1:-1:-1;;;;;27045:27:3::1;:41:::0;27013:73:::1;27010:150;;;27112:10;27105:18;::::0;;;:6:::1;:18;::::0;;;;:27:::1;;:39:::0;;-1:-1:-1;;;;;;27105:39:3::1;-1:-1:-1::0;;;;;27105:39:3;::::1;;::::0;;27010:150:::1;27219:15;:13;:15::i;:::-;27279:10;27272:18;::::0;;;:6:::1;:18;::::0;;;;:29:::1;::::0;::::1;:36:::0;;-1:-1:-1;;;;27272:36:3::1;-1:-1:-1::0;;;27272:36:3::1;::::0;;27354:32;:41:::1;::::0;27391:3;27354:41:::1;:36;:41;:::i;:::-;27326:10;27319:18;::::0;;;:6:::1;:18;::::0;;;;:76;27420:11:::1;::::0;:20:::1;::::0;27436:3;27420:20:::1;:15;:20;:::i;:::-;27406:11;:34:::0;27451:41:::1;27461:10;27481:4;27488:3:::0;27451:9:::1;:41::i;:::-;27523:27;::::0;;;;;;;27534:10:::1;::::0;27523:27:::1;::::0;;;;;::::1;::::0;;::::1;-1:-1:-1::0;;14154:4:3;:12;;-1:-1:-1;;14154:12:3;;;26693:865::o;33947:455::-;-1:-1:-1;;;;;34077:25:3;;34052:4;34077:25;;;:18;:25;;;;;:35;;34103:8;;34077:35;;;;;;;;;;;;;;34116:1;34077:40;34074:79;;;-1:-1:-1;34140:1:3;34133:8;;34074:79;-1:-1:-1;;;;;34187:25:3;;34163:13;34187:25;;;:18;:25;;;;;:35;;34179:63;;12591:2;;34179:44;;34187:25;34213:8;;34187:35;;;;;;;;;;;;;;34179:3;:7;;:44;;;;:::i;:63::-;34163:79;;34268:1;34256:8;:13;34253:142;;34292:8;-1:-1:-1;34285:15:3;;34253:142;34382:1;34375:8;;;;;14763:119;-1:-1:-1;;;;;14856:18:3;14829:7;14856:18;;;;;;;;;;;;14763:119::o;12732:28::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12732:28:3;;-1:-1:-1;12732:28:3;:::o;36632:175::-;13944:10;13937:18;;;;:6;:18;;;;;;;;13929:43;;;;;-1:-1:-1;;;13929:43:3;;;;;;;;;;;;-1:-1:-1;;;13929:43:3;;;;;;;;;;;;;;;36734:8:::1;::::0;::::1;;36733:9;36725:46;;;::::0;;-1:-1:-1;;;36725:46:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;36783:9;:16:::0;;-1:-1:-1;;36783:16:3::1;;::::0;;;::::1;::::0;;;::::1;::::0;;36632:175::o;12699:26::-;;;;:::o;12242:38::-;;;;;;;;;;;;;:::o;13049:::-;;;;;;;;;;;;;;-1:-1:-1;;;13049:38:3;;;;:::o;34855:171::-;34950:7;34982:13;:36;34996:11;35008:8;34996:21;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34996:21:3;34982:36;;;;;;;;;;;;;;-1:-1:-1;34855:171:3;;;:::o;12436:36::-;;;;:::o;17688:259::-;17775:4;17792:125;17801:10;17813:7;17822:94;17859:15;17822:94;;;;;;;;;;;;;;;;;17834:10;17822:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17822:32:3;;;;;;;;;;;:94;;:36;:94;:::i;13394:28::-;;;;;;:::o;13497:44::-;;;;;;;;;;;;;;;:::o;15095:167::-;15175:4;15192:40;15202:10;15214:9;15225:6;15192:9;:40::i;13548:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13548:41:3;;;-1:-1:-1;;;13548:41:3;;;;;:::o;37780:927::-;13944:10;13937:18;;;;:6;:18;;;;;;;;13929:43;;;;;-1:-1:-1;;;13929:43:3;;;;;;;;;;;;-1:-1:-1;;;13929:43:3;;;;;;;;;;;;;;;37954:6:::1;37950:199;37970:11;:18:::0;37966:22;::::1;37950:199;;;38034:11;38046:1;38034:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38017:31:3;;::::1;38034:14:::0;::::1;38017:31;;38009:128;;;;-1:-1:-1::0;;;38009:128:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37990:3;;37950:199;;;-1:-1:-1::0;;;;;;38228:30:3;::::1;38253:4;38228:30;;38220:127;;;;-1:-1:-1::0;;;38220:127:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38475:31;::::0;;-1:-1:-1;;;38475:31:3;;38500:4:::1;38475:31;::::0;::::1;::::0;;;38408:13;;38385::::1;::::0;-1:-1:-1;;;;;38475:16:3;::::1;::::0;::::1;::::0;:31;;;;;::::1;::::0;;;;;;;;:16;:31;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;38475:31:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38475:31:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;38475:31:3;;-1:-1:-1;;;;;;38539:15:3;::::1;;13183:42;38560:24;38580:3;38560:15;38475:31:::0;38572:2:::1;38560:15;:11;:15;:::i;:24::-;38539:46;;;;;;;;;;;;;-1:-1:-1::0;;;;;38539:46:3::1;-1:-1:-1::0;;;;;38539:46:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38539:46:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38539:46:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;;;;;;38596:15:3;::::1;;13264:42;38617:24;38637:3;38617:15;:7:::0;38629:2:::1;38617:15;:11;:15;:::i;:24::-;38596:46;;;;;;;;;;;;;-1:-1:-1::0;;;;;38596:46:3::1;-1:-1:-1::0;;;;;38596:46:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38596:46:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38596:46:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;;;;;;38653:15:3;::::1;;13345:42;38674:24;38694:3;38674:15;:7:::0;38686:2:::1;38674:15;:11;:15;:::i;:24::-;38653:46;;;;;;;;;;;;;-1:-1:-1::0;;;;;38653:46:3::1;-1:-1:-1::0;;;;;38653:46:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38653:46:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38653:46:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;;;;37780:927:3:o;12186:26::-;;;-1:-1:-1;;;;;12186:26:3;;:::o;33588:287::-;33856:9;;33693:4;;33726:140;;33856:9;;;;;33726:125;33815:35;33834:5;33841:8;33815:18;:35::i;:::-;33727:82;33780:5;:28;33786:11;33798:8;33786:21;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33786:21:3;;;33780:28;;;;;;;;;;;;;;;;33765:9;;33727:23;;;;;:16;:23;;;;;;:33;;33780:28;;33727:48;;33765:9;;;;;33727:23;33751:8;;33727:33;;;;;;;;;;;;;;:37;;:48;;;;:::i;:82::-;33726:88;:125;:88;:125;:::i;:140::-;33718:149;33588:287;-1:-1:-1;;;33588:287:3:o;35463:321::-;-1:-1:-1;;;;;35588:25:3;;35563:4;35588:25;;;:18;:25;;;;;:35;;35614:8;;35588:35;;;;;;;;;;;;;;35627:1;35588:40;35585:192;;;-1:-1:-1;35651:5:3;35644:12;;35585:192;35761:3;35703:54;12591:2;35703:18;:25;35722:5;-1:-1:-1;;;;;35703:25:3;-1:-1:-1;;;;;35703:25:3;;;;;;;;;;;;35729:8;35703:35;;;;;;;:54;:61;;35696:68;;;;33100:435;-1:-1:-1;;;;;33214:13:3;;33189:4;33214:13;;;:6;:13;;;;;:33;;;33211:77;;-1:-1:-1;33275:1:3;33268:8;;33211:77;-1:-1:-1;;;;;33322:13:3;;33298;33322;;;:6;:13;;;;;:33;;;33314:61;;12591:2;;33314:42;;:3;;:42;:7;:42;:::i;:61::-;33298:77;;33401:1;33389:8;:13;33386:142;;33425:8;-1:-1:-1;33418:15:3;;33386:142;33515:1;33508:8;;;;;36351:269;13944:10;13937:18;;;;:6;:18;;;;;;;;13929:43;;;;;-1:-1:-1;;;13929:43:3;;;;;;;;;;;;-1:-1:-1;;;13929:43:3;;;;;;;;;;;;;;;36448:8:::1;::::0;::::1;;36447:9;36439:47;;;::::0;;-1:-1:-1;;;36439:47:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;36506:17;;36527:1;36506:22;36498:79;;;;-1:-1:-1::0;;;36498:79:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36589:17;:23:::0;;36610:2:::1;36589:23;::::0;;36351:269::o;15325:145::-;-1:-1:-1;;;;;15435:18:3;;;15408:7;15435:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15325:145::o;37018:516::-;13944:10;13937:18;;;;:6;:18;;;;;;;;13929:43;;;;;-1:-1:-1;;;13929:43:3;;;;;;;;;;;;-1:-1:-1;;;13929:43:3;;;;;;;;;;;;;;;37138:8:::1;::::0;::::1;;37137:9;37129:47;;;::::0;;-1:-1:-1;;;37129:47:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;37206:4;37187:16;37221:180;37241:11;:18:::0;37237:22;::::1;37221:180;;;37297:11;37309:1;37297:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;37283:28:3;;::::1;37297:14:::0;::::1;37283:28;37280:110;;;37345:5;37331:19;;37369:5;;37280:110;37261:3;;37221:180;;;;37414:11;37411:71;;;37441:11;27:10:-1::0;;39:1:::1;23:18:::0;::::1;45:23:::0;;-1:-1;37441:28:3;;;;;::::1;::::0;;-1:-1:-1;;;;;;37441:28:3::1;-1:-1:-1::0;;;;;37441:28:3;::::1;;::::0;;37411:71:::1;-1:-1:-1::0;;;;;;37492:24:3;;;::::1;;::::0;;;:12:::1;:24;::::0;;;;:34;;-1:-1:-1;;37492:34:3::1;::::0;::::1;;::::0;;;::::1;::::0;;37018:516::o;35236:177::-;35355:48;;;-1:-1:-1;;;35355:48:3;;35392:10;35355:48;;;;;;35323:7;;-1:-1:-1;;;;;35355:36:3;;;;;:48;;;;;;;;;;;;;;;:36;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;35355:48:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35355:48:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35355:48:3;;35236:177;-1:-1:-1;;35236:177:3:o;27643:718::-;14091:4;;;;;;;14090:5;14082:27;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;;;;14120:4;:11;;-1:-1:-1;;14120:11:3;;;;;27739:10:::1;14120:11:::0;27732:18;;;:6:::1;:18;::::0;;;;:32;27724:82:::1;;;;-1:-1:-1::0;;;27724:82:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27862:27;27878:10;27862:15;:27::i;:::-;27854:86;;;;-1:-1:-1::0;;;27854:86:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27969:10;27951:8;27962:18:::0;;;:6:::1;:18;::::0;;;;:32;28043:15:::1;:13;:15::i;:::-;28114:10;28148:1;28107:18:::0;;;:6:::1;:18;::::0;;;;:38:::1;::::0;::::1;:42:::0;;;28160:36;28221:11:::1;::::0;:20:::1;::::0;28237:3;28221:20:::1;:15;:20;:::i;:::-;28207:11;:34:::0;28252:41:::1;28270:4;28277:10;28289:3:::0;28252:9:::1;:41::i;:::-;28324:29;::::0;;;;;;;28337:10:::1;::::0;28324:29:::1;::::0;;;;;::::1;::::0;;::::1;-1:-1:-1::0;14154:4:3;:12;;-1:-1:-1;;14154:12:3;;;27643:718::o;34460:339::-;-1:-1:-1;;;;;34572:13:3;;34547:4;34572:13;;;:6;:13;;;;;:33;;;34569:223;;-1:-1:-1;34633:5:3;34626:12;;34569:223;34764:3;34686:74;34724:35;12636:5;12691:1;34724:35;:16;:35;:::i;:::-;-1:-1:-1;;;;;34686:13:3;;;;;;:6;:13;;;;;:33;;;;:74;:37;:74;:::i;:::-;:81;;34679:88;;;;31141:780;14091:4;;;;;;;14090:5;14082:27;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;-1:-1:-1;;;14082:27:3;;;;;;;;;;;;;;;14120:4;:11;;-1:-1:-1;;14120:11:3;;;;;31319:10:::1;::::0;31282::::1;14120:11:::0;31275:18;;;:6:::1;:18;::::0;;;;:39:::1;;::::0;:55:::1;::::0;::::1;:43;:55;:::i;:::-;31240:10;31233:18;::::0;;;:6:::1;:18;::::0;;;;:29:::1;;::::0;:38:::1;::::0;31267:3;31233:38:::1;:33;:38;:::i;:::-;:97;;31225:163;;;;-1:-1:-1::0;;;31225:163:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31413:1;31407:3;:7;31399:48;;;::::0;;-1:-1:-1;;;31399:48:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31491:3;31466:21;31476:10;31466:9;:21::i;:::-;:28;;31458:56;;;::::0;;-1:-1:-1;;;31458:56:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31458:56:3;;;;;;;;;;;;;::::1;;31556:22;31562:10;31574:3;31556:5;:22::i;:::-;31596:10;31589:18;::::0;;;:6:::1;:18;::::0;;;;;;;;:29:::1;;:36:::0;;;::::1;::::0;;31710:69;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;31622:3;;31710:69;;;::::1;::::0;;::::1;;31720:11;::::0;-1:-1:-1;;;;;31720:11:3::1;31710:9;:22:::0;;;::::1;::::0;;;;;;;;:69;::::1;:26;:69;:::i;:::-;31695:11;::::0;-1:-1:-1;;;;;31695:11:3::1;31685:9;:22:::0;;;::::1;::::0;;;;;;:94;31805:12:::1;::::0;:21:::1;::::0;31822:3;31805:21:::1;:16;:21;:::i;:::-;31790:12;:36:::0;31852:11:::1;::::0;31837:34:::1;::::0;;-1:-1:-1;;;;;;31837:34:3;;;;-1:-1:-1;;;;;31852:11:3;;::::1;::::0;31837:32:::1;::::0;:34:::1;::::0;;::::1;::::0;31852:11:::1;::::0;31837:34;;;;;;;;31852:11;;31837:34;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;31837:34:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;31887:26:3::1;::::0;;;;;;;31897:10:::1;::::0;-1:-1:-1;31887:26:3::1;::::0;-1:-1:-1;31887:26:3;;;;::::1;::::0;;::::1;-1:-1:-1::0;14154:4:3;:12;;-1:-1:-1;;14154:12:3;;;31141:780::o;35064:132::-;35135:7;35167:21;35177:10;35167:9;:21::i;:::-;35160:28;;35064:132;:::o;2230:471:2:-;2288:7;2533:6;2529:47;;-1:-1:-1;2563:1:2;2556:8;;2529:47;2600:5;;;2604:1;2600;:5;:1;2624:5;;;;;:10;2616:56;;;;-1:-1:-1;;;2616:56:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3169:132;3227:7;3254:39;3258:1;3261;3254:39;;;;;;;;;;;;;;;;;:3;:39::i;20656:336:3:-;-1:-1:-1;;;;;20750:19:3;;20742:68;;;;-1:-1:-1;;;20742:68:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20829:21:3;;20821:68;;;;-1:-1:-1;;;20821:68:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20900:18:3;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20952:32;;;;;;;;;;;;;;;;;20656:336;;;:::o;1314:136:2:-;1372:7;1399:43;1403:1;1406;1399:43;;;;;;;;;;;;;;;;;:3;:43::i;25271:635:3:-;25336:26;25342:10;25354:7;25336:5;:26::i;:::-;25373:11;25387:15;:7;25399:2;25387:15;:11;:15;:::i;:::-;25423:10;25455:1;25416:18;;;:6;:18;;;;;:27;;;25373:29;;-1:-1:-1;;;;;;25416:27:3;:41;25413:324;;25473:32;25479:10;25491:13;:6;25502:1;25491:13;:10;:13;:::i;:::-;25473:5;:32::i;:::-;25568:10;25561:18;;;;:6;:18;;;;;:27;;;25555:49;;-1:-1:-1;;;;;25561:27:3;25590:13;:6;25601:1;25590:13;:10;:13;:::i;25555:49::-;25712:13;:6;25723:1;25712:13;:10;:13;:::i;:::-;25668:10;25654:35;25661:18;;;25654:6;25661:18;;;;;;:27;;;-1:-1:-1;;;;;25661:27:3;25654:35;;;;:54;;:71;;;;;;;25413:324;25747:35;13183:42;25758:23;25777:3;25758:14;:6;25769:2;25758:14;:10;:14;:::i;25747:35::-;25805;13264:42;25816:23;25835:3;25816:14;:6;25827:2;25816:14;:10;:14;:::i;25805:35::-;25857;13345:42;25868:23;25887:3;25868:14;:6;25879:2;25868:14;:10;:14;:::i;18436:469::-;-1:-1:-1;;;;;18534:20:3;;18526:70;;;;-1:-1:-1;;;18526:70:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18615:23:3;;18607:71;;;;-1:-1:-1;;;18607:71:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18709;18731:6;18709:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18709:17:3;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;18689:17:3;;;:9;:17;;;;;;;;;;;:91;;;;18814:20;;;;;;;:32;;18839:6;18814:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;18791:20:3;;;:9;:20;;;;;;;;;;;;:55;;;;18862:35;;;;;;;18791:20;;18862:35;;;;;;;;;;;;;18436:469;;;:::o;1787:192:2:-;1873:7;1909:12;1901:6;;;;1893:29;;;;-1:-1:-1;;;1893:29:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1893:29:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1945:5:2;;;1787:192::o;29932:860:3:-;30029:16;30048:30;30067:10;30048:18;:30::i;:::-;30131:10;30124:18;;;;:6;:18;;;;;30165:3;30124:38;;;;:44;30029:49;-1:-1:-1;30214:12:3;;30211:574;;30242:27;30248:10;30260:8;30242:5;:27::i;:::-;30291:10;30284:18;;;;:6;:18;;;;;:39;;;:51;;;;;;30353:27;;;-1:-1:-1;;;;;30353:27:3;:41;30350:250;;30428:10;30421:18;;;;:6;:18;;;;;:27;;;30415:52;;-1:-1:-1;;;;;30421:27:3;30450:16;:8;30463:2;30450:16;:12;:16;:::i;30415:52::-;30568:16;:8;30581:2;30568:16;:12;:16;:::i;:::-;30524:10;30510:35;30517:18;;;30510:6;30517:18;;;;;;:27;;;-1:-1:-1;;;;;30517:27:3;30510:35;;;;:54;;:74;;;;;;;30350:250;30614:36;13183:42;30625:24;30645:3;30625:15;:8;30638:1;30625:15;:12;:15;:::i;30614:36::-;30678;13264:42;30689:24;30709:3;30689:15;:8;30702:1;30689:15;:12;:15;:::i;30678:36::-;30733;13345:42;30744:24;30764:3;30744:15;:8;30757:1;30744:15;:12;:15;:::i;30733:36::-;29932:860;:::o;28852:1068::-;28948:16;28967:30;28986:10;28967:18;:30::i;:::-;28948:49;-1:-1:-1;29062:12:3;;29059:854;;29090:30;29104:4;29111:8;29090:5;:30::i;:::-;29206:10;29199:18;;;;:6;:18;;;;;:32;:46;;29236:8;29199:46;:36;:46;:::i;:::-;29171:10;29164:18;;;;:6;:18;;;;;:81;29274:11;;:25;;29290:8;29274:25;:15;:25;:::i;:::-;29260:11;:39;29321:10;29314:18;;;;:6;:18;;;;;:39;;;:51;;;;;;29460:3;-1:-1:-1;29419:38:3;;:44;29481:27;;;-1:-1:-1;;;;;29481:27:3;:41;29478:250;;29556:10;29549:18;;;;:6;:18;;;;;:27;;;29543:52;;-1:-1:-1;;;;;29549:27:3;29578:16;:8;29591:2;29578:16;:12;:16;:::i;858:181:2:-;916:7;948:5;;;972:6;;;;964:46;;;;;-1:-1:-1;;;964:46:2;;;;;;;;;;;;;;;;;;;;;;;;;;;25914:646:3;26063:11;:18;26042:10;26023:30;;;;:18;:30;;;;;:37;:58;26020:241;;;26129:10;26101:6;26110:30;;;:18;:30;;;;;:37;26097:153;26153:11;:18;26149:22;;26097:153;;;26215:10;26196:30;;;;:18;:30;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;26196:38:3;;;;;;;;;;;;;26173:3;26097:153;;;;26020:241;26359:11;:18;26338:10;26321:28;;;;:16;:28;;;;;:35;:56;26318:235;;;26423:10;26397:6;26406:28;;;:16;:28;;;;;:35;26393:149;26447:11;:18;26443:22;;26393:149;;;26507:10;26490:28;;;;:16;:28;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;26490:36:3;;;;;;;;;;;;;26467:3;26393:149;;26318:235;25914:646::o;19870:346::-;-1:-1:-1;;;;;19946:21:3;;19938:67;;;;-1:-1:-1;;;19938:67:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20037:68;20060:6;20037:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20037:18:3;;:9;:18;;;;;;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;20016:18:3;;:9;:18;;;;;;;;;;:89;20131:12;;:24;;20148:6;20131:24;:16;:24;:::i;:::-;20116:12;:39;20171:37;;;;;;;;20197:1;;-1:-1:-1;;;;;20171:37:3;;;;;;;;;;;;19870:346;;:::o;3831:345:2:-;3917:7;4019:12;4012:5;4004:28;;;;-1:-1:-1;;;4004:28:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4004:28:2;;4043:9;4059:1;4055;:5;;;;;;;3831:345;-1:-1:-1;;;;;3831:345:2:o;19210:328:3:-;19292:6;-1:-1:-1;;;;;19317:21:3;;19309:65;;;;;-1:-1:-1;;;19309:65:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;19400:12;;:21;;19417:3;19400:21;:16;:21;:::i;:::-;19385:12;:36;-1:-1:-1;;;;;19453:18:3;;:9;:18;;;;;;;;;;;:27;;19476:3;19453:27;:22;:27;:::i;:::-;-1:-1:-1;;;;;19432:18:3;;:9;:18;;;;;;;;;;;:48;;;;19496:34;;;;;;;19432:18;;:9;;19496:34;;;;;;;;;;19210:328;;;:::o

Swarm Source

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