ETH Price: $2,670.20 (-2.74%)

Token

Treasure Hoard (FUZANG)
 

Overview

Max Total Supply

1,000,000,000,000 FUZANG

Holders

199

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,299,999,999.99999999999999999 FUZANG

Value
$0.00
0x57c6476d665ada828d17c49db6a17474a1a083f0
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
TreasureHoard

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-03
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.6.12;


// 
/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// 
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// 
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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);

    /**
     * @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);
}

// 
/**
 * @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, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @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) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

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

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * 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, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

// 
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");
    }

    /**
    * @dev Performs a Solidity function call using a low level `call`. A
    * plain`call` is an unsafe replacement for a function call: use this
    * function instead.
    *
    * If `target` reverts with a revert reason, it is bubbled up by this
    * function (like regular Solidity function calls).
    *
    * Returns the raw returned data. To convert to the expected return value,
    * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
    *
    * Requirements:
    *
    * - `target` must be a contract.
    * - calling `target` with `data` must not revert.
    *
    * _Available since v3.1._
    */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
    * `errorMessage` as a fallback revert reason when `target` reverts.
    *
    * _Available since v3.1._
    */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
    * but also transferring `value` wei to `target`.
    *
    * Requirements:
    *
    * - the calling contract must have an ETH balance of at least `value`.
    * - the called Solidity function must be `payable`.
    *
    * _Available since v3.1._
    */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
    * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
    * with `errorMessage` as a fallback revert reason when `target` reverts.
    *
    * _Available since v3.1._
    */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// 
/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
 * and `uint256` (`UintSet`) are supported.
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;
        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping(bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastvalue = set._values[lastIndex];

                // Move the last value to the index where the value to delete is
                set._values[toDeleteIndex] = lastvalue;
                // Update the index for the moved value
                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex
            }

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
        return _values(set._inner);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        assembly {
            result := store
        }

        return result;
    }

    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(UintSet storage set) internal view returns (uint256[] memory) {
        bytes32[] memory store = _values(set._inner);
        uint256[] memory result;

        assembly {
            result := store
        }

        return result;
    }
}

// 
abstract contract fuzangRNG is Ownable {
    /**
    * Tiers
    * 0 - Pearl
    * 1 - Gold
    * 2 - Silver
    * 3 - Bronze
     */
    using SafeMath for uint256;
    using EnumerableSet for EnumerableSet.AddressSet;

    address payable public pearlWinner;
    address payable public goldWinner;
    address payable public silverWinner;
    address payable public bronzeWinner;
    
    EnumerableSet.AddressSet pearlSet;
    EnumerableSet.AddressSet goldSet;
    EnumerableSet.AddressSet silverSet;
    EnumerableSet.AddressSet bronzeSet;

    EnumerableSet.AddressSet[] potWallets;

    uint256 public pearlMinWeight = 2 * 10 ** 5;
    uint256 public goldMinWeight = 10 ** 5;
    uint256 public silverMinWeight = 5 * 10 ** 4;

    mapping(address => uint256) public potWeights;
    mapping(address => uint256) public ethAmounts;
    mapping(address => bool) public excludedFromPot;
    mapping(address => bool) public isEthAmountNegative;

    IUniswapV2Router02 public uniswapV2Router;

    uint256 public feeMin = 0.1 * 10 ** 18;
    uint256 public feeMax = 0.3 * 10 ** 18;
    uint256 internal lastTotalFee;

    uint256 public ethWeight = 10 ** 10;

    mapping(address => bool) isGoverner;
    address[] governers;

    event newWinnersSelected(uint256 timestamp, address pearlWinner, address goldWinner, address silverWinner, address bronzeWinner, 
        uint256 pearlEthAmount, uint256 goldEthAmount, uint256 silverEthAmount, uint256 bronzeEthAmount,
        uint256 pearlfuzangAmount, uint256 goldfuzangAmount, uint256 silverfuzangAmount, uint256 bronzefuzangAmount,
        uint256 lastTotalFee);

    modifier onlyGoverner() {
        require(isGoverner[_msgSender()], "Not governer");
        _;
    }

    constructor(address payable _initialWinner) public
    {
        pearlWinner = _initialWinner;
        goldWinner = _initialWinner;
        silverWinner = _initialWinner;
        bronzeWinner = _initialWinner;
        
        pearlSet.add(_initialWinner);
        goldSet.add(_initialWinner);
        silverSet.add(_initialWinner);
        bronzeSet.add(_initialWinner);

        potWallets.push(pearlSet);
        potWallets.push(goldSet);
        potWallets.push(silverSet);
        potWallets.push(bronzeSet);

        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // UniswapV2 for Ethereum network

        isGoverner[owner()] = true;
        governers.push(owner());
    }

    function checkTierFromWeight(uint256 weight)
        public
        view
        returns(uint256)
    {
        if (weight > pearlMinWeight) {
            return 0;
        }
        if (weight > goldMinWeight) {
            return 1;
        }
        if (weight > silverMinWeight) {
            return 2;
        }
        return 3;
    }

    function calcWeight(uint256 ethAmount, uint256 fuzangAmount) public view returns(uint256) {
        return ethAmount.div(10 ** 13) + fuzangAmount.div(10 ** 13).div(ethWeight);
    }

    function addNewWallet(address _account, uint256 tier) internal {
        potWallets[tier].add(_account);
    }

    function removeWallet(address _account, uint256 tier) internal {
        potWallets[tier].remove(_account);
    }

    function addWalletToPotList(address _account, uint256 _amount) internal {
        if (!excludedFromPot[_account]) {
            address[] memory path = new address[](2);
            path[0] = uniswapV2Router.WETH();
            path[1] = address(this);
            
            uint256 ethAmount = uniswapV2Router.getAmountsIn(_amount, path)[0];
            
            uint256 oldWeight = potWeights[_account];

            if (isEthAmountNegative[_account]) {
                if (ethAmount > ethAmounts[_account]) {
                    ethAmounts[_account] = ethAmount - ethAmounts[_account];
                    isEthAmountNegative[_account] = false;

                    potWeights[_account] = calcWeight(ethAmounts[_account], IERC20(address(this)).balanceOf(_account) + _amount);
                } else {
                    ethAmounts[_account] = ethAmounts[_account] - ethAmount;
                    potWeights[_account] = 0;
                }
            } else {
                ethAmounts[_account] += ethAmount;

                potWeights[_account] = calcWeight(ethAmounts[_account], IERC20(address(this)).balanceOf(_account) + _amount);
            }

            if (!isEthAmountNegative[_account]) {
                uint256 oldTier = checkTierFromWeight(oldWeight);
                uint256 newTier = checkTierFromWeight(potWeights[_account]);

                if (oldTier != newTier) {
                    removeWallet(_account, oldTier);
                }

                addNewWallet(_account, newTier);
            }
        }
    }

    function removeWalletFromPotList(address _account, uint256 _amount) internal {
        if (!excludedFromPot[_account]) {
            address[] memory path = new address[](2);
            path[0] = uniswapV2Router.WETH();
            path[1] = address(this);
            
            uint256 ethAmount = uniswapV2Router.getAmountsIn(_amount, path)[0];

            uint256 oldWeight = potWeights[_account];

            if (isEthAmountNegative[_account]) {
                ethAmounts[_account] += ethAmount;
                potWeights[_account] = 0;
            } else if (ethAmounts[_account] >= ethAmount) {
                ethAmounts[_account] -= ethAmount;
                potWeights[_account] = calcWeight(ethAmounts[_account], IERC20(address(this)).balanceOf(_account));
            } else {
                ethAmounts[_account] = ethAmount - ethAmounts[_account];
                isEthAmountNegative[_account] = true;
                potWeights[_account] = 0;
            }

            uint256 oldTier = checkTierFromWeight(oldWeight);
            removeWallet(_account, oldTier);
        }
    }

    function rand(uint256 max)
        private
        view
        returns(uint256)
    {
        if (max == 1) {
            return 0;
        }

        uint256 seed = uint256(keccak256(abi.encodePacked(
            block.timestamp + block.difficulty +
            ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)) +
            block.gaslimit +
            ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)) +
            block.number
        )));

        return (seed - ((seed / (max - 1)) * (max - 1))) + 1;
    }

    function checkAndChangePotWinner() internal {
        uint256 randFee = rand(feeMax - feeMin) + feeMin;

        if (lastTotalFee >= randFee) {
            uint256 pearlWinnerIndex = rand(potWallets[0].length());
            uint256 goldWinnerIndex = rand(potWallets[1].length());
            uint256 silverWinnerIndex = rand(potWallets[2].length());
            uint256 bronzeWinnerIndex = rand(potWallets[3].length());

            pearlWinner = payable(potWallets[0].at(pearlWinnerIndex));
            goldWinner = payable(potWallets[1].at(goldWinnerIndex));
            silverWinner = payable(potWallets[2].at(silverWinnerIndex));
            bronzeWinner = payable(potWallets[3].at(bronzeWinnerIndex));

            emit newWinnersSelected(
                block.timestamp, pearlWinner, goldWinner, silverWinner, bronzeWinner, 
                ethAmounts[pearlWinner], ethAmounts[goldWinner], ethAmounts[silverWinner], ethAmounts[bronzeWinner],
                IERC20(address(this)).balanceOf(pearlWinner), IERC20(address(this)).balanceOf(goldWinner), IERC20(address(this)).balanceOf(silverWinner), IERC20(address(this)).balanceOf(bronzeWinner),
                lastTotalFee
            );
        }
    }

    /**
    * Mutations
     */

    function setEthWeight(uint256 _ethWeight) external onlyGoverner {
        ethWeight = _ethWeight;
    }

    function setTierWeights(uint256 _pearlMin, uint256 _goldMin, uint256 _silverMin) external onlyGoverner {
        require(_pearlMin > _goldMin && _goldMin > _silverMin, "Weights should be descending order");

        pearlMinWeight = _pearlMin;
        goldMinWeight = _goldMin;
        silverMinWeight = _silverMin;
    }

    function setFeeMinMax(uint256 _feeMin, uint256 _feeMax) external onlyGoverner {
        require(_feeMin < _feeMax, "feeMin should be smaller than feeMax");

        feeMin = _feeMin;
        feeMax = _feeMax;
    }

    function addGoverner(address _governer) public onlyGoverner {
        if (!isGoverner[_governer]) {
            isGoverner[_governer] = true;
            governers.push(_governer);
        }
    }

    function removeGoverner(address _governer) external onlyGoverner {
        if (isGoverner[_governer]) {
            isGoverner[_governer] = false;

            for (uint i = 0; i < governers.length; i ++) {
                if (governers[i] == _governer) {
                    governers[i] = governers[governers.length - 1];
                    governers.pop();
                    break;
                }
            }
        }
    }
}

