Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 35 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Order | 12634022 | 1178 days ago | IN | 0.015 ETH | 0.00405968 | ||||
Deposit | 12626324 | 1179 days ago | IN | 0 ETH | 0.00051965 | ||||
Deposit | 12626318 | 1179 days ago | IN | 0 ETH | 0.00067554 | ||||
Deposit | 12538399 | 1193 days ago | IN | 0 ETH | 0.0020786 | ||||
Deposit | 12538393 | 1193 days ago | IN | 0 ETH | 0.00114323 | ||||
Create Order | 12519275 | 1196 days ago | IN | 0.015 ETH | 0.0076674 | ||||
Cancel | 12415666 | 1212 days ago | IN | 0 ETH | 0.02117904 | ||||
Refund | 12415560 | 1212 days ago | IN | 0 ETH | 0.0115572 | ||||
Deposit | 12415417 | 1212 days ago | IN | 0.5 ETH | 0.0469284 | ||||
Create Order | 12414977 | 1212 days ago | IN | 0.015 ETH | 0.04607172 | ||||
Create Order | 12343728 | 1223 days ago | IN | 0.015 ETH | 0.0086504 | ||||
Create Order | 12343557 | 1223 days ago | IN | 0.015 ETH | 0.0106164 | ||||
Cancel | 12333260 | 1224 days ago | IN | 0 ETH | 0.00365156 | ||||
Create Order | 12333216 | 1224 days ago | IN | 0.015 ETH | 0.00741333 | ||||
Refund | 12306682 | 1229 days ago | IN | 0 ETH | 0.00172744 | ||||
Refund | 12293146 | 1231 days ago | IN | 0 ETH | 0.00288831 | ||||
Deposit | 12279708 | 1233 days ago | IN | 0 ETH | 0.01441188 | ||||
Deposit | 12279610 | 1233 days ago | IN | 0 ETH | 0.01441188 | ||||
Deposit | 12279588 | 1233 days ago | IN | 0 ETH | 0.03181643 | ||||
Create Order | 12274921 | 1233 days ago | IN | 0.015 ETH | 0.02682192 | ||||
Create Order | 12247782 | 1238 days ago | IN | 0.015 ETH | 0.01631879 | ||||
Create Order | 12244391 | 1238 days ago | IN | 0.015 ETH | 0.01517968 | ||||
Deposit | 12244358 | 1238 days ago | IN | 9 ETH | 0.01611208 | ||||
Create Order | 12244354 | 1238 days ago | IN | 0.015 ETH | 0.01817908 | ||||
Create Order | 12228531 | 1241 days ago | IN | 0.015 ETH | 0.01233348 |
Latest 19 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
12634022 | 1178 days ago | 0.015 ETH | ||||
12519275 | 1196 days ago | 0.015 ETH | ||||
12415417 | 1212 days ago | 0.5 ETH | ||||
12414977 | 1212 days ago | 0.015 ETH | ||||
12343728 | 1223 days ago | 0.015 ETH | ||||
12343557 | 1223 days ago | 0.015 ETH | ||||
12333216 | 1224 days ago | 0.015 ETH | ||||
12274921 | 1233 days ago | 0.015 ETH | ||||
12247782 | 1238 days ago | 0.015 ETH | ||||
12244391 | 1238 days ago | 0.015 ETH | ||||
12244358 | 1238 days ago | 9 ETH | ||||
12244354 | 1238 days ago | 0.015 ETH | ||||
12228531 | 1241 days ago | 0.015 ETH | ||||
12178793 | 1248 days ago | 0.015 ETH | ||||
12148415 | 1253 days ago | 0.015 ETH | ||||
12133502 | 1255 days ago | 0.015 ETH | ||||
12122381 | 1257 days ago | 0.015 ETH | ||||
12108957 | 1259 days ago | 0.015 ETH | ||||
12102269 | 1260 days ago | 0.015 ETH |
Loading...
Loading
Contract Name:
Swaps
Compiler Version
v0.5.17+commit.d19bba13
Optimization Enabled:
Yes with 999999 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.5.7; import "openzeppelin-solidity/contracts/utils/ReentrancyGuard.sol"; import "openzeppelin-solidity/contracts/ownership/Ownable.sol"; import "openzeppelin-solidity/contracts/math/SafeMath.sol"; import "./IERC20.sol"; import "./ISwaps.sol"; import "./Vault.sol"; contract Swaps is Ownable, ISwaps, ReentrancyGuard { using SafeMath for uint; uint public MAX_INVESTORS = 10; uint256 public feeAmount; address payable public feeAddress; Vault public vault; // id whiteAddr mapping(bytes32 => address) public baseOnlyInvestor; // id owner mapping(bytes32 => address) public owners; // id baseAddr mapping(bytes32 => address) public baseAddresses; // id quoteAddr mapping(bytes32 => address) public quoteAddresses; // id expire mapping(bytes32 => uint) public expirationTimestamps; // id swapped? mapping(bytes32 => bool) public isSwapped; // id cancelled? mapping(bytes32 => bool) public isCancelled; // id base/quote limit mapping(bytes32 => mapping(address => uint)) public limits; // id base/quote raised mapping(bytes32 => mapping(address => uint)) public raised; // id base/quote investors mapping(bytes32 => mapping(address => address[])) public investors; // id base/quote investor amount mapping(bytes32 => mapping(address => mapping(address => uint))) public investments; // id base/quote minLimit mapping(bytes32 => mapping(address => uint)) public minInvestments; // id brokers mapping(bytes32 => address[]) public brokers; // id base/quote broker percent mapping(bytes32 => mapping(address => mapping(address => uint))) public brokerPercents; uint public myWishBasePercent; uint public myWishQuotePercent; address public myWishAddress; modifier onlyInvestor(bytes32 _id, address _token) { require( _isInvestor(_id, _token, msg.sender), "Swaps: Allowed only for investors" ); _; } modifier onlyWhenVaultDefined() { require(address(vault) != address(0), "Swaps: Vault is not defined"); _; } modifier onlyOrderOwner(bytes32 _id) { require(msg.sender == owners[_id], "Swaps: Allowed only for owner"); _; } modifier onlyWhenOrderExists(bytes32 _id) { require(owners[_id] != address(0), "Swaps: Order doesn't exist"); _; } modifier hasFeeAndTransferIt { require( msg.value == feeAmount, "Swaps: Not enough fee" ); feeAddress.transfer(msg.value); _; } event OrderCreated( bytes32 id, address owner, address baseAddress, address quoteAddress, uint baseLimit, uint quoteLimit, uint expirationTimestamp, address baseOnlyInvestor, uint minBaseInvestment, uint minQuoteInvestment, address broker, uint brokerBasePercent, uint brokerQuotePercent ); event OrderCancelled(bytes32 id); event Deposit( bytes32 id, address token, address user, uint amount, uint balance ); event Refund(bytes32 id, address token, address user, uint amount); event OrderSwapped(bytes32 id, address byUser); event SwapSend(bytes32 id, address token, address user, uint amount); event BrokerSend(bytes32 id, address token, address broker, uint amount); event MyWishAddressChange( address oldMyWishAddress, address newMyWishAddress ); event MyWishPercentsChange( uint oldBasePercent, uint oldQuotePercent, uint newBasePercent, uint newQuotePercent ); constructor( uint256 _feeAmount, address payable _feeAddress ) public { feeAmount = _feeAmount; feeAddress = _feeAddress; } function tokenFallback(address, uint, bytes calldata) external {} function createOrder( address _baseAddress, address _quoteAddress, uint _baseLimit, uint _quoteLimit, uint _expirationTimestamp, address _baseOnlyInvestor, uint _minBaseInvestment, uint _minQuoteInvestment, address _brokerAddress, uint _brokerBasePercent, uint _brokerQuotePercent ) external payable nonReentrant onlyWhenVaultDefined hasFeeAndTransferIt returns(bytes32 _id) { _id = createKey(msg.sender); require(owners[_id] == address(0), "Swaps: Order already exists"); require( _baseAddress != _quoteAddress, "Swaps: Exchanged tokens must be different" ); require(_baseLimit > 0, "Swaps: Base limit must be positive"); require(_quoteLimit > 0, "Swaps: Quote limit must be positive"); require( _expirationTimestamp > now, "Swaps: Expiration time must be in future" ); require( _brokerBasePercent.add(myWishBasePercent) <= 10000, "Swaps: Base percent sum should be less than 100%" ); require( _brokerQuotePercent.add(myWishQuotePercent) <= 10000, "Swaps: Quote percent sum should be less than 100%" ); owners[_id] = msg.sender; baseAddresses[_id] = _baseAddress; quoteAddresses[_id] = _quoteAddress; expirationTimestamps[_id] = _expirationTimestamp; limits[_id][_baseAddress] = _baseLimit; limits[_id][_quoteAddress] = _quoteLimit; baseOnlyInvestor[_id] = _baseOnlyInvestor; minInvestments[_id][_baseAddress] = _minBaseInvestment; minInvestments[_id][_quoteAddress] = _minQuoteInvestment; if (_brokerAddress != address(0)) { brokers[_id].push(_brokerAddress); brokerPercents[_id][_baseAddress][_brokerAddress] = _brokerBasePercent; brokerPercents[_id][_quoteAddress][_brokerAddress] = _brokerQuotePercent; } if (myWishAddress != address(0)) { brokers[_id].push(myWishAddress); brokerPercents[_id][_baseAddress][myWishAddress] = myWishBasePercent; brokerPercents[_id][_quoteAddress][myWishAddress] = myWishQuotePercent; } emit OrderCreated( _id, msg.sender, _baseAddress, _quoteAddress, _baseLimit, _quoteLimit, _expirationTimestamp, _baseOnlyInvestor, _minBaseInvestment, _minQuoteInvestment, _brokerAddress, _brokerBasePercent, _brokerQuotePercent ); } function deposit(bytes32 _id, address _token, uint _amount) external payable nonReentrant onlyWhenVaultDefined onlyWhenOrderExists(_id) { if (_token == address(0)) { require( msg.value == _amount, "Swaps: Payable value should be equals value" ); address(vault).transfer(msg.value); } else { require(msg.value == 0, "Swaps: Payable not allowed here"); uint allowance = IERC20(_token).allowance( msg.sender, address(this) ); require( _amount <= allowance, "Swaps: Allowance should be not less than amount" ); IERC20(_token).transferFrom(msg.sender, address(vault), _amount); } _deposit(_id, _token, msg.sender, _amount); } function cancel(bytes32 _id) external nonReentrant onlyOrderOwner(_id) onlyWhenVaultDefined onlyWhenOrderExists(_id) { require(!isCancelled[_id], "Swaps: Already cancelled"); require(!isSwapped[_id], "Swaps: Already swapped"); address[2] memory tokens = [baseAddresses[_id], quoteAddresses[_id]]; for (uint t = 0; t < tokens.length; t++) { address token = tokens[t]; for (uint u = 0; u < investors[_id][token].length; u++) { address user = investors[_id][token][u]; uint userInvestment = investments[_id][token][user]; vault.withdraw(token, user, userInvestment); } } isCancelled[_id] = true; emit OrderCancelled(_id); } function refund(bytes32 _id, address _token) external nonReentrant onlyInvestor(_id, _token) onlyWhenVaultDefined onlyWhenOrderExists(_id) { require(!isCancelled[_id], "Swaps: Order cancelled"); require(!isSwapped[_id], "Swaps: Already swapped"); address user = msg.sender; uint investment = investments[_id][_token][user]; if (investment > 0) { delete investments[_id][_token][user]; } _removeInvestor(investors[_id][_token], user); if (investment > 0) { raised[_id][_token] = raised[_id][_token].sub(investment); vault.withdraw(_token, user, investment); } emit Refund(_id, _token, user, investment); } function setVault(Vault _vault) external onlyOwner { vault = _vault; } function setMyWishPercents(uint _basePercent, uint _quotePercent) external onlyOwner { require(_basePercent <= 10000, "Swaps: Base percent should be less than 100%"); require( _quotePercent <= 10000, "Swaps: Quote percent should be less than 100%" ); emit MyWishPercentsChange( myWishBasePercent, myWishQuotePercent, _basePercent, _quotePercent ); myWishBasePercent = _basePercent; myWishQuotePercent = _quotePercent; } function setMyWishAddress(address _myWishAddress) external onlyOwner { emit MyWishAddressChange(myWishAddress, _myWishAddress); myWishAddress = _myWishAddress; } function setFeeParameters( uint256 _feeAmount, address payable _feeAddress ) external onlyOwner { feeAmount = _feeAmount; feeAddress = _feeAddress; } function createKey(address _owner) public view returns (bytes32 result) { uint creationTime = now; result = 0x0000000000000000000000000000000000000000000000000000000000000000; assembly { result := or(result, mul(_owner, 0x1000000000000000000000000)) result := or(result, and(creationTime, 0xffffffffffffffffffffffff)) } } function allBrokersBasePercent(bytes32 _id) public view returns (uint) { return _allBrokersPercent(baseAddresses[_id], _id); } function allBrokersQuotePercent(bytes32 _id) public view returns (uint) { return _allBrokersPercent(quoteAddresses[_id], _id); } function baseLimit(bytes32 _id) public view returns (uint) { return limits[_id][baseAddresses[_id]]; } function quoteLimit(bytes32 _id) public view returns (uint) { return limits[_id][quoteAddresses[_id]]; } function baseRaised(bytes32 _id) public view returns (uint) { return raised[_id][baseAddresses[_id]]; } function quoteRaised(bytes32 _id) public view returns (uint) { return raised[_id][quoteAddresses[_id]]; } function isBaseFilled(bytes32 _id) public view returns (bool) { return raised[_id][baseAddresses[_id]] == limits[_id][baseAddresses[_id]]; } function isQuoteFilled(bytes32 _id) public view returns (bool) { return raised[_id][quoteAddresses[_id]] == limits[_id][quoteAddresses[_id]]; } function baseInvestors(bytes32 _id) public view returns (address[] memory) { return investors[_id][baseAddresses[_id]]; } function quoteInvestors(bytes32 _id) public view returns (address[] memory) { return investors[_id][quoteAddresses[_id]]; } function baseUserInvestment(bytes32 _id, address _user) public view returns (uint) { return investments[_id][baseAddresses[_id]][_user]; } function quoteUserInvestment(bytes32 _id, address _user) public view returns (uint) { return investments[_id][quoteAddresses[_id]][_user]; } function orderBrokers(bytes32 _id) public view returns (address[] memory) { return brokers[_id]; } function _allBrokersPercent(address _side, bytes32 _id) internal view returns (uint) { uint percents; for (uint i = 0; i < brokers[_id].length; i++) { address broker = brokers[_id][i]; uint percent = brokerPercents[_id][_side][broker]; percents = percents.add(percent); } return percents; } function _swap(bytes32 _id) internal { require(!isSwapped[_id], "Swaps: Already swapped"); require(!isCancelled[_id], "Swaps: Already cancelled"); require(isBaseFilled(_id), "Swaps: Base tokens not filled"); require(isQuoteFilled(_id), "Swaps: Quote tokens not filled"); require(now <= expirationTimestamps[_id], "Contract expired"); _distribute(_id, baseAddresses[_id], quoteAddresses[_id]); _distribute(_id, quoteAddresses[_id], baseAddresses[_id]); isSwapped[_id] = true; emit OrderSwapped(_id, msg.sender); } function _distribute(bytes32 _id, address _aSide, address _bSide) internal { uint brokersPercent; for (uint i = 0; i < brokers[_id].length; i++) { address broker = brokers[_id][i]; uint percent = brokerPercents[_id][_bSide][broker]; brokersPercent = brokersPercent.add(percent); } uint toPayBrokers = raised[_id][_bSide].mul(brokersPercent).div(10000); uint toPayInvestors = raised[_id][_bSide].sub(toPayBrokers); uint remainder = toPayInvestors; for (uint i = 0; i < investors[_id][_aSide].length; i++) { address user = investors[_id][_aSide][i]; uint toPay; // last if (i + 1 == investors[_id][_aSide].length) { toPay = remainder; } else { uint aSideRaised = raised[_id][_aSide]; uint userInvestment = investments[_id][_aSide][user]; toPay = userInvestment.mul(toPayInvestors).div(aSideRaised); remainder = remainder.sub(toPay); } vault.withdraw(_bSide, user, toPay); emit SwapSend(_id, _bSide, user, toPay); } remainder = toPayBrokers; for (uint i = 0; i < brokers[_id].length; i++) { address broker = brokers[_id][i]; uint toPay; if (i + 1 == brokers[_id].length) { toPay = remainder; } else { uint percent = brokerPercents[_id][_bSide][broker]; toPay = toPayBrokers.mul(percent).div(brokersPercent); remainder = remainder.sub(toPay); } vault.withdraw(_bSide, broker, toPay); emit BrokerSend(_id, _bSide, broker, toPay); } } function _removeInvestor(address[] storage _array, address _investor) internal { uint idx = _array.length - 1; for (uint i = 0; i < _array.length - 1; i++) { if (_array[i] == _investor) { idx = i; break; } } _array[idx] = _array[_array.length - 1]; delete _array[_array.length - 1]; _array.length--; } function _deposit(bytes32 _id, address _token, address _from, uint _amount) internal { uint amount = _amount; require( baseAddresses[_id] == _token || quoteAddresses[_id] == _token, "Swaps: You can deposit only base or quote currency" ); require( raised[_id][_token] < limits[_id][_token], "Swaps: Limit already reached" ); require(now <= expirationTimestamps[_id], "Swaps: Contract expired"); if (baseAddresses[_id] == _token && baseOnlyInvestor[_id] != address( 0 )) { require( msg.sender == baseOnlyInvestor[_id], "Swaps: Allowed only for specified address" ); } if (limits[_id][_token].sub( raised[_id][_token] ) > minInvestments[_id][_token]) { require( _amount >= minInvestments[_id][_token], "Swaps: Should not be less than minimum value" ); } if (!_isInvestor(_id, _token, _from)) { require( investors[_id][_token].length < MAX_INVESTORS, "Swaps: Too many investors" ); investors[_id][_token].push(_from); } uint raisedWithOverflow = raised[_id][_token].add(amount); if (raisedWithOverflow > limits[_id][_token]) { uint overflow = raisedWithOverflow.sub(limits[_id][_token]); vault.withdraw(_token, _from, overflow); amount = amount.sub(overflow); } investments[_id][_token][_from] = investments[_id][_token][_from].add( amount ); raised[_id][_token] = raised[_id][_token].add(amount); emit Deposit( _id, _token, _from, amount, investments[_id][_token][_from] ); if (isBaseFilled(_id) && isQuoteFilled(_id)) { _swap(_id); } } function _isInvestor(bytes32 _id, address _token, address _who) internal view returns (bool) { return investments[_id][_token][_who] > 0; } }
pragma solidity ^0.5.6; /** * @title ERC20 interface without bool returns * @dev see https://eips.ethereum.org/EIPS/eip-20 */ interface IERC20 { function transfer(address to, uint256 value) external; function approve(address spender, uint256 value) external; function transferFrom(address from, address to, uint256 value) external; function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); }
pragma solidity ^0.5.7; interface ISwaps { function createOrder( address _baseAddress, address _quoteAddress, uint _baseLimit, uint _quoteLimit, uint _expirationTimestamp, address _baseOnlyInvestor, uint _minBaseInvestment, uint _minQuoteInvestment, address _brokerAddress, uint _brokerBasePercent, uint _brokerQuotePercent ) external payable returns(bytes32 _id); function deposit(bytes32 _id, address _token, uint _amount) external payable; function cancel(bytes32 _id) external; function refund(bytes32 _id, address _token) external; }
pragma solidity ^0.5.7; import "openzeppelin-solidity/contracts/ownership/Ownable.sol"; import "./IERC20.sol"; contract Vault is Ownable { address public swaps; modifier onlySwaps() { require(msg.sender == swaps); _; } function() external payable {} function tokenFallback(address, uint, bytes calldata) external {} function setSwaps(address _swaps) public onlyOwner { swaps = _swaps; } function withdraw(address _token, address _receiver, uint _amount) public onlySwaps { if (_token == address(0)) { address(uint160(_receiver)).transfer(_amount); } else { IERC20(_token).transfer(_receiver, _amount); } } }
pragma solidity ^0.5.2; /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } }
pragma solidity ^0.5.2; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @return the address of the owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner()); _; } /** * @return true if `msg.sender` is the owner of the contract. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Allows the current owner to relinquish control of the contract. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. * @notice Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
pragma solidity ^0.5.2; /** * @title Helps contracts guard against reentrancy attacks. * @author Remco Bloemen <remco@2π.com>, Eenae <[email protected]> * @dev If you mark a function `nonReentrant`, you should also * mark it `external`. */ contract ReentrancyGuard { /// @dev counter to allow mutex lock with only one SSTORE operation uint256 private _guardCounter; constructor () internal { // The counter starts at one to prevent changing it from zero to a non-zero // value, which is a more expensive operation. _guardCounter = 1; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { _guardCounter += 1; uint256 localCounter = _guardCounter; _; require(localCounter == _guardCounter); } }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 999999 }, "evmVersion": "istanbul", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_feeAmount","type":"uint256"},{"internalType":"address payable","name":"_feeAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"broker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BrokerSend","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldMyWishAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newMyWishAddress","type":"address"}],"name":"MyWishAddressChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldBasePercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldQuotePercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBasePercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newQuotePercent","type":"uint256"}],"name":"MyWishPercentsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"baseAddress","type":"address"},{"indexed":false,"internalType":"address","name":"quoteAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"baseLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quoteLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expirationTimestamp","type":"uint256"},{"indexed":false,"internalType":"address","name":"baseOnlyInvestor","type":"address"},{"indexed":false,"internalType":"uint256","name":"minBaseInvestment","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minQuoteInvestment","type":"uint256"},{"indexed":false,"internalType":"address","name":"broker","type":"address"},{"indexed":false,"internalType":"uint256","name":"brokerBasePercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"brokerQuotePercent","type":"uint256"}],"name":"OrderCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":false,"internalType":"address","name":"byUser","type":"address"}],"name":"OrderSwapped","type":"event"},{"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":"bytes32","name":"id","type":"bytes32"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Refund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapSend","type":"event"},{"constant":true,"inputs":[],"name":"MAX_INVESTORS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"allBrokersBasePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"allBrokersQuotePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"baseAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"baseInvestors","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"baseLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"baseOnlyInvestor","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"baseRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"},{"internalType":"address","name":"_user","type":"address"}],"name":"baseUserInvestment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"brokerPercents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"brokers","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"cancel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"createKey","outputs":[{"internalType":"bytes32","name":"result","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_baseAddress","type":"address"},{"internalType":"address","name":"_quoteAddress","type":"address"},{"internalType":"uint256","name":"_baseLimit","type":"uint256"},{"internalType":"uint256","name":"_quoteLimit","type":"uint256"},{"internalType":"uint256","name":"_expirationTimestamp","type":"uint256"},{"internalType":"address","name":"_baseOnlyInvestor","type":"address"},{"internalType":"uint256","name":"_minBaseInvestment","type":"uint256"},{"internalType":"uint256","name":"_minQuoteInvestment","type":"uint256"},{"internalType":"address","name":"_brokerAddress","type":"address"},{"internalType":"uint256","name":"_brokerBasePercent","type":"uint256"},{"internalType":"uint256","name":"_brokerQuotePercent","type":"uint256"}],"name":"createOrder","outputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"expirationTimestamps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"investments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"investors","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"isBaseFilled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"isCancelled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"isQuoteFilled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"isSwapped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"limits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"minInvestments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"myWishAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"myWishBasePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"myWishQuotePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"orderBrokers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"quoteAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"quoteInvestors","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"quoteLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"quoteRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"},{"internalType":"address","name":"_user","type":"address"}],"name":"quoteUserInvestment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"raised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"},{"internalType":"address","name":"_token","type":"address"}],"name":"refund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_feeAmount","type":"uint256"},{"internalType":"address payable","name":"_feeAddress","type":"address"}],"name":"setFeeParameters","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_myWishAddress","type":"address"}],"name":"setMyWishAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_basePercent","type":"uint256"},{"internalType":"uint256","name":"_quotePercent","type":"uint256"}],"name":"setMyWishPercents","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract Vault","name":"_vault","type":"address"}],"name":"setVault","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"tokenFallback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"internalType":"contract Vault","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600a60025534801561001557600080fd5b506040516200499d3803806200499d8339818101604052604081101561003a57600080fd5b508051602090910151600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360018055600391909155600480546001600160a01b0319166001600160a01b039092169190911790556148d880620000c56000396000f3fe6080604052600436106103135760003560e01c80638da5cb5b1161019a578063ca54f06d116100e1578063e63bc8c01161008a578063fa36e3c111610064578063fa36e3c114610cc9578063fb8ad6ff14610cf3578063fbfa77cf14610d1d57610313565b8063e63bc8c014610c35578063f2fde38b14610c5f578063f69b2e2014610c9f57610313565b8063d3cd2cd8116100bb578063d3cd2cd814610b86578063d537136714610bb0578063d954863c14610bf657610313565b8063ca54f06d14610ab2578063ccc109e214610af2578063ce997f8814610b3857610313565b8063ae760c5c11610143578063c2698ff31161011d578063c2698ff314610a10578063c3b0385914610a5e578063c4d252f514610a8857610313565b8063ae760c5c1461091d578063b1ebc0d614610947578063c0ee0b8a1461097157610313565b80639ff99b37116101745780639ff99b3714610899578063a0e20c3a146108c9578063a8a4a963146108f357610313565b80638da5cb5b146108455780638f32d59b1461085a5780639a5d44071461086f57610313565b8063514467b91161025e5780636a34480b1161020757806375c10897116101e157806375c1089714610783578063844ab3f8146107b357806389584c27146107ff57610313565b80636a34480b14610744578063715018a6146107595780637269180c1461076e57610313565b80636817031b116102385780636817031b146106c557806369e15404146107055780636a29f5391461071a57610313565b8063514467b9146106155780635dde3df2146106555780636707bb061461067f57610313565b80632fc29c66116102c057806340b20b091161029a57806340b20b091461057257806341275358146105ba57806345b4032c146105cf57610313565b80632fc29c66146104b95780632fe48944146104e35780633e6fa6bb146104f857610313565b8063196c3fbf116102f1578063196c3fbf146103fe57806325008c971461043c578063250b60481461048f57610313565b8063073a0f921461031857806308abb4ab1461037057806310af256014610385575b600080fd5b34801561032457600080fd5b5061035e6004803603604081101561033b57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610d32565b60408051918252519081900360200190f35b34801561037c57600080fd5b5061035e610d4f565b61035e600480360361016081101561039c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a081013582169160c08201359160e0810135916101008201351690610120810135906101400135610d55565b34801561040a57600080fd5b506104286004803603602081101561042157600080fd5b50356119e1565b604080519115158252519081900360200190f35b34801561044857600080fd5b506104666004803603602081101561045f57600080fd5b50356119f6565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561049b57600080fd5b5061035e600480360360208110156104b257600080fd5b5035611a1e565b3480156104c557600080fd5b50610466600480360360208110156104dc57600080fd5b5035611a30565b3480156104ef57600080fd5b50610466611a58565b34801561050457600080fd5b506105226004803603602081101561051b57600080fd5b5035611a74565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561055e578181015183820152602001610546565b505050509050019250505060405180910390f35b34801561057e57600080fd5b506105b86004803603604081101561059557600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16611b12565b005b3480156105c657600080fd5b50610466611b6f565b3480156105db57600080fd5b506105b8600480360360408110156105f257600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16611b8b565b34801561062157600080fd5b506105b86004803603602081101561063857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612030565b34801561066157600080fd5b5061035e6004803603602081101561067857600080fd5b50356120dd565b34801561068b57600080fd5b5061035e600480360360408110156106a257600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16612117565b3480156106d157600080fd5b506105b8600480360360208110156106e857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612134565b34801561071157600080fd5b5061035e61218c565b34801561072657600080fd5b506104286004803603602081101561073d57600080fd5b5035612192565b34801561075057600080fd5b5061035e6121e2565b34801561076557600080fd5b506105b86121e8565b34801561077a57600080fd5b5061035e612268565b34801561078f57600080fd5b50610466600480360360408110156107a657600080fd5b508035906020013561226e565b3480156107bf57600080fd5b50610466600480360360608110156107d657600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff60208201351690604001356122b0565b34801561080b57600080fd5b5061035e6004803603604081101561082257600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff166122ff565b34801561085157600080fd5b5061046661231c565b34801561086657600080fd5b50610428612339565b34801561087b57600080fd5b506104286004803603602081101561089257600080fd5b5035612357565b3480156108a557600080fd5b506105b8600480360360408110156108bc57600080fd5b508035906020013561236c565b3480156108d557600080fd5b5061035e600480360360208110156108ec57600080fd5b503561248b565b3480156108ff57600080fd5b5061035e6004803603602081101561091657600080fd5b50356124c0565b34801561092957600080fd5b506105226004803603602081101561094057600080fd5b50356124fa565b34801561095357600080fd5b5061035e6004803603602081101561096a57600080fd5b5035612596565b34801561097d57600080fd5b506105b86004803603606081101561099457600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516916020810135918101906060810160408201356401000000008111156109d157600080fd5b8201836020820111156109e357600080fd5b80359060200191846001830284011164010000000083111715610a0557600080fd5b5090925090506125d0565b348015610a1c57600080fd5b5061035e60048036036060811015610a3357600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff602082013581169160400135166125d6565b348015610a6a57600080fd5b5061035e60048036036020811015610a8157600080fd5b50356125f9565b348015610a9457600080fd5b506105b860048036036020811015610aab57600080fd5b5035612633565b348015610abe57600080fd5b5061035e60048036036020811015610ad557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612b2f565b348015610afe57600080fd5b5061035e60048036036040811015610b1557600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16612b51565b348015610b4457600080fd5b5061035e60048036036060811015610b5b57600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff60208201358116916040013516612b97565b348015610b9257600080fd5b5061042860048036036020811015610ba957600080fd5b5035612bba565b348015610bbc57600080fd5b5061035e60048036036040811015610bd357600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16612c0a565b6105b860048036036060811015610c0c57600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff6020820135169060400135612c50565b348015610c4157600080fd5b5061046660048036036020811015610c5857600080fd5b503561304f565b348015610c6b57600080fd5b506105b860048036036020811015610c8257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16613077565b348015610cab57600080fd5b5061035e60048036036020811015610cc257600080fd5b5035613094565b348015610cd557600080fd5b5061052260048036036020811015610cec57600080fd5b50356130c3565b348015610cff57600080fd5b5061046660048036036020811015610d1657600080fd5b503561313a565b348015610d2957600080fd5b50610466613162565b600e60209081526000928352604080842090915290825290205481565b60145481565b600180548101908190556005546000919073ffffffffffffffffffffffffffffffffffffffff16610de757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f53776170733a205661756c74206973206e6f7420646566696e65640000000000604482015290519081900360640190fd5b6003543414610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53776170733a204e6f7420656e6f756768206665650000000000000000000000604482015290519081900360640190fd5b60045460405173ffffffffffffffffffffffffffffffffffffffff909116903480156108fc02916000818181858888f19350505050158015610e9d573d6000803e3d6000fd5b50610ea733612b2f565b60008181526007602052604090205490925073ffffffffffffffffffffffffffffffffffffffff1615610f3b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f53776170733a204f7264657220616c7265616479206578697374730000000000604482015290519081900360640190fd5b8b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff161415610fc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061467a6029913960400191505060405180910390fd5b60008b11611019576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806148826022913960400191505060405180910390fd5b60008a11611072576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806147876023913960400191505060405180910390fd5b4289116110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806146526028913960400191505060405180910390fd5b6127106110e26014548661317e90919063ffffffff16565b1115611139576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806146cf6030913960400191505060405180910390fd5b6127106111516015548561317e90919063ffffffff16565b11156111a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806148016031913960400191505060405180910390fd5b336007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c6008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b6009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600a6000848152602001908152602001600020819055508a600d600084815260200190815260200160002060008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555089600d600084815260200190815260200160002060008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550876006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866011600084815260200190815260200160002060008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856011600084815260200190815260200160002060008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461162c57601260008381526020019081526020016000208590806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050836013600084815260200190815260200160002060008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550826013600084815260200190815260200160002060008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60165473ffffffffffffffffffffffffffffffffffffffff16156118505760126000838152602001908152602001600020601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506014546013600084815260200190815260200160002060008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506015546013600084815260200190815260200160002060008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b7f0d998659c3775ddb3ef2b79566999bcdf638da35541a76893a0f394962fd4d6882338f8f8f8f8f8f8f8f8f8f8f604051808e81526020018d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018981526020018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019d505050505050505050505050505060405180910390a160015481146119d157600080fd5b509b9a5050505050505050505050565b600b6020526000908152604090205460ff1681565b60096020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020526000908152604090205481565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60165473ffffffffffffffffffffffffffffffffffffffff1681565b6000818152600f60209081526040808320600983528184205473ffffffffffffffffffffffffffffffffffffffff168452825291829020805483518184028101840190945280845260609392830182828015611b0657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611adb575b50505050509050919050565b611b1a612339565b611b2357600080fd5b600391909155600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b600180548101908190558282611ba2828233613197565b611bf7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806148326021913960400191505060405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16611c7b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f53776170733a205661756c74206973206e6f7420646566696e65640000000000604482015290519081900360640190fd5b600085815260076020526040902054859073ffffffffffffffffffffffffffffffffffffffff16611d0d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f53776170733a204f7264657220646f65736e2774206578697374000000000000604482015290519081900360640190fd5b6000868152600c602052604090205460ff1615611d8b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f53776170733a204f726465722063616e63656c6c656400000000000000000000604482015290519081900360640190fd5b6000868152600b602052604090205460ff1615611e0957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f53776170733a20416c7265616479207377617070656400000000000000000000604482015290519081900360640190fd5b600086815260106020908152604080832073ffffffffffffffffffffffffffffffffffffffff891684528252808320338085529252909120548015611e8557600088815260106020908152604080832073ffffffffffffffffffffffffffffffffffffffff808c16855290835281842090861684529091528120555b6000888152600f6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b1684529091529020611ebe90836131d6565b8015611fbb576000888152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b168452909152902054611f04908263ffffffff6133c816565b6000898152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff808d16808652919093528184209490945560055481517fd9caed120000000000000000000000000000000000000000000000000000000081526004810195909552868316602486015260448501869052905191169263d9caed1292606480830193919282900301818387803b158015611fa257600080fd5b505af1158015611fb6573d6000803e3d6000fd5b505050505b6040805189815273ffffffffffffffffffffffffffffffffffffffff808a1660208301528416818301526060810183905290517f5b2a5a92e7e0aa7bcf044d10a942ae5f1213049cacda790715f50bb32f503fa79181900360800190a15050505050600154811461202b57600080fd5b505050565b612038612339565b61204157600080fd5b6016546040805173ffffffffffffffffffffffffffffffffffffffff9283168152918316602083015280517f5bb2c7f2a982b5b30825bc7af677a2b5df7c980bbc3791bc2e96fac17abe0bd09281900390910190a1601680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000908152600e60209081526040808320600983528184205473ffffffffffffffffffffffffffffffffffffffff16845290915290205490565b600d60209081526000928352604080842090915290825290205481565b61213c612339565b61214557600080fd5b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60035481565b6000818152600d60209081526040808320600983528184205473ffffffffffffffffffffffffffffffffffffffff1680855290835281842054948452600e83528184209084529091529020541490565b60025481565b6121f0612339565b6121f957600080fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60155481565b6012602052816000526040600020818154811061228757fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b600f60205282600052604060002060205281600052604060002081815481106122d557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16925083915050565b601160209081526000928352604080842090915290825290205481565b60005473ffffffffffffffffffffffffffffffffffffffff165b90565b60005473ffffffffffffffffffffffffffffffffffffffff16331490565b600c6020526000908152604090205460ff1681565b612374612339565b61237d57600080fd5b6127108211156123d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806146a3602c913960400191505060405180910390fd5b612710811115612433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180614731602d913960400191505060405180910390fd5b60145460155460408051928352602083019190915281810184905260608201839052517f5c83ec202c5fd41a4f89566824a6dc43ac542cd5845a645749e60277c2a81ac29181900360800190a1601491909155601555565b6000818152600860205260408120546124ba9073ffffffffffffffffffffffffffffffffffffffff16836133dd565b92915050565b6000908152600d60209081526040808320600883528184205473ffffffffffffffffffffffffffffffffffffffff16845290915290205490565b6000818152600f60209081526040808320600883528184205473ffffffffffffffffffffffffffffffffffffffff168452825291829020805483518184028101840190945280845260609392830182828015611b065760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611adb5750505050509050919050565b6000908152600e60209081526040808320600883528184205473ffffffffffffffffffffffffffffffffffffffff16845290915290205490565b50505050565b601360209081526000938452604080852082529284528284209052825290205481565b6000908152600d60209081526040808320600983528184205473ffffffffffffffffffffffffffffffffffffffff16845290915290205490565b60018054810190819055600082815260076020526040902054829073ffffffffffffffffffffffffffffffffffffffff1633146126d157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f53776170733a20416c6c6f776564206f6e6c7920666f72206f776e6572000000604482015290519081900360640190fd5b60055473ffffffffffffffffffffffffffffffffffffffff1661275557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f53776170733a205661756c74206973206e6f7420646566696e65640000000000604482015290519081900360640190fd5b600083815260076020526040902054839073ffffffffffffffffffffffffffffffffffffffff166127e757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f53776170733a204f7264657220646f65736e2774206578697374000000000000604482015290519081900360640190fd5b6000848152600c602052604090205460ff161561286557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f53776170733a20416c72656164792063616e63656c6c65640000000000000000604482015290519081900360640190fd5b6000848152600b602052604090205460ff16156128e357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f53776170733a20416c7265616479207377617070656400000000000000000000604482015290519081900360640190fd5b6128eb6145f6565b506040805180820182526000868152600860209081528382205473ffffffffffffffffffffffffffffffffffffffff9081168452888352600982529382205490931692820192909252905b6002811015612aad57600082826002811061294d57fe5b6020020151905060005b6000888152600f6020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902054811015612aa3576000888152600f6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281208054839081106129c957fe5b60009182526020808320909101548b835260108252604080842073ffffffffffffffffffffffffffffffffffffffff888116808752918552828620938116808752939094528185205460055483517fd9caed1200000000000000000000000000000000000000000000000000000000815260048101939093526024830185905260448301829052925193965094919093169263d9caed12926064808301939282900301818387803b158015612a7d57600080fd5b505af1158015612a91573d6000803e3d6000fd5b50506001909401935061295792505050565b5050600101612936565b506000858152600c602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815187815291517f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d9281900390910190a15050506001548114612b2b57600080fd5b5050565b6c0100000000000000000000000002426bffffffffffffffffffffffff161790565b6000918252601060209081526040808420600883528185205473ffffffffffffffffffffffffffffffffffffffff90811686529083528185209316845291905290205490565b601060209081526000938452604080852082529284528284209052825290205481565b6000818152600d60209081526040808320600883528184205473ffffffffffffffffffffffffffffffffffffffff1680855290835281842054948452600e83528184209084529091529020541490565b6000918252601060209081526040808420600983528185205473ffffffffffffffffffffffffffffffffffffffff90811686529083528185209316845291905290205490565b6001805481019081905560055473ffffffffffffffffffffffffffffffffffffffff16612cde57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f53776170733a205661756c74206973206e6f7420646566696e65640000000000604482015290519081900360640190fd5b600084815260076020526040902054849073ffffffffffffffffffffffffffffffffffffffff16612d7057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f53776170733a204f7264657220646f65736e2774206578697374000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8416612e2f57823414612de3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806147aa602b913960400191505060405180910390fd5b60055460405173ffffffffffffffffffffffffffffffffffffffff909116903480156108fc02916000818181858888f19350505050158015612e29573d6000803e3d6000fd5b50613034565b3415612e9c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53776170733a2050617961626c65206e6f7420616c6c6f776564206865726500604482015290519081900360640190fd5b604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152905160009173ffffffffffffffffffffffffffffffffffffffff87169163dd62ed3e91604480820192602092909190829003018186803b158015612f1257600080fd5b505afa158015612f26573d6000803e3d6000fd5b505050506040513d6020811015612f3c57600080fd5b5051905080841115612f99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614853602f913960400191505060405180910390fd5b600554604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9283166024820152604481018790529051918716916323b872dd9160648082019260009290919082900301818387803b15801561301a57600080fd5b505af115801561302e573d6000803e3d6000fd5b50505050505b6130408585338661347f565b5060015481146125d057600080fd5b60086020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b61307f612339565b61308857600080fd5b61309181613c3f565b50565b6000818152600960205260408120546124ba9073ffffffffffffffffffffffffffffffffffffffff16836133dd565b600081815260126020908152604091829020805483518184028101840190945280845260609392830182828015611b065760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611adb5750505050509050919050565b60076020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60008282018381101561319057600080fd5b9392505050565b600092835260106020908152604080852073ffffffffffffffffffffffffffffffffffffffff9485168652825280852092909316845252902054151590565b81547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160005b83547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01811015613283578273ffffffffffffffffffffffffffffffffffffffff1684828154811061324b57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561327b57809150613283565b6001016131fd565b50825483907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106132b457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168382815481106132eb57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055825483907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061336957fe5b600091825260209091200180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905582546125d0847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301614614565b6000828211156133d757600080fd5b50900390565b600080805b60008481526012602052604090205481101561347757600084815260126020526040812080548390811061341257fe5b600091825260208083209091015487835260138252604080842073ffffffffffffffffffffffffffffffffffffffff8b8116865290845281852092168085529190925291205490915061346b848263ffffffff61317e16565b935050506001016133e2565b509392505050565b600084815260086020526040902054819073ffffffffffffffffffffffffffffffffffffffff858116911614806134dc575060008581526009602052604090205473ffffffffffffffffffffffffffffffffffffffff8581169116145b613531576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806146ff6032913960400191505060405180910390fd5b6000858152600d6020908152604080832073ffffffffffffffffffffffffffffffffffffffff881680855290835281842054898552600e8452828520918552925290912054106135e257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f53776170733a204c696d697420616c7265616479207265616368656400000000604482015290519081900360640190fd5b6000858152600a602052604090205442111561365f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f53776170733a20436f6e74726163742065787069726564000000000000000000604482015290519081900360640190fd5b60008581526008602052604090205473ffffffffffffffffffffffffffffffffffffffff85811691161480156136b8575060008581526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1615155b156137395760008581526006602052604090205473ffffffffffffffffffffffffffffffffffffffff163314613739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061475e6029913960400191505060405180910390fd5b600085815260116020908152604080832073ffffffffffffffffffffffffffffffffffffffff881680855290835281842054898552600e84528285208286528452828520548a8652600d85528386209286529190935292205490916137a4919063ffffffff6133c816565b111561383257600085815260116020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452909152902054821015613832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806147d5602c913960400191505060405180910390fd5b61383d858585613197565b61394f576002546000868152600f6020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168452909152902054106138e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53776170733a20546f6f206d616e7920696e766573746f727300000000000000604482015290519081900360640190fd5b6000858152600f6020908152604080832073ffffffffffffffffffffffffffffffffffffffff88811685529083529083208054600181018255908452919092200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169185169190911790555b6000858152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915281205461398f908363ffffffff61317e16565b6000878152600d6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a168452909152902054909150811115613abe576000868152600d6020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168452909152812054613a0a90839063ffffffff6133c816565b600554604080517fd9caed1200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015260448201859052915193945091169163d9caed129160648082019260009290919082900301818387803b158015613a8f57600080fd5b505af1158015613aa3573d6000803e3d6000fd5b50505050613aba81846133c890919063ffffffff16565b9250505b600086815260106020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a1685529083528184209088168452909152902054613b0a908363ffffffff61317e16565b600087815260106020908152604080832073ffffffffffffffffffffffffffffffffffffffff808b16808652918452828520908a168552835281842094909455898352600e82528083209383529290522054613b6c908363ffffffff61317e16565b6000878152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff808b16808652918452828520959095558a8452601083528184208185528352818420948916808552948352928190205481518b8152928301939093528181019390935260608101859052608081019190915290517f52d53f1a8b77300a7e949e8404b5b690925c03bbb3bc329b5a05f70abc2a24a09181900360a00190a1613c1986612bba565b8015613c295750613c2986612192565b15613c3757613c3786613cec565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116613c5f57600080fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000818152600b602052604090205460ff1615613d6a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f53776170733a20416c7265616479207377617070656400000000000000000000604482015290519081900360640190fd5b6000818152600c602052604090205460ff1615613de857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f53776170733a20416c72656164792063616e63656c6c65640000000000000000604482015290519081900360640190fd5b613df181612bba565b613e5c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f53776170733a204261736520746f6b656e73206e6f742066696c6c6564000000604482015290519081900360640190fd5b613e6581612192565b613ed057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53776170733a2051756f746520746f6b656e73206e6f742066696c6c65640000604482015290519081900360640190fd5b6000818152600a6020526040902054421115613f4d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f436f6e7472616374206578706972656400000000000000000000000000000000604482015290519081900360640190fd5b600081815260086020908152604080832054600990925290912054613f8d91839173ffffffffffffffffffffffffffffffffffffffff9182169116614045565b600081815260096020908152604080832054600890925290912054613fcd91839173ffffffffffffffffffffffffffffffffffffffff9182169116614045565b6000818152600b602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558151838152339181019190915281517f44718dd9f1347cc728de75a7e465c3c52e22588f75b06eac4fe4b0b2b7e061db929181900390910190a150565b6000805b6000858152601260205260409020548110156140de57600085815260126020526040812080548390811061407957fe5b600091825260208083209091015488835260138252604080842073ffffffffffffffffffffffffffffffffffffffff89811686529084528185209216808552919092529120549091506140d2848263ffffffff61317e16565b93505050600101614049565b506000848152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120546141339061271090614127908563ffffffff6145ad16565b9063ffffffff6145d416565b6000868152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915281205491925090614177908363ffffffff6133c816565b90508060005b6000888152600f6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b1684529091529020548110156143bd576000888152600f6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915281208054839081106141ef57fe5b60009182526020808320909101548b8352600f8252604080842073ffffffffffffffffffffffffffffffffffffffff8d8116865293528320549116925060018401141561423d5750826142ba565b60008a8152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff808e16808652918452828520548f8652601085528386209286529184528285209087168552909252909120546142a382614127838a63ffffffff6145ad16565b92506142b5868463ffffffff6133c816565b955050505b600554604080517fd9caed1200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528581166024830152604482018590529151919092169163d9caed1291606480830192600092919082900301818387803b15801561433d57600080fd5b505af1158015614351573d6000803e3d6000fd5b5050604080518d815273ffffffffffffffffffffffffffffffffffffffff808d1660208301528616818301526060810185905290517f6e71f3d02fa39a6ecb3f8ab11cce4a0aa3959aa8909de48e2ac9be7e135721ee9350908190036080019150a1505060010161417d565b5082905060005b6000888152601260205260409020548110156145a35760008881526012602052604081208054839081106143f457fe5b60009182526020808320909101548b83526012909152604082205473ffffffffffffffffffffffffffffffffffffffff909116925060018401141561443a5750826144a0565b60008a815260136020908152604080832073ffffffffffffffffffffffffffffffffffffffff808d168552908352818420908616845290915290205461448a88614127898463ffffffff6145ad16565b915061449c858363ffffffff6133c816565b9450505b600554604080517fd9caed1200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528581166024830152604482018590529151919092169163d9caed1291606480830192600092919082900301818387803b15801561452357600080fd5b505af1158015614537573d6000803e3d6000fd5b5050604080518d815273ffffffffffffffffffffffffffffffffffffffff808d1660208301528616818301526060810185905290517f9362c2051dce15f5681edba6c4556a3f982e118cd58fc7e1ef64e6fd8988e54e9350908190036080019150a150506001016143c4565b5050505050505050565b6000826145bc575060006124ba565b828202828482816145c957fe5b041461319057600080fd5b60008082116145e257600080fd5b60008284816145ed57fe5b04949350505050565b60405180604001604052806002906020820280388339509192915050565b81548183558181111561202b5760008381526020902061202b91810190830161233691905b8082111561464d5760008155600101614639565b509056fe53776170733a2045787069726174696f6e2074696d65206d75737420626520696e2066757475726553776170733a2045786368616e67656420746f6b656e73206d75737420626520646966666572656e7453776170733a20426173652070657263656e742073686f756c64206265206c657373207468616e203130302553776170733a20426173652070657263656e742073756d2073686f756c64206265206c657373207468616e203130302553776170733a20596f752063616e206465706f736974206f6e6c792062617365206f722071756f74652063757272656e637953776170733a2051756f74652070657263656e742073686f756c64206265206c657373207468616e203130302553776170733a20416c6c6f776564206f6e6c7920666f7220737065636966696564206164647265737353776170733a2051756f7465206c696d6974206d75737420626520706f73697469766553776170733a2050617961626c652076616c75652073686f756c6420626520657175616c732076616c756553776170733a2053686f756c64206e6f74206265206c657373207468616e206d696e696d756d2076616c756553776170733a2051756f74652070657263656e742073756d2073686f756c64206265206c657373207468616e203130302553776170733a20416c6c6f776564206f6e6c7920666f7220696e766573746f727353776170733a20416c6c6f77616e63652073686f756c64206265206e6f74206c657373207468616e20616d6f756e7453776170733a2042617365206c696d6974206d75737420626520706f736974697665a265627a7a72315820e10c6daa07585ce5e81290ff0caa6d495cae5549a8b1859b19f643c0caafa06964736f6c6343000511003200000000000000000000000000000000000000000000000000354a6ba7a180000000000000000000000000007367409e0c12b2b7caa5c990e11a75e0d86580fc
Deployed Bytecode
0x6080604052600436106103135760003560e01c80638da5cb5b1161019a578063ca54f06d116100e1578063e63bc8c01161008a578063fa36e3c111610064578063fa36e3c114610cc9578063fb8ad6ff14610cf3578063fbfa77cf14610d1d57610313565b8063e63bc8c014610c35578063f2fde38b14610c5f578063f69b2e2014610c9f57610313565b8063d3cd2cd8116100bb578063d3cd2cd814610b86578063d537136714610bb0578063d954863c14610bf657610313565b8063ca54f06d14610ab2578063ccc109e214610af2578063ce997f8814610b3857610313565b8063ae760c5c11610143578063c2698ff31161011d578063c2698ff314610a10578063c3b0385914610a5e578063c4d252f514610a8857610313565b8063ae760c5c1461091d578063b1ebc0d614610947578063c0ee0b8a1461097157610313565b80639ff99b37116101745780639ff99b3714610899578063a0e20c3a146108c9578063a8a4a963146108f357610313565b80638da5cb5b146108455780638f32d59b1461085a5780639a5d44071461086f57610313565b8063514467b91161025e5780636a34480b1161020757806375c10897116101e157806375c1089714610783578063844ab3f8146107b357806389584c27146107ff57610313565b80636a34480b14610744578063715018a6146107595780637269180c1461076e57610313565b80636817031b116102385780636817031b146106c557806369e15404146107055780636a29f5391461071a57610313565b8063514467b9146106155780635dde3df2146106555780636707bb061461067f57610313565b80632fc29c66116102c057806340b20b091161029a57806340b20b091461057257806341275358146105ba57806345b4032c146105cf57610313565b80632fc29c66146104b95780632fe48944146104e35780633e6fa6bb146104f857610313565b8063196c3fbf116102f1578063196c3fbf146103fe57806325008c971461043c578063250b60481461048f57610313565b8063073a0f921461031857806308abb4ab1461037057806310af256014610385575b600080fd5b34801561032457600080fd5b5061035e6004803603604081101561033b57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610d32565b60408051918252519081900360200190f35b34801561037c57600080fd5b5061035e610d4f565b61035e600480360361016081101561039c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a081013582169160c08201359160e0810135916101008201351690610120810135906101400135610d55565b34801561040a57600080fd5b506104286004803603602081101561042157600080fd5b50356119e1565b604080519115158252519081900360200190f35b34801561044857600080fd5b506104666004803603602081101561045f57600080fd5b50356119f6565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561049b57600080fd5b5061035e600480360360208110156104b257600080fd5b5035611a1e565b3480156104c557600080fd5b50610466600480360360208110156104dc57600080fd5b5035611a30565b3480156104ef57600080fd5b50610466611a58565b34801561050457600080fd5b506105226004803603602081101561051b57600080fd5b5035611a74565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561055e578181015183820152602001610546565b505050509050019250505060405180910390f35b34801561057e57600080fd5b506105b86004803603604081101561059557600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16611b12565b005b3480156105c657600080fd5b50610466611b6f565b3480156105db57600080fd5b506105b8600480360360408110156105f257600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16611b8b565b34801561062157600080fd5b506105b86004803603602081101561063857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612030565b34801561066157600080fd5b5061035e6004803603602081101561067857600080fd5b50356120dd565b34801561068b57600080fd5b5061035e600480360360408110156106a257600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16612117565b3480156106d157600080fd5b506105b8600480360360208110156106e857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612134565b34801561071157600080fd5b5061035e61218c565b34801561072657600080fd5b506104286004803603602081101561073d57600080fd5b5035612192565b34801561075057600080fd5b5061035e6121e2565b34801561076557600080fd5b506105b86121e8565b34801561077a57600080fd5b5061035e612268565b34801561078f57600080fd5b50610466600480360360408110156107a657600080fd5b508035906020013561226e565b3480156107bf57600080fd5b50610466600480360360608110156107d657600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff60208201351690604001356122b0565b34801561080b57600080fd5b5061035e6004803603604081101561082257600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff166122ff565b34801561085157600080fd5b5061046661231c565b34801561086657600080fd5b50610428612339565b34801561087b57600080fd5b506104286004803603602081101561089257600080fd5b5035612357565b3480156108a557600080fd5b506105b8600480360360408110156108bc57600080fd5b508035906020013561236c565b3480156108d557600080fd5b5061035e600480360360208110156108ec57600080fd5b503561248b565b3480156108ff57600080fd5b5061035e6004803603602081101561091657600080fd5b50356124c0565b34801561092957600080fd5b506105226004803603602081101561094057600080fd5b50356124fa565b34801561095357600080fd5b5061035e6004803603602081101561096a57600080fd5b5035612596565b34801561097d57600080fd5b506105b86004803603606081101561099457600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516916020810135918101906060810160408201356401000000008111156109d157600080fd5b8201836020820111156109e357600080fd5b80359060200191846001830284011164010000000083111715610a0557600080fd5b5090925090506125d0565b348015610a1c57600080fd5b5061035e60048036036060811015610a3357600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff602082013581169160400135166125d6565b348015610a6a57600080fd5b5061035e60048036036020811015610a8157600080fd5b50356125f9565b348015610a9457600080fd5b506105b860048036036020811015610aab57600080fd5b5035612633565b348015610abe57600080fd5b5061035e60048036036020811015610ad557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612b2f565b348015610afe57600080fd5b5061035e60048036036040811015610b1557600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16612b51565b348015610b4457600080fd5b5061035e60048036036060811015610b5b57600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff60208201358116916040013516612b97565b348015610b9257600080fd5b5061042860048036036020811015610ba957600080fd5b5035612bba565b348015610bbc57600080fd5b5061035e60048036036040811015610bd357600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16612c0a565b6105b860048036036060811015610c0c57600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff6020820135169060400135612c50565b348015610c4157600080fd5b5061046660048036036020811015610c5857600080fd5b503561304f565b348015610c6b57600080fd5b506105b860048036036020811015610c8257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16613077565b348015610cab57600080fd5b5061035e60048036036020811015610cc257600080fd5b5035613094565b348015610cd557600080fd5b5061052260048036036020811015610cec57600080fd5b50356130c3565b348015610cff57600080fd5b5061046660048036036020811015610d1657600080fd5b503561313a565b348015610d2957600080fd5b50610466613162565b600e60209081526000928352604080842090915290825290205481565b60145481565b600180548101908190556005546000919073ffffffffffffffffffffffffffffffffffffffff16610de757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f53776170733a205661756c74206973206e6f7420646566696e65640000000000604482015290519081900360640190fd5b6003543414610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53776170733a204e6f7420656e6f756768206665650000000000000000000000604482015290519081900360640190fd5b60045460405173ffffffffffffffffffffffffffffffffffffffff909116903480156108fc02916000818181858888f19350505050158015610e9d573d6000803e3d6000fd5b50610ea733612b2f565b60008181526007602052604090205490925073ffffffffffffffffffffffffffffffffffffffff1615610f3b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f53776170733a204f7264657220616c7265616479206578697374730000000000604482015290519081900360640190fd5b8b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff161415610fc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061467a6029913960400191505060405180910390fd5b60008b11611019576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806148826022913960400191505060405180910390fd5b60008a11611072576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806147876023913960400191505060405180910390fd5b4289116110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806146526028913960400191505060405180910390fd5b6127106110e26014548661317e90919063ffffffff16565b1115611139576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806146cf6030913960400191505060405180910390fd5b6127106111516015548561317e90919063ffffffff16565b11156111a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806148016031913960400191505060405180910390fd5b336007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c6008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b6009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600a6000848152602001908152602001600020819055508a600d600084815260200190815260200160002060008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555089600d600084815260200190815260200160002060008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550876006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866011600084815260200190815260200160002060008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856011600084815260200190815260200160002060008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461162c57601260008381526020019081526020016000208590806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050836013600084815260200190815260200160002060008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550826013600084815260200190815260200160002060008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60165473ffffffffffffffffffffffffffffffffffffffff16156118505760126000838152602001908152602001600020601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506014546013600084815260200190815260200160002060008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506015546013600084815260200190815260200160002060008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b7f0d998659c3775ddb3ef2b79566999bcdf638da35541a76893a0f394962fd4d6882338f8f8f8f8f8f8f8f8f8f8f604051808e81526020018d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018981526020018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019d505050505050505050505050505060405180910390a160015481146119d157600080fd5b509b9a5050505050505050505050565b600b6020526000908152604090205460ff1681565b60096020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020526000908152604090205481565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60165473ffffffffffffffffffffffffffffffffffffffff1681565b6000818152600f60209081526040808320600983528184205473ffffffffffffffffffffffffffffffffffffffff168452825291829020805483518184028101840190945280845260609392830182828015611b0657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611adb575b50505050509050919050565b611b1a612339565b611b2357600080fd5b600391909155600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b600180548101908190558282611ba2828233613197565b611bf7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806148326021913960400191505060405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16611c7b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f53776170733a205661756c74206973206e6f7420646566696e65640000000000604482015290519081900360640190fd5b600085815260076020526040902054859073ffffffffffffffffffffffffffffffffffffffff16611d0d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f53776170733a204f7264657220646f65736e2774206578697374000000000000604482015290519081900360640190fd5b6000868152600c602052604090205460ff1615611d8b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f53776170733a204f726465722063616e63656c6c656400000000000000000000604482015290519081900360640190fd5b6000868152600b602052604090205460ff1615611e0957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f53776170733a20416c7265616479207377617070656400000000000000000000604482015290519081900360640190fd5b600086815260106020908152604080832073ffffffffffffffffffffffffffffffffffffffff891684528252808320338085529252909120548015611e8557600088815260106020908152604080832073ffffffffffffffffffffffffffffffffffffffff808c16855290835281842090861684529091528120555b6000888152600f6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b1684529091529020611ebe90836131d6565b8015611fbb576000888152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b168452909152902054611f04908263ffffffff6133c816565b6000898152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff808d16808652919093528184209490945560055481517fd9caed120000000000000000000000000000000000000000000000000000000081526004810195909552868316602486015260448501869052905191169263d9caed1292606480830193919282900301818387803b158015611fa257600080fd5b505af1158015611fb6573d6000803e3d6000fd5b505050505b6040805189815273ffffffffffffffffffffffffffffffffffffffff808a1660208301528416818301526060810183905290517f5b2a5a92e7e0aa7bcf044d10a942ae5f1213049cacda790715f50bb32f503fa79181900360800190a15050505050600154811461202b57600080fd5b505050565b612038612339565b61204157600080fd5b6016546040805173ffffffffffffffffffffffffffffffffffffffff9283168152918316602083015280517f5bb2c7f2a982b5b30825bc7af677a2b5df7c980bbc3791bc2e96fac17abe0bd09281900390910190a1601680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000908152600e60209081526040808320600983528184205473ffffffffffffffffffffffffffffffffffffffff16845290915290205490565b600d60209081526000928352604080842090915290825290205481565b61213c612339565b61214557600080fd5b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60035481565b6000818152600d60209081526040808320600983528184205473ffffffffffffffffffffffffffffffffffffffff1680855290835281842054948452600e83528184209084529091529020541490565b60025481565b6121f0612339565b6121f957600080fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60155481565b6012602052816000526040600020818154811061228757fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b600f60205282600052604060002060205281600052604060002081815481106122d557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16925083915050565b601160209081526000928352604080842090915290825290205481565b60005473ffffffffffffffffffffffffffffffffffffffff165b90565b60005473ffffffffffffffffffffffffffffffffffffffff16331490565b600c6020526000908152604090205460ff1681565b612374612339565b61237d57600080fd5b6127108211156123d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806146a3602c913960400191505060405180910390fd5b612710811115612433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180614731602d913960400191505060405180910390fd5b60145460155460408051928352602083019190915281810184905260608201839052517f5c83ec202c5fd41a4f89566824a6dc43ac542cd5845a645749e60277c2a81ac29181900360800190a1601491909155601555565b6000818152600860205260408120546124ba9073ffffffffffffffffffffffffffffffffffffffff16836133dd565b92915050565b6000908152600d60209081526040808320600883528184205473ffffffffffffffffffffffffffffffffffffffff16845290915290205490565b6000818152600f60209081526040808320600883528184205473ffffffffffffffffffffffffffffffffffffffff168452825291829020805483518184028101840190945280845260609392830182828015611b065760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611adb5750505050509050919050565b6000908152600e60209081526040808320600883528184205473ffffffffffffffffffffffffffffffffffffffff16845290915290205490565b50505050565b601360209081526000938452604080852082529284528284209052825290205481565b6000908152600d60209081526040808320600983528184205473ffffffffffffffffffffffffffffffffffffffff16845290915290205490565b60018054810190819055600082815260076020526040902054829073ffffffffffffffffffffffffffffffffffffffff1633146126d157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f53776170733a20416c6c6f776564206f6e6c7920666f72206f776e6572000000604482015290519081900360640190fd5b60055473ffffffffffffffffffffffffffffffffffffffff1661275557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f53776170733a205661756c74206973206e6f7420646566696e65640000000000604482015290519081900360640190fd5b600083815260076020526040902054839073ffffffffffffffffffffffffffffffffffffffff166127e757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f53776170733a204f7264657220646f65736e2774206578697374000000000000604482015290519081900360640190fd5b6000848152600c602052604090205460ff161561286557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f53776170733a20416c72656164792063616e63656c6c65640000000000000000604482015290519081900360640190fd5b6000848152600b602052604090205460ff16156128e357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f53776170733a20416c7265616479207377617070656400000000000000000000604482015290519081900360640190fd5b6128eb6145f6565b506040805180820182526000868152600860209081528382205473ffffffffffffffffffffffffffffffffffffffff9081168452888352600982529382205490931692820192909252905b6002811015612aad57600082826002811061294d57fe5b6020020151905060005b6000888152600f6020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902054811015612aa3576000888152600f6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281208054839081106129c957fe5b60009182526020808320909101548b835260108252604080842073ffffffffffffffffffffffffffffffffffffffff888116808752918552828620938116808752939094528185205460055483517fd9caed1200000000000000000000000000000000000000000000000000000000815260048101939093526024830185905260448301829052925193965094919093169263d9caed12926064808301939282900301818387803b158015612a7d57600080fd5b505af1158015612a91573d6000803e3d6000fd5b50506001909401935061295792505050565b5050600101612936565b506000858152600c602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815187815291517f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d9281900390910190a15050506001548114612b2b57600080fd5b5050565b6c0100000000000000000000000002426bffffffffffffffffffffffff161790565b6000918252601060209081526040808420600883528185205473ffffffffffffffffffffffffffffffffffffffff90811686529083528185209316845291905290205490565b601060209081526000938452604080852082529284528284209052825290205481565b6000818152600d60209081526040808320600883528184205473ffffffffffffffffffffffffffffffffffffffff1680855290835281842054948452600e83528184209084529091529020541490565b6000918252601060209081526040808420600983528185205473ffffffffffffffffffffffffffffffffffffffff90811686529083528185209316845291905290205490565b6001805481019081905560055473ffffffffffffffffffffffffffffffffffffffff16612cde57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f53776170733a205661756c74206973206e6f7420646566696e65640000000000604482015290519081900360640190fd5b600084815260076020526040902054849073ffffffffffffffffffffffffffffffffffffffff16612d7057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f53776170733a204f7264657220646f65736e2774206578697374000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8416612e2f57823414612de3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806147aa602b913960400191505060405180910390fd5b60055460405173ffffffffffffffffffffffffffffffffffffffff909116903480156108fc02916000818181858888f19350505050158015612e29573d6000803e3d6000fd5b50613034565b3415612e9c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53776170733a2050617961626c65206e6f7420616c6c6f776564206865726500604482015290519081900360640190fd5b604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152905160009173ffffffffffffffffffffffffffffffffffffffff87169163dd62ed3e91604480820192602092909190829003018186803b158015612f1257600080fd5b505afa158015612f26573d6000803e3d6000fd5b505050506040513d6020811015612f3c57600080fd5b5051905080841115612f99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614853602f913960400191505060405180910390fd5b600554604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9283166024820152604481018790529051918716916323b872dd9160648082019260009290919082900301818387803b15801561301a57600080fd5b505af115801561302e573d6000803e3d6000fd5b50505050505b6130408585338661347f565b5060015481146125d057600080fd5b60086020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b61307f612339565b61308857600080fd5b61309181613c3f565b50565b6000818152600960205260408120546124ba9073ffffffffffffffffffffffffffffffffffffffff16836133dd565b600081815260126020908152604091829020805483518184028101840190945280845260609392830182828015611b065760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611adb5750505050509050919050565b60076020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60008282018381101561319057600080fd5b9392505050565b600092835260106020908152604080852073ffffffffffffffffffffffffffffffffffffffff9485168652825280852092909316845252902054151590565b81547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160005b83547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01811015613283578273ffffffffffffffffffffffffffffffffffffffff1684828154811061324b57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561327b57809150613283565b6001016131fd565b50825483907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106132b457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168382815481106132eb57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055825483907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061336957fe5b600091825260209091200180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905582546125d0847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301614614565b6000828211156133d757600080fd5b50900390565b600080805b60008481526012602052604090205481101561347757600084815260126020526040812080548390811061341257fe5b600091825260208083209091015487835260138252604080842073ffffffffffffffffffffffffffffffffffffffff8b8116865290845281852092168085529190925291205490915061346b848263ffffffff61317e16565b935050506001016133e2565b509392505050565b600084815260086020526040902054819073ffffffffffffffffffffffffffffffffffffffff858116911614806134dc575060008581526009602052604090205473ffffffffffffffffffffffffffffffffffffffff8581169116145b613531576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806146ff6032913960400191505060405180910390fd5b6000858152600d6020908152604080832073ffffffffffffffffffffffffffffffffffffffff881680855290835281842054898552600e8452828520918552925290912054106135e257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f53776170733a204c696d697420616c7265616479207265616368656400000000604482015290519081900360640190fd5b6000858152600a602052604090205442111561365f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f53776170733a20436f6e74726163742065787069726564000000000000000000604482015290519081900360640190fd5b60008581526008602052604090205473ffffffffffffffffffffffffffffffffffffffff85811691161480156136b8575060008581526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1615155b156137395760008581526006602052604090205473ffffffffffffffffffffffffffffffffffffffff163314613739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061475e6029913960400191505060405180910390fd5b600085815260116020908152604080832073ffffffffffffffffffffffffffffffffffffffff881680855290835281842054898552600e84528285208286528452828520548a8652600d85528386209286529190935292205490916137a4919063ffffffff6133c816565b111561383257600085815260116020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452909152902054821015613832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806147d5602c913960400191505060405180910390fd5b61383d858585613197565b61394f576002546000868152600f6020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168452909152902054106138e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53776170733a20546f6f206d616e7920696e766573746f727300000000000000604482015290519081900360640190fd5b6000858152600f6020908152604080832073ffffffffffffffffffffffffffffffffffffffff88811685529083529083208054600181018255908452919092200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169185169190911790555b6000858152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915281205461398f908363ffffffff61317e16565b6000878152600d6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a168452909152902054909150811115613abe576000868152600d6020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168452909152812054613a0a90839063ffffffff6133c816565b600554604080517fd9caed1200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015260448201859052915193945091169163d9caed129160648082019260009290919082900301818387803b158015613a8f57600080fd5b505af1158015613aa3573d6000803e3d6000fd5b50505050613aba81846133c890919063ffffffff16565b9250505b600086815260106020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a1685529083528184209088168452909152902054613b0a908363ffffffff61317e16565b600087815260106020908152604080832073ffffffffffffffffffffffffffffffffffffffff808b16808652918452828520908a168552835281842094909455898352600e82528083209383529290522054613b6c908363ffffffff61317e16565b6000878152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff808b16808652918452828520959095558a8452601083528184208185528352818420948916808552948352928190205481518b8152928301939093528181019390935260608101859052608081019190915290517f52d53f1a8b77300a7e949e8404b5b690925c03bbb3bc329b5a05f70abc2a24a09181900360a00190a1613c1986612bba565b8015613c295750613c2986612192565b15613c3757613c3786613cec565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116613c5f57600080fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000818152600b602052604090205460ff1615613d6a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f53776170733a20416c7265616479207377617070656400000000000000000000604482015290519081900360640190fd5b6000818152600c602052604090205460ff1615613de857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f53776170733a20416c72656164792063616e63656c6c65640000000000000000604482015290519081900360640190fd5b613df181612bba565b613e5c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f53776170733a204261736520746f6b656e73206e6f742066696c6c6564000000604482015290519081900360640190fd5b613e6581612192565b613ed057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53776170733a2051756f746520746f6b656e73206e6f742066696c6c65640000604482015290519081900360640190fd5b6000818152600a6020526040902054421115613f4d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f436f6e7472616374206578706972656400000000000000000000000000000000604482015290519081900360640190fd5b600081815260086020908152604080832054600990925290912054613f8d91839173ffffffffffffffffffffffffffffffffffffffff9182169116614045565b600081815260096020908152604080832054600890925290912054613fcd91839173ffffffffffffffffffffffffffffffffffffffff9182169116614045565b6000818152600b602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558151838152339181019190915281517f44718dd9f1347cc728de75a7e465c3c52e22588f75b06eac4fe4b0b2b7e061db929181900390910190a150565b6000805b6000858152601260205260409020548110156140de57600085815260126020526040812080548390811061407957fe5b600091825260208083209091015488835260138252604080842073ffffffffffffffffffffffffffffffffffffffff89811686529084528185209216808552919092529120549091506140d2848263ffffffff61317e16565b93505050600101614049565b506000848152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120546141339061271090614127908563ffffffff6145ad16565b9063ffffffff6145d416565b6000868152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915281205491925090614177908363ffffffff6133c816565b90508060005b6000888152600f6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b1684529091529020548110156143bd576000888152600f6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915281208054839081106141ef57fe5b60009182526020808320909101548b8352600f8252604080842073ffffffffffffffffffffffffffffffffffffffff8d8116865293528320549116925060018401141561423d5750826142ba565b60008a8152600e6020908152604080832073ffffffffffffffffffffffffffffffffffffffff808e16808652918452828520548f8652601085528386209286529184528285209087168552909252909120546142a382614127838a63ffffffff6145ad16565b92506142b5868463ffffffff6133c816565b955050505b600554604080517fd9caed1200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528581166024830152604482018590529151919092169163d9caed1291606480830192600092919082900301818387803b15801561433d57600080fd5b505af1158015614351573d6000803e3d6000fd5b5050604080518d815273ffffffffffffffffffffffffffffffffffffffff808d1660208301528616818301526060810185905290517f6e71f3d02fa39a6ecb3f8ab11cce4a0aa3959aa8909de48e2ac9be7e135721ee9350908190036080019150a1505060010161417d565b5082905060005b6000888152601260205260409020548110156145a35760008881526012602052604081208054839081106143f457fe5b60009182526020808320909101548b83526012909152604082205473ffffffffffffffffffffffffffffffffffffffff909116925060018401141561443a5750826144a0565b60008a815260136020908152604080832073ffffffffffffffffffffffffffffffffffffffff808d168552908352818420908616845290915290205461448a88614127898463ffffffff6145ad16565b915061449c858363ffffffff6133c816565b9450505b600554604080517fd9caed1200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528581166024830152604482018590529151919092169163d9caed1291606480830192600092919082900301818387803b15801561452357600080fd5b505af1158015614537573d6000803e3d6000fd5b5050604080518d815273ffffffffffffffffffffffffffffffffffffffff808d1660208301528616818301526060810185905290517f9362c2051dce15f5681edba6c4556a3f982e118cd58fc7e1ef64e6fd8988e54e9350908190036080019150a150506001016143c4565b5050505050505050565b6000826145bc575060006124ba565b828202828482816145c957fe5b041461319057600080fd5b60008082116145e257600080fd5b60008284816145ed57fe5b04949350505050565b60405180604001604052806002906020820280388339509192915050565b81548183558181111561202b5760008381526020902061202b91810190830161233691905b8082111561464d5760008155600101614639565b509056fe53776170733a2045787069726174696f6e2074696d65206d75737420626520696e2066757475726553776170733a2045786368616e67656420746f6b656e73206d75737420626520646966666572656e7453776170733a20426173652070657263656e742073686f756c64206265206c657373207468616e203130302553776170733a20426173652070657263656e742073756d2073686f756c64206265206c657373207468616e203130302553776170733a20596f752063616e206465706f736974206f6e6c792062617365206f722071756f74652063757272656e637953776170733a2051756f74652070657263656e742073686f756c64206265206c657373207468616e203130302553776170733a20416c6c6f776564206f6e6c7920666f7220737065636966696564206164647265737353776170733a2051756f7465206c696d6974206d75737420626520706f73697469766553776170733a2050617961626c652076616c75652073686f756c6420626520657175616c732076616c756553776170733a2053686f756c64206e6f74206265206c657373207468616e206d696e696d756d2076616c756553776170733a2051756f74652070657263656e742073756d2073686f756c64206265206c657373207468616e203130302553776170733a20416c6c6f776564206f6e6c7920666f7220696e766573746f727353776170733a20416c6c6f77616e63652073686f756c64206265206e6f74206c657373207468616e20616d6f756e7453776170733a2042617365206c696d6974206d75737420626520706f736974697665a265627a7a72315820e10c6daa07585ce5e81290ff0caa6d495cae5549a8b1859b19f643c0caafa06964736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000354a6ba7a180000000000000000000000000007367409e0c12b2b7caa5c990e11a75e0d86580fc
-----Decoded View---------------
Arg [0] : _feeAmount (uint256): 15000000000000000
Arg [1] : _feeAddress (address): 0x7367409E0c12b2B7cAa5c990E11A75E0D86580fc
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000354a6ba7a18000
Arg [1] : 0000000000000000000000007367409e0c12b2b7caa5c990e11a75e0d86580fc
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.