false
true
0

Contract Address Details

0x72d220cE168C4f361dD4deE5D826a01AD8598f6C

Contract Name
DVMFactory
Creator
0x16cc37–396a2b at 0xbbe8d5–d1a085
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
39 Transactions
Transfers
0 Transfers
Gas Used
1,351,090
Last Balance Update
26319345
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify. View contract in Sourcify repository
Contract name:
DVMFactory




Optimization enabled
true
Compiler version
v0.6.9+commit.3e3065ac




Optimization runs
200
EVM Version
istanbul




Verified at
2026-04-19T01:18:17.639518Z

Constructor Arguments

0000000000000000000000005e5a7b76462e4bdf83aa98795644281bdba80b880000000000000000000000002bbd66fc4898242bdbd2583bbe1d76e8b8f7144500000000000000000000000095c4f5b83aa70810d4f142d58e5f7242bd891cb00000000000000000000000005e84190a270333ace5b9202a3f4cebf11b81bb01

Arg [0] (address) : 0x5e5a7b76462e4bdf83aa98795644281bdba80b88
Arg [1] (address) : 0x2bbd66fc4898242bdbd2583bbe1d76e8b8f71445
Arg [2] (address) : 0x95c4f5b83aa70810d4f142d58e5f7242bd891cb0
Arg [3] (address) : 0x5e84190a270333ace5b9202a3f4cebf11b81bb01

              

DVMFactory.sol

// File: contracts/lib/InitializableOwnable.sol

/*

    Copyright 2020 DODO ZOO.
    SPDX-License-Identifier: Apache-2.0

*/

pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;

/**
 * @title Ownable
 * @author DODO Breeder
 *
 * @notice Ownership related functions
 */
contract InitializableOwnable {
    address public _OWNER_;
    address public _NEW_OWNER_;
    bool internal _INITIALIZED_;

    // ============ Events ============

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

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

    // ============ Modifiers ============

    modifier notInitialized() {
        require(!_INITIALIZED_, "DODO_INITIALIZED");
        _;
    }

    modifier onlyOwner() {
        require(msg.sender == _OWNER_, "NOT_OWNER");
        _;
    }

    // ============ Functions ============

    function initOwner(address newOwner) public notInitialized {
        _INITIALIZED_ = true;
        _OWNER_ = newOwner;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        emit OwnershipTransferPrepared(_OWNER_, newOwner);
        _NEW_OWNER_ = newOwner;
    }

    function claimOwnership() public {
        require(msg.sender == _NEW_OWNER_, "INVALID_CLAIM");
        emit OwnershipTransferred(_OWNER_, _NEW_OWNER_);
        _OWNER_ = _NEW_OWNER_;
        _NEW_OWNER_ = address(0);
    }
}

// File: contracts/lib/CloneFactory.sol


interface ICloneFactory {
    function clone(address prototype) external returns (address proxy);
}

// introduction of proxy mode design: https://docs.openzeppelin.com/upgrades/2.8/
// minimum implementation of transparent proxy: https://eips.ethereum.org/EIPS/eip-1167

contract CloneFactory is ICloneFactory {
    function clone(address prototype) external override returns (address proxy) {
        bytes20 targetBytes = bytes20(prototype);
        assembly {
            let clone := mload(0x40)
            mstore(clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
            mstore(add(clone, 0x14), targetBytes)
            mstore(
                add(clone, 0x28),
                0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000
            )
            proxy := create(0, clone, 0x37)
        }
        return proxy;
    }
}

// File: contracts/DODOVendingMachine/intf/IDVM.sol

interface IDVM {
    function init(
        address maintainer,
        address baseTokenAddress,
        address quoteTokenAddress,
        uint256 lpFeeRate,
        address mtFeeRateModel,
        uint256 i,
        uint256 k,
        bool isOpenTWAP
    ) external;

    function _BASE_TOKEN_() external returns (address);

    function _QUOTE_TOKEN_() external returns (address);

    function _MT_FEE_RATE_MODEL_() external returns (address);

    function getVaultReserve() external returns (uint256 baseReserve, uint256 quoteReserve);

    function sellBase(address to) external returns (uint256);

    function sellQuote(address to) external returns (uint256);

    function buyShares(address to) external returns (uint256);

}

// File: contracts/Factory/DVMFactory.sol




interface IDVMFactory {
    function createDODOVendingMachine(
        address baseToken,
        address quoteToken,
        uint256 lpFeeRate,
        uint256 i,
        uint256 k,
        bool isOpenTWAP
    ) external returns (address newVendingMachine);
}


/**
 * @title DODO VendingMachine Factory
 * @author DODO Breeder
 *
 * @notice Create And Register DVM Pools 
 */
contract DVMFactory is InitializableOwnable {
    // ============ Templates ============

    address public immutable _CLONE_FACTORY_;
    address public immutable _DEFAULT_MAINTAINER_;
    address public immutable _DEFAULT_MT_FEE_RATE_MODEL_;
    address public _DVM_TEMPLATE_;

    // ============ Registry ============

    // base -> quote -> DVM address list
    mapping(address => mapping(address => address[])) public _REGISTRY_;
    // creator -> DVM address list
    mapping(address => address[]) public _USER_REGISTRY_;

    // ============ Events ============

    event NewDVM(
        address baseToken,
        address quoteToken,
        address creator,
        address dvm
    );

    event RemoveDVM(address dvm);

    // ============ Functions ============

    constructor(
        address cloneFactory,
        address dvmTemplate,
        address defaultMaintainer,
        address defaultMtFeeRateModel
    ) public {
        _CLONE_FACTORY_ = cloneFactory;
        _DVM_TEMPLATE_ = dvmTemplate;
        _DEFAULT_MAINTAINER_ = defaultMaintainer;
        _DEFAULT_MT_FEE_RATE_MODEL_ = defaultMtFeeRateModel;
    }

    function createDODOVendingMachine(
        address baseToken,
        address quoteToken,
        uint256 lpFeeRate,
        uint256 i,
        uint256 k,
        bool isOpenTWAP
    ) external returns (address newVendingMachine) {
        newVendingMachine = ICloneFactory(_CLONE_FACTORY_).clone(_DVM_TEMPLATE_);
        {
            IDVM(newVendingMachine).init(
                _DEFAULT_MAINTAINER_,
                baseToken,
                quoteToken,
                lpFeeRate,
                _DEFAULT_MT_FEE_RATE_MODEL_,
                i,
                k,
                isOpenTWAP
            );
        }
        _REGISTRY_[baseToken][quoteToken].push(newVendingMachine);
        _USER_REGISTRY_[tx.origin].push(newVendingMachine);
        emit NewDVM(baseToken, quoteToken, tx.origin, newVendingMachine);
    }

    // ============ Admin Operation Functions ============

    function updateDvmTemplate(address _newDVMTemplate) external onlyOwner {
        _DVM_TEMPLATE_ = _newDVMTemplate;
    }

    function addPoolByAdmin(
        address creator,
        address baseToken, 
        address quoteToken,
        address pool
    ) external onlyOwner {
        _REGISTRY_[baseToken][quoteToken].push(pool);
        _USER_REGISTRY_[creator].push(pool);
        emit NewDVM(baseToken, quoteToken, creator, pool);
    }

    function removePoolByAdmin(
        address creator,
        address baseToken, 
        address quoteToken,
        address pool
    ) external onlyOwner {
        address[] memory registryList = _REGISTRY_[baseToken][quoteToken];
        for (uint256 i = 0; i < registryList.length; i++) {
            if (registryList[i] == pool) {
                registryList[i] = registryList[registryList.length - 1];
                break;
            }
        }
        _REGISTRY_[baseToken][quoteToken] = registryList;
        _REGISTRY_[baseToken][quoteToken].pop();
        address[] memory userRegistryList = _USER_REGISTRY_[creator];
        for (uint256 i = 0; i < userRegistryList.length; i++) {
            if (userRegistryList[i] == pool) {
                userRegistryList[i] = userRegistryList[userRegistryList.length - 1];
                break;
            }
        }
        _USER_REGISTRY_[creator] = userRegistryList;
        _USER_REGISTRY_[creator].pop();
        emit RemoveDVM(pool);
    }

    // ============ View Functions ============

    function getDODOPool(address baseToken, address quoteToken)
        external
        view
        returns (address[] memory machines)
    {
        return _REGISTRY_[baseToken][quoteToken];
    }

    function getDODOPoolBidirection(address token0, address token1)
        external
        view
        returns (address[] memory baseToken0Machines, address[] memory baseToken1Machines)
    {
        return (_REGISTRY_[token0][token1], _REGISTRY_[token1][token0]);
    }

    function getDODOPoolByUser(address user)
        external
        view
        returns (address[] memory machines)
    {
        return _USER_REGISTRY_[user];
    }
}
        

Compiler Settings

{"remappings":[],"optimizer":{"runs":200,"enabled":true},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"istanbul","compilationTarget":{"DVMFactory.sol":"DVMFactory"}}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"cloneFactory","internalType":"address"},{"type":"address","name":"dvmTemplate","internalType":"address"},{"type":"address","name":"defaultMaintainer","internalType":"address"},{"type":"address","name":"defaultMtFeeRateModel","internalType":"address"}]},{"type":"event","name":"NewDVM","inputs":[{"type":"address","name":"baseToken","internalType":"address","indexed":false},{"type":"address","name":"quoteToken","internalType":"address","indexed":false},{"type":"address","name":"creator","internalType":"address","indexed":false},{"type":"address","name":"dvm","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferPrepared","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","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":"RemoveDVM","inputs":[{"type":"address","name":"dvm","internalType":"address","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"_CLONE_FACTORY_","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"_DEFAULT_MAINTAINER_","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"_DEFAULT_MT_FEE_RATE_MODEL_","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"_DVM_TEMPLATE_","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"_NEW_OWNER_","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"_OWNER_","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"_REGISTRY_","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"},{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"_USER_REGISTRY_","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addPoolByAdmin","inputs":[{"type":"address","name":"creator","internalType":"address"},{"type":"address","name":"baseToken","internalType":"address"},{"type":"address","name":"quoteToken","internalType":"address"},{"type":"address","name":"pool","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"claimOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"address","name":"newVendingMachine","internalType":"address"}],"name":"createDODOVendingMachine","inputs":[{"type":"address","name":"baseToken","internalType":"address"},{"type":"address","name":"quoteToken","internalType":"address"},{"type":"uint256","name":"lpFeeRate","internalType":"uint256"},{"type":"uint256","name":"i","internalType":"uint256"},{"type":"uint256","name":"k","internalType":"uint256"},{"type":"bool","name":"isOpenTWAP","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address[]","name":"machines","internalType":"address[]"}],"name":"getDODOPool","inputs":[{"type":"address","name":"baseToken","internalType":"address"},{"type":"address","name":"quoteToken","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address[]","name":"baseToken0Machines","internalType":"address[]"},{"type":"address[]","name":"baseToken1Machines","internalType":"address[]"}],"name":"getDODOPoolBidirection","inputs":[{"type":"address","name":"token0","internalType":"address"},{"type":"address","name":"token1","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address[]","name":"machines","internalType":"address[]"}],"name":"getDODOPoolByUser","inputs":[{"type":"address","name":"user","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"initOwner","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removePoolByAdmin","inputs":[{"type":"address","name":"creator","internalType":"address"},{"type":"address","name":"baseToken","internalType":"address"},{"type":"address","name":"quoteToken","internalType":"address"},{"type":"address","name":"pool","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateDvmTemplate","inputs":[{"type":"address","name":"_newDVMTemplate","internalType":"address"}]}]
              

Contract Creation Code

Verify & Publish
0x60e06040523480156200001157600080fd5b50604051620012ad380380620012ad83398101604081905262000034916200009c565b606093841b6001600160601b0319908116608052600280546001600160a01b0319166001600160a01b03959095169490941790935590831b821660a05290911b1660c052620000fc565b80516001600160a01b03811681146200009657600080fd5b92915050565b60008060008060808587031215620000b2578384fd5b620000be86866200007e565b9350620000cf86602087016200007e565b9250620000e086604087016200007e565b9150620000f186606087016200007e565b905092959194509250565b60805160601c60a05160601c60c05160601c61116c62000141600039806108225280610b3552508061093e5280610b0d525080610a5e5280610cc2525061116c6000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638456db15116100a2578063d99b8ad411610071578063d99b8ad414610203578063e18c40c714610216578063e65f702914610229578063eb774d051461023c578063f2fde38b1461024457610116565b80638456db15146101cd578063a58888db146101d5578063bdeb0a91146101e8578063ccf0c059146101fb57610116565b80634e71e0c8116100e95780634e71e0c81461017457806357a281dc1461017c5780636c5ccb9b1461019c578063794e5538146101a457806381ab4d0a146101c557610116565b80630d0092971461011b57806316048bc41461013057806339d00ef91461014e57806343274b8214610161575b600080fd5b61012e610129366004610df5565b610257565b005b6101386102c0565b6040516101459190610fdf565b60405180910390f35b61012e61015c366004610e6c565b6102cf565b61012e61016f366004610e6c565b6103ac565b61012e61070f565b61018f61018a366004610e34565b61079d565b6040516101459190611069565b610138610820565b6101b76101b2366004610e34565b610844565b60405161014592919061107c565b61013861093c565b610138610960565b6101386101e3366004610f71565b61096f565b6101386101f6366004610ec7565b6109a4565b6101386109e6565b61012e610211366004610df5565b6109f5565b610138610224366004610f07565b610a41565b61018f610237366004610df5565b610c4a565b610138610cc0565b61012e610252366004610df5565b610ce4565b600154600160a01b900460ff161561028a5760405162461bcd60e51b8152600401610281906110d1565b60405180910390fd5b6001805460ff60a01b1916600160a01b179055600080546001600160a01b039092166001600160a01b0319909216919091179055565b6000546001600160a01b031681565b6000546001600160a01b031633146102f95760405162461bcd60e51b8152600401610281906110fb565b6001600160a01b038084166000908152600360209081526040808320868516845282528083208054600181810183559185528385200180548787166001600160a01b03199182168117909255958a1685526004845282852080549283018155855292909320909201805490931617909155517faf5c5f12a80fc937520df6fcaed66262a4cc775e0f3fceaf7a7cfe476d9a751d9061039e908590859088908690610ff3565b60405180910390a150505050565b6000546001600160a01b031633146103d65760405162461bcd60e51b8152600401610281906110fb565b6001600160a01b03808416600090815260036020908152604080832093861683529281529082902080548351818402810184019094528084526060939283018282801561044c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161042e575b50939450600093505050505b81518110156104df57826001600160a01b031682828151811061047757fe5b60200260200101516001600160a01b031614156104d7578160018351038151811061049e57fe5b60200260200101518282815181106104b257fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506104df565b600101610458565b506001600160a01b0380851660009081526003602090815260408083209387168352928152919020825161051592840190610d69565b506001600160a01b03808516600090815260036020908152604080832093871683529290522080548061054457fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0387168252600481526040918290208054835181840281018401909452808452606093928301828280156105ce57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105b0575b50939450600093505050505b815181101561066157836001600160a01b03168282815181106105f957fe5b60200260200101516001600160a01b03161415610659578160018351038151811061062057fe5b602002602001015182828151811061063457fe5b60200260200101906001600160a01b031690816001600160a01b031681525050610661565b6001016105da565b506001600160a01b0386166000908152600460209081526040909120825161068b92840190610d69565b506001600160a01b03861660009081526004602052604090208054806106ad57fe5b600082815260209020810160001990810180546001600160a01b03191690550190556040517f63971a172c674ce2e9da5e027e9e81a54fd3aa74a2c246a2eb473dc0aa7f5cdd906106ff908590610fdf565b60405180910390a1505050505050565b6001546001600160a01b031633146107395760405162461bcd60e51b8152600401610281906110aa565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6001600160a01b03808316600090815260036020908152604080832093851683529281529082902080548351818402810184019094528084526060939283018282801561081357602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107f5575b5050505050905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b03808316600081815260036020818152604080842095871684529481528483209181528483209383529283529083902081548451818502810185019095528085526060948594909184918301828280156108ce57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108b0575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561092a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161090c575b50505050509050915091509250929050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b031681565b6004602052816000526040600020818154811061098857fe5b6000918252602090912001546001600160a01b03169150829050565b600360205282600052604060002060205281600052604060002081815481106109c957fe5b6000918252602090912001546001600160a01b0316925083915050565b6002546001600160a01b031681565b6000546001600160a01b03163314610a1f5760405162461bcd60e51b8152600401610281906110fb565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6002546040516340925bc760e11b81526000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692638124b78e92610a94921690600401610fdf565b602060405180830381600087803b158015610aae57600080fd5b505af1158015610ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae69190610e18565b60405163281ccb9560e11b81529091506001600160a01b03821690635039972a90610b63907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b907f0000000000000000000000000000000000000000000000000000000000000000908c908c908c9060040161101e565b600060405180830381600087803b158015610b7d57600080fd5b505af1158015610b91573d6000803e3d6000fd5b5050506001600160a01b0380891660009081526003602090815260408083208b8516845282528083208054600181810183559185528385200180549588166001600160a01b03199687168117909155328086526004855283862080549384018155865293909420018054909416909217909255517faf5c5f12a80fc937520df6fcaed66262a4cc775e0f3fceaf7a7cfe476d9a751d9250610c38918a918a91908690610ff3565b60405180910390a19695505050505050565b6001600160a01b038116600090815260046020908152604091829020805483518184028101840190945280845260609392830182828015610cb457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c96575b50505050509050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03163314610d0e5760405162461bcd60e51b8152600401610281906110fb565b600080546040516001600160a01b03808516939216917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b828054828255906000526020600020908101928215610dbe579160200282015b82811115610dbe57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610d89565b50610dca929150610dce565b5090565b610df291905b80821115610dca5780546001600160a01b0319168155600101610dd4565b90565b600060208284031215610e06578081fd5b8135610e118161111e565b9392505050565b600060208284031215610e29578081fd5b8151610e118161111e565b60008060408385031215610e46578081fd5b8235610e518161111e565b91506020830135610e618161111e565b809150509250929050565b60008060008060808587031215610e81578182fd5b8435610e8c8161111e565b93506020850135610e9c8161111e565b92506040850135610eac8161111e565b91506060850135610ebc8161111e565b939692955090935050565b600080600060608486031215610edb578283fd5b8335610ee68161111e565b92506020840135610ef68161111e565b929592945050506040919091013590565b60008060008060008060c08789031215610f1f578182fd5b8635610f2a8161111e565b95506020870135610f3a8161111e565b945060408701359350606087013592506080870135915060a08701358015158114610f63578182fd5b809150509295509295509295565b60008060408385031215610f83578182fd5b8235610f8e8161111e565b946020939093013593505050565b6000815180845260208085019450808401835b83811015610fd45781516001600160a01b031687529582019590820190600101610faf565b509495945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03948516815292841660208401529083166040830152909116606082015260800190565b6001600160a01b0398891681529688166020880152948716604087015260608601939093529416608084015260a083019390935260c082019290925290151560e08201526101000190565b600060208252610e116020830184610f9c565b60006040825261108f6040830185610f9c565b82810360208401526110a18185610f9c565b95945050505050565b6020808252600d908201526c494e56414c49445f434c41494d60981b604082015260600190565b60208082526010908201526f1113d113d7d25392551250531256915160821b604082015260600190565b6020808252600990820152682727aa2fa7aba722a960b91b604082015260600190565b6001600160a01b038116811461113357600080fd5b5056fea264697066735822122053df685c36407c0443a1fe80f46f03b066165a4369b78d4252d7cfbe4765816f64736f6c634300060900330000000000000000000000005e5a7b76462e4bdf83aa98795644281bdba80b880000000000000000000000002bbd66fc4898242bdbd2583bbe1d76e8b8f7144500000000000000000000000095c4f5b83aa70810d4f142d58e5f7242bd891cb00000000000000000000000005e84190a270333ace5b9202a3f4cebf11b81bb01

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101165760003560e01c80638456db15116100a2578063d99b8ad411610071578063d99b8ad414610203578063e18c40c714610216578063e65f702914610229578063eb774d051461023c578063f2fde38b1461024457610116565b80638456db15146101cd578063a58888db146101d5578063bdeb0a91146101e8578063ccf0c059146101fb57610116565b80634e71e0c8116100e95780634e71e0c81461017457806357a281dc1461017c5780636c5ccb9b1461019c578063794e5538146101a457806381ab4d0a146101c557610116565b80630d0092971461011b57806316048bc41461013057806339d00ef91461014e57806343274b8214610161575b600080fd5b61012e610129366004610df5565b610257565b005b6101386102c0565b6040516101459190610fdf565b60405180910390f35b61012e61015c366004610e6c565b6102cf565b61012e61016f366004610e6c565b6103ac565b61012e61070f565b61018f61018a366004610e34565b61079d565b6040516101459190611069565b610138610820565b6101b76101b2366004610e34565b610844565b60405161014592919061107c565b61013861093c565b610138610960565b6101386101e3366004610f71565b61096f565b6101386101f6366004610ec7565b6109a4565b6101386109e6565b61012e610211366004610df5565b6109f5565b610138610224366004610f07565b610a41565b61018f610237366004610df5565b610c4a565b610138610cc0565b61012e610252366004610df5565b610ce4565b600154600160a01b900460ff161561028a5760405162461bcd60e51b8152600401610281906110d1565b60405180910390fd5b6001805460ff60a01b1916600160a01b179055600080546001600160a01b039092166001600160a01b0319909216919091179055565b6000546001600160a01b031681565b6000546001600160a01b031633146102f95760405162461bcd60e51b8152600401610281906110fb565b6001600160a01b038084166000908152600360209081526040808320868516845282528083208054600181810183559185528385200180548787166001600160a01b03199182168117909255958a1685526004845282852080549283018155855292909320909201805490931617909155517faf5c5f12a80fc937520df6fcaed66262a4cc775e0f3fceaf7a7cfe476d9a751d9061039e908590859088908690610ff3565b60405180910390a150505050565b6000546001600160a01b031633146103d65760405162461bcd60e51b8152600401610281906110fb565b6001600160a01b03808416600090815260036020908152604080832093861683529281529082902080548351818402810184019094528084526060939283018282801561044c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161042e575b50939450600093505050505b81518110156104df57826001600160a01b031682828151811061047757fe5b60200260200101516001600160a01b031614156104d7578160018351038151811061049e57fe5b60200260200101518282815181106104b257fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506104df565b600101610458565b506001600160a01b0380851660009081526003602090815260408083209387168352928152919020825161051592840190610d69565b506001600160a01b03808516600090815260036020908152604080832093871683529290522080548061054457fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0387168252600481526040918290208054835181840281018401909452808452606093928301828280156105ce57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105b0575b50939450600093505050505b815181101561066157836001600160a01b03168282815181106105f957fe5b60200260200101516001600160a01b03161415610659578160018351038151811061062057fe5b602002602001015182828151811061063457fe5b60200260200101906001600160a01b031690816001600160a01b031681525050610661565b6001016105da565b506001600160a01b0386166000908152600460209081526040909120825161068b92840190610d69565b506001600160a01b03861660009081526004602052604090208054806106ad57fe5b600082815260209020810160001990810180546001600160a01b03191690550190556040517f63971a172c674ce2e9da5e027e9e81a54fd3aa74a2c246a2eb473dc0aa7f5cdd906106ff908590610fdf565b60405180910390a1505050505050565b6001546001600160a01b031633146107395760405162461bcd60e51b8152600401610281906110aa565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6001600160a01b03808316600090815260036020908152604080832093851683529281529082902080548351818402810184019094528084526060939283018282801561081357602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107f5575b5050505050905092915050565b7f0000000000000000000000005e84190a270333ace5b9202a3f4cebf11b81bb0181565b6001600160a01b03808316600081815260036020818152604080842095871684529481528483209181528483209383529283529083902081548451818502810185019095528085526060948594909184918301828280156108ce57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108b0575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561092a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161090c575b50505050509050915091509250929050565b7f00000000000000000000000095c4f5b83aa70810d4f142d58e5f7242bd891cb081565b6001546001600160a01b031681565b6004602052816000526040600020818154811061098857fe5b6000918252602090912001546001600160a01b03169150829050565b600360205282600052604060002060205281600052604060002081815481106109c957fe5b6000918252602090912001546001600160a01b0316925083915050565b6002546001600160a01b031681565b6000546001600160a01b03163314610a1f5760405162461bcd60e51b8152600401610281906110fb565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6002546040516340925bc760e11b81526000916001600160a01b037f0000000000000000000000005e5a7b76462e4bdf83aa98795644281bdba80b88811692638124b78e92610a94921690600401610fdf565b602060405180830381600087803b158015610aae57600080fd5b505af1158015610ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae69190610e18565b60405163281ccb9560e11b81529091506001600160a01b03821690635039972a90610b63907f00000000000000000000000095c4f5b83aa70810d4f142d58e5f7242bd891cb0908b908b908b907f0000000000000000000000005e84190a270333ace5b9202a3f4cebf11b81bb01908c908c908c9060040161101e565b600060405180830381600087803b158015610b7d57600080fd5b505af1158015610b91573d6000803e3d6000fd5b5050506001600160a01b0380891660009081526003602090815260408083208b8516845282528083208054600181810183559185528385200180549588166001600160a01b03199687168117909155328086526004855283862080549384018155865293909420018054909416909217909255517faf5c5f12a80fc937520df6fcaed66262a4cc775e0f3fceaf7a7cfe476d9a751d9250610c38918a918a91908690610ff3565b60405180910390a19695505050505050565b6001600160a01b038116600090815260046020908152604091829020805483518184028101840190945280845260609392830182828015610cb457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c96575b50505050509050919050565b7f0000000000000000000000005e5a7b76462e4bdf83aa98795644281bdba80b8881565b6000546001600160a01b03163314610d0e5760405162461bcd60e51b8152600401610281906110fb565b600080546040516001600160a01b03808516939216917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b828054828255906000526020600020908101928215610dbe579160200282015b82811115610dbe57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610d89565b50610dca929150610dce565b5090565b610df291905b80821115610dca5780546001600160a01b0319168155600101610dd4565b90565b600060208284031215610e06578081fd5b8135610e118161111e565b9392505050565b600060208284031215610e29578081fd5b8151610e118161111e565b60008060408385031215610e46578081fd5b8235610e518161111e565b91506020830135610e618161111e565b809150509250929050565b60008060008060808587031215610e81578182fd5b8435610e8c8161111e565b93506020850135610e9c8161111e565b92506040850135610eac8161111e565b91506060850135610ebc8161111e565b939692955090935050565b600080600060608486031215610edb578283fd5b8335610ee68161111e565b92506020840135610ef68161111e565b929592945050506040919091013590565b60008060008060008060c08789031215610f1f578182fd5b8635610f2a8161111e565b95506020870135610f3a8161111e565b945060408701359350606087013592506080870135915060a08701358015158114610f63578182fd5b809150509295509295509295565b60008060408385031215610f83578182fd5b8235610f8e8161111e565b946020939093013593505050565b6000815180845260208085019450808401835b83811015610fd45781516001600160a01b031687529582019590820190600101610faf565b509495945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03948516815292841660208401529083166040830152909116606082015260800190565b6001600160a01b0398891681529688166020880152948716604087015260608601939093529416608084015260a083019390935260c082019290925290151560e08201526101000190565b600060208252610e116020830184610f9c565b60006040825261108f6040830185610f9c565b82810360208401526110a18185610f9c565b95945050505050565b6020808252600d908201526c494e56414c49445f434c41494d60981b604082015260600190565b60208082526010908201526f1113d113d7d25392551250531256915160821b604082015260600190565b6020808252600990820152682727aa2fa7aba722a960b91b604082015260600190565b6001600160a01b038116811461113357600080fd5b5056fea264697066735822122053df685c36407c0443a1fe80f46f03b066165a4369b78d4252d7cfbe4765816f64736f6c63430006090033