/*
More info:

    * Instead of giving equal weights to all users, we give weights based on their purchase token amount and contributed ETH amount
    * If you sell or transfer tokens to other wallets, you lose your ticket, but as soon as you buy again you regain your ticket
    * There's no min eligible amount. Even if you buy 1 token, you have the very little chance to get rewarded.
*/
// 
// Contract implementation
contract TreasureHoard is IERC20, Ownable, fuzangRNG {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => uint256) public timestamp;

    uint256 private eligibleRNG = block.timestamp;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isBlackListedBot;

    uint256 private _tTotal = 1000000000000 * 10 ** 18;  //1,000,000,000,000

    uint256 public _coolDown = 30 seconds;

    string private _name = 'Treasure Hoard';
    string private _symbol = 'FUZANG';
    uint8 private _decimals = 18;
    
    uint256 public _devFee = 8;
    uint256 private _previousdevFee = _devFee;

    address payable private _treasurehoardAddress;
    
    address public uniswapV2Pair;

    bool inSwap = false;
    bool public swapEnabled = true;
    bool public feeEnabled = true;
    
    bool public tradingEnabled = false;
    bool public cooldownEnabled = true;

    uint256 public _maxTxAmount = _tTotal * 5 / 1000;
    uint256 private _numOfTokensToExchangeFordev = 5000000000000000;

    address public migrator;

    event SwapEnabledUpdated(bool enabled);

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor (address payable treasurehoardAddress)
        fuzangRNG(treasurehoardAddress)
        public
    {
        _treasurehoardAddress = treasurehoardAddress;
        _tOwned[_msgSender()] = _tTotal;

        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());

        // Exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        // Excluded fuzang, pair, owner from pot list
        excludedFromPot[address(this)] = true;
        excludedFromPot[uniswapV2Pair] = true;
        excludedFromPot[owner()] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    
    function isBlackListed(address account) public view returns (bool) {
        return _isBlackListedBot[account];
    }

    function setExcludeFromFee(address account, bool excluded) external onlyGoverner {
        _isExcludedFromFee[account] = excluded;
    }

    function addBotToBlackList(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.');
        require(!_isBlackListedBot[account], "Account is already blacklisted");
        _isBlackListedBot[account] = true;
    }
    
    function addBotsToBlackList(address[] memory bots) external onlyOwner() {
        for (uint i = 0; i < bots.length; i++) {
            _isBlackListedBot[bots[i]] = true;
        }
    }

    function removeBotFromBlackList(address account) external onlyOwner() {
        require(_isBlackListedBot[account], "Account is not blacklisted");
        _isBlackListedBot[account] = false;
    }

    function removeAllFee() private {
        if(_devFee == 0) return;
        _previousdevFee = _devFee;
        _devFee = 0;
    }

    function restoreAllFee() private {
        _devFee = _previousdevFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }
    
    function setMaxTxAmount(uint256 maxTx) external onlyOwner() {
        _maxTxAmount = maxTx;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isBlackListedBot[recipient], "Go away");
        require(!_isBlackListedBot[sender], "Go away");

        if(sender != owner() && recipient != owner() && sender != migrator && recipient != migrator) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the max amount.");

            // You can't trade this yet until trading enabled, be patient 
            if (sender == uniswapV2Pair || recipient == uniswapV2Pair) {
                require(tradingEnabled, "Trading is not enabled");
            }
        }

        // Cooldown
        if(cooldownEnabled) {
            if (sender == uniswapV2Pair ) {
                // They just bought so add cooldown
                timestamp[recipient] = block.timestamp.add(_coolDown);
            }

            // exclude owner and uniswap
            if(sender != owner() && sender != uniswapV2Pair) {
                require(block.timestamp >= timestamp[sender], "Cooldown");
            }
        }

        if (sender == uniswapV2Pair) {
            if (recipient != owner() && feeEnabled) {
                addWalletToPotList(recipient, amount);
            }
        }

        // rest of the standard shit below

        uint256 contractTokenBalance = balanceOf(address(this));

        if (contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }

        bool overMinTokenBalance = contractTokenBalance >= _numOfTokensToExchangeFordev;
        if (!inSwap && swapEnabled && overMinTokenBalance && sender != uniswapV2Pair) {
            // We need to swap the current tokens to ETH and send to the dev wallet
            swapTokensForEth(contractTokenBalance);

            uint256 contractETHBalance = address(this).balance;
            if(contractETHBalance > 0) {
                sendETHTodev(address(this).balance);
            }
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }

        // transfer amount, it will take tax and dev fee
        _tokenTransfer(sender, recipient, amount, takeFee);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function sendETHTodev(uint256 amount) private {
        if (block.timestamp >= eligibleRNG) {
            checkAndChangePotWinner();
        }

        uint256 winnerReward = amount.div(33);

        lastTotalFee += winnerReward;

        pearlWinner.transfer(winnerReward.mul(4));
        goldWinner.transfer(winnerReward.mul(3));
        silverWinner.transfer(winnerReward.mul(2));
        bronzeWinner.transfer(winnerReward.mul(1));

        _treasurehoardAddress.transfer(amount.mul(2).div(3));
    }
    
    // We are exposing these functions to be able to manual swap and send
    // in case the token is highly valued and 5M becomes too much
    function manualSwap() external onlyGoverner {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }
    
    function manualSend() external onlyGoverner {
        uint256 contractETHBalance = address(this).balance;
        sendETHTodev(contractETHBalance);
    }

    function setSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
        emit SwapEnabledUpdated(enabled);
    }    
    
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if(!takeFee)
            removeAllFee();

        _transferStandard(sender, recipient, amount);

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        uint256 tdev = tAmount.mul(_devFee).div(100);
        uint256 transferAmount = tAmount.sub(tdev);

        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _tOwned[recipient] = _tOwned[recipient].add(transferAmount);
        
        // Stop wallets from trying to stay in pot by transferring to other wallets
        removeWalletFromPotList(sender, tAmount);
        
        _takedev(tdev); 
        emit Transfer(sender, recipient, transferAmount);
    }

    function _takedev(uint256 tdev) private {
        _tOwned[address(this)] = _tOwned[address(this)].add(tdev);
    }

        //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }

    function _getETHBalance() public view returns(uint256 balance) {
        return address(this).balance;
    }
    
    function allowDex(bool _tradingEnabled) external onlyOwner() {
        tradingEnabled = _tradingEnabled;
        eligibleRNG = block.timestamp + 25 minutes;
    }
    
    function toggleCoolDown(bool _cooldownEnabled) external onlyOwner() {
        cooldownEnabled = _cooldownEnabled;
    }
    
    function toggleFeeEnabled(bool _feeEnabled) external onlyOwner() {
        // this is a failsafe if something breaks with mappings we can turn off so no-one gets rekt and can still trade
        feeEnabled = _feeEnabled;
    }

    function setMigrationContract(address _migrator) external onlyGoverner {
        excludedFromPot[_migrator] = true;
        _isExcludedFromFee[_migrator] = true;
        addGoverner(_migrator);
        migrator = _migrator;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"treasurehoardAddress","type":"address"}],"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"address","name":"pearlWinner","type":"address"},{"indexed":false,"internalType":"address","name":"goldWinner","type":"address"},{"indexed":false,"internalType":"address","name":"silverWinner","type":"address"},{"indexed":false,"internalType":"address","name":"bronzeWinner","type":"address"},{"indexed":false,"internalType":"uint256","name":"pearlEthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"goldEthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"silverEthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bronzeEthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pearlfuzangAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"goldfuzangAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"silverfuzangAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bronzefuzangAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastTotalFee","type":"uint256"}],"name":"newWinnersSelected","type":"event"},{"inputs":[],"name":"_coolDown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"}],"name":"addBotsToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governer","type":"address"}],"name":"addGoverner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingEnabled","type":"bool"}],"name":"allowDex","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":"bronzeWinner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"fuzangAmount","type":"uint256"}],"name":"calcWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"weight","type":"uint256"}],"name":"checkTierFromWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"ethAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromPot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldMinWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldWinner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlackListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isEthAmountNegative","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pearlMinWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pearlWinner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"potWeights","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governer","type":"address"}],"name":"removeGoverner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ethWeight","type":"uint256"}],"name":"setEthWeight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeMin","type":"uint256"},{"internalType":"uint256","name":"_feeMax","type":"uint256"}],"name":"setFeeMinMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_migrator","type":"address"}],"name":"setMigrationContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pearlMin","type":"uint256"},{"internalType":"uint256","name":"_goldMin","type":"uint256"},{"internalType":"uint256","name":"_silverMin","type":"uint256"}],"name":"setTierWeights","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"silverMinWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"silverWinner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"timestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_cooldownEnabled","type":"bool"}],"name":"toggleCoolDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_feeEnabled","type":"bool"}],"name":"toggleFeeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

