ETH Price: $3,340.39 (+2.47%)
Gas: 2 Gwei

Contract

0x59803e5Fe213D4B22fb9b061c4C89E716a1CA760
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00
Transaction Hash
Method
Block
From
To
Bridge Back203913632024-07-26 14:36:593 days ago1722004619IN
0x59803e5F...16a1CA760
0.00105 ETH0.000711227.18467792
Approve203784072024-07-24 19:11:355 days ago1721848295IN
0x59803e5F...16a1CA760
0 ETH0.000114314.33667977
Approve203784012024-07-24 19:10:235 days ago1721848223IN
0x59803e5F...16a1CA760
0 ETH0.000251915.44555202
Bridge Back203562052024-07-21 16:48:358 days ago1721580515IN
0x59803e5F...16a1CA760
0.00105 ETH0.000465814.94533772
Bridge Back203560482024-07-21 16:17:118 days ago1721578631IN
0x59803e5F...16a1CA760
0.001 ETH0.0009864510.47014029
Approve203362662024-07-18 22:02:5911 days ago1721340179IN
0x59803e5F...16a1CA760
0 ETH0.0005185311.13986712
Transfer203253902024-07-17 9:35:5912 days ago1721208959IN
0x59803e5F...16a1CA760
0 ETH0.0007295813.43870956
Bridge Back202946162024-07-13 2:30:4716 days ago1720837847IN
0x59803e5F...16a1CA760
0.00105 ETH0.00012161.2284736
Bridge Back202382292024-07-05 5:30:4724 days ago1720157447IN
0x59803e5F...16a1CA760
0.00105 ETH0.0012963613.09562382
Approve202077012024-06-30 23:10:2328 days ago1719789023IN
0x59803e5F...16a1CA760
0 ETH0.000164693.56286896
Bridge Back201928312024-06-28 21:20:2331 days ago1719609623IN
0x59803e5F...16a1CA760
0.00105 ETH0.00025222.5477487
Approve201889232024-06-28 8:14:5931 days ago1719562499IN
0x59803e5F...16a1CA760
0 ETH0.000205864.42830216
Approve201885142024-06-28 6:52:4731 days ago1719557567IN
0x59803e5F...16a1CA760
0 ETH0.000116552.50727401
Bridge Back201761402024-06-26 13:23:4733 days ago1719408227IN
0x59803e5F...16a1CA760
0.00105 ETH0.000635276.41819058
Approve201245812024-06-19 8:26:1140 days ago1718785571IN
0x59803e5F...16a1CA760
0 ETH0.000265735.70888215
Approve201228332024-06-19 2:32:3540 days ago1718764355IN
0x59803e5F...16a1CA760
0 ETH0.000343067.37207573
Approve201217822024-06-18 23:00:4740 days ago1718751647IN
0x59803e5F...16a1CA760
0 ETH0.000221054.7772167
Approve201101492024-06-17 7:54:4742 days ago1718610887IN
0x59803e5F...16a1CA760
0 ETH0.000139443.01674609
Approve201060682024-06-16 18:13:2343 days ago1718561603IN
0x59803e5F...16a1CA760
0 ETH0.000176593.79863455
Approve200969472024-06-15 11:38:4744 days ago1718451527IN
0x59803e5F...16a1CA760
0 ETH0.000201474.32841252
Approve200923112024-06-14 20:02:5945 days ago1718395379IN
0x59803e5F...16a1CA760
0 ETH0.000386278.30919086
Bridge Back200781602024-06-12 20:33:3547 days ago1718224415IN
0x59803e5F...16a1CA760
0.00105 ETH0.0013900514.04207642
Approve200759462024-06-12 13:08:2347 days ago1718197703IN
0x59803e5F...16a1CA760
0 ETH0.0017996938.71300504
Approve200758802024-06-12 12:54:4747 days ago1718196887IN
0x59803e5F...16a1CA760
0 ETH0.0016167934.94103168
Bridge Back200682252024-06-11 11:16:1148 days ago1718104571IN
0x59803e5F...16a1CA760
0.00105 ETH0.0011993712.1173553
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
203913632024-07-26 14:36:593 days ago1722004619
0x59803e5F...16a1CA760
0.00065 ETH
203913632024-07-26 14:36:593 days ago1722004619
0x59803e5F...16a1CA760
0.0004 ETH
203562052024-07-21 16:48:358 days ago1721580515
0x59803e5F...16a1CA760
0.00065 ETH
203562052024-07-21 16:48:358 days ago1721580515
0x59803e5F...16a1CA760
0.0004 ETH
203560482024-07-21 16:17:118 days ago1721578631
0x59803e5F...16a1CA760
0.0006 ETH
203560482024-07-21 16:17:118 days ago1721578631
0x59803e5F...16a1CA760
0.0004 ETH
202946162024-07-13 2:30:4716 days ago1720837847
0x59803e5F...16a1CA760
0.00065 ETH
202946162024-07-13 2:30:4716 days ago1720837847
0x59803e5F...16a1CA760
0.0004 ETH
202382292024-07-05 5:30:4724 days ago1720157447
0x59803e5F...16a1CA760
0.00065 ETH
202382292024-07-05 5:30:4724 days ago1720157447
0x59803e5F...16a1CA760
0.0004 ETH
201928312024-06-28 21:20:2331 days ago1719609623
0x59803e5F...16a1CA760
0.00065 ETH
201928312024-06-28 21:20:2331 days ago1719609623
0x59803e5F...16a1CA760
0.0004 ETH
201761402024-06-26 13:23:4733 days ago1719408227
0x59803e5F...16a1CA760
0.00065 ETH
201761402024-06-26 13:23:4733 days ago1719408227
0x59803e5F...16a1CA760
0.0004 ETH
200781602024-06-12 20:33:3547 days ago1718224415
0x59803e5F...16a1CA760
0.00065 ETH
200781602024-06-12 20:33:3547 days ago1718224415
0x59803e5F...16a1CA760
0.0004 ETH
200682252024-06-11 11:16:1148 days ago1718104571
0x59803e5F...16a1CA760
0.00065 ETH
200682252024-06-11 11:16:1148 days ago1718104571
0x59803e5F...16a1CA760
0.0004 ETH
200500222024-06-08 22:13:4751 days ago1717884827
0x59803e5F...16a1CA760
0.00065 ETH
200500222024-06-08 22:13:4751 days ago1717884827
0x59803e5F...16a1CA760
0.0004 ETH
200451982024-06-08 6:03:3551 days ago1717826615
0x59803e5F...16a1CA760
0.00065 ETH
200451982024-06-08 6:03:3551 days ago1717826615
0x59803e5F...16a1CA760
0.0004 ETH
200442862024-06-08 3:00:2351 days ago1717815623
0x59803e5F...16a1CA760
0.00065 ETH
200442862024-06-08 3:00:2351 days ago1717815623
0x59803e5F...16a1CA760
0.0004 ETH
200424992024-06-07 21:01:2352 days ago1717794083
0x59803e5F...16a1CA760
0.00065 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BridgeTokenDest

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-15
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

/**
 * @title IGovernable Interface
 * @notice This is an interface used by the AxelarGateway contract to manage governance and mint limiter roles.
 */
interface IGovernable {
    error NotGovernance();
    error NotMintLimiter();
    error InvalidGovernance();
    error InvalidMintLimiter();

    event GovernanceTransferred(address indexed previousGovernance, address indexed newGovernance);
    event MintLimiterTransferred(address indexed previousGovernance, address indexed newGovernance);

    /**
     * @notice Returns the governance address.
     * @return address of the governance
     */
    function governance() external view returns (address);

    /**
     * @notice Returns the mint limiter address.
     * @return address of the mint limiter
     */
    function mintLimiter() external view returns (address);

    /**
     * @notice Transfer the governance role to another address.
     * @param newGovernance The new governance address
     */
    function transferGovernance(address newGovernance) external;

    /**
     * @notice Transfer the mint limiter role to another address.
     * @param newGovernance The new mint limiter address
     */
    function transferMintLimiter(address newGovernance) external;
}

// General interface for upgradable contracts
interface IContractIdentifier {
    /**
     * @notice Returns the contract ID. It can be used as a check during upgrades.
     * @dev Meant to be overridden in derived contracts.
     * @return bytes32 The contract ID
     */
    function contractId() external pure returns (bytes32);
}


interface IImplementation is IContractIdentifier {
    error NotProxy();

    function setup(bytes calldata data) external;
}


/**
 * @title IOwnable Interface
 * @notice IOwnable is an interface that abstracts the implementation of a
 * contract with ownership control features. It's commonly used in upgradable
 * contracts and includes the functionality to get current owner, transfer
 * ownership, and propose and accept ownership.
 */
interface IOwnable {
    error NotOwner();
    error InvalidOwner();
    error InvalidOwnerAddress();

    event OwnershipTransferStarted(address indexed newOwner);
    event OwnershipTransferred(address indexed newOwner);

    /**
     * @notice Returns the current owner of the contract.
     * @return address The address of the current owner
     */
    function owner() external view returns (address);

    /**
     * @notice Returns the address of the pending owner of the contract.
     * @return address The address of the pending owner
     */
    function pendingOwner() external view returns (address);

    /**
     * @notice Transfers ownership of the contract to a new address
     * @param newOwner The address to transfer ownership to
     */
    function transferOwnership(address newOwner) external;

    /**
     * @notice Proposes to transfer the contract's ownership to a new address.
     * The new owner needs to accept the ownership explicitly.
     * @param newOwner The address to transfer ownership to
     */
    function proposeOwnership(address newOwner) external;

    /**
     * @notice Transfers ownership to the pending owner.
     * @dev Can only be called by the pending owner
     */
    function acceptOwnership() external;
}

// General interface for upgradable contracts
interface IUpgradable is IOwnable, IImplementation {
    error InvalidCodeHash();
    error InvalidImplementation();
    error SetupFailed();

    event Upgraded(address indexed newImplementation);

    function implementation() external view returns (address);

    function upgrade(
        address newImplementation,
        bytes32 newImplementationCodeHash,
        bytes calldata params
    ) external;
}

/**
 * @title IAxelarGasService Interface
 * @notice This is an interface for the AxelarGasService contract which manages gas payments
 * and refunds for cross-chain communication on the Axelar network.
 * @dev This interface inherits IUpgradable
 */
interface IAxelarGasService is IUpgradable {
    error NothingReceived();
    error InvalidAddress();
    error NotCollector();
    error InvalidAmounts();

