Contract Address Details

0x265661F2A3c16f07345B6494565B05dCA43b6825

Contract Name
FixedLock
Creator
0x523009–fcc29c at 0x8429cd–b7df1d
Balance
0 NMT
Tokens
Fetching tokens...
Transactions
0 Transactions
Transfers
0 Transfers
Gas Used
Fetching gas used...
Last Balance Update
8990144
Contract name:
FixedLock




Optimization enabled
false
Compiler version
v0.8.18+commit.87f61d96




EVM Version
default




Verified at
2024-02-23T09:57:19.389757Z

Contract source code

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0 ;

abstract contract Initializable {
    /**
     * @dev Indicates that the contract has been initialized.
     */
    bool private _initialized;

    /**
     * @dev Indicates that the contract is in the process of being initialized.
     */
    bool private _initializing;

    /**
     * @dev Modifier to protect an initializer function from being invoked twice.
     */
    modifier initializer() {
        require(_initializing || !_initialized, "Initializable: contract is already initialized");

        bool isTopLevelCall = !_initializing;
        if (isTopLevelCall) {
            _initializing = true;
            _initialized = true;
        }

        _;

        if (isTopLevelCall) {
            _initializing = false;
        }
    }

    function _disableInitializers() internal {
        _initialized = true;
    }
}



contract FixedLock is Initializable {
    uint256 public startTime;
    uint256 public endTime;
    uint256 public deadLockDuration;
    uint256 public releaseTimes;
    uint256 public releasePeriod;
    uint256 public totalLocked;

    uint256 public rewardPropotion;
    uint256 public rewardDelay;

   
    struct LockInfo{
        address owner;
        uint256 locked;   
        uint256 lockTime;                          
        uint256 unlocked;
        uint256 rewardsEarned;
    }

    uint256 public lockId;
    mapping(uint256 => LockInfo) public lockInfo;   //lockId  => lockInfo
    mapping(address => uint256[]) private locks;     //owner  => lockId[]

    event Lock(uint256 indexed id, address indexed owner, uint256 amt);
    event Unlock(uint256 indexed id, address indexed owner, uint256 amt);
    event ClaimReward(uint256 indexed id, address indexed owner, uint256 amt);

    modifier notContract() {
        require((!_isContract(msg.sender)) && (msg.sender == tx.origin), "contract not allowed");
        _;
    }

    function _isContract(address addr) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(addr)
        }
        return size > 0;
    }

    constructor(){_disableInitializers();}
    
    function init(uint256 _endTime, uint256 _lockDuration, uint256 _rewardPropotion, uint256 _rewardDelay, bool _isMainNet) public initializer{
        startTime = block.timestamp;
        endTime = _endTime;
        releaseTimes = 8;
        releasePeriod = _isMainNet? 365 days: 1 minutes;

        deadLockDuration = _lockDuration;
        rewardPropotion = _rewardPropotion;
        rewardDelay = _rewardDelay;
    }

    function getLocks(address guy) public view returns(uint256[] memory){
        return locks[guy];
    }

    function getLockInfos(address guy) public view returns(LockInfo[] memory){
        uint256[] memory lockIds = locks[guy];
        LockInfo[] memory ls = new LockInfo[](lockIds.length);
        for(uint256 i=0; i<lockIds.length; i++){
            ls[i] = lockInfo[lockIds[i]];
        }

        return ls;
    }

    function lock(uint256 amt) public payable notContract returns(uint256 id){
        require(block.timestamp > startTime, "activit not start");
        require(block.timestamp < endTime, "activit end");
        require(msg.value == amt, "invaild NMT value");
        
        //save LockInfo
        totalLocked += amt;
        lockInfo[++lockId] = LockInfo(msg.sender, amt, block.timestamp, 0, 0);
        locks[msg.sender].push(lockId);

        emit Lock(lockId, msg.sender, amt);
        return lockId;
    }

    function unlockable(uint256 id) public view returns (uint256){
        LockInfo memory lf = lockInfo[id];
        uint256 locked_t = block.timestamp - lf.lockTime;

        if (lf.locked == 0 || locked_t < deadLockDuration || lf.locked == lf.unlocked){
            return 0;
        }else {
            uint256 _releasedLocked = locked_t - deadLockDuration;
            uint256 _releasedTimes;
            for (uint8 i=0; i< releaseTimes; i++){
                if (_releasedLocked > i * releasePeriod) _releasedTimes++;
            }

            //released
            uint256 released = lf.locked * _releasedTimes / releaseTimes;
            return released - lf.unlocked;
        }
    }

    function unlock(uint256 id, uint256 amt) public notContract{
        LockInfo storage lf = lockInfo[id];
        require(lf.locked > 0, "lockId unexsit");
        require(lf.owner == msg.sender, "only owner can call");
        require(block.timestamp > lf.lockTime + deadLockDuration, "deadlocking");

        //unlockable
        uint256 _unlockable =  unlockable(id);
        require(amt <= _unlockable && _unlockable <= lf.locked, "out of unlockable");

        //release
        totalLocked -= amt;
        lf.unlocked += amt;
        payable(msg.sender).transfer(amt);

        emit Unlock(lockId, msg.sender, amt);
    }
    
    function checkReward(uint256 id) public view returns(uint256){
        LockInfo memory lf = lockInfo[id];
        if (block.timestamp < lf.lockTime + rewardDelay || lf.rewardsEarned > 0){
            return 0;
        }
        return lf.locked * rewardPropotion / 1000;
    }

    function claimReward(uint256 id) public notContract{
        LockInfo storage lf = lockInfo[id];
        require(lf.locked > 0, "lockId unexsit");
        require(lf.owner == msg.sender, "only owner can call");
        require(lf.rewardsEarned == 0, "already claim");
        require(block.timestamp > lf.lockTime + rewardDelay, "unarrived claim time");

        //claim reward
        uint256 reward = lf.locked * rewardPropotion / 1000;
        require(address(this).balance - reward >= totalLocked, "reward used up");
        lf.rewardsEarned = reward;
        payable(msg.sender).transfer(reward);

        emit ClaimReward(id, msg.sender, reward);
    }
}
        

