S Price: $0.812288 (-5.27%)
    /

    Token

    Shadow Liquid Staking Token (x33)

    Overview

    Max Total Supply

    374,678.468054837057681606 x33

    Holders

    2,045 ( 13.743%)
    Created with Highcharts 10.2.1

    Market

    Price

    $0.00 @ 0.000000 S

    Onchain Market Cap

    $0.00

    Circulating Supply Market Cap

    -

    Other Info

    Token Contract (WITH 18 Decimals)

    Balance
    0.258306971294646487 x33

    Value
    $0.00
    0xbEB637262a1A0C3C89510bFCc72dDea181f29fb3
    Loading...
    Loading
    Loading...
    Loading
    Loading...
    Loading

    OVERVIEW

    A Sonic-native concentrated liquidity exchange.The ultimate trading hub on Sonic.

    Contract Source Code Verified (Exact Match)

    Contract Name:
    x33

    Compiler Version
    v0.8.28+commit.7893614a

    Optimization Enabled:
    Yes with 1633 runs

    Other Settings:
    cancun EvmVersion
    File 1 of 23 : x33.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.26;
    import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
    import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
    import {ERC4626} from "@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol";
    import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
    import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
    import {IVoter} from "../interfaces/IVoter.sol";
    import {IXShadow} from "../interfaces/IXShadow.sol";
    import {IVoteModule} from "../interfaces/IVoteModule.sol";
    import {IX33} from "../interfaces/IX33.sol";
    /// @title Canonical xShadow Wrapper for Shadow Exchange on Sonic
    /// @dev Autocompounding shares token voting optimally each epoch
    contract x33 is ERC4626, IX33, ReentrancyGuard {
    using SafeERC20 for ERC20;
    /// @inheritdoc IX33
    address public operator;
    /// @inheritdoc IX33
    address public immutable accessHub;
    IERC20 public immutable shadow;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 23 : ERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/ERC20.sol)
    pragma solidity ^0.8.20;
    import {IERC20} from "./IERC20.sol";
    import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
    import {Context} from "../../utils/Context.sol";
    import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol";
    /**
    * @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}.
    *
    * TIP: For a detailed writeup see our guide
    * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
    * to implement supply mechanisms].
    *
    * The default value of {decimals} is 18. To change this, you should override
    * this function so it returns a different value.
    *
    * We have followed general OpenZeppelin Contracts guidelines: functions revert
    * instead returning `false` on failure. This behavior is nonetheless
    * conventional and does not conflict with the expectations of ERC-20
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 23 : IERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Interface of the ERC-20 standard as defined in the ERC.
    */
    interface IERC20 {
    /**
    * @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 Returns the value of tokens in existence.
    */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 23 : ERC4626.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/ERC4626.sol)
    pragma solidity ^0.8.20;
    import {IERC20, IERC20Metadata, ERC20} from "../ERC20.sol";
    import {SafeERC20} from "../utils/SafeERC20.sol";
    import {IERC4626} from "../../../interfaces/IERC4626.sol";
    import {Math} from "../../../utils/math/Math.sol";
    /**
    * @dev Implementation of the ERC-4626 "Tokenized Vault Standard" as defined in
    * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].
    *
    * This extension allows the minting and burning of "shares" (represented using the ERC-20 inheritance) in exchange for
    * underlying "assets" through standardized {deposit}, {mint}, {redeem} and {burn} workflows. This contract extends
    * the ERC-20 standard. Any additional extensions included along it would affect the "shares" token represented by this
    * contract and not the "assets" token which is an independent contract.
    *
    * [CAUTION]
    * ====
    * In empty (or nearly empty) ERC-4626 vaults, deposits are at high risk of being stolen through frontrunning
    * with a "donation" to the vault that inflates the price of a share. This is variously known as a donation or inflation
    * attack and is essentially a problem of slippage. Vault deployers can protect against this attack by making an initial
    * deposit of a non-trivial amount of the asset, such that price manipulation becomes infeasible. Withdrawals may
    * similarly be affected by slippage. Users can protect against this attack as well as unexpected slippage in general by
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 23 : SafeERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)
    pragma solidity ^0.8.20;
    import {IERC20} from "../IERC20.sol";
    import {IERC1363} from "../../../interfaces/IERC1363.sol";
    import {Address} from "../../../utils/Address.sol";
    /**
    * @title SafeERC20
    * @dev Wrappers around ERC-20 operations that throw on failure (when the token
    * contract returns false). Tokens that return no value (and instead revert or
    * throw on failure) are also supported, non-reverting calls are assumed to be
    * successful.
    * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
    * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
    */
    library SafeERC20 {
    /**
    * @dev An operation with an ERC-20 token failed.
    */
    error SafeERC20FailedOperation(address token);
    /**
    * @dev Indicates a failed `decreaseAllowance` request.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 23 : ReentrancyGuard.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)
    pragma solidity ^0.8.20;
    /**
    * @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 EIP-1153 (transient storage) is available on the chain you're deploying at,
    * consider using {ReentrancyGuardTransient} instead.
    *
    * 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
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 23 : IVoter.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: BUSL-1.1
    pragma solidity ^0.8.26;
    pragma abicoder v2;
    interface IVoter {
    error ACTIVE_GAUGE(address gauge);
    error GAUGE_INACTIVE(address gauge);
    error ALREADY_WHITELISTED(address token);
    error NOT_AUTHORIZED(address caller);
    error NOT_WHITELISTED();
    error NOT_POOL();
    error NOT_INIT();
    error LENGTH_MISMATCH();
    error NO_GAUGE();
    error ALREADY_DISTRIBUTED(address gauge, uint256 period);
    error ZERO_VOTE(address pool);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 23 : IXShadow.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity ^0.8.24;
    import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
    import {IVoter} from "./IVoter.sol";
    interface IXShadow is IERC20 {
    struct VestPosition {
    /// @dev amount of xShadow
    uint256 amount;
    /// @dev start unix timestamp
    uint256 start;
    /// @dev start + MAX_VEST (end timestamp)
    uint256 maxEnd;
    /// @dev vest identifier (starting from 0)
    uint256 vestID;
    }
    error NOT_WHITELISTED(address);
    error NOT_MINTER();
    error ZERO();
    error NO_VEST();
    error ALREADY_EXEMPT();
    error NOT_EXEMPT();
    error CANT_RESCUE();
    error NO_CHANGE();
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 23 : IVoteModule.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity ^0.8.26;
    interface IVoteModule {
    /** Custom Errors */
    /// @dev == 0
    error ZERO_AMOUNT();
    /// @dev if address is not xShadow
    error NOT_XSHADOW();
    /// @dev error for when the cooldown period has not been passed yet
    error COOLDOWN_ACTIVE();
    /// @dev error for when you try to deposit or withdraw for someone who isn't the msg.sender
    error NOT_VOTEMODULE();
    /// @dev error for when the caller is not authorized
    error UNAUTHORIZED();
    /// @dev error for accessHub gated functions
    error NOT_ACCESSHUB();
    /// @dev error for when there is no change of state
    error NO_CHANGE();
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 23 : IX33.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity ^0.8.24;
    import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
    interface IX33 is IERC20 {
    /// @dev parameters passed to the aggregator swap
    struct AggregatorParams {
    address aggregator; // address of the whitelisted aggregator
    address tokenIn; // token to swap from
    uint256 amountIn; // amount of tokenIn to swap
    uint256 minAmountOut; // minimum amount of tokenOut to receive
    bytes callData; // encoded swap calldata
    }
    /**
    * Error strings
    */
    error ZERO();
    error NOT_ENOUGH();
    error NOT_CONFORMED_TO_SCALE(uint256);
    error NOT_ACCESSHUB(address);
    error LOCKED();
    error REBASE_IN_PROGRESS();
    error AGGREGATOR_REVERTED(bytes);
    error AMOUNT_OUT_TOO_LOW(uint256);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 23 : IERC20Metadata.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)
    pragma solidity ^0.8.20;
    import {IERC20} from "../IERC20.sol";
    /**
    * @dev Interface for the optional metadata functions from the ERC-20 standard.
    */
    interface IERC20Metadata is IERC20 {
    /**
    * @dev Returns the name of the token.
    */
    function name() external view returns (string memory);
    /**
    * @dev Returns the symbol of the token.
    */
    function symbol() external view returns (string memory);
    /**
    * @dev Returns the decimals places of the token.
    */
    function decimals() external view returns (uint8);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 23 : Context.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
    pragma solidity ^0.8.20;
    /**
    * @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 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) {
    return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
    return msg.data;
    }
    function _contextSuffixLength() internal view virtual returns (uint256) {
    return 0;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 23 : draft-IERC6093.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Standard ERC-20 Errors
    * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
    */
    interface IERC20Errors {
    /**
    * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
    * @param sender Address whose tokens are being transferred.
    * @param balance Current balance for the interacting account.
    * @param needed Minimum amount required to perform a transfer.
    */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
    /**
    * @dev Indicates a failure with the token `sender`. Used in transfers.
    * @param sender Address whose tokens are being transferred.
    */
    error ERC20InvalidSender(address sender);
    /**
    * @dev Indicates a failure with the token `receiver`. Used in transfers.
    * @param receiver Address to which tokens are being transferred.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 23 : IERC4626.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC4626.sol)
    pragma solidity ^0.8.20;
    import {IERC20} from "../token/ERC20/IERC20.sol";
    import {IERC20Metadata} from "../token/ERC20/extensions/IERC20Metadata.sol";
    /**
    * @dev Interface of the ERC-4626 "Tokenized Vault Standard", as defined in
    * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].
    */
    interface IERC4626 is IERC20, IERC20Metadata {
    event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);
    event Withdraw(
    address indexed sender,
    address indexed receiver,
    address indexed owner,
    uint256 assets,
    uint256 shares
    );
    /**
    * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.
    *
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 23 : Math.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/math/Math.sol)
    pragma solidity ^0.8.20;
    import {Panic} from "../Panic.sol";
    import {SafeCast} from "./SafeCast.sol";
    /**
    * @dev Standard math utilities missing in the Solidity language.
    */
    library Math {
    enum Rounding {
    Floor, // Toward negative infinity
    Ceil, // Toward positive infinity
    Trunc, // Toward zero
    Expand // Away from zero
    }
    /**
    * @dev Returns the addition of two unsigned integers, with an success flag (no overflow).
    */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
    unchecked {
    uint256 c = a + b;
    if (c < a) return (false, 0);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 23 : IERC1363.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)
    pragma solidity ^0.8.20;
    import {IERC20} from "./IERC20.sol";
    import {IERC165} from "./IERC165.sol";
    /**
    * @title IERC1363
    * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].
    *
    * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract
    * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.
    */
    interface IERC1363 is IERC20, IERC165 {
    /*
    * Note: the ERC-165 identifier for this interface is 0xb0202a11.
    * 0xb0202a11 ===
    * bytes4(keccak256('transferAndCall(address,uint256)')) ^
    * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^
    * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^
    * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^
    * bytes4(keccak256('approveAndCall(address,uint256)')) ^
    * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))
    */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 23 : Address.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)
    pragma solidity ^0.8.20;
    import {Errors} from "./Errors.sol";
    /**
    * @dev Collection of functions related to the address type
    */
    library Address {
    /**
    * @dev There's no code at `target` (it is not a contract).
    */
    error AddressEmptyCode(address target);
    /**
    * @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://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 23 : Panic.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/Panic.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Helper library for emitting standardized panic codes.
    *
    * ```solidity
    * contract Example {
    * using Panic for uint256;
    *
    * // Use any of the declared internal constants
    * function foo() { Panic.GENERIC.panic(); }
    *
    * // Alternatively
    * function foo() { Panic.panic(Panic.GENERIC); }
    * }
    * ```
    *
    * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].
    *
    * _Available since v5.1._
    */
    // slither-disable-next-line unused-state
    library Panic {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 23 : SafeCast.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SafeCast.sol)
    // This file was procedurally generated from scripts/generate/templates/SafeCast.js.
    pragma solidity ^0.8.20;
    /**
    * @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow
    * checks.
    *
    * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
    * easily result in undesired exploitation or bugs, since developers usually
    * assume that overflows raise errors. `SafeCast` restores this intuition by
    * reverting the transaction when such 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 SafeCast {
    /**
    * @dev Value doesn't fit in an uint of `bits` size.
    */
    error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);
    /**
    * @dev An int value doesn't fit in an uint of `bits` size.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 20 of 23 : IERC20.sol
    1
    2
    3
    4
    5
    6
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)
    pragma solidity ^0.8.20;
    import {IERC20} from "../token/ERC20/IERC20.sol";
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 21 of 23 : IERC165.sol
    1
    2
    3
    4
    5
    6
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)
    pragma solidity ^0.8.20;
    import {IERC165} from "../utils/introspection/IERC165.sol";
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 22 of 23 : Errors.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Collection of common custom errors used in multiple contracts
    *
    * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.
    * It is recommended to avoid relying on the error API for critical functionality.
    *
    * _Available since v5.1._
    */
    library Errors {
    /**
    * @dev The ETH balance of the account is not enough to perform the operation.
    */
    error InsufficientBalance(uint256 balance, uint256 needed);
    /**
    * @dev A call to an address target failed. The target may have reverted.
    */
    error FailedCall();
    /**
    * @dev The deployment failed.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 23 of 23 : IERC165.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Interface of the ERC-165 standard, as defined in the
    * https://eips.ethereum.org/EIPS/eip-165[ERC].
    *
    * Implementers can declare support of contract interfaces, which can then be
    * queried by others ({ERC165Checker}).
    *
    * For an implementation, see {ERC165}.
    */
    interface IERC165 {
    /**
    * @dev Returns true if this contract implements the interface defined by
    * `interfaceId`. See the corresponding
    * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
    * to learn more about how these ids are created.
    *
    * This function call must use less than 30 000 gas.
    */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Settings
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    {
    "remappings": [
    "@openzeppelin-contracts-5.1.0/=dependencies/@openzeppelin-contracts-5.1.0/",
    "@openzeppelin-contracts-upgradeable-5.1.0/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/",
    "@forge-std-1.9.4/=dependencies/forge-std-1.9.4/",
    "@layerzerolabs/=node_modules/@layerzerolabs/",
    "@layerzerolabs/lz-evm-protocol-v2/=node_modules/@layerzerolabs/lz-evm-protocol-v2/",
    "@openzeppelin-contracts-upgradeable/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/",
    "@openzeppelin-contracts/contracts/=dependencies/@openzeppelin-contracts-5.1.0/",
    "@openzeppelin/contracts/=dependencies/@openzeppelin-contracts-5.1.0/",
    "erc4626-tests/=dependencies/erc4626-property-tests-1.0/",
    "forge-std/=dependencies/forge-std-1.9.4/src/",
    "permit2/=lib/permit2/",
    "@openzeppelin-3.4.2/=node_modules/@openzeppelin-3.4.2/",
    "@openzeppelin-contracts-5.1.0/=dependencies/@openzeppelin-contracts-5.1.0/",
    "@openzeppelin-contracts-upgradeable-5.1.0/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/",
    "@uniswap/=node_modules/@uniswap/",
    "base64-sol/=node_modules/base64-sol/",
    "ds-test/=node_modules/ds-test/",
    "erc4626-property-tests-1.0/=dependencies/erc4626-property-tests-1.0/",
    "eth-gas-reporter/=node_modules/eth-gas-reporter/",
    "forge-std-1.9.4/=dependencies/forge-std-1.9.4/src/",
    "hardhat/=node_modules/hardhat/",
    "solidity-bytes-utils/=node_modules/solidity-bytes-utils/",
    "solmate/=node_modules/solmate/"
    ],
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract Security Audit

    Contract ABI

    [{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_accessHub","type":"address"},{"internalType":"address","name":"_xShadow","type":"address"},{"internalType":"address","name":"_voter","type":"address"},{"internalType":"address","name":"_voteModule","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"AGGREGATOR_NOT_WHITELISTED","type":"error"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"AGGREGATOR_REVERTED","type":"error"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"AMOUNT_OUT_TOO_LOW","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"ERC4626ExceededMaxDeposit","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"ERC4626ExceededMaxMint","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"ERC4626ExceededMaxRedeem","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"ERC4626ExceededMaxWithdraw","type":"error"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"FORBIDDEN_TOKEN","type":"error"},{"inputs":[],"name":"LOCKED","type":"error"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"NOT_ACCESSHUB","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"NOT_AUTHORIZED","type":"error"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"NOT_CONFORMED_TO_SCALE","type":"error"},{"inputs":[],"name":"NOT_ENOUGH","type":"error"},{"inputs":[],"name":"REBASE_IN_PROGRESS","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"ZERO","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"aggregator","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"AggregatorWhitelistUpdated","type":"event"},{"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":false,"internalType":"address[]","name":"feeDistributors","type":"address[]"},{"indexed":false,"internalType":"address[][]","name":"tokens","type":"address[][]"}],"name":"ClaimedIncentives","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldRatio","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRatio","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Compounded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ratioAtDeposit","type":"uint256"}],"name":"Entered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_outAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ratioAtWithdrawal","type":"uint256"}],"name":"Exited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_oldOperator","type":"address"},{"indexed":false,"internalType":"address","name":"_newOperator","type":"address"}],"name":"NewOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldRatio","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRatio","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Rebased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"SwappedBribe","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":"_ts","type":"uint256"}],"name":"Unlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"UpdatedIndex","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"accessHub","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address[]","name":"_feeDistributors","type":"address[]"},{"internalType":"address[][]","name":"_tokens","type":"address[][]"}],"name":"claimIncentives","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"compound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPeriod","outputs":[{"internalType":"uint256","name":"period","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isCooldownActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"periodUnlockStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ratio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shadow","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pools","type":"address[]"},{"internalType":"uint256[]","name":"_weights","type":"uint256[]"}],"name":"submitVotes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"aggregator","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct IX33.AggregatorParams","name":"_params","type":"tuple"}],"name":"swapIncentiveViaAggregator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOperator","type":"address"}],"name":"transferOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"voteModule","outputs":[{"internalType":"contract IVoteModule","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voter","outputs":[{"internalType":"contract IVoter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_aggregator","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"whitelistAggregator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAggregators","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"xShadow","outputs":[{"internalType":"contract IXShadow","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

    61016080604052346103fe5760a081612ec580380380916100208285610611565b8339810103126103fe5761003381610634565b9061004060208201610634565b61004c60408301610634565b90610065608061005e60608601610634565b9401610634565b9160018060a01b031690604094855161007e8782610611565b601b81527f536861646f77204c6971756964205374616b696e6720546f6b656e000000000060208201528651906100b58883610611565b600382526278333360e81b60208301528051906001600160401b0382116105145760035490600182811c92168015610607575b60208310146104f65781601f849311610599575b50602090601f8311600114610533575f92610528575b50508160011b915f199060031b1c1916176003555b8051906001600160401b03821161051457600454600181811c9116801561050a575b60208210146104f657601f8111610493575b50602090601f8311600114610427579180600497969492602096945f9261041c575b50508160011b915f199060031b1c19161786555b61019a83610660565b9015610414575b60a05260808390526001600555600680546001600160a01b0319166001600160a01b039290921691909117905560c0526101008190528551631e49236560e21b815293849182905afa91821561040a575f926103c2575b5060e08290526001600160a01b03908116610120529182166101405262093a80420460075561010051835163095ea7b360e01b815290831660048201525f19602482015291602091839160449183915f91165af1801561039b576103a5575b506101005161012051825163095ea7b360e01b81526001600160a01b0391821660048201525f19602482015291602091839160449183915f91165af1801561039b5761036c575b50516127b290816107138239608051816113e1015260a05181611419015260c0518181816106a801528181610f7d015281816112c301526114a9015260e05181818161027101528181610b3d01526115fc0152610100518181816102ad01528181610dd20152818161102c0152818161139e01526125370152610120518181816103210152818161083c01528181610e0101528181610f040152818161119101528181611d9b01528181611e330152612463015261014051818181610479015281816105ac015261135b0152f35b61038d9060203d602011610394575b6103858183610611565b810190610648565b505f61029e565b503d61037b565b82513d5f823e3d90fd5b6103bd9060203d602011610394576103858183610611565b610257565b9091506020813d602011610402575b816103de60209383610611565b810103126103fe5751906001600160a01b03821682036103fe575f6101f8565b5f80fd5b3d91506103d1565b84513d5f823e3d90fd5b5060126101a1565b015190505f8061017d565b90601f1983169160045f52815f20925f5b81811061047b57509260019285926020989660049b9a989610610463575b505050811b018655610191565b01515f1960f88460031b161c191690555f8080610456565b92936020600181928786015181550195019301610438565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f840160051c810191602085106104ec575b601f0160051c01905b8181106104e1575061015b565b5f81556001016104d4565b90915081906104cb565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610149565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610112565b60035f9081528281209350601f198516905b8181106105815750908460019594939210610569575b505050811b01600355610127565b01515f1960f88460031b161c191690555f808061055b565b92936020600181928786015181550195019301610545565b60035f529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c810191602085106105fd575b90601f859493920160051c01905b8181106105ef57506100fc565b5f81558493506001016105e2565b90915081906105d4565b91607f16916100e8565b601f909101601f19168101906001600160401b0382119082101761051457604052565b51906001600160a01b03821682036103fe57565b908160209103126103fe575180151581036103fe5790565b5f8091604051602081019063313ce56760e01b825260048152610684602482610611565b51916001600160a01b03165afa3d1561070a573d906001600160401b03821161051457604051916106bf601f8201601f191660200184610611565b82523d5f602084013e5b806106fe575b6106db575b505f905f90565b6020818051810103126103fe576020015160ff81116106d4579060ff6001921690565b506020815110156106cf565b6060906106c956fe60806040526004361015610011575f80fd5b5f5f3560e01c806301e1d11414611bce57806306fdde0314611ada57806307a2d13a14611337578063095ea7b314611a005780630a28a477146119e25780630a441f7b146119c557806318160ddd146119a85780631c4c78431461198e5780631ed241951461196e5780631fe834a21461156357806323b872dd1461152b57806329605e7714611460578063313ce5671461140557806338d52e0f146113c2578063402d267d1461077c5780634256f5e71461137f57806346c96aac1461133c5780634cdad50614611337578063570ca735146113115780635898eaef146112685780636e553f651461111e57806370a082311461071a57806371ca337d146111035780637a4e4ecf14610f4d5780638380edb714610f2857806385caf28b14610ee457806394bf804d14610d5f57806395d89b4114610c4e578063a4c2fff614610c1f578063a69df4b514610b93578063a9059cbb14610b61578063ac600a3c14610b1d578063b24c7d2f14610ae0578063b3d7f6b914610ac1578063b460af9414610a49578063b4cd143a1461080a578063ba08765214610781578063c63d75b61461077c578063c6e6f5921461043f578063ce96cb7714610758578063d905777e1461071a578063dd62ed3e146106cc578063e7589b3914610688578063ed1224e514610578578063ee0b5af714610444578063ef8b30f71461043f5763f69e20461461021f575f80fd5b3461043c578060031936011261043c57610246336001600160a01b03600654163314611ec3565b61024e611fb3565b6040516370a0823160e01b81523060048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104315783916103fb575b50826001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156103e2578180916024604051809481937f12e826740000000000000000000000000000000000000000000000000000000083528860048401525af180156103d7576103e6575b506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156103e257818091600460405180948193631bcbec4d60e31b83525af180156103d7576103be575b50507fb969f0ab9501336670614935773c380be93ea2f2b43a9f7e94f036c299b79afc916103b861039a611fb3565b92604051938493846040919493926060820195825260208201520152565b0390a180f35b816103c891611d56565b6103d357825f61036b565b8280fd5b6040513d84823e3d90fd5b5080fd5b816103f091611d56565b6103d357825f610316565b90506020813d602011610429575b8161041660209383611d56565b8101031261042557515f6102a1565b5f80fd5b3d9150610409565b6040513d85823e3d90fd5b80fd5b611cb5565b503461043c5761045336611d04565b61046e93929193336001600160a01b03600654163314611ec3565b846001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156103e257816104f184928783886105038c604051988997889687957f307f38fa00000000000000000000000000000000000000000000000000000000875230600488015260606024880152606487019161207b565b848103600319016044860152916120c8565b03925af180156103d75761055f575b50507f5bad3c23665e1d2d83945cc9909833d5cbba0e4d8fda2ddc65e02c87d51ebc7d936103b89161055160405195869560408752604087019161207b565b9184830360208601526120c8565b8161056991611d56565b61057457845f610512565b8480fd5b503461043c578061058836611d04565b9091926105a2336001600160a01b03600654163314611ec3565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690813b156106845761061690604051957fe4ff5c2f00000000000000000000000000000000000000000000000000000000875230600488015260606024880152606487019161207b565b848103600319016044860152828152917f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610684578560208682968196829560051b809285830137010301925af180156103d7576106735750f35b8161067d91611d56565b61043c5780f35b8580fd5b503461043c578060031936011261043c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461043c57604036600319011261043c576001600160a01b0360406106f0611c2a565b92826106fa611c40565b9416815260016020522091165f52602052602060405f2054604051908152f35b503461043c57602036600319011261043c576020610750610739611c2a565b6001600160a01b03165f525f60205260405f205490565b604051908152f35b503461043c57602036600319011261043c576020610750610777611c2a565b61205f565b611c56565b503461043c5761079036611c7b565b926107ac846001600160a01b03165f525f60205260405f205490565b8084116107cd5760208561075086866107c48261217f565b938491336123d8565b9150916001600160a01b036064947fb94abeec00000000000000000000000000000000000000000000000000000000855216600452602452604452fd5b503461043c578060031936011261043c57610832336001600160a01b03600654163314611ec3565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166040517febe2b12b000000000000000000000000000000000000000000000000000000008152602081600481855afa908115610431578391610a17575b504211156109ef576108a9611fb3565b9082604051917e8cc262000000000000000000000000000000000000000000000000000000008352306004840152602083602481845afa9283156103d75782936109b8575b50803b156103e2576040517f3d18b912000000000000000000000000000000000000000000000000000000008152828160048183865af19081156104315783916109a3575b5050803b156103e257818091600460405180948193631bcbec4d60e31b83525af180156103d75761098e575b50507fd1a8a452d776b1b6802824ca2e8489c6448e2cb0963f552a9a19ab4ae064ca58916103b861039a611fb3565b8161099891611d56565b6103d357825f61095f565b816109ad91611d56565b6103e257815f610933565b915091506020813d6020116109e7575b816109d560209383611d56565b8101031261042557839051915f6108ee565b3d91506109c8565b6004827f4e2ec0ea000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011610a41575b81610a3260209383611d56565b8101031261042557515f610899565b3d9150610a25565b503461043c57610a5836611c7b565b9192610a638361205f565b808511610a84576020846107508588610a7b816121ac565b938492336123d8565b60649250846001600160a01b03857ffe9cceec00000000000000000000000000000000000000000000000000000000855216600452602452604452fd5b503461043c57602036600319011261043c576020610750600435612151565b503461043c57602036600319011261043c5760ff60406020926001600160a01b03610b09611c2a565b168152600984522054166040519015158152f35b503461043c578060031936011261043c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461043c57604036600319011261043c57610b88610b7e611c2a565b6024359033612302565b602060405160018152f35b503461043c578060031936011261043c57610bbb336001600160a01b03600654163314611ec3565b610bc3611dfd565b610c105762093a8042048152600860205260408120600160ff198254161790557ff27b6ce5b2f5e68ddb2fd95a8a909d4ecf1daaac270935fff052feacb24f18426020604051428152a180f35b8063a1422f6960e01b60049252fd5b503461043c57602036600319011261043c5760ff60406020926004358152600884522054166040519015158152f35b503461043c578060031936011261043c576040519080600454908160011c91600181168015610d55575b602084108114610d4157838652908115610d1a5750600114610cbd575b610cb984610ca581860382611d56565b604051918291602083526020830190611be8565b0390f35b600481527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610d0057509091508101602001610ca582610c95565b919260018160209254838588010152019101909291610ce7565b60ff191660208087019190915292151560051b85019092019250610ca59150839050610c95565b602483634e487b7160e01b81526022600452fd5b92607f1692610c78565b503461043c57604036600319011261043c57600435610d7c611c40565b91610d8682612151565b91610d8f61200c565b15610ed557610df76040516323b872dd60e01b602082015233602482015230604482015284606482015260648152610dc8608482611d56565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661270f565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156103d35782809160246040518094819363b6b55f2560e01b83528960048401525af1801561043157908391610ec0575b50506001600160a01b038416918215610ead5750610e7481602095612605565b60405190838252848201527fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d760403392a3604051908152f35b8063ec442f0560e01b6024925280600452fd5b81610eca91611d56565b6103e257815f610e54565b60048263a1422f6960e01b8152fd5b503461043c578060031936011261043c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461043c578060031936011261043c576020610f4361200c565b6040519015158152f35b503461043c57604036600319011261043c57610f67611c2a565b610f6f612207565b610fa4336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611f76565b610fac611d78565b60405163a9059cbb60e01b815233600482015260248035908201529190602083604481876001600160a01b0387165af19283156110cb5761105d936110d6575b506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152306024820152927f000000000000000000000000000000000000000000000000000000000000000090921691602090849081906044820190565b0381855afa9283156110cb578493611095575b5061107f8261108d9415611f14565b611087611d78565b14611f14565b600160055580f35b92506020833d6020116110c3575b816110b060209383611d56565b810103126104255791519161107f611070565b3d91506110a3565b6040513d86823e3d90fd5b6110f79060203d6020116110fc575b6110ef8183611d56565b810190611f51565b610fec565b503d6110e5565b503461043c578060031936011261043c576020610750611fb3565b50346104255760403660031901126104255760043561113b611c40565b91611145826121da565b9161114e61200c565b15611259576111876040516323b872dd60e01b602082015233602482015230604482015282606482015260648152610dc8608482611d56565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610425575f809160246040518094819363b6b55f2560e01b83528760048401525af1801561124e57611239575b506001600160a01b038416918215610ead575061120083602095612605565b60405190815282848201527fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d760403392a3604051908152f35b6112469192505f90611d56565b5f905f6111e1565b6040513d5f823e3d90fd5b63a1422f6960e01b5f5260045ffd5b3461042557604036600319011261042557611281611c2a565b60243590811515809203610425577f51372928fc73bc5fef2c5bc8324eef22ddcbc66388d34c91e02f1e67b97159bb916001600160a01b036040926112ea33837f0000000000000000000000000000000000000000000000000000000000000000163314611f76565b1690815f526009602052825f2060ff1981541660ff831617905582519182526020820152a1005b34610425575f3660031901126104255760206001600160a01b0360065416604051908152f35b611c0c565b34610425575f3660031901126104255760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610425575f3660031901126104255760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610425575f3660031901126104255760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610425575f3660031901126104255760ff7f00000000000000000000000000000000000000000000000000000000000000001660ff811161144c57602090604051908152f35b634e487b7160e01b5f52601160045260245ffd5b34610425576020366003190112610425577ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c6001600160a01b036114a2611c2a565b6114d033837f0000000000000000000000000000000000000000000000000000000000000000163314611f76565b611526826006549216807fffffffffffffffffffffffff000000000000000000000000000000000000000084161760065560405193849316839092916001600160a01b0360209181604085019616845216910152565b0390a1005b3461042557606036600319011261042557610b88611547611c2a565b61154f611c40565b6044359161155e833383612240565b612302565b346104255760203660031901126104255760043567ffffffffffffffff811161042557368190036004820160a0600319830112610425576115a2612207565b6115b9336001600160a01b03600654163314611ec3565b6001600160a01b036115ca82611f00565b165f52600960205260ff60405f2054166115e382611f00565b901561193957506115f2611d78565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916040516370a0823160e01b8152306004820152602081602481875afa90811561124e575f91611907575b50602486019461166b85806001600160a01b036116638a611f00565b161415611f14565b6116e06001600160a01b0361167f88611f00565b1693602061168c82611f00565b60448b01359687915f6040518097819582947f095ea7b300000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03925af191821561124e576116fa926118ea575b50611f00565b90608488013590602219018112156104255787019060048201359167ffffffffffffffff83116104255760240190823603821361042557825f80949381946040519384928337810182815203925af13d156118e2573d9067ffffffffffffffff82116118ce5760405191611778601f8201601f191660200184611d56565b82523d5f602084013e5b1561188c5750604051906370a0823160e01b8252306004830152602082602481885afa91821561124e575f92611856575b506117c86064916117c2611d78565b93611f69565b960135861061182a577fab75539fb3c9e26222b41138a9c5f7337991b1b654406bf6723d949ab9ccd03c936040936118009214611f14565b6001600160a01b03611816816006541695611f00565b169482519182526020820152a36001600555005b857f28a4d357000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d602011611884575b8161187260209383611d56565b810103126104255751906117c86117b3565b3d9150611865565b6118ca906040519182917f34321ebc000000000000000000000000000000000000000000000000000000008352602060048401526024830190611be8565b0390fd5b634e487b7160e01b5f52604160045260245ffd5b606090611782565b6119029060203d6020116110fc576110ef8183611d56565b6116f4565b90506020813d602011611931575b8161192260209383611d56565b81010312610425575186611647565b3d9150611915565b6001600160a01b03907f1d5fcfda000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b34610425575f36600319011261042557602062093a804204604051908152f35b34610425575f366003190112610425576020610f43611dfd565b34610425575f366003190112610425576020600254604051908152f35b34610425575f366003190112610425576020600754604051908152f35b346104255760203660031901126104255760206107506004356121ac565b3461042557604036600319011261042557611a19611c2a565b602435903315611aae576001600160a01b0316908115611a8257335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b7f94280d62000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b34610425575f366003190112610425576040515f6003548060011c90600181168015611bc4575b602083108114611bb057828552908115611b8c5750600114611b2e575b610cb983610ca581850382611d56565b91905060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b808210611b7257509091508101602001610ca5611b1e565b919260018160209254838588010152019101909291611b5a565b60ff191660208086019190915291151560051b84019091019150610ca59050611b1e565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611b01565b34610425575f366003190112610425576020610750611d78565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b3461042557602036600319011261042557602061075060043561217f565b600435906001600160a01b038216820361042557565b602435906001600160a01b038216820361042557565b3461042557602036600319011261042557611c6f611c2a565b5060206040515f198152f35b606090600319011261042557600435906024356001600160a01b038116810361042557906044356001600160a01b03811681036104255790565b346104255760203660031901126104255760206107506004356121da565b9181601f840112156104255782359167ffffffffffffffff8311610425576020808501948460051b01011161042557565b60406003198201126104255760043567ffffffffffffffff81116104255781611d2f91600401611cd3565b929092916024359067ffffffffffffffff821161042557611d5291600401611cd3565b9091565b90601f8019910116810190811067ffffffffffffffff8211176118ce57604052565b6040516370a0823160e01b81523060048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561124e575f91611dce575090565b90506020813d602011611df5575b81611de960209383611d56565b81010312610425575190565b3d9150611ddc565b6040517f251c1aa30000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561124e575f91611e73575b504210611e6e575f90565b600190565b90506020813d602011611e9d575b81611e8e60209383611d56565b8101031261042557515f611e63565b3d9150611e81565b8115611eaf570490565b634e487b7160e01b5f52601260045260245ffd5b15611ecb5750565b6001600160a01b03907f2bc10c33000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b356001600160a01b03811681036104255790565b15611f1c5750565b6001600160a01b03907fa4c4b52d000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b90816020910312610425575180151581036104255790565b9190820391821161144c57565b15611f7e5750565b6001600160a01b03907f08cd4c01000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6002548015611ff257611fc4611d78565b90670de0b6b3a7640000820291808304670de0b6b3a7640000149015171561144c57611fef91611ea5565b90565b50670de0b6b3a764000090565b9190820180921161144c57565b62093a8042046001810180821161144c5762093a8081029080820462093a80149015171561144c57612042610e10914290611f69565b111561205a575f52600860205260ff60405f20541690565b505f90565b6001600160a01b03165f525f602052611fef60405f205461217f565b916020908281520191905f905b8082106120955750505090565b9091928335906001600160a01b038216820361042557602080916001600160a01b03600194168152019401920190612088565b90602083828152019060208160051b85010193835f915b8383106120ef5750505050505090565b909192939495601f198282030186528635601e1984360301811215610425578301906020823592019167ffffffffffffffff8111610425578060051b3603831361042557612143602092839260019561207b565b9801960194930191906120df565b612159611d78565b906001820180921161144c576002546001810180911161144c57611fef926001926125a7565b612187611d78565b906001820180921161144c576002546001810180911161144c57611fef925f926125a7565b600254906001820180921161144c576121c3611d78565b6001810180911161144c57611fef926001926125a7565b600254906001820180921161144c576121f1611d78565b6001810180911161144c57611fef925f926125a7565b600260055414612218576002600555565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b03909291921691825f52600160205260405f206001600160a01b0382165f5260205260405f2054925f19840361227e575b50505050565b8284106122c5578015611aae576001600160a01b03821615611a82575f5260016020526001600160a01b0360405f2091165f5260205260405f20910390555f808080612278565b506001600160a01b0383917ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b6001600160a01b03169081156123ac576001600160a01b031691821561239957815f525f60205260405f205481811061238057817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b9193906001600160a01b03851694826001600160a01b03851694878603612596575b50505084156123ac57845f525f60205260405f205482811061257b578290865f525f6020520360405f205581600254036002555f857fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020604051868152a36001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690813b15610425575f80926024604051809581937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528a60048401525af190811561124e577ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db936040936001600160a01b039361256b575b50835163a9059cbb60e01b60208201526001600160a01b03831660248201526044808201899052815261255c90612534606482611d56565b847f00000000000000000000000000000000000000000000000000000000000000001661270f565b835196875260208701521693a4565b5f61257591611d56565b5f6124fc565b90508463391434e360e21b5f5260045260245260445260645ffd5b61259f92612240565b5f82816123fa565b92916125b4818386612672565b9260048110156125f15760018091161491826125da575b5050611fef9250151590611fff565b9080925015611eaf57611fef930915155f806125cb565b634e487b7160e01b5f52602160045260245ffd5b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60206001600160a01b035f9361263e86600254611fff565b60025516938415841461265d5780600254036002555b604051908152a3565b84845283825260408420818154019055612654565b91818302915f198185099383808610950394808603951461270257848311156126ea5790829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b82634e487b715f52156003026011186020526024601cfd5b505090611fef9250611ea5565b905f602091828151910182855af11561124e575f513d61277357506001600160a01b0381163b155b61273e5750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6001141561273756fea264697066735822122064fab6b9dc14264c19753730fd4c3d63cc570acafc484ac33e773afa7273ada964736f6c634300081c00330000000000000000000000005be2e859d0c2453c9aa062860ca27711ff5534320000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f0000000000000000000000005050bc082ff4a74fb6b0b04385defddb114b24240000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b4

    Deployed Bytecode

    0x60806040526004361015610011575f80fd5b5f5f3560e01c806301e1d11414611bce57806306fdde0314611ada57806307a2d13a14611337578063095ea7b314611a005780630a28a477146119e25780630a441f7b146119c557806318160ddd146119a85780631c4c78431461198e5780631ed241951461196e5780631fe834a21461156357806323b872dd1461152b57806329605e7714611460578063313ce5671461140557806338d52e0f146113c2578063402d267d1461077c5780634256f5e71461137f57806346c96aac1461133c5780634cdad50614611337578063570ca735146113115780635898eaef146112685780636e553f651461111e57806370a082311461071a57806371ca337d146111035780637a4e4ecf14610f4d5780638380edb714610f2857806385caf28b14610ee457806394bf804d14610d5f57806395d89b4114610c4e578063a4c2fff614610c1f578063a69df4b514610b93578063a9059cbb14610b61578063ac600a3c14610b1d578063b24c7d2f14610ae0578063b3d7f6b914610ac1578063b460af9414610a49578063b4cd143a1461080a578063ba08765214610781578063c63d75b61461077c578063c6e6f5921461043f578063ce96cb7714610758578063d905777e1461071a578063dd62ed3e146106cc578063e7589b3914610688578063ed1224e514610578578063ee0b5af714610444578063ef8b30f71461043f5763f69e20461461021f575f80fd5b3461043c578060031936011261043c57610246336001600160a01b03600654163314611ec3565b61024e611fb3565b6040516370a0823160e01b81523060048201526020816024816001600160a01b037f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a33333165afa9081156104315783916103fb575b50826001600160a01b037f0000000000000000000000005050bc082ff4a74fb6b0b04385defddb114b242416803b156103e2578180916024604051809481937f12e826740000000000000000000000000000000000000000000000000000000083528860048401525af180156103d7576103e6575b506001600160a01b037f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b416803b156103e257818091600460405180948193631bcbec4d60e31b83525af180156103d7576103be575b50507fb969f0ab9501336670614935773c380be93ea2f2b43a9f7e94f036c299b79afc916103b861039a611fb3565b92604051938493846040919493926060820195825260208201520152565b0390a180f35b816103c891611d56565b6103d357825f61036b565b8280fd5b6040513d84823e3d90fd5b5080fd5b816103f091611d56565b6103d357825f610316565b90506020813d602011610429575b8161041660209383611d56565b8101031261042557515f6102a1565b5f80fd5b3d9150610409565b6040513d85823e3d90fd5b80fd5b611cb5565b503461043c5761045336611d04565b61046e93929193336001600160a01b03600654163314611ec3565b846001600160a01b037f0000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f16803b156103e257816104f184928783886105038c604051988997889687957f307f38fa00000000000000000000000000000000000000000000000000000000875230600488015260606024880152606487019161207b565b848103600319016044860152916120c8565b03925af180156103d75761055f575b50507f5bad3c23665e1d2d83945cc9909833d5cbba0e4d8fda2ddc65e02c87d51ebc7d936103b89161055160405195869560408752604087019161207b565b9184830360208601526120c8565b8161056991611d56565b61057457845f610512565b8480fd5b503461043c578061058836611d04565b9091926105a2336001600160a01b03600654163314611ec3565b6001600160a01b037f0000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f1690813b156106845761061690604051957fe4ff5c2f00000000000000000000000000000000000000000000000000000000875230600488015260606024880152606487019161207b565b848103600319016044860152828152917f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610684578560208682968196829560051b809285830137010301925af180156103d7576106735750f35b8161067d91611d56565b61043c5780f35b8580fd5b503461043c578060031936011261043c5760206040516001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f168152f35b503461043c57604036600319011261043c576001600160a01b0360406106f0611c2a565b92826106fa611c40565b9416815260016020522091165f52602052602060405f2054604051908152f35b503461043c57602036600319011261043c576020610750610739611c2a565b6001600160a01b03165f525f60205260405f205490565b604051908152f35b503461043c57602036600319011261043c576020610750610777611c2a565b61205f565b611c56565b503461043c5761079036611c7b565b926107ac846001600160a01b03165f525f60205260405f205490565b8084116107cd5760208561075086866107c48261217f565b938491336123d8565b9150916001600160a01b036064947fb94abeec00000000000000000000000000000000000000000000000000000000855216600452602452604452fd5b503461043c578060031936011261043c57610832336001600160a01b03600654163314611ec3565b6001600160a01b037f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b4166040517febe2b12b000000000000000000000000000000000000000000000000000000008152602081600481855afa908115610431578391610a17575b504211156109ef576108a9611fb3565b9082604051917e8cc262000000000000000000000000000000000000000000000000000000008352306004840152602083602481845afa9283156103d75782936109b8575b50803b156103e2576040517f3d18b912000000000000000000000000000000000000000000000000000000008152828160048183865af19081156104315783916109a3575b5050803b156103e257818091600460405180948193631bcbec4d60e31b83525af180156103d75761098e575b50507fd1a8a452d776b1b6802824ca2e8489c6448e2cb0963f552a9a19ab4ae064ca58916103b861039a611fb3565b8161099891611d56565b6103d357825f61095f565b816109ad91611d56565b6103e257815f610933565b915091506020813d6020116109e7575b816109d560209383611d56565b8101031261042557839051915f6108ee565b3d91506109c8565b6004827f4e2ec0ea000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011610a41575b81610a3260209383611d56565b8101031261042557515f610899565b3d9150610a25565b503461043c57610a5836611c7b565b9192610a638361205f565b808511610a84576020846107508588610a7b816121ac565b938492336123d8565b60649250846001600160a01b03857ffe9cceec00000000000000000000000000000000000000000000000000000000855216600452602452604452fd5b503461043c57602036600319011261043c576020610750600435612151565b503461043c57602036600319011261043c5760ff60406020926001600160a01b03610b09611c2a565b168152600984522054166040519015158152f35b503461043c578060031936011261043c5760206040516001600160a01b037f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a33333168152f35b503461043c57604036600319011261043c57610b88610b7e611c2a565b6024359033612302565b602060405160018152f35b503461043c578060031936011261043c57610bbb336001600160a01b03600654163314611ec3565b610bc3611dfd565b610c105762093a8042048152600860205260408120600160ff198254161790557ff27b6ce5b2f5e68ddb2fd95a8a909d4ecf1daaac270935fff052feacb24f18426020604051428152a180f35b8063a1422f6960e01b60049252fd5b503461043c57602036600319011261043c5760ff60406020926004358152600884522054166040519015158152f35b503461043c578060031936011261043c576040519080600454908160011c91600181168015610d55575b602084108114610d4157838652908115610d1a5750600114610cbd575b610cb984610ca581860382611d56565b604051918291602083526020830190611be8565b0390f35b600481527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610d0057509091508101602001610ca582610c95565b919260018160209254838588010152019101909291610ce7565b60ff191660208087019190915292151560051b85019092019250610ca59150839050610c95565b602483634e487b7160e01b81526022600452fd5b92607f1692610c78565b503461043c57604036600319011261043c57600435610d7c611c40565b91610d8682612151565b91610d8f61200c565b15610ed557610df76040516323b872dd60e01b602082015233602482015230604482015284606482015260648152610dc8608482611d56565b6001600160a01b037f0000000000000000000000005050bc082ff4a74fb6b0b04385defddb114b24241661270f565b6001600160a01b037f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b416803b156103d35782809160246040518094819363b6b55f2560e01b83528960048401525af1801561043157908391610ec0575b50506001600160a01b038416918215610ead5750610e7481602095612605565b60405190838252848201527fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d760403392a3604051908152f35b8063ec442f0560e01b6024925280600452fd5b81610eca91611d56565b6103e257815f610e54565b60048263a1422f6960e01b8152fd5b503461043c578060031936011261043c5760206040516001600160a01b037f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b4168152f35b503461043c578060031936011261043c576020610f4361200c565b6040519015158152f35b503461043c57604036600319011261043c57610f67611c2a565b610f6f612207565b610fa4336001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f163314611f76565b610fac611d78565b60405163a9059cbb60e01b815233600482015260248035908201529190602083604481876001600160a01b0387165af19283156110cb5761105d936110d6575b506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152306024820152927f0000000000000000000000005050bc082ff4a74fb6b0b04385defddb114b242490921691602090849081906044820190565b0381855afa9283156110cb578493611095575b5061107f8261108d9415611f14565b611087611d78565b14611f14565b600160055580f35b92506020833d6020116110c3575b816110b060209383611d56565b810103126104255791519161107f611070565b3d91506110a3565b6040513d86823e3d90fd5b6110f79060203d6020116110fc575b6110ef8183611d56565b810190611f51565b610fec565b503d6110e5565b503461043c578060031936011261043c576020610750611fb3565b50346104255760403660031901126104255760043561113b611c40565b91611145826121da565b9161114e61200c565b15611259576111876040516323b872dd60e01b602082015233602482015230604482015282606482015260648152610dc8608482611d56565b6001600160a01b037f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b416803b15610425575f809160246040518094819363b6b55f2560e01b83528760048401525af1801561124e57611239575b506001600160a01b038416918215610ead575061120083602095612605565b60405190815282848201527fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d760403392a3604051908152f35b6112469192505f90611d56565b5f905f6111e1565b6040513d5f823e3d90fd5b63a1422f6960e01b5f5260045ffd5b3461042557604036600319011261042557611281611c2a565b60243590811515809203610425577f51372928fc73bc5fef2c5bc8324eef22ddcbc66388d34c91e02f1e67b97159bb916001600160a01b036040926112ea33837f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f163314611f76565b1690815f526009602052825f2060ff1981541660ff831617905582519182526020820152a1005b34610425575f3660031901126104255760206001600160a01b0360065416604051908152f35b611c0c565b34610425575f3660031901126104255760206040516001600160a01b037f0000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f168152f35b34610425575f3660031901126104255760206040516001600160a01b037f0000000000000000000000005050bc082ff4a74fb6b0b04385defddb114b2424168152f35b34610425575f3660031901126104255760206040516001600160a01b037f0000000000000000000000005050bc082ff4a74fb6b0b04385defddb114b2424168152f35b34610425575f3660031901126104255760ff7f00000000000000000000000000000000000000000000000000000000000000121660ff811161144c57602090604051908152f35b634e487b7160e01b5f52601160045260245ffd5b34610425576020366003190112610425577ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c6001600160a01b036114a2611c2a565b6114d033837f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f163314611f76565b611526826006549216807fffffffffffffffffffffffff000000000000000000000000000000000000000084161760065560405193849316839092916001600160a01b0360209181604085019616845216910152565b0390a1005b3461042557606036600319011261042557610b88611547611c2a565b61154f611c40565b6044359161155e833383612240565b612302565b346104255760203660031901126104255760043567ffffffffffffffff811161042557368190036004820160a0600319830112610425576115a2612207565b6115b9336001600160a01b03600654163314611ec3565b6001600160a01b036115ca82611f00565b165f52600960205260ff60405f2054166115e382611f00565b901561193957506115f2611d78565b6001600160a01b037f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a3333316916040516370a0823160e01b8152306004820152602081602481875afa90811561124e575f91611907575b50602486019461166b85806001600160a01b036116638a611f00565b161415611f14565b6116e06001600160a01b0361167f88611f00565b1693602061168c82611f00565b60448b01359687915f6040518097819582947f095ea7b300000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03925af191821561124e576116fa926118ea575b50611f00565b90608488013590602219018112156104255787019060048201359167ffffffffffffffff83116104255760240190823603821361042557825f80949381946040519384928337810182815203925af13d156118e2573d9067ffffffffffffffff82116118ce5760405191611778601f8201601f191660200184611d56565b82523d5f602084013e5b1561188c5750604051906370a0823160e01b8252306004830152602082602481885afa91821561124e575f92611856575b506117c86064916117c2611d78565b93611f69565b960135861061182a577fab75539fb3c9e26222b41138a9c5f7337991b1b654406bf6723d949ab9ccd03c936040936118009214611f14565b6001600160a01b03611816816006541695611f00565b169482519182526020820152a36001600555005b857f28a4d357000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d602011611884575b8161187260209383611d56565b810103126104255751906117c86117b3565b3d9150611865565b6118ca906040519182917f34321ebc000000000000000000000000000000000000000000000000000000008352602060048401526024830190611be8565b0390fd5b634e487b7160e01b5f52604160045260245ffd5b606090611782565b6119029060203d6020116110fc576110ef8183611d56565b6116f4565b90506020813d602011611931575b8161192260209383611d56565b81010312610425575186611647565b3d9150611915565b6001600160a01b03907f1d5fcfda000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b34610425575f36600319011261042557602062093a804204604051908152f35b34610425575f366003190112610425576020610f43611dfd565b34610425575f366003190112610425576020600254604051908152f35b34610425575f366003190112610425576020600754604051908152f35b346104255760203660031901126104255760206107506004356121ac565b3461042557604036600319011261042557611a19611c2a565b602435903315611aae576001600160a01b0316908115611a8257335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b7f94280d62000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b34610425575f366003190112610425576040515f6003548060011c90600181168015611bc4575b602083108114611bb057828552908115611b8c5750600114611b2e575b610cb983610ca581850382611d56565b91905060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b808210611b7257509091508101602001610ca5611b1e565b919260018160209254838588010152019101909291611b5a565b60ff191660208086019190915291151560051b84019091019150610ca59050611b1e565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611b01565b34610425575f366003190112610425576020610750611d78565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b3461042557602036600319011261042557602061075060043561217f565b600435906001600160a01b038216820361042557565b602435906001600160a01b038216820361042557565b3461042557602036600319011261042557611c6f611c2a565b5060206040515f198152f35b606090600319011261042557600435906024356001600160a01b038116810361042557906044356001600160a01b03811681036104255790565b346104255760203660031901126104255760206107506004356121da565b9181601f840112156104255782359167ffffffffffffffff8311610425576020808501948460051b01011161042557565b60406003198201126104255760043567ffffffffffffffff81116104255781611d2f91600401611cd3565b929092916024359067ffffffffffffffff821161042557611d5291600401611cd3565b9091565b90601f8019910116810190811067ffffffffffffffff8211176118ce57604052565b6040516370a0823160e01b81523060048201526020816024816001600160a01b037f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b4165afa90811561124e575f91611dce575090565b90506020813d602011611df5575b81611de960209383611d56565b81010312610425575190565b3d9150611ddc565b6040517f251c1aa30000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b4165afa90811561124e575f91611e73575b504210611e6e575f90565b600190565b90506020813d602011611e9d575b81611e8e60209383611d56565b8101031261042557515f611e63565b3d9150611e81565b8115611eaf570490565b634e487b7160e01b5f52601260045260245ffd5b15611ecb5750565b6001600160a01b03907f2bc10c33000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b356001600160a01b03811681036104255790565b15611f1c5750565b6001600160a01b03907fa4c4b52d000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b90816020910312610425575180151581036104255790565b9190820391821161144c57565b15611f7e5750565b6001600160a01b03907f08cd4c01000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6002548015611ff257611fc4611d78565b90670de0b6b3a7640000820291808304670de0b6b3a7640000149015171561144c57611fef91611ea5565b90565b50670de0b6b3a764000090565b9190820180921161144c57565b62093a8042046001810180821161144c5762093a8081029080820462093a80149015171561144c57612042610e10914290611f69565b111561205a575f52600860205260ff60405f20541690565b505f90565b6001600160a01b03165f525f602052611fef60405f205461217f565b916020908281520191905f905b8082106120955750505090565b9091928335906001600160a01b038216820361042557602080916001600160a01b03600194168152019401920190612088565b90602083828152019060208160051b85010193835f915b8383106120ef5750505050505090565b909192939495601f198282030186528635601e1984360301811215610425578301906020823592019167ffffffffffffffff8111610425578060051b3603831361042557612143602092839260019561207b565b9801960194930191906120df565b612159611d78565b906001820180921161144c576002546001810180911161144c57611fef926001926125a7565b612187611d78565b906001820180921161144c576002546001810180911161144c57611fef925f926125a7565b600254906001820180921161144c576121c3611d78565b6001810180911161144c57611fef926001926125a7565b600254906001820180921161144c576121f1611d78565b6001810180911161144c57611fef925f926125a7565b600260055414612218576002600555565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b03909291921691825f52600160205260405f206001600160a01b0382165f5260205260405f2054925f19840361227e575b50505050565b8284106122c5578015611aae576001600160a01b03821615611a82575f5260016020526001600160a01b0360405f2091165f5260205260405f20910390555f808080612278565b506001600160a01b0383917ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b6001600160a01b03169081156123ac576001600160a01b031691821561239957815f525f60205260405f205481811061238057817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b9193906001600160a01b03851694826001600160a01b03851694878603612596575b50505084156123ac57845f525f60205260405f205482811061257b578290865f525f6020520360405f205581600254036002555f857fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020604051868152a36001600160a01b037f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b41690813b15610425575f80926024604051809581937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528a60048401525af190811561124e577ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db936040936001600160a01b039361256b575b50835163a9059cbb60e01b60208201526001600160a01b03831660248201526044808201899052815261255c90612534606482611d56565b847f0000000000000000000000005050bc082ff4a74fb6b0b04385defddb114b24241661270f565b835196875260208701521693a4565b5f61257591611d56565b5f6124fc565b90508463391434e360e21b5f5260045260245260445260645ffd5b61259f92612240565b5f82816123fa565b92916125b4818386612672565b9260048110156125f15760018091161491826125da575b5050611fef9250151590611fff565b9080925015611eaf57611fef930915155f806125cb565b634e487b7160e01b5f52602160045260245ffd5b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60206001600160a01b035f9361263e86600254611fff565b60025516938415841461265d5780600254036002555b604051908152a3565b84845283825260408420818154019055612654565b91818302915f198185099383808610950394808603951461270257848311156126ea5790829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b82634e487b715f52156003026011186020526024601cfd5b505090611fef9250611ea5565b905f602091828151910182855af11561124e575f513d61277357506001600160a01b0381163b155b61273e5750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6001141561273756fea264697066735822122064fab6b9dc14264c19753730fd4c3d63cc570acafc484ac33e773afa7273ada964736f6c634300081c0033

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

    0000000000000000000000005be2e859d0c2453c9aa062860ca27711ff5534320000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f0000000000000000000000005050bc082ff4a74fb6b0b04385defddb114b24240000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b4

    -----Decoded View---------------
    Arg [0] : _operator (address): 0x5Be2e859D0c2453C9aA062860cA27711ff553432
    Arg [1] : _accessHub (address): 0x5e7A9eea6988063A4dBb9CcDDB3E04C923E8E37f
    Arg [2] : _xShadow (address): 0x5050bc082FF4A74Fb6B0B04385dEfdDB114b2424
    Arg [3] : _voter (address): 0x3aF1dD7A2755201F8e2D6dCDA1a61d9f54838f4f
    Arg [4] : _voteModule (address): 0xDCB5A24ec708cc13cee12bFE6799A78a79b666b4

    -----Encoded View---------------
    5 Constructor Arguments found :
    Arg [0] : 0000000000000000000000005be2e859d0c2453c9aa062860ca27711ff553432
    Arg [1] : 0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f
    Arg [2] : 0000000000000000000000005050bc082ff4a74fb6b0b04385defddb114b2424
    Arg [3] : 0000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f
    Arg [4] : 000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b4


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