    event GasPaidForContractCall(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event GasPaidForContractCallWithToken(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        string symbol,
        uint256 amount,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event NativeGasPaidForContractCall(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event NativeGasPaidForContractCallWithToken(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        string symbol,
        uint256 amount,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event GasPaidForExpressCall(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event GasPaidForExpressCallWithToken(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        string symbol,
        uint256 amount,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event NativeGasPaidForExpressCall(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event NativeGasPaidForExpressCallWithToken(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        string symbol,
        uint256 amount,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event GasAdded(
        bytes32 indexed txHash,
        uint256 indexed logIndex,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event NativeGasAdded(bytes32 indexed txHash, uint256 indexed logIndex, uint256 gasFeeAmount, address refundAddress);

    event ExpressGasAdded(
        bytes32 indexed txHash,
        uint256 indexed logIndex,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event NativeExpressGasAdded(
        bytes32 indexed txHash,
        uint256 indexed logIndex,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event Refunded(
        bytes32 indexed txHash,
        uint256 indexed logIndex,
        address payable receiver,
        address token,
        uint256 amount
    );

    /**
     * @notice Pay for gas using ERC20 tokens for a contract call on a destination chain.
     * @dev This function is called on the source chain before calling the gateway to execute a remote contract.
     * @param sender The address making the payment
     * @param destinationChain The target chain where the contract call will be made
     * @param destinationAddress The target address on the destination chain
     * @param payload Data payload for the contract call
     * @param gasToken The address of the ERC20 token used to pay for gas
     * @param gasFeeAmount The amount of tokens to pay for gas
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function payGasForContractCall(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external;

    /**
     * @notice Pay for gas using ERC20 tokens for a contract call with tokens on a destination chain.
     * @dev This function is called on the source chain before calling the gateway to execute a remote contract.
     * @param sender The address making the payment
     * @param destinationChain The target chain where the contract call with tokens will be made
     * @param destinationAddress The target address on the destination chain
     * @param payload Data payload for the contract call with tokens
     * @param symbol The symbol of the token to be sent with the call
     * @param amount The amount of tokens to be sent with the call
     * @param gasToken The address of the ERC20 token used to pay for gas
     * @param gasFeeAmount The amount of tokens to pay for gas
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function payGasForContractCallWithToken(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        string calldata symbol,
        uint256 amount,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external;

    /**
     * @notice Pay for gas using native currency for a contract call on a destination chain.
     * @dev This function is called on the source chain before calling the gateway to execute a remote contract.
     * @param sender The address making the payment
     * @param destinationChain The target chain where the contract call will be made
     * @param destinationAddress The target address on the destination chain
     * @param payload Data payload for the contract call
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function payNativeGasForContractCall(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        address refundAddress
    ) external payable;

    /**
     * @notice Pay for gas using native currency for a contract call with tokens on a destination chain.
     * @dev This function is called on the source chain before calling the gateway to execute a remote contract.
     * @param sender The address making the payment
     * @param destinationChain The target chain where the contract call with tokens will be made
     * @param destinationAddress The target address on the destination chain
     * @param payload Data payload for the contract call with tokens
     * @param symbol The symbol of the token to be sent with the call
     * @param amount The amount of tokens to be sent with the call
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function payNativeGasForContractCallWithToken(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        string calldata symbol,
        uint256 amount,
        address refundAddress
    ) external payable;

    /**
     * @notice Pay for gas using ERC20 tokens for an express contract call on a destination chain.
     * @dev This function is called on the source chain before calling the gateway to express execute a remote contract.
     * @param sender The address making the payment
     * @param destinationChain The target chain where the contract call will be made
     * @param destinationAddress The target address on the destination chain
     * @param payload Data payload for the contract call
     * @param gasToken The address of the ERC20 token used to pay for gas
     * @param gasFeeAmount The amount of tokens to pay for gas
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function payGasForExpressCall(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external;

    /**
     * @notice Pay for gas using ERC20 tokens for an express contract call with tokens on a destination chain.
     * @dev This function is called on the source chain before calling the gateway to express execute a remote contract.
     * @param sender The address making the payment
     * @param destinationChain The target chain where the contract call with tokens will be made
     * @param destinationAddress The target address on the destination chain
     * @param payload Data payload for the contract call with tokens
     * @param symbol The symbol of the token to be sent with the call
     * @param amount The amount of tokens to be sent with the call
     * @param gasToken The address of the ERC20 token used to pay for gas
     * @param gasFeeAmount The amount of tokens to pay for gas
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function payGasForExpressCallWithToken(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        string calldata symbol,
        uint256 amount,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external;

    /**
     * @notice Pay for gas using native currency for an express contract call on a destination chain.
     * @dev This function is called on the source chain before calling the gateway to express execute a remote contract.
     * @param sender The address making the payment
     * @param destinationChain The target chain where the contract call will be made
     * @param destinationAddress The target address on the destination chain
     * @param payload Data payload for the contract call
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function payNativeGasForExpressCall(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        address refundAddress
    ) external payable;

    /**
     * @notice Pay for gas using native currency for an express contract call with tokens on a destination chain.
     * @dev This function is called on the source chain before calling the gateway to express execute a remote contract.
     * @param sender The address making the payment
     * @param destinationChain The target chain where the contract call with tokens will be made
     * @param destinationAddress The target address on the destination chain
     * @param payload Data payload for the contract call with tokens
     * @param symbol The symbol of the token to be sent with the call
     * @param amount The amount of tokens to be sent with the call
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function payNativeGasForExpressCallWithToken(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        string calldata symbol,
        uint256 amount,
        address refundAddress
    ) external payable;

    /**
     * @notice Add additional gas payment using ERC20 tokens after initiating a cross-chain call.
     * @dev This function can be called on the source chain after calling the gateway to execute a remote contract.
     * @param txHash The transaction hash of the cross-chain call
     * @param logIndex The log index for the cross-chain call
     * @param gasToken The ERC20 token address used to add gas
     * @param gasFeeAmount The amount of tokens to add as gas
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function addGas(
        bytes32 txHash,
        uint256 logIndex,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external;

    /**
     * @notice Add additional gas payment using native currency after initiating a cross-chain call.
     * @dev This function can be called on the source chain after calling the gateway to execute a remote contract.
     * @param txHash The transaction hash of the cross-chain call
     * @param logIndex The log index for the cross-chain call
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function addNativeGas(
        bytes32 txHash,
        uint256 logIndex,
        address refundAddress
    ) external payable;

    /**
     * @notice Add additional gas payment using ERC20 tokens after initiating an express cross-chain call.
     * @dev This function can be called on the source chain after calling the gateway to express execute a remote contract.
     * @param txHash The transaction hash of the cross-chain call
     * @param logIndex The log index for the cross-chain call
     * @param gasToken The ERC20 token address used to add gas
     * @param gasFeeAmount The amount of tokens to add as gas
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function addExpressGas(
        bytes32 txHash,
        uint256 logIndex,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external;

    /**
     * @notice Add additional gas payment using native currency after initiating an express cross-chain call.
     * @dev This function can be called on the source chain after calling the gateway to express execute a remote contract.
     * @param txHash The transaction hash of the cross-chain call
     * @param logIndex The log index for the cross-chain call
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function addNativeExpressGas(
        bytes32 txHash,
        uint256 logIndex,
        address refundAddress
    ) external payable;

    /**
     * @notice Allows the gasCollector to collect accumulated fees from the contract.
     * @dev Use address(0) as the token address for native currency.
     * @param receiver The address to receive the collected fees
     * @param tokens Array of token addresses to be collected
     * @param amounts Array of amounts to be collected for each respective token address
     */
    function collectFees(
        address payable receiver,
        address[] calldata tokens,
        uint256[] calldata amounts
    ) external;

    /**
     * @notice Refunds gas payment to the receiver in relation to a specific cross-chain transaction.
     * @dev Only callable by the gasCollector.
     * @dev Use address(0) as the token address to refund native currency.
     * @param txHash The transaction hash of the cross-chain call
     * @param logIndex The log index for the cross-chain call
     * @param receiver The address to receive the refund
     * @param token The token address to be refunded
     * @param amount The amount to refund
     */
    function refund(
        bytes32 txHash,
        uint256 logIndex,
        address payable receiver,
        address token,
        uint256 amount
    ) external;

    /**
     * @notice Returns the address of the designated gas collector.
     * @return address of the gas collector
     */
    function gasCollector() external returns (address);
}

interface IAxelarExecutable {
    error InvalidAddress();
    error NotApprovedByGateway();

    function gateway() external view returns (IAxelarGateway);

    function execute(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes calldata payload
    ) external;

    function executeWithToken(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes calldata payload,
        string calldata tokenSymbol,
        uint256 amount
    ) external;
}

interface IAxelarGateway is IImplementation, IGovernable {
    /**********\
    |* Errors *|
    \**********/

    error NotSelf();
    error InvalidCodeHash();
    error SetupFailed();
    error InvalidAuthModule();
    error InvalidTokenDeployer();
    error InvalidAmount();
    error InvalidChainId();
    error InvalidCommands();
    error TokenDoesNotExist(string symbol);
    error TokenAlreadyExists(string symbol);
    error TokenDeployFailed(string symbol);
    error TokenContractDoesNotExist(address token);
    error BurnFailed(string symbol);
    error MintFailed(string symbol);
    error InvalidSetMintLimitsParams();
    error ExceedMintLimit(string symbol);

    /**********\
    |* Events *|
    \**********/

    event TokenSent(
        address indexed sender,
        string destinationChain,
        string destinationAddress,
        string symbol,
        uint256 amount
    );

    event ContractCall(
        address indexed sender,
        string destinationChain,
        string destinationContractAddress,
        bytes32 indexed payloadHash,
        bytes payload
    );

    event ContractCallWithToken(
        address indexed sender,
        string destinationChain,
        string destinationContractAddress,
        bytes32 indexed payloadHash,
        bytes payload,
        string symbol,
        uint256 amount
    );

    event Executed(bytes32 indexed commandId);

    event TokenDeployed(string symbol, address tokenAddresses);

    event ContractCallApproved(
        bytes32 indexed commandId,
        string sourceChain,
        string sourceAddress,
        address indexed contractAddress,
        bytes32 indexed payloadHash,
        bytes32 sourceTxHash,
        uint256 sourceEventIndex
    );

    event ContractCallApprovedWithMint(
        bytes32 indexed commandId,
        string sourceChain,
        string sourceAddress,
        address indexed contractAddress,
        bytes32 indexed payloadHash,
        string symbol,
        uint256 amount,
        bytes32 sourceTxHash,
        uint256 sourceEventIndex
    );

    event ContractCallExecuted(bytes32 indexed commandId);

    event TokenMintLimitUpdated(string symbol, uint256 limit);

    event OperatorshipTransferred(bytes newOperatorsData);

    event Upgraded(address indexed implementation);

    /********************\
    |* Public Functions *|
    \********************/

    function sendToken(
        string calldata destinationChain,
        string calldata destinationAddress,
        string calldata symbol,
        uint256 amount
    ) external;

    function callContract(
        string calldata destinationChain,
        string calldata contractAddress,
        bytes calldata payload
    ) external;

    function callContractWithToken(
        string calldata destinationChain,
        string calldata contractAddress,
        bytes calldata payload,
        string calldata symbol,
        uint256 amount
    ) external;

    function isContractCallApproved(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        address contractAddress,
        bytes32 payloadHash
    ) external view returns (bool);

    function isContractCallAndMintApproved(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        address contractAddress,
        bytes32 payloadHash,
        string calldata symbol,
        uint256 amount
    ) external view returns (bool);

    function validateContractCall(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes32 payloadHash
    ) external returns (bool);

    function validateContractCallAndMint(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes32 payloadHash,
        string calldata symbol,
        uint256 amount
    ) external returns (bool);

    /***********\
    |* Getters *|
    \***********/

    function authModule() external view returns (address);

    function tokenDeployer() external view returns (address);

    function tokenMintLimit(string memory symbol) external view returns (uint256);

    function tokenMintAmount(string memory symbol) external view returns (uint256);

    function allTokensFrozen() external view returns (bool);

    function implementation() external view returns (address);

    function tokenAddresses(string memory symbol) external view returns (address);

    function tokenFrozen(string memory symbol) external view returns (bool);

    function isCommandExecuted(bytes32 commandId) external view returns (bool);

    /************************\
    |* Governance Functions *|
    \************************/

    function setTokenMintLimits(string[] calldata symbols, uint256[] calldata limits) external;

    function upgrade(
        address newImplementation,
        bytes32 newImplementationCodeHash,
        bytes calldata setupParams
    ) external;

    /**********************\
    |* External Functions *|
    \**********************/

    function execute(bytes calldata input) external;
}

contract AxelarExecutable is IAxelarExecutable {
    IAxelarGateway public immutable gateway;

    constructor(address gateway_) {
        if (gateway_ == address(0)) revert InvalidAddress();

        gateway = IAxelarGateway(gateway_);
    }

    function execute(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes calldata payload
    ) external {
        bytes32 payloadHash = keccak256(payload);

        if (!gateway.validateContractCall(commandId, sourceChain, sourceAddress, payloadHash))
            revert NotApprovedByGateway();

        _execute(sourceChain, sourceAddress, payload);
    }

    function executeWithToken(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes calldata payload,
        string calldata tokenSymbol,
        uint256 amount
    ) external {
        bytes32 payloadHash = keccak256(payload);

        if (
            !gateway.validateContractCallAndMint(
                commandId,
                sourceChain,
                sourceAddress,
                payloadHash,
                tokenSymbol,
                amount
            )
        ) revert NotApprovedByGateway();

        _executeWithToken(sourceChain, sourceAddress, payload, tokenSymbol, amount);
    }

    function _execute(
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes calldata payload
    ) internal virtual {}

    function _executeWithToken(
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes calldata payload,
        string calldata tokenSymbol,
        uint256 amount
    ) internal virtual {}
}


/**
 * @title Owner
 * @dev Set & change owner
 */
contract Ownable {

    address private owner;
    
    // event for EVM logging
    event OwnerSet(address indexed oldOwner, address indexed newOwner);
    
    // modifier to check if caller is owner
    modifier onlyOwner() {
        // If the first argument of 'require' evaluates to 'false', execution terminates and all
        // changes to the state and to Ether balances are reverted.
        // This used to consume all gas in old EVM versions, but not anymore.
        // It is often a good idea to use 'require' to check if functions are called correctly.
        // As a second argument, you can also provide an explanation about what went wrong.
        require(msg.sender == owner, "Caller is not owner");
        _;
    }
    
    /**
     * @dev Set contract deployer as owner
     */
    constructor() {
        owner = msg.sender; // 'msg.sender' is sender of current call, contract deployer for a constructor
        emit OwnerSet(address(0), owner);
    }

    /**
     * @dev Change owner
     * @param newOwner address of new owner
     */
    function changeOwner(address newOwner) public onlyOwner {
        emit OwnerSet(owner, newOwner);
        owner = newOwner;
    }

    /**
     * @dev Return owner address 
     * @return address of owner
     */
    function getOwner() external view returns (address) {
        return owner;
    }
}


interface IERC20 {

    function totalSupply() external view returns (uint256);
    
    function symbol() external view returns(string memory);
    
    function name() external view returns(string memory);

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

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

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

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

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

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

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

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::safeApprove: approve failed'
        );
    }

    function safeTransfer(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::safeTransfer: transfer failed'
        );
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::transferFrom: transferFrom failed'
        );
    }

    function safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, 'TransferHelper::safeTransferETH: ETH transfer failed');
    }
}

/**
    The Bridge Token Source Contract holds the tokens
    While the wrapped version of these tokens exist on other chains
    The BridgeTokenDest contract should tell the BridgeTokenSrc contract to release tokens to an address
    And the BridgeTokenDest contract should ensure that it follows the appropriate rules

    This contract should only receive messages from the source chain and source address of the token wrapper
 */
contract BridgeTokenDest is AxelarExecutable, Ownable, IERC20 {

    // total supply
    uint256 private _totalSupply;

    // token data
    string private _name;
    string private _symbol;
    uint8  private immutable _decimals;

    // balances and allowances
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;

    /**
        Axelar Gas Service Contract
     */
    IAxelarGasService public immutable gasService;

    /**
        Source Chain for BridgeTokenSource
     */
    string public sourceChain;

    /**
        Source Address for BridgeTokenSource
     */
    string public sourceAddress;

    /**
        Min Gas Required
     */
    uint256 public minGas;

    /**
        Gas Fee For Platform
     */
    uint256 public platformFee;

    /**
        Fee Recipient
     */
    address public upchargeFeeReceiver;

    // permissions
    struct Permissions {
        bool isFeeExempt;
        bool isLiquidityPool;
    }
    mapping ( address => Permissions ) public permissions;

    // Fees
    uint256 public buyFee = 1000;
    uint256 public sellFee = 1000;
    uint256 public transferFee = 0;
    uint256 public constant FEE_DENOMINATOR = 10_000;

    // Fee Recipient
    address public feeRecipient;
    bool public autoTrigger;

    // Bridging Blocked
    bool public bridgingBlocked;

    // Max totals
    uint256 public MAX_TOTAL_SUPPLY = 95_000_000 * 10**18;

    constructor(
        /** Axelar */
        address gateway_, 
        address gasService_,

        /** Wrapped Token Info */
        string memory name_,
        string memory symbol_,
        uint8 decimals_,

        /** Platform */
        uint256 minGas_,
        uint256 platformFee_,
        address upchargeFeeReceiver_,

        /** Source Bridge */
        string memory sourceChain_,
        string memory sourceAddress_
    ) AxelarExecutable(gateway_) {

        // set token info
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;

        // set gas service info
        gasService = IAxelarGasService(gasService_);

        // set bridge info
        minGas = minGas_;
        platformFee = platformFee_;
        upchargeFeeReceiver = upchargeFeeReceiver_;

        // set chain and address
        sourceChain = sourceChain_;
        sourceAddress = sourceAddress_;

        // emit event
        emit Transfer(address(0), msg.sender, 0);
    }

    function withdrawForeignToken(address token_, address to, uint256 amount) external onlyOwner {
        TransferHelper.safeTransfer(token_, to, amount);
    }

    function withdrawETH(address to, uint256 amount) external onlyOwner {
        TransferHelper.safeTransferETH(to, amount);
    }

    function setMinGas(uint256 minGas_) external onlyOwner {
        minGas = minGas_;
    }

    function setPlatformFee(uint256 platformFee_) external onlyOwner {
        platformFee = platformFee_;
    }

    function setUpchargeFeeReceiver(address upchargeFeeReceiver_) external onlyOwner {
        upchargeFeeReceiver = upchargeFeeReceiver_;
    }

    function setFeeExempt(address account, bool isFeeExempt) external onlyOwner {
        permissions[account].isFeeExempt = isFeeExempt;
    }

    function setLiquidityPool(address account, bool isLiquidityPool) external onlyOwner {
        permissions[account].isLiquidityPool = isLiquidityPool;
    }

    function setFeeRecipient(address feeRecipient_) external onlyOwner {
        feeRecipient = feeRecipient_;
    }

    function setBuyFee(uint256 buyFee_) external onlyOwner {
        buyFee = buyFee_;
    }

    function setSellFee(uint256 sellFee_) external onlyOwner {
        sellFee = sellFee_;
    }

    function setTransferFee(uint256 transferFee_) external onlyOwner {
        transferFee = transferFee_;
    }

    function setAutoTrigger(bool autoTrigger_) external onlyOwner {
        autoTrigger = autoTrigger_;
    }

    function setBridgingBlocked(bool bridgingBlocked_) external onlyOwner {
        bridgingBlocked = bridgingBlocked_;
    }

    function setMaxTotalSupply(uint256 maxTotalSupply_) external onlyOwner {
        MAX_TOTAL_SUPPLY = maxTotalSupply_;
    }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    /** Transfer Function */
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    /** Transfer Function */
    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        require(
            _allowances[sender][msg.sender] >= amount,
            'Insufficient Allowance'
        );
        _allowances[sender][msg.sender] -= amount;
        return _transferFrom(sender, recipient, amount);
    }

    /**
        Used To Burn Tokens On This Chain, and Unlock them on the destination chain
     */
    function bridgeBack(
        address to,
        uint256 amount
    ) external payable {
        require(
            amount > 0,
            'Zero Amount'
        );
        require(
            to != address(0),
            'Zero Recipient'
        );
        require(
            msg.value >= ( minGas + platformFee ),
            'Min Gas'
        );
        require(
            _balances[msg.sender] >= amount,
            'Insufficient Balance'
        );
        require(
            bridgingBlocked == false,
            'Bridging Blocked'
        );

        // send platform fee to owner
        if (platformFee > 0) {
            TransferHelper.safeTransferETH(upchargeFeeReceiver, platformFee);
        }

        // subtract platform fee from value
        uint256 gasForCall = msg.value - platformFee;

        // burn internal tokens
        _burn(msg.sender, amount);

        // create payload using the amount burned
        bytes memory payload = abi.encode(to, amount);

        // pass payload into gasService, paying the gas
        // NOTE: take fee out of gas sent
        gasService.payNativeGasForContractCall{value: gasForCall} (
            address(this),
            sourceChain,
            sourceAddress,
            payload,
            msg.sender
        );

        // Call Contract On The Gateway
        gateway.callContract(sourceChain, sourceAddress, payload);
    }




    /**
     * @notice Add additional gas payment using native currency after initiating a cross-chain call.
     * @dev This function can be called on the source chain after calling the gateway to execute a remote contract.
     * @param txHash The transaction hash of the cross-chain call
     * @param logIndex The log index for the cross-chain call
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function addNativeGas(
        bytes32 txHash,
        uint256 logIndex,
        address refundAddress
    ) external payable {
        gasService.addNativeGas{value: msg.value}(txHash, logIndex, refundAddress);
    }

    /**
     * @notice Add additional gas payment using native currency after initiating an express cross-chain call.
     * @dev This function can be called on the source chain after calling the gateway to express execute a remote contract.
     * @param txHash The transaction hash of the cross-chain call
     * @param logIndex The log index for the cross-chain call
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function addNativeExpressGas(
        bytes32 txHash,
        uint256 logIndex,
        address refundAddress
    ) external payable {
        gasService.addNativeExpressGas{value: msg.value}(txHash, logIndex, refundAddress);
    }





    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(
            sender != address(0),
            'Zero Sender'
        );
        require(
            recipient != address(0),
            'Zero Recipient'
        );
        require(
            amount > 0,
            'Zero Amount'
        );
        require(
            _balances[sender] >= amount,
            'Insufficient Balance'
        );
        
        // decrement sender balance
        _balances[sender] -= amount;

        // fee for transaction
        (uint256 fee) = getTax(sender, recipient, amount);

        // give amount to recipient less fee
        uint256 sendAmount = amount - fee;
        require(sendAmount > 0, 'Zero Amount');

        // allocate balance
        unchecked {
            _balances[recipient] += sendAmount;
        }
        emit Transfer(sender, recipient, sendAmount);

        // allocate fee if any
        if (fee > 0) {

            // if recipient field is valid
            bool isValidRecipient = feeRecipient != address(0) && feeRecipient != address(this);

            // allocate amount to recipient
            address feeRecipient_ = isValidRecipient ? feeRecipient : address(this);

            // allocate fee
            unchecked {
                _balances[feeRecipient_] += fee;
            }
            emit Transfer(sender, feeRecipient_, fee);

            // if valid and trigger is enabled, trigger tokenomics mid transfer
            if (autoTrigger && isValidRecipient) {
                (bool success,) = feeRecipient_.call(
                    abi.encodeWithSelector(bytes4(keccak256(bytes('trigger()'))))
                );
                success;
            }
        }

        // emit Transfer Event
        return true;
    }

    function getTax(address sender, address recipient, uint256 amount) public view returns (uint256) {
        if ( permissions[sender].isFeeExempt || permissions[recipient].isFeeExempt ) {
            return 0;
        }
        return 
            permissions[recipient].isLiquidityPool ? (amount * sellFee) / FEE_DENOMINATOR :
            permissions[sender].isLiquidityPool ? (amount * buyFee) / FEE_DENOMINATOR : 
            (amount * transferFee) / FEE_DENOMINATOR;
    }

    function _burn(address account, uint256 amount) internal {
        require(
            account != address(0),
            'Zero Address'
        );
        require(
            amount > 0,
            'Zero Amount'
        );
        require(
            amount <= _balances[account],
            'Insufficient Balance'
        );
        _balances[account] -= amount;
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }

    function _mint(address account, uint256 amount) internal {
        require(
            account != address(0),
            'Zero Address'
        );
        require(
            amount > 0,
            'Zero Amount'
        );
        unchecked {
            _balances[account] += amount;
            _totalSupply += amount;
        }
        require(
            _totalSupply <= MAX_TOTAL_SUPPLY,
            'Exceeds Max Total Supply'
        );
        emit Transfer(address(0), account, amount);
    }

    function _execute(
        string calldata sourceChain_,
        string calldata sourceAddress_,
        bytes calldata payload_
    ) internal override {
        require(
            keccak256(bytes(sourceChain_)) == keccak256(bytes(sourceChain)),
            'Invalid Source Chain'
        );
        require(
            keccak256(bytes(sourceAddress_)) == keccak256(bytes(sourceAddress)),
            'Invalid Source Address'
        );
        require(
            bridgingBlocked == false,
            'Bridging Blocked'
        );
        
        // decode recipient and amount from payload
        (address to, uint256 amount) = abi.decode(payload_, (address, uint256));

        // mint tokens for user
        _mint(to, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"gateway_","type":"address"},{"internalType":"address","name":"gasService_","type":"address"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"minGas_","type":"uint256"},{"internalType":"uint256","name":"platformFee_","type":"uint256"},{"internalType":"address","name":"upchargeFeeReceiver_","type":"address"},{"internalType":"string","name":"sourceChain_","type":"string"},{"internalType":"string","name":"sourceAddress_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"NotApprovedByGateway","type":"error"},{"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":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerSet","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":"FEE_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint256","name":"logIndex","type":"uint256"},{"internalType":"address","name":"refundAddress","type":"address"}],"name":"addNativeExpressGas","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint256","name":"logIndex","type":"uint256"},{"internalType":"address","name":"refundAddress","type":"address"}],"name":"addNativeGas","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoTrigger","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bridgeBack","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"bridgingBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"commandId","type":"bytes32"},{"internalType":"string","name":"sourceChain","type":"string"},{"internalType":"string","name":"sourceAddress","type":"string"},{"internalType":"bytes","name":"payload","type":"bytes"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"commandId","type":"bytes32"},{"internalType":"string","name":"sourceChain","type":"string"},{"internalType":"string","name":"sourceAddress","type":"string"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"executeWithToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasService","outputs":[{"internalType":"contract IAxelarGasService","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gateway","outputs":[{"internalType":"contract IAxelarGateway","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"permissions","outputs":[{"internalType":"bool","name":"isFeeExempt","type":"bool"},{"internalType":"bool","name":"isLiquidityPool","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"autoTrigger_","type":"bool"}],"name":"setAutoTrigger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bridgingBlocked_","type":"bool"}],"name":"setBridgingBlocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee_","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isFeeExempt","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feeRecipient_","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isLiquidityPool","type":"bool"}],"name":"setLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTotalSupply_","type":"uint256"}],"name":"setMaxTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minGas_","type":"uint256"}],"name":"setMinGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"platformFee_","type":"uint256"}],"name":"setPlatformFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellFee_","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"transferFee_","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"upchargeFeeReceiver_","type":"address"}],"name":"setUpchargeFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sourceAddress","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sourceChain","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upchargeFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e06040526103e8600c556103e8600d555f600e556a4e950851be0c2ebf0000006010553480156200002f575f80fd5b50604051620029d9380380620029d9833981016040819052620000529162000268565b896001600160a01b0381166200007b5760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b03166080525f80546001600160a01b0319163390811782556040519091907f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a735908290a36002620000d3898262000404565b506003620000e2888262000404565b5060ff861660a0526001600160a01b0389811660c05260088690556009859055600a80546001600160a01b031916918516919091179055600662000127838262000404565b50600762000136828262000404565b506040515f80825233917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050505050505050620004cc565b80516001600160a01b038116811462000194575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620001bd575f80fd5b81516001600160401b0380821115620001da57620001da62000199565b604051601f8301601f19908116603f0116810190828211818310171562000205576200020562000199565b8160405283815260209250868385880101111562000221575f80fd5b5f91505b8382101562000244578582018301518183018401529082019062000225565b5f93810190920192909252949350505050565b805160ff8116811462000194575f80fd5b5f805f805f805f805f806101408b8d03121562000283575f80fd5b6200028e8b6200017d565b99506200029e60208c016200017d565b60408c01519099506001600160401b0380821115620002bb575f80fd5b620002c98e838f01620001ad565b995060608d0151915080821115620002df575f80fd5b620002ed8e838f01620001ad565b9850620002fd60808e0162000257565b975060a08d0151965060c08d015195506200031b60e08e016200017d565b94506101008d015191508082111562000332575f80fd5b620003408e838f01620001ad565b93506101208d015191508082111562000357575f80fd5b50620003668d828e01620001ad565b9150509295989b9194979a5092959850565b600181811c908216806200038d57607f821691505b602082108103620003ac57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620003ff575f81815260208120601f850160051c81016020861015620003da5750805b601f850160051c820191505b81811015620003fb57828155600101620003e6565b5050505b505050565b81516001600160401b0381111562000420576200042062000199565b620004388162000431845462000378565b84620003b2565b602080601f8311600181146200046e575f8415620004565750858301515b5f19600386901b1c1916600185901b178555620003fb565b5f85815260208120601f198616915b828110156200049e578886015182559484019460019091019084016200047d565b5085821015620004bc57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c0516124b8620005215f395f81816105b001528181610e06015281816110f701526112c601525f61049d01525f818161037801528181610a9d01528181610d25015261134901526124b85ff3fe608060405260043610610280575f3560e01c80636a22d8cc11610155578063b34a3060116100be578063d479e97411610078578063d479e974146107be578063d73792a9146107d1578063d7ad21ac146107e6578063dd62ed3e14610805578063e74b981b14610849578063f558eb0514610868575f80fd5b8063b34a306014610719578063b94e8df214610739578063be37757a14610758578063c29c669a1461076d578063cb64ef1b1461078c578063cd433ada146107ab575f80fd5b806395d89b411161010f57806395d89b411461067f578063a6f9dae114610693578063a9059cbb146106b2578063acb2ad6f146106d1578063ad80e451146106e6578063b0fa844414610705575f80fd5b80636a22d8cc1461059f57806370a08231146105d2578063893d20e8146106065780638b4cee08146106225780638ebfc796146106415780638f02bb5b14610660575f80fd5b806323b872dd116101f757806346904840116101b157806346904840146104fb578063470624021461051a5780634782f7791461052f578063491606581461054e5780634d2384891461056d578063678f5b3c14610580575f80fd5b806323b872dd1461044157806326232a2e146104605780632b14ca5614610475578063313ce5671461048a57806333039d3d146104c75780633f3e4c11146104dc575f80fd5b8063116191b611610248578063116191b61461036757806312e8e2c3146103b2578063131417de146103d157806318160ddd146103f05780631a98b2e01461040e5780631c6ffa461461042d575f80fd5b806301e88208146102845780630659ce5c146102d757806306fdde03146102f8578063095ea7b3146103195780630cc835a314610348575b5f80fd5b34801561028f575f80fd5b506102bb61029e366004611d3a565b600b6020525f908152604090205460ff8082169161010090041682565b6040805192151583529015156020830152015b60405180910390f35b3480156102e2575f80fd5b506102f66102f1366004611d55565b610888565b005b348015610303575f80fd5b5061030c6108ca565b6040516102ce9190611de0565b348015610324575f80fd5b50610338610333366004611df2565b61095a565b60405190151581526020016102ce565b348015610353575f80fd5b506102f6610362366004611e1c565b6109c6565b348015610372575f80fd5b5061039a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ce565b3480156103bd575f80fd5b506102f66103cc366004611e1c565b6109f4565b3480156103dc575f80fd5b506102f66103eb366004611d3a565b610a22565b3480156103fb575f80fd5b506001545b6040519081526020016102ce565b348015610419575f80fd5b506102f6610428366004611e78565b610a6d565b348015610438575f80fd5b5061030c610b4c565b34801561044c575f80fd5b5061033861045b366004611d55565b610bd8565b34801561046b575f80fd5b5061040060095481565b348015610480575f80fd5b50610400600d5481565b348015610495575f80fd5b5060405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016102ce565b3480156104d2575f80fd5b5061040060105481565b3480156104e7575f80fd5b506102f66104f6366004611e1c565b610c90565b348015610506575f80fd5b50600f5461039a906001600160a01b031681565b348015610525575f80fd5b50610400600c5481565b34801561053a575f80fd5b506102f6610549366004611df2565b610cbe565b348015610559575f80fd5b506102f6610568366004611f48565b610cf5565b6102f661057b366004611fe4565b610dd9565b34801561058b575f80fd5b50600a5461039a906001600160a01b031681565b3480156105aa575f80fd5b5061039a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105dd575f80fd5b506104006105ec366004611d3a565b6001600160a01b03165f9081526004602052604090205490565b348015610611575f80fd5b505f546001600160a01b031661039a565b34801561062d575f80fd5b506102f661063c366004611e1c565b610e5c565b34801561064c575f80fd5b506102f661065b366004612027565b610e8a565b34801561066b575f80fd5b506102f661067a366004611e1c565b610edd565b34801561068a575f80fd5b5061030c610f0b565b34801561069e575f80fd5b506102f66106ad366004611d3a565b610f1a565b3480156106bd575f80fd5b506103386106cc366004611df2565b610f9c565b3480156106dc575f80fd5b50610400600e5481565b3480156106f1575f80fd5b506102f6610700366004611e1c565b610fa8565b348015610710575f80fd5b5061030c610fd6565b348015610724575f80fd5b50600f5461033890600160a81b900460ff1681565b348015610744575f80fd5b506102f661075336600461205e565b610fe3565b348015610763575f80fd5b5061040060085481565b348015610778575f80fd5b506102f6610787366004612027565b61102a565b348015610797575f80fd5b506102f66107a636600461205e565b611083565b6102f66107b9366004611fe4565b6110ca565b6102f66107cc366004611df2565b611128565b3480156107dc575f80fd5b5061040061271081565b3480156107f1575f80fd5b50610400610800366004611d55565b61139e565b348015610810575f80fd5b5061040061081f366004612079565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205490565b348015610854575f80fd5b506102f6610863366004611d3a565b61147b565b348015610873575f80fd5b50600f5461033890600160a01b900460ff1681565b5f546001600160a01b031633146108ba5760405162461bcd60e51b81526004016108b1906120a5565b60405180910390fd5b6108c58383836114c6565b505050565b6060600280546108d9906120d2565b80601f0160208091040260200160405190810160405280929190818152602001828054610905906120d2565b80156109505780601f1061092757610100808354040283529160200191610950565b820191905f5260205f20905b81548152906001019060200180831161093357829003601f168201915b5050505050905090565b335f8181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906109b49086815260200190565b60405180910390a35060015b92915050565b5f546001600160a01b031633146109ef5760405162461bcd60e51b81526004016108b1906120a5565b600c55565b5f546001600160a01b03163314610a1d5760405162461bcd60e51b81526004016108b1906120a5565b600955565b5f546001600160a01b03163314610a4b5760405162461bcd60e51b81526004016108b1906120a5565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b5f8585604051610a7e92919061210a565b604051908190038120631876eed960e01b825291506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631876eed990610ae2908e908e908e908e908e9089908d908d908d90600401612141565b6020604051808303815f875af1158015610afe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b22919061219f565b610b3f57604051631403112d60e21b815260040160405180910390fd5b5050505050505050505050565b60068054610b59906120d2565b80601f0160208091040260200160405190810160405280929190818152602001828054610b85906120d2565b8015610bd05780601f10610ba757610100808354040283529160200191610bd0565b820191905f5260205f20905b815481529060010190602001808311610bb357829003601f168201915b505050505081565b6001600160a01b0383165f908152600560209081526040808320338452909152812054821115610c435760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b60448201526064016108b1565b6001600160a01b0384165f90815260056020908152604080832033845290915281208054849290610c759084906121ce565b90915550610c8690508484846115f2565b90505b9392505050565b5f546001600160a01b03163314610cb95760405162461bcd60e51b81526004016108b1906120a5565b601055565b5f546001600160a01b03163314610ce75760405162461bcd60e51b81526004016108b1906120a5565b610cf182826118e5565b5050565b5f8282604051610d0692919061210a565b604051908190038120635f6970c360e01b825291506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635f6970c390610d64908b908b908b908b908b9089906004016121e1565b6020604051808303815f875af1158015610d80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da4919061219f565b610dc157604051631403112d60e21b815260040160405180910390fd5b610dcf8787878787876119bb565b5050505050505050565b604051634d23848960e01b815260048101849052602481018390526001600160a01b0382811660448301527f00000000000000000000000000000000000000000000000000000000000000001690634d2384899034906064015b5f604051808303818588803b158015610e4a575f80fd5b505af1158015610dcf573d5f803e3d5ffd5b5f546001600160a01b03163314610e855760405162461bcd60e51b81526004016108b1906120a5565b600d55565b5f546001600160a01b03163314610eb35760405162461bcd60e51b81526004016108b1906120a5565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610f065760405162461bcd60e51b81526004016108b1906120a5565b600e55565b6060600380546108d9906120d2565b5f546001600160a01b03163314610f435760405162461bcd60e51b81526004016108b1906120a5565b5f80546040516001600160a01b03808516939216917f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73591a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f610c893384846115f2565b5f546001600160a01b03163314610fd15760405162461bcd60e51b81526004016108b1906120a5565b600855565b60078054610b59906120d2565b5f546001600160a01b0316331461100c5760405162461bcd60e51b81526004016108b1906120a5565b600f8054911515600160a01b0260ff60a01b19909216919091179055565b5f546001600160a01b031633146110535760405162461bcd60e51b81526004016108b1906120a5565b6001600160a01b039091165f908152600b6020526040902080549115156101000261ff0019909216919091179055565b5f546001600160a01b031633146110ac5760405162461bcd60e51b81526004016108b1906120a5565b600f8054911515600160a81b0260ff60a81b19909216919091179055565b6040516366a19d6d60e11b815260048101849052602481018390526001600160a01b0382811660448301527f0000000000000000000000000000000000000000000000000000000000000000169063cd433ada903490606401610e33565b5f81116111475760405162461bcd60e51b81526004016108b190612221565b6001600160a01b03821661118e5760405162461bcd60e51b815260206004820152600e60248201526d16995c9bc8149958da5c1a595b9d60921b60448201526064016108b1565b60095460085461119e9190612246565b3410156111d75760405162461bcd60e51b81526020600482015260076024820152664d696e2047617360c81b60448201526064016108b1565b335f908152600460205260409020548111156112055760405162461bcd60e51b81526004016108b190612259565b600f54600160a81b900460ff16156112525760405162461bcd60e51b815260206004820152601060248201526f109c9a5919da5b99c8109b1bd8dad95960821b60448201526064016108b1565b6009541561127357600a54600954611273916001600160a01b0316906118e5565b5f6009543461128291906121ce565b905061128e3383611b0c565b604080516001600160a01b0385811660208301528183018590528251808303840181526060830193849052630c93e3bb60e01b9093527f00000000000000000000000000000000000000000000000000000000000000001690630c93e3bb90849061130790309060069060079088903390606401612300565b5f604051808303818588803b15801561131e575f80fd5b505af1158015611330573d5f803e3d5ffd5b5050604051631c92115f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169350631c92115f92506113879150600690600790869060040161235d565b5f604051808303815f87803b158015610e4a575f80fd5b6001600160a01b0383165f908152600b602052604081205460ff16806113db57506001600160a01b0383165f908152600b602052604090205460ff165b156113e757505f610c89565b6001600160a01b0383165f908152600b6020526040902054610100900460ff16611460576001600160a01b0384165f908152600b6020526040902054610100900460ff1661144f57612710600e5483611440919061239f565b61144a91906123b6565b610c86565b612710600c5483611440919061239f565b612710600d5483611471919061239f565b610c8691906123b6565b5f546001600160a01b031633146114a45760405162461bcd60e51b81526004016108b1906120a5565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f9283929087169161152191906123d5565b5f604051808303815f865af19150503d805f811461155a576040519150601f19603f3d011682016040523d82523d5f602084013e61155f565b606091505b5091509150818015611589575080511580611589575080806020019051810190611589919061219f565b6115eb5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b60648201526084016108b1565b5050505050565b5f6001600160a01b0384166116375760405162461bcd60e51b815260206004820152600b60248201526a2d32b9379029b2b73232b960a91b60448201526064016108b1565b6001600160a01b03831661167e5760405162461bcd60e51b815260206004820152600e60248201526d16995c9bc8149958da5c1a595b9d60921b60448201526064016108b1565b5f821161169d5760405162461bcd60e51b81526004016108b190612221565b6001600160a01b0384165f908152600460205260409020548211156116d45760405162461bcd60e51b81526004016108b190612259565b6001600160a01b0384165f90815260046020526040812080548492906116fb9084906121ce565b909155505f905061170d85858561139e565b90505f61171a82856121ce565b90505f811161173b5760405162461bcd60e51b81526004016108b190612221565b6001600160a01b038086165f81815260046020526040908190208054850190555190918816905f805160206124638339815191529061177d9085815260200190565b60405180910390a381156118d957600f545f906001600160a01b0316158015906117b25750600f546001600160a01b03163014155b90505f816117c057306117cd565b600f546001600160a01b03165b6001600160a01b038082165f81815260046020526040908190208054890190555192935091908a16905f80516020612463833981519152906118129088815260200190565b60405180910390a3600f54600160a01b900460ff1680156118305750815b156118d657604080518082018252600981526874726967676572282960b81b60209182015281516004815260248101835290810180516001600160e01b0316630ffd91a760e31b17905290515f916001600160a01b0384169161189391906123d5565b5f604051808303815f865af19150503d805f81146118cc576040519150601f19603f3d011682016040523d82523d5f602084013e6118d1565b606091505b505050505b50505b50600195945050505050565b604080515f808252602082019092526001600160a01b03841690839060405161190e91906123d5565b5f6040518083038185875af1925050503d805f8114611948576040519150601f19603f3d011682016040523d82523d5f602084013e61194d565b606091505b50509050806108c55760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b60648201526084016108b1565b60066040516119ca91906123f0565b604051809103902086866040516119e292919061210a565b604051809103902014611a2e5760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21029b7bab931b29021b430b4b760611b60448201526064016108b1565b6007604051611a3d91906123f0565b60405180910390208484604051611a5592919061210a565b604051809103902014611aa35760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420536f75726365204164647265737360501b60448201526064016108b1565b600f54600160a81b900460ff1615611af05760405162461bcd60e51b815260206004820152601060248201526f109c9a5919da5b99c8109b1bd8dad95960821b60448201526064016108b1565b5f80611afe83850185611df2565b91509150610dcf8282611c1d565b6001600160a01b038216611b515760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016108b1565b5f8111611b705760405162461bcd60e51b81526004016108b190612221565b6001600160a01b0382165f90815260046020526040902054811115611ba75760405162461bcd60e51b81526004016108b190612259565b6001600160a01b0382165f9081526004602052604081208054839290611bce9084906121ce565b925050819055508060015f828254611be691906121ce565b90915550506040518181525f906001600160a01b038416905f80516020612463833981519152906020015b60405180910390a35050565b6001600160a01b038216611c625760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016108b1565b5f8111611c815760405162461bcd60e51b81526004016108b190612221565b6001600160a01b0382165f908152600460205260409020805482019055600180548201908190556010541015611cf95760405162461bcd60e51b815260206004820152601860248201527f45786365656473204d617820546f74616c20537570706c79000000000000000060448201526064016108b1565b6040518181526001600160a01b038316905f905f8051602061246383398151915290602001611c11565b6001600160a01b0381168114611d37575f80fd5b50565b5f60208284031215611d4a575f80fd5b8135610c8981611d23565b5f805f60608486031215611d67575f80fd5b8335611d7281611d23565b92506020840135611d8281611d23565b929592945050506040919091013590565b5f5b83811015611dad578181015183820152602001611d95565b50505f910152565b5f8151808452611dcc816020860160208601611d93565b601f01601f19169290920160200192915050565b602081525f610c896020830184611db5565b5f8060408385031215611e03575f80fd5b8235611e0e81611d23565b946020939093013593505050565b5f60208284031215611e2c575f80fd5b5035919050565b5f8083601f840112611e43575f80fd5b50813567ffffffffffffffff811115611e5a575f80fd5b602083019150836020828501011115611e71575f80fd5b9250929050565b5f805f805f805f805f8060c08b8d031215611e91575f80fd5b8a35995060208b013567ffffffffffffffff80821115611eaf575f80fd5b611ebb8e838f01611e33565b909b50995060408d0135915080821115611ed3575f80fd5b611edf8e838f01611e33565b909950975060608d0135915080821115611ef7575f80fd5b611f038e838f01611e33565b909750955060808d0135915080821115611f1b575f80fd5b50611f288d828e01611e33565b9150809450508092505060a08b013590509295989b9194979a5092959850565b5f805f805f805f6080888a031215611f5e575f80fd5b87359650602088013567ffffffffffffffff80821115611f7c575f80fd5b611f888b838c01611e33565b909850965060408a0135915080821115611fa0575f80fd5b611fac8b838c01611e33565b909650945060608a0135915080821115611fc4575f80fd5b50611fd18a828b01611e33565b989b979a50959850939692959293505050565b5f805f60608486031215611ff6575f80fd5b8335925060208401359150604084013561200f81611d23565b809150509250925092565b8015158114611d37575f80fd5b5f8060408385031215612038575f80fd5b823561204381611d23565b915060208301356120538161201a565b809150509250929050565b5f6020828403121561206e575f80fd5b8135610c898161201a565b5f806040838503121561208a575f80fd5b823561209581611d23565b9150602083013561205381611d23565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b600181811c908216806120e657607f821691505b60208210810361210457634e487b7160e01b5f52602260045260245ffd5b50919050565b818382375f9101908152919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b89815260c060208201525f61215a60c083018a8c612119565b828103604084015261216d81898b612119565b90508660608401528281036080840152612188818688612119565b9150508260a08301529a9950505050505050505050565b5f602082840312156121af575f80fd5b8151610c898161201a565b634e487b7160e01b5f52601160045260245ffd5b818103818111156109c0576109c06121ba565b868152608060208201525f6121fa608083018789612119565b828103604084015261220d818688612119565b915050826060830152979650505050505050565b6020808252600b908201526a16995c9bc8105b5bdd5b9d60aa1b604082015260600190565b808201808211156109c0576109c06121ba565b602080825260149082015273496e73756666696369656e742042616c616e636560601b604082015260600190565b5f8154612293816120d2565b8085526020600183811680156122b057600181146122ca576122f5565b60ff1985168884015283151560051b8801830195506122f5565b865f52825f205f5b858110156122ed5781548a82018601529083019084016122d2565b890184019650505b505050505092915050565b5f60018060a01b03808816835260a0602084015261232160a0840188612287565b83810360408501526123338188612287565b905083810360608501526123478187611db5565b9250508084166080840152509695505050505050565b606081525f61236f6060830186612287565b82810360208401526123818186612287565b905082810360408401526123958185611db5565b9695505050505050565b80820281158282048414176109c0576109c06121ba565b5f826123d057634e487b7160e01b5f52601260045260245ffd5b500490565b5f82516123e6818460208701611d93565b9190910192915050565b5f8083546123fd816120d2565b60018281168015612415576001811461242a57612456565b60ff1984168752821515830287019450612456565b875f526020805f205f5b8581101561244d5781548a820152908401908201612434565b50505082870194505b5092969550505050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220cd00dad9b63dda306c15547cddf961de6ebea9d1a66cf255bd7690d86d6056ba64736f6c634300081400330000000000000000000000004f4495243837681061c4743b74b3eedf548d56a50000000000000000000000002d5d7d31f671f86c782533cc367f14109a082712000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000221b262dd800000000000000000000000000000000000000000000000000000016bcc41e900000000000000000000000000002d2171118bcef0649d6472dc5219d58be4f259ca00000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000114f7065726174696f6e2050686f656e69780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005244f504858000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000762696e616e636500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a30784466334332343730366139396462394437613746396335614132303641646363373433453537396500000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405260043610610280575f3560e01c80636a22d8cc11610155578063b34a3060116100be578063d479e97411610078578063d479e974146107be578063d73792a9146107d1578063d7ad21ac146107e6578063dd62ed3e14610805578063e74b981b14610849578063f558eb0514610868575f80fd5b8063b34a306014610719578063b94e8df214610739578063be37757a14610758578063c29c669a1461076d578063cb64ef1b1461078c578063cd433ada146107ab575f80fd5b806395d89b411161010f57806395d89b411461067f578063a6f9dae114610693578063a9059cbb146106b2578063acb2ad6f146106d1578063ad80e451146106e6578063b0fa844414610705575f80fd5b80636a22d8cc1461059f57806370a08231146105d2578063893d20e8146106065780638b4cee08146106225780638ebfc796146106415780638f02bb5b14610660575f80fd5b806323b872dd116101f757806346904840116101b157806346904840146104fb578063470624021461051a5780634782f7791461052f578063491606581461054e5780634d2384891461056d578063678f5b3c14610580575f80fd5b806323b872dd1461044157806326232a2e146104605780632b14ca5614610475578063313ce5671461048a57806333039d3d146104c75780633f3e4c11146104dc575f80fd5b8063116191b611610248578063116191b61461036757806312e8e2c3146103b2578063131417de146103d157806318160ddd146103f05780631a98b2e01461040e5780631c6ffa461461042d575f80fd5b806301e88208146102845780630659ce5c146102d757806306fdde03146102f8578063095ea7b3146103195780630cc835a314610348575b5f80fd5b34801561028f575f80fd5b506102bb61029e366004611d3a565b600b6020525f908152604090205460ff8082169161010090041682565b6040805192151583529015156020830152015b60405180910390f35b3480156102e2575f80fd5b506102f66102f1366004611d55565b610888565b005b348015610303575f80fd5b5061030c6108ca565b6040516102ce9190611de0565b348015610324575f80fd5b50610338610333366004611df2565b61095a565b60405190151581526020016102ce565b348015610353575f80fd5b506102f6610362366004611e1c565b6109c6565b348015610372575f80fd5b5061039a7f0000000000000000000000004f4495243837681061c4743b74b3eedf548d56a581565b6040516001600160a01b0390911681526020016102ce565b3480156103bd575f80fd5b506102f66103cc366004611e1c565b6109f4565b3480156103dc575f80fd5b506102f66103eb366004611d3a565b610a22565b3480156103fb575f80fd5b506001545b6040519081526020016102ce565b348015610419575f80fd5b506102f6610428366004611e78565b610a6d565b348015610438575f80fd5b5061030c610b4c565b34801561044c575f80fd5b5061033861045b366004611d55565b610bd8565b34801561046b575f80fd5b5061040060095481565b348015610480575f80fd5b50610400600d5481565b348015610495575f80fd5b5060405160ff7f00000000000000000000000000000000000000000000000000000000000000121681526020016102ce565b3480156104d2575f80fd5b5061040060105481565b3480156104e7575f80fd5b506102f66104f6366004611e1c565b610c90565b348015610506575f80fd5b50600f5461039a906001600160a01b031681565b348015610525575f80fd5b50610400600c5481565b34801561053a575f80fd5b506102f6610549366004611df2565b610cbe565b348015610559575f80fd5b506102f6610568366004611f48565b610cf5565b6102f661057b366004611fe4565b610dd9565b34801561058b575f80fd5b50600a5461039a906001600160a01b031681565b3480156105aa575f80fd5b5061039a7f0000000000000000000000002d5d7d31f671f86c782533cc367f14109a08271281565b3480156105dd575f80fd5b506104006105ec366004611d3a565b6001600160a01b03165f9081526004602052604090205490565b348015610611575f80fd5b505f546001600160a01b031661039a565b34801561062d575f80fd5b506102f661063c366004611e1c565b610e5c565b34801561064c575f80fd5b506102f661065b366004612027565b610e8a565b34801561066b575f80fd5b506102f661067a366004611e1c565b610edd565b34801561068a575f80fd5b5061030c610f0b565b34801561069e575f80fd5b506102f66106ad366004611d3a565b610f1a565b3480156106bd575f80fd5b506103386106cc366004611df2565b610f9c565b3480156106dc575f80fd5b50610400600e5481565b3480156106f1575f80fd5b506102f6610700366004611e1c565b610fa8565b348015610710575f80fd5b5061030c610fd6565b348015610724575f80fd5b50600f5461033890600160a81b900460ff1681565b348015610744575f80fd5b506102f661075336600461205e565b610fe3565b348015610763575f80fd5b5061040060085481565b348015610778575f80fd5b506102f6610787366004612027565b61102a565b348015610797575f80fd5b506102f66107a636600461205e565b611083565b6102f66107b9366004611fe4565b6110ca565b6102f66107cc366004611df2565b611128565b3480156107dc575f80fd5b5061040061271081565b3480156107f1575f80fd5b50610400610800366004611d55565b61139e565b348015610810575f80fd5b5061040061081f366004612079565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205490565b348015610854575f80fd5b506102f6610863366004611d3a565b61147b565b348015610873575f80fd5b50600f5461033890600160a01b900460ff1681565b5f546001600160a01b031633146108ba5760405162461bcd60e51b81526004016108b1906120a5565b60405180910390fd5b6108c58383836114c6565b505050565b6060600280546108d9906120d2565b80601f0160208091040260200160405190810160405280929190818152602001828054610905906120d2565b80156109505780601f1061092757610100808354040283529160200191610950565b820191905f5260205f20905b81548152906001019060200180831161093357829003601f168201915b5050505050905090565b335f8181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906109b49086815260200190565b60405180910390a35060015b92915050565b5f546001600160a01b031633146109ef5760405162461bcd60e51b81526004016108b1906120a5565b600c55565b5f546001600160a01b03163314610a1d5760405162461bcd60e51b81526004016108b1906120a5565b600955565b5f546001600160a01b03163314610a4b5760405162461bcd60e51b81526004016108b1906120a5565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b5f8585604051610a7e92919061210a565b604051908190038120631876eed960e01b825291506001600160a01b037f0000000000000000000000004f4495243837681061c4743b74b3eedf548d56a51690631876eed990610ae2908e908e908e908e908e9089908d908d908d90600401612141565b6020604051808303815f875af1158015610afe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b22919061219f565b610b3f57604051631403112d60e21b815260040160405180910390fd5b5050505050505050505050565b60068054610b59906120d2565b80601f0160208091040260200160405190810160405280929190818152602001828054610b85906120d2565b8015610bd05780601f10610ba757610100808354040283529160200191610bd0565b820191905f5260205f20905b815481529060010190602001808311610bb357829003601f168201915b505050505081565b6001600160a01b0383165f908152600560209081526040808320338452909152812054821115610c435760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b60448201526064016108b1565b6001600160a01b0384165f90815260056020908152604080832033845290915281208054849290610c759084906121ce565b90915550610c8690508484846115f2565b90505b9392505050565b5f546001600160a01b03163314610cb95760405162461bcd60e51b81526004016108b1906120a5565b601055565b5f546001600160a01b03163314610ce75760405162461bcd60e51b81526004016108b1906120a5565b610cf182826118e5565b5050565b5f8282604051610d0692919061210a565b604051908190038120635f6970c360e01b825291506001600160a01b037f0000000000000000000000004f4495243837681061c4743b74b3eedf548d56a51690635f6970c390610d64908b908b908b908b908b9089906004016121e1565b6020604051808303815f875af1158015610d80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da4919061219f565b610dc157604051631403112d60e21b815260040160405180910390fd5b610dcf8787878787876119bb565b5050505050505050565b604051634d23848960e01b815260048101849052602481018390526001600160a01b0382811660448301527f0000000000000000000000002d5d7d31f671f86c782533cc367f14109a0827121690634d2384899034906064015b5f604051808303818588803b158015610e4a575f80fd5b505af1158015610dcf573d5f803e3d5ffd5b5f546001600160a01b03163314610e855760405162461bcd60e51b81526004016108b1906120a5565b600d55565b5f546001600160a01b03163314610eb35760405162461bcd60e51b81526004016108b1906120a5565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610f065760405162461bcd60e51b81526004016108b1906120a5565b600e55565b6060600380546108d9906120d2565b5f546001600160a01b03163314610f435760405162461bcd60e51b81526004016108b1906120a5565b5f80546040516001600160a01b03808516939216917f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73591a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f610c893384846115f2565b5f546001600160a01b03163314610fd15760405162461bcd60e51b81526004016108b1906120a5565b600855565b60078054610b59906120d2565b5f546001600160a01b0316331461100c5760405162461bcd60e51b81526004016108b1906120a5565b600f8054911515600160a01b0260ff60a01b19909216919091179055565b5f546001600160a01b031633146110535760405162461bcd60e51b81526004016108b1906120a5565b6001600160a01b039091165f908152600b6020526040902080549115156101000261ff0019909216919091179055565b5f546001600160a01b031633146110ac5760405162461bcd60e51b81526004016108b1906120a5565b600f8054911515600160a81b0260ff60a81b19909216919091179055565b6040516366a19d6d60e11b815260048101849052602481018390526001600160a01b0382811660448301527f0000000000000000000000002d5d7d31f671f86c782533cc367f14109a082712169063cd433ada903490606401610e33565b5f81116111475760405162461bcd60e51b81526004016108b190612221565b6001600160a01b03821661118e5760405162461bcd60e51b815260206004820152600e60248201526d16995c9bc8149958da5c1a595b9d60921b60448201526064016108b1565b60095460085461119e9190612246565b3410156111d75760405162461bcd60e51b81526020600482015260076024820152664d696e2047617360c81b60448201526064016108b1565b335f908152600460205260409020548111156112055760405162461bcd60e51b81526004016108b190612259565b600f54600160a81b900460ff16156112525760405162461bcd60e51b815260206004820152601060248201526f109c9a5919da5b99c8109b1bd8dad95960821b60448201526064016108b1565b6009541561127357600a54600954611273916001600160a01b0316906118e5565b5f6009543461128291906121ce565b905061128e3383611b0c565b604080516001600160a01b0385811660208301528183018590528251808303840181526060830193849052630c93e3bb60e01b9093527f0000000000000000000000002d5d7d31f671f86c782533cc367f14109a0827121690630c93e3bb90849061130790309060069060079088903390606401612300565b5f604051808303818588803b15801561131e575f80fd5b505af1158015611330573d5f803e3d5ffd5b5050604051631c92115f60e01b81526001600160a01b037f0000000000000000000000004f4495243837681061c4743b74b3eedf548d56a5169350631c92115f92506113879150600690600790869060040161235d565b5f604051808303815f87803b158015610e4a575f80fd5b6001600160a01b0383165f908152600b602052604081205460ff16806113db57506001600160a01b0383165f908152600b602052604090205460ff165b156113e757505f610c89565b6001600160a01b0383165f908152600b6020526040902054610100900460ff16611460576001600160a01b0384165f908152600b6020526040902054610100900460ff1661144f57612710600e5483611440919061239f565b61144a91906123b6565b610c86565b612710600c5483611440919061239f565b612710600d5483611471919061239f565b610c8691906123b6565b5f546001600160a01b031633146114a45760405162461bcd60e51b81526004016108b1906120a5565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f9283929087169161152191906123d5565b5f604051808303815f865af19150503d805f811461155a576040519150601f19603f3d011682016040523d82523d5f602084013e61155f565b606091505b5091509150818015611589575080511580611589575080806020019051810190611589919061219f565b6115eb5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b60648201526084016108b1565b5050505050565b5f6001600160a01b0384166116375760405162461bcd60e51b815260206004820152600b60248201526a2d32b9379029b2b73232b960a91b60448201526064016108b1565b6001600160a01b03831661167e5760405162461bcd60e51b815260206004820152600e60248201526d16995c9bc8149958da5c1a595b9d60921b60448201526064016108b1565b5f821161169d5760405162461bcd60e51b81526004016108b190612221565b6001600160a01b0384165f908152600460205260409020548211156116d45760405162461bcd60e51b81526004016108b190612259565b6001600160a01b0384165f90815260046020526040812080548492906116fb9084906121ce565b909155505f905061170d85858561139e565b90505f61171a82856121ce565b90505f811161173b5760405162461bcd60e51b81526004016108b190612221565b6001600160a01b038086165f81815260046020526040908190208054850190555190918816905f805160206124638339815191529061177d9085815260200190565b60405180910390a381156118d957600f545f906001600160a01b0316158015906117b25750600f546001600160a01b03163014155b90505f816117c057306117cd565b600f546001600160a01b03165b6001600160a01b038082165f81815260046020526040908190208054890190555192935091908a16905f80516020612463833981519152906118129088815260200190565b60405180910390a3600f54600160a01b900460ff1680156118305750815b156118d657604080518082018252600981526874726967676572282960b81b60209182015281516004815260248101835290810180516001600160e01b0316630ffd91a760e31b17905290515f916001600160a01b0384169161189391906123d5565b5f604051808303815f865af19150503d805f81146118cc576040519150601f19603f3d011682016040523d82523d5f602084013e6118d1565b606091505b505050505b50505b50600195945050505050565b604080515f808252602082019092526001600160a01b03841690839060405161190e91906123d5565b5f6040518083038185875af1925050503d805f8114611948576040519150601f19603f3d011682016040523d82523d5f602084013e61194d565b606091505b50509050806108c55760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b60648201526084016108b1565b60066040516119ca91906123f0565b604051809103902086866040516119e292919061210a565b604051809103902014611a2e5760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21029b7bab931b29021b430b4b760611b60448201526064016108b1565b6007604051611a3d91906123f0565b60405180910390208484604051611a5592919061210a565b604051809103902014611aa35760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420536f75726365204164647265737360501b60448201526064016108b1565b600f54600160a81b900460ff1615611af05760405162461bcd60e51b815260206004820152601060248201526f109c9a5919da5b99c8109b1bd8dad95960821b60448201526064016108b1565b5f80611afe83850185611df2565b91509150610dcf8282611c1d565b6001600160a01b038216611b515760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016108b1565b5f8111611b705760405162461bcd60e51b81526004016108b190612221565b6001600160a01b0382165f90815260046020526040902054811115611ba75760405162461bcd60e51b81526004016108b190612259565b6001600160a01b0382165f9081526004602052604081208054839290611bce9084906121ce565b925050819055508060015f828254611be691906121ce565b90915550506040518181525f906001600160a01b038416905f80516020612463833981519152906020015b60405180910390a35050565b6001600160a01b038216611c625760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016108b1565b5f8111611c815760405162461bcd60e51b81526004016108b190612221565b6001600160a01b0382165f908152600460205260409020805482019055600180548201908190556010541015611cf95760405162461bcd60e51b815260206004820152601860248201527f45786365656473204d617820546f74616c20537570706c79000000000000000060448201526064016108b1565b6040518181526001600160a01b038316905f905f8051602061246383398151915290602001611c11565b6001600160a01b0381168114611d37575f80fd5b50565b5f60208284031215611d4a575f80fd5b8135610c8981611d23565b5f805f60608486031215611d67575f80fd5b8335611d7281611d23565b92506020840135611d8281611d23565b929592945050506040919091013590565b5f5b83811015611dad578181015183820152602001611d95565b50505f910152565b5f8151808452611dcc816020860160208601611d93565b601f01601f19169290920160200192915050565b602081525f610c896020830184611db5565b5f8060408385031215611e03575f80fd5b8235611e0e81611d23565b946020939093013593505050565b5f60208284031215611e2c575f80fd5b5035919050565b5f8083601f840112611e43575f80fd5b50813567ffffffffffffffff811115611e5a575f80fd5b602083019150836020828501011115611e71575f80fd5b9250929050565b5f805f805f805f805f8060c08b8d031215611e91575f80fd5b8a35995060208b013567ffffffffffffffff80821115611eaf575f80fd5b611ebb8e838f01611e33565b909b50995060408d0135915080821115611ed3575f80fd5b611edf8e838f01611e33565b909950975060608d0135915080821115611ef7575f80fd5b611f038e838f01611e33565b909750955060808d0135915080821115611f1b575f80fd5b50611f288d828e01611e33565b9150809450508092505060a08b013590509295989b9194979a5092959850565b5f805f805f805f6080888a031215611f5e575f80fd5b87359650602088013567ffffffffffffffff80821115611f7c575f80fd5b611f888b838c01611e33565b909850965060408a0135915080821115611fa0575f80fd5b611fac8b838c01611e33565b909650945060608a0135915080821115611fc4575f80fd5b50611fd18a828b01611e33565b989b979a50959850939692959293505050565b5f805f60608486031215611ff6575f80fd5b8335925060208401359150604084013561200f81611d23565b809150509250925092565b8015158114611d37575f80fd5b5f8060408385031215612038575f80fd5b823561204381611d23565b915060208301356120538161201a565b809150509250929050565b5f6020828403121561206e575f80fd5b8135610c898161201a565b5f806040838503121561208a575f80fd5b823561209581611d23565b9150602083013561205381611d23565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b600181811c908216806120e657607f821691505b60208210810361210457634e487b7160e01b5f52602260045260245ffd5b50919050565b818382375f9101908152919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b89815260c060208201525f61215a60c083018a8c612119565b828103604084015261216d81898b612119565b90508660608401528281036080840152612188818688612119565b9150508260a08301529a9950505050505050505050565b5f602082840312156121af575f80fd5b8151610c898161201a565b634e487b7160e01b5f52601160045260245ffd5b818103818111156109c0576109c06121ba565b868152608060208201525f6121fa608083018789612119565b828103604084015261220d818688612119565b915050826060830152979650505050505050565b6020808252600b908201526a16995c9bc8105b5bdd5b9d60aa1b604082015260600190565b808201808211156109c0576109c06121ba565b602080825260149082015273496e73756666696369656e742042616c616e636560601b604082015260600190565b5f8154612293816120d2565b8085526020600183811680156122b057600181146122ca576122f5565b60ff1985168884015283151560051b8801830195506122f5565b865f52825f205f5b858110156122ed5781548a82018601529083019084016122d2565b890184019650505b505050505092915050565b5f60018060a01b03808816835260a0602084015261232160a0840188612287565b83810360408501526123338188612287565b905083810360608501526123478187611db5565b9250508084166080840152509695505050505050565b606081525f61236f6060830186612287565b82810360208401526123818186612287565b905082810360408401526123958185611db5565b9695505050505050565b80820281158282048414176109c0576109c06121ba565b5f826123d057634e487b7160e01b5f52601260045260245ffd5b500490565b5f82516123e6818460208701611d93565b9190910192915050565b5f8083546123fd816120d2565b60018281168015612415576001811461242a57612456565b60ff1984168752821515830287019450612456565b875f526020805f205f5b8581101561244d5781548a820152908401908201612434565b50505082870194505b5092969550505050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220cd00dad9b63dda306c15547cddf961de6ebea9d1a66cf255bd7690d86d6056ba64736f6c63430008140033

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

0000000000000000000000004f4495243837681061c4743b74b3eedf548d56a50000000000000000000000002d5d7d31f671f86c782533cc367f14109a082712000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000221b262dd800000000000000000000000000000000000000000000000000000016bcc41e900000000000000000000000000002d2171118bcef0649d6472dc5219d58be4f259ca00000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000114f7065726174696f6e2050686f656e69780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005244f504858000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000762696e616e636500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a30784466334332343730366139396462394437613746396335614132303641646363373433453537396500000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : gateway_ (address): 0x4F4495243837681061C4743b74B3eEdf548D56A5
Arg [1] : gasService_ (address): 0x2d5d7d31F671F86C782533cc367F14109a082712
Arg [2] : name_ (string): Operation Phoenix
Arg [3] : symbol_ (string): $OPHX
Arg [4] : decimals_ (uint8): 18
Arg [5] : minGas_ (uint256): 600000000000000
Arg [6] : platformFee_ (uint256): 400000000000000
Arg [7] : upchargeFeeReceiver_ (address): 0x2d2171118BceF0649D6472DC5219d58bE4F259Ca
Arg [8] : sourceChain_ (string): binance
Arg [9] : sourceAddress_ (string): 0xDf3C24706a99db9D7a7F9c5aA206Adcc743E579e

-----Encoded View---------------
19 Constructor Arguments found :
Arg [0] : 0000000000000000000000004f4495243837681061c4743b74b3eedf548d56a5
Arg [1] : 0000000000000000000000002d5d7d31f671f86c782533cc367f14109a082712
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [5] : 000000000000000000000000000000000000000000000000000221b262dd8000
Arg [6] : 00000000000000000000000000000000000000000000000000016bcc41e90000
Arg [7] : 0000000000000000000000002d2171118bcef0649d6472dc5219d58be4f259ca
Arg [8] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000200
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [11] : 4f7065726174696f6e2050686f656e6978000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [13] : 244f504858000000000000000000000000000000000000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [15] : 62696e616e636500000000000000000000000000000000000000000000000000
Arg [16] : 000000000000000000000000000000000000000000000000000000000000002a
Arg [17] : 3078446633433234373036613939646239443761374639633561413230364164
Arg [18] : 6363373433453537396500000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

34394:12970:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35461:53;;;;;;;;;;-1:-1:-1;35461:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;589:14:1;;582:22;564:41;;648:14;;641:22;636:2;621:18;;614:50;537:18;35461:53:0;;;;;;;;36969:159;;;;;;;;;;-1:-1:-1;36969:159:0;;;;;:::i;:::-;;:::i;:::-;;39117:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;39425:216::-;;;;;;;;;;-1:-1:-1;39425:216:0;;;;;:::i;:::-;;:::i;:::-;;;2377:14:1;;2370:22;2352:41;;2340:2;2325:18;39425:216:0;2212:187:1;38075:90:0;;;;;;;;;;-1:-1:-1;38075:90:0;;;;;:::i;:::-;;:::i;26133:39::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2775:32:1;;;2757:51;;2745:2;2730:18;26133:39:0;2589:225:1;37371:110:0;;;;;;;;;;-1:-1:-1;37371:110:0;;;;;:::i;:::-;;:::i;37489:142::-;;;;;;;;;;-1:-1:-1;37489:142:0;;;;;:::i;:::-;;:::i;38771:88::-;;;;;;;;;;-1:-1:-1;38844:12:0;;38771:88;;;2965:25:1;;;2953:2;2938:18;38771:88:0;2819:177:1;26775:689:0;;;;;;;;;;-1:-1:-1;26775:689:0;;;;;:::i;:::-;;:::i;34975:25::-;;;;;;;;;;;;;:::i;39873:348::-;;;;;;;;;;-1:-1:-1;39873:348:0;;;;;:::i;:::-;;:::i;35231:26::-;;;;;;;;;;;;;;;;35571:29;;;;;;;;;;;;;;;;39323:94;;;;;;;;;;-1:-1:-1;39323:94:0;;4968:4:1;39400:9:0;4956:17:1;4938:36;;4926:2;4911:18;39323:94:0;4796:184:1;35869:53:0;;;;;;;;;;;;;;;;38639:124;;;;;;;;;;-1:-1:-1;38639:124:0;;;;;:::i;:::-;;:::i;35723:27::-;;;;;;;;;;-1:-1:-1;35723:27:0;;;;-1:-1:-1;;;;;35723:27:0;;;35536:28;;;;;;;;;;;;;;;;37136:129;;;;;;;;;;-1:-1:-1;37136:129:0;;;;;:::i;:::-;;:::i;26336:431::-;;;;;;;;;;-1:-1:-1;26336:431:0;;;;;:::i;:::-;;:::i;42942:237::-;;;;;;:::i;:::-;;:::i;35307:34::-;;;;;;;;;;-1:-1:-1;35307:34:0;;;;-1:-1:-1;;;;;35307:34:0;;;34859:45;;;;;;;;;;;;;;;38865:105;;;;;;;;;;-1:-1:-1;38865:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;38949:18:0;38931:7;38949:18;;;:9;:18;;;;;;;38865:105;29249:83;;;;;;;;;;-1:-1:-1;29292:7:0;29319:5;-1:-1:-1;;;;;29319:5:0;29249:83;;38173:94;;;;;;;;;;-1:-1:-1;38173:94:0;;;;;:::i;:::-;;:::i;37639:141::-;;;;;;;;;;-1:-1:-1;37639:141:0;;;;;:::i;:::-;;:::i;38275:110::-;;;;;;;;;;-1:-1:-1;38275:110:0;;;;;:::i;:::-;;:::i;39218:97::-;;;;;;;;;;;;;:::i;29023:132::-;;;;;;;;;;-1:-1:-1;29023:132:0;;;;;:::i;:::-;;:::i;39679:156::-;;;;;;;;;;-1:-1:-1;39679:156:0;;;;;:::i;:::-;;:::i;35607:30::-;;;;;;;;;;;;;;;;37273:90;;;;;;;;;;-1:-1:-1;37273:90:0;;;;;:::i;:::-;;:::i;35073:27::-;;;;;;;;;;;;;:::i;35814:::-;;;;;;;;;;-1:-1:-1;35814:27:0;;;;-1:-1:-1;;;35814:27:0;;;;;;38393:107;;;;;;;;;;-1:-1:-1;38393:107:0;;;;;:::i;:::-;;:::i;35153:21::-;;;;;;;;;;;;;;;;37788:157;;;;;;;;;;-1:-1:-1;37788:157:0;;;;;:::i;:::-;;:::i;38508:123::-;;;;;;;;;;-1:-1:-1;38508:123:0;;;;;:::i;:::-;;:::i;42248:223::-;;;;;;:::i;:::-;;:::i;40332:1456::-;;;;;;:::i;:::-;;:::i;35644:48::-;;;;;;;;;;;;35686:6;35644:48;;45089:482;;;;;;;;;;-1:-1:-1;45089:482:0;;;;;:::i;:::-;;:::i;38976:133::-;;;;;;;;;;-1:-1:-1;38976:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;39078:19:0;;;39060:7;39078:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;38976:133;37953:114;;;;;;;;;;-1:-1:-1;37953:114:0;;;;;:::i;:::-;;:::i;35757:23::-;;;;;;;;;;-1:-1:-1;35757:23:0;;;;-1:-1:-1;;;35757:23:0;;;;;;36969:159;28630:5;;-1:-1:-1;;;;;28630:5:0;28616:10;:19;28608:51;;;;-1:-1:-1;;;28608:51:0;;;;;;;:::i;:::-;;;;;;;;;37073:47:::1;37101:6;37109:2;37113:6;37073:27;:47::i;:::-;36969:159:::0;;;:::o;39117:93::-;39164:13;39197:5;39190:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39117:93;:::o;39425:216::-;39529:10;39500:4;39517:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;39517:32:0;;;;;;;;;;:41;;;39574:37;39500:4;;39517:32;;39574:37;;;;39552:6;2965:25:1;;2953:2;2938:18;;2819:177;39574:37:0;;;;;;;;-1:-1:-1;39629:4:0;39425:216;;;;;:::o;38075:90::-;28630:5;;-1:-1:-1;;;;;28630:5:0;28616:10;:19;28608:51;;;;-1:-1:-1;;;28608:51:0;;;;;;;:::i;:::-;38141:6:::1;:16:::0;38075:90::o;37371:110::-;28630:5;;-1:-1:-1;;;;;28630:5:0;28616:10;:19;28608:51;;;;-1:-1:-1;;;28608:51:0;;;;;;;:::i;:::-;37447:11:::1;:26:::0;37371:110::o;37489:142::-;28630:5;;-1:-1:-1;;;;;28630:5:0;28616:10;:19;28608:51;;;;-1:-1:-1;;;28608:51:0;;;;;;;:::i;:::-;37581:19:::1;:42:::0;;-1:-1:-1;;;;;;37581:42:0::1;-1:-1:-1::0;;;;;37581:42:0;;;::::1;::::0;;;::::1;::::0;;37489:142::o;26775:689::-;27030:19;27062:7;;27052:18;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;27102:225:0;;27052:18;-1:-1:-1;;;;;;27102:7:0;:35;;;;:225;;27156:9;;27184:11;;;;27214:13;;;;27052:18;;27276:11;;;;27306:6;;27102:225;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27083:285;;27346:22;;-1:-1:-1;;;27346:22:0;;;;;;;;;;;27083:285;27019:445;26775:689;;;;;;;;;;:::o;34975:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39873:348::-;-1:-1:-1;;;;;40012:19:0;;39973:4;40012:19;;;:11;:19;;;;;;;;40032:10;40012:31;;;;;;;;:41;-1:-1:-1;40012:41:0;39990:113;;;;-1:-1:-1;;;39990:113:0;;10628:2:1;39990:113:0;;;10610:21:1;10667:2;10647:18;;;10640:30;-1:-1:-1;;;10686:18:1;;;10679:52;10748:18;;39990:113:0;10426:346:1;39990:113:0;-1:-1:-1;;;;;40114:19:0;;;;;;:11;:19;;;;;;;;40134:10;40114:31;;;;;;;:41;;40149:6;;40114:19;:41;;40149:6;;40114:41;:::i;:::-;;;;-1:-1:-1;40173:40:0;;-1:-1:-1;40187:6:0;40195:9;40206:6;40173:13;:40::i;:::-;40166:47;;39873:348;;;;;;:::o;38639:124::-;28630:5;;-1:-1:-1;;;;;28630:5:0;28616:10;:19;28608:51;;;;-1:-1:-1;;;28608:51:0;;;;;;;:::i;:::-;38721:16:::1;:34:::0;38639:124::o;37136:129::-;28630:5;;-1:-1:-1;;;;;28630:5:0;28616:10;:19;28608:51;;;;-1:-1:-1;;;28608:51:0;;;;;;;:::i;:::-;37215:42:::1;37246:2;37250:6;37215:30;:42::i;:::-;37136:129:::0;;:::o;26336:431::-;26519:19;26551:7;;26541:18;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;26577:80:0;;26541:18;-1:-1:-1;;;;;;26577:7:0;:28;;;;:80;;26606:9;;26617:11;;;;26630:13;;;;26541:18;;26577:80;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26572:129;;26679:22;;-1:-1:-1;;;26679:22:0;;;;;;;;;;;26572:129;26714:45;26723:11;;26736:13;;26751:7;;26714:8;:45::i;:::-;26508:259;26336:431;;;;;;;:::o;42942:237::-;43090:81;;-1:-1:-1;;;43090:81:0;;;;;11830:25:1;;;11871:18;;;11864:34;;;-1:-1:-1;;;;;11934:32:1;;;11914:18;;;11907:60;43090:10:0;:30;;;;43128:9;;11803:18:1;;43090:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38173:94;28630:5;;-1:-1:-1;;;;;28630:5:0;28616:10;:19;28608:51;;;;-1:-1:-1;;;28608:51:0;;;;;;;:::i;:::-;38241:7:::1;:18:::0;38173:94::o;37639:141::-;28630:5;;-1:-1:-1;;;;;28630:5:0;28616:10;:19;28608:51;;;;-1:-1:-1;;;28608:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37726:20:0;;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:46;;-1:-1:-1;;37726:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37639:141::o;38275:110::-;28630:5;;-1:-1:-1;;;;;28630:5:0;28616:10;:19;28608:51;;;;-1:-1:-1;;;28608:51:0;;;;;;;:::i;:::-;38351:11:::1;:26:::0;38275:110::o;39218:97::-;39267:13;39300:7;39293:14;;;;;:::i;29023:132::-;28630:5;;-1:-1:-1;;;;;28630:5:0;28616:10;:19;28608:51;;;;-1:-1:-1;;;28608:51:0;;;;;;;:::i;:::-;29104:5:::1;::::0;;29095:25:::1;::::0;-1:-1:-1;;;;;29095:25:0;;::::1;::::0;29104:5;::::1;::::0;29095:25:::1;::::0;::::1;29131:5;:16:::0;;-1:-1:-1;;;;;;29131:16:0::1;-1:-1:-1::0;;;;;29131:16:0;;;::::1;::::0;;;::::1;::::0;;29023:132::o;39679:156::-;39759:4;39783:44;39797:10;39809:9;39820:6;39783:13;:44::i;37273:90::-;28630:5;;-1:-1:-1;;;;;28630:5:0;28616:10;:19;28608:51;;;;-1:-1:-1;;;28608:51:0;;;;;;;:::i;:::-;37339:6:::1;:16:::0;37273:90::o;35073:27::-;;;;;;;:::i;38393:107::-;28630:5;;-1:-1:-1;;;;;28630:5:0;28616:10;:19;28608:51;;;;-1:-1:-1;;;28608:51:0;;;;;;;:::i;:::-;38466:11:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;38466:26:0::1;-1:-1:-1::0;;;;38466:26:0;;::::1;::::0;;;::::1;::::0;;38393:107::o;37788:157::-;28630:5;;-1:-1:-1;;;;;28630:5:0;28616:10;:19;28608:51;;;;-1:-1:-1;;;28608:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37883:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:54;;;::::1;;;;-1:-1:-1::0;;37883:54:0;;::::1;::::0;;;::::1;::::0;;37788:157::o;38508:123::-;28630:5;;-1:-1:-1;;;;;28630:5:0;28616:10;:19;28608:51;;;;-1:-1:-1;;;28608:51:0;;;;;;;:::i;:::-;38589:15:::1;:34:::0;;;::::1;;-1:-1:-1::0;;;38589:34:0::1;-1:-1:-1::0;;;;38589:34:0;;::::1;::::0;;;::::1;::::0;;38508:123::o;42248:223::-;42389:74;;-1:-1:-1;;;42389:74:0;;;;;11830:25:1;;;11871:18;;;11864:34;;;-1:-1:-1;;;;;11934:32:1;;;11914:18;;;11907:60;42389:10:0;:23;;;;42420:9;;11803:18:1;;42389:74:0;11628:345:1;40332:1456:0;40464:1;40455:6;:10;40433:71;;;;-1:-1:-1;;;40433:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40537:16:0;;40515:80;;;;-1:-1:-1;;;40515:80:0;;12520:2:1;40515:80:0;;;12502:21:1;12559:2;12539:18;;;12532:30;-1:-1:-1;;;12578:18:1;;;12571:44;12632:18;;40515:80:0;12318:338:1;40515:80:0;40652:11;;40643:6;;:20;;;;:::i;:::-;40628:9;:37;;40606:94;;;;-1:-1:-1;;;40606:94:0;;12993:2:1;40606:94:0;;;12975:21:1;13032:1;13012:18;;;13005:29;-1:-1:-1;;;13050:18:1;;;13043:37;13097:18;;40606:94:0;12791:330:1;40606:94:0;40743:10;40733:21;;;;:9;:21;;;;;;:31;-1:-1:-1;40733:31:0;40711:101;;;;-1:-1:-1;;;40711:101:0;;;;;;;:::i;:::-;40845:15;;-1:-1:-1;;;40845:15:0;;;;:24;40823:90;;;;-1:-1:-1;;;40823:90:0;;13677:2:1;40823:90:0;;;13659:21:1;13716:2;13696:18;;;13689:30;-1:-1:-1;;;13735:18:1;;;13728:46;13791:18;;40823:90:0;13475:340:1;40823:90:0;40969:11;;:15;40965:112;;41032:19;;41053:11;;41001:64;;-1:-1:-1;;;;;41032:19:0;;41001:30;:64::i;:::-;41134:18;41167:11;;41155:9;:23;;;;:::i;:::-;41134:44;;41224:25;41230:10;41242:6;41224:5;:25::i;:::-;41336:22;;;-1:-1:-1;;;;;14012:32:1;;;41336:22:0;;;13994:51:1;14061:18;;;14054:34;;;41336:22:0;;;;;;;;;13967:18:1;;;41336:22:0;;;;-1:-1:-1;;;41471:198:0;;;:10;:38;;;;41517:10;;41471:198;;41552:4;;41572:11;;41598:13;;41336:22;;41648:10;;41471:198;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41723:57:0;;-1:-1:-1;;;41723:57:0;;-1:-1:-1;;;;;41723:7:0;:20;;-1:-1:-1;41723:20:0;;-1:-1:-1;41723:57:0;;-1:-1:-1;41744:11:0;;41757:13;;41772:7;;41723:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;45089:482;-1:-1:-1;;;;;45202:19:0;;45177:7;45202:19;;;:11;:19;;;;;:31;;;;:69;;-1:-1:-1;;;;;;45237:22:0;;;;;;:11;:22;;;;;:34;;;45202:69;45197:112;;;-1:-1:-1;45296:1:0;45289:8;;45197:112;-1:-1:-1;;;;;45340:22:0;;;;;;:11;:22;;;;;:38;;;;;;:223;;-1:-1:-1;;;;;45433:19:0;;;;;;:11;:19;;;;;:35;;;;;;:130;;35686:6;45533:11;;45524:6;:20;;;;:::i;:::-;45523:40;;;;:::i;:::-;45340:223;;45433:130;35686:6;45481;;45472;:15;;;;:::i;45340:223::-;35686:6;45391:7;;45382:6;:16;;;;:::i;:::-;45381:36;;;;:::i;37953:114::-;28630:5;;-1:-1:-1;;;;;28630:5:0;28616:10;:19;28608:51;;;;-1:-1:-1;;;28608:51:0;;;;;;;:::i;:::-;38031:12:::1;:28:::0;;-1:-1:-1;;;;;;38031:28:0::1;-1:-1:-1::0;;;;;38031:28:0;;;::::1;::::0;;;::::1;::::0;;37953:114::o;32765:449::-;32997:45;;;-1:-1:-1;;;;;14012:32:1;;;32997:45:0;;;13994:51:1;14061:18;;;;14054:34;;;32997:45:0;;;;;;;;;;13967:18:1;;;;32997:45:0;;;;;;;-1:-1:-1;;;;;32997:45:0;-1:-1:-1;;;32997:45:0;;;32986:57;;-1:-1:-1;;;;32986:10:0;;;;:57;;32997:45;32986:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32950:93;;;;33076:7;:57;;;;-1:-1:-1;33088:11:0;;:16;;:44;;;33119:4;33108:24;;;;;;;;;;;;:::i;:::-;33054:152;;;;-1:-1:-1;;;33054:152:0;;17084:2:1;33054:152:0;;;17066:21:1;17123:2;17103:18;;;17096:30;17162:34;17142:18;;;17135:62;-1:-1:-1;;;17213:18:1;;;17206:43;17266:19;;33054:152:0;16882:409:1;33054:152:0;32872:342;;32765:449;;;:::o;43195:1886::-;43287:4;-1:-1:-1;;;;;43326:20:0;;43304:81;;;;-1:-1:-1;;;43304:81:0;;17498:2:1;43304:81:0;;;17480:21:1;17537:2;17517:18;;;17510:30;-1:-1:-1;;;17556:18:1;;;17549:41;17607:18;;43304:81:0;17296:335:1;43304:81:0;-1:-1:-1;;;;;43418:23:0;;43396:87;;;;-1:-1:-1;;;43396:87:0;;12520:2:1;43396:87:0;;;12502:21:1;12559:2;12539:18;;;12532:30;-1:-1:-1;;;12578:18:1;;;12571:44;12632:18;;43396:87:0;12318:338:1;43396:87:0;43525:1;43516:6;:10;43494:71;;;;-1:-1:-1;;;43494:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43598:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;43598:27:0;43576:97;;;;-1:-1:-1;;;43576:97:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43731:17:0;;;;;;:9;:17;;;;;:27;;43752:6;;43731:17;:27;;43752:6;;43731:27;:::i;:::-;;;;-1:-1:-1;43804:11:0;;-1:-1:-1;43819:33:0;43826:6;43834:9;43845:6;43819;:33::i;:::-;43803:49;-1:-1:-1;43911:18:0;43932:12;43803:49;43932:6;:12;:::i;:::-;43911:33;;43976:1;43963:10;:14;43955:38;;;;-1:-1:-1;;;43955:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44060:20:0;;;;;;;:9;:20;;;;;;;:34;;;;;;44121:39;44060:20;;44121:39;;;-1:-1:-1;;;;;;;;;;;44121:39:0;;;44084:10;2965:25:1;;2953:2;2938:18;;2819:177;44121:39:0;;;;;;;;44209:7;;44205:813;;44303:12;;44279:21;;-1:-1:-1;;;;;44303:12:0;:26;;;;:59;;-1:-1:-1;44333:12:0;;-1:-1:-1;;;;;44333:12:0;44357:4;44333:29;;44303:59;44279:83;;44424:21;44448:16;:47;;44490:4;44448:47;;;44467:12;;-1:-1:-1;;;;;44467:12:0;44448:47;-1:-1:-1;;;;;44570:24:0;;;;;;;:9;:24;;;;;;;:31;;;;;;44636:36;44424:71;;-1:-1:-1;44570:24:0;44636:36;;;;-1:-1:-1;;;;;;;;;;;44636:36:0;;;44598:3;2965:25:1;;2953:2;2938:18;;2819:177;44636:36:0;;;;;;;;44774:11;;-1:-1:-1;;;44774:11:0;;;;:31;;;;;44789:16;44774:31;44770:237;;;44925:18;;;;;;;;;;;-1:-1:-1;;;44925:18:0;;;;;44885:61;;;;;;;;;;;;;;;-1:-1:-1;;;;;44885:61:0;-1:-1:-1;;;44885:61:0;;;44844:121;;44827:12;;-1:-1:-1;;;;;44844:18:0;;;:121;;44885:61;44844:121;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;44770:237:0;44218:800;;44205:813;-1:-1:-1;45069:4:0;;43195:1886;-1:-1:-1;;;;;43195:1886:0:o;33728:217::-;33841:12;;;33801;33841;;;;;;;;;-1:-1:-1;;;;;33819:7:0;;;33834:5;;33819:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33800:54;;;33873:7;33865:72;;;;-1:-1:-1;;;33865:72:0;;17970:2:1;33865:72:0;;;17952:21:1;18009:2;17989:18;;;17982:30;18048:34;18028:18;;;18021:62;-1:-1:-1;;;18099:18:1;;;18092:50;18159:19;;33865:72:0;17768:416:1;46593:768:0;46833:11;46817:29;;;;;;:::i;:::-;;;;;;;;46799:12;;46783:30;;;;;;;:::i;:::-;;;;;;;;:63;46761:133;;;;-1:-1:-1;;;46761:133:0;;19240:2:1;46761:133:0;;;19222:21:1;19279:2;19259:18;;;19252:30;-1:-1:-1;;;19298:18:1;;;19291:50;19358:18;;46761:133:0;19038:344:1;46761:133:0;46979:13;46963:31;;;;;;:::i;:::-;;;;;;;;46943:14;;46927:32;;;;;;;:::i;:::-;;;;;;;;:67;46905:139;;;;-1:-1:-1;;;46905:139:0;;19589:2:1;46905:139:0;;;19571:21:1;19628:2;19608:18;;;19601:30;-1:-1:-1;;;19647:18:1;;;19640:52;19709:18;;46905:139:0;19387:346:1;46905:139:0;47077:15;;-1:-1:-1;;;47077:15:0;;;;:24;47055:90;;;;-1:-1:-1;;;47055:90:0;;13677:2:1;47055:90:0;;;13659:21:1;13716:2;13696:18;;;13689:30;-1:-1:-1;;;13735:18:1;;;13728:46;13791:18;;47055:90:0;13475:340:1;47055:90:0;47220:10;;47250:40;;;;47261:8;47250:40;:::i;:::-;47219:71;;;;47336:17;47342:2;47346:6;47336:5;:17::i;45579:475::-;-1:-1:-1;;;;;45669:21:0;;45647:83;;;;-1:-1:-1;;;45647:83:0;;20268:2:1;45647:83:0;;;20250:21:1;20307:2;20287:18;;;20280:30;-1:-1:-1;;;20326:18:1;;;20319:42;20378:18;;45647:83:0;20066:336:1;45647:83:0;45772:1;45763:6;:10;45741:71;;;;-1:-1:-1;;;45741:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45855:18:0;;;;;;:9;:18;;;;;;45845:28;;;45823:98;;;;-1:-1:-1;;;45823:98:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45932:18:0;;;;;;:9;:18;;;;;:28;;45954:6;;45932:18;:28;;45954:6;;45932:28;:::i;:::-;;;;;;;;45987:6;45971:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;46009:37:0;;2965:25:1;;;46035:1:0;;-1:-1:-1;;;;;46009:37:0;;;-1:-1:-1;;;;;;;;;;;46009:37:0;2953:2:1;2938:18;46009:37:0;;;;;;;;45579:475;;:::o;46062:523::-;-1:-1:-1;;;;;46152:21:0;;46130:83;;;;-1:-1:-1;;;46130:83:0;;20268:2:1;46130:83:0;;;20250:21:1;20307:2;20287:18;;;20280:30;-1:-1:-1;;;20326:18:1;;;20319:42;20378:18;;46130:83:0;20066:336:1;46130:83:0;46255:1;46246:6;:10;46224:71;;;;-1:-1:-1;;;46224:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46331:18:0;;;;;;:9;:18;;;;;:28;;;;;;-1:-1:-1;46374:22:0;;;;;;;;46456:16;;-1:-1:-1;46440:32:0;46418:106;;;;-1:-1:-1;;;46418:106:0;;20609:2:1;46418:106:0;;;20591:21:1;20648:2;20628:18;;;20621:30;20687:26;20667:18;;;20660:54;20731:18;;46418:106:0;20407:348:1;46418:106:0;46540:37;;2965:25:1;;;-1:-1:-1;;;;;46540:37:0;;;46557:1;;-1:-1:-1;;;;;;;;;;;46540:37:0;2953:2:1;2938:18;46540:37:0;2819:177:1;14:131;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:247::-;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;675:456::-;752:6;760;768;821:2;809:9;800:7;796:23;792:32;789:52;;;837:1;834;827:12;789:52;876:9;863:23;895:31;920:5;895:31;:::i;:::-;945:5;-1:-1:-1;1002:2:1;987:18;;974:32;1015:33;974:32;1015:33;:::i;:::-;675:456;;1067:7;;-1:-1:-1;;;1121:2:1;1106:18;;;;1093:32;;675:456::o;1136:250::-;1221:1;1231:113;1245:6;1242:1;1239:13;1231:113;;;1321:11;;;1315:18;1302:11;;;1295:39;1267:2;1260:10;1231:113;;;-1:-1:-1;;1378:1:1;1360:16;;1353:27;1136:250::o;1391:271::-;1433:3;1471:5;1465:12;1498:6;1493:3;1486:19;1514:76;1583:6;1576:4;1571:3;1567:14;1560:4;1553:5;1549:16;1514:76;:::i;:::-;1644:2;1623:15;-1:-1:-1;;1619:29:1;1610:39;;;;1651:4;1606:50;;1391:271;-1:-1:-1;;1391:271:1:o;1667:220::-;1816:2;1805:9;1798:21;1779:4;1836:45;1877:2;1866:9;1862:18;1854:6;1836:45;:::i;1892:315::-;1960:6;1968;2021:2;2009:9;2000:7;1996:23;1992:32;1989:52;;;2037:1;2034;2027:12;1989:52;2076:9;2063:23;2095:31;2120:5;2095:31;:::i;:::-;2145:5;2197:2;2182:18;;;;2169:32;;-1:-1:-1;;;1892:315:1:o;2404:180::-;2463:6;2516:2;2504:9;2495:7;2491:23;2487:32;2484:52;;;2532:1;2529;2522:12;2484:52;-1:-1:-1;2555:23:1;;2404:180;-1:-1:-1;2404:180:1:o;3001:348::-;3053:8;3063:6;3117:3;3110:4;3102:6;3098:17;3094:27;3084:55;;3135:1;3132;3125:12;3084:55;-1:-1:-1;3158:20:1;;3201:18;3190:30;;3187:50;;;3233:1;3230;3223:12;3187:50;3270:4;3262:6;3258:17;3246:29;;3322:3;3315:4;3306:6;3298;3294:19;3290:30;3287:39;3284:59;;;3339:1;3336;3329:12;3284:59;3001:348;;;;;:::o;3354:1437::-;3505:6;3513;3521;3529;3537;3545;3553;3561;3569;3577;3630:3;3618:9;3609:7;3605:23;3601:33;3598:53;;;3647:1;3644;3637:12;3598:53;3683:9;3670:23;3660:33;;3744:2;3733:9;3729:18;3716:32;3767:18;3808:2;3800:6;3797:14;3794:34;;;3824:1;3821;3814:12;3794:34;3863:59;3914:7;3905:6;3894:9;3890:22;3863:59;:::i;:::-;3941:8;;-1:-1:-1;3837:85:1;-1:-1:-1;4029:2:1;4014:18;;4001:32;;-1:-1:-1;4045:16:1;;;4042:36;;;4074:1;4071;4064:12;4042:36;4113:61;4166:7;4155:8;4144:9;4140:24;4113:61;:::i;:::-;4193:8;;-1:-1:-1;4087:87:1;-1:-1:-1;4281:2:1;4266:18;;4253:32;;-1:-1:-1;4297:16:1;;;4294:36;;;4326:1;4323;4316:12;4294:36;4365:61;4418:7;4407:8;4396:9;4392:24;4365:61;:::i;:::-;4445:8;;-1:-1:-1;4339:87:1;-1:-1:-1;4533:3:1;4518:19;;4505:33;;-1:-1:-1;4550:16:1;;;4547:36;;;4579:1;4576;4569:12;4547:36;;4618:61;4671:7;4660:8;4649:9;4645:24;4618:61;:::i;:::-;4592:87;;4698:8;4688:18;;;4725:8;4715:18;;;4780:3;4769:9;4765:19;4752:33;4742:43;;3354:1437;;;;;;;;;;;;;:::o;5193:1078::-;5314:6;5322;5330;5338;5346;5354;5362;5415:3;5403:9;5394:7;5390:23;5386:33;5383:53;;;5432:1;5429;5422:12;5383:53;5468:9;5455:23;5445:33;;5529:2;5518:9;5514:18;5501:32;5552:18;5593:2;5585:6;5582:14;5579:34;;;5609:1;5606;5599:12;5579:34;5648:59;5699:7;5690:6;5679:9;5675:22;5648:59;:::i;:::-;5726:8;;-1:-1:-1;5622:85:1;-1:-1:-1;5814:2:1;5799:18;;5786:32;;-1:-1:-1;5830:16:1;;;5827:36;;;5859:1;5856;5849:12;5827:36;5898:61;5951:7;5940:8;5929:9;5925:24;5898:61;:::i;:::-;5978:8;;-1:-1:-1;5872:87:1;-1:-1:-1;6066:2:1;6051:18;;6038:32;;-1:-1:-1;6082:16:1;;;6079:36;;;6111:1;6108;6101:12;6079:36;;6150:61;6203:7;6192:8;6181:9;6177:24;6150:61;:::i;:::-;5193:1078;;;;-1:-1:-1;5193:1078:1;;-1:-1:-1;5193:1078:1;;;;6124:87;;-1:-1:-1;;;5193:1078:1:o;6276:383::-;6353:6;6361;6369;6422:2;6410:9;6401:7;6397:23;6393:32;6390:52;;;6438:1;6435;6428:12;6390:52;6474:9;6461:23;6451:33;;6531:2;6520:9;6516:18;6503:32;6493:42;;6585:2;6574:9;6570:18;6557:32;6598:31;6623:5;6598:31;:::i;:::-;6648:5;6638:15;;;6276:383;;;;;:::o;6897:118::-;6983:5;6976:13;6969:21;6962:5;6959:32;6949:60;;7005:1;7002;6995:12;7020:382;7085:6;7093;7146:2;7134:9;7125:7;7121:23;7117:32;7114:52;;;7162:1;7159;7152:12;7114:52;7201:9;7188:23;7220:31;7245:5;7220:31;:::i;:::-;7270:5;-1:-1:-1;7327:2:1;7312:18;;7299:32;7340:30;7299:32;7340:30;:::i;:::-;7389:7;7379:17;;;7020:382;;;;;:::o;7407:241::-;7463:6;7516:2;7504:9;7495:7;7491:23;7487:32;7484:52;;;7532:1;7529;7522:12;7484:52;7571:9;7558:23;7590:28;7612:5;7590:28;:::i;7653:388::-;7721:6;7729;7782:2;7770:9;7761:7;7757:23;7753:32;7750:52;;;7798:1;7795;7788:12;7750:52;7837:9;7824:23;7856:31;7881:5;7856:31;:::i;:::-;7906:5;-1:-1:-1;7963:2:1;7948:18;;7935:32;7976:33;7935:32;7976:33;:::i;8046:343::-;8248:2;8230:21;;;8287:2;8267:18;;;8260:30;-1:-1:-1;;;8321:2:1;8306:18;;8299:49;8380:2;8365:18;;8046:343::o;8394:380::-;8473:1;8469:12;;;;8516;;;8537:61;;8591:4;8583:6;8579:17;8569:27;;8537:61;8644:2;8636:6;8633:14;8613:18;8610:38;8607:161;;8690:10;8685:3;8681:20;8678:1;8671:31;8725:4;8722:1;8715:15;8753:4;8750:1;8743:15;8607:161;;8394:380;;;:::o;8779:271::-;8962:6;8954;8949:3;8936:33;8918:3;8988:16;;9013:13;;;8988:16;8779:271;-1:-1:-1;8779:271:1:o;9055:267::-;9144:6;9139:3;9132:19;9196:6;9189:5;9182:4;9177:3;9173:14;9160:43;-1:-1:-1;9248:1:1;9223:16;;;9241:4;9219:27;;;9212:38;;;;9304:2;9283:15;;;-1:-1:-1;;9279:29:1;9270:39;;;9266:50;;9055:267::o;9327:844::-;9686:6;9675:9;9668:25;9729:3;9724:2;9713:9;9709:18;9702:31;9649:4;9756:63;9814:3;9803:9;9799:19;9791:6;9783;9756:63;:::i;:::-;9867:9;9859:6;9855:22;9850:2;9839:9;9835:18;9828:50;9901;9944:6;9936;9928;9901:50;:::i;:::-;9887:64;;9987:6;9982:2;9971:9;9967:18;9960:34;10043:9;10035:6;10031:22;10025:3;10014:9;10010:19;10003:51;10071:50;10114:6;10106;10098;10071:50;:::i;:::-;10063:58;;;10158:6;10152:3;10141:9;10137:19;10130:35;9327:844;;;;;;;;;;;;:::o;10176:245::-;10243:6;10296:2;10284:9;10275:7;10271:23;10267:32;10264:52;;;10312:1;10309;10302:12;10264:52;10344:9;10338:16;10363:28;10385:5;10363:28;:::i;10777:127::-;10838:10;10833:3;10829:20;10826:1;10819:31;10869:4;10866:1;10859:15;10893:4;10890:1;10883:15;10909:128;10976:9;;;10997:11;;;10994:37;;;11011:18;;:::i;11042:581::-;11315:6;11304:9;11297:25;11358:3;11353:2;11342:9;11338:18;11331:31;11278:4;11385:63;11443:3;11432:9;11428:19;11420:6;11412;11385:63;:::i;:::-;11496:9;11488:6;11484:22;11479:2;11468:9;11464:18;11457:50;11524;11567:6;11559;11551;11524:50;:::i;:::-;11516:58;;;11610:6;11605:2;11594:9;11590:18;11583:34;11042:581;;;;;;;;;:::o;11978:335::-;12180:2;12162:21;;;12219:2;12199:18;;;12192:30;-1:-1:-1;;;12253:2:1;12238:18;;12231:41;12304:2;12289:18;;11978:335::o;12661:125::-;12726:9;;;12747:10;;;12744:36;;;12760:18;;:::i;13126:344::-;13328:2;13310:21;;;13367:2;13347:18;;;13340:30;-1:-1:-1;;;13401:2:1;13386:18;;13379:50;13461:2;13446:18;;13126:344::o;14099:772::-;14149:3;14190:5;14184:12;14219:36;14245:9;14219:36;:::i;:::-;14264:19;;;14302:4;14325:1;14342:18;;;14369:146;;;;14529:1;14524:341;;;;14335:530;;14369:146;-1:-1:-1;;14411:24:1;;14397:12;;;14390:46;14483:14;;14476:22;14473:1;14469:30;14460:40;;14456:49;;;-1:-1:-1;14369:146:1;;14524:341;14555:5;14552:1;14545:16;14602:2;14599:1;14589:16;14627:1;14641:174;14655:6;14652:1;14649:13;14641:174;;;14742:14;;14724:11;;;14720:20;;14713:44;14785:16;;;;14670:10;;14641:174;;;14839:11;;14835:20;;;-1:-1:-1;;14335:530:1;;;;;;14099:772;;;;:::o;14876:755::-;15132:4;15178:1;15174;15169:3;15165:11;15161:19;15219:2;15211:6;15207:15;15196:9;15189:34;15259:3;15254:2;15243:9;15239:18;15232:31;15286:54;15335:3;15324:9;15320:19;15312:6;15286:54;:::i;:::-;15388:9;15380:6;15376:22;15371:2;15360:9;15356:18;15349:50;15422:41;15456:6;15448;15422:41;:::i;:::-;15408:55;;15511:9;15503:6;15499:22;15494:2;15483:9;15479:18;15472:50;15539:33;15565:6;15557;15539:33;:::i;:::-;15531:41;;;15621:2;15613:6;15609:15;15603:3;15592:9;15588:19;15581:44;;14876:755;;;;;;;;:::o;15636:554::-;15873:2;15862:9;15855:21;15836:4;15899:53;15948:2;15937:9;15933:18;15925:6;15899:53;:::i;:::-;16000:9;15992:6;15988:22;15983:2;15972:9;15968:18;15961:50;16034:41;16068:6;16060;16034:41;:::i;:::-;16020:55;;16123:9;16115:6;16111:22;16106:2;16095:9;16091:18;16084:50;16151:33;16177:6;16169;16151:33;:::i;:::-;16143:41;15636:554;-1:-1:-1;;;;;;15636:554:1:o;16195:168::-;16268:9;;;16299;;16316:15;;;16310:22;;16296:37;16286:71;;16337:18;;:::i;16368:217::-;16408:1;16434;16424:132;;16478:10;16473:3;16469:20;16466:1;16459:31;16513:4;16510:1;16503:15;16541:4;16538:1;16531:15;16424:132;-1:-1:-1;16570:9:1;;16368:217::o;16590:287::-;16719:3;16757:6;16751:13;16773:66;16832:6;16827:3;16820:4;16812:6;16808:17;16773:66;:::i;:::-;16855:16;;;;;16590:287;-1:-1:-1;;16590:287:1:o;18189:844::-;18319:3;18348:1;18381:6;18375:13;18411:36;18437:9;18411:36;:::i;:::-;18466:1;18483:18;;;18510:133;;;;18657:1;18652:356;;;;18476:532;;18510:133;-1:-1:-1;;18543:24:1;;18531:37;;18616:14;;18609:22;18597:35;;18588:45;;;-1:-1:-1;18510:133:1;;18652:356;18683:6;18680:1;18673:17;18713:4;18758:2;18755:1;18745:16;18783:1;18797:165;18811:6;18808:1;18805:13;18797:165;;;18889:14;;18876:11;;;18869:35;18932:16;;;;18826:10;;18797:165;;;18801:3;;;18991:6;18986:3;18982:16;18975:23;;18476:532;-1:-1:-1;19024:3:1;;18189:844;-1:-1:-1;;;;;;18189:844:1:o

Swarm Source

ipfs://cd00dad9b63dda306c15547cddf961de6ebea9d1a66cf255bd7690d86d6056ba

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.