Contract 0xBadBf8fE49022e599293f5477Ad3882B18181D29 1

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x404ab0062d61c8bf659f650b870d63aaff951bfedd15d209d67e8af1a4a6f9010x60806040103379152021-11-26 6:22:575 days 19 hrs ago0xa84201332d69d3bb287df715ebb89457987bf2c4 IN  Contract Creation0 HT0.01159566075 2.25
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
IGOPoolFactory

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-11-26
*/

pragma solidity ^0.6.12;
pragma experimental ABIEncoderV2;
// SPDX-License-Identifier: MIT

interface IERC20 {
    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    function name() external view returns (string memory);

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

    function decimals() external view returns (uint8);
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "e0");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "e1");
        }
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    constructor() internal {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "e3");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

contract Ownable is Context {
    address private _owner;

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

    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ow1");
        _;
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ow2");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "e4");
        (bool success, bytes memory returndata) = target.call{value : weiValue}(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "e5");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "e6");
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "e7");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "e8");
        uint256 c = a / b;
        return c;
    }
}

interface IERC721Enumerable {
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function name() external view returns (string memory);

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

    function tokenURI(uint256 tokenId) external view returns (string memory);

    function mintForMiner(address _to) external returns (bool, uint256);
}

interface IWHT {
    function deposit() external payable;

    function transfer(address to, uint value) external returns (bool);

    function withdraw(uint) external;
}

contract IGOPool is Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    using Address for address;
    using SafeERC20 for IERC20;
    address payable public devAddress;
    address public IGOPoolFactory;
    IERC20 public ETH;
    mapping(address => mapping(uint256 => bool)) public CanBuyBackList;
    mapping(address => uint256[]) public UserIgoTokenIdList;
    mapping(address => uint256) public UserIgoTokenIdListNum;
    // mapping(uint256 => tokenIdInfo) public TokenIdStatusList;
    // mapping(uint256 => bool) public TokenIdMintStatusList;
    // mapping(uint256 => bool) public TokenIdBuybackStatusList;
    // mapping(uint256 => bool) public TokenIdSwapStatusStatusList;
    mapping(uint256 => tokenIdInfo) public TokenIdSwapStatusStatusList;

    struct tokenIdInfo {
        bool mintStatus;
        bool buybackStatus;
        bool swapStatus;
    }

    struct orderItem_1 {
        uint256 orderId;
        address payable owner;
        IERC721Enumerable nftToken;
        uint256 igoAmount;
        address erc20Token;
        uint256 price;
        bool orderStatus;
        string orderMd5;
        uint256 hasigoAmount;
        uint256 startBlock;
        uint256 endBlock;
    }

    struct orderItem_2 {
        IERC20 swapToken;
        uint256 swapPrice;
        uint256 GetRewardBlockNum;
        uint256 BuyBackNum;
        uint256 swapFee;
        uint256 maxIgoAmount;
    }

    orderItem_1 public OrderDetail1;
    orderItem_2 public OrderDetail2;

    constructor(address _devAddress, address _owner, IERC20 _ETH, uint256 orderId, IERC721Enumerable _nftToken, uint256 _igoAmount, address _erc20Token, uint256 _price, string memory _orderMd5, uint256 _startBlock, uint256 _endBlock) public {
        IGOPoolFactory = msg.sender;
        devAddress = payable(_devAddress);
        ETH = _ETH;
        OrderDetail1.orderId = orderId;
        OrderDetail1.owner = payable(_owner);
        OrderDetail1.nftToken = _nftToken;
        OrderDetail1.igoAmount = _igoAmount;
        OrderDetail1.erc20Token = _erc20Token;
        OrderDetail1.price = _price;
        OrderDetail1.orderStatus = true;
        OrderDetail1.orderMd5 = _orderMd5;
        OrderDetail1.hasigoAmount = 0;
        OrderDetail1.startBlock = _startBlock;
        OrderDetail1.endBlock = _endBlock;
        OrderDetail2.swapFee = 5;
        OrderDetail2.maxIgoAmount = 0;
    }

    function setSwapTokenList(IERC20 _swapToken, uint256 _swapPrice) public onlyOwner {
        OrderDetail2.swapToken = _swapToken;
        OrderDetail2.swapPrice = _swapPrice;
    }

    function setDevAddress(address payable _devAddress) public {
        require(msg.sender == IGOPoolFactory, "e001");
        devAddress = _devAddress;
    }

    function setSwapFee(uint256 _fee) public {
        require(msg.sender == IGOPoolFactory, "e002");
        OrderDetail2.swapFee = _fee;
    }

    function setGetRewardBlockNum(uint256 _blockNum) public onlyOwner {
        OrderDetail2.GetRewardBlockNum = _blockNum;
    }

    function setMaxIgoNum(uint256 _maxIgoAmount) public onlyOwner {
        OrderDetail2.maxIgoAmount = _maxIgoAmount;
    }

    function igo(uint256 idoNum) public nonReentrant {
        require(block.number >= OrderDetail1.startBlock && block.number <= OrderDetail1.endBlock, "e008");
        require(OrderDetail1.hasigoAmount.add(idoNum) <= OrderDetail1.igoAmount, "e009");
        if (OrderDetail2.maxIgoAmount > 0) {
            require(UserIgoTokenIdListNum[msg.sender] + idoNum <= OrderDetail2.maxIgoAmount, "e031");
        }
        uint256 allAmount = (OrderDetail1.price).mul(idoNum);
        require(OrderDetail1.orderStatus == true, "e010");
        require(IERC20(OrderDetail1.erc20Token).balanceOf(msg.sender) >= allAmount, "e011");
        uint256 fee = allAmount.mul(OrderDetail2.swapFee).div(100);
        uint256 toUser = allAmount.sub(fee);
        IERC20(OrderDetail1.erc20Token).safeTransferFrom(msg.sender, address(this), toUser);
        IERC20(OrderDetail1.erc20Token).safeTransferFrom(msg.sender, devAddress, fee);
        for (uint256 i = 0; i < idoNum; i++) {
            (,uint256 _token_id) = OrderDetail1.nftToken.mintForMiner(msg.sender);
            // TokenIdMintStatusList[_token_id] = true;
            TokenIdSwapStatusStatusList[_token_id].mintStatus = true;
            CanBuyBackList[msg.sender][_token_id] = true;
            UserIgoTokenIdList[msg.sender].push(_token_id);
            OrderDetail1.hasigoAmount = OrderDetail1.hasigoAmount.add(1);
            UserIgoTokenIdListNum[msg.sender] = UserIgoTokenIdListNum[msg.sender].add(1);
        }
    }

    function igoWithEth(uint256 idoNum) public payable nonReentrant {
        require(block.number >= OrderDetail1.startBlock && block.number <= OrderDetail1.endBlock, "e012");
        require(OrderDetail1.hasigoAmount.add(idoNum) <= OrderDetail1.igoAmount, "e013");
        if (OrderDetail2.maxIgoAmount > 0) {
            require(UserIgoTokenIdListNum[msg.sender] + idoNum <= OrderDetail2.maxIgoAmount, "e032");
        }
        uint256 allAmount = (OrderDetail1.price).mul(idoNum);
        require(OrderDetail1.orderStatus == true, "e014");
        require(msg.value >= allAmount, "e015");
        uint256 fee = allAmount.mul(OrderDetail2.swapFee).div(100);
        uint256 toUser = allAmount.sub(fee);
        payable(address(this)).transfer(toUser);
        devAddress.transfer(fee);
        for (uint256 i = 0; i < idoNum; i++) {
            (,uint256 _token_id) = OrderDetail1.nftToken.mintForMiner(msg.sender);
            // TokenIdMintStatusList[_token_id] = true;
            TokenIdSwapStatusStatusList[_token_id].mintStatus = true;
            CanBuyBackList[msg.sender][_token_id] = true;
            UserIgoTokenIdList[msg.sender].push(_token_id);
            OrderDetail1.hasigoAmount = OrderDetail1.hasigoAmount.add(1);
            UserIgoTokenIdListNum[msg.sender] = UserIgoTokenIdListNum[msg.sender].add(1);
        }
    }

    function getWrongTokens(IERC20 _token) public onlyOwner {
        uint256 amount = _token.balanceOf(address(this));
        require(amount > 0, "e016");
        _token.safeTransfer(msg.sender, amount);
    }

    function swapToken(uint256 _tokenId) public {
        uint256 allAmount = OrderDetail2.swapPrice;
        uint256 fee = allAmount.mul(OrderDetail2.swapFee).div(100);
        uint256 toUser = allAmount.sub(fee);
        OrderDetail1.nftToken.transferFrom(msg.sender, OrderDetail1.owner, _tokenId);
        if (CanBuyBackList[msg.sender][_tokenId] == true) {
            CanBuyBackList[msg.sender][_tokenId] == false;
            OrderDetail2.BuyBackNum = OrderDetail2.BuyBackNum.add(1);
        }
        //TokenIdStatusList[_tokenId].swapStatus = true;
        // TokenIdSwapStatusStatusList[_tokenId] = true;
        TokenIdSwapStatusStatusList[_tokenId].swapStatus = true;
        OrderDetail2.swapToken.safeTransfer(msg.sender, toUser);
        OrderDetail2.swapToken.safeTransfer(devAddress, fee);
    }

    function buyback(uint256[] memory _tokenIdList) public {
        require(block.number < OrderDetail2.GetRewardBlockNum, "e017");
        uint256 buybackNum = _tokenIdList.length;
        uint256 leftrate = uint256(100).sub(OrderDetail2.swapFee);
        uint256 allAmount = (OrderDetail1.price).mul(leftrate).mul(buybackNum).div(100);
        uint256 fee = allAmount.mul(OrderDetail2.swapFee).div(100);
        uint256 toUser = allAmount.sub(fee);
        for (uint256 i = 0; i < _tokenIdList.length; i++) {
            require(CanBuyBackList[msg.sender][_tokenIdList[i]] == true, "e018");
        }
        for (uint256 i = 0; i < _tokenIdList.length; i++) {
            OrderDetail1.nftToken.transferFrom(msg.sender, OrderDetail1.owner, _tokenIdList[i]);
            CanBuyBackList[msg.sender][_tokenIdList[i]] = false;
            OrderDetail2.BuyBackNum = OrderDetail2.BuyBackNum.add(1);
            //TokenIdStatusList[_tokenIdList[i]].buybackStatus = true;
            // TokenIdBuybackStatusList[_tokenIdList[i]] = true;
            TokenIdSwapStatusStatusList[_tokenIdList[i]].buybackStatus = true;
        }
        if (OrderDetail1.erc20Token != address(0)) {
            IERC20(OrderDetail1.erc20Token).safeTransfer(msg.sender, toUser);
            IERC20(OrderDetail1.erc20Token).safeTransfer(devAddress, fee);
        } else {
            msg.sender.transfer(toUser);
            devAddress.transfer(fee);
        }
    }

    function getReward() public {
        require(block.number > OrderDetail2.GetRewardBlockNum, "e019");
        require(OrderDetail1.owner == msg.sender, "e020");
        uint256 leftrate = uint256(100).sub(OrderDetail2.swapFee);
        uint256 rewardNum = OrderDetail1.hasigoAmount.sub(OrderDetail2.BuyBackNum);
        require(rewardNum > 0, "e021");
        uint256 allAmount = (OrderDetail1.price).mul(leftrate).mul(rewardNum).div(100);
        require(allAmount > 0, "e022");
        uint256 fee = allAmount.mul(OrderDetail2.swapFee).div(100);
        uint256 toUser = allAmount.sub(fee);
        if (OrderDetail1.erc20Token != address(0)) {
            IERC20(OrderDetail1.erc20Token).safeTransfer(msg.sender, toUser);
            IERC20(OrderDetail1.erc20Token).safeTransfer(devAddress, fee);
        } else {
            msg.sender.transfer(toUser);
            devAddress.transfer(fee);
        }
    }

    function cleanEth() public onlyOwner {
        msg.sender.transfer(address(this).balance);
    }

    function getTokenInfoByIndex() public view returns (orderItem_1 memory orderItem1, orderItem_2 memory orderItem2, string memory name2, string memory symbol2, uint256 decimals2, uint256 price2, string memory nftName, string memory nftSymbol){
        orderItem1 = OrderDetail1;
        orderItem2 = OrderDetail2;
        if (orderItem1.erc20Token == address(0)) {
            name2 = ETH.name();
            symbol2 = ETH.symbol();
            decimals2 = ETH.decimals();
        } else {
            name2 = IERC20(orderItem1.erc20Token).name();
            symbol2 = IERC20(orderItem1.erc20Token).symbol();
            decimals2 = IERC20(orderItem1.erc20Token).decimals();
        }
        price2 = orderItem1.price.mul(1e18).div(10 ** decimals2);
        nftName = orderItem1.nftToken.name();
        nftSymbol = orderItem1.nftToken.symbol();
    }

    function getUserIdoTokenIdList(address _address) public view returns (uint256[] memory) {
        return UserIgoTokenIdList[_address];
    }

    struct nftInfo {
        string name;
        string symbol;
        string tokenURI;
        address ownerOf;
        tokenIdInfo statusList;
    }

    function getNftInfo(IERC721Enumerable _nftToken, uint256 _tokenId) public view returns (nftInfo memory nftInfo2) {
        nftInfo2 = nftInfo(_nftToken.name(), _nftToken.symbol(), _nftToken.tokenURI(_tokenId), _nftToken.ownerOf(_tokenId), TokenIdSwapStatusStatusList[_tokenId]);
    }

    function massGetNftInfo(IERC721Enumerable _nftToken, uint256[] memory _tokenIdList) public view returns (nftInfo[] memory nftInfolist2) {
        nftInfolist2 = new nftInfo[](_tokenIdList.length);
        for (uint256 i = 0; i < _tokenIdList.length; i++) {
            nftInfolist2[i] = getNftInfo(_nftToken, _tokenIdList[i]);
        }
    }

    receive() payable external {}
}

