Contract 0xFB161ddA30991A4E48DE65F0AC4eB17809f0c6b2

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x31046fa265950e9a8a8863dbf988f10c272e6388ec54bce3b1801fc2baa95a6183895012021-06-18 0:24:558 hrs 35 mins ago0x61efc9c75068ebe6dacae71b975f496317cef934 IN  budz.finance: BUDZ Token0 BNB0.000667275
0x7cb757bb5db0da57afc10d63394f5e5456ef714a2270666c465f9b0b55af39dd83861002021-06-17 21:31:4411 hrs 29 mins ago0xd03c2b0dd17f71e3cb633046f769657b3509b264 IN  budz.finance: BUDZ Token0 BNB0.00095249
0x7652dcb3ba2dbcf47e387f98620c856894c355be43d98d9600a7b29891370a6083859932021-06-17 21:26:2311 hrs 34 mins ago0xd03c2b0dd17f71e3cb633046f769657b3509b264 IN  budz.finance: BUDZ Token0 BNB0.000625135
0x20c6d7e909351ac3b55fa0e1bd7ba110a19876e9d8e1da13ee016b1c29b0967b83859002021-06-17 21:21:4111 hrs 39 mins ago0xd03c2b0dd17f71e3cb633046f769657b3509b264 IN  budz.finance: BUDZ Token0 BNB0.00095249
0xec2c15b93dc440eae1d13de015203f403bec72a21bf993031e256c4659df436b83856082021-06-17 21:07:0511 hrs 53 mins ago0x01c574c27bbb4a52a8971e86a8e4749d1892d670 IN  budz.finance: BUDZ Token0 BNB0.000749775
0xe12c1ecc5cec42096ef316d04dc1c7928e56321f59cf208d57d8d857cb1425ce83855642021-06-17 21:04:5311 hrs 55 mins ago0x01c574c27bbb4a52a8971e86a8e4749d1892d670 IN  budz.finance: BUDZ Token0 BNB0.000475185
0x9f97e76cafd403754ae8cd1537c1f97cc541505cab6a0dba5c22d529de29ea0b83855462021-06-17 21:03:5911 hrs 56 mins ago0x01c574c27bbb4a52a8971e86a8e4749d1892d670 IN  budz.finance: BUDZ Token0 BNB0.00061103
0xa2d9c40fa73ebea0710d70d9d205c8783ac2942315105751538037e43778431a83853012021-06-17 20:51:4412 hrs 9 mins ago0x01c574c27bbb4a52a8971e86a8e4749d1892d670 IN  budz.finance: BUDZ Token0 BNB0.0002374
0x70b5ee4f7fffe4c186685b73d4a67704d35844150ef27d33f1ba47dc21a6994b83852912021-06-17 20:51:1412 hrs 9 mins ago0x01c574c27bbb4a52a8971e86a8e4749d1892d670 IN  budz.finance: BUDZ Token0 BNB0.000475185
0x2fb796efd629e6b1849e8ddd67d20fb37be443bf1dd672f8525abf2b860da24683852062021-06-17 20:46:5912 hrs 13 mins ago0xd03c2b0dd17f71e3cb633046f769657b3509b264 IN  budz.finance: BUDZ Token0 BNB0.00087749
0x0c3f95ae4480a0d9f21170be56d688e77e4dd43dacf9869a53525845cbb6dc5383851292021-06-17 20:43:0812 hrs 17 mins ago0xd03c2b0dd17f71e3cb633046f769657b3509b264 IN  budz.finance: BUDZ Token0 BNB0.000592275
0xe6b9396311c3ca480c7f1800ae01bee5b8697ebc4a5a538799bd7c9470aedfc983851252021-06-17 20:42:5612 hrs 17 mins ago0xd03c2b0dd17f71e3cb633046f769657b3509b264 IN  budz.finance: BUDZ Token0 BNB0.000667275
0x011e058ecdaadebc2da07a0992dfb2436c31cef365e995569769bf7a8b9d4c4c83811512021-06-17 17:23:2815 hrs 37 mins agoBudz Finance: Deployer IN  budz.finance: BUDZ Token0 BNB0.0006216
0x3659e6d5240d36ebcef029ea2ac63df22188a4231b69a8a696accd9e3321494983811432021-06-17 17:23:0415 hrs 37 mins agoBudz Finance: Deployer IN  budz.finance: BUDZ Token0 BNB0.000604135
0xe3c2ecbb2239eeaa591445755255026e08a85caf385f9ee09aeb10b97ecb822b83809862021-06-17 17:15:1315 hrs 45 mins ago0xee2c79d6cff316f28d6e092ba90e91356e9bf151 IN  budz.finance: BUDZ Token0 BNB0.000475185
0xd50ef1c116c76837737b2024bd0516203b3472fbb189f56e86dd4c038f5ffaab83807942021-06-17 17:05:3715 hrs 55 mins ago0x9e7bd2ec41da9887ef05e0d1473a8998d20ecd98 IN  budz.finance: BUDZ Token0 BNB0.000222015
0xa8e57ddb7ce9bec4cf8da6846465a93d7167fd2efe3515579348a58d95e18bb483806042021-06-17 16:55:5116 hrs 4 mins agoBudz Finance: Deployer IN  budz.finance: BUDZ Token0 BNB0.00050065
0x85f23b12a352c55587ba84f69e9095a4176a0581b319268650ec98cf1377d1da83805562021-06-17 16:53:2716 hrs 7 mins agoBudz Finance: Deployer IN  budz.finance: BUDZ Token0 BNB0.00058816
0xd330e02cd4b16542a04eb197561f633392af4a7eac54f621cd94a37f699c06f683804212021-06-17 16:46:4216 hrs 14 mins ago0x61efc9c75068ebe6dacae71b975f496317cef934 IN  budz.finance: BUDZ Token0 BNB0.00087749
0x5b0e8b8a5772d4546a9e38be1f9c5c4b0b6396b85ad62b7f9efaac697d39276783803522021-06-17 16:43:1516 hrs 17 mins ago0x61efc9c75068ebe6dacae71b975f496317cef934 IN  budz.finance: BUDZ Token0 BNB0.000592275
0x2ceb205efac0b9d1db189744fdf820aae3e8f881967f4f243aa7ccb4bfacc81583631812021-06-17 2:15:241 day 6 hrs ago0xd1216316ab5b6379d0e5a642822f09e84752f00c IN  budz.finance: BUDZ Token0 BNB0.00056792
0xa0bb33be5cce4d5774f82fb3facd12edca99177d6a9fb2a26f98c088e98b9f8983631692021-06-17 2:14:481 day 6 hrs ago0xd1216316ab5b6379d0e5a642822f09e84752f00c IN  budz.finance: BUDZ Token0 BNB0.000475185
0xabc90e44fdbbe5878e565e16584974b6b7b17ea20fab4a79bfc80cc775febd3a83524492021-06-16 17:16:491 day 15 hrs ago0x44a37a9742334f8acf767f9e28a78aac4fabe23a IN  budz.finance: BUDZ Token0 BNB0.000477435
0x1854814161290388f2de8364e02f3b63e80007e6182c047331903a81c8679ae583524332021-06-16 17:15:561 day 15 hrs ago0x44a37a9742334f8acf767f9e28a78aac4fabe23a IN  budz.finance: BUDZ Token0 BNB0.000667275
0x24f44eb9cbdde1d33704e9492e292d5438455c638785fa79841ecd3f1695978d83516272021-06-16 16:34:281 day 16 hrs ago0xee2c79d6cff316f28d6e092ba90e91356e9bf151 IN  budz.finance: BUDZ Token0 BNB0.00082613
[ 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 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

-----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.