Contract ABI

[{"type":"constructor","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"checkReward","inputs":[{"type":"uint256","name":"id","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"claimReward","inputs":[{"type":"uint256","name":"id","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"deadLockDuration","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"endTime","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple[]","name":"","internalType":"struct FixedLock.LockInfo[]","components":[{"type":"address"},{"type":"uint256"},{"type":"uint256"},{"type":"uint256"},{"type":"uint256"}]}],"name":"getLockInfos","inputs":[{"type":"address","name":"guy","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"","internalType":"uint256[]"}],"name":"getLocks","inputs":[{"type":"address","name":"guy","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"init","inputs":[{"type":"uint256","name":"_endTime","internalType":"uint256"},{"type":"uint256","name":"_lockDuration","internalType":"uint256"},{"type":"uint256","name":"_rewardPropotion","internalType":"uint256"},{"type":"uint256","name":"_rewardDelay","internalType":"uint256"},{"type":"bool","name":"_isMainNet","internalType":"bool"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"uint256","name":"id","internalType":"uint256"}],"name":"lock","inputs":[{"type":"uint256","name":"amt","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"lockId","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"uint256","name":"locked","internalType":"uint256"},{"type":"uint256","name":"lockTime","internalType":"uint256"},{"type":"uint256","name":"unlocked","internalType":"uint256"},{"type":"uint256","name":"rewardsEarned","internalType":"uint256"}],"name":"lockInfo","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"releasePeriod","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"releaseTimes","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"rewardDelay","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"rewardPropotion","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"startTime","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalLocked","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unlock","inputs":[{"type":"uint256","name":"id","internalType":"uint256"},{"type":"uint256","name":"amt","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"unlockable","inputs":[{"type":"uint256","name":"id","internalType":"uint256"}]},{"type":"event","name":"ClaimReward","inputs":[{"type":"uint256","name":"id","indexed":true},{"type":"address","name":"owner","indexed":true},{"type":"uint256","name":"amt","indexed":false}],"anonymous":false},{"type":"event","name":"Lock","inputs":[{"type":"uint256","name":"id","indexed":true},{"type":"address","name":"owner","indexed":true},{"type":"uint256","name":"amt","indexed":false}],"anonymous":false},{"type":"event","name":"Unlock","inputs":[{"type":"uint256","name":"id","indexed":true},{"type":"address","name":"owner","indexed":true},{"type":"uint256","name":"amt","indexed":false}],"anonymous":false}]
            

Deployed ByteCode

0x6080604052600436106101095760003560e01c8063719f308911610095578063dd46706411610064578063dd46706414610371578063e41f358a146103a1578063e4698991146103cc578063e47f33c614610409578063f6b4ba6f1461044657610109565b8063719f3089146102a357806378e97925146102e05780638af37ef11461030b578063ae169a501461034857610109565b80635b1a4c24116100dc5780635b1a4c24146101b85780635bfadb24146101f957806363ef16271461022257806366fa19321461024d57806370fe1ad11461027857610109565b80631f8b8aac1461010e5780633197cbb6146101375780634409adb214610162578063568914121461018d575b600080fd5b34801561011a57600080fd5b506101356004803603810190610130919061150d565b610471565b005b34801561014357600080fd5b5061014c610598565b6040516101599190611597565b60405180910390f35b34801561016e57600080fd5b5061017761059e565b6040516101849190611597565b60405180910390f35b34801561019957600080fd5b506101a26105a4565b6040516101af9190611597565b60405180910390f35b3480156101c457600080fd5b506101df60048036038101906101da91906115b2565b6105aa565b6040516101f0959493929190611620565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b9190611673565b610600565b005b34801561022e57600080fd5b506102376108f5565b6040516102449190611597565b60405180910390f35b34801561025957600080fd5b506102626108fb565b60405161026f9190611597565b60405180910390f35b34801561028457600080fd5b5061028d610901565b60405161029a9190611597565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c591906116df565b610907565b6040516102d791906117ca565b60405180910390f35b3480156102ec57600080fd5b506102f561099e565b6040516103029190611597565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d91906116df565b6109a4565b60405161033f9190611912565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a91906115b2565b610b8f565b005b61038b600480360381019061038691906115b2565b610eb0565b6040516103989190611597565b60405180910390f35b3480156103ad57600080fd5b506103b66111b0565b6040516103c39190611597565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee91906115b2565b6111b6565b6040516104009190611597565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b91906115b2565b6112b1565b60405161043d9190611597565b60405180910390f35b34801561045257600080fd5b5061045b61143c565b6040516104689190611597565b60405180910390f35b600060019054906101000a900460ff1680610497575060008054906101000a900460ff16155b6104d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104cd906119b7565b60405180910390fd5b60008060019054906101000a900460ff161590508015610526576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b426001819055508560028190555060086004819055508161054857603c61054e565b6301e133805b63ffffffff1660058190555084600381905550836007819055508260088190555080156105905760008060016101000a81548160ff0219169083151502179055505b505050505050565b60025481565b60045481565b60065481565b600a6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154905085565b61060933611442565b15801561064157503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790611a23565b60405180910390fd5b6000600a6000848152602001908152602001600020905060008160010154116106de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d590611a8f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076790611afb565b60405180910390fd5b60035481600201546107829190611b4a565b42116107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba90611bca565b60405180910390fd5b60006107ce846112b1565b90508083111580156107e4575081600101548111155b610823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081a90611c36565b60405180910390fd5b82600660008282546108359190611c56565b92505081905550828260030160008282546108509190611b4a565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015801561089d573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff166009547f4899036909435f0ef100b2258d67d9c644af96bf047bac9f60cbd65f59a80e74856040516108e79190611597565b60405180910390a350505050565b60055481565b60095481565b60085481565b6060600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561099257602002820191906000526020600020905b81548152602001906001019080831161097e575b50505050509050919050565b60015481565b60606000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610a3157602002820191906000526020600020905b815481526020019060010190808311610a1d575b505050505090506000815167ffffffffffffffff811115610a5557610a54611c8a565b5b604051908082528060200260200182016040528015610a8e57816020015b610a7b611455565b815260200190600190039081610a735790505b50905060005b8251811015610b8457600a6000848381518110610ab457610ab3611cb9565b5b602002602001015181526020019081526020016000206040518060a00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815260200160038201548152602001600482015481525050828281518110610b6657610b65611cb9565b5b60200260200101819052508080610b7c90611ce8565b915050610a94565b508092505050919050565b610b9833611442565b158015610bd057503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0690611a23565b60405180910390fd5b6000600a600083815260200190815260200160002090506000816001015411610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6490611a8f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf690611afb565b60405180910390fd5b6000816004015414610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d90611d7c565b60405180910390fd5b6008548160020154610d589190611b4a565b4211610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090611de8565b60405180910390fd5b60006103e86007548360010154610db09190611e08565b610dba9190611e79565b90506006548147610dcb9190611c56565b1015610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0390611ef6565b60405180910390fd5b8082600401819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e5b573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff16837fa756e4d8f7509f4ea7c440cd474be2db34f2c8e4a142b5bfbee53cb92124c6df83604051610ea39190611597565b60405180910390a3505050565b6000610ebb33611442565b158015610ef357503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2990611a23565b60405180910390fd5b6001544211610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90611f62565b60405180910390fd5b6002544210610fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb190611fce565b60405180910390fd5b813414610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff39061203a565b60405180910390fd5b816006600082825461100e9190611b4a565b925050819055506040518060a001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001838152602001428152602001600081526020016000815250600a600060096000815461106790611ce8565b919050819055815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015560808201518160040155905050600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060095490806001815401808255809150506001900390600052602060002001600090919091909150553373ffffffffffffffffffffffffffffffffffffffff166009547f8738fac4c3f6ded3649d1d6c64679bd1a81c89414e861f2ca28b5fc585c0e33d8460405161119e9190611597565b60405180910390a36009549050919050565b60035481565b600080600a60008481526020019081526020016000206040518060a00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905060085481604001516112699190611b4a565b42108061127a575060008160800151115b156112895760009150506112ac565b6103e8600754826020015161129e9190611e08565b6112a89190611e79565b9150505b919050565b600080600a60008481526020019081526020016000206040518060a00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905060008160400151426113649190611c56565b905060008260200151148061137a575060035481105b8061138c575081606001518260200151145b1561139c57600092505050611437565b6000600354826113ac9190611c56565b9050600080600090505b6004548160ff1610156113fd576005548160ff166113d49190611e08565b8311156113ea5781806113e690611ce8565b9250505b80806113f590612067565b9150506113b6565b5060006004548286602001516114139190611e08565b61141d9190611e79565b905084606001518161142f9190611c56565b955050505050505b919050565b60075481565b600080823b905060008111915050919050565b6040518060a00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081525090565b600080fd5b6000819050919050565b6114b28161149f565b81146114bd57600080fd5b50565b6000813590506114cf816114a9565b92915050565b60008115159050919050565b6114ea816114d5565b81146114f557600080fd5b50565b600081359050611507816114e1565b92915050565b600080600080600060a086880312156115295761152861149a565b5b6000611537888289016114c0565b9550506020611548888289016114c0565b9450506040611559888289016114c0565b935050606061156a888289016114c0565b925050608061157b888289016114f8565b9150509295509295909350565b6115918161149f565b82525050565b60006020820190506115ac6000830184611588565b92915050565b6000602082840312156115c8576115c761149a565b5b60006115d6848285016114c0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061160a826115df565b9050919050565b61161a816115ff565b82525050565b600060a0820190506116356000830188611611565b6116426020830187611588565b61164f6040830186611588565b61165c6060830185611588565b6116696080830184611588565b9695505050505050565b6000806040838503121561168a5761168961149a565b5b6000611698858286016114c0565b92505060206116a9858286016114c0565b9150509250929050565b6116bc816115ff565b81146116c757600080fd5b50565b6000813590506116d9816116b3565b92915050565b6000602082840312156116f5576116f461149a565b5b6000611703848285016116ca565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6117418161149f565b82525050565b60006117538383611738565b60208301905092915050565b6000602082019050919050565b60006117778261170c565b6117818185611717565b935061178c83611728565b8060005b838110156117bd5781516117a48882611747565b97506117af8361175f565b925050600181019050611790565b5085935050505092915050565b600060208201905081810360008301526117e4818461176c565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611821816115ff565b82525050565b60a08201600082015161183d6000850182611818565b5060208201516118506020850182611738565b5060408201516118636040850182611738565b5060608201516118766060850182611738565b5060808201516118896080850182611738565b50505050565b600061189b8383611827565b60a08301905092915050565b6000602082019050919050565b60006118bf826117ec565b6118c981856117f7565b93506118d483611808565b8060005b838110156119055781516118ec888261188f565b97506118f7836118a7565b9250506001810190506118d8565b5085935050505092915050565b6000602082019050818103600083015261192c81846118b4565b905092915050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006119a1602e83611934565b91506119ac82611945565b604082019050919050565b600060208201905081810360008301526119d081611994565b9050919050565b7f636f6e7472616374206e6f7420616c6c6f776564000000000000000000000000600082015250565b6000611a0d601483611934565b9150611a18826119d7565b602082019050919050565b60006020820190508181036000830152611a3c81611a00565b9050919050565b7f6c6f636b496420756e6578736974000000000000000000000000000000000000600082015250565b6000611a79600e83611934565b9150611a8482611a43565b602082019050919050565b60006020820190508181036000830152611aa881611a6c565b9050919050565b7f6f6e6c79206f776e65722063616e2063616c6c00000000000000000000000000600082015250565b6000611ae5601383611934565b9150611af082611aaf565b602082019050919050565b60006020820190508181036000830152611b1481611ad8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b558261149f565b9150611b608361149f565b9250828201905080821115611b7857611b77611b1b565b5b92915050565b7f646561646c6f636b696e67000000000000000000000000000000000000000000600082015250565b6000611bb4600b83611934565b9150611bbf82611b7e565b602082019050919050565b60006020820190508181036000830152611be381611ba7565b9050919050565b7f6f7574206f6620756e6c6f636b61626c65000000000000000000000000000000600082015250565b6000611c20601183611934565b9150611c2b82611bea565b602082019050919050565b60006020820190508181036000830152611c4f81611c13565b9050919050565b6000611c618261149f565b9150611c6c8361149f565b9250828203905081811115611c8457611c83611b1b565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611cf38261149f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611d2557611d24611b1b565b5b600182019050919050565b7f616c726561647920636c61696d00000000000000000000000000000000000000600082015250565b6000611d66600d83611934565b9150611d7182611d30565b602082019050919050565b60006020820190508181036000830152611d9581611d59565b9050919050565b7f756e6172726976656420636c61696d2074696d65000000000000000000000000600082015250565b6000611dd2601483611934565b9150611ddd82611d9c565b602082019050919050565b60006020820190508181036000830152611e0181611dc5565b9050919050565b6000611e138261149f565b9150611e1e8361149f565b9250828202611e2c8161149f565b91508282048414831517611e4357611e42611b1b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611e848261149f565b9150611e8f8361149f565b925082611e9f57611e9e611e4a565b5b828204905092915050565b7f7265776172642075736564207570000000000000000000000000000000000000600082015250565b6000611ee0600e83611934565b9150611eeb82611eaa565b602082019050919050565b60006020820190508181036000830152611f0f81611ed3565b9050919050565b7f61637469766974206e6f74207374617274000000000000000000000000000000600082015250565b6000611f4c601183611934565b9150611f5782611f16565b602082019050919050565b60006020820190508181036000830152611f7b81611f3f565b9050919050565b7f6163746976697420656e64000000000000000000000000000000000000000000600082015250565b6000611fb8600b83611934565b9150611fc382611f82565b602082019050919050565b60006020820190508181036000830152611fe781611fab565b9050919050565b7f696e7661696c64204e4d542076616c7565000000000000000000000000000000600082015250565b6000612024601183611934565b915061202f82611fee565b602082019050919050565b6000602082019050818103600083015261205381612017565b9050919050565b600060ff82169050919050565b60006120728261205a565b915060ff820361208557612084611b1b565b5b60018201905091905056fea26469706673582212202fb700a17da092d46e09781009aebf86294a7457b05e7eabda07f3164c64e6bc64736f6c63430008120033