false
true
0

Contract Address Details

0xb29eA150c870Ea830d9890d94f326CB1b273cE8C

Contract Name
AddressesProvider
Creator
0x64e7ff–1c04a3 at 0x003065–112731
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
13 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
25963230
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
AddressesProvider




Optimization enabled
true
Compiler version
v0.7.6+commit.7338295f




Optimization runs
200
EVM Version
istanbul




Verified at
2023-09-16T02:40:12.932617Z

contracts/protocol/core/AddressesProvider.sol

// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.7.6;

import {Ownable} from "../../dependencies/openzeppelin/contracts/Ownable.sol";
import {IAddressesProvider} from "../../interfaces/IAddressesProvider.sol";

contract AddressesProvider is Ownable, IAddressesProvider {
    event UsdphUpdated(address indexed newAddress);
    event PhlpUpdated(address indexed newAddress);
    event PhlpManagerUpdated(address indexed newAddress);
    event VaultUpdated(address indexed newAddress);
    event VaultConfiguratorUpdated(address indexed newAddress);
    event RouterUpdated(address indexed newAddress);
    event OrderBookUpdated(address indexed newAddress);
    event PositionManagerUpdated(address indexed newAddress);
    event PositionRouterUpdated(address indexed newAddress);
    event PriceOracleUpdated(address indexed newAddress);
    event ShortsTrackerUpdated(address indexed newAddress);
    event TreasuryUpdated(address indexed newAddress);

    mapping(bytes32 => address) private _addresses;

    bytes32 private constant USDPH = "USDPH";
    bytes32 private constant PHLP = "PHLP";
    bytes32 private constant PHLP_MANAGER = "PHLP_MANAGER";
    bytes32 private constant VAULT = "VAULT";
    bytes32 private constant VAULT_CONFIGURATOR = "VAULT_CONFIGURATOR";
    bytes32 private constant ROUTER = "ROUTER";
    bytes32 private constant ORDER_BOOK = "ORDER_BOOK";
    bytes32 private constant POSITION_MANAGER = "POSITION_MANAGER";
    bytes32 private constant POSITION_ROUTER = "POSITION_ROUTER";
    bytes32 private constant PRICE_ORACLE = "PRICE_ORACLE";
    bytes32 private constant SHORTS_TRACKER = "SHORTS_TRACKER";
    bytes32 private constant TREASURY = "TREASURY";

    constructor() Ownable() {}

    /**
     * @dev Returns the address of the USDPH
     * @return The USDPH address
     **/
    function getUsdph() external view override returns (address) {
        return _addresses[USDPH];
    }

    /**
     * @dev Updates the address of the USDPH
     * @param usdph The new USDPH
     **/
    function setUsdph(address usdph) external onlyOwner {
        _addresses[USDPH] = usdph;
        emit UsdphUpdated(usdph);
    }

    /**
     * @dev Returns the address of the PHLP
     * @return The PHLP address
     **/
    function getPhlp() external view override returns (address) {
        return _addresses[PHLP];
    }

    /**
     * @dev Updates the address of the PHLP
     * @param phlp The new PHLP
     **/
    function setPhlp(address phlp) external onlyOwner {
        _addresses[PHLP] = phlp;
        emit PhlpUpdated(phlp);
    }

    /**
     * @dev Returns the address of the PHLP Manager
     * @return The PHLP Manager address
     **/
    function getPhlpManager() external view override returns (address) {
        return _addresses[PHLP_MANAGER];
    }

    /**
     * @dev Updates the address of the PHLP Manager
     * @param phlpManager The new PHLP Manager
     **/
    function setPhlpManager(address phlpManager) external onlyOwner {
        _addresses[PHLP_MANAGER] = phlpManager;
        emit PhlpManagerUpdated(phlpManager);
    }

    /**
     * @dev Returns the address of the vault
     * @return The vault address
     **/
    function getVault() external view override returns (address) {
        return _addresses[VAULT];
    }

    /**
     * @dev Updates the address of the vault
     * @param vault The new vault
     **/
    function setVault(address vault) external onlyOwner {
        _addresses[VAULT] = vault;
        emit VaultUpdated(vault);
    }

    /**
     * @dev Returns the address of the vault configurator
     * @return The vault configurator address
     **/
    function getVaultConfigurator() external view override returns (address) {
        return _addresses[VAULT_CONFIGURATOR];
    }

    /**
     * @dev Updates the address of the vault configurator
     * @param vaultConfigurator The new vault configurator
     **/
    function setVaultConfigurator(
        address vaultConfigurator
    ) external onlyOwner {
        _addresses[VAULT_CONFIGURATOR] = vaultConfigurator;
        emit VaultConfiguratorUpdated(vaultConfigurator);
    }

    /**
     * @dev Returns the address of the router
     * @return The router address
     **/
    function getRouter() external view override returns (address) {
        return _addresses[ROUTER];
    }

    /**
     * @dev Updates the address of the router
     * @param router The new router
     **/
    function setRouter(address router) external onlyOwner {
        _addresses[ROUTER] = router;
        emit RouterUpdated(router);
    }

    /**
     * @dev Returns the address of the order book
     * @return The order book address
     **/
    function getOrderBook() external view override returns (address) {
        return _addresses[ORDER_BOOK];
    }

    /**
     * @dev Updates the address of the order book
     * @param orderBook The new order book
     **/
    function setOrderBook(address orderBook) external onlyOwner {
        _addresses[ORDER_BOOK] = orderBook;
        emit RouterUpdated(orderBook);
    }

    /**
     * @dev Returns the address of the position manager
     * @return The position manager address
     **/
    function getPositionManager() external view override returns (address) {
        return _addresses[POSITION_MANAGER];
    }

    /**
     * @dev Updates the address of the position manager
     * @param positionManager The new position manager
     **/
    function setPositionManager(address positionManager) external onlyOwner {
        _addresses[POSITION_MANAGER] = positionManager;
        emit RouterUpdated(positionManager);
    }

    /**
     * @dev Returns the address of the position router
     * @return The position router address
     **/
    function getPositionRouter() external view override returns (address) {
        return _addresses[POSITION_ROUTER];
    }

    /**
     * @dev Updates the address of the position router
     * @param positionRouter The new position router
     **/
    function setPositionRouter(address positionRouter) external onlyOwner {
        _addresses[POSITION_ROUTER] = positionRouter;
        emit RouterUpdated(positionRouter);
    }

    /**
     * @dev Returns the address of the price oracle
     * @return The price oracle address
     **/
    function getPriceOracle() external view override returns (address) {
        return _addresses[PRICE_ORACLE];
    }

    /**
     * @dev Updates the address of the price oracle
     * @param priceOracle The new price oracle
     **/
    function setPriceOracle(address priceOracle) external onlyOwner {
        _addresses[PRICE_ORACLE] = priceOracle;
        emit PriceOracleUpdated(priceOracle);
    }

    /**
     * @dev Returns the address of the shorts tracker
     * @return The shorts tracker address
     **/
    function getShortsTracker() external view override returns (address) {
        return _addresses[SHORTS_TRACKER];
    }

    /**
     * @dev Updates the address of the shorts tracker
     * @param shortsTracker The new shorts tracker
     **/
    function setShortsTracker(address shortsTracker) external onlyOwner {
        _addresses[SHORTS_TRACKER] = shortsTracker;
        emit ShortsTrackerUpdated(shortsTracker);
    }

    /**
     * @dev Returns the address of the treasury
     * @return The treasury address
     **/
    function getTreasury() external view override returns (address payable) {
        return payable(_addresses[TREASURY]);
    }

    /**
     * @dev Updates the address of the treasury
     * @param treasury The new treasury
     **/
    function setTreasury(address treasury) external onlyOwner {
        _addresses[TREASURY] = treasury;
        emit TreasuryUpdated(treasury);
    }
}
        