contract IGOPoolFactory is Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    using Address for address;
    using SafeERC20 for IERC20;
    mapping(uint256 => IGOPool) public orderItemInfo;
    IERC20 public ETH;
    address public devAddress;
    mapping(IERC721Enumerable => uint256[]) public nftAddressOrderList;
    mapping(uint256 => bool) public orderStatusList;
    mapping(address => uint256[]) public userOrderList;
    mapping(string => bool) public orderMd5StatusList;
    uint256 public orderNum = 0;
    mapping(address => bool) public erc20tokenWhiteList;
    mapping(address => bool) public igoWhiteList;

    event createIgoEvent(address _devAddress, address _owner, IERC20 _ETH, uint256 _orderId, IERC721Enumerable _nftToken, uint256 _igoAmount, address _erc20Token, uint256 _price, string _orderMd5, uint256 _startBlock, uint256 _endBlock);
    event createIgoEvent2(IGOPool igoItem);
    constructor(IERC20 _ETH, address _devAddress) public {
        ETH = _ETH;
        devAddress = _devAddress;
        addIgoWhiteList(msg.sender);
        addErc20tokenWhiteList(address(0));
    }

    function addErc20tokenWhiteList(address _addreess) public onlyOwner {
        erc20tokenWhiteList[_addreess] = true;
    }

    function removeErc20tokenWhiteList(address _addreess) public onlyOwner {
        erc20tokenWhiteList[_addreess] = false;
    }

    function addIgoWhiteList(address _addreess) public onlyOwner {
        igoWhiteList[_addreess] = true;
    }

    function removeIgoWhiteList(address _addreess) public onlyOwner {
        igoWhiteList[_addreess] = false;
    }

    function createIGO(IERC721Enumerable _nftToken, uint256 _igoAmount, address _erc20Token, uint256 _price, string memory _orderMd5, uint256 _startBlock, uint256 _endBlock) public {
        require(igoWhiteList[msg.sender] == true, "e002");
        require(orderMd5StatusList[_orderMd5] == false, "e003");
        require(erc20tokenWhiteList[_erc20Token] == true, "e004");
        IGOPool igoitem = new IGOPool(devAddress, msg.sender, ETH, orderNum, _nftToken, _igoAmount, _erc20Token, _price, _orderMd5, _startBlock, _endBlock);
        emit createIgoEvent(devAddress, msg.sender, ETH, orderNum, _nftToken, _igoAmount, _erc20Token, _price, _orderMd5, _startBlock, _endBlock);
        emit createIgoEvent2(igoitem);
        orderItemInfo[orderNum] = igoitem;
        nftAddressOrderList[_nftToken].push(orderNum);
        orderStatusList[orderNum] = true;
        userOrderList[msg.sender].push(orderNum);
        orderNum = orderNum.add(1);
        orderMd5StatusList[_orderMd5] = true;
        igoitem.transferOwnership(msg.sender);
    }

    function setDevAddress(IGOPool _igoItem, address payable _devAddress) public onlyOwner {
        _igoItem.setDevAddress(_devAddress);
    }

    function setSwapFee(IGOPool _igoItem, uint256 _fee) public onlyOwner {
        _igoItem.setSwapFee(_fee);
    }

    function massSetSwapFee(uint256[] memory _igoItem_list, uint256 _fee) public onlyOwner {
        for (uint256 i = 0; i < _igoItem_list.length; i++) {
            orderItemInfo[i].setSwapFee(_fee);
        }
    }

    function massSetDevAddress(uint256[] memory _igoItem_list, address payable _devAddress) public onlyOwner {
        for (uint256 i = 0; i < _igoItem_list.length; i++) {
            orderItemInfo[i].setDevAddress(_devAddress);
        }
    }

    struct tokenIdInfo {
        uint256 poolId;
        bool mintStatus;
        bool buybackStatus;
        bool swapStatus;
    }

    struct tokenIdInfoList {
        tokenIdInfo[] tokenIdInfoListItem;
    }

    function getTokenIdStatusList(IERC721Enumerable _nftToken, uint256 _tokenId) public view returns (tokenIdInfo[] memory) {
        uint256[] memory index_list = nftAddressOrderList[_nftToken];
        tokenIdInfo[] memory x = new tokenIdInfo[](index_list.length);
        for (uint256 i = 0; i < index_list.length; i++) {
            (bool mintStatus,bool buybackStatus,bool swapStatus) = orderItemInfo[index_list[i]].TokenIdSwapStatusStatusList(_tokenId);
            x[i] = tokenIdInfo(index_list[i], mintStatus, buybackStatus, swapStatus);
        }
        return x;
    }

    function massGetTokenIdStatusList(IERC721Enumerable _nftToken, uint256[] memory _tokenIdList) public view returns (tokenIdInfoList[] memory x) {
        x = new tokenIdInfoList[](_tokenIdList.length);
        for (uint256 i = 0; i < _tokenIdList.length; i++) {
            x[i] = tokenIdInfoList(getTokenIdStatusList(_nftToken, _tokenIdList[i]));
        }
        return x;
    }

    struct orderItem_1 {
        uint256 orderId;
        address payable owner;
        IERC721Enumerable nftToken;
        uint256 igoAmount;
        address erc20Token;
        uint256 price;
        bool orderStatus;
        string orderMd5;
        uint256 hasigoAmount;
        uint256 startBlock;
        uint256 endBlock;
    }

    struct orderItem_2 {
        IERC20 swapToken;
        uint256 swapPrice;
        uint256 GetRewardBlockNum;
        uint256 BuyBackNum;
        uint256 swapFee;
        uint256 maxIgoAmount;
    }

    struct orderItem_3 {
        orderItem_1 x1;
        orderItem_2 x2;
        string name2;
        string symbol2;
        uint256 decimals2;
        uint256 price2;
        string nftName;
        string nftSymbol;
        IGOPool igoAddress;
    }

    function get(uint256 _index) public view returns (orderItem_3 memory returnIgoInfo) {
        returnIgoInfo.igoAddress = orderItemInfo[_index];
        {
            (uint256 orderId,
            address payable owner,
            IERC721Enumerable nftToken,
            uint256 igoAmount,
            address erc20Token,
            uint256 price,
            bool orderStatus,
            string memory orderMd5,
            uint256 hasigoAmount,
            uint256 startBlock,
            uint256 endBlock) = orderItemInfo[_index].OrderDetail1();
            returnIgoInfo.x1 = orderItem_1(orderId, owner, nftToken, igoAmount, erc20Token, price, orderStatus, orderMd5, hasigoAmount, startBlock, endBlock);
        }
        {
            (IERC20 swapToken,
            uint256 swapPrice,
            uint256 GetRewardBlockNum,
            uint256 BuyBackNum,
            uint256 swapFee,
            uint256 maxIgoAmount) = orderItemInfo[_index].OrderDetail2();
            returnIgoInfo.x2 = orderItem_2(swapToken, swapPrice, GetRewardBlockNum, BuyBackNum, swapFee, maxIgoAmount);
        }
        {
            (,,string memory name2, string memory symbol2, uint256 decimals2, uint256 price2,string memory nftName,string memory nftSymbol) = orderItemInfo[_index].getTokenInfoByIndex();
            returnIgoInfo.name2 = name2;
            returnIgoInfo.symbol2 = symbol2;
            returnIgoInfo.decimals2 = decimals2;
            returnIgoInfo.price2 = price2;
            returnIgoInfo.nftName = nftName;
            returnIgoInfo.nftSymbol = nftSymbol;
        }
    }

    function mass_get(uint256[] memory index_list) public view returns (orderItem_3[] memory returnIgoInfoList) {
        returnIgoInfoList = new orderItem_3[](index_list.length);
        for (uint256 i = 0; i < index_list.length; i++) {
            returnIgoInfoList[i] = get(index_list[i]);
        }
    }

    function getWrongTokens(IERC20 _token) public onlyOwner {
        uint256 amount = _token.balanceOf(address(this));
        require(amount > 0, "e016");
        _token.safeTransfer(msg.sender, amount);
    }

    function cleanEth() public onlyOwner {
        msg.sender.transfer(address(this).balance);
    }

    receive() payable external {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"_ETH","type":"address"},{"internalType":"address","name":"_devAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_devAddress","type":"address"},{"indexed":false,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"contract IERC20","name":"_ETH","type":"address"},{"indexed":false,"internalType":"uint256","name":"_orderId","type":"uint256"},{"indexed":false,"internalType":"contract IERC721Enumerable","name":"_nftToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"_igoAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"_erc20Token","type":"address"},{"indexed":false,"internalType":"uint256","name":"_price","type":"uint256"},{"indexed":false,"internalType":"string","name":"_orderMd5","type":"string"},{"indexed":false,"internalType":"uint256","name":"_startBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_endBlock","type":"uint256"}],"name":"createIgoEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IGOPool","name":"igoItem","type":"address"}],"name":"createIgoEvent2","type":"event"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addreess","type":"address"}],"name":"addErc20tokenWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addreess","type":"address"}],"name":"addIgoWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cleanEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721Enumerable","name":"_nftToken","type":"address"},{"internalType":"uint256","name":"_igoAmount","type":"uint256"},{"internalType":"address","name":"_erc20Token","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"string","name":"_orderMd5","type":"string"},{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"uint256","name":"_endBlock","type":"uint256"}],"name":"createIGO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"erc20tokenWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"get","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"orderId","type":"uint256"},{"internalType":"address payable","name":"owner","type":"address"},{"internalType":"contract IERC721Enumerable","name":"nftToken","type":"address"},{"internalType":"uint256","name":"igoAmount","type":"uint256"},{"internalType":"address","name":"erc20Token","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"orderStatus","type":"bool"},{"internalType":"string","name":"orderMd5","type":"string"},{"internalType":"uint256","name":"hasigoAmount","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"}],"internalType":"struct IGOPoolFactory.orderItem_1","name":"x1","type":"tuple"},{"components":[{"internalType":"contract IERC20","name":"swapToken","type":"address"},{"internalType":"uint256","name":"swapPrice","type":"uint256"},{"internalType":"uint256","name":"GetRewardBlockNum","type":"uint256"},{"internalType":"uint256","name":"BuyBackNum","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"uint256","name":"maxIgoAmount","type":"uint256"}],"internalType":"struct IGOPoolFactory.orderItem_2","name":"x2","type":"tuple"},{"internalType":"string","name":"name2","type":"string"},{"internalType":"string","name":"symbol2","type":"string"},{"internalType":"uint256","name":"decimals2","type":"uint256"},{"internalType":"uint256","name":"price2","type":"uint256"},{"internalType":"string","name":"nftName","type":"string"},{"internalType":"string","name":"nftSymbol","type":"string"},{"internalType":"contract IGOPool","name":"igoAddress","type":"address"}],"internalType":"struct IGOPoolFactory.orderItem_3","name":"returnIgoInfo","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC721Enumerable","name":"_nftToken","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getTokenIdStatusList","outputs":[{"components":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"bool","name":"mintStatus","type":"bool"},{"internalType":"bool","name":"buybackStatus","type":"bool"},{"internalType":"bool","name":"swapStatus","type":"bool"}],"internalType":"struct IGOPoolFactory.tokenIdInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"getWrongTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"igoWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC721Enumerable","name":"_nftToken","type":"address"},{"internalType":"uint256[]","name":"_tokenIdList","type":"uint256[]"}],"name":"massGetTokenIdStatusList","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"bool","name":"mintStatus","type":"bool"},{"internalType":"bool","name":"buybackStatus","type":"bool"},{"internalType":"bool","name":"swapStatus","type":"bool"}],"internalType":"struct IGOPoolFactory.tokenIdInfo[]","name":"tokenIdInfoListItem","type":"tuple[]"}],"internalType":"struct IGOPoolFactory.tokenIdInfoList[]","name":"x","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_igoItem_list","type":"uint256[]"},{"internalType":"address payable","name":"_devAddress","type":"address"}],"name":"massSetDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_igoItem_list","type":"uint256[]"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"massSetSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"index_list","type":"uint256[]"}],"name":"mass_get","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"orderId","type":"uint256"},{"internalType":"address payable","name":"owner","type":"address"},{"internalType":"contract IERC721Enumerable","name":"nftToken","type":"address"},{"internalType":"uint256","name":"igoAmount","type":"uint256"},{"internalType":"address","name":"erc20Token","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"orderStatus","type":"bool"},{"internalType":"string","name":"orderMd5","type":"string"},{"internalType":"uint256","name":"hasigoAmount","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"}],"internalType":"struct IGOPoolFactory.orderItem_1","name":"x1","type":"tuple"},{"components":[{"internalType":"contract IERC20","name":"swapToken","type":"address"},{"internalType":"uint256","name":"swapPrice","type":"uint256"},{"internalType":"uint256","name":"GetRewardBlockNum","type":"uint256"},{"internalType":"uint256","name":"BuyBackNum","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"uint256","name":"maxIgoAmount","type":"uint256"}],"internalType":"struct IGOPoolFactory.orderItem_2","name":"x2","type":"tuple"},{"internalType":"string","name":"name2","type":"string"},{"internalType":"string","name":"symbol2","type":"string"},{"internalType":"uint256","name":"decimals2","type":"uint256"},{"internalType":"uint256","name":"price2","type":"uint256"},{"internalType":"string","name":"nftName","type":"string"},{"internalType":"string","name":"nftSymbol","type":"string"},{"internalType":"contract IGOPool","name":"igoAddress","type":"address"}],"internalType":"struct IGOPoolFactory.orderItem_3[]","name":"returnIgoInfoList","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC721Enumerable","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftAddressOrderList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"orderItemInfo","outputs":[{"internalType":"contract IGOPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"orderMd5StatusList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"orderNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"orderStatusList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addreess","type":"address"}],"name":"removeErc20tokenWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addreess","type":"address"}],"name":"removeIgoWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IGOPool","name":"_igoItem","type":"address"},{"internalType":"address payable","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IGOPool","name":"_igoItem","type":"address"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userOrderList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006009553480156200001657600080fd5b5060405162005bef38038062005bef8339810160408190526200003991620001ab565b600062000045620000e2565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060018055600380546001600160a01b038085166001600160a01b0319928316179092556004805492841692909116919091179055620000ce33620000e6565b620000da60006200014d565b50506200021f565b3390565b620000f0620000e2565b6000546001600160a01b03908116911614620001295760405162461bcd60e51b81526004016200012090620001e9565b60405180910390fd5b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b62000157620000e2565b6000546001600160a01b03908116911614620001875760405162461bcd60e51b81526004016200012090620001e9565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b60008060408385031215620001be578182fd5b8251620001cb8162000206565b6020840151909250620001de8162000206565b809150509250929050565b6020808252600390820152624f773160e81b604082015260600190565b6001600160a01b03811681146200021c57600080fd5b50565b6159c0806200022f6000396000f3fe608060405260043610620001c95760003560e01c80638322fff21162000103578063a3abd37d1162000097578063d9a0266b116200006d578063d9a0266b146200055c578063df0690e41462000581578063f2fde38b14620005a6578063f9a2121614620005cb57620001d1565b8063a3abd37d14620004ed578063ac2bb2821462000512578063c923ba6c146200053757620001d1565b80638da5cb5b11620000d95780638da5cb5b14620004645780639507d39a146200047c578063991991c714620004b05780639d78c83414620004d557620001d1565b80638322fff2146200040257806389cd6e9a146200041a5780638ada6738146200043f57620001d1565b806331f35fcc116200017b5780634038e67411620001515780634038e674146200035f5780634117132a14620003845780635b96100914620003a957806379a5192f14620003ce57620001d1565b806331f35fcc14620002ee578063322c8be814620003225780633ad10ef6146200034757620001d1565b80630490044d14620001d657806304b9b2dc14620001f0578063194c6407146200022d5780631c3ac66514620002525780631f4174401462000286578063268ea1fa14620002ba57620001d1565b36620001d157005b600080fd5b348015620001e357600080fd5b50620001ee620005f0565b005b348015620001fd57600080fd5b50620002156200020f36600462001cce565b62000663565b60405162000224919062002502565b60405180910390f35b3480156200023a57600080fd5b50620001ee6200024c36600462001f5a565b62000711565b3480156200025f57600080fd5b506200027762000271366004620020c9565b620007b1565b6040516200022491906200245b565b3480156200029357600080fd5b50620002ab620002a536600462001c81565b620007cc565b604051620002249190620025da565b348015620002c757600080fd5b50620002df620002d936600462001e66565b620007e1565b60405162000224919062002566565b348015620002fb57600080fd5b50620003136200030d36600462001eb9565b620008a0565b604051620002249190620025c5565b3480156200032f57600080fd5b50620001ee6200034136600462001d59565b62000aa6565b3480156200035457600080fd5b506200027762000b72565b3480156200036c57600080fd5b50620002ab6200037e36600462001f8c565b62000b81565b3480156200039157600080fd5b50620002ab620003a336600462001c81565b62000ba1565b348015620003b657600080fd5b50620001ee620003c836600462001c81565b62000bb6565b348015620003db57600080fd5b50620003f3620003ed36600462001ca0565b62000cb4565b60405162000224919062002715565b3480156200040f57600080fd5b506200027762000ce3565b3480156200042757600080fd5b50620001ee6200043936600462001c81565b62000cf2565b3480156200044c57600080fd5b50620002ab6200045e366004620020c9565b62000d4d565b3480156200047157600080fd5b506200027762000d62565b3480156200048957600080fd5b50620004a16200049b366004620020c9565b62000d71565b60405162000224919062002700565b348015620004bd57600080fd5b50620001ee620004cf36600462001eb9565b62001073565b348015620004e257600080fd5b50620003f3620010db565b348015620004fa57600080fd5b50620001ee6200050c36600462001c81565b620010e1565b3480156200051f57600080fd5b50620001ee6200053136600462001c81565b6200113f565b3480156200054457600080fd5b50620003f36200055636600462001eb9565b6200119a565b3480156200056957600080fd5b50620001ee6200057b36600462001ecc565b620011b4565b3480156200058e57600080fd5b50620001ee620005a036600462001c81565b620014ad565b348015620005b357600080fd5b50620001ee620005c536600462001c81565b6200150b565b348015620005d857600080fd5b50620001ee620005ea36600462001d04565b620015c9565b620005fa62001690565b6000546001600160a01b03908116911614620006335760405162461bcd60e51b81526004016200062a9062002633565b60405180910390fd5b60405133904780156108fc02916000818181858888f1935050505015801562000660573d6000803e3d6000fd5b50565b606081516001600160401b03811180156200067d57600080fd5b50604051908082528060200260200182016040528015620006bb57816020015b620006a76200188a565b8152602001906001900390816200069d5790505b50905060005b82518110156200070b57620006ea838281518110620006dc57fe5b602002602001015162000d71565b828281518110620006f757fe5b6020908102919091010152600101620006c1565b50919050565b6200071b62001690565b6000546001600160a01b039081169116146200074b5760405162461bcd60e51b81526004016200062a9062002633565b60405163d0d41fe160e01b81526001600160a01b0383169063d0d41fe190620007799084906004016200245b565b600060405180830381600087803b1580156200079457600080fd5b505af1158015620007a9573d6000803e3d6000fd5b505050505050565b6002602052600090815260409020546001600160a01b031681565b600b6020526000908152604090205460ff1681565b606081516001600160401b0381118015620007fb57600080fd5b506040519080825280602002602001820160405280156200083957816020015b62000825620018ef565b8152602001906001900390816200081b5790505b50905060005b82518110156200089857604051806020016040528062000874868685815181106200086657fe5b6020026020010151620008a0565b8152508282815181106200088457fe5b60209081029190910101526001016200083f565b505b92915050565b60608060056000856001600160a01b03166001600160a01b031681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156200091457602002820191906000526020600020905b815481526020019060010190808311620008ff575b50505050509050606081516001600160401b03811180156200093557600080fd5b506040519080825280602002602001820160405280156200097357816020015b6200095f62001902565b815260200190600190039081620009555790505b50905060005b825181101562000a9d576000806000600260008786815181106200099957fe5b60209081029190910181015182528101919091526040908101600020549051636c83632560e01b81526001600160a01b0390911690636c83632590620009e4908b9060040162002715565b60606040518083038186803b158015620009fd57600080fd5b505afa15801562000a12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a38919062001dbe565b925092509250604051806080016040528087868151811062000a5657fe5b602002602001015181526020018415158152602001831515815260200182151581525085858151811062000a8657fe5b602090810291909101015250505060010162000979565b50949350505050565b62000ab062001690565b6000546001600160a01b0390811691161462000ae05760405162461bcd60e51b81526004016200062a9062002633565b60005b825181101562000b6d57600081815260026020526040908190205490516334e1990760e01b81526001600160a01b03909116906334e199079062000b2c90859060040162002715565b600060405180830381600087803b15801562000b4757600080fd5b505af115801562000b5c573d6000803e3d6000fd5b50506001909201915062000ae39050565b505050565b6004546001600160a01b031681565b805160208183018101805160088252928201919093012091525460ff1681565b600a6020526000908152604090205460ff1681565b62000bc062001690565b6000546001600160a01b0390811691161462000bf05760405162461bcd60e51b81526004016200062a9062002633565b6040516370a0823160e01b81526000906001600160a01b038316906370a082319062000c219030906004016200245b565b60206040518083038186803b15801562000c3a57600080fd5b505afa15801562000c4f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c759190620020e2565b90506000811162000c9a5760405162461bcd60e51b81526004016200062a906200268a565b62000cb06001600160a01b038316338362001694565b5050565b6007602052816000526040600020818154811062000cce57fe5b90600052602060002001600091509150505481565b6003546001600160a01b031681565b62000cfc62001690565b6000546001600160a01b0390811691161462000d2c5760405162461bcd60e51b81526004016200062a9062002633565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b60066020526000908152604090205460ff1681565b6000546001600160a01b031690565b62000d7b6200188a565b6000828152600260208181526040808420546001600160a01b03166101008601819052868552929091528051632bf9457560e11b81529051839283928392839283928392606092849283928392916357f28aea9160048083019286929190829003018186803b15801562000dee57600080fd5b505afa15801562000e03573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000e2d9190810190620020fb565b9a509a509a509a509a509a509a509a509a509a509a506040518061016001604052808c81526020018b6001600160a01b031681526020018a6001600160a01b03168152602001898152602001886001600160a01b031681526020018781526020018615158152602001858152602001848152602001838152602001828152508c6000018190525050505050505050505050506000806000806000806002600089815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166318dc90366040518163ffffffff1660e01b815260040160c06040518083038186803b15801562000f2857600080fd5b505afa15801562000f3d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f63919062001e11565b6040805160c0810182526001600160a01b03978816815260208082019790975280820195909552606080860194909452608085019290925260a08401528b84019290925260008c81526002909352818320548251635a25cc8960e01b81529251919a508a99509297508796508895508594509190921691635a25cc899160048083019288929190829003018186803b15801562000fff57600080fd5b505afa15801562001014573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200103e919081019062001fc2565b60408f019590955260608e019390935260808d019190915260a08c015260c08b015260e08a0152509698975050505050505050565b6200107d62001690565b6000546001600160a01b03908116911614620010ad5760405162461bcd60e51b81526004016200062a9062002633565b6040516334e1990760e01b81526001600160a01b038316906334e19907906200077990849060040162002715565b60095481565b620010eb62001690565b6000546001600160a01b039081169116146200111b5760405162461bcd60e51b81526004016200062a9062002633565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b6200114962001690565b6000546001600160a01b03908116911614620011795760405162461bcd60e51b81526004016200062a9062002633565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6005602052816000526040600020818154811062000cce57fe5b336000908152600b602052604090205460ff161515600114620011eb5760405162461bcd60e51b81526004016200062a906200266c565b600883604051620011fd91906200243d565b9081526040519081900360200190205460ff1615620012305760405162461bcd60e51b81526004016200062a90620026a8565b6001600160a01b0385166000908152600a602052604090205460ff161515600114620012705760405162461bcd60e51b81526004016200062a90620026c6565b6004546003546009546040516000936001600160a01b039081169333939116918c908c908c908c908c908c908c90620012a99062001929565b620012bf9b9a999897969594939291906200246f565b604051809103906000f080158015620012dc573d6000803e3d6000fd5b506004546003546009546040519394507f92cc84d222ac049c4b23acb167d8615c42c7172af47f32617d37100e396fb3539362001338936001600160a01b039081169333939116918e908e908e908e908e908e908e906200246f565b60405180910390a17f57ce7dc0d925357c40c3c1368aaaa54e006c09677c715fe420df58f97583fc99816040516200137191906200245b565b60405180910390a160098054600090815260026020908152604080832080546001600160a01b0319166001600160a01b03878116919091179091558c16835260058252808320845481546001818101845592865284862001558454845260068352818420805460ff19168217905533845260078352908320845481548084018355918552929093209092015590546200140a91620016ee565b600955604051600190600890620014239087906200243d565b908152604051908190036020018120805492151560ff199093169290921790915563f2fde38b60e01b81526001600160a01b0382169063f2fde38b906200146f9033906004016200245b565b600060405180830381600087803b1580156200148a57600080fd5b505af11580156200149f573d6000803e3d6000fd5b505050505050505050505050565b620014b762001690565b6000546001600160a01b03908116911614620014e75760405162461bcd60e51b81526004016200062a9062002633565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6200151562001690565b6000546001600160a01b03908116911614620015455760405162461bcd60e51b81526004016200062a9062002633565b6001600160a01b0381166200156e5760405162461bcd60e51b81526004016200062a90620025fa565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b620015d362001690565b6000546001600160a01b03908116911614620016035760405162461bcd60e51b81526004016200062a9062002633565b60005b825181101562000b6d576000818152600260205260409081902054905163d0d41fe160e01b81526001600160a01b039091169063d0d41fe1906200164f9085906004016200245b565b600060405180830381600087803b1580156200166a57600080fd5b505af11580156200167f573d6000803e3d6000fd5b505060019092019150620016069050565b3390565b62000b6d8363a9059cbb60e01b8484604051602401620016b6929190620024e9565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200171d565b600082820183811015620017165760405162461bcd60e51b81526004016200062a9062002650565b9392505050565b6060620017598260405180604001604052806002815260200161065360f41b815250856001600160a01b0316620017999092919063ffffffff16565b80519091501562000b6d57808060200190518101906200177a919062001d9f565b62000b6d5760405162461bcd60e51b81526004016200062a9062002617565b6060620017aa8484600085620017b2565b949350505050565b6060620017bf8562001884565b620017de5760405162461bcd60e51b81526004016200062a90620026e4565b60006060866001600160a01b03168587604051620017fd91906200243d565b60006040518083038185875af1925050503d80600081146200183c576040519150601f19603f3d011682016040523d82523d6000602084013e62001841565b606091505b5091509150811562001857579150620017aa9050565b805115620018685780518082602001fd5b8360405162461bcd60e51b81526004016200062a9190620025e5565b3b151590565b604051806101200160405280620018a062001937565b8152602001620018af620019ae565b815260200160608152602001606081526020016000815260200160008152602001606081526020016060815260200160006001600160a01b031681525090565b6040518060200160405280606081525090565b60408051608081018252600080825260208201819052918101829052606081019190915290565b6131c980620027c283390190565b6040518061016001604052806000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160006001600160a01b0316815260200160008152602001600015158152602001606081526020016000815260200160008152602001600081525090565b6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b80516200089a816200279c565b600082601f83011262001a0b578081fd5b81356001600160401b0381111562001a21578182fd5b602080820262001a338282016200271e565b8381529350818401858301828701840188101562001a5057600080fd5b600092505b8483101562001a7557803582526001929092019190830190830162001a55565b505050505092915050565b805180151581146200089a57600080fd5b600082601f83011262001aa2578081fd5b813562001ab962001ab38262002745565b6200271e565b915080825283602082850101111562001ad157600080fd5b8060208401602084013760009082016020015292915050565b600082601f83011262001afb578081fd5b815162001b0c62001ab38262002745565b915080825283602082850101111562001b2457600080fd5b6200089881602084016020860162002769565b600061016080838503121562001b4b578182fd5b62001b56816200271e565b9150508151815262001b6c8360208401620019ed565b602082015262001b808360408401620019ed565b60408201526060820151606082015262001b9e8360808401620019ed565b608082015260a082015160a082015262001bbc8360c0840162001a80565b60c082015260e08201516001600160401b0381111562001bdb57600080fd5b62001be98482850162001aea565b60e083015250610100828101519082015261012080830151908201526101409182015191810191909152919050565b600060c0828403121562001c2a578081fd5b62001c3660c06200271e565b9050815162001c45816200279c565b808252506020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015292915050565b60006020828403121562001c93578081fd5b813562001716816200279c565b6000806040838503121562001cb3578081fd5b823562001cc0816200279c565b946020939093013593505050565b60006020828403121562001ce0578081fd5b81356001600160401b0381111562001cf6578182fd5b620017aa84828501620019fa565b6000806040838503121562001d17578182fd5b82356001600160401b0381111562001d2d578283fd5b62001d3b85828601620019fa565b925050602083013562001d4e816200279c565b809150509250929050565b6000806040838503121562001d6c578182fd5b82356001600160401b0381111562001d82578283fd5b62001d9085828601620019fa565b95602094909401359450505050565b60006020828403121562001db1578081fd5b81516200171681620027b2565b60008060006060848603121562001dd3578081fd5b835162001de081620027b2565b602085015190935062001df381620027b2565b604085015190925062001e0681620027b2565b809150509250925092565b60008060008060008060c0878903121562001e2a578384fd5b865162001e37816200279c565b6020880151604089015160608a015160808b015160a0909b0151939c929b509099909850965090945092505050565b6000806040838503121562001e79578182fd5b823562001e86816200279c565b915060208301356001600160401b0381111562001ea1578182fd5b62001eaf85828601620019fa565b9150509250929050565b6000806040838503121562001cb3578182fd5b600080600080600080600060e0888a03121562001ee7578485fd5b873562001ef4816200279c565b965060208801359550604088013562001f0d816200279c565b94506060880135935060808801356001600160401b0381111562001f2f578182fd5b62001f3d8a828b0162001a91565b93505060a0880135915060c0880135905092959891949750929550565b6000806040838503121562001f6d578182fd5b823562001f7a816200279c565b9150602083013562001d4e816200279c565b60006020828403121562001f9e578081fd5b81356001600160401b0381111562001fb4578182fd5b620017aa8482850162001a91565b6000806000806000806000806101a0898b03121562001fdf578182fd5b88516001600160401b038082111562001ff6578384fd5b620020048c838d0162001b37565b9950620020158c60208d0162001c18565b985060e08b01519150808211156200202b578384fd5b620020398c838d0162001aea565b97506101008b015191508082111562002050578384fd5b6200205e8c838d0162001aea565b96506101208b015195506101408b015194506101608b015191508082111562002085578384fd5b620020938c838d0162001aea565b93506101808b0151915080821115620020aa578283fd5b50620020b98b828c0162001aea565b9150509295985092959890939650565b600060208284031215620020db578081fd5b5035919050565b600060208284031215620020f4578081fd5b5051919050565b60008060008060008060008060008060006101608c8e0312156200211d578485fd5b8b519a5060208c015162002131816200279c565b60408d0151909a5062002144816200279c565b60608d015190995097506200215d8d60808e01620019ed565b965060a08c01519550620021758d60c08e0162001a80565b945060e08c01516001600160401b0381111562002190578384fd5b6200219e8e828f0162001aea565b9450506101008c015192506101208c015191506101408c015190509295989b509295989b9093969950565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156200222d578151805188528381015115158489015260408082015115159089015260609081015115159088015260809096019590820190600101620021e9565b509495945050505050565b15159052565b600081518084526200225881602086016020860162002769565b601f01601f19169290920160200192915050565b6000610160825184526020830151620022896020860182620021c9565b5060408301516200229e6040860182620021c9565b50606083015160608501526080830151620022bd6080860182620021c9565b5060a083015160a085015260c0830151620022dc60c086018262002238565b5060e08301518160e0860152620022f6828601826200223e565b61010085810151908701526101208086015190870152610140948501519490950193909352509192915050565b80516001600160a01b031682526020808201519083015260408082015190830152606080820151908301526080808201519083015260a090810151910152565b60006101c082518185526200237b828601826200226c565b915050602083015162002392602086018262002323565b50604083015184820360e0860152620023ac82826200223e565b915050606083015161010085830381870152620023ca83836200223e565b9250608085015161012087015260a085015161014087015260c08501519150858303610160870152620023fe83836200223e565b925060e085015191508583036101808701526200241c83836200223e565b925080850151915050620024356101a0860182620021c9565b509392505050565b600082516200245181846020870162002769565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038c811682528b811660208301528a81166040830152606082018a9052888116608083015260a08201889052861660c082015260e081018590526101606101008201819052600090620024cc838201876200223e565b610120840195909552505061014001529998505050505050505050565b6001600160a01b03929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156200255957603f198886030184526200254685835162002363565b9450928501929085019060010162002527565b5092979650505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156200255957878503603f19018452815151868652620025b187870182620021d6565b95505092850192908501906001016200258b565b600060208252620017166020830184620021d6565b901515815260200190565b6000602082526200171660208301846200223e565b60208082526003908201526227bb9960e91b604082015260600190565b602080825260029082015261653160f01b604082015260600190565b6020808252600390820152624f773160e81b604082015260600190565b602080825260029082015261653560f01b604082015260600190565b6020808252600490820152633298181960e11b604082015260600190565b6020808252600490820152633298189b60e11b604082015260600190565b6020808252600490820152636530303360e01b604082015260600190565b602080825260049082015263194c0c0d60e21b604082015260600190565b602080825260029082015261194d60f21b604082015260600190565b60006020825262001716602083018462002363565b90815260200190565b6040518181016001600160401b03811182821017156200273d57600080fd5b604052919050565b60006001600160401b038211156200275b578081fd5b50601f01601f191660200190565b60005b83811015620027865781810151838201526020016200276c565b8381111562002796576000848401525b50505050565b6001600160a01b03811681146200066057600080fd5b80151581146200066057600080fdfe60806040523480156200001157600080fd5b50604051620031c9380380620031c98339810160408190526200003491620002a1565b60006200004062000147565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180805560038054336001600160a01b0319918216179091556002805482166001600160a01b038f8116919091179091556004805483168d831617905560098b9055600a805483168e8316179055600b805483168b8316179055600c899055600d8054909216908816179055600e859055600f805460ff1916909117905582516200011e9060109060208601906200014b565b506000601181905560129290925560135560056018556019555062000392975050505050505050565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200018e57805160ff1916838001178555620001be565b82800160010185558215620001be579182015b82811115620001be578251825591602001919060010190620001a1565b50620001cc929150620001d0565b5090565b5b80821115620001cc5760008155600101620001d1565b8051620001f48162000379565b92915050565b600082601f8301126200020b578081fd5b81516001600160401b038082111562000222578283fd5b6040516020601f8401601f191682018101838111838210171562000244578586fd5b806040525081945083825286818588010111156200026157600080fd5b600092505b8383101562000285578583018101518284018201529182019162000266565b83831115620002975760008185840101525b5050505092915050565b60008060008060008060008060008060006101608c8e031215620002c3578687fd5b8b51620002d08162000379565b60208d0151909b50620002e38162000379565b9950620002f48d60408e01620001e7565b985060608c015197506200030c8d60808e01620001e7565b965060a08c01519550620003248d60c08e01620001e7565b60e08d01516101008e015191965094506001600160401b0381111562000348578384fd5b620003568e828f01620001fa565b9350506101208c015191506101408c015190509295989b509295989b9093969950565b6001600160a01b03811681146200038f57600080fd5b50565b612e2780620003a26000396000f3fe6080604052600436106101a05760003560e01c80635aa28f8e116100ec5780639289046c1161008a578063d0d41fe111610064578063d0d41fe1146104c1578063e4e5daec146104e1578063ee4724e414610501578063f2fde38b14610521576101a7565b80639289046c14610447578063997ed9c214610474578063c87b909914610494576101a7565b80636c836325116100c65780636c836325146103db578063751511e91461040a5780638322fff21461041d5780638da5cb5b14610432576101a7565b80635aa28f8e146103615780635b9610091461038e5780636678acab146103ae576101a7565b8063381a6b011161015957806345348a8c1161013357806345348a8c146102bf5780634bbf3a7a146102ec57806357f28aea1461030c5780635a25cc8914610338576101a7565b8063381a6b01146102755780633ad10ef6146102955780633d18b912146102aa576101a7565b80630490044d146101ac57806316809e27146101c357806318dc9036146101ee578063302b58b01461021557806331ed7d001461023557806334e1990714610255576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610541565b005b3480156101cf57600080fd5b506101d86105ae565b6040516101e59190612724565b60405180910390f35b3480156101fa57600080fd5b506102036105bd565b6040516101e59695949392919061283e565b34801561022157600080fd5b506101c16102303660046125aa565b6105de565b34801561024157600080fd5b506101c16102503660046125aa565b61091b565b34801561026157600080fd5b506101c16102703660046125aa565b610955565b34801561028157600080fd5b506101c161029036600461243a565b610984565b3480156102a157600080fd5b506101d8610c81565b3480156102b657600080fd5b506101c1610c90565b3480156102cb57600080fd5b506102df6102da3660046124be565b610e52565b6040516101e59190612bc3565b3480156102f857600080fd5b506101c16103073660046125aa565b6110b3565b34801561031857600080fd5b506103216111f2565b6040516101e59b9a99989796959493929190612d11565b34801561034457600080fd5b5061034d6112cb565b6040516101e5989796959493929190612bd6565b34801561036d57600080fd5b5061038161037c36600461240f565b61188d565b6040516101e59190612d08565b34801561039a57600080fd5b506101c16103a93660046123d7565b6118bb565b3480156103ba57600080fd5b506103ce6103c936600461240f565b6119a9565b6040516101e59190612819565b3480156103e757600080fd5b506103fb6103f63660046125aa565b6119c9565b6040516101e593929190612824565b6101c16104183660046125aa565b6119f1565b34801561042957600080fd5b506101d8611cd1565b34801561043e57600080fd5b506101d8611ce0565b34801561045357600080fd5b506104676104623660046123d7565b611cef565b6040516101e591906127d5565b34801561048057600080fd5b506101c161048f3660046124be565b611d5b565b3480156104a057600080fd5b506104b46104af3660046124d0565b611db6565b6040516101e59190612775565b3480156104cd57600080fd5b506101c16104dc3660046123d7565b611e5c565b3480156104ed57600080fd5b506103816104fc3660046123d7565b611ea8565b34801561050d57600080fd5b506101c161051c3660046125aa565b611eba565b34801561052d57600080fd5b506101c161053c3660046123d7565b611ef4565b610549611faa565b6000546001600160a01b0390811691161461057f5760405162461bcd60e51b815260040161057690612976565b60405180910390fd5b60405133904780156108fc02916000818181858888f193505050501580156105ab573d6000803e3d6000fd5b50565b6003546001600160a01b031681565b6014546015546016546017546018546019546001600160a01b039095169486565b600260015414156106015760405162461bcd60e51b81526004016105769061291e565b6002600155601254431080159061061a57506013544311155b6106365760405162461bcd60e51b815260040161057690612a23565b600c546011546106469083611fae565b11156106645760405162461bcd60e51b815260040161057690612b0f565b6019541561069f57601954336000908152600760205260409020548201111561069f5760405162461bcd60e51b815260040161057690612900565b600e546000906106af9083611fdc565b600f5490915060ff1615156001146106d95760405162461bcd60e51b815260040161057690612af1565b600d546040516370a0823160e01b815282916001600160a01b0316906370a0823190610709903390600401612724565b60206040518083038186803b15801561072157600080fd5b505afa158015610735573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075991906125c2565b10156107775760405162461bcd60e51b815260040161057690612b4b565b600061079c606461079660146004015485611fdc90919063ffffffff16565b90612016565b905060006107aa838361204b565b600d549091506107c5906001600160a01b0316333084612073565b600254600d546107e4916001600160a01b039182169133911685612073565b60005b8481101561091057600b5460405163309e92e960e01b81526000916001600160a01b03169063309e92e990610820903390600401612724565b6040805180830381600087803b15801561083957600080fd5b505af115801561084d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610871919061248d565b60008181526008602090815260408083208054600160ff19918216811790925533808652600585528386208787528552838620805490921683179091558452600683529083208054808301825590845291909220018290556011549193506108d99250611fae565b601155336000908152600760205260409020546108f7906001611fae565b33600090815260076020526040902055506001016107e7565b505060018055505050565b610923611faa565b6000546001600160a01b039081169116146109505760405162461bcd60e51b815260040161057690612976565b601955565b6003546001600160a01b0316331461097f5760405162461bcd60e51b815260040161057690612a05565b601855565b60165443106109a55760405162461bcd60e51b815260040161057690612b2d565b80516018546000906109b99060649061204b565b905060006109e46064610796856109de86600960050154611fdc90919063ffffffff16565b90611fdc565b90506000610a05606461079660146004015485611fdc90919063ffffffff16565b90506000610a13838361204b565b905060005b8651811015610a88573360009081526005602052604081208851909190899084908110610a4157fe5b60209081029190910181015182528101919091526040016000205460ff161515600114610a805760405162461bcd60e51b815260040161057690612ba5565b600101610a18565b5060005b8651811015610bc457600b54600a5488516001600160a01b03928316926323b872dd9233929116908b9086908110610ac057fe5b60200260200101516040518463ffffffff1660e01b8152600401610ae693929190612738565b600060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b50503360009081526005602052604081208a51919350915082908a9085908110610b3a57fe5b6020908102919091018101518252810191909152604001600020805460ff1916911515919091179055601754610b71906001611fae565b601460030181905550600160086000898481518110610b8c57fe5b602090810291909101810151825281019190915260400160002080549115156101000261ff0019909216919091179055600101610a8c565b50600d546001600160a01b031615610c0f57600d54610bed906001600160a01b031633836120cb565b600254600d54610c0a916001600160a01b039182169116846120cb565b610c79565b604051339082156108fc029083906000818181858888f19350505050158015610c3c573d6000803e3d6000fd5b506002546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015610c77573d6000803e3d6000fd5b505b505050505050565b6002546001600160a01b031681565b6016544311610cb15760405162461bcd60e51b815260040161057690612993565b600a546001600160a01b03163314610cdb5760405162461bcd60e51b815260040161057690612a7b565b601854600090610ced9060649061204b565b601754601154919250600091610d029161204b565b905060008111610d245760405162461bcd60e51b8152600401610576906128e2565b6000610d476064610796846109de87600960050154611fdc90919063ffffffff16565b905060008111610d695760405162461bcd60e51b815260040161057690612ad3565b6000610d88606461079660146004015485611fdc90919063ffffffff16565b90506000610d96838361204b565b600d549091506001600160a01b031615610de357600d54610dc1906001600160a01b031633836120cb565b600254600d54610dde916001600160a01b039182169116846120cb565b610e4b565b604051339082156108fc029083906000818181858888f19350505050158015610e10573d6000803e3d6000fd5b506002546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015610c79573d6000803e3d6000fd5b5050505050565b610e5a612244565b6040518060a00160405280846001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b158015610e9e57600080fd5b505afa158015610eb2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610eda919081019061251e565b8152602001846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015610f1857600080fd5b505afa158015610f2c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f54919081019061251e565b8152602001846001600160a01b031663c87b56dd856040518263ffffffff1660e01b8152600401610f859190612d08565b60006040518083038186803b158015610f9d57600080fd5b505afa158015610fb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fd9919081019061251e565b8152602001846001600160a01b0316636352211e856040518263ffffffff1660e01b815260040161100a9190612d08565b60206040518083038186803b15801561102257600080fd5b505afa158015611036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105a91906123f3565b6001600160a01b031681526000938452600860209081526040948590208551606081018752905460ff80821615158352610100820481161515838501526201000090910416151595810195909552019290925250919050565b6015546018546000906110ce90606490610796908590611fdc565b905060006110dc838361204b565b600b54600a546040516323b872dd60e01b81529293506001600160a01b03918216926323b872dd926111179233929116908990600401612738565b600060405180830381600087803b15801561113157600080fd5b505af1158015611145573d6000803e3d6000fd5b505033600090815260056020908152604080832089845290915290205460ff16151560011415915061119b90505733600090815260056020908152604082209186905252601754611197906001611fae565b6017555b6000848152600860205260409020805462ff00001916620100001790556014546111cf906001600160a01b031633836120cb565b6002546014546111ec916001600160a01b039182169116846120cb565b50505050565b60098054600a54600b54600c54600d54600e54600f546010805460408051602060026101006001861615026000190190941693909304601f8101849004840282018401909252818152999a6001600160a01b03998a169a988a169997989790961696949560ff9094169492918301828280156112af5780601f10611284576101008083540402835291602001916112af565b820191906000526020600020905b81548152906001019060200180831161129257829003601f168201915b50505050509080600801549080600901549080600a015490508b565b6112d3612281565b6112db6122f8565b6040805161016081018252600980548252600a546001600160a01b03908116602080850191909152600b54821684860152600c54606080860191909152600d549092166080850152600e5460a0850152600f5460ff16151560c085015260108054865160026101006001841615026000190190921691909104601f8101849004840282018401909752868152929586956000958695889586959394929360e086019390918301828280156113d05780601f106113a5576101008083540402835291602001916113d0565b820191906000526020600020905b8154815290600101906020018083116113b357829003601f168201915b505050918352505060088201546020808301919091526009830154604080840191909152600a90930154606092830152825160c0810184526014546001600160a01b03908116825260155492820192909252601654938101939093526017549183019190915260185460808084019190915260195460a0840152830151929a50909850166115f45760048054604080516306fdde0360e01b815290516001600160a01b03909216926306fdde03928282019260009290829003018186803b15801561149a57600080fd5b505afa1580156114ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114d6919081019061251e565b9550600460009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561152657600080fd5b505afa15801561153a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611562919081019061251e565b9450600460009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b257600080fd5b505afa1580156115c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ea91906125da565b60ff169350611765565b87608001516001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b15801561163157600080fd5b505afa158015611645573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261166d919081019061251e565b955087608001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156116ac57600080fd5b505afa1580156116c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116e8919081019061251e565b945087608001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561172757600080fd5b505afa15801561173b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175f91906125da565b60ff1693505b61178b84600a0a610796670de0b6b3a76400008b60a00151611fdc90919063ffffffff16565b925087604001516001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156117ca57600080fd5b505afa1580156117de573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611806919081019061251e565b915087604001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561184557600080fd5b505afa158015611859573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611881919081019061251e565b90509091929394959697565b600660205281600052604060002081815481106118a657fe5b90600052602060002001600091509150505481565b6118c3611faa565b6000546001600160a01b039081169116146118f05760405162461bcd60e51b815260040161057690612976565b6040516370a0823160e01b81526000906001600160a01b038316906370a082319061191f903090600401612724565b60206040518083038186803b15801561193757600080fd5b505afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f91906125c2565b9050600081116119915760405162461bcd60e51b815260040161057690612a41565b6119a56001600160a01b03831633836120cb565b5050565b600560209081526000928352604080842090915290825290205460ff1681565b60086020526000908152604090205460ff808216916101008104821691620100009091041683565b60026001541415611a145760405162461bcd60e51b81526004016105769061291e565b60026001556012544310801590611a2d57506013544311155b611a495760405162461bcd60e51b815260040161057690612b87565b600c54601154611a599083611fae565b1115611a775760405162461bcd60e51b81526004016105769061293a565b60195415611ab2576019543360009081526007602052604090205482011115611ab25760405162461bcd60e51b815260040161057690612a99565b600e54600090611ac29083611fdc565b600f5490915060ff161515600114611aec5760405162461bcd60e51b815260040161057690612958565b80341015611b0c5760405162461bcd60e51b8152600401610576906128a8565b6000611b2b606461079660146004015485611fdc90919063ffffffff16565b90506000611b39838361204b565b604051909150309082156108fc029083906000818181858888f19350505050158015611b69573d6000803e3d6000fd5b506002546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015611ba4573d6000803e3d6000fd5b5060005b8481101561091057600b5460405163309e92e960e01b81526000916001600160a01b03169063309e92e990611be1903390600401612724565b6040805180830381600087803b158015611bfa57600080fd5b505af1158015611c0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c32919061248d565b60008181526008602090815260408083208054600160ff1991821681179092553380865260058552838620878752855283862080549092168317909155845260068352908320805480830182559084529190922001829055601154919350611c9a9250611fae565b60115533600090815260076020526040902054611cb8906001611fae565b3360009081526007602052604090205550600101611ba8565b6004546001600160a01b031681565b6000546001600160a01b031690565b6001600160a01b038116600090815260066020908152604091829020805483518184028101840190945280845260609392830182828015611d4f57602002820191906000526020600020905b815481526020019060010190808311611d3b575b50505050509050919050565b611d63611faa565b6000546001600160a01b03908116911614611d905760405162461bcd60e51b815260040161057690612976565b601480546001600160a01b0319166001600160a01b039390931692909217909155601555565b6060815167ffffffffffffffff81118015611dd057600080fd5b50604051908082528060200260200182016040528015611e0a57816020015b611df7612244565b815260200190600190039081611def5790505b50905060005b8251811015611e5557611e3684848381518110611e2957fe5b6020026020010151610e52565b828281518110611e4257fe5b6020908102919091010152600101611e10565b5092915050565b6003546001600160a01b03163314611e865760405162461bcd60e51b815260040161057690612b69565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60076020526000908152604090205481565b611ec2611faa565b6000546001600160a01b03908116911614611eef5760405162461bcd60e51b815260040161057690612976565b601655565b611efc611faa565b6000546001600160a01b03908116911614611f295760405162461bcd60e51b815260040161057690612976565b6001600160a01b038116611f4f5760405162461bcd60e51b81526004016105769061288b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082820183811015611fd35760405162461bcd60e51b8152600401610576906129e9565b90505b92915050565b600082611feb57506000611fd6565b82820282848281611ff857fe5b0414611fd35760405162461bcd60e51b815260040161057690612a5f565b60008082116120375760405162461bcd60e51b8152600401610576906129b1565b600082848161204257fe5b04949350505050565b60008282111561206d5760405162461bcd60e51b8152600401610576906129cd565b50900390565b6111ec846323b872dd60e01b85858560405160240161209493929190612738565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526120ef565b6120ea8363a9059cbb60e01b848460405160240161209492919061275c565b505050565b60606121298260405180604001604052806002815260200161065360f41b815250856001600160a01b03166121639092919063ffffffff16565b8051909150156120ea5780806020019051810190612147919061246d565b6120ea5760405162461bcd60e51b8152600401610576906128c6565b6060612172848460008561217a565b949350505050565b60606121858561223e565b6121a15760405162461bcd60e51b815260040161057690612ab7565b60006060866001600160a01b031685876040516121be9190612708565b60006040518083038185875af1925050503d80600081146121fb576040519150601f19603f3d011682016040523d82523d6000602084013e612200565b606091505b509150915081156122145791506121729050565b8051156122245780518082602001fd5b8360405162461bcd60e51b81526004016105769190612871565b3b151590565b6040518060a0016040528060608152602001606081526020016060815260200160006001600160a01b0316815260200161227c612337565b905290565b6040518061016001604052806000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160006001600160a01b0316815260200160008152602001600015158152602001606081526020016000815260200160008152602001600081525090565b6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b600082601f830112612367578081fd5b813567ffffffffffffffff81111561237d578182fd5b602080820261238d828201612d89565b838152935081840185830182870184018810156123a957600080fd5b600092505b848310156123cc5780358252600192909201919083019083016123ae565b505050505092915050565b6000602082840312156123e8578081fd5b8135611fd381612ddc565b600060208284031215612404578081fd5b8151611fd381612ddc565b60008060408385031215612421578081fd5b823561242c81612ddc565b946020939093013593505050565b60006020828403121561244b578081fd5b813567ffffffffffffffff811115612461578182fd5b61217284828501612357565b60006020828403121561247e578081fd5b81518015158114611fd3578182fd5b6000806040838503121561249f578182fd5b825180151581146124ae578283fd5b6020939093015192949293505050565b60008060408385031215612421578182fd5b600080604083850312156124e2578182fd5b82356124ed81612ddc565b9150602083013567ffffffffffffffff811115612508578182fd5b61251485828601612357565b9150509250929050565b60006020828403121561252f578081fd5b815167ffffffffffffffff80821115612546578283fd5b818401915084601f830112612559578283fd5b815181811115612567578384fd5b61257a601f8201601f1916602001612d89565b9150808252856020828501011115612590578384fd5b6125a1816020840160208601612db0565b50949350505050565b6000602082840312156125bb578081fd5b5035919050565b6000602082840312156125d3578081fd5b5051919050565b6000602082840312156125eb578081fd5b815160ff81168114611fd3578182fd5b6001600160a01b03169052565b15159052565b60008151808452612626816020860160208601612db0565b601f01601f19169290920160200192915050565b6000815160e0845261264f60e085018261260e565b905060208301518482036020860152612668828261260e565b91505060408301518482036040860152612682828261260e565b91505060018060a01b03606084015116606085015260808301518051151560808601526020810151151560a08601526040810151151560c0860152508091505092915050565b80516001600160a01b031682526020808201519083015260408082015190830152606080820151908301526080808201519083015260a090810151910152565b6000825161271a818460208701612db0565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156127c857603f198886030184526127b685835161263a565b9450928501929085019060010161279a565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561280d578351835292840192918401916001016127f1565b50909695505050505050565b901515815260200190565b921515835290151560208301521515604082015260600190565b6001600160a01b03969096168652602086019490945260408501929092526060840152608083015260a082015260c00190565b600060208252612884602083018461260e565b9392505050565b60208082526003908201526227bb9960e91b604082015260600190565b6020808252600490820152636530313560e01b604082015260600190565b602080825260029082015261653160f01b604082015260600190565b6020808252600490820152636530323160e01b604082015260600190565b6020808252600490820152636530333160e01b604082015260600190565b602080825260029082015261653360f01b604082015260600190565b6020808252600490820152636530313360e01b604082015260600190565b602080825260049082015263194c0c4d60e21b604082015260600190565b6020808252600390820152624f773160e81b604082015260600190565b6020808252600490820152636530313960e01b604082015260600190565b6020808252600290820152610ca760f31b604082015260600190565b602080825260029082015261329b60f11b604082015260600190565b602080825260029082015261653560f01b604082015260600190565b6020808252600490820152633298181960e11b604082015260600190565b6020808252600490820152630ca6060760e31b604082015260600190565b6020808252600490820152633298189b60e11b604082015260600190565b602080825260029082015261653760f01b604082015260600190565b6020808252600490820152630653032360e41b604082015260600190565b6020808252600490820152633298199960e11b604082015260600190565b602080825260029082015261194d60f21b604082015260600190565b6020808252600490820152633298191960e11b604082015260600190565b6020808252600490820152630653031360e41b604082015260600190565b6020808252600490820152636530303960e01b604082015260600190565b6020808252600490820152636530313760e01b604082015260600190565b6020808252600490820152636530313160e01b604082015260600190565b6020808252600490820152636530303160e01b604082015260600190565b6020808252600490820152633298189960e11b604082015260600190565b6020808252600490820152630ca6062760e31b604082015260600190565b600060208252612884602083018461263a565b60006101a08083528a51818401525060208a0151612bf86101c08401826125fb565b5060408a0151612c0c6101e08401826125fb565b5060608a015161020083015260808a0151612c2b6102208401826125fb565b5060a08a015161024083015260c08a0151612c4a610260840182612608565b5060e08a015161016080610280850152612c6861030085018361260e565b9150610100808d01516102a0860152610120808e01516102c0870152610140808f01516102e0880152612c9e602088018f6126c8565b86850360e0880152612cb0858e61260e565b945086850383880152612cc3858d61260e565b94508a8288015289818801525050508382038185015250612ce4818661260e565b9050828103610180840152612cf9818561260e565b9b9a5050505050505050505050565b90815260200190565b8b81526001600160a01b038b811660208301528a81166040830152606082018a90528816608082015260a0810187905285151560c082015261016060e08201819052600090612d628382018861260e565b61010084019690965250506101208101929092526101409091015298975050505050505050565b60405181810167ffffffffffffffff81118282101715612da857600080fd5b604052919050565b60005b83811015612dcb578181015183820152602001612db3565b838111156111ec5750506000910152565b6001600160a01b03811681146105ab57600080fdfea2646970667358221220cfde2e71ace27477c5ad755445fd955cc9c79b5c19d7d9c03c97812265ea62d664736f6c634300060c0033a2646970667358221220749202012bac48786cea0f029562f1eb48be849cf8cced2b65216dfd39bea4ed64736f6c634300060c00330000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f000000000000000000000000a84201332d69d3bb287df715ebb89457987bf2c4

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

0000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f000000000000000000000000a84201332d69d3bb287df715ebb89457987bf2c4

-----Decoded View---------------
Arg [0] : _ETH (address): 0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f
Arg [1] : _devAddress (address): 0xa84201332d69d3bb287df715ebb89457987bf2c4

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f
Arg [1] : 000000000000000000000000a84201332d69d3bb287df715ebb89457987bf2c4


Deployed ByteCode Sourcemap

16644:7793:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24299:98;;;;;;;;;;;;;:::i;:::-;;23763:309;;;;;;;;;;-1:-1:-1;23763:309:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19356:141;;;;;;;;;;-1:-1:-1;19356:141:0;;;;;:::i;:::-;;:::i;16801:48::-;;;;;;;;;;-1:-1:-1;16801:48:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;17244:44::-;;;;;;;;;;-1:-1:-1;17244:44:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;20917:386::-;;;;;;;;;;-1:-1:-1;20917:386:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;20326:583::-;;;;;;;;;;-1:-1:-1;20326:583:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19626:216::-;;;;;;;;;;-1:-1:-1;19626:216:0;;;;;:::i;:::-;;:::i;16880:25::-;;;;;;;;;;;;;:::i;17096:49::-;;;;;;;;;;-1:-1:-1;17096:49:0;;;;;:::i;:::-;;:::i;17186:51::-;;;;;;;;;;-1:-1:-1;17186:51:0;;;;;:::i;:::-;;:::i;24080:211::-;;;;;;;;;;-1:-1:-1;24080:211:0;;;;;:::i;:::-;;:::i;17039:50::-;;;;;;;;;;-1:-1:-1;17039:50:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16856:17::-;;;;;;;;;;;;;:::i;17921:128::-;;;;;;;;;;-1:-1:-1;17921:128:0;;;;;:::i;:::-;;:::i;16985:47::-;;;;;;;;;;-1:-1:-1;16985:47:0;;;;;:::i;:::-;;:::i;2199:79::-;;;;;;;;;;;;;:::i;22141:1614::-;;;;;;;;;;-1:-1:-1;22141:1614:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19505:113::-;;;;;;;;;;-1:-1:-1;19505:113:0;;;;;:::i;:::-;;:::i;17152:27::-;;;;;;;;;;;;;:::i;17789:124::-;;;;;;;;;;-1:-1:-1;17789:124:0;;;;;:::i;:::-;;:::i;18175:114::-;;;;;;;;;;-1:-1:-1;18175:114:0;;;;;:::i;:::-;;:::i;16912:66::-;;;;;;;;;;-1:-1:-1;16912:66:0;;;;;:::i;:::-;;:::i;18297:1051::-;;;;;;;;;;-1:-1:-1;18297:1051:0;;;;;:::i;:::-;;:::i;18057:110::-;;;;;;;;;;-1:-1:-1;18057:110:0;;;;;:::i;:::-;;:::i;2384:209::-;;;;;;;;;;-1:-1:-1;2384:209:0;;;;;:::i;:::-;;:::i;19850:244::-;;;;;;;;;;-1:-1:-1;19850:244:0;;;;;:::i;:::-;;:::i;24299:98::-;2336:12;:10;:12::i;:::-;2326:6;;-1:-1:-1;;;;;2326:6:0;;;:22;;;2318:38;;;;-1:-1:-1;;;2318:38:0;;;;;;;:::i;:::-;;;;;;;;;24347:42:::1;::::0;:10:::1;::::0;24367:21:::1;24347:42:::0;::::1;;;::::0;::::1;::::0;;;24367:21;24347:10;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24299:98::o:0;23763:309::-;23831:38;23920:10;:17;-1:-1:-1;;;;;23902:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;23882:56;;23954:9;23949:116;23973:10;:17;23969:1;:21;23949:116;;;24035:18;24039:10;24050:1;24039:13;;;;;;;;;;;;;;24035:3;:18::i;:::-;24012:17;24030:1;24012:20;;;;;;;;;;;;;;;;;:41;23992:3;;23949:116;;;;23763:309;;;:::o;19356:141::-;2336:12;:10;:12::i;:::-;2326:6;;-1:-1:-1;;;;;2326:6:0;;;:22;;;2318:38;;;;-1:-1:-1;;;2318:38:0;;;;;;;:::i;:::-;19454:35:::1;::::0;-1:-1:-1;;;19454:35:0;;-1:-1:-1;;;;;19454:22:0;::::1;::::0;::::1;::::0;:35:::1;::::0;19477:11;;19454:35:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19356:141:::0;;:::o;16801:48::-;;;;;;;;;;;;-1:-1:-1;;;;;16801:48:0;;:::o;17244:44::-;;;;;;;;;;;;;;;:::o;20917:386::-;21032:26;21097:12;:19;-1:-1:-1;;;;;21075:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;21071:46;;21133:9;21128:149;21152:12;:19;21148:1;:23;21128:149;;;21200:65;;;;;;;;21216:48;21237:9;21248:12;21261:1;21248:15;;;;;;;;;;;;;;21216:20;:48::i;:::-;21200:65;;;21193:1;21195;21193:4;;;;;;;;;;;;;;;;;:72;21173:3;;21128:149;;;;20917:386;;;;;:::o;20326:583::-;20424:20;20457:27;20487:19;:30;20507:9;-1:-1:-1;;;;;20487:30:0;-1:-1:-1;;;;;20487:30:0;;;;;;;;;;;;20457:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20528:22;20571:10;:17;-1:-1:-1;;;;;20553:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;20528:61;;20605:9;20600:283;20624:10;:17;20620:1;:21;20600:283;;;20664:15;20680:18;20699:15;20718:13;:28;20732:10;20743:1;20732:13;;;;;;;;;;;;;;;;;;;20718:28;;;;;;;;;;;;-1:-1:-1;20718:28:0;;:66;;-1:-1:-1;;;20718:66:0;;-1:-1:-1;;;;;20718:28:0;;;;:56;;:66;;20775:8;;20718:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20663:121;;;;;;20806:65;;;;;;;;20818:10;20829:1;20818:13;;;;;;;;;;;;;;20806:65;;;;20833:10;20806:65;;;;;;20845:13;20806:65;;;;;;20860:10;20806:65;;;;;20799:1;20801;20799:4;;;;;;;;;;;;;;;;;:72;-1:-1:-1;;;20643:3:0;;20600:283;;;-1:-1:-1;20900:1:0;20326:583;-1:-1:-1;;;;20326:583:0:o;19626:216::-;2336:12;:10;:12::i;:::-;2326:6;;-1:-1:-1;;;;;2326:6:0;;;:22;;;2318:38;;;;-1:-1:-1;;;2318:38:0;;;;;;;:::i;:::-;19729:9:::1;19724:111;19748:13;:20;19744:1;:24;19724:111;;;19790:16;::::0;;;:13:::1;:16;::::0;;;;;;;:33;;-1:-1:-1;;;19790:33:0;;-1:-1:-1;;;;;19790:16:0;;::::1;::::0;:27:::1;::::0;:33:::1;::::0;19818:4;;19790:33:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;19770:3:0::1;::::0;;::::1;::::0;-1:-1:-1;19724:111:0::1;::::0;-1:-1:-1;19724:111:0::1;;;19626:216:::0;;:::o;16880:25::-;;;-1:-1:-1;;;;;16880:25:0;;:::o;17096:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17186:51::-;;;;;;;;;;;;;;;:::o;24080:211::-;2336:12;:10;:12::i;:::-;2326:6;;-1:-1:-1;;;;;2326:6:0;;;:22;;;2318:38;;;;-1:-1:-1;;;2318:38:0;;;;;;;:::i;:::-;24164:31:::1;::::0;-1:-1:-1;;;24164:31:0;;24147:14:::1;::::0;-1:-1:-1;;;;;24164:16:0;::::1;::::0;::::1;::::0;:31:::1;::::0;24189:4:::1;::::0;24164:31:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24147:48;;24223:1;24214:6;:10;24206:27;;;;-1:-1:-1::0;;;24206:27:0::1;;;;;;;:::i;:::-;24244:39;-1:-1:-1::0;;;;;24244:19:0;::::1;24264:10;24276:6:::0;24244:19:::1;:39::i;:::-;2367:1;24080:211:::0;:::o;17039:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16856:17::-;;;-1:-1:-1;;;;;16856:17:0;;:::o;17921:128::-;2336:12;:10;:12::i;:::-;2326:6;;-1:-1:-1;;;;;2326:6:0;;;:22;;;2318:38;;;;-1:-1:-1;;;2318:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18003:30:0::1;18036:5;18003:30:::0;;;:19:::1;:30;::::0;;;;:38;;-1:-1:-1;;18003:38:0::1;::::0;;17921:128::o;16985:47::-;;;;;;;;;;;;;;;:::o;2199:79::-;2237:7;2264:6;-1:-1:-1;;;;;2264:6:0;2199:79;:::o;22141:1614::-;22191:32;;:::i;:::-;22263:21;;;;:13;:21;;;;;;;;;-1:-1:-1;;;;;22263:21:0;;22236:24;;:48;;;22667:21;;;;;;;:36;;-1:-1:-1;;;22667:36:0;;;;22263:21;;;;;;;;;;;;22542:22;;22263:21;;;;;;;22667:34;;:36;;;;;22263:21;;22667:36;;;;;;;22263:21;22667:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22667:36:0;;;;;;;;;;;;:::i;:::-;22310:393;;;;;;;;;;;;;;;;;;;;;;22737:126;;;;;;;;22749:7;22737:126;;;;22758:5;-1:-1:-1;;;;;22737:126:0;;;;;22765:8;-1:-1:-1;;;;;22737:126:0;;;;;22775:9;22737:126;;;;22786:10;-1:-1:-1;;;;;22737:126:0;;;;;22798:5;22737:126;;;;22805:11;22737:126;;;;;;22818:8;22737:126;;;;22828:12;22737:126;;;;22842:10;22737:126;;;;22854:8;22737:126;;;22718:13;:16;;:145;;;;22141:1614;;;;;;;;;;;22901:16;22932:17;22964:25;23004:18;23037:15;23067:20;23091:13;:21;23105:6;23091:21;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23091:21:0;-1:-1:-1;;;;;23091:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23161:87;;;;;;;;-1:-1:-1;;;;;23161:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23142:16;;;:106;;;;-1:-1:-1;23415:21:0;;;:13;:21;;;;;;;:43;;-1:-1:-1;;;23415:43:0;;;;23161:87;;-1:-1:-1;23161:87:0;;-1:-1:-1;;;;;;;23161:87:0;;-1:-1:-1;23161:87:0;;-1:-1:-1;23415:21:0;;;;;:41;;:43;;;;;-1:-1:-1;;23415:43:0;;;;;;;:21;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23415:43:0;;;;;;;;;;;;:::i;:::-;23473:19;;;:27;;;;23515:21;;;:31;;;;23561:23;;;:35;;;;23611:20;;;:29;23655:21;;;:31;23701:23;;;:35;-1:-1:-1;23473:13:0;;22141:1614;-1:-1:-1;;;;;;;;22141:1614:0:o;19505:113::-;2336:12;:10;:12::i;:::-;2326:6;;-1:-1:-1;;;;;2326:6:0;;;:22;;;2318:38;;;;-1:-1:-1;;;2318:38:0;;;;;;;:::i;:::-;19585:25:::1;::::0;-1:-1:-1;;;19585:25:0;;-1:-1:-1;;;;;19585:19:0;::::1;::::0;::::1;::::0;:25:::1;::::0;19605:4;;19585:25:::1;;;:::i;17152:27::-:0;;;;:::o;17789:124::-;2336:12;:10;:12::i;:::-;2326:6;;-1:-1:-1;;;;;2326:6:0;;;:22;;;2318:38;;;;-1:-1:-1;;;2318:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17868:30:0::1;;::::0;;;:19:::1;:30;::::0;;;;:37;;-1:-1:-1;;17868:37:0::1;17901:4;17868:37;::::0;;17789:124::o;18175:114::-;2336:12;:10;:12::i;:::-;2326:6;;-1:-1:-1;;;;;2326:6:0;;;:22;;;2318:38;;;;-1:-1:-1;;;2318:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18250:23:0::1;18276:5;18250:23:::0;;;:12:::1;:23;::::0;;;;:31;;-1:-1:-1;;18250:31:0::1;::::0;;18175:114::o;16912:66::-;;;;;;;;;;;;;;;;;;18297:1051;18506:10;18493:24;;;;:12;:24;;;;;;;;:32;;:24;:32;18485:49;;;;-1:-1:-1;;;18485:49:0;;;;;;;:::i;:::-;18553:18;18572:9;18553:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:38;18545:55;;;;-1:-1:-1;;;18545:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18619:32:0;;;;;;:19;:32;;;;;;;;:40;;:32;:40;18611:57;;;;-1:-1:-1;;;18611:57:0;;;;;;;:::i;:::-;18709:10;;18733:3;;18738:8;;18697:129;;18679:15;;-1:-1:-1;;;;;18709:10:0;;;;18721;;18733:3;;;18748:9;;18759:10;;18771:11;;18784:6;;18792:9;;18803:11;;18816:9;;18697:129;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18857:10:0;;18881:3;;18886:8;;18842:132;;18679:147;;-1:-1:-1;18842:132:0;;;;-1:-1:-1;;;;;18857:10:0;;;;18869;;18881:3;;;18896:9;;18907:10;;18919:11;;18932:6;;18940:9;;18951:11;;18964:9;;18842:132;:::i;:::-;;;;;;;;18990:24;19006:7;18990:24;;;;;;:::i;:::-;;;;;;;;19039:8;;;19025:23;;;;:13;:23;;;;;;;;:33;;-1:-1:-1;;;;;;19025:33:0;-1:-1:-1;;;;;19025:33:0;;;;;;;;;;19069:30;;;;:19;:30;;;;;19105:8;;19069:45;;-1:-1:-1;19069:45:0;;;;;;;;;;;;;19141:8;;19125:25;;:15;:25;;;;;:32;;-1:-1:-1;;19125:32:0;;;;;19182:10;19168:25;;:13;:25;;;;;19199:8;;19168:40;;;;;;;;;;;;;;;;;;19230:8;;:15;;:12;:15::i;:::-;19219:8;:26;19256:29;;19288:4;;19256:18;;:29;;19275:9;;19256:29;:::i;:::-;;;;;;;;;;;;;;:36;;;;;-1:-1:-1;;19256:36:0;;;;;;;;;;-1:-1:-1;;;19303:37:0;;-1:-1:-1;;;;;19303:25:0;;;;;:37;;19329:10;;19303:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18297:1051;;;;;;;;:::o;18057:110::-;2336:12;:10;:12::i;:::-;2326:6;;-1:-1:-1;;;;;2326:6:0;;;:22;;;2318:38;;;;-1:-1:-1;;;2318:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18129:23:0::1;;::::0;;;:12:::1;:23;::::0;;;;:30;;-1:-1:-1;;18129:30:0::1;18155:4;18129:30;::::0;;18057:110::o;2384:209::-;2336:12;:10;:12::i;:::-;2326:6;;-1:-1:-1;;;;;2326:6:0;;;:22;;;2318:38;;;;-1:-1:-1;;;2318:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2473:22:0;::::1;2465:38;;;;-1:-1:-1::0;;;2465:38:0::1;;;;;;;:::i;:::-;2540:6;::::0;;2519:38:::1;::::0;-1:-1:-1;;;;;2519:38:0;;::::1;::::0;2540:6;::::1;::::0;2519:38:::1;::::0;::::1;2568:6;:17:::0;;-1:-1:-1;;;;;;2568:17:0::1;-1:-1:-1::0;;;;;2568:17:0;;;::::1;::::0;;;::::1;::::0;;2384:209::o;19850:244::-;2336:12;:10;:12::i;:::-;2326:6;;-1:-1:-1;;;;;2326:6:0;;;:22;;;2318:38;;;;-1:-1:-1;;;2318:38:0;;;;;;;:::i;:::-;19971:9:::1;19966:121;19990:13;:20;19986:1;:24;19966:121;;;20032:16;::::0;;;:13:::1;:16;::::0;;;;;;;:43;;-1:-1:-1;;;20032:43:0;;-1:-1:-1;;;;;20032:16:0;;::::1;::::0;:30:::1;::::0;:43:::1;::::0;20063:11;;20032:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;20012:3:0::1;::::0;;::::1;::::0;-1:-1:-1;19966:121:0::1;::::0;-1:-1:-1;19966:121:0::1;1362:106:::0;1450:10;1362:106;:::o;661:177::-;744:86;764:5;794:23;;;819:2;823:5;771:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;771:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;771:58:0;-1:-1:-1;;;;;;771:58:0;;;;;;;;;;744:19;:86::i;3724:154::-;3782:7;3814:5;;;3838:6;;;;3830:21;;;;-1:-1:-1;;;3830:21:0;;;;;;;:::i;:::-;3869:1;3724:154;-1:-1:-1;;;3724:154:0:o;1059:263::-;1140:23;1166:39;1194:4;1166:39;;;;;;;;;;;;;-1:-1:-1;;;1166:39:0;;;1174:5;-1:-1:-1;;;;;1166:27:0;;;:39;;;;;:::i;:::-;1220:17;;1140:65;;-1:-1:-1;1220:21:0;1216:99;;1277:10;1266:30;;;;;;;;;;;;:::i;:::-;1258:45;;;;-1:-1:-1;;;1258:45:0;;;;;;;:::i;2827:196::-;2930:12;2962:53;2985:6;2993:4;2999:1;3002:12;2962:22;:53::i;:::-;2955:60;2827:196;-1:-1:-1;;;;2827:196:0:o;3031:662::-;3161:12;3194:18;3205:6;3194:10;:18::i;:::-;3186:33;;;;-1:-1:-1;;;3186:33:0;;;;;;;:::i;:::-;3231:12;3245:23;3272:6;-1:-1:-1;;;;;3272:11:0;3292:8;3302:4;3272:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3230:77;;;;3322:7;3318:368;;;3353:10;-1:-1:-1;3346:17:0;;-1:-1:-1;3346:17:0;3318:368;3400:17;;:21;3396:279;;3503:10;3497:17;3564:15;3551:10;3547:2;3543:19;3536:44;3451:148;3646:12;3639:20;;-1:-1:-1;;;3639:20:0;;;;;;;;:::i;2623:196::-;2755:20;2803:8;;;2623:196::o;-1:-1:-1:-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;142:134::-;220:13;;238:33;220:13;238:33;:::i;611:707::-;;728:3;721:4;713:6;709:17;705:27;695:2;;-1:-1;;736:12;695:2;783:6;770:20;-1:-1;;;;;49800:6;49797:30;49794:2;;;-1:-1;;49830:12;49794:2;49875:4;;49867:6;49863:17;805:80;49875:4;49863:17;49928:15;805:80;:::i;:::-;913:21;;;796:89;-1:-1;970:14;;;945:17;;;1050:27;;;;;1047:36;-1:-1;1044:2;;;1096:1;;1086:12;1044:2;1121:1;1112:10;;1106:206;1131:6;1128:1;1125:13;1106:206;;;6650:20;;1199:50;;1153:1;1146:9;;;;;1263:14;;;;1291;;1106:206;;;1110:14;;;;;688:630;;;;:::o;1326:128::-;1401:13;;53839;;53832:21;56562:32;;56552:2;;56608:1;;56598:12;2339:442;;2441:3;2434:4;2426:6;2422:17;2418:27;2408:2;;-1:-1;;2449:12;2408:2;2496:6;2483:20;2518:65;2533:49;2575:6;2533:49;:::i;:::-;2518:65;:::i;:::-;2509:74;;2603:6;2596:5;2589:21;2707:3;2639:4;2698:6;2631;2689:16;;2686:25;2683:2;;;2724:1;;2714:12;2683:2;55788:6;2639:4;2631:6;2627:17;2639:4;2665:5;2661:16;55765:30;55844:1;55826:16;;;2639:4;55826:16;55819:27;2665:5;2401:380;-1:-1;;2401:380::o;2790:444::-;;2903:3;2896:4;2888:6;2884:17;2880:27;2870:2;;-1:-1;;2911:12;2870:2;2951:6;2945:13;2973:65;2988:49;3030:6;2988:49;:::i;2973:65::-;2964:74;;3058:6;3051:5;3044:21;3162:3;3094:4;3153:6;3086;3144:16;;3141:25;3138:2;;;3179:1;;3169:12;3138:2;3189:39;3221:6;3094:4;3120:5;3116:16;3094:4;3086:6;3082:17;3189:39;:::i;3275:2083::-;;3403:6;;3391:9;3386:3;3382:19;3378:32;3375:2;;;-1:-1;;3413:12;3375:2;3441:22;3403:6;3441:22;:::i;:::-;3432:31;;;3580:22;6798:13;3530:16;3523:86;3704:68;3768:3;3671:2;3748:9;3744:22;3704:68;:::i;:::-;3671:2;3690:5;3686:16;3679:94;3871:85;3952:3;3838:2;3932:9;3928:22;3871:85;:::i;:::-;3838:2;3857:5;3853:16;3846:111;4023:2;4092:9;4088:22;6798:13;4023:2;4042:5;4038:16;4031:86;4218:60;4274:3;4184;4254:9;4250:22;4218:60;:::i;:::-;4184:3;4204:5;4200:16;4193:86;4341:3;4411:9;4407:22;6798:13;4341:3;4361:5;4357:16;4350:86;4538:57;4591:3;4504;4571:9;4567:22;4538:57;:::i;:::-;4504:3;4524:5;4520:16;4513:83;4682:3;4671:9;4667:19;4661:26;-1:-1;;;;;4699:6;4696:30;4693:2;;;3516:1;;4729:12;4693:2;4774:70;4840:3;4831:6;4820:9;4816:22;4774:70;:::i;:::-;4682:3;4756:16;;4749:96;-1:-1;4914:3;4982:22;;;6798:13;4930:18;;;4923:88;5078:3;5146:22;;;6798:13;5094:18;;;5087:88;5240:3;5308:22;;;6798:13;5256:18;;;5249:88;;;;4760:5;3369:1989;-1:-1;3369:1989::o;5398:1178::-;;5526:4;5514:9;5509:3;5505:19;5501:30;5498:2;;;-1:-1;;5534:12;5498:2;5562:20;5526:4;5562:20;:::i;:::-;5553:29;;1721:6;1715:13;1733:46;1773:5;1733:46;:::i;:::-;5669:73;5651:16;5644:99;;5809:2;5878:9;5874:22;6798:13;5809:2;5828:5;5824:16;5817:86;5977:2;6046:9;6042:22;6798:13;5977:2;5996:5;5992:16;5985:86;6138:2;6207:9;6203:22;6798:13;6138:2;6157:5;6153:16;6146:86;6296:3;6366:9;6362:22;6798:13;6296:3;6316:5;6312:16;6305:86;6460:3;6530:9;6526:22;6798:13;6460:3;6480:5;6476:16;6469:86;5492:1084;;;;:::o;6861:241::-;;6965:2;6953:9;6944:7;6940:23;6936:32;6933:2;;;-1:-1;;6971:12;6933:2;85:6;72:20;97:33;124:5;97:33;:::i;7109:366::-;;;7230:2;7218:9;7209:7;7205:23;7201:32;7198:2;;;-1:-1;;7236:12;7198:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;7288:63;7388:2;7427:22;;;;6650:20;;-1:-1;;;7192:283::o;7482:377::-;;7611:2;7599:9;7590:7;7586:23;7582:32;7579:2;;;-1:-1;;7617:12;7579:2;7675:17;7662:31;-1:-1;;;;;7705:6;7702:30;7699:2;;;-1:-1;;7735:12;7699:2;7765:78;7835:7;7826:6;7815:9;7811:22;7765:78;:::i;7866:518::-;;;8020:2;8008:9;7999:7;7995:23;7991:32;7988:2;;;-1:-1;;8026:12;7988:2;8084:17;8071:31;-1:-1;;;;;8114:6;8111:30;8108:2;;;-1:-1;;8144:12;8108:2;8174:78;8244:7;8235:6;8224:9;8220:22;8174:78;:::i;:::-;8164:88;;;8289:2;8340:9;8336:22;358:20;383:41;418:5;383:41;:::i;:::-;8297:71;;;;7982:402;;;;;:::o;8391:502::-;;;8537:2;8525:9;8516:7;8512:23;8508:32;8505:2;;;-1:-1;;8543:12;8505:2;8601:17;8588:31;-1:-1;;;;;8631:6;8628:30;8625:2;;;-1:-1;;8661:12;8625:2;8691:78;8761:7;8752:6;8741:9;8737:22;8691:78;:::i;:::-;8681:88;8806:2;8845:22;;;;6650:20;;-1:-1;;;;8499:394::o;8900:257::-;;9012:2;9000:9;8991:7;8987:23;8983:32;8980:2;;;-1:-1;;9018:12;8980:2;1407:6;1401:13;1419:30;1443:5;1419:30;:::i;9164:517::-;;;;9304:2;9292:9;9283:7;9279:23;9275:32;9272:2;;;-1:-1;;9310:12;9272:2;1407:6;1401:13;1419:30;1443:5;1419:30;:::i;:::-;9470:2;9517:22;;1401:13;9362:71;;-1:-1;1419:30;1401:13;1419:30;:::i;:::-;9586:2;9633:22;;1401:13;9478:71;;-1:-1;1419:30;1401:13;1419:30;:::i;:::-;9594:71;;;;9266:415;;;;;:::o;9962:972::-;;;;;;;10175:3;10163:9;10154:7;10150:23;10146:33;10143:2;;;-1:-1;;10182:12;10143:2;1721:6;1715:13;1733:46;1773:5;1733:46;:::i;:::-;10358:2;10408:22;;6798:13;10477:2;10527:22;;6798:13;10596:2;10646:22;;6798:13;10715:3;10766:22;;6798:13;10835:3;10886:22;;;6798:13;10234:87;;6798:13;;-1:-1;6798:13;;;;-1:-1;6798:13;-1:-1;6798:13;;-1:-1;10137:797;-1:-1;;;10137:797::o;10941:552::-;;;11112:2;11100:9;11091:7;11087:23;11083:32;11080:2;;;-1:-1;;11118:12;11080:2;1896:6;1883:20;1908:58;1960:5;1908:58;:::i;:::-;11170:88;-1:-1;11323:2;11308:18;;11295:32;-1:-1;;;;;11336:30;;11333:2;;;-1:-1;;11369:12;11333:2;11399:78;11469:7;11460:6;11449:9;11445:22;11399:78;:::i;:::-;11389:88;;;11074:419;;;;;:::o;11500:416::-;;;11646:2;11634:9;11625:7;11621:23;11617:32;11614:2;;;-1:-1;;11652:12;11923:1151;;;;;;;;12164:3;12152:9;12143:7;12139:23;12135:33;12132:2;;;-1:-1;;12171:12;12132:2;1896:6;1883:20;1908:58;1960:5;1908:58;:::i;:::-;12223:88;-1:-1;12348:2;12387:22;;6650:20;;-1:-1;12456:2;12495:22;;72:20;97:33;72:20;97:33;:::i;:::-;12464:63;-1:-1;12564:2;12603:22;;6650:20;;-1:-1;12700:3;12685:19;;12672:33;-1:-1;;;;;12714:30;;12711:2;;;-1:-1;;12747:12;12711:2;12777:63;12832:7;12823:6;12812:9;12808:22;12777:63;:::i;:::-;12767:73;;;12877:3;12921:9;12917:22;6650:20;12886:63;;12986:3;13030:9;13026:22;6650:20;12995:63;;12126:948;;;;;;;;;;:::o;13081:414::-;;;13226:2;13214:9;13205:7;13201:23;13197:32;13194:2;;;-1:-1;;13232:12;13194:2;2265:6;2252:20;2277:49;2320:5;2277:49;:::i;:::-;13284:79;-1:-1;13400:2;13447:22;;358:20;383:41;358:20;383:41;:::i;13907:347::-;;14021:2;14009:9;14000:7;13996:23;13992:32;13989:2;;;-1:-1;;14027:12;13989:2;14085:17;14072:31;-1:-1;;;;;14115:6;14112:30;14109:2;;;-1:-1;;14145:12;14109:2;14175:63;14230:7;14221:6;14210:9;14206:22;14175:63;:::i;14261:1809::-;;;;;;;;;14591:3;14579:9;14570:7;14566:23;14562:33;14559:2;;;-1:-1;;14598:12;14559:2;14649:17;14643:24;-1:-1;;;;;14687:18;14679:6;14676:30;14673:2;;;-1:-1;;14709:12;14673:2;14739:92;14823:7;14814:6;14803:9;14799:22;14739:92;:::i;:::-;14729:102;;14886:92;14970:7;14868:2;14950:9;14946:22;14886:92;:::i;:::-;14876:102;;15036:3;15025:9;15021:19;15015:26;15001:40;;14687:18;15053:6;15050:30;15047:2;;;-1:-1;;15083:12;15047:2;15113:74;15179:7;15170:6;15159:9;15155:22;15113:74;:::i;:::-;15103:84;;15245:3;15234:9;15230:19;15224:26;15210:40;;14687:18;15262:6;15259:30;15256:2;;;-1:-1;;15292:12;15256:2;15322:74;15388:7;15379:6;15368:9;15364:22;15322:74;:::i;:::-;15312:84;;15433:3;15488:9;15484:22;6798:13;15442:74;;15553:3;15608:9;15604:22;6798:13;15562:74;;15694:3;15683:9;15679:19;15673:26;15659:40;;14687:18;15711:6;15708:30;15705:2;;;-1:-1;;15741:12;15705:2;15771:74;15837:7;15828:6;15817:9;15813:22;15771:74;:::i;:::-;15761:84;;15903:3;15892:9;15888:19;15882:26;15868:40;;14687:18;15920:6;15917:30;15914:2;;;-1:-1;;15950:12;15914:2;;15980:74;16046:7;16037:6;16026:9;16022:22;15980:74;:::i;:::-;15970:84;;;14553:1517;;;;;;;;;;;:::o;16077:241::-;;16181:2;16169:9;16160:7;16156:23;16152:32;16149:2;;;-1:-1;;16187:12;16149:2;-1:-1;6650:20;;16143:175;-1:-1;16143:175::o;16325:263::-;;16440:2;16428:9;16419:7;16415:23;16411:32;16408:2;;;-1:-1;;16446:12;16408:2;-1:-1;6798:13;;16402:186;-1:-1;16402:186::o;16595:1792::-;;;;;;;;;;;;16921:3;16909:9;16900:7;16896:23;16892:33;16889:2;;;-1:-1;;16928:12;16889:2;6804:6;6798:13;16980:74;;17091:2;17153:9;17149:22;220:13;238:33;265:5;238:33;:::i;:::-;17218:2;17293:22;;220:13;17099:82;;-1:-1;238:33;220:13;238:33;:::i;:::-;17362:2;17412:22;;6798:13;17226:99;;-1:-1;6798:13;-1:-1;17500:64;17556:7;17481:3;17532:22;;17500:64;:::i;:::-;17490:74;;17601:3;17656:9;17652:22;6798:13;17610:74;;17740:61;17793:7;17721:3;17773:9;17769:22;17740:61;:::i;:::-;17730:71;;17859:3;17848:9;17844:19;17838:26;-1:-1;;;;;17876:6;17873:30;17870:2;;;-1:-1;;17906:12;17870:2;17936:74;18002:7;17993:6;17982:9;17978:22;17936:74;:::i;:::-;17926:84;;;18047:3;18102:9;18098:22;6798:13;18056:74;;18167:3;18222:9;18218:22;6798:13;18176:74;;18287:3;18343:9;18339:22;6798:13;18296:75;;16883:1504;;;;;;;;;;;;;;:::o;19413:127::-;-1:-1;;;;;54283:54;19490:45;;19484:56::o;22386:902::-;;22656:5;50986:12;52230:6;52225:3;52218:19;52267:4;;52262:3;52258:14;22668:112;;52267:4;22880:5;50433:14;-1:-1;22919:347;22944:6;22941:1;22938:13;22919:347;;;23005:13;;38417:23;;39063:37;;38583:16;;;38577:23;53839:13;53832:21;38648:14;;;24364:34;38751:4;38740:16;;;38734:23;53839:13;53832:21;38805:14;;;24364:34;38905:4;38894:16;;;38888:23;53839:13;53832:21;38959:14;;;24364:34;19245:4;19236:14;;;;51752;;;;22966:1;22959:9;22919:347;;;-1:-1;23272:10;;22558:730;-1:-1;;;;;22558:730::o;24309:94::-;53839:13;53832:21;24364:34;;24358:45::o;25900:327::-;;26035:5;50986:12;52230:6;52225:3;52218:19;26119:52;26164:6;52267:4;52262:3;52258:14;52267:4;26145:5;26141:16;26119:52;:::i;:::-;56221:7;56205:14;-1:-1;;56201:28;26183:39;;;;52267:4;26183:39;;25982:245;-1:-1;;25982:245::o;29832:2053::-;;29981:6;30058:16;30052:23;39070:3;39063:37;30224:4;30217:5;30213:16;30207:23;30236:79;30224:4;30304:3;30300:14;30286:12;30236:79;:::i;:::-;;30398:4;30391:5;30387:16;30381:23;30410:88;30398:4;30487:3;30483:14;30469:12;30410:88;:::i;:::-;;30582:4;30575:5;30571:16;30565:23;30582:4;30646:3;30642:14;39063:37;30742:4;30735:5;30731:16;30725:23;30754:63;30742:4;30806:3;30802:14;30788:12;30754:63;:::i;:::-;;30897:4;30890:5;30886:16;30880:23;30897:4;30961:3;30957:14;39063:37;31058:4;31051:5;31047:16;31041:23;31070:57;31058:4;31116:3;31112:14;31098:12;31070:57;:::i;:::-;;31210:4;31203:5;31199:16;31193:23;29981:6;31210:4;31240:3;31236:14;31229:38;31282:73;29981:6;29976:3;29972:16;31336:12;31282:73;:::i;:::-;31448:6;31437:18;;;31431:25;31510:16;;;39063:37;31612:6;31601:18;;;31595:25;31674:16;;;39063:37;31774:6;31763:18;;;31757:25;31836:16;;;;39063:37;;;;-1:-1;31274:81;;29954:1931;-1:-1;;29954:1931::o;31969:1143::-;32181:23;;-1:-1;;;;;54283:54;24958:63;;32370:4;32359:16;;;32353:23;32430:14;;;39063:37;32537:4;32526:16;;;32520:23;32597:14;;;39063:37;32697:4;32686:16;;;32680:23;32757:14;;;39063:37;32854:4;32843:16;;;32837:23;32914:14;;;39063:37;54294:42;33005:16;;;32999:23;33076:14;;39063:37;32083:1029::o;33196:2108::-;;33345:6;33417:16;33411:23;33345:6;33454:14;33447:38;33500:111;33345:6;33340:3;33336:16;33592:12;33500:111;:::i;:::-;33492:119;;;33694:4;33687:5;33683:16;33677:23;33706:121;33694:4;33816:3;33812:14;33798:12;33706:121;:::i;:::-;;33907:4;33900:5;33896:16;33890:23;33959:3;33953:4;33949:14;33942:4;33937:3;33933:14;33926:38;33979:73;34047:4;34033:12;33979:73;:::i;:::-;33971:81;;;34140:4;34133:5;34129:16;34123:23;34175:6;34194:3;34188:4;34184:14;34175:6;34170:3;34166:16;34159:40;34214:73;34282:4;34268:12;34214:73;:::i;:::-;34206:81;;34377:4;34370:5;34366:16;34360:23;34446:6;34441:3;34437:16;39063:37;34535:4;34528:5;34524:16;34518:23;34604:6;34599:3;34595:16;39063:37;34694:4;34687:5;34683:16;34677:23;34657:43;;34748:3;34742:4;34738:14;34729:6;34724:3;34720:16;34713:40;34768:73;34836:4;34822:12;34768:73;:::i;:::-;34760:81;;33942:4;34924:5;34920:16;34914:23;34894:43;;34985:3;34979:4;34975:14;34966:6;34961:3;34957:16;34950:40;35005:73;35073:4;35059:12;35005:73;:::i;:::-;34997:81;;34175:6;35162:5;35158:18;35152:25;35132:45;;;35183:89;35264:6;35259:3;35255:16;35241:12;35183:89;:::i;:::-;-1:-1;35288:11;33318:1986;-1:-1;;;33318:1986::o;39232:271::-;;24681:5;50986:12;24792:52;24837:6;24832:3;24825:4;24818:5;24814:16;24792:52;:::i;:::-;24856:16;;;;;39366:137;-1:-1;;39366:137::o;39792:222::-;-1:-1;;;;;54283:54;;;;19490:45;;39919:2;39904:18;;39890:124::o;40527:1522::-;-1:-1;;;;;54283:54;;;19490:45;;54283:54;;;41174:2;41159:18;;19343:58;54283:54;;;41270:2;41255:18;;24958:63;41353:2;41338:18;;39063:37;;;54283:54;;;41461:3;41446:19;;19490:45;54294:42;41530:19;;39063:37;;;54283:54;;41629:3;41614:19;;19490:45;41713:3;41698:19;;39063:37;;;41001:3;41751;41736:19;;41729:49;;;40527:1522;;41792:78;40986:19;;;41856:6;41792:78;:::i;:::-;41949:3;41934:19;;39063:37;;;;-1:-1;;42034:3;42019:19;39063:37;41784:86;40972:1077;-1:-1;;;;;;;;;40972:1077::o;42056:333::-;-1:-1;;;;;54283:54;;;;19490:45;;42375:2;42360:18;;39063:37;42211:2;42196:18;;42182:207::o;42396:486::-;;42631:2;;42620:9;42616:18;42631:2;42652:17;42645:47;42706:166;20284:5;50986:12;52230:6;52225:3;52218:19;52258:14;42620:9;52258:14;20296:122;;52258:14;42631:2;20475:6;20471:17;42620:9;20462:27;;20450:39;;42631:2;20589:5;50433:14;-1:-1;20628:417;20653:6;20650:1;20647:13;20628:417;;;20705:20;;42620:9;20709:4;20705:20;;20700:3;20693:33;18554:104;18654:3;20760:6;20754:13;18554:104;:::i;:::-;20774:130;-1:-1;21024:14;;;;51752;;;;20675:1;20668:9;20628:417;;;-1:-1;42698:174;;42602:280;-1:-1;;;;;;;42602:280::o;42889:502::-;;43132:2;;43121:9;43117:18;43132:2;43153:17;43146:47;43207:174;21475:5;50986:12;52230:6;52225:3;52218:19;52258:14;43121:9;52258:14;21487:126;;52258:14;43132:2;21670:6;21666:17;43121:9;21657:27;;21645:39;;43132:2;21788:5;50433:14;-1:-1;21827:429;21852:6;21849:1;21846:13;21827:429;;;21904:20;;;-1:-1;;21904:20;21892:33;;21953:13;;37836:23;37872:38;;;37925:161;37746:14;;;37836:23;37925:161;:::i;:::-;21973:138;-1:-1;;22235:14;;;;51752;;;;21874:1;21867:9;21827:429;;43398:486;;43633:2;43654:17;43647:47;43708:166;43633:2;43622:9;43618:18;43860:6;43708:166;:::i;43891:210::-;53839:13;;53832:21;24364:34;;44012:2;43997:18;;43983:118::o;44640:310::-;;44787:2;44808:17;44801:47;44862:78;44787:2;44776:9;44772:18;44926:6;44862:78;:::i;44957:416::-;45157:2;45171:47;;;27180:1;45142:18;;;52218:19;-1:-1;;;52258:14;;;27195:26;27240:12;;;45128:245::o;45380:416::-;45580:2;45594:47;;;27491:1;45565:18;;;52218:19;-1:-1;;;52258:14;;;27506:25;27550:12;;;45551:245::o;45803:416::-;46003:2;46017:47;;;27801:1;45988:18;;;52218:19;-1:-1;;;52258:14;;;27816:26;27861:12;;;45974:245::o;46226:416::-;46426:2;46440:47;;;28112:1;46411:18;;;52218:19;-1:-1;;;52258:14;;;28127:25;28171:12;;;46397:245::o;46649:416::-;46849:2;46863:47;;;28422:1;46834:18;;;52218:19;-1:-1;;;52258:14;;;28437:27;28483:12;;;46820:245::o;47072:416::-;47272:2;47286:47;;;28734:1;47257:18;;;52218:19;-1:-1;;;52258:14;;;28749:27;28795:12;;;47243:245::o;47495:416::-;47695:2;47709:47;;;29046:1;47680:18;;;52218:19;-1:-1;;;52258:14;;;29061:27;29107:12;;;47666:245::o;47918:416::-;48118:2;48132:47;;;29358:1;48103:18;;;52218:19;-1:-1;;;52258:14;;;29373:27;29419:12;;;48089:245::o;48341:416::-;48541:2;48555:47;;;29670:1;48526:18;;;52218:19;-1:-1;;;52258:14;;;29685:25;29729:12;;;48512:245::o;48764:386::-;;48949:2;48970:17;48963:47;49024:116;48949:2;48938:9;48934:18;49126:6;49024:116;:::i;49157:222::-;39063:37;;;49284:2;49269:18;;49255:124::o;49386:256::-;49448:2;49442:9;49474:17;;;-1:-1;;;;;49534:34;;49570:22;;;49531:62;49528:2;;;49606:1;;49596:12;49528:2;49448;49615:22;49426:216;;-1:-1;49426:216::o;49960:322::-;;-1:-1;;;;;50096:6;50093:30;50090:2;;;-1:-1;;50126:12;50090:2;-1:-1;56221:7;50180:17;-1:-1;;50176:33;50267:4;50257:15;;50027:255::o;55861:268::-;55926:1;55933:101;55947:6;55944:1;55941:13;55933:101;;;56014:11;;;56008:18;55995:11;;;55988:39;55969:2;55962:10;55933:101;;;56049:6;56046:1;56043:13;56040:2;;;55926:1;56105:6;56100:3;56096:16;56089:27;56040:2;;55910:219;;;:::o;56242:117::-;-1:-1;;;;;54283:54;;56301:35;;56291:2;;56350:1;;56340:12;56506:111;56587:5;53839:13;53832:21;56565:5;56562:32;56552:2;;56608:1;;56598:12

Swarm Source

ipfs://749202012bac48786cea0f029562f1eb48be849cf8cced2b65216dfd39bea4ed
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading