Contract 0x81440c939f2c1e34fc7048e518a637205a632a74 1

Contract Overview

Balance:
0 AVAX

AVAX Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x0f1454d3bf627957982771f122cffee9af25527b3bbe4877cfa03519c07c1435Approve79521872021-12-08 3:17:4813 hrs 3 mins ago0xab9b530a4112cd11d9aee62c07da631cc56e26a5 IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00116507525
0x5b794a22ed7d1cecddce453435863bf63b12555748d9933e8058c306e230eb6dTransfer79498002021-12-08 1:57:0214 hrs 24 mins ago0xe3158832582ce46b5006c69fa6d60c724c174a8d IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00087072525
0x464f7e99322641ce3887d57bc342c89df79eda8fe2e6220619d016592dc83cf1Approve79269442021-12-07 13:13:091 day 3 hrs ago0xaad8ba18b55597ef443827396301714d556cfe3b IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00069562238826.050345969
0x8606e12d9c62fa7c525fa75ff37e8bb5a932d2fc9e1b2efb8110dee07d2330ccApprove79268982021-12-07 13:11:331 day 3 hrs ago0xaad8ba18b55597ef443827396301714d556cfe3b IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00136298672329.246759304
0xdbb84f41d06049b09daa7a4e15e2e1f6bd0867ff84fef876acb4bb9bf54a5dc4Approve78862902021-12-06 14:45:412 days 1 hr ago0xaddff81c9b0b9c3a918d215eb3bbdae80676528c IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00116507525
0xea97d8b3ff1003bb65ef1b62c7b2bbb13a24411574f65825b20cfab1a7e74a88Transfer78836642021-12-06 13:17:282 days 3 hrs ago0x12a8111bf6cb130da404bc68bd477495aa849c4f IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00087072525
0x06d0de7030729484a2ba1f7d9c571bd495f9288682fc6ed47efcb00ae8d6e703Approve78792782021-12-06 10:51:102 days 5 hrs ago0xdaa99a4826b3d0e9998cb55c8c648c53a5be677e IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.001621025 35
0x28c71a7afa58cc9f0f69bc811e2ed93c1ce990c87c456a477550776da3804796Approve78770842021-12-06 9:38:372 days 6 hrs ago0x102cc1d37a6b4f259a61d136c54575d40daa7e42 IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00118635499825.45662294
0x9a5f55600f8d8b107bee19db789bd7cca35622f0c7d3123f6ad53171c570a04cApprove78746342021-12-06 8:17:392 days 8 hrs ago0x5da68351bd082abda73e42ac981db51d9364fe69 IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.001209447926.1
0x53f5318e897cb61b0648ff2219179b6bd01d7b8698a690bc327b52d48f4b4673Approve78717352021-12-06 6:41:372 days 9 hrs ago0x5da68351bd082abda73e42ac981db51d9364fe69 IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.0013894530
0x1d4207f25874d43b3e0dbe818967c49ce0adcc1ddbdcccf3535a66cab5bd2b9fApprove78561182021-12-05 21:59:042 days 18 hrs ago0x36e69e981102f778d0951fa6a77cfa678b18399e IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00116507525
0x9696ca878ed0d639cbe7acaccd997d0ddd728551d42a002152e09ed4128ccfd3Approve78519282021-12-05 19:39:122 days 20 hrs ago0xfee0a5607c453f0ea32599ad0388eabd37a9c404 IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00072797525
0x2e29820761a98680e66bd92af505bbfdfb36cf1035685c3682ceb1058f350da1Approve78519222021-12-05 19:39:012 days 20 hrs ago0xfee0a5607c453f0ea32599ad0388eabd37a9c404 IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00072797525
0x74f00ed323b277675847d37e0d3a0b51cf61a4422b536922e556bcca3fd1b6f5Approve78484162021-12-05 17:41:252 days 22 hrs ago0xeb8add61e702a8f9f7e9164998b5fa88d4bab8bf IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00116507525
0x06dd67b611112f1181070b27a33ef9797999df23643f89d5ac8eae9db3ee78afApprove78439532021-12-05 15:13:543 days 1 hr ago0x476f94c4801026e0dc023f65cc962e69b6a988ab IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00116507525
0x6489267608ebe295066f77d7ede8f85bec59e059859ad96a326b5c9cd2a1665eTransfer78436682021-12-05 15:04:583 days 1 hr ago0xe3158832582ce46b5006c69fa6d60c724c174a8d IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00129822525
0xb1bf5947568b2ec8eb91f80c1653dacfc4da0ad38dec9148e6402b3ea94d139fApprove78060922021-12-04 18:12:213 days 22 hrs ago0x2e1fb39a5c19d412a43f0c9b762cf5e5a7a60cd4 IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00116507525
0x17a51774ee46a3f1befac19cc9d8df4ab4c4fef08eadaadd0644f99128d872baApprove78012172021-12-04 15:30:404 days 50 mins ago0x8443a695cd3dff8f558e1f40d486a2e13da0ed37 IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.001292271281 27.729358236
0xa9ea910399398904d3d92bffaa4a8cf116a5b21eb38b4cc67bff7301fb2a4726Transfer77979492021-12-04 13:41:444 days 2 hrs ago0xf481b5f35042115311f999a9875325ba91e6ebd1 IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00086982525
0x796e7adaa09a752b3c8d7a86deb86e8eec89ed20f5081da7f61fb80de7feec82Approve77947372021-12-04 11:55:014 days 4 hrs ago0x127d9f116d2b43f811f754307fd2fc27294a39cd IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00066757525
0xa103beee097940e4f51ca77c19741bc1e0761d02d20cbf90a08a031d82db7556Approve77947252021-12-04 11:54:394 days 4 hrs ago0x127d9f116d2b43f811f754307fd2fc27294a39cd IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00116507525
0x8d7a0b17723ec2bcd8c34efe489920f71d4b18c7a5b3f31aab2392576d6cc1d1Approve77934462021-12-04 11:12:044 days 5 hrs ago0x2aed812c9649b002f397e74eaef3b7328ca524bd IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.00115787525
0x3453f770f67088c89d912dbc1c2c3bd445bfe790e9dfa77353a63f4ce90543f8Approve77882252021-12-04 8:17:384 days 8 hrs ago0x86f5d1f84343ac31149f5081a96df8d67c45af8e IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.001165075 25
0x3ed2bdc1ffc33180e553a722a020e6645cabf61b16ddc517a4f7b5acecfb4c7dApprove77827112021-12-04 5:14:184 days 11 hrs ago0xb5515aa5e490e23f47b8676580e45056a54eeb69 IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.007137293323154.063360977
0xc26f8af59034868a911dfa2459e918be3370acd00f041aa6dcf97c9bad9c40cdApprove77425322021-12-03 7:03:405 days 9 hrs ago0x465c9412f0f67897063df9dbd22aa325fdc42e63 IN  0x81440c939f2c1e34fc7048e518a637205a632a740 AVAX0.001165075 25
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Cycle

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2021-11-14
*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/*
 * @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 Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amountIn of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves `amountIn` 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 amountIn) 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 `amountIn` 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 amountIn) external returns (bool);

    /**
     * @dev Moves `amountIn` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amountIn` 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 amountIn) 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;
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name_, string memory symbol_) public {
        _name = name_;
        _symbol = symbol_;
        _decimals = 18;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
     * called.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual returns (uint8) {
        return _decimals;
    }

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amountIn);

        _balances[sender] = _balances[sender].sub(amountIn, "ERC20: transfer amountIn exceeds balance");
        _balances[recipient] = _balances[recipient].add(amountIn);
        emit Transfer(sender, recipient, amountIn);
    }

    /** @dev Creates `amountIn` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amountIn) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amountIn);

        _totalSupply = _totalSupply.add(amountIn);
        _balances[account] = _balances[account].add(amountIn);
        emit Transfer(address(0), account, amountIn);
    }

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

        _beforeTokenTransfer(account, address(0), amountIn);

        _balances[account] = _balances[account].sub(amountIn, "ERC20: burn amountIn exceeds balance");
        _totalSupply = _totalSupply.sub(amountIn);
        emit Transfer(account, address(0), amountIn);
    }

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

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

    /**
     * @dev Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal virtual {
        _decimals = decimals_;
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amountIn` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amountIn` tokens will be minted for `to`.
     * - when `to` is zero, `amountIn` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amountIn) internal virtual { }
}

/**
 * @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 Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amountIn. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () internal {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

contract Cycle is ERC20, Ownable, ReentrancyGuard {
    address public Distributor;
    address public Timelock;

    uint256 public distributionPhase = 1;
    uint256 public scalingFactor = 100;

    uint256 public constant FACTOR_DIVISOR = 100;

    mapping (address => uint256) public authorizedAmount;

    event CycleRun(address indexed caller, uint256 amountIn, uint256 amountOut);
    event ScalingFactorUpdated(uint256 scalingFactor);
    event DistributorUpdated(address Distributor);
    event TimelockUpdated(address Timelock);

    constructor() public ERC20("Cycle Token", "CYCLE") {
        _mint(msg.sender, 30000e18);
        _mint(address(this), 270000e18);
    }

    modifier onlyTimelock() {
        require(msg.sender == Timelock, "Cycle: Caller is not the Timelock");
        _;
    }

    function setTimelock(address _Timelock) external onlyOwner {
        Timelock = _Timelock;
        emit TimelockUpdated(Timelock);
    }

    function setDistributor(address _Distributor) external onlyTimelock {
        Distributor = _Distributor;
        emit DistributorUpdated(Distributor);
    }

    function setScalingFactor(uint256 _scalingFactor) external onlyTimelock {
        scalingFactor = _scalingFactor;
        emit ScalingFactorUpdated(scalingFactor);
    }

    /**
     * @dev Safeguard from accidentally calling {cycle}
     * {cycle} consumes the input CYCLE tokens of the caller
     * this forces a preconfirmation to avoid unwanted loss
     */
    function authorize(uint256 amount) external nonReentrant {
        authorizedAmount[msg.sender] = amount;
    }

    /**
     * @dev Any contract/EOA can call to run {cycle}
     * {amountIn} scaled by the scaling factor produces {amountOut}
     */
    function cycle(uint256 amountIn) external nonReentrant {
        require(amountIn > 0, "Cycle: 0 amountIn sent");
        require(authorizedAmount[msg.sender] >= amountIn, "Cycle: Input amount has not been authorized");

        authorizedAmount[msg.sender] = authorizedAmount[msg.sender].sub(amountIn);

        uint256 amountOut;

        if (distributionPhase == 1) {
            uint256 balance = balanceOf(address(this));
            uint256 SF = (balance.div(1e18)).div(900).add(300);
            amountOut = amountIn.mul(SF).div(FACTOR_DIVISOR);

            _transfer(msg.sender, address(this), amountIn);
            balance = balanceOf(address(this));

            if (amountOut > balance) {
                _transfer(address(this), Distributor, balance);
                distributionPhase = 2;
            } else {
                _transfer(address(this), Distributor, amountOut);
            }
        } else if (distributionPhase == 2) {
            _burn(msg.sender, amountIn);
            amountOut = amountIn.mul(scalingFactor).div(FACTOR_DIVISOR);
            _mint(Distributor, amountOut);
        }

        emit CycleRun(msg.sender, amountIn, amountOut);
    }

}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"CycleRun","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Distributor","type":"address"}],"name":"DistributorUpdated","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":"uint256","name":"scalingFactor","type":"uint256"}],"name":"ScalingFactorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Timelock","type":"address"}],"name":"TimelockUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Distributor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FACTOR_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"cycle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributionPhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"scalingFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_Distributor","type":"address"}],"name":"setDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_scalingFactor","type":"uint256"}],"name":"setScalingFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_Timelock","type":"address"}],"name":"setTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountIn","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":"amountIn","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"}]