contracts/dependencies/openzeppelin/contracts/Context.sol

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

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

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

contracts/dependencies/openzeppelin/contracts/Ownable.sol

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

import "./Context.sol";

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

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

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

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

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

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

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

contracts/interfaces/IAddressesProvider.sol

// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.7.6;

interface IAddressesProvider {
    function getUsdph() external view returns (address);

    function getPhlp() external view returns (address);

    function getPhlpManager() external view returns (address);

    function getVault() external view returns (address);

    function getVaultConfigurator() external view returns (address);

    function getRouter() external view returns (address);

    function getOrderBook() external view returns (address);

    function getPositionManager() external view returns (address);

    function getPositionRouter() external view returns (address);

    function getPriceOracle() external view returns (address);

    function getShortsTracker() external view returns (address);

    function getTreasury() external view returns (address payable);
}
          

Compiler Settings

{"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers"]}},"optimizer":{"runs":200,"enabled":true},"libraries":{},"evmVersion":"istanbul"}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"OrderBookUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PhlpManagerUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PhlpUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PositionManagerUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PositionRouterUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PriceOracleUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"RouterUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"ShortsTrackerUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"TreasuryUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"UsdphUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"VaultConfiguratorUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"VaultUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOrderBook","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getPhlp","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getPhlpManager","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getPositionManager","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getPositionRouter","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getPriceOracle","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getRouter","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getShortsTracker","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address payable"}],"name":"getTreasury","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getUsdph","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getVault","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getVaultConfigurator","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setOrderBook","inputs":[{"type":"address","name":"orderBook","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPhlp","inputs":[{"type":"address","name":"phlp","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPhlpManager","inputs":[{"type":"address","name":"phlpManager","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPositionManager","inputs":[{"type":"address","name":"positionManager","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPositionRouter","inputs":[{"type":"address","name":"positionRouter","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPriceOracle","inputs":[{"type":"address","name":"priceOracle","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setRouter","inputs":[{"type":"address","name":"router","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setShortsTracker","inputs":[{"type":"address","name":"shortsTracker","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTreasury","inputs":[{"type":"address","name":"treasury","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setUsdph","inputs":[{"type":"address","name":"usdph","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setVault","inputs":[{"type":"address","name":"vault","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setVaultConfigurator","inputs":[{"type":"address","name":"vaultConfigurator","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
              

Contract Creation Code

0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6114118061007d6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80638da5cb5b116100f9578063cfaa55eb11610097578063f0f4426011610071578063f0f44260146103ce578063f2fde38b146103f4578063fca513a81461041a578063fd591dcd14610422576101a9565b8063cfaa55eb1461037a578063d34ee093146103a0578063d759932b146103c6576101a9565b8063b0f479a1116100d3578063b0f479a11461031e578063b248c4ef14610326578063bcbbab871461032e578063c0d7865514610354576101a9565b80638da5cb5b146102ca578063987af4b2146102d25780639a1598c8146102f8576101a9565b8063530e784f116101665780636a22dede116101405780636a22dede146102aa578063715018a6146102b25780638ad6de4e146102ba5780638d928af8146102c2576101a9565b8063530e784f146102385780635760f2e31461025e5780636817031b14610284576101a9565b8063028d27d8146101ae5780630af78559146101d2578063189e31cb146101da5780633b19e84a146102025780633bd57e2b1461020a5780634bd9a9aa14610230575b600080fd5b6101b661042a565b604080516001600160a01b039092168252519081900360200190f35b6101b6610470565b610200600480360360208110156101f057600080fd5b50356001600160a01b03166104b8565b005b6101b66105a2565b6102006004803603602081101561022057600080fd5b50356001600160a01b03166105e4565b6101b66106c8565b6102006004803603602081101561024e57600080fd5b50356001600160a01b0316610711565b6102006004803603602081101561027457600080fd5b50356001600160a01b03166107f5565b6102006004803603602081101561029a57600080fd5b50356001600160a01b03166108cb565b6101b66109a8565b6102006109f2565b6101b6610a9e565b6101b6610add565b6101b6610b1c565b610200600480360360208110156102e857600080fd5b50356001600160a01b0316610b2b565b6102006004803603602081101561030e57600080fd5b50356001600160a01b0316610c08565b6101b6610cd8565b6101b6610d18565b6102006004803603602081101561034457600080fd5b50356001600160a01b0316610d5c565b6102006004803603602081101561036a57600080fd5b50356001600160a01b0316610e38565b6102006004803603602081101561039057600080fd5b50356001600160a01b0316610f04565b610200600480360360208110156103b657600080fd5b50356001600160a01b0316610fd9565b6101b66110bf565b610200600480360360208110156103e457600080fd5b50356001600160a01b031661110b565b6102006004803603602081101561040a57600080fd5b50356001600160a01b03166111eb565b6101b66112ed565b6101b6611333565b6b282426282fa6a0a720a3a2a960a11b60005260016020527f8db52f4dee84bb2c3f2f020924f7dd665c66eb08e4d2c490419be129bb6006d2546001600160a01b031690565b6d29a427a92a29afaa2920a1a5a2a960911b60005260016020527fdd276eb83685b549e208f5f99ad83cfe1824f631855f8edd92d6c271cf3010be546001600160a01b031690565b6104c0611371565b6001600160a01b03166104d1610b1c565b6001600160a01b03161461051a576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b712b20aaa62a2fa1a7a72324a3aaa920aa27a960711b600090815260016020527f57c739f24bb33f7ef5649a64efc88eb00fee33478ab2809f319310fcba19c9ab80546001600160a01b0319166001600160a01b03841690811790915560405190917f5df129fb98a07693c9030aa4c578c3eaa60cfde21b19b074f85c92f96576552291a250565b67545245415355525960c01b60005260016020527fabec3bf42c10118f0201dbc23af48d51db076feb8c9f2ecf0d129261aecb0e41546001600160a01b031690565b6105ec611371565b6001600160a01b03166105fd610b1c565b6001600160a01b031614610646576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b6b282426282fa6a0a720a3a2a960a11b600090815260016020527f8db52f4dee84bb2c3f2f020924f7dd665c66eb08e4d2c490419be129bb6006d280546001600160a01b0319166001600160a01b03841690811790915560405190917f327e677553e85486d48c2680d00892ccecfac636751c9b0f8540d1304559f65c91a250565b6e2827a9a4aa24a7a72fa927aaaa22a960891b60005260016020527f0bbf8de661a921d405f1d3253462f88e74335fe4833fa1fbcb19e890c8829aa9546001600160a01b031690565b610719611371565b6001600160a01b031661072a610b1c565b6001600160a01b031614610773576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b6b50524943455f4f5241434c4560a01b600090815260016020527f09c42ce2b8743b2d739b046fe6af227cd392ebe6dc7ade0f7795bfe8b5e8d52480546001600160a01b0319166001600160a01b03841690811790915560405190917fefe8ab924ca486283a79dc604baa67add51afb82af1db8ac386ebbba643cdffd91a250565b6107fd611371565b6001600160a01b031661080e610b1c565b6001600160a01b031614610857576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b6f2827a9a4aa24a7a72fa6a0a720a3a2a960811b600090815260016020527f31b85233031f2368ab2416e6d58689ed4cbe400fec2af70859e69d65a4d314b980546001600160a01b0319166001600160a01b03841690811790915560405190916000805160206113bc83398151915291a250565b6108d3611371565b6001600160a01b03166108e4610b1c565b6001600160a01b03161461092d576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b64159055531560da1b600090815260016020527fab545b7cc62e3f4ad211f868353a2e687c116b7a352c766f0d490831cdcb852e80546001600160a01b0319166001600160a01b03841690811790915560405190917f161584aed96e7f34998117c9ad67e2d21ff46d2a42775c22b11ed282f3c7b2cd91a250565b6f2827a9a4aa24a7a72fa6a0a720a3a2a960811b60005260016020527f31b85233031f2368ab2416e6d58689ed4cbe400fec2af70859e69d65a4d314b9546001600160a01b031690565b6109fa611371565b6001600160a01b0316610a0b610b1c565b6001600160a01b031614610a54576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b640aaa688a0960db1b60005260016020527fc782e6af2d48e2c5ef0b044e5f2605e862ce61154ab6dc8835bb85854dc6d7d4546001600160a01b031690565b64159055531560da1b60005260016020527fab545b7cc62e3f4ad211f868353a2e687c116b7a352c766f0d490831cdcb852e546001600160a01b031690565b6000546001600160a01b031690565b610b33611371565b6001600160a01b0316610b44610b1c565b6001600160a01b031614610b8d576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b640aaa688a0960db1b600090815260016020527fc782e6af2d48e2c5ef0b044e5f2605e862ce61154ab6dc8835bb85854dc6d7d480546001600160a01b0319166001600160a01b03841690811790915560405190917f5f8a23f4d43178da73efd51570571f4e6d90d60623f7d9ebc673b49183d787c191a250565b610c10611371565b6001600160a01b0316610c21610b1c565b6001600160a01b031614610c6a576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b694f524445525f424f4f4b60b01b600090815260016020527f831152f2a5f9a4adbcaae6602eb5edd6cac386a09e15003bbb6c7aba263d4c5680546001600160a01b0319166001600160a01b03841690811790915560405190916000805160206113bc83398151915291a250565b652927aaaa22a960d11b60005260016020527f33b3fa34e1f4810b14a068f26da0d807713e45d081735c8dcc7698a1d9a45f44546001600160a01b031690565b694f524445525f424f4f4b60b01b60005260016020527f831152f2a5f9a4adbcaae6602eb5edd6cac386a09e15003bbb6c7aba263d4c56546001600160a01b031690565b610d64611371565b6001600160a01b0316610d75610b1c565b6001600160a01b031614610dbe576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b63050484c560e41b600090815260016020527f6515cb9cfd212d768cf69660244b31f0a7f5d40f0b690512c90146970d95975280546001600160a01b0319166001600160a01b03841690811790915560405190917f1cc55c2063d1c7f83a3698ef8fc252ed7f6d8484710ea74b1280114b130f8f3491a250565b610e40611371565b6001600160a01b0316610e51610b1c565b6001600160a01b031614610e9a576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b652927aaaa22a960d11b600090815260016020527f33b3fa34e1f4810b14a068f26da0d807713e45d081735c8dcc7698a1d9a45f4480546001600160a01b0319166001600160a01b03841690811790915560405190916000805160206113bc83398151915291a250565b610f0c611371565b6001600160a01b0316610f1d610b1c565b6001600160a01b031614610f66576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b6e2827a9a4aa24a7a72fa927aaaa22a960891b600090815260016020527f0bbf8de661a921d405f1d3253462f88e74335fe4833fa1fbcb19e890c8829aa980546001600160a01b0319166001600160a01b03841690811790915560405190916000805160206113bc83398151915291a250565b610fe1611371565b6001600160a01b0316610ff2610b1c565b6001600160a01b03161461103b576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b6d29a427a92a29afaa2920a1a5a2a960911b600090815260016020527fdd276eb83685b549e208f5f99ad83cfe1824f631855f8edd92d6c271cf3010be80546001600160a01b0319166001600160a01b03841690811790915560405190917fa648500248b4cea91c47c2d0750e94aa0a2c26cbb70b2f24a03282e9f3ee820591a250565b712b20aaa62a2fa1a7a72324a3aaa920aa27a960711b60005260016020527f57c739f24bb33f7ef5649a64efc88eb00fee33478ab2809f319310fcba19c9ab546001600160a01b031690565b611113611371565b6001600160a01b0316611124610b1c565b6001600160a01b03161461116d576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b67545245415355525960c01b600090815260016020527fabec3bf42c10118f0201dbc23af48d51db076feb8c9f2ecf0d129261aecb0e4180546001600160a01b0319166001600160a01b03841690811790915560405190917f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d191a250565b6111f3611371565b6001600160a01b0316611204610b1c565b6001600160a01b03161461124d576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b6001600160a01b0381166112925760405162461bcd60e51b81526004018080602001828103825260268152602001806113766026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6b50524943455f4f5241434c4560a01b60005260016020527f09c42ce2b8743b2d739b046fe6af227cd392ebe6dc7ade0f7795bfe8b5e8d524546001600160a01b031690565b63050484c560e41b60005260016020527f6515cb9cfd212d768cf69660244b31f0a7f5d40f0b690512c90146970d959752546001600160a01b031690565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65727aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc80a2646970667358221220f75054b31cfa7da6c4240340ead6a3d87c47e9c75d9f857274885cd69dc6c80c64736f6c63430007060033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80638da5cb5b116100f9578063cfaa55eb11610097578063f0f4426011610071578063f0f44260146103ce578063f2fde38b146103f4578063fca513a81461041a578063fd591dcd14610422576101a9565b8063cfaa55eb1461037a578063d34ee093146103a0578063d759932b146103c6576101a9565b8063b0f479a1116100d3578063b0f479a11461031e578063b248c4ef14610326578063bcbbab871461032e578063c0d7865514610354576101a9565b80638da5cb5b146102ca578063987af4b2146102d25780639a1598c8146102f8576101a9565b8063530e784f116101665780636a22dede116101405780636a22dede146102aa578063715018a6146102b25780638ad6de4e146102ba5780638d928af8146102c2576101a9565b8063530e784f146102385780635760f2e31461025e5780636817031b14610284576101a9565b8063028d27d8146101ae5780630af78559146101d2578063189e31cb146101da5780633b19e84a146102025780633bd57e2b1461020a5780634bd9a9aa14610230575b600080fd5b6101b661042a565b604080516001600160a01b039092168252519081900360200190f35b6101b6610470565b610200600480360360208110156101f057600080fd5b50356001600160a01b03166104b8565b005b6101b66105a2565b6102006004803603602081101561022057600080fd5b50356001600160a01b03166105e4565b6101b66106c8565b6102006004803603602081101561024e57600080fd5b50356001600160a01b0316610711565b6102006004803603602081101561027457600080fd5b50356001600160a01b03166107f5565b6102006004803603602081101561029a57600080fd5b50356001600160a01b03166108cb565b6101b66109a8565b6102006109f2565b6101b6610a9e565b6101b6610add565b6101b6610b1c565b610200600480360360208110156102e857600080fd5b50356001600160a01b0316610b2b565b6102006004803603602081101561030e57600080fd5b50356001600160a01b0316610c08565b6101b6610cd8565b6101b6610d18565b6102006004803603602081101561034457600080fd5b50356001600160a01b0316610d5c565b6102006004803603602081101561036a57600080fd5b50356001600160a01b0316610e38565b6102006004803603602081101561039057600080fd5b50356001600160a01b0316610f04565b610200600480360360208110156103b657600080fd5b50356001600160a01b0316610fd9565b6101b66110bf565b610200600480360360208110156103e457600080fd5b50356001600160a01b031661110b565b6102006004803603602081101561040a57600080fd5b50356001600160a01b03166111eb565b6101b66112ed565b6101b6611333565b6b282426282fa6a0a720a3a2a960a11b60005260016020527f8db52f4dee84bb2c3f2f020924f7dd665c66eb08e4d2c490419be129bb6006d2546001600160a01b031690565b6d29a427a92a29afaa2920a1a5a2a960911b60005260016020527fdd276eb83685b549e208f5f99ad83cfe1824f631855f8edd92d6c271cf3010be546001600160a01b031690565b6104c0611371565b6001600160a01b03166104d1610b1c565b6001600160a01b03161461051a576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b712b20aaa62a2fa1a7a72324a3aaa920aa27a960711b600090815260016020527f57c739f24bb33f7ef5649a64efc88eb00fee33478ab2809f319310fcba19c9ab80546001600160a01b0319166001600160a01b03841690811790915560405190917f5df129fb98a07693c9030aa4c578c3eaa60cfde21b19b074f85c92f96576552291a250565b67545245415355525960c01b60005260016020527fabec3bf42c10118f0201dbc23af48d51db076feb8c9f2ecf0d129261aecb0e41546001600160a01b031690565b6105ec611371565b6001600160a01b03166105fd610b1c565b6001600160a01b031614610646576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b6b282426282fa6a0a720a3a2a960a11b600090815260016020527f8db52f4dee84bb2c3f2f020924f7dd665c66eb08e4d2c490419be129bb6006d280546001600160a01b0319166001600160a01b03841690811790915560405190917f327e677553e85486d48c2680d00892ccecfac636751c9b0f8540d1304559f65c91a250565b6e2827a9a4aa24a7a72fa927aaaa22a960891b60005260016020527f0bbf8de661a921d405f1d3253462f88e74335fe4833fa1fbcb19e890c8829aa9546001600160a01b031690565b610719611371565b6001600160a01b031661072a610b1c565b6001600160a01b031614610773576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b6b50524943455f4f5241434c4560a01b600090815260016020527f09c42ce2b8743b2d739b046fe6af227cd392ebe6dc7ade0f7795bfe8b5e8d52480546001600160a01b0319166001600160a01b03841690811790915560405190917fefe8ab924ca486283a79dc604baa67add51afb82af1db8ac386ebbba643cdffd91a250565b6107fd611371565b6001600160a01b031661080e610b1c565b6001600160a01b031614610857576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b6f2827a9a4aa24a7a72fa6a0a720a3a2a960811b600090815260016020527f31b85233031f2368ab2416e6d58689ed4cbe400fec2af70859e69d65a4d314b980546001600160a01b0319166001600160a01b03841690811790915560405190916000805160206113bc83398151915291a250565b6108d3611371565b6001600160a01b03166108e4610b1c565b6001600160a01b03161461092d576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b64159055531560da1b600090815260016020527fab545b7cc62e3f4ad211f868353a2e687c116b7a352c766f0d490831cdcb852e80546001600160a01b0319166001600160a01b03841690811790915560405190917f161584aed96e7f34998117c9ad67e2d21ff46d2a42775c22b11ed282f3c7b2cd91a250565b6f2827a9a4aa24a7a72fa6a0a720a3a2a960811b60005260016020527f31b85233031f2368ab2416e6d58689ed4cbe400fec2af70859e69d65a4d314b9546001600160a01b031690565b6109fa611371565b6001600160a01b0316610a0b610b1c565b6001600160a01b031614610a54576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b640aaa688a0960db1b60005260016020527fc782e6af2d48e2c5ef0b044e5f2605e862ce61154ab6dc8835bb85854dc6d7d4546001600160a01b031690565b64159055531560da1b60005260016020527fab545b7cc62e3f4ad211f868353a2e687c116b7a352c766f0d490831cdcb852e546001600160a01b031690565b6000546001600160a01b031690565b610b33611371565b6001600160a01b0316610b44610b1c565b6001600160a01b031614610b8d576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b640aaa688a0960db1b600090815260016020527fc782e6af2d48e2c5ef0b044e5f2605e862ce61154ab6dc8835bb85854dc6d7d480546001600160a01b0319166001600160a01b03841690811790915560405190917f5f8a23f4d43178da73efd51570571f4e6d90d60623f7d9ebc673b49183d787c191a250565b610c10611371565b6001600160a01b0316610c21610b1c565b6001600160a01b031614610c6a576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b694f524445525f424f4f4b60b01b600090815260016020527f831152f2a5f9a4adbcaae6602eb5edd6cac386a09e15003bbb6c7aba263d4c5680546001600160a01b0319166001600160a01b03841690811790915560405190916000805160206113bc83398151915291a250565b652927aaaa22a960d11b60005260016020527f33b3fa34e1f4810b14a068f26da0d807713e45d081735c8dcc7698a1d9a45f44546001600160a01b031690565b694f524445525f424f4f4b60b01b60005260016020527f831152f2a5f9a4adbcaae6602eb5edd6cac386a09e15003bbb6c7aba263d4c56546001600160a01b031690565b610d64611371565b6001600160a01b0316610d75610b1c565b6001600160a01b031614610dbe576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b63050484c560e41b600090815260016020527f6515cb9cfd212d768cf69660244b31f0a7f5d40f0b690512c90146970d95975280546001600160a01b0319166001600160a01b03841690811790915560405190917f1cc55c2063d1c7f83a3698ef8fc252ed7f6d8484710ea74b1280114b130f8f3491a250565b610e40611371565b6001600160a01b0316610e51610b1c565b6001600160a01b031614610e9a576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b652927aaaa22a960d11b600090815260016020527f33b3fa34e1f4810b14a068f26da0d807713e45d081735c8dcc7698a1d9a45f4480546001600160a01b0319166001600160a01b03841690811790915560405190916000805160206113bc83398151915291a250565b610f0c611371565b6001600160a01b0316610f1d610b1c565b6001600160a01b031614610f66576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b6e2827a9a4aa24a7a72fa927aaaa22a960891b600090815260016020527f0bbf8de661a921d405f1d3253462f88e74335fe4833fa1fbcb19e890c8829aa980546001600160a01b0319166001600160a01b03841690811790915560405190916000805160206113bc83398151915291a250565b610fe1611371565b6001600160a01b0316610ff2610b1c565b6001600160a01b03161461103b576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b6d29a427a92a29afaa2920a1a5a2a960911b600090815260016020527fdd276eb83685b549e208f5f99ad83cfe1824f631855f8edd92d6c271cf3010be80546001600160a01b0319166001600160a01b03841690811790915560405190917fa648500248b4cea91c47c2d0750e94aa0a2c26cbb70b2f24a03282e9f3ee820591a250565b712b20aaa62a2fa1a7a72324a3aaa920aa27a960711b60005260016020527f57c739f24bb33f7ef5649a64efc88eb00fee33478ab2809f319310fcba19c9ab546001600160a01b031690565b611113611371565b6001600160a01b0316611124610b1c565b6001600160a01b03161461116d576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b67545245415355525960c01b600090815260016020527fabec3bf42c10118f0201dbc23af48d51db076feb8c9f2ecf0d129261aecb0e4180546001600160a01b0319166001600160a01b03841690811790915560405190917f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d191a250565b6111f3611371565b6001600160a01b0316611204610b1c565b6001600160a01b03161461124d576040805162461bcd60e51b8152602060048201819052602482015260008051602061139c833981519152604482015290519081900360640190fd5b6001600160a01b0381166112925760405162461bcd60e51b81526004018080602001828103825260268152602001806113766026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6b50524943455f4f5241434c4560a01b60005260016020527f09c42ce2b8743b2d739b046fe6af227cd392ebe6dc7ade0f7795bfe8b5e8d524546001600160a01b031690565b63050484c560e41b60005260016020527f6515cb9cfd212d768cf69660244b31f0a7f5d40f0b690512c90146970d959752546001600160a01b031690565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65727aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc80a2646970667358221220f75054b31cfa7da6c4240340ead6a3d87c47e9c75d9f857274885cd69dc6c80c64736f6c63430007060033