62030d40600e908155620186a0600f5561c35060105567016345785d8a0000601655670429d069189e00006017556402540be40060195542601f556c0c9f2c9cd04674edea40000000602255601e60235560c060405260808190526d151c99585cdd5c9948121bd85c9960921b60a09081526200008091602491906200077f565b506040805180820190915260068082526546555a414e4760d01b6020909201918252620000b0916025916200077f565b506026805460ff1916601217905560086027819055602855602a805461ffff60b81b1960ff60b01b1961ffff60a01b19909216600160a81b1791909116600160b01b1716600160c01b1790556022546103e89060050204602b556611c37937e08000602c553480156200012257600080fd5b506040516200486d3803806200486d833981810160405260208110156200014857600080fd5b505180600062000157620006e5565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b03199081166001600160a01b0384169081179092556002805482168317905560038054821683179055600480549091169091179055620001fa600582620006e9602090811b6200213317901c565b5062000216816007620006e960201b620021331790919060201c565b5062000232816009620006e960201b620021331790919060201c565b506200024e81600b620006e960201b620021331790919060201c565b50600d80546001810182556000919091526005805490916002026000805160206200484d8339815191520190829082906200028d908290849062000804565b5050600d80546001810182556000919091526007805490945060029091026000805160206200484d8339815191520192508391508290620002d2908290849062000804565b5050600d80546001810182556000919091526009805490945060029091026000805160206200484d833981519152019250839150829062000317908290849062000804565b5050600d8054600181018255600091909152600b805490945060029091026000805160206200484d83398151915201925083915082906200035c908290849062000804565b5050601580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790555060019150601a905060006200039962000709565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055601b620003cd62000709565b81546001810183556000928352602083200180546001600160a01b03199081166001600160a01b0393841617909155602980549091169185169190911790556022549150601c906200041e620006e5565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550601560009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200049157600080fd5b505afa158015620004a6573d6000803e3d6000fd5b505050506040513d6020811015620004bd57600080fd5b5051601554604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693309391169163ad5c464891600480820192602092909190829003018186803b1580156200051057600080fd5b505afa15801562000525573d6000803e3d6000fd5b505050506040513d60208110156200053c57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200058f57600080fd5b505af1158015620005a4573d6000803e3d6000fd5b505050506040513d6020811015620005bb57600080fd5b5051602a80546001600160a01b0319166001600160a01b03909216919091179055600160206000620005ec62000709565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081528380528281208054861660019081179091556013948590528382208054871682179055602a549092168152918220805490941681179093556200065f62000709565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905562000691620006e5565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6022546040518082815260200191505060405180910390a3506200085e565b3390565b600062000700836001600160a01b03841662000718565b90505b92915050565b6000546001600160a01b031690565b600062000726838362000767565b6200075e5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000703565b50600062000703565b60009081526001919091016020526040902054151590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620007c257805160ff1916838001178555620007f2565b82800160010185558215620007f2579182015b82811115620007f2578251825591602001919060010190620007d5565b506200080092915062000847565b5090565b828054828255906000526020600020908101928215620007f25760005260206000209182015b82811115620007f25782548255916001019190600101906200082a565b5b8082111562000800576000815560010162000848565b613fdf806200086e6000396000f3fe6080604052600436106103b15760003560e01c8063a3898bb7116101e7578063d543dbeb1161010d578063f2fde38b116100a0578063f815a8421161006f578063f815a84214610d80578063faa651cf14610d95578063fc10805714610daa578063ffbe9f1e14610ddd576103b8565b8063f2fde38b14610c5c578063f429389014610c8f578063f42f31bb14610ca4578063f698c04f14610d54576103b8565b8063e377b09b116100dc578063e377b09b14610bbe578063e47d606014610bd3578063ec28438a14610c06578063ee8627a714610c30576103b8565b8063d543dbeb14610b03578063dd62ed3e14610b2d578063e01af92c14610b68578063e15434ed14610b94576103b8565b8063ab1f510611610185578063bd9c4ed611610154578063bd9c4ed614610a61578063d067603a14610a76578063d419d88314610aa6578063d457ae2114610ad9576103b8565b8063ab1f51061461098a578063af9549e0146109c0578063bcdd822d146109fb578063bd68b1e714610a2e576103b8565b8063a9059cbb116101c1578063a9059cbb14610912578063a985ceef1461094b578063aa45026b14610960578063aab7c4b514610975576103b8565b8063a3898bb7146108af578063a457c2d7146108c4578063a771ebc7146108fd576103b8565b806349bd5a5e116102d75780637302dacf1161026a57806388b79cec1161023957806388b79cec1461083d5780638da5cb5b1461087057806395d89b4114610885578063963629201461089a576103b8565b80637302dacf146107ad5780637cd07e47146107e05780637d1db4a5146107f55780637ded4d6a1461080a576103b8565b80635e14f794116102a65780635e14f7941461071d5780636ddd17131461075057806370a0823114610765578063715018a614610798576103b8565b806349bd5a5e146106ab5780634ada218b146106c057806351bc3c85146106d55780635342acb4146106ea576103b8565b806320a94f941161034f578063313ce5671161031e578063313ce567146105e857806339509351146106135780634303443d1461064c578063441603d71461067f576103b8565b806320a94f941461056657806323b872dd1461057b57806324649365146105be5780632af8bfa6146105d3576103b8565b8063095ea7b31161038b578063095ea7b3146104bf57806312eabeb1146104f85780631694505e1461052a57806318160ddd1461053f576103b8565b806305489b48146103bd57806306fdde03146104045780630875d8151461048e576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103f0600480360360208110156103e057600080fd5b50356001600160a01b0316610df2565b604080519115158252519081900360200190f35b34801561041057600080fd5b50610419610e07565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561045357818101518382015260200161043b565b50505050905090810190601f1680156104805780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561049a57600080fd5b506104a3610e9d565b604080516001600160a01b039092168252519081900360200190f35b3480156104cb57600080fd5b506103f0600480360360408110156104e257600080fd5b506001600160a01b038135169060200135610eac565b34801561050457600080fd5b506105286004803603604081101561051b57600080fd5b5080359060200135610eca565b005b34801561053657600080fd5b506104a3610f7c565b34801561054b57600080fd5b50610554610f8b565b60408051918252519081900360200190f35b34801561057257600080fd5b50610554610f91565b34801561058757600080fd5b506103f06004803603606081101561059e57600080fd5b506001600160a01b03813581169160208101359091169060400135610f97565b3480156105ca57600080fd5b5061055461101e565b3480156105df57600080fd5b50610554611024565b3480156105f457600080fd5b506105fd61102a565b6040805160ff9092168252519081900360200190f35b34801561061f57600080fd5b506103f06004803603604081101561063657600080fd5b506001600160a01b038135169060200135611033565b34801561065857600080fd5b506105286004803603602081101561066f57600080fd5b50356001600160a01b0316611081565b34801561068b57600080fd5b50610528600480360360208110156106a257600080fd5b503515156111d1565b3480156106b757600080fd5b506104a3611259565b3480156106cc57600080fd5b506103f0611268565b3480156106e157600080fd5b50610528611278565b3480156106f657600080fd5b506103f06004803603602081101561070d57600080fd5b50356001600160a01b03166112fa565b34801561072957600080fd5b506105286004803603602081101561074057600080fd5b50356001600160a01b031661131b565b34801561075c57600080fd5b506103f06114a6565b34801561077157600080fd5b506105546004803603602081101561078857600080fd5b50356001600160a01b03166114b6565b3480156107a457600080fd5b506105286114d1565b3480156107b957600080fd5b50610554600480360360208110156107d057600080fd5b50356001600160a01b031661157d565b3480156107ec57600080fd5b506104a361158f565b34801561080157600080fd5b5061055461159e565b34801561081657600080fd5b506105286004803603602081101561082d57600080fd5b50356001600160a01b03166115a4565b34801561084957600080fd5b506105286004803603602081101561086057600080fd5b50356001600160a01b0316611694565b34801561087c57600080fd5b506104a3611761565b34801561089157600080fd5b50610419611770565b3480156108a657600080fd5b506105546117d1565b3480156108bb57600080fd5b506104a36117d7565b3480156108d057600080fd5b506103f0600480360360408110156108e757600080fd5b506001600160a01b0381351690602001356117e6565b34801561090957600080fd5b506103f061184e565b34801561091e57600080fd5b506103f06004803603604081101561093557600080fd5b506001600160a01b03813516906020013561185e565b34801561095757600080fd5b506103f0611872565b34801561096c57600080fd5b50610554611882565b34801561098157600080fd5b50610554611888565b34801561099657600080fd5b50610528600480360360608110156109ad57600080fd5b508035906020810135906040013561188e565b3480156109cc57600080fd5b50610528600480360360408110156109e357600080fd5b506001600160a01b038135169060200135151561194e565b348015610a0757600080fd5b506103f060048036036020811015610a1e57600080fd5b50356001600160a01b03166119e1565b348015610a3a57600080fd5b5061052860048036036020811015610a5157600080fd5b50356001600160a01b03166119f6565b348015610a6d57600080fd5b506104a3611ae5565b348015610a8257600080fd5b5061055460048036036040811015610a9957600080fd5b5080359060200135611af4565b348015610ab257600080fd5b5061055460048036036020811015610ac957600080fd5b50356001600160a01b0316611b2c565b348015610ae557600080fd5b5061055460048036036020811015610afc57600080fd5b5035611b3e565b348015610b0f57600080fd5b5061052860048036036020811015610b2657600080fd5b5035611b7e565b348015610b3957600080fd5b5061055460048036036040811015610b5057600080fd5b506001600160a01b0381358116916020013516611c00565b348015610b7457600080fd5b5061052860048036036020811015610b8b57600080fd5b50351515611c2b565b348015610ba057600080fd5b5061052860048036036020811015610bb757600080fd5b5035611ce0565b348015610bca57600080fd5b506104a3611d4e565b348015610bdf57600080fd5b506103f060048036036020811015610bf657600080fd5b50356001600160a01b0316611d5d565b348015610c1257600080fd5b5061052860048036036020811015610c2957600080fd5b5035611d7b565b348015610c3c57600080fd5b5061052860048036036020811015610c5357600080fd5b50351515611de2565b348015610c6857600080fd5b5061052860048036036020811015610c7f57600080fd5b50356001600160a01b0316611e62565b348015610c9b57600080fd5b50610528611f64565b348015610cb057600080fd5b5061052860048036036020811015610cc757600080fd5b810190602081018135640100000000811115610ce257600080fd5b820183602082011115610cf457600080fd5b80359060200191846020830284011164010000000083111715610d1657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611fd7945050505050565b348015610d6057600080fd5b5061052860048036036020811015610d7757600080fd5b50351515612091565b348015610d8c57600080fd5b50610554612111565b348015610da157600080fd5b50610554612115565b348015610db657600080fd5b5061055460048036036020811015610dcd57600080fd5b50356001600160a01b031661211b565b348015610de957600080fd5b5061055461212d565b60136020526000908152604090205460ff1681565b60248054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e935780601f10610e6857610100808354040283529160200191610e93565b820191906000526020600020905b815481529060010190602001808311610e7657829003601f168201915b5050505050905090565b6003546001600160a01b031681565b6000610ec0610eb961214f565b8484612153565b5060015b92915050565b601a6000610ed661214f565b6001600160a01b0316815260208101919091526040016000205460ff16610f33576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b808210610f715760405162461bcd60e51b8152600401808060200182810382526024815260200180613f3a6024913960400191505060405180910390fd5b601691909155601755565b6015546001600160a01b031681565b60225490565b60165481565b6000610fa484848461223f565b61101484610fb061214f565b61100f85604051806060016040528060288152602001613e5c602891396001600160a01b038a166000908152601d6020526040812090610fee61214f565b6001600160a01b03168152602081019190915260400160002054919061271a565b612153565b5060019392505050565b600e5481565b60195481565b60265460ff1690565b6000610ec061104061214f565b8461100f85601d600061105161214f565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906127b1565b61108961214f565b6001600160a01b031661109a611761565b6001600160a01b0316146110e3576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561113f5760405162461bcd60e51b8152600401808060200182810382526024815260200180613ecd6024913960400191505060405180910390fd5b6001600160a01b03811660009081526021602052604090205460ff16156111ad576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000908152602160205260409020805460ff19166001179055565b6111d961214f565b6001600160a01b03166111ea611761565b6001600160a01b031614611233576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b602a8054911515600160b81b0260ff60b81b199092169190911790556105dc4201601f55565b602a546001600160a01b031681565b602a54600160b81b900460ff1681565b601a600061128461214f565b6001600160a01b0316815260208101919091526040016000205460ff166112e1576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b60006112ec306114b6565b90506112f78161280b565b50565b6001600160a01b038116600090815260208052604090205460ff165b919050565b601a600061132761214f565b6001600160a01b0316815260208101919091526040016000205460ff16611384576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b6001600160a01b0381166000908152601a602052604090205460ff16156112f7576001600160a01b0381166000908152601a60205260408120805460ff191690555b601b548110156114a257816001600160a01b0316601b82815481106113e757fe5b6000918252602090912001546001600160a01b0316141561149a57601b8054600019810190811061141457fe5b600091825260209091200154601b80546001600160a01b03909216918390811061143a57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601b80548061147357fe5b600082815260209020810160001990810180546001600160a01b03191690550190556114a2565b6001016113c6565b5050565b602a54600160a81b900460ff1681565b6001600160a01b03166000908152601c602052604090205490565b6114d961214f565b6001600160a01b03166114ea611761565b6001600160a01b031614611533576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b601e6020526000908152604090205481565b602d546001600160a01b031681565b602b5481565b6115ac61214f565b6001600160a01b03166115bd611761565b6001600160a01b031614611606576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526021602052604090205460ff16611673576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b6001600160a01b03166000908152602160205260409020805460ff19169055565b601a60006116a061214f565b6001600160a01b0316815260208101919091526040016000205460ff166116fd576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b6001600160a01b03811660009081526013602090815260408083208054600160ff19918216811790925592805292208054909116909117905561173f816119f6565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b60258054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e935780601f10610e6857610100808354040283529160200191610e93565b60235481565b6004546001600160a01b031681565b6000610ec06117f361214f565b8461100f85604051806060016040528060258152602001613f8560259139601d600061181d61214f565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061271a565b602a54600160b01b900460ff1681565b6000610ec061186b61214f565b848461223f565b602a54600160c01b900460ff1681565b60275481565b600f5481565b601a600061189a61214f565b6001600160a01b0316815260208101919091526040016000205460ff166118f7576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b818311801561190557508082115b6119405760405162461bcd60e51b8152600401808060200182810382526022815260200180613dd16022913960400191505060405180910390fd5b600e92909255600f55601055565b601a600061195a61214f565b6001600160a01b0316815260208101919091526040016000205460ff166119b7576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b60146020526000908152604090205460ff1681565b601a6000611a0261214f565b6001600160a01b0316815260208101919091526040016000205460ff16611a5f576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b6001600160a01b0381166000908152601a602052604090205460ff166112f7576001600160a01b03166000818152601a60205260408120805460ff19166001908117909155601b805491820181559091527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180546001600160a01b0319169091179055565b6002546001600160a01b031681565b601954600090611b1490611b0e846509184e72a0006129d9565b906129d9565b611b24846509184e72a0006129d9565b019392505050565b60116020526000908152604090205481565b6000600e54821115611b5257506000611316565b600f54821115611b6457506001611316565b601054821115611b7657506002611316565b506003919050565b611b8661214f565b6001600160a01b0316611b97611761565b6001600160a01b031614611be0576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b611bfa6064611b0e83602254612a4090919063ffffffff16565b602b5550565b6001600160a01b039182166000908152601d6020908152604080832093909416825291909152205490565b611c3361214f565b6001600160a01b0316611c44611761565b6001600160a01b031614611c8d576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b602a8054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a129181900360200190a150565b601a6000611cec61214f565b6001600160a01b0316815260208101919091526040016000205460ff16611d49576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b601955565b6001546001600160a01b031681565b6001600160a01b031660009081526021602052604090205460ff1690565b611d8361214f565b6001600160a01b0316611d94611761565b6001600160a01b031614611ddd576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b602b55565b611dea61214f565b6001600160a01b0316611dfb611761565b6001600160a01b031614611e44576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b602a8054911515600160c01b0260ff60c01b19909216919091179055565b611e6a61214f565b6001600160a01b0316611e7b611761565b6001600160a01b031614611ec4576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b6001600160a01b038116611f095760405162461bcd60e51b8152600401808060200182810382526026815260200180613df36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b601a6000611f7061214f565b6001600160a01b0316815260208101919091526040016000205460ff16611fcd576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b476112f781612a99565b611fdf61214f565b6001600160a01b0316611ff0611761565b6001600160a01b031614612039576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b60005b81518110156114a25760016021600084848151811061205757fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010161203c565b61209961214f565b6001600160a01b03166120aa611761565b6001600160a01b0316146120f3576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b602a8054911515600160b01b0260ff60b01b19909216919091179055565b4790565b60105481565b60126020526000908152604090205481565b60175481565b6000612148836001600160a01b038416612c1a565b9392505050565b3390565b6001600160a01b0383166121985760405162461bcd60e51b8152600401808060200182810382526024815260200180613f166024913960400191505060405180910390fd5b6001600160a01b0382166121dd5760405162461bcd60e51b8152600401808060200182810382526022815260200180613e196022913960400191505060405180910390fd5b6001600160a01b038084166000818152601d6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166122845760405162461bcd60e51b8152600401808060200182810382526025815260200180613ef16025913960400191505060405180910390fd5b6001600160a01b0382166122c95760405162461bcd60e51b8152600401808060200182810382526023815260200180613dae6023913960400191505060405180910390fd5b600081116123085760405162461bcd60e51b8152600401808060200182810382526029815260200180613ea46029913960400191505060405180910390fd5b6001600160a01b03821660009081526021602052604090205460ff1615612360576040805162461bcd60e51b8152602060048201526007602482015266476f206177617960c81b604482015290519081900360640190fd5b6001600160a01b03831660009081526021602052604090205460ff16156123b8576040805162461bcd60e51b8152602060048201526007602482015266476f206177617960c81b604482015290519081900360640190fd5b6123c0611761565b6001600160a01b0316836001600160a01b0316141580156123fa57506123e4611761565b6001600160a01b0316826001600160a01b031614155b80156124145750602d546001600160a01b03848116911614155b801561242e5750602d546001600160a01b03838116911614155b156124f957602b548111156124745760405162461bcd60e51b8152600401808060200182810382526027815260200180613f5e6027913960400191505060405180910390fd5b602a546001600160a01b038481169116148061249d5750602a546001600160a01b038381169116145b156124f957602a54600160b81b900460ff166124f9576040805162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b604482015290519081900360640190fd5b602a54600160c01b900460ff16156125dd57602a546001600160a01b03848116911614156125495760235461252f9042906127b1565b6001600160a01b0383166000908152601e60205260409020555b612551611761565b6001600160a01b0316836001600160a01b0316141580156125805750602a546001600160a01b03848116911614155b156125dd576001600160a01b0383166000908152601e60205260409020544210156125dd576040805162461bcd60e51b815260206004820152600860248201526721b7b7b63237bbb760c11b604482015290519081900360640190fd5b602a546001600160a01b0384811691161415612634576125fb611761565b6001600160a01b0316826001600160a01b0316141580156126255750602a54600160b01b900460ff165b15612634576126348282612c64565b600061263f306114b6565b9050602b54811061264f5750602b545b602c54602a549082101590600160a01b900460ff1615801561267a5750602a54600160a81b900460ff165b80156126835750805b801561269d5750602a546001600160a01b03868116911614155b156126bd576126ab8261280b565b4780156126bb576126bb47612a99565b505b6001600160a01b038516600090815260208052604090205460019060ff16806126fd57506001600160a01b038516600090815260208052604090205460ff165b15612706575060005b6127128686868461310d565b505050505050565b600081848411156127a95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561276e578181015183820152602001612756565b50505050905090810190601f16801561279b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015612148576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b602a805460ff60a01b1916600160a01b1790556040805160028082526060808301845292602083019080368337019050509050308160008151811061284c57fe5b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156128a057600080fd5b505afa1580156128b4573d6000803e3d6000fd5b505050506040513d60208110156128ca57600080fd5b50518151829060019081106128db57fe5b6001600160a01b0392831660209182029290920101526015546129019130911684612153565b60155460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561298757818101518382015260200161296f565b505050509050019650505050505050600060405180830381600087803b1580156129b057600080fd5b505af11580156129c4573d6000803e3d6000fd5b5050602a805460ff60a01b1916905550505050565b6000808211612a2f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a3857fe5b049392505050565b600082612a4f57506000610ec4565b82820282848281612a5c57fe5b04146121485760405162461bcd60e51b8152600401808060200182810382526021815260200180613e3b6021913960400191505060405180910390fd5b601f544210612aaa57612aaa613138565b6000612ab78260216129d9565b60188054820190556001549091506001600160a01b03166108fc612adc836004612a40565b6040518115909202916000818181858888f19350505050158015612b04573d6000803e3d6000fd5b506002546001600160a01b03166108fc612b1f836003612a40565b6040518115909202916000818181858888f19350505050158015612b47573d6000803e3d6000fd5b506003546001600160a01b03166108fc612b62836002612a40565b6040518115909202916000818181858888f19350505050158015612b8a573d6000803e3d6000fd5b506004546001600160a01b03166108fc612ba5836001612a40565b6040518115909202916000818181858888f19350505050158015612bcd573d6000803e3d6000fd5b506029546001600160a01b03166108fc612bed6003611b0e866002612a40565b6040518115909202916000818181858888f19350505050158015612c15573d6000803e3d6000fd5b505050565b6000612c2683836135a6565b612c5c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ec4565b506000610ec4565b6001600160a01b03821660009081526013602052604090205460ff166114a25760408051600280825260608083018452926020830190803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015612ce857600080fd5b505afa158015612cfc573d6000803e3d6000fd5b505050506040513d6020811015612d1257600080fd5b505181518290600090612d2157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612d4f57fe5b6001600160a01b03928316602091820292909201810191909152601554604080516307c0329d60e21b815260048101878152602482019283528651604483015286516000969490941694631f00ca749489948994909260649091019185820191028083838c5b83811015612dcd578181015183820152602001612db5565b50505050905001935050505060006040518083038186803b158015612df157600080fd5b505afa158015612e05573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612e2e57600080fd5b8101908080516040519392919084640100000000821115612e4e57600080fd5b908301906020820185811115612e6357600080fd5b8251866020820283011164010000000082111715612e8057600080fd5b82525081516020918201928201910280838360005b83811015612ead578181015183820152602001612e95565b50505050905001604052505050600081518110612ec657fe5b6020908102919091018101516001600160a01b038616600090815260118352604080822054601490945290205490925060ff1615613017576001600160a01b038516600090815260126020526040902054821115612fe7576001600160a01b03851660008181526012602081815260408084208054880381556014835293819020805460ff19169055918152915481516370a0823160e01b815260048101949094529051612fc9939192889230926370a0823192602480840193919291829003018186803b158015612f9757600080fd5b505afa158015612fab573d6000803e3d6000fd5b505050506040513d6020811015612fc157600080fd5b505101611af4565b6001600160a01b038616600090815260116020526040902055613012565b6001600160a01b03851660009081526012602090815260408083208054869003905560119091528120555b613095565b6001600160a01b038516600081815260126020908152604091829020805486019081905582516370a0823160e01b81526004810194909452915161307b93889230926370a08231926024808201939291829003018186803b158015612f9757600080fd5b6001600160a01b0386166000908152601160205260409020555b6001600160a01b03851660009081526014602052604090205460ff166131065760006130c082611b3e565b6001600160a01b038716600090815260116020526040812054919250906130e690611b3e565b90508082146130f9576130f987836135be565b61310387826135eb565b50505b5050505050565b8061311a5761311a613618565b613125848484613632565b806131325761313261372f565b50505050565b600060165461314c60165460175403613737565b01905080601854106112f7576000613186613181600d60008154811061316e57fe5b906000526020600020906002020161381d565b613737565b9050600061319e613181600d60018154811061316e57fe5b905060006131b6613181600d60028154811061316e57fe5b905060006131ce613181600d60038154811061316e57fe5b90506131fe84600d6000815481106131e257fe5b906000526020600020906002020161382890919063ffffffff16565b600160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061323683600d6001815481106131e257fe5b600260006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061326e82600d6002815481106131e257fe5b600360006101000a8154816001600160a01b0302191690836001600160a01b031602179055506132a681600d6003815481106131e257fe5b600480546001600160a01b0319166001600160a01b039283161780825560015460025460035491851660008181526012602090815260408083205494891680845281842054968a168085528285205498909a16808552938290205482516370a0823160e01b8152998a0186905291517fcf6a823b3436846680f79054a7512354af07f077ae2efb646a05db1fa429640e9a429a9699929890979596909492939230926370a08231926024808201939291829003018186803b15801561336a57600080fd5b505afa15801561337e573d6000803e3d6000fd5b505050506040513d602081101561339457600080fd5b5051600254604080516370a0823160e01b81526001600160a01b0390921660048301525130916370a08231916024808301926020929190829003018186803b1580156133df57600080fd5b505afa1580156133f3573d6000803e3d6000fd5b505050506040513d602081101561340957600080fd5b5051600354604080516370a0823160e01b81526001600160a01b0390921660048301525130916370a08231916024808301926020929190829003018186803b15801561345457600080fd5b505afa158015613468573d6000803e3d6000fd5b505050506040513d602081101561347e57600080fd5b505160048054604080516370a0823160e01b81526001600160a01b0390921692820192909252905130916370a08231916024808301926020929190829003018186803b1580156134cd57600080fd5b505afa1580156134e1573d6000803e3d6000fd5b505050506040513d60208110156134f757600080fd5b8101908080519060200190929190505050601854604051808f81526020018e6001600160a01b031681526020018d6001600160a01b031681526020018c6001600160a01b031681526020018b6001600160a01b031681526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b60009081526001919091016020526040902054151590565b612c1582600d83815481106135cf57fe5b906000526020600020906002020161383490919063ffffffff16565b612c1582600d83815481106135fc57fe5b906000526020600020906002020161213390919063ffffffff16565b60275461362457613630565b60278054602855600090555b565b600061364e6064611b0e60275485612a4090919063ffffffff16565b9050600061365c8383613849565b6001600160a01b0386166000908152601c60205260409020549091506136829084613849565b6001600160a01b038087166000908152601c602052604080822093909355908616815220546136b190826127b1565b6001600160a01b0385166000908152601c60205260409020556136d485846138a6565b6136dd82613c90565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050505050565b602854602755565b6000816001141561374a57506000611316565b600043423360405160200180826001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012060001c8161378b57fe5b0445424160405160200180826001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012060001c816137cb57fe5b0444420101010101604051602001808281526020019150506040516020818303038152906040528051906020012060001c90506001830360018403828161380e57fe5b04028103600101915050919050565b6000610ec482613cbd565b60006121488383613cc1565b6000612148836001600160a01b038416613ce5565b6000828211156138a0576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b03821660009081526013602052604090205460ff166114a25760408051600280825260608083018452926020830190803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561392a57600080fd5b505afa15801561393e573d6000803e3d6000fd5b505050506040513d602081101561395457600080fd5b50518151829060009061396357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061399157fe5b6001600160a01b03928316602091820292909201810191909152601554604080516307c0329d60e21b815260048101878152602482019283528651604483015286516000969490941694631f00ca749489948994909260649091019185820191028083838c5b83811015613a0f5781810151838201526020016139f7565b50505050905001935050505060006040518083038186803b158015613a3357600080fd5b505afa158015613a47573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613a7057600080fd5b8101908080516040519392919084640100000000821115613a9057600080fd5b908301906020820185811115613aa557600080fd5b8251866020820283011164010000000082111715613ac257600080fd5b82525081516020918201928201910280838360005b83811015613aef578181015183820152602001613ad7565b50505050905001604052505050600081518110613b0857fe5b6020908102919091018101516001600160a01b038616600090815260118352604080822054601490945290205490925060ff1615613b6e576001600160a01b03851660009081526012602090815260408083208054860190556011909152812055613c79565b6001600160a01b0385166000908152601260205260409020548211613c3d576001600160a01b03851660008181526012602090815260409182902080548690039081905582516370a0823160e01b815260048101949094529151613c1f9330926370a0823192602480840193829003018186803b158015613bee57600080fd5b505afa158015613c02573d6000803e3d6000fd5b505050506040513d6020811015613c1857600080fd5b5051611af4565b6001600160a01b038616600090815260116020526040902055613c79565b6001600160a01b038516600090815260126020908152604080832080548603905560148252808320805460ff1916600117905560119091528120555b6000613c8482611b3e565b905061271286826135be565b306000908152601c6020526040902054613caa90826127b1565b306000908152601c602052604090205550565b5490565b6000826000018281548110613cd257fe5b9060005260206000200154905092915050565b60008181526001830160205260408120548015613da35783546000198083019101808214613d5d576000866000018281548110613d1e57fe5b9060005260206000200154905080876000018481548110613d3b57fe5b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613d6857fe5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610ec4565b6000915050610ec456fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373576569676874732073686f756c642062652064657363656e64696e67206f726465724f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736665654d696e2073686f756c6420626520736d616c6c6572207468616e206665654d61785472616e7366657220616d6f756e74206578636565647320746865206d617820616d6f756e742e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122070af31c9ff8dc73fe114a3aa446e6cc3c5bbdcea73b8f81b37c8fe3e0880f05b64736f6c634300060c0033d7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb500000000000000000000000065f45c966aa50e851db2906c1ae9578f2851c2f5