608060405260016009556064600a553480156200001b57600080fd5b506040518060400160405280600b81526020017f4379636c6520546f6b656e0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4359434c450000000000000000000000000000000000000000000000000000008152508160039080519060200190620000a092919062000443565b508060049080519060200190620000b992919062000443565b506012600560006101000a81548160ff021916908360ff16021790555050506000620000ea620001cf60201b60201c565b905080600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001600681905550620001ad3369065a4da25d3016c00000620001d760201b60201c565b620001c93069392cbab546b0ccc00000620001d760201b60201c565b620004e9565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200027b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6200028f60008383620003b560201b60201c565b620002ab81600254620003ba60201b620019991790919060201c565b60028190555062000309816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620003ba60201b620019991790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b60008082840190508381101562000439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200048657805160ff1916838001178555620004b7565b82800160010185558215620004b7579182015b82811115620004b657825182559160200191906001019062000499565b5b509050620004c69190620004ca565b5090565b5b80821115620004e5576000816000905550600101620004cb565b5090565b6126d080620004f96000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806395d89b41116100de578063b010085f11610097578063d2ff95ec11610071578063d2ff95ec14610757578063dd62ed3e14610775578063ed3437f8146107ed578063f2fde38b1461080b57610173565b8063b010085f146106c1578063bdacb303146106df578063be20f8be1461072357610173565b806395d89b41146104c25780639a8baedf146105455780639e04895214610573578063a457c2d7146105a1578063a5e2f89c14610605578063a9059cbb1461065d57610173565b806339509351116101305780633950935114610356578063672abd2d146103ba57806370a08231146103e8578063715018a61461044057806375619ab51461044a5780638da5cb5b1461048e57610173565b806306fdde0314610178578063095ea7b3146101fb57806318160ddd1461025f5780632039d8901461027d57806323b872dd146102b1578063313ce56714610335575b600080fd5b61018061084f565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101c05780820151818401526020810190506101a5565b50505050905090810190601f1680156101ed5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102476004803603604081101561021157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108f1565b60405180821515815260200191505060405180910390f35b61026761090f565b6040518082815260200191505060405180910390f35b610285610919565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61031d600480360360608110156102c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061093f565b60405180821515815260200191505060405180910390f35b61033d610a18565b604051808260ff16815260200191505060405180910390f35b6103a26004803603604081101561036c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a2f565b60405180821515815260200191505060405180910390f35b6103e6600480360360208110156103d057600080fd5b8101908080359060200190929190505050610ae2565b005b61042a600480360360208110156103fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bcb565b6040518082815260200191505060405180910390f35b610448610c13565b005b61048c6004803603602081101561046057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d83565b005b610496610edc565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104ca610f06565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561050a5780820151818401526020810190506104ef565b50505050905090810190601f1680156105375780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105716004803603602081101561055b57600080fd5b8101908080359060200190929190505050610fa8565b005b61059f6004803603602081101561058957600080fd5b8101908080359060200190929190505050611078565b005b6105ed600480360360408110156105b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611481565b60405180821515815260200191505060405180910390f35b6106476004803603602081101561061b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061154e565b6040518082815260200191505060405180910390f35b6106a96004803603604081101561067357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611566565b60405180821515815260200191505060405180910390f35b6106c9611584565b6040518082815260200191505060405180910390f35b610721600480360360208110156106f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061158a565b005b61072b6116ec565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61075f611712565b6040518082815260200191505060405180910390f35b6107d76004803603604081101561078b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611717565b6040518082815260200191505060405180910390f35b6107f561179e565b6040518082815260200191505060405180910390f35b61084d6004803603602081101561082157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117a4565b005b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108e75780601f106108bc576101008083540402835291602001916108e7565b820191906000526020600020905b8154815290600101906020018083116108ca57829003601f168201915b5050505050905090565b60006109056108fe611a21565b8484611a29565b6001905092915050565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061094c848484611c20565b610a0d84610958611a21565b610a08856040518060600160405280602a8152602001612509602a9139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109be611a21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ee19092919063ffffffff16565b611a29565b600190509392505050565b6000600560009054906101000a900460ff16905090565b6000610ad8610a3c611a21565b84610ad38560016000610a4d611a21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461199990919063ffffffff16565b611a29565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b88576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806125a66021913960400191505060405180910390fd5b80600a819055507f28c7a0b0199f34b0c32dc21845d1af15fa23a606aedcca2cdf3630bb0bfdc2be600a546040518082815260200191505060405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c1b611a21565b73ffffffffffffffffffffffffffffffffffffffff16610c39610edc565b73ffffffffffffffffffffffffffffffffffffffff1614610cc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806125a66021913960400191505060405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fc0ebb188f905d128bcd7e4282dd1f9cf24cd331b69071002e488349aca6a867b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f9e5780601f10610f7357610100808354040283529160200191610f9e565b820191906000526020600020905b815481529060010190602001808311610f8157829003601f168201915b5050505050905090565b60026006541415611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260068190555080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160068190555050565b600260065414156110f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026006819055506000811161116f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4379636c653a203020616d6f756e74496e2073656e740000000000000000000081525060200191505060405180910390fd5b80600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611207576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061257b602b913960400191505060405180910390fd5b61125981600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f9b90919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600160095414156113b25760006112b430610bcb565b905060006112fb61012c6112ed6103846112df670de0b6b3a76400008761201e90919063ffffffff16565b61201e90919063ffffffff16565b61199990919063ffffffff16565b9050611323606461131583876120a790919063ffffffff16565b61201e90919063ffffffff16565b9250611330333086611c20565b61133930610bcb565b91508183111561137d5761137030600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c20565b60026009819055506113ab565b6113aa30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611c20565b5b505061141f565b6002600954141561141e576113c7338361212d565b6113ef60646113e1600a54856120a790919063ffffffff16565b61201e90919063ffffffff16565b905061141d600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826122f1565b5b5b3373ffffffffffffffffffffffffffffffffffffffff167fff31fc5525639546464d0e7de7b4991db8078e8654e7ea5ec380cb31968eb8de8383604051808381526020018281526020019250505060405180910390a250600160068190555050565b600061154461148e611a21565b8461153f8560405180606001604052806025815260200161267660259139600160006114b8611a21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ee19092919063ffffffff16565b611a29565b6001905092915050565b600b6020528060005260406000206000915090505481565b600061157a611573611a21565b8484611c20565b6001905092915050565b60095481565b611592611a21565b73ffffffffffffffffffffffffffffffffffffffff166115b0610edc565b73ffffffffffffffffffffffffffffffffffffffff1614611639576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fc046b9e8f0cd9b70a3b838962e9c229277fbb7abee68ea0fad4acf2898ed2ca9600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6117ac611a21565b73ffffffffffffffffffffffffffffffffffffffff166117ca610edc565b73ffffffffffffffffffffffffffffffffffffffff1614611853576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806125336026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080828401905083811015611a17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611aaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061262e6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806125596022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ca6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806126096025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806124e66023913960400191505060405180910390fd5b611d378383836124b8565b611da2816040518060600160405280602881526020016124be602891396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ee19092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e35816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461199990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290611f8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f53578082015181840152602081019050611f38565b50505050905090810190601f168015611f805780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b600082821115612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b6000808211612095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b81838161209e57fe5b04905092915050565b6000808314156120ba5760009050612127565b60008284029050828482816120cb57fe5b0414612122576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806125c76021913960400191505060405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806125e86021913960400191505060405180910390fd5b6121bf826000836124b8565b61222a81604051806060016040528060248152602001612652602491396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ee19092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061228181600254611f9b90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6123a0600083836124b8565b6123b58160025461199990919063ffffffff16565b60028190555061240c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461199990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b50505056fe45524332303a207472616e7366657220616d6f756e74496e20657863656564732062616c616e636545524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e74496e206578636565647320616c6c6f77616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734379636c653a20496e70757420616d6f756e7420686173206e6f74206265656e20617574686f72697a65644379636c653a2043616c6c6572206973206e6f74207468652054696d656c6f636b536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a206275726e20616d6f756e74496e20657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202ac45c636508c00ebdb9ff92bfb8a0f8f035c463f71f55c8dbf53f02985fd95164736f6c634300060c0033

Deployed ByteCode Sourcemap

26919:3007:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13134:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15286:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14233:108;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26976:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15945:329;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14077:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16683:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28072:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14404:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23757:148;;;:::i;:::-;;27904:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23106:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13344:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28450:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28712:1209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17404:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27180:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14746:179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27041:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27757:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27009:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27127:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14988:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27084:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24060:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13134:91;13179:13;13212:5;13205:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13134:91;:::o;15286:173::-;15371:4;15388:41;15397:12;:10;:12::i;:::-;15411:7;15420:8;15388;:41::i;:::-;15447:4;15440:11;;15286:173;;;;:::o;14233:108::-;14294:7;14321:12;;14314:19;;14233:108;:::o;26976:26::-;;;;;;;;;;;;;:::o;15945:329::-;16053:4;16070:38;16080:6;16088:9;16099:8;16070:9;:38::i;:::-;16119:125;16128:6;16136:12;:10;:12::i;:::-;16150:93;16188:8;16150:93;;;;;;;;;;;;;;;;;:11;:19;16162:6;16150:19;;;;;;;;;;;;;;;:33;16170:12;:10;:12::i;:::-;16150:33;;;;;;;;;;;;;;;;:37;;:93;;;;;:::i;:::-;16119:8;:125::i;:::-;16262:4;16255:11;;15945:329;;;;;:::o;14077:91::-;14126:5;14151:9;;;;;;;;;;;14144:16;;14077:91;:::o;16683:218::-;16771:4;16788:83;16797:12;:10;:12::i;:::-;16811:7;16820:50;16859:10;16820:11;:25;16832:12;:10;:12::i;:::-;16820:25;;;;;;;;;;;;;;;:34;16846:7;16820:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;16788:8;:83::i;:::-;16889:4;16882:11;;16683:218;;;;:::o;28072:172::-;27683:8;;;;;;;;;;;27669:22;;:10;:22;;;27661:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28171:14:::1;28155:13;:30;;;;28201:35;28222:13;;28201:35;;;;;;;;;;;;;;;;;;28072:172:::0;:::o;14404:127::-;14478:7;14505:9;:18;14515:7;14505:18;;;;;;;;;;;;;;;;14498:25;;14404:127;;;:::o;23757:148::-;23337:12;:10;:12::i;:::-;23326:23;;:7;:5;:7::i;:::-;:23;;;23318:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23864:1:::1;23827:40;;23848:6;;;;;;;;;;;23827:40;;;;;;;;;;;;23895:1;23878:6;;:19;;;;;;;;;;;;;;;;;;23757:148::o:0;27904:160::-;27683:8;;;;;;;;;;;27669:22;;:10;:22;;;27661:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27997:12:::1;27983:11;;:26;;;;;;;;;;;;;;;;;;28025:31;28044:11;;;;;;;;;;;28025:31;;;;;;;;;;;;;;;;;;;;27904:160:::0;:::o;23106:87::-;23152:7;23179:6;;;;;;;;;;;23172:13;;23106:87;:::o;13344:95::-;13391:13;13424:7;13417:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13344:95;:::o;28450:113::-;25964:1;26570:7;;:19;;26562:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25964:1;26703:7;:18;;;;28549:6:::1;28518:16;:28;28535:10;28518:28;;;;;;;;;;;;;;;:37;;;;25920:1:::0;26882:7;:22;;;;28450:113;:::o;28712:1209::-;25964:1;26570:7;;:19;;26562:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25964:1;26703:7;:18;;;;28797:1:::1;28786:8;:12;28778:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28876:8;28844:16;:28;28861:10;28844:28;;;;;;;;;;;;;;;;:40;;28836:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28976:42;29009:8;28976:16;:28;28993:10;28976:28;;;;;;;;;;;;;;;;:32;;:42;;;;:::i;:::-;28945:16;:28;28962:10;28945:28;;;;;;;;;;;;;;;:73;;;;29031:17;29086:1;29065:17;;:22;29061:794;;;29104:15;29122:24;29140:4;29122:9;:24::i;:::-;29104:42;;29161:10;29174:37;29207:3;29174:28;29198:3;29175:17;29187:4;29175:7;:11;;:17;;;;:::i;:::-;29174:23;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;29161:50;;29238:36;27168:3;29238:16;29251:2;29238:8;:12;;:16;;;;:::i;:::-;:20;;:36;;;;:::i;:::-;29226:48;;29291:46;29301:10;29321:4;29328:8;29291:9;:46::i;:::-;29362:24;29380:4;29362:9;:24::i;:::-;29352:34;;29419:7;29407:9;:19;29403:235;;;29447:46;29465:4;29472:11;;;;;;;;;;;29485:7;29447:9;:46::i;:::-;29532:1;29512:17;:21;;;;29403:235;;;29574:48;29592:4;29599:11;;;;;;;;;;;29612:9;29574;:48::i;:::-;29403:235;29061:794;;;;;29680:1;29659:17;;:22;29655:200;;;29698:27;29704:10;29716:8;29698:5;:27::i;:::-;29752:47;27168:3;29752:27;29765:13;;29752:8;:12;;:27;;;;:::i;:::-;:31;;:47;;;;:::i;:::-;29740:59;;29814:29;29820:11;;;;;;;;;;;29833:9;29814:5;:29::i;:::-;29655:200;29061:794;29881:10;29872:41;;;29893:8;29903:9;29872:41;;;;;;;;;;;;;;;;;;;;;;;;26734:1;25920::::0;26882:7;:22;;;;28712:1209;:::o;17404:269::-;17497:4;17514:129;17523:12;:10;:12::i;:::-;17537:7;17546:96;17585:15;17546:96;;;;;;;;;;;;;;;;;:11;:25;17558:12;:10;:12::i;:::-;17546:25;;;;;;;;;;;;;;;:34;17572:7;17546:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;17514:8;:129::i;:::-;17661:4;17654:11;;17404:269;;;;:::o;27180:52::-;;;;;;;;;;;;;;;;;:::o;14746:179::-;14834:4;14851:44;14861:12;:10;:12::i;:::-;14875:9;14886:8;14851:9;:44::i;:::-;14913:4;14906:11;;14746:179;;;;:::o;27041:36::-;;;;:::o;27757:139::-;23337:12;:10;:12::i;:::-;23326:23;;:7;:5;:7::i;:::-;:23;;;23318:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27838:9:::1;27827:8;;:20;;;;;;;;;;;;;;;;;;27863:25;27879:8;;;;;;;;;;;27863:25;;;;;;;;;;;;;;;;;;;;27757:139:::0;:::o;27009:23::-;;;;;;;;;;;;;:::o;27127:44::-;27168:3;27127:44;:::o;14988:151::-;15077:7;15104:11;:18;15116:5;15104:18;;;;;;;;;;;;;;;:27;15123:7;15104:27;;;;;;;;;;;;;;;;15097:34;;14988:151;;;;:::o;27084:34::-;;;;:::o;24060:244::-;23337:12;:10;:12::i;:::-;23326:23;;:7;:5;:7::i;:::-;:23;;;23318:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24169:1:::1;24149:22;;:8;:22;;;;24141:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24259:8;24230:38;;24251:6;;;;;;;;;;;24230:38;;;;;;;;;;;;24288:8;24279:6;;:17;;;;;;;;;;;;;;;;;;24060:244:::0;:::o;6402:179::-;6460:7;6480:9;6496:1;6492;:5;6480:17;;6521:1;6516;:6;;6508:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6572:1;6565:8;;;6402:179;;;;:::o;613:106::-;666:15;701:10;694:17;;613:106;:::o;20597:352::-;20718:1;20701:19;;:5;:19;;;;20693:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20799:1;20780:21;;:7;:21;;;;20772:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20883:8;20853:11;:18;20865:5;20853:18;;;;;;;;;;;;;;;:27;20872:7;20853:27;;;;;;;;;;;;;;;:38;;;;20923:7;20907:34;;20916:5;20907:34;;;20932:8;20907:34;;;;;;;;;;;;;;;;;;20597:352;;;:::o;18167:551::-;18293:1;18275:20;;:6;:20;;;;18267:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18377:1;18356:23;;:9;:23;;;;18348:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18432:49;18453:6;18461:9;18472:8;18432:20;:49::i;:::-;18514:75;18536:8;18514:75;;;;;;;;;;;;;;;;;:9;:17;18524:6;18514:17;;;;;;;;;;;;;;;;:21;;:75;;;;;:::i;:::-;18494:9;:17;18504:6;18494:17;;;;;;;;;;;;;;;:95;;;;18623:34;18648:8;18623:9;:20;18633:9;18623:20;;;;;;;;;;;;;;;;:24;;:34;;;;:::i;:::-;18600:9;:20;18610:9;18600:20;;;;;;;;;;;;;;;:57;;;;18690:9;18673:37;;18682:6;18673:37;;;18701:8;18673:37;;;;;;;;;;;;;;;;;;18167:551;;;:::o;9229:166::-;9315:7;9348:1;9343;:6;;9351:12;9335:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9386:1;9382;:5;9375:12;;9229:166;;;;;:::o;6864:158::-;6922:7;6955:1;6950;:6;;6942:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7013:1;7009;:5;7002:12;;6864:158;;;;:::o;7979:153::-;8037:7;8069:1;8065;:5;8057:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8123:1;8119;:5;;;;;;8112:12;;7979:153;;;;:::o;7281:220::-;7339:7;7368:1;7363;:6;7359:20;;;7378:1;7371:8;;;;7359:20;7390:9;7406:1;7402;:5;7390:17;;7435:1;7430;7426;:5;;;;;;:10;7418:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7492:1;7485:8;;;7281:220;;;;;:::o;19727:430::-;19832:1;19813:21;;:7;:21;;;;19805:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19885:51;19906:7;19923:1;19927:8;19885:20;:51::i;:::-;19970:72;19993:8;19970:72;;;;;;;;;;;;;;;;;:9;:18;19980:7;19970:18;;;;;;;;;;;;;;;;:22;;:72;;;;;:::i;:::-;19949:9;:18;19959:7;19949:18;;;;;;;;;;;;;;;:93;;;;20068:26;20085:8;20068:12;;:16;;:26;;;;:::i;:::-;20053:12;:41;;;;20136:1;20110:39;;20119:7;20110:39;;;20140:8;20110:39;;;;;;;;;;;;;;;;;;19727:430;;:::o;19002:388::-;19107:1;19088:21;;:7;:21;;;;19080:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19158:51;19187:1;19191:7;19200:8;19158:20;:51::i;:::-;19237:26;19254:8;19237:12;;:16;;:26;;;;:::i;:::-;19222:12;:41;;;;19295:32;19318:8;19295:9;:18;19305:7;19295:18;;;;;;;;;;;;;;;;:22;;:32;;;;:::i;:::-;19274:9;:18;19284:7;19274:18;;;;;;;;;;;;;;;:53;;;;19364:7;19343:39;;19360:1;19343:39;;;19373:8;19343:39;;;;;;;;;;;;;;;;;;19002:388;;:::o;21988:94::-;;;;:::o

Swarm Source

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