Deployed Bytecode

0x6080604052600436106103b15760003560e01c8063a3898bb7116101e7578063d543dbeb1161010d578063f2fde38b116100a0578063f815a8421161006f578063f815a84214610d80578063faa651cf14610d95578063fc10805714610daa578063ffbe9f1e14610ddd576103b8565b8063f2fde38b14610c5c578063f429389014610c8f578063f42f31bb14610ca4578063f698c04f14610d54576103b8565b8063e377b09b116100dc578063e377b09b14610bbe578063e47d606014610bd3578063ec28438a14610c06578063ee8627a714610c30576103b8565b8063d543dbeb14610b03578063dd62ed3e14610b2d578063e01af92c14610b68578063e15434ed14610b94576103b8565b8063ab1f510611610185578063bd9c4ed611610154578063bd9c4ed614610a61578063d067603a14610a76578063d419d88314610aa6578063d457ae2114610ad9576103b8565b8063ab1f51061461098a578063af9549e0146109c0578063bcdd822d146109fb578063bd68b1e714610a2e576103b8565b8063a9059cbb116101c1578063a9059cbb14610912578063a985ceef1461094b578063aa45026b14610960578063aab7c4b514610975576103b8565b8063a3898bb7146108af578063a457c2d7146108c4578063a771ebc7146108fd576103b8565b806349bd5a5e116102d75780637302dacf1161026a57806388b79cec1161023957806388b79cec1461083d5780638da5cb5b1461087057806395d89b4114610885578063963629201461089a576103b8565b80637302dacf146107ad5780637cd07e47146107e05780637d1db4a5146107f55780637ded4d6a1461080a576103b8565b80635e14f794116102a65780635e14f7941461071d5780636ddd17131461075057806370a0823114610765578063715018a614610798576103b8565b806349bd5a5e146106ab5780634ada218b146106c057806351bc3c85146106d55780635342acb4146106ea576103b8565b806320a94f941161034f578063313ce5671161031e578063313ce567146105e857806339509351146106135780634303443d1461064c578063441603d71461067f576103b8565b806320a94f941461056657806323b872dd1461057b57806324649365146105be5780632af8bfa6146105d3576103b8565b8063095ea7b31161038b578063095ea7b3146104bf57806312eabeb1146104f85780631694505e1461052a57806318160ddd1461053f576103b8565b806305489b48146103bd57806306fdde03146104045780630875d8151461048e576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103f0600480360360208110156103e057600080fd5b50356001600160a01b0316610df2565b604080519115158252519081900360200190f35b34801561041057600080fd5b50610419610e07565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561045357818101518382015260200161043b565b50505050905090810190601f1680156104805780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561049a57600080fd5b506104a3610e9d565b604080516001600160a01b039092168252519081900360200190f35b3480156104cb57600080fd5b506103f0600480360360408110156104e257600080fd5b506001600160a01b038135169060200135610eac565b34801561050457600080fd5b506105286004803603604081101561051b57600080fd5b5080359060200135610eca565b005b34801561053657600080fd5b506104a3610f7c565b34801561054b57600080fd5b50610554610f8b565b60408051918252519081900360200190f35b34801561057257600080fd5b50610554610f91565b34801561058757600080fd5b506103f06004803603606081101561059e57600080fd5b506001600160a01b03813581169160208101359091169060400135610f97565b3480156105ca57600080fd5b5061055461101e565b3480156105df57600080fd5b50610554611024565b3480156105f457600080fd5b506105fd61102a565b6040805160ff9092168252519081900360200190f35b34801561061f57600080fd5b506103f06004803603604081101561063657600080fd5b506001600160a01b038135169060200135611033565b34801561065857600080fd5b506105286004803603602081101561066f57600080fd5b50356001600160a01b0316611081565b34801561068b57600080fd5b50610528600480360360208110156106a257600080fd5b503515156111d1565b3480156106b757600080fd5b506104a3611259565b3480156106cc57600080fd5b506103f0611268565b3480156106e157600080fd5b50610528611278565b3480156106f657600080fd5b506103f06004803603602081101561070d57600080fd5b50356001600160a01b03166112fa565b34801561072957600080fd5b506105286004803603602081101561074057600080fd5b50356001600160a01b031661131b565b34801561075c57600080fd5b506103f06114a6565b34801561077157600080fd5b506105546004803603602081101561078857600080fd5b50356001600160a01b03166114b6565b3480156107a457600080fd5b506105286114d1565b3480156107b957600080fd5b50610554600480360360208110156107d057600080fd5b50356001600160a01b031661157d565b3480156107ec57600080fd5b506104a361158f565b34801561080157600080fd5b5061055461159e565b34801561081657600080fd5b506105286004803603602081101561082d57600080fd5b50356001600160a01b03166115a4565b34801561084957600080fd5b506105286004803603602081101561086057600080fd5b50356001600160a01b0316611694565b34801561087c57600080fd5b506104a3611761565b34801561089157600080fd5b50610419611770565b3480156108a657600080fd5b506105546117d1565b3480156108bb57600080fd5b506104a36117d7565b3480156108d057600080fd5b506103f0600480360360408110156108e757600080fd5b506001600160a01b0381351690602001356117e6565b34801561090957600080fd5b506103f061184e565b34801561091e57600080fd5b506103f06004803603604081101561093557600080fd5b506001600160a01b03813516906020013561185e565b34801561095757600080fd5b506103f0611872565b34801561096c57600080fd5b50610554611882565b34801561098157600080fd5b50610554611888565b34801561099657600080fd5b50610528600480360360608110156109ad57600080fd5b508035906020810135906040013561188e565b3480156109cc57600080fd5b50610528600480360360408110156109e357600080fd5b506001600160a01b038135169060200135151561194e565b348015610a0757600080fd5b506103f060048036036020811015610a1e57600080fd5b50356001600160a01b03166119e1565b348015610a3a57600080fd5b5061052860048036036020811015610a5157600080fd5b50356001600160a01b03166119f6565b348015610a6d57600080fd5b506104a3611ae5565b348015610a8257600080fd5b5061055460048036036040811015610a9957600080fd5b5080359060200135611af4565b348015610ab257600080fd5b5061055460048036036020811015610ac957600080fd5b50356001600160a01b0316611b2c565b348015610ae557600080fd5b5061055460048036036020811015610afc57600080fd5b5035611b3e565b348015610b0f57600080fd5b5061052860048036036020811015610b2657600080fd5b5035611b7e565b348015610b3957600080fd5b5061055460048036036040811015610b5057600080fd5b506001600160a01b0381358116916020013516611c00565b348015610b7457600080fd5b5061052860048036036020811015610b8b57600080fd5b50351515611c2b565b348015610ba057600080fd5b5061052860048036036020811015610bb757600080fd5b5035611ce0565b348015610bca57600080fd5b506104a3611d4e565b348015610bdf57600080fd5b506103f060048036036020811015610bf657600080fd5b50356001600160a01b0316611d5d565b348015610c1257600080fd5b5061052860048036036020811015610c2957600080fd5b5035611d7b565b348015610c3c57600080fd5b5061052860048036036020811015610c5357600080fd5b50351515611de2565b348015610c6857600080fd5b5061052860048036036020811015610c7f57600080fd5b50356001600160a01b0316611e62565b348015610c9b57600080fd5b50610528611f64565b348015610cb057600080fd5b5061052860048036036020811015610cc757600080fd5b810190602081018135640100000000811115610ce257600080fd5b820183602082011115610cf457600080fd5b80359060200191846020830284011164010000000083111715610d1657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611fd7945050505050565b348015610d6057600080fd5b5061052860048036036020811015610d7757600080fd5b50351515612091565b348015610d8c57600080fd5b50610554612111565b348015610da157600080fd5b50610554612115565b348015610db657600080fd5b5061055460048036036020811015610dcd57600080fd5b50356001600160a01b031661211b565b348015610de957600080fd5b5061055461212d565b60136020526000908152604090205460ff1681565b60248054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e935780601f10610e6857610100808354040283529160200191610e93565b820191906000526020600020905b815481529060010190602001808311610e7657829003601f168201915b5050505050905090565b6003546001600160a01b031681565b6000610ec0610eb961214f565b8484612153565b5060015b92915050565b601a6000610ed661214f565b6001600160a01b0316815260208101919091526040016000205460ff16610f33576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b808210610f715760405162461bcd60e51b8152600401808060200182810382526024815260200180613f3a6024913960400191505060405180910390fd5b601691909155601755565b6015546001600160a01b031681565b60225490565b60165481565b6000610fa484848461223f565b61101484610fb061214f565b61100f85604051806060016040528060288152602001613e5c602891396001600160a01b038a166000908152601d6020526040812090610fee61214f565b6001600160a01b03168152602081019190915260400160002054919061271a565b612153565b5060019392505050565b600e5481565b60195481565b60265460ff1690565b6000610ec061104061214f565b8461100f85601d600061105161214f565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906127b1565b61108961214f565b6001600160a01b031661109a611761565b6001600160a01b0316146110e3576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561113f5760405162461bcd60e51b8152600401808060200182810382526024815260200180613ecd6024913960400191505060405180910390fd5b6001600160a01b03811660009081526021602052604090205460ff16156111ad576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000908152602160205260409020805460ff19166001179055565b6111d961214f565b6001600160a01b03166111ea611761565b6001600160a01b031614611233576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b602a8054911515600160b81b0260ff60b81b199092169190911790556105dc4201601f55565b602a546001600160a01b031681565b602a54600160b81b900460ff1681565b601a600061128461214f565b6001600160a01b0316815260208101919091526040016000205460ff166112e1576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b60006112ec306114b6565b90506112f78161280b565b50565b6001600160a01b038116600090815260208052604090205460ff165b919050565b601a600061132761214f565b6001600160a01b0316815260208101919091526040016000205460ff16611384576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b6001600160a01b0381166000908152601a602052604090205460ff16156112f7576001600160a01b0381166000908152601a60205260408120805460ff191690555b601b548110156114a257816001600160a01b0316601b82815481106113e757fe5b6000918252602090912001546001600160a01b0316141561149a57601b8054600019810190811061141457fe5b600091825260209091200154601b80546001600160a01b03909216918390811061143a57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601b80548061147357fe5b600082815260209020810160001990810180546001600160a01b03191690550190556114a2565b6001016113c6565b5050565b602a54600160a81b900460ff1681565b6001600160a01b03166000908152601c602052604090205490565b6114d961214f565b6001600160a01b03166114ea611761565b6001600160a01b031614611533576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b601e6020526000908152604090205481565b602d546001600160a01b031681565b602b5481565b6115ac61214f565b6001600160a01b03166115bd611761565b6001600160a01b031614611606576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526021602052604090205460ff16611673576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b6001600160a01b03166000908152602160205260409020805460ff19169055565b601a60006116a061214f565b6001600160a01b0316815260208101919091526040016000205460ff166116fd576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b6001600160a01b03811660009081526013602090815260408083208054600160ff19918216811790925592805292208054909116909117905561173f816119f6565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b60258054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e935780601f10610e6857610100808354040283529160200191610e93565b60235481565b6004546001600160a01b031681565b6000610ec06117f361214f565b8461100f85604051806060016040528060258152602001613f8560259139601d600061181d61214f565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061271a565b602a54600160b01b900460ff1681565b6000610ec061186b61214f565b848461223f565b602a54600160c01b900460ff1681565b60275481565b600f5481565b601a600061189a61214f565b6001600160a01b0316815260208101919091526040016000205460ff166118f7576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b818311801561190557508082115b6119405760405162461bcd60e51b8152600401808060200182810382526022815260200180613dd16022913960400191505060405180910390fd5b600e92909255600f55601055565b601a600061195a61214f565b6001600160a01b0316815260208101919091526040016000205460ff166119b7576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b60146020526000908152604090205460ff1681565b601a6000611a0261214f565b6001600160a01b0316815260208101919091526040016000205460ff16611a5f576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b6001600160a01b0381166000908152601a602052604090205460ff166112f7576001600160a01b03166000818152601a60205260408120805460ff19166001908117909155601b805491820181559091527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180546001600160a01b0319169091179055565b6002546001600160a01b031681565b601954600090611b1490611b0e846509184e72a0006129d9565b906129d9565b611b24846509184e72a0006129d9565b019392505050565b60116020526000908152604090205481565b6000600e54821115611b5257506000611316565b600f54821115611b6457506001611316565b601054821115611b7657506002611316565b506003919050565b611b8661214f565b6001600160a01b0316611b97611761565b6001600160a01b031614611be0576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b611bfa6064611b0e83602254612a4090919063ffffffff16565b602b5550565b6001600160a01b039182166000908152601d6020908152604080832093909416825291909152205490565b611c3361214f565b6001600160a01b0316611c44611761565b6001600160a01b031614611c8d576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b602a8054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a129181900360200190a150565b601a6000611cec61214f565b6001600160a01b0316815260208101919091526040016000205460ff16611d49576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b601955565b6001546001600160a01b031681565b6001600160a01b031660009081526021602052604090205460ff1690565b611d8361214f565b6001600160a01b0316611d94611761565b6001600160a01b031614611ddd576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b602b55565b611dea61214f565b6001600160a01b0316611dfb611761565b6001600160a01b031614611e44576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b602a8054911515600160c01b0260ff60c01b19909216919091179055565b611e6a61214f565b6001600160a01b0316611e7b611761565b6001600160a01b031614611ec4576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b6001600160a01b038116611f095760405162461bcd60e51b8152600401808060200182810382526026815260200180613df36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b601a6000611f7061214f565b6001600160a01b0316815260208101919091526040016000205460ff16611fcd576040805162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93732b960a11b604482015290519081900360640190fd5b476112f781612a99565b611fdf61214f565b6001600160a01b0316611ff0611761565b6001600160a01b031614612039576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b60005b81518110156114a25760016021600084848151811061205757fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010161203c565b61209961214f565b6001600160a01b03166120aa611761565b6001600160a01b0316146120f3576040805162461bcd60e51b81526020600482018190526024820152600080516020613e84833981519152604482015290519081900360640190fd5b602a8054911515600160b01b0260ff60b01b19909216919091179055565b4790565b60105481565b60126020526000908152604090205481565b60175481565b6000612148836001600160a01b038416612c1a565b9392505050565b3390565b6001600160a01b0383166121985760405162461bcd60e51b8152600401808060200182810382526024815260200180613f166024913960400191505060405180910390fd5b6001600160a01b0382166121dd5760405162461bcd60e51b8152600401808060200182810382526022815260200180613e196022913960400191505060405180910390fd5b6001600160a01b038084166000818152601d6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166122845760405162461bcd60e51b8152600401808060200182810382526025815260200180613ef16025913960400191505060405180910390fd5b6001600160a01b0382166122c95760405162461bcd60e51b8152600401808060200182810382526023815260200180613dae6023913960400191505060405180910390fd5b600081116123085760405162461bcd60e51b8152600401808060200182810382526029815260200180613ea46029913960400191505060405180910390fd5b6001600160a01b03821660009081526021602052604090205460ff1615612360576040805162461bcd60e51b8152602060048201526007602482015266476f206177617960c81b604482015290519081900360640190fd5b6001600160a01b03831660009081526021602052604090205460ff16156123b8576040805162461bcd60e51b8152602060048201526007602482015266476f206177617960c81b604482015290519081900360640190fd5b6123c0611761565b6001600160a01b0316836001600160a01b0316141580156123fa57506123e4611761565b6001600160a01b0316826001600160a01b031614155b80156124145750602d546001600160a01b03848116911614155b801561242e5750602d546001600160a01b03838116911614155b156124f957602b548111156124745760405162461bcd60e51b8152600401808060200182810382526027815260200180613f5e6027913960400191505060405180910390fd5b602a546001600160a01b038481169116148061249d5750602a546001600160a01b038381169116145b156124f957602a54600160b81b900460ff166124f9576040805162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b604482015290519081900360640190fd5b602a54600160c01b900460ff16156125dd57602a546001600160a01b03848116911614156125495760235461252f9042906127b1565b6001600160a01b0383166000908152601e60205260409020555b612551611761565b6001600160a01b0316836001600160a01b0316141580156125805750602a546001600160a01b03848116911614155b156125dd576001600160a01b0383166000908152601e60205260409020544210156125dd576040805162461bcd60e51b815260206004820152600860248201526721b7b7b63237bbb760c11b604482015290519081900360640190fd5b602a546001600160a01b0384811691161415612634576125fb611761565b6001600160a01b0316826001600160a01b0316141580156126255750602a54600160b01b900460ff165b15612634576126348282612c64565b600061263f306114b6565b9050602b54811061264f5750602b545b602c54602a549082101590600160a01b900460ff1615801561267a5750602a54600160a81b900460ff165b80156126835750805b801561269d5750602a546001600160a01b03868116911614155b156126bd576126ab8261280b565b4780156126bb576126bb47612a99565b505b6001600160a01b038516600090815260208052604090205460019060ff16806126fd57506001600160a01b038516600090815260208052604090205460ff165b15612706575060005b6127128686868461310d565b505050505050565b600081848411156127a95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561276e578181015183820152602001612756565b50505050905090810190601f16801561279b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015612148576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b602a805460ff60a01b1916600160a01b1790556040805160028082526060808301845292602083019080368337019050509050308160008151811061284c57fe5b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156128a057600080fd5b505afa1580156128b4573d6000803e3d6000fd5b505050506040513d60208110156128ca57600080fd5b50518151829060019081106128db57fe5b6001600160a01b0392831660209182029290920101526015546129019130911684612153565b60155460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561298757818101518382015260200161296f565b505050509050019650505050505050600060405180830381600087803b1580156129b057600080fd5b505af11580156129c4573d6000803e3d6000fd5b5050602a805460ff60a01b1916905550505050565b6000808211612a2f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a3857fe5b049392505050565b600082612a4f57506000610ec4565b82820282848281612a5c57fe5b04146121485760405162461bcd60e51b8152600401808060200182810382526021815260200180613e3b6021913960400191505060405180910390fd5b601f544210612aaa57612aaa613138565b6000612ab78260216129d9565b60188054820190556001549091506001600160a01b03166108fc612adc836004612a40565b6040518115909202916000818181858888f19350505050158015612b04573d6000803e3d6000fd5b506002546001600160a01b03166108fc612b1f836003612a40565b6040518115909202916000818181858888f19350505050158015612b47573d6000803e3d6000fd5b506003546001600160a01b03166108fc612b62836002612a40565b6040518115909202916000818181858888f19350505050158015612b8a573d6000803e3d6000fd5b506004546001600160a01b03166108fc612ba5836001612a40565b6040518115909202916000818181858888f19350505050158015612bcd573d6000803e3d6000fd5b506029546001600160a01b03166108fc612bed6003611b0e866002612a40565b6040518115909202916000818181858888f19350505050158015612c15573d6000803e3d6000fd5b505050565b6000612c2683836135a6565b612c5c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ec4565b506000610ec4565b6001600160a01b03821660009081526013602052604090205460ff166114a25760408051600280825260608083018452926020830190803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015612ce857600080fd5b505afa158015612cfc573d6000803e3d6000fd5b505050506040513d6020811015612d1257600080fd5b505181518290600090612d2157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612d4f57fe5b6001600160a01b03928316602091820292909201810191909152601554604080516307c0329d60e21b815260048101878152602482019283528651604483015286516000969490941694631f00ca749489948994909260649091019185820191028083838c5b83811015612dcd578181015183820152602001612db5565b50505050905001935050505060006040518083038186803b158015612df157600080fd5b505afa158015612e05573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612e2e57600080fd5b8101908080516040519392919084640100000000821115612e4e57600080fd5b908301906020820185811115612e6357600080fd5b8251866020820283011164010000000082111715612e8057600080fd5b82525081516020918201928201910280838360005b83811015612ead578181015183820152602001612e95565b50505050905001604052505050600081518110612ec657fe5b6020908102919091018101516001600160a01b038616600090815260118352604080822054601490945290205490925060ff1615613017576001600160a01b038516600090815260126020526040902054821115612fe7576001600160a01b03851660008181526012602081815260408084208054880381556014835293819020805460ff19169055918152915481516370a0823160e01b815260048101949094529051612fc9939192889230926370a0823192602480840193919291829003018186803b158015612f9757600080fd5b505afa158015612fab573d6000803e3d6000fd5b505050506040513d6020811015612fc157600080fd5b505101611af4565b6001600160a01b038616600090815260116020526040902055613012565b6001600160a01b03851660009081526012602090815260408083208054869003905560119091528120555b613095565b6001600160a01b038516600081815260126020908152604091829020805486019081905582516370a0823160e01b81526004810194909452915161307b93889230926370a08231926024808201939291829003018186803b158015612f9757600080fd5b6001600160a01b0386166000908152601160205260409020555b6001600160a01b03851660009081526014602052604090205460ff166131065760006130c082611b3e565b6001600160a01b038716600090815260116020526040812054919250906130e690611b3e565b90508082146130f9576130f987836135be565b61310387826135eb565b50505b5050505050565b8061311a5761311a613618565b613125848484613632565b806131325761313261372f565b50505050565b600060165461314c60165460175403613737565b01905080601854106112f7576000613186613181600d60008154811061316e57fe5b906000526020600020906002020161381d565b613737565b9050600061319e613181600d60018154811061316e57fe5b905060006131b6613181600d60028154811061316e57fe5b905060006131ce613181600d60038154811061316e57fe5b90506131fe84600d6000815481106131e257fe5b906000526020600020906002020161382890919063ffffffff16565b600160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061323683600d6001815481106131e257fe5b600260006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061326e82600d6002815481106131e257fe5b600360006101000a8154816001600160a01b0302191690836001600160a01b031602179055506132a681600d6003815481106131e257fe5b600480546001600160a01b0319166001600160a01b039283161780825560015460025460035491851660008181526012602090815260408083205494891680845281842054968a168085528285205498909a16808552938290205482516370a0823160e01b8152998a0186905291517fcf6a823b3436846680f79054a7512354af07f077ae2efb646a05db1fa429640e9a429a9699929890979596909492939230926370a08231926024808201939291829003018186803b15801561336a57600080fd5b505afa15801561337e573d6000803e3d6000fd5b505050506040513d602081101561339457600080fd5b5051600254604080516370a0823160e01b81526001600160a01b0390921660048301525130916370a08231916024808301926020929190829003018186803b1580156133df57600080fd5b505afa1580156133f3573d6000803e3d6000fd5b505050506040513d602081101561340957600080fd5b5051600354604080516370a0823160e01b81526001600160a01b0390921660048301525130916370a08231916024808301926020929190829003018186803b15801561345457600080fd5b505afa158015613468573d6000803e3d6000fd5b505050506040513d602081101561347e57600080fd5b505160048054604080516370a0823160e01b81526001600160a01b0390921692820192909252905130916370a08231916024808301926020929190829003018186803b1580156134cd57600080fd5b505afa1580156134e1573d6000803e3d6000fd5b505050506040513d60208110156134f757600080fd5b8101908080519060200190929190505050601854604051808f81526020018e6001600160a01b031681526020018d6001600160a01b031681526020018c6001600160a01b031681526020018b6001600160a01b031681526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b60009081526001919091016020526040902054151590565b612c1582600d83815481106135cf57fe5b906000526020600020906002020161383490919063ffffffff16565b612c1582600d83815481106135fc57fe5b906000526020600020906002020161213390919063ffffffff16565b60275461362457613630565b60278054602855600090555b565b600061364e6064611b0e60275485612a4090919063ffffffff16565b9050600061365c8383613849565b6001600160a01b0386166000908152601c60205260409020549091506136829084613849565b6001600160a01b038087166000908152601c602052604080822093909355908616815220546136b190826127b1565b6001600160a01b0385166000908152601c60205260409020556136d485846138a6565b6136dd82613c90565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050505050565b602854602755565b6000816001141561374a57506000611316565b600043423360405160200180826001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012060001c8161378b57fe5b0445424160405160200180826001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012060001c816137cb57fe5b0444420101010101604051602001808281526020019150506040516020818303038152906040528051906020012060001c90506001830360018403828161380e57fe5b04028103600101915050919050565b6000610ec482613cbd565b60006121488383613cc1565b6000612148836001600160a01b038416613ce5565b6000828211156138a0576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b03821660009081526013602052604090205460ff166114a25760408051600280825260608083018452926020830190803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561392a57600080fd5b505afa15801561393e573d6000803e3d6000fd5b505050506040513d602081101561395457600080fd5b50518151829060009061396357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061399157fe5b6001600160a01b03928316602091820292909201810191909152601554604080516307c0329d60e21b815260048101878152602482019283528651604483015286516000969490941694631f00ca749489948994909260649091019185820191028083838c5b83811015613a0f5781810151838201526020016139f7565b50505050905001935050505060006040518083038186803b158015613a3357600080fd5b505afa158015613a47573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613a7057600080fd5b8101908080516040519392919084640100000000821115613a9057600080fd5b908301906020820185811115613aa557600080fd5b8251866020820283011164010000000082111715613ac257600080fd5b82525081516020918201928201910280838360005b83811015613aef578181015183820152602001613ad7565b50505050905001604052505050600081518110613b0857fe5b6020908102919091018101516001600160a01b038616600090815260118352604080822054601490945290205490925060ff1615613b6e576001600160a01b03851660009081526012602090815260408083208054860190556011909152812055613c79565b6001600160a01b0385166000908152601260205260409020548211613c3d576001600160a01b03851660008181526012602090815260409182902080548690039081905582516370a0823160e01b815260048101949094529151613c1f9330926370a0823192602480840193829003018186803b158015613bee57600080fd5b505afa158015613c02573d6000803e3d6000fd5b505050506040513d6020811015613c1857600080fd5b5051611af4565b6001600160a01b038616600090815260116020526040902055613c79565b6001600160a01b038516600090815260126020908152604080832080548603905560148252808320805460ff1916600117905560119091528120555b6000613c8482611b3e565b905061271286826135be565b306000908152601c6020526040902054613caa90826127b1565b306000908152601c602052604090205550565b5490565b6000826000018281548110613cd257fe5b9060005260206000200154905092915050565b60008181526001830160205260408120548015613da35783546000198083019101808214613d5d576000866000018281548110613d1e57fe5b9060005260206000200154905080876000018481548110613d3b57fe5b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613d6857fe5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610ec4565b6000915050610ec456fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373576569676874732073686f756c642062652064657363656e64696e67206f726465724f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736665654d696e2073686f756c6420626520736d616c6c6572207468616e206665654d61785472616e7366657220616d6f756e74206578636565647320746865206d617820616d6f756e742e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122070af31c9ff8dc73fe114a3aa446e6cc3c5bbdcea73b8f81b37c8fe3e0880f05b64736f6c634300060c0033

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

00000000000000000000000065f45c966aa50e851db2906c1ae9578f2851c2f5

-----Decoded View---------------
Arg [0] : treasurehoardAddress (address): 0x65F45c966aa50E851DB2906c1AE9578f2851C2F5

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000065f45c966aa50e851db2906c1ae9578f2851c2f5


Deployed Bytecode Sourcemap

42288:12585:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33492:47;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33492:47:0;-1:-1:-1;;;;;33492:47:0;;:::i;:::-;;;;;;;;;;;;;;;;;;44518:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32941:35;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;32941:35:0;;;;;;;;;;;;;;45349:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45349:161:0;;;;;;;;:::i;40967:219::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40967:219:0;;;;;;;:::i;:::-;;33606:41;;;;;;;;;;;;;:::i;44795:95::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33656:38;;;;;;;;;;;;;:::i;45518:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45518:313:0;;;;;;;;;;;;;;;;;:::i;33240:43::-;;;;;;;;;;;;;:::i;33784:35::-;;;;;;;;;;;;;:::i;44704:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45839:218;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45839:218:0;;;;;;;;:::i;46619:311::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46619:311:0;-1:-1:-1;;;;;46619:311:0;;:::i;54089:165::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54089:165:0;;;;:::i;43165:28::-;;;;;;;;;;;;;:::i;43307:34::-;;;;;;;;;;;;;:::i;52297:157::-;;;;;;;;;;;;;:::i;47571:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47571:123:0;-1:-1:-1;;;;;47571:123:0;;:::i;41403:447::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41403:447:0;-1:-1:-1;;;;;41403:447:0;;:::i;43228:30::-;;;;;;;;;;;;;:::i;44898:117::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44898:117:0;-1:-1:-1;;;;;44898:117:0;;:::i;2647:148::-;;;;;;;;;;;;;:::i;42542:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42542:45:0;-1:-1:-1;;;;;42542:45:0;;:::i;43518:23::-;;;;;;;;;;;;;:::i;43391:48::-;;;;;;;;;;;;;:::i;47139:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47139:199:0;-1:-1:-1;;;;;47139:199:0;;:::i;54636:234::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54636:234:0;-1:-1:-1;;;;;54636:234:0;;:::i;1996:87::-;;;;;;;;;;;;;:::i;44609:::-;;;;;;;;;;;;;:::i;42851:37::-;;;;;;;;;;;;;:::i;32983:35::-;;;;;;;;;;;;;:::i;46065:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;46065:269:0;;;;;;;;:::i;43265:29::-;;;;;;;;;;;;;:::i;45023:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45023:167:0;;;;;;;;:::i;43348:34::-;;;;;;;;;;;;;:::i;43024:26::-;;;;;;;;;;;;;:::i;33290:38::-;;;;;;;;;;;;;:::i;40632:327::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40632:327:0;;;;;;;;;;;;:::i;46473:138::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;46473:138:0;;;;;;;;;;:::i;33546:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33546:51:0;-1:-1:-1;;;;;33546:51:0;;:::i;41194:201::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41194:201:0;-1:-1:-1;;;;;41194:201:0;;:::i;32901:33::-;;;;;;;;;;;;;:::i;35509:183::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35509:183:0;;;;;;;:::i;33388:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33388:45:0;-1:-1:-1;;;;;33388:45:0;;:::i;35146:355::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35146:355:0;;:::i;47706:162::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47706:162:0;;:::i;45198:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45198:143:0;;;;;;;;;;:::i;52630:141::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52630:141:0;;;;:::i;40519:105::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40519:105:0;;:::i;32860:34::-;;;;;;;;;;;;;:::i;46346:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46346:119:0;-1:-1:-1;;;;;46346:119:0;;:::i;47880:99::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47880:99:0;;:::i;54266:121::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54266:121:0;;;;:::i;2950:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2950:244:0;-1:-1:-1;;;;;2950:244:0;;:::i;52466:156::-;;;;;;;;;;;;;:::i;46942:189::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46942:189:0;;-1:-1:-1;46942:189:0;;-1:-1:-1;;;;;46942:189:0:i;54399:229::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54399:229:0;;;;:::i;53967:110::-;;;;;;;;;;;;;:::i;33335:44::-;;;;;;;;;;;;;:::i;33440:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33440:45:0;-1:-1:-1;;;;;33440:45:0;;:::i;33701:38::-;;;;;;;;;;;;;:::i;33492:47::-;;;;;;;;;;;;;;;:::o;44518:83::-;44588:5;44581:12;;;;;;;;-1:-1:-1;;44581:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44555:13;;44581:12;;44588:5;;44581:12;;44588:5;44581:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44518:83;:::o;32941:35::-;;;-1:-1:-1;;;;;32941:35:0;;:::o;45349:161::-;45424:4;45441:39;45450:12;:10;:12::i;:::-;45464:7;45473:6;45441:8;:39::i;:::-;-1:-1:-1;45498:4:0;45349:161;;;;;:::o;40967:219::-;34334:10;:24;34345:12;:10;:12::i;:::-;-1:-1:-1;;;;;34334:24:0;;;;;;;;;;;;-1:-1:-1;34334:24:0;;;;34326:49;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;;;;41074:7:::1;41064;:17;41056:66;;;;-1:-1:-1::0;;;41056:66:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41135:6;:16:::0;;;;41162:6:::1;:16:::0;40967:219::o;33606:41::-;;;-1:-1:-1;;;;;33606:41:0;;:::o;44795:95::-;44875:7;;44795:95;:::o;33656:38::-;;;;:::o;45518:313::-;45616:4;45633:36;45643:6;45651:9;45662:6;45633:9;:36::i;:::-;45680:121;45689:6;45697:12;:10;:12::i;:::-;45711:89;45749:6;45711:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45711:19:0;;;;;;:11;:19;;;;;;45731:12;:10;:12::i;:::-;-1:-1:-1;;;;;45711:33:0;;;;;;;;;;;;-1:-1:-1;45711:33:0;;;:89;:37;:89::i;:::-;45680:8;:121::i;:::-;-1:-1:-1;45819:4:0;45518:313;;;;;:::o;33240:43::-;;;;:::o;33784:35::-;;;;:::o;44704:83::-;44770:9;;;;44704:83;:::o;45839:218::-;45927:4;45944:83;45953:12;:10;:12::i;:::-;45967:7;45976:50;46015:10;45976:11;:25;45988:12;:10;:12::i;:::-;-1:-1:-1;;;;;45976:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;45976:25:0;;;:34;;;;;;;;;;;:38;:50::i;46619:311::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2208:68:0;;;;;;;;;;;;;;;46714:42:::1;-1:-1:-1::0;;;;;46703:53:0;::::1;;;46695:102;;;;-1:-1:-1::0;;;46695:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;46817:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;46816:27;46808:70;;;::::0;;-1:-1:-1;;;46808:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;46889:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;46889:33:0::1;46918:4;46889:33;::::0;;46619:311::o;54089:165::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2208:68:0;;;;;;;;;;;;;;;54161:14:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;54161:32:0::1;-1:-1:-1::0;;;;54161:32:0;;::::1;::::0;;;::::1;::::0;;54236:10:::1;54218:15;:28;54204:11;:42:::0;54089:165::o;43165:28::-;;;-1:-1:-1;;;;;43165:28:0;;:::o;43307:34::-;;;-1:-1:-1;;;43307:34:0;;;;;:::o;52297:157::-;34334:10;:24;34345:12;:10;:12::i;:::-;-1:-1:-1;;;;;34334:24:0;;;;;;;;;;;;-1:-1:-1;34334:24:0;;;;34326:49;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;;;;52352:23:::1;52378:24;52396:4;52378:9;:24::i;:::-;52352:50;;52413:33;52430:15;52413:16;:33::i;:::-;34386:1;52297:157::o:0;47571:123::-;-1:-1:-1;;;;;47659:27:0;;47635:4;47659:27;;;:18;:27;;;;;;;;47571:123;;;;:::o;41403:447::-;34334:10;:24;34345:12;:10;:12::i;:::-;-1:-1:-1;;;;;34334:24:0;;;;;;;;;;;;-1:-1:-1;34334:24:0;;;;34326:49;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;41483:21:0;::::1;;::::0;;;:10:::1;:21;::::0;;;;;::::1;;41479:364;;;-1:-1:-1::0;;;;;41521:21:0;::::1;41545:5;41521:21:::0;;;:10:::1;:21;::::0;;;;:29;;-1:-1:-1;;41521:29:0::1;::::0;;41567:265:::1;41588:9;:16:::0;41584:20;::::1;41567:265;;;41651:9;-1:-1:-1::0;;;;;41635:25:0::1;:9;41645:1;41635:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;41635:12:0::1;:25;41631:186;;;41700:9;41710:16:::0;;-1:-1:-1;;41710:20:0;;;41700:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;41685:9:::1;:12:::0;;-1:-1:-1;;;;;41700:31:0;;::::1;::::0;41695:1;;41685:12;::::1;;;;;;;;;;;;;:46;;;;;-1:-1:-1::0;;;;;41685:46:0::1;;;;;-1:-1:-1::0;;;;;41685:46:0::1;;;;;;41754:9;:15;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;41754:15:0;;;;;-1:-1:-1;;;;;;41754:15:0::1;::::0;;;;;41792:5:::1;;41631:186;41606:4;;41567:265;;;;41403:447:::0;:::o;43228:30::-;;;-1:-1:-1;;;43228:30:0;;;;;:::o;44898:117::-;-1:-1:-1;;;;;44991:16:0;44964:7;44991:16;;;:7;:16;;;;;;;44898:117::o;2647:148::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2208:68:0;;;;;;;;;;;;;;;2754:1:::1;2738:6:::0;;2717:40:::1;::::0;-1:-1:-1;;;;;2738:6:0;;::::1;::::0;2717:40:::1;::::0;2754:1;;2717:40:::1;2785:1;2768:19:::0;;-1:-1:-1;;;;;;2768:19:0::1;::::0;;2647:148::o;42542:45::-;;;;;;;;;;;;;:::o;43518:23::-;;;-1:-1:-1;;;;;43518:23:0;;:::o;43391:48::-;;;;:::o;47139:199::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2208:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;47228:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;47220:65;;;::::0;;-1:-1:-1;;;47220:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;47296:26:0::1;47325:5;47296:26:::0;;;:17:::1;:26;::::0;;;;:34;;-1:-1:-1;;47296:34:0::1;::::0;;47139:199::o;54636:234::-;34334:10;:24;34345:12;:10;:12::i;:::-;-1:-1:-1;;;;;34334:24:0;;;;;;;;;;;;-1:-1:-1;34334:24:0;;;;34326:49;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;54718:26:0;::::1;;::::0;;;:15:::1;:26;::::0;;;;;;;:33;;54747:4:::1;-1:-1:-1::0;;54718:33:0;;::::1;::::0;::::1;::::0;;;54762:29;;;;;:36;;;;::::1;::::0;;::::1;::::0;;54809:22:::1;54718:26:::0;54809:11:::1;:22::i;:::-;54842:8;:20:::0;;-1:-1:-1;;;;;;54842:20:0::1;-1:-1:-1::0;;;;;54842:20:0;;;::::1;::::0;;;::::1;::::0;;54636:234::o;1996:87::-;2042:7;2069:6;-1:-1:-1;;;;;2069:6:0;1996:87;:::o;44609:::-;44681:7;44674:14;;;;;;;;-1:-1:-1;;44674:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44648:13;;44674:14;;44681:7;;44674:14;;44681:7;44674:14;;;;;;;;;;;;;;;;;;;;;;;;42851:37;;;;:::o;32983:35::-;;;-1:-1:-1;;;;;32983:35:0;;:::o;46065:269::-;46158:4;46175:129;46184:12;:10;:12::i;:::-;46198:7;46207:96;46246:15;46207:96;;;;;;;;;;;;;;;;;:11;:25;46219:12;:10;:12::i;:::-;-1:-1:-1;;;;;46207:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;46207:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;43265:29::-;;;-1:-1:-1;;;43265:29:0;;;;;:::o;45023:167::-;45101:4;45118:42;45128:12;:10;:12::i;:::-;45142:9;45153:6;45118:9;:42::i;43348:34::-;;;-1:-1:-1;;;43348:34:0;;;;;:::o;43024:26::-;;;;:::o;33290:38::-;;;;:::o;40632:327::-;34334:10;:24;34345:12;:10;:12::i;:::-;-1:-1:-1;;;;;34334:24:0;;;;;;;;;;;;-1:-1:-1;34334:24:0;;;;34326:49;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;;;;40766:8:::1;40754:9;:20;:45;;;;;40789:10;40778:8;:21;40754:45;40746:92;;;;-1:-1:-1::0;;;40746:92:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40851:14;:26:::0;;;;40888:13:::1;:24:::0;40923:15:::1;:28:::0;40632:327::o;46473:138::-;34334:10;:24;34345:12;:10;:12::i;:::-;-1:-1:-1;;;;;34334:24:0;;;;;;;;;;;;-1:-1:-1;34334:24:0;;;;34326:49;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;46565:27:0;;;::::1;;::::0;;;:18:::1;:27:::0;;;;;:38;;-1:-1:-1;;46565:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46473:138::o;33546:51::-;;;;;;;;;;;;;;;:::o;41194:201::-;34334:10;:24;34345:12;:10;:12::i;:::-;-1:-1:-1;;;;;34334:24:0;;;;;;;;;;;;-1:-1:-1;34334:24:0;;;;34326:49;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;41270:21:0;::::1;;::::0;;;:10:::1;:21;::::0;;;;;::::1;;41265:123;;-1:-1:-1::0;;;;;41308:21:0::1;;::::0;;;:10:::1;:21;::::0;;;;:28;;-1:-1:-1;;41308:28:0::1;41332:4;41308:28:::0;;::::1;::::0;;;41351:9:::1;:25:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;41351:25:0::1;::::0;;::::1;::::0;;41194:201::o;32901:33::-;;;-1:-1:-1;;;;;32901:33:0;;:::o;35509:183::-;35674:9;;35590:7;;35643:41;;:26;:12;35660:8;35643:16;:26::i;:::-;:30;;:41::i;:::-;35617:23;:9;35631:8;35617:13;:23::i;:::-;:67;;35509:183;-1:-1:-1;;;35509:183:0:o;33388:45::-;;;;;;;;;;;;;:::o;35146:355::-;35238:7;35276:14;;35267:6;:23;35263:64;;;-1:-1:-1;35314:1:0;35307:8;;35263:64;35350:13;;35341:6;:22;35337:63;;;-1:-1:-1;35387:1:0;35380:8;;35337:63;35423:15;;35414:6;:24;35410:65;;;-1:-1:-1;35462:1:0;35455:8;;35410:65;-1:-1:-1;35492:1:0;35146:355;;;:::o;47706:162::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2208:68:0;;;;;;;;;;;;;;;47800:60:::1;47844:5;47800:25;47812:12;47800:7;;:11;;:25;;;;:::i;:60::-;47785:12;:75:::0;-1:-1:-1;47706:162:0:o;45198:143::-;-1:-1:-1;;;;;45306:18:0;;;45279:7;45306:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;45198:143::o;52630:141::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2208:68:0;;;;;;;;;;;;;;;52699:11:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;52699:21:0;::::1;-1:-1:-1::0;;;;52699:21:0;;::::1;::::0;;;::::1;::::0;;;52736:27:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;52630:141:::0;:::o;40519:105::-;34334:10;:24;34345:12;:10;:12::i;:::-;-1:-1:-1;;;;;34334:24:0;;;;;;;;;;;;-1:-1:-1;34334:24:0;;;;34326:49;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;;;;40594:9:::1;:22:::0;40519:105::o;32860:34::-;;;-1:-1:-1;;;;;32860:34:0;;:::o;46346:119::-;-1:-1:-1;;;;;46431:26:0;46407:4;46431:26;;;:17;:26;;;;;;;;;46346:119::o;47880:99::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2208:68:0;;;;;;;;;;;;;;;47951:12:::1;:20:::0;47880:99::o;54266:121::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2208:68:0;;;;;;;;;;;;;;;54345:15:::1;:34:::0;;;::::1;;-1:-1:-1::0;;;54345:34:0::1;-1:-1:-1::0;;;;54345:34:0;;::::1;::::0;;;::::1;::::0;;54266:121::o;2950:244::-;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2208:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3039:22:0;::::1;3031:73;;;;-1:-1:-1::0;;;3031:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3141:6;::::0;;3120:38:::1;::::0;-1:-1:-1;;;;;3120:38:0;;::::1;::::0;3141:6;::::1;::::0;3120:38:::1;::::0;::::1;3169:6;:17:::0;;-1:-1:-1;;;;;;3169:17:0::1;-1:-1:-1::0;;;;;3169:17:0;;;::::1;::::0;;;::::1;::::0;;2950:244::o;52466:156::-;34334:10;:24;34345:12;:10;:12::i;:::-;-1:-1:-1;;;;;34334:24:0;;;;;;;;;;;;-1:-1:-1;34334:24:0;;;;34326:49;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;-1:-1:-1;;;34326:49:0;;;;;;;;;;;;;;;52550:21:::1;52582:32;52550:21:::0;52582:12:::1;:32::i;46942:189::-:0;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2208:68:0;;;;;;;;;;;;;;;47030:6:::1;47025:99;47046:4;:11;47042:1;:15;47025:99;;;47108:4;47079:17;:26;47097:4;47102:1;47097:7;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;47079:26:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;47079:26:0;:33;;-1:-1:-1;;47079:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;47059:3:0::1;47025:99;;54399:229:::0;2227:12;:10;:12::i;:::-;-1:-1:-1;;;;;2216:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2216:23:0;;2208:68;;;;;-1:-1:-1;;;2208:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2208:68:0;;;;;;;;;;;;;;;54596:10:::1;:24:::0;;;::::1;;-1:-1:-1::0;;;54596:24:0::1;-1:-1:-1::0;;;;54596:24:0;;::::1;::::0;;;::::1;::::0;;54399:229::o;53967:110::-;54048:21;53967:110;:::o;33335:44::-;;;;:::o;33440:45::-;;;;;;;;;;;;;:::o;33701:38::-;;;;:::o;27914:152::-;27984:4;28008:50;28013:3;-1:-1:-1;;;;;28033:23:0;;28008:4;:50::i;:::-;28001:57;27914:152;-1:-1:-1;;;27914:152:0:o;620:106::-;708:10;620:106;:::o;47987:337::-;-1:-1:-1;;;;;48080:19:0;;48072:68;;;;-1:-1:-1;;;48072:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;48159:21:0;;48151:68;;;;-1:-1:-1;;;48151:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;48232:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;48284:32;;;;;;;;;;;;;;;;;47987:337;;;:::o;48332:2671::-;-1:-1:-1;;;;;48429:20:0;;48421:70;;;;-1:-1:-1;;;48421:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;48510:23:0;;48502:71;;;;-1:-1:-1;;;48502:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48601:1;48592:6;:10;48584:64;;;;-1:-1:-1;;;48584:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;48668:28:0;;;;;;:17;:28;;;;;;;;48667:29;48659:49;;;;;-1:-1:-1;;;48659:49:0;;;;;;;;;;;;-1:-1:-1;;;48659:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;48728:25:0;;;;;;:17;:25;;;;;;;;48727:26;48719:46;;;;;-1:-1:-1;;;48719:46:0;;;;;;;;;;;;-1:-1:-1;;;48719:46:0;;;;;;;;;;;;;;;48791:7;:5;:7::i;:::-;-1:-1:-1;;;;;48781:17:0;:6;-1:-1:-1;;;;;48781:17:0;;;:41;;;;;48815:7;:5;:7::i;:::-;-1:-1:-1;;;;;48802:20:0;:9;-1:-1:-1;;;;;48802:20:0;;;48781:41;:63;;;;-1:-1:-1;48836:8:0;;-1:-1:-1;;;;;48826:18:0;;;48836:8;;48826:18;;48781:63;:88;;;;-1:-1:-1;48861:8:0;;-1:-1:-1;;;;;48848:21:0;;;48861:8;;48848:21;;48781:88;48778:429;;;48904:12;;48894:6;:22;;48886:74;;;;-1:-1:-1;;;48886:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49067:13;;-1:-1:-1;;;;;49057:23:0;;;49067:13;;49057:23;;:53;;-1:-1:-1;49097:13:0;;-1:-1:-1;;;;;49084:26:0;;;49097:13;;49084:26;49057:53;49053:143;;;49139:14;;-1:-1:-1;;;49139:14:0;;;;49131:49;;;;;-1:-1:-1;;;49131:49:0;;;;;;;;;;;;-1:-1:-1;;;49131:49:0;;;;;;;;;;;;;;;49243:15;;-1:-1:-1;;;49243:15:0;;;;49240:416;;;49289:13;;-1:-1:-1;;;;;49279:23:0;;;49289:13;;49279:23;49275:171;;;49420:9;;49400:30;;:15;;:19;:30::i;:::-;-1:-1:-1;;;;;49377:20:0;;;;;;:9;:20;;;;;:53;49275:171;49517:7;:5;:7::i;:::-;-1:-1:-1;;;;;49507:17:0;:6;-1:-1:-1;;;;;49507:17:0;;;:44;;;;-1:-1:-1;49538:13:0;;-1:-1:-1;;;;;49528:23:0;;;49538:13;;49528:23;;49507:44;49504:141;;;-1:-1:-1;;;;;49599:17:0;;;;;;:9;:17;;;;;;49580:15;:36;;49572:57;;;;;-1:-1:-1;;;49572:57:0;;;;;;;;;;;;-1:-1:-1;;;49572:57:0;;;;;;;;;;;;;;;49682:13;;-1:-1:-1;;;;;49672:23:0;;;49682:13;;49672:23;49668:167;;;49729:7;:5;:7::i;:::-;-1:-1:-1;;;;;49716:20:0;:9;-1:-1:-1;;;;;49716:20:0;;;:34;;;;-1:-1:-1;49740:10:0;;-1:-1:-1;;;49740:10:0;;;;49716:34;49712:112;;;49771:37;49790:9;49801:6;49771:18;:37::i;:::-;49893:28;49924:24;49942:4;49924:9;:24::i;:::-;49893:55;;49989:12;;49965:20;:36;49961:104;;-1:-1:-1;50041:12:0;;49961:104;50128:28;;50172:6;;50104:52;;;;;-1:-1:-1;;;50172:6:0;;;;50171:7;:22;;;;-1:-1:-1;50182:11:0;;-1:-1:-1;;;50182:11:0;;;;50171:22;:45;;;;;50197:19;50171:45;:72;;;;-1:-1:-1;50230:13:0;;-1:-1:-1;;;;;50220:23:0;;;50230:13;;50220:23;;50171:72;50167:406;;;50345:38;50362:20;50345:16;:38::i;:::-;50429:21;50468:22;;50465:97;;50511:35;50524:21;50511:12;:35::i;:::-;50167:406;;-1:-1:-1;;;;;50773:26:0;;50654:12;50773:26;;;:18;:26;;;;;;50669:4;;50773:26;;;:59;;-1:-1:-1;;;;;;50803:29:0;;;;;;:18;:29;;;;;;;;50773:59;50770:105;;;-1:-1:-1;50858:5:0;50770:105;50945:50;50960:6;50968:9;50979:6;50987:7;50945:14;:50::i;:::-;48332:2671;;;;;;:::o;11455:166::-;11541:7;11577:12;11569:6;;;;11561:29;;;;-1:-1:-1;;;11561:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11608:5:0;;;11455:166::o;8628:179::-;8686:7;8718:5;;;8742:6;;;;8734:46;;;;;-1:-1:-1;;;8734:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;51011:601;43629:6;:13;;-1:-1:-1;;;;43629:13:0;-1:-1:-1;;;43629:13:0;;;51173:16:::1;::::0;;51187:1:::1;51173:16:::0;;;51149:21:::1;51173:16:::0;;::::1;::::0;;51149:21;51173:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;51173:16:0::1;51149:40;;51218:4;51200;51205:1;51200:7;;;;;;;;-1:-1:-1::0;;;;;51200:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;51244:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;51244:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;51200:7;;51244:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;51244:22:0;51234:7;;:4;;51239:1:::1;::::0;51234:7;::::1;;;;;-1:-1:-1::0;;;;;51234:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;51311:15:::1;::::0;51279:62:::1;::::0;51296:4:::1;::::0;51311:15:::1;51329:11:::0;51279:8:::1;:62::i;:::-;51380:15;::::0;:224:::1;::::0;-1:-1:-1;;;51380:224:0;;::::1;::::0;::::1;::::0;;;:15:::1;:224:::0;;;;;;51558:4:::1;51380:224:::0;;;;;;51578:15:::1;51380:224:::0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;51380:15:0;;::::1;::::0;:66:::1;::::0;51461:11;;51531:4;;51558;51578:15;51380:224;;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;:15;:224:::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;43665:6:0;:14;;-1:-1:-1;;;;43665:14:0;;;-1:-1:-1;;;;51011:601:0:o;10205:153::-;10263:7;10295:1;10291;:5;10283:44;;;;;-1:-1:-1;;;10283:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10349:1;10345;:5;;;;;;;10205:153;-1:-1:-1;;;10205:153:0:o;9507:220::-;9565:7;9589:6;9585:20;;-1:-1:-1;9604:1:0;9597:8;;9585:20;9628:5;;;9632:1;9628;:5;:1;9652:5;;;;;:10;9644:56;;;;-1:-1:-1;;;9644:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51624:519;51704:11;;51685:15;:30;51681:88;;51732:25;:23;:25::i;:::-;51781:20;51804:14;:6;51815:2;51804:10;:14::i;:::-;51831:12;:28;;;;;;-1:-1:-1;51872:11:0;51781:37;;-1:-1:-1;;;;;;51872:11:0;:41;51893:19;51781:37;51910:1;51893:16;:19::i;:::-;51872:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51924:10:0;;-1:-1:-1;;;;;51924:10:0;:40;51944:19;:12;51961:1;51944:16;:19::i;:::-;51924:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51975:12:0;;-1:-1:-1;;;;;51975:12:0;:42;51997:19;:12;52014:1;51997:16;:19::i;:::-;51975:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52028:12:0;;-1:-1:-1;;;;;52028:12:0;:42;52050:19;:12;52028;52050:16;:19::i;:::-;52028:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52083:21:0;;-1:-1:-1;;;;;52083:21:0;:52;52114:20;52132:1;52114:13;:6;52125:1;52114:10;:13::i;:20::-;52083:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51624:519;;:::o;21829:414::-;21892:4;21914:21;21924:3;21929:5;21914:9;:21::i;:::-;21909:327;;-1:-1:-1;21952:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;22135:18;;22113:19;;;:12;;;:19;;;;;;:40;;;;22168:11;;21909:327;-1:-1:-1;22219:5:0;22212:12;;35943:1589;-1:-1:-1;;;;;36031:25:0;;;;;;:15;:25;;;;;;;;36026:1499;;36097:16;;;36111:1;36097:16;;;36073:21;36097:16;;;;;36073:21;36097:16;;;;;;;;-1:-1:-1;;36138:15:0;;:22;;;-1:-1:-1;;;36138:22:0;;;;36073:40;;-1:-1:-1;;;;;;36138:15:0;;;;:20;;-1:-1:-1;36138:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36138:22:0;36128:7;;:4;;36133:1;;36128:7;;;;;;;;;:32;-1:-1:-1;;;;;36128:32:0;;;-1:-1:-1;;;;;36128:32:0;;;;;36193:4;36175;36180:1;36175:7;;;;;;;;-1:-1:-1;;;;;36175:23:0;;;:7;;;;;;;;;;:23;;;;36247:15;;:43;;;-1:-1:-1;;;36247:43:0;;;;;;;;;;;;;;;;;;;;;;36227:17;;36247:15;;;;;:28;;36276:7;;36285:4;;36247:43;;;;;;;;;;;;;;;36227:17;36247:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36247:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36247:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36291:1;36247:46;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36342:20:0;;36322:17;36342:20;;;:10;:20;;;;;;;36383:19;:29;;;;;;36247:46;;-1:-1:-1;36383:29:0;;36379:752;;;-1:-1:-1;;;;;36449:20:0;;;;;;:10;:20;;;;;;36437:32;;36433:480;;;-1:-1:-1;;;;;36529:20:0;;;;;;:10;:20;;;;;;;;;;36517:32;;36494:55;;36572:19;:29;;;;;;:37;;-1:-1:-1;;36572:37:0;;;36668:20;;;;;36690:41;;-1:-1:-1;;;36690:41:0;;;;;;;;;;;36657:85;;36668:20;;36734:7;;36705:4;;36690:31;;:41;;;;;36529:20;;36690:41;;;;;;36705:4;36690:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36690:41:0;:51;36657:10;:85::i;:::-;-1:-1:-1;;;;;36634:20:0;;;;;;:10;:20;;;;;:108;36433:480;;;-1:-1:-1;;;;;36814:20:0;;;;;;:10;:20;;;;;;;;;;:32;;;36791:55;;36869:10;:20;;;;;:24;36433:480;36379:752;;;-1:-1:-1;;;;;36953:20:0;;;;;;:10;:20;;;;;;;;;:33;;;;;;;;37063:41;;-1:-1:-1;;;37063:41:0;;;;;;;;;;;37030:85;;37107:7;;37078:4;;37063:31;;:41;;;;;36953:20;37063:41;;;;;;37078:4;37063:41;;;;;;;;;;37030:85;-1:-1:-1;;;;;37007:20:0;;;;;;:10;:20;;;;;:108;36379:752;-1:-1:-1;;;;;37152:29:0;;;;;;:19;:29;;;;;;;;37147:367;;37202:15;37220:30;37240:9;37220:19;:30::i;:::-;-1:-1:-1;;;;;37307:20:0;;37269:15;37307:20;;;:10;:20;;;;;;37202:48;;-1:-1:-1;37269:15:0;37287:41;;:19;:41::i;:::-;37269:59;;37364:7;37353;:18;37349:98;;37396:31;37409:8;37419:7;37396:12;:31::i;:::-;37467;37480:8;37490:7;37467:12;:31::i;:::-;37147:367;;;36026:1499;;;35943:1589;;:::o;52787:267::-;52899:7;52895:40;;52921:14;:12;:14::i;:::-;52948:44;52966:6;52974:9;52985:6;52948:17;:44::i;:::-;53009:7;53005:41;;53031:15;:13;:15::i;:::-;52787:267;;;;:::o;39243:1231::-;39298:15;39340:6;;39316:21;39330:6;;39321;;:15;39316:4;:21::i;:::-;:30;39298:48;;39379:7;39363:12;;:23;39359:1108;;39403:24;39430:28;39435:22;:10;39446:1;39435:13;;;;;;;;;;;;;;;;;;:20;:22::i;:::-;39430:4;:28::i;:::-;39403:55;;39473:23;39499:28;39504:22;:10;39515:1;39504:13;;;;;;;39499:28;39473:54;;39542:25;39570:28;39575:22;:10;39586:1;39575:13;;;;;;;39570:28;39542:56;;39613:25;39641:28;39646:22;:10;39657:1;39646:13;;;;;;;39641:28;39613:56;;39708:34;39725:16;39708:10;39719:1;39708:13;;;;;;;;;;;;;;;;;;:16;;:34;;;;:::i;:::-;39686:11;;:57;;;;;-1:-1:-1;;;;;39686:57:0;;;;;-1:-1:-1;;;;;39686:57:0;;;;;;39779:33;39796:15;39779:10;39790:1;39779:13;;;;;;;:33;39758:10;;:55;;;;;-1:-1:-1;;;;;39758:55:0;;;;;-1:-1:-1;;;;;39758:55:0;;;;;;39851:35;39868:17;39851:10;39862:1;39851:13;;;;;;;:35;39828:12;;:59;;;;;-1:-1:-1;;;;;39828:59:0;;;;;-1:-1:-1;;;;;39828:59:0;;;;;;39925:35;39942:17;39925:10;39936:1;39925:13;;;;;;;:35;39902:12;:59;;-1:-1:-1;;;;;;39902:59:0;-1:-1:-1;;;;;39902:59:0;;;;;;;-1:-1:-1;40037:11:0;40050:10;;40062:12;;40037:11;;;-1:-1:-1;40108:23:0;;;:10;:23;;;;;;;;;40050:10;;;40133:22;;;;;;;40062:12;;;40157:24;;;;;;;40076:12;;;;40183:24;;;;;;;;40226:44;;-1:-1:-1;;;40226:44:0;;;;;;;;;;39983:472;;40020:15;;40037:11;;40050:10;;40062:12;;40076;;40133:22;;40157:24;;40183;40241:4;;40226:31;;:44;;;;;40108:23;40226:44;;;;;;40241:4;40226:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40226:44:0;40304:10;;40272:43;;;-1:-1:-1;;;40272:43:0;;-1:-1:-1;;;;;40304:10:0;;;40272:43;;;;;40287:4;;40272:31;;:43;;;;;40226:44;;40272:43;;;;;;;40287:4;40272:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40272:43:0;40349:12;;40317:45;;;-1:-1:-1;;;40317:45:0;;-1:-1:-1;;;;;40349:12:0;;;40317:45;;;;;40332:4;;40317:31;;:45;;;;;40272:43;;40317:45;;;;;;;40332:4;40317:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40317:45:0;40396:12;;;40364:45;;;-1:-1:-1;;;40364:45:0;;-1:-1:-1;;;;;40396:12:0;;;40364:45;;;;;;;;;40379:4;;40364:31;;:45;;;;;40317;;40364;;;;;;;40379:4;40364:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40428:12;;39983:472;;;;;;;;;-1:-1:-1;;;;;39983:472:0;;;;;;-1:-1:-1;;;;;39983:472:0;;;;;;-1:-1:-1;;;;;39983:472:0;;;;;;-1:-1:-1;;;;;39983:472:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39359:1108;;;;39243:1231;:::o;23925:129::-;23998:4;24022:19;;;:12;;;;;:19;;;;;;:24;;;23925:129::o;35820:115::-;35894:33;35918:8;35894:10;35905:4;35894:16;;;;;;;;;;;;;;;;;;:23;;:33;;;;:::i;35700:112::-;35774:30;35795:8;35774:10;35785:4;35774:16;;;;;;;;;;;;;;;;;;:20;;:30;;;;:::i;47346:132::-;47392:7;;47389:24;;47406:7;;47389:24;47441:7;;;47423:15;:25;-1:-1:-1;47459:11:0;;47346:132;:::o;53062:573::-;53160:12;53175:29;53200:3;53175:20;53187:7;;53175;:11;;:20;;;;:::i;:29::-;53160:44;-1:-1:-1;53215:22:0;53240:17;:7;53160:44;53240:11;:17::i;:::-;-1:-1:-1;;;;;53288:15:0;;;;;;:7;:15;;;;;;53215:42;;-1:-1:-1;53288:28:0;;53308:7;53288:19;:28::i;:::-;-1:-1:-1;;;;;53270:15:0;;;;;;;:7;:15;;;;;;:46;;;;53348:18;;;;;;;:38;;53371:14;53348:22;:38::i;:::-;-1:-1:-1;;;;;53327:18:0;;;;;;:7;:18;;;;;:59;53492:40;53516:6;53524:7;53492:23;:40::i;:::-;53553:14;53562:4;53553:8;:14::i;:::-;53601:9;-1:-1:-1;;;;;53584:43:0;53593:6;-1:-1:-1;;;;;53584:43:0;;53612:14;53584:43;;;;;;;;;;;;;;;;;;53062:573;;;;;:::o;47486:77::-;47540:15;;47530:7;:25;47486:77::o;38676:559::-;38751:7;38780:3;38787:1;38780:8;38776:49;;;-1:-1:-1;38812:1:0;38805:8;;38776:49;38837:12;39137;39116:3;39098:10;39081:28;;;;;;-1:-1:-1;;;;;39081:28:0;;;;;;;;;;;;;;;;;;;;;;39071:39;;;;;;39063:48;;39062:58;;;;;;39031:14;39010:3;38988:14;38971:32;;;;;;-1:-1:-1;;;;;38971:32:0;;;;;;;;;;;;;;;;;;;;;;38961:43;;;;;;38953:52;;38952:62;;;;;;38919:16;38901:15;:34;:114;:144;:220;:248;38870:290;;;;;;;;;;;;;;;;;;;;;;;;;38860:301;;;;;;38852:310;;38837:325;;39219:1;39213:3;:7;39206:1;39200:3;:7;39192:4;:16;;;;;;39191:30;39183:4;:39;39226:1;39182:45;39175:52;;;38676:559;;;:::o;28739:117::-;28802:7;28829:19;28837:3;28829:7;:19::i;29210:158::-;29284:7;29335:22;29339:3;29351:5;29335:3;:22::i;28242:158::-;28315:4;28339:53;28347:3;-1:-1:-1;;;;;28367:23:0;;28339:7;:53::i;9090:158::-;9148:7;9181:1;9176;:6;;9168:49;;;;;-1:-1:-1;;;9168:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9235:5:0;;;9090:158::o;37540:1128::-;-1:-1:-1;;;;;37633:25:0;;;;;;:15;:25;;;;;;;;37628:1033;;37699:16;;;37713:1;37699:16;;;37675:21;37699:16;;;;;37675:21;37699:16;;;;;;;;-1:-1:-1;;37740:15:0;;:22;;;-1:-1:-1;;;37740:22:0;;;;37675:40;;-1:-1:-1;;;;;;37740:15:0;;;;:20;;-1:-1:-1;37740:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37740:22:0;37730:7;;:4;;37735:1;;37730:7;;;;;;;;;:32;-1:-1:-1;;;;;37730:32:0;;;-1:-1:-1;;;;;37730:32:0;;;;;37795:4;37777;37782:1;37777:7;;;;;;;;-1:-1:-1;;;;;37777:23:0;;;:7;;;;;;;;;;:23;;;;37849:15;;:43;;;-1:-1:-1;;;37849:43:0;;;;;;;;;;;;;;;;;;;;;;37829:17;;37849:15;;;;;:28;;37878:7;;37887:4;;37849:43;;;;;;;;;;;;;;;37829:17;37849:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37849:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37849:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37893:1;37849:46;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37932:20:0;;37912:17;37932:20;;;:10;:20;;;;;;;37973:19;:29;;;;;;37849:46;;-1:-1:-1;37973:29:0;;37969:570;;;-1:-1:-1;;;;;38023:20:0;;;;;;:10;:20;;;;;;;;:33;;;;;;38075:10;:20;;;;;:24;37969:570;;;-1:-1:-1;;;;;38125:20:0;;;;;;:10;:20;;;;;;:33;-1:-1:-1;38121:418:0;;-1:-1:-1;;;;;38179:20:0;;;;;;:10;:20;;;;;;;;;:33;;;;;;;;;38287:41;;-1:-1:-1;;;38287:41:0;;;;;;;;;;;38254:75;;38302:4;;38287:31;;:41;;;;;;;;;;38302:4;38287:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38287:41:0;38254:10;:75::i;:::-;-1:-1:-1;;;;;38231:20:0;;;;;;:10;:20;;;;;:98;38121:418;;;-1:-1:-1;;;;;38405:20:0;;;;;;:10;:20;;;;;;;;;;38393:32;;38370:55;;38444:19;:29;;;;;:36;;-1:-1:-1;;38444:36:0;-1:-1:-1;38444:36:0;;;38499:10;:20;;;;;:24;38121:418;38555:15;38573:30;38593:9;38573:19;:30::i;:::-;38555:48;;38618:31;38631:8;38641:7;38618:12;:31::i;53643:116::-;53735:4;53719:22;;;;:7;:22;;;;;;:32;;53746:4;53719:26;:32::i;:::-;53710:4;53694:22;;;;:7;:22;;;;;:57;-1:-1:-1;53643:116:0:o;24140:109::-;24223:18;;24140:109::o;24603:120::-;24670:7;24697:3;:11;;24709:5;24697:18;;;;;;;;;;;;;;;;24690:25;;24603:120;;;;:::o;22419:1420::-;22485:4;22624:19;;;:12;;;:19;;;;;;22660:15;;22656:1176;;23108:18;;-1:-1:-1;;23059:14:0;;;;23108:22;23151:26;;;23147:405;;23198:17;23218:3;:11;;23230:9;23218:22;;;;;;;;;;;;;;;;23198:42;;23372:9;23343:3;:11;;23355:13;23343:26;;;;;;;;;;;;;;;;;;;:38;;;;23457:23;;;:12;;;:23;;;;;:36;;;23147:405;23633:17;;:3;;:17;;;;;;;;;;;;;;;;;;;;;;23728:3;:12;;:19;23741:5;23728:19;;;;;;;;;;;23721:26;;;23771:4;23764:11;;;;;;;22656:1176;23815:5;23808:12;;;;

Swarm Source

ipfs://70af31c9ff8dc73fe114a3aa446e6cc3c5bbdcea73b8f81b37c8fe3e0880f05b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.