Polygon Sponsored slots available. Book your slot here!
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 29,688 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Convert | 68855190 | 44 mins ago | IN | 0 POL | 0.04589572 | ||||
Convert | 68854631 | 1 hr ago | IN | 0 POL | 0.04656688 | ||||
Convert | 68853466 | 1 hr ago | IN | 0 POL | 0.0513991 | ||||
Convert | 68853121 | 1 hr ago | IN | 0 POL | 0.04579889 | ||||
Convert | 68850767 | 3 hrs ago | IN | 0 POL | 0.04401784 | ||||
Convert | 68850764 | 3 hrs ago | IN | 0 POL | 0.01218663 | ||||
Convert | 68850595 | 3 hrs ago | IN | 0 POL | 0.1048709 | ||||
Convert | 68850091 | 3 hrs ago | IN | 0 POL | 0.05061787 | ||||
Convert | 68848918 | 4 hrs ago | IN | 0 POL | 0.06272966 | ||||
Convert | 68848410 | 4 hrs ago | IN | 0 POL | 0.05086067 | ||||
Convert | 68847540 | 5 hrs ago | IN | 0 POL | 0.06648314 | ||||
Convert | 68847457 | 5 hrs ago | IN | 0 POL | 0.0687125 | ||||
Convert | 68847061 | 5 hrs ago | IN | 0 POL | 0.07014883 | ||||
Convert | 68846928 | 5 hrs ago | IN | 0 POL | 0.10374025 | ||||
Convert | 68845122 | 6 hrs ago | IN | 0 POL | 0.05935587 | ||||
Convert | 68844927 | 6 hrs ago | IN | 0 POL | 0.09225706 | ||||
Convert | 68844629 | 7 hrs ago | IN | 0 POL | 0.08496987 | ||||
Convert | 68844590 | 7 hrs ago | IN | 0 POL | 0.06968188 | ||||
Convert | 68843368 | 7 hrs ago | IN | 0 POL | 0.07035201 | ||||
Convert | 68843042 | 7 hrs ago | IN | 0 POL | 0.05734208 | ||||
Convert | 68842966 | 8 hrs ago | IN | 0 POL | 0.05240281 | ||||
Convert | 68842512 | 8 hrs ago | IN | 0 POL | 0.19068957 | ||||
Convert | 68841146 | 9 hrs ago | IN | 0 POL | 0.06931811 | ||||
Convert | 68839560 | 10 hrs ago | IN | 0 POL | 0.15522531 | ||||
Convert | 68837812 | 11 hrs ago | IN | 0 POL | 0.04586696 |
Loading...
Loading
Contract Name:
QuickConverter
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2024-10-01 */ /** *Submitted for verification at polygonscan.com on 2024-02-06 */ // File: contracts/libraries/SafeMath.sol pragma solidity =0.6.12; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, 'ds-math-add-overflow'); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'ds-math-sub-underflow'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow'); } function div(uint a, uint b) internal pure returns (uint256) { require(b > 0, "division by zero"); return a / b; } } // File: contracts/interfaces/IERC20.sol pragma solidity >=0.5.0; interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); } // File: contracts/libraries/SafeERC20.sol pragma solidity 0.6.12; library SafeERC20 { function safeSymbol(IERC20 token) internal view returns(string memory) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x95d89b41)); return success && data.length > 0 ? abi.decode(data, (string)) : "???"; } function safeName(IERC20 token) internal view returns(string memory) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x06fdde03)); return success && data.length > 0 ? abi.decode(data, (string)) : "???"; } function safeDecimals(IERC20 token) public view returns (uint8) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x313ce567)); return success && data.length == 32 ? abi.decode(data, (uint8)) : 18; } function safeTransfer(IERC20 token, address to, uint256 amount) internal { (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0xa9059cbb, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "SafeERC20: Transfer failed"); } function safeTransferFrom(IERC20 token, address from, uint256 amount) internal { (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0x23b872dd, from, address(this), amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "SafeERC20: TransferFrom failed"); } } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2ERC20.sol pragma solidity >=0.5.0; interface IUniswapV2ERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } pragma solidity 0.6.12; // Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol + Claimable.sol contract OwnableData { address public owner; address public pendingOwner; } contract Ownable is OwnableData { event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () internal { owner = msg.sender; emit OwnershipTransferred(address(0), msg.sender); } function transferOwnership(address newOwner, bool direct, bool renounce) public onlyOwner { if (direct) { require(newOwner != address(0) || renounce, "Ownable: zero address"); // Effects emit OwnershipTransferred(owner, newOwner); owner = newOwner; } else { pendingOwner = newOwner; } } function claimOwnership() public { address _pendingOwner = pendingOwner; require(msg.sender == _pendingOwner, "Ownable: caller != pending owner"); emit OwnershipTransferred(owner, _pendingOwner); owner = _pendingOwner; pendingOwner = address(0); } modifier onlyOwner() { require(msg.sender == owner, "Ownable: caller is not the owner"); _; } } // File: contracts/QuickConverter.sol // P1 - P3: OK pragma solidity 0.6.12; //QUICK LAIR'S CONVERTER CONTRACT. This contract converts all tokens into QUICK contract QuickConverter is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; // V1 - V5: OK IUniswapV2Factory public immutable factory; //0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32 // V1 - V5: OK address public communityAddress; // V1 - V5: OK address public constant quick = address(0xB5C064F955D8e7F38fE0460C556a72987494eE17); //0x831753dd7087cac61ab5644b308642cc1c33dc13 // V1 - V5: OK address public immutable weth; //0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619 address public treasury; //0x476307DaC3FD170166e007FCaA14F0A129721463 // V1 - V5: OK mapping(address => address) internal _bridges; // E1: OK event LogBridgeSet(address indexed token, address indexed bridge); // E1: OK event LogConvert( address indexed server, address indexed token0, address indexed token1, uint256 amount0, uint256 amount1, uint256 amountQUICK ); event TreasuryChanged(address indexed treasury); constructor( address _factory, address _communityAddress, address _weth, address _treasury ) public { factory = IUniswapV2Factory(_factory); communityAddress = _communityAddress; weth = _weth; treasury = _treasury; } // F1 - F10: OK // C1 - C24: OK function bridgeFor(address token) public view returns (address bridge) { bridge = _bridges[token]; if (bridge == address(0)) { bridge = weth; } } function changeCommunityAddress(address _communityAddress) external onlyOwner { communityAddress = _communityAddress; } // F1 - F10: OK // C1 - C24: OK function setBridge(address token, address bridge) external onlyOwner { // Checks require( token != quick && token != weth && token != bridge, "QuickConverter: Invalid bridge" ); // Effects _bridges[token] = bridge; emit LogBridgeSet(token, bridge); } function changeTreasury(address _treasury) external onlyOwner { require(_treasury != address(0), "Inavlid treasury"); treasury = _treasury; emit TreasuryChanged(treasury); } // M1 - M5: OK // C1 - C24: OK // C6: It's not a fool proof solution, but it prevents flash loans, so here it's ok to use tx.origin modifier onlyEOA() { // Try to make flash-loan exploit harder to do by only allowing externally owned addresses. require(msg.sender == tx.origin, "QuickConverter: must use EOA"); _; } // F1 - F10: OK // F3: _convert is separate to save gas by only checking the 'onlyEOA' modifier once in case of convertMultiple // F6: There is an exploit to add lots of QUICK to the communityAddress, run convert, then remove the QUICK again. // As the size of the DragonLair has grown, this requires large amounts of funds and isn't super profitable anymore // The onlyEOA modifier prevents this being done with a flash loan. // C1 - C24: OK function convert(address token0, address token1) external onlyEOA() { _convert(token0, token1); } // F1 - F10: OK, see convert // C1 - C24: OK // C3: Loop is under control of the caller function convertMultiple( address[] calldata token0, address[] calldata token1 ) external onlyEOA() { // TODO: This can be optimized a fair bit, but this is safer and simpler for now uint256 len = token0.length; for (uint256 i = 0; i < len; i++) { _convert(token0[i], token1[i]); } } // F1 - F10: OK // C1- C24: OK function _convert(address token0, address token1) internal { // Interactions // S1 - S4: OK IUniswapV2Pair pair = IUniswapV2Pair(factory.getPair(token0, token1)); require(address(pair) != address(0), "QuickConverter: Invalid pair"); // balanceOf: S1 - S4: OK // transfer: X1 - X5: OK IERC20(address(pair)).safeTransfer( address(pair), pair.balanceOf(address(this)) ); // X1 - X5: OK (uint256 amount0, uint256 amount1) = pair.burn(address(this)); if (token0 != pair.token0()) { (amount0, amount1) = (amount1, amount0); } if (amount0 > 0 || amount1 > 0) { _convertStep(token0, token1, amount0, amount1); uint256 amountQUICK = IERC20(quick).balanceOf(address(this)); uint256 dragonLairShare = amountQUICK.mul(80).div(100); uint256 treasuryShare = amountQUICK.sub(dragonLairShare); IERC20(quick).safeTransfer(communityAddress, dragonLairShare); IERC20(quick).safeTransfer(treasury, treasuryShare); emit LogConvert( msg.sender, token0, token1, amount0, amount1, amountQUICK ); } } // F1 - F10: OK // C1 - C24: OK // All _swap, _toQUICK, _convertStep: X1 - X5: OK function _convertStep( address token0, address token1, uint256 amount0, uint256 amount1 ) internal returns (uint256 quickOut) { // Interactions if (token0 == token1) { uint256 amount = amount0.add(amount1); if (token0 == quick) { quickOut = amount; } else if (token0 == weth) { quickOut = _toQUICK(weth, amount); } else { address bridge = bridgeFor(token0); amount = _swap(token0, bridge, amount, address(this)); quickOut = _convertStep(bridge, bridge, amount, 0); } } else if (token0 == quick) { // eg. QUICK - ETH quickOut = _toQUICK(token1, amount1).add(amount0); } else if (token1 == quick) { // eg. USDT - QUICK quickOut = _toQUICK(token0, amount0).add(amount1); } else if (token0 == weth) { // eg. ETH - USDC quickOut = _toQUICK( weth, _swap(token1, weth, amount1, address(this)).add(amount0) ); } else if (token1 == weth) { // eg. USDT - ETH quickOut = _toQUICK( weth, _swap(token0, weth, amount0, address(this)).add(amount1) ); } else { // eg. MIC - USDT address bridge0 = bridgeFor(token0); address bridge1 = bridgeFor(token1); if (bridge0 == token1) { // eg. MIC - USDT - and bridgeFor(MIC) = USDT quickOut = _convertStep( bridge0, token1, _swap(token0, bridge0, amount0, address(this)), amount1 ); } else if (bridge1 == token0) { // eg. WBTC - DSD - and bridgeFor(DSD) = WBTC quickOut = _convertStep( token0, bridge1, amount0, _swap(token1, bridge1, amount1, address(this)) ); } else { quickOut = _convertStep( bridge0, bridge1, // eg. USDT - DSD - and bridgeFor(DSD) = WBTC _swap(token0, bridge0, amount0, address(this)), _swap(token1, bridge1, amount1, address(this)) ); } } } // F1 - F10: OK // C1 - C24: OK // All safeTransfer, swap: X1 - X5: OK function _swap( address fromToken, address toToken, uint256 amountIn, address to ) internal returns (uint256 amountOut) { // Checks // X1 - X5: OK IUniswapV2Pair pair = IUniswapV2Pair(factory.getPair(fromToken, toToken)); require(address(pair) != address(0), "QuickConverter: Cannot convert"); IERC20(fromToken).safeTransfer(address(pair), amountIn); // Interactions // X1 - X5: OK (uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); if (fromToken == pair.token0()) { uint256 amountInput = IERC20(fromToken).balanceOf(address(pair)).sub(reserve0); uint256 amountInWithFee = amountInput.mul(997); amountOut = amountInWithFee.mul(reserve1) / reserve0.mul(1000).add(amountInWithFee); pair.swap(0, amountOut, to, new bytes(0)); // TODO: Add maximum slippage? } else { uint256 amountInput = IERC20(fromToken).balanceOf(address(pair)).sub(reserve1); uint256 amountInWithFee = amountInput.mul(997); amountOut = amountInWithFee.mul(reserve0) / reserve1.mul(1000).add(amountInWithFee); pair.swap(amountOut, 0, to, new bytes(0)); // TODO: Add maximum slippage? } } // F1 - F10: OK // C1 - C24: OK function _toQUICK(address token, uint256 amountIn) internal returns (uint256 amountOut) { // X1 - X5: OK amountOut = _swap(token, quick, amountIn, address(this)); } function recoverERC20(address token, address receiver) external onlyOwner { require(receiver != address(0), "Invalid address"); uint256 balance = IERC20(token).balanceOf(address(this)); IERC20(token).transfer(receiver, balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_communityAddress","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"bridge","type":"address"}],"name":"LogBridgeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"server","type":"address"},{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountQUICK","type":"uint256"}],"name":"LogConvert","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":true,"internalType":"address","name":"treasury","type":"address"}],"name":"TreasuryChanged","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"bridgeFor","outputs":[{"internalType":"address","name":"bridge","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_communityAddress","type":"address"}],"name":"changeCommunityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"changeTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"communityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"name":"convert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"token0","type":"address[]"},{"internalType":"address[]","name":"token1","type":"address[]"}],"name":"convertMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quick","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"bridge","type":"address"}],"name":"setBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"bool","name":"direct","type":"bool"},{"internalType":"bool","name":"renounce","type":"bool"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c060405234801561001057600080fd5b50604051612fd2380380612fd28339818101604052608081101561003357600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505060805160601c60a05160601c612d7c61025660003980610964528061108c52806112fc5280611efe5280611f55528061208c52806120e3528061210c528061214e52806121a552806121ce5250806115e1528061164552806125545250612d7c6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638da5cb5b11610097578063bd1b820c11610066578063bd1b820c146104c7578063c45a01551461052b578063e30c39781461055f578063fdd3a8791461059357610100565b80638da5cb5b1461037d5780639d22ae8c146103b1578063a761a93914610415578063b14f2a391461048357610100565b806361d027b3116100d357806361d027b31461026d57806374bf7908146102a157806386e476dd146102e5578063886f039a1461031957610100565b8063078dfbe714610105578063303e6aa4146101615780633fc8cef31461022f5780634e71e0c814610263575b600080fd5b61015f6004803603606081101561011b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291908035151590602001909291905050506105c7565b005b61022d6004803603604081101561017757600080fd5b810190808035906020019064010000000081111561019457600080fd5b8201836020820111156101a657600080fd5b803590602001918460208302840111640100000000831117156101c857600080fd5b9091929391929390803590602001906401000000008111156101e957600080fd5b8201836020820111156101fb57600080fd5b8035906020019184602083028401116401000000008311171561021d57600080fd5b909192939192939050505061083f565b005b610237610962565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61026b610986565b005b610275610b4d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102e3600480360360208110156102b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b73565b005b6102ed610c78565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61037b6004803603604081101561032f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c9e565b005b610385610f5a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610413600480360360408110156103c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f7e565b005b6104576004803603602081101561042b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611261565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104c56004803603602081101561049957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611323565b005b610529600480360360408110156104dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611530565b005b6105336115df565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610567611603565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61059b611629565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610688576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81156107f857600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415806106c75750805b610739576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4f776e61626c653a207a65726f2061646472657373000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061083a565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f517569636b436f6e7665727465723a206d7573742075736520454f410000000081525060200191505060405180910390fd5b600084849050905060005b8181101561095a5761094d86868381811061090257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1685858481811061092b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16611641565b80806001019150506108eb565b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e657281525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d5f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e6b57600080fd5b505afa158015610e7f573d6000803e3d6000fd5b505050506040513d6020811015610e9557600080fd5b810190808051906020019092919050505090508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610f1957600080fd5b505af1158015610f2d573d6000803e3d6000fd5b505050506040513d6020811015610f4357600080fd5b810190808051906020019092919050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461103f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b73b5c064f955d8e7f38fe0460c556a72987494ee1773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156110db57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561111357508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f517569636b436f6e7665727465723a20496e76616c696420627269646765000081525060200191505060405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f2e103aa707acc565f9a1547341914802b2bfe977fd79c595209f248ae4b0061360405160405180910390a35050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561131e577f000000000000000000000000000000000000000000000000000000000000000090505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611487576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e61766c69642074726561737572790000000000000000000000000000000081525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fc714d22a2f08b695f81e7c707058db484aa5b4d6b4c9fd64beb10fe85832f60860405160405180910390a250565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f517569636b436f6e7665727465723a206d7573742075736520454f410000000081525060200191505060405180910390fd5b6115db8282611641565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73b5c064f955d8e7f38fe0460c556a72987494ee1781565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e6a4390584846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156116e857600080fd5b505afa1580156116fc573d6000803e3d6000fd5b505050506040513d602081101561171257600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f517569636b436f6e7665727465723a20496e76616c696420706169720000000081525060200191505060405180910390fd5b611894818273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561183357600080fd5b505afa158015611847573d6000803e3d6000fd5b505050506040513d602081101561185d57600080fd5b81019080805190602001909291905050508373ffffffffffffffffffffffffffffffffffffffff16611c7c9092919063ffffffff16565b6000808273ffffffffffffffffffffffffffffffffffffffff166389afcb44306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b1580156118ff57600080fd5b505af1158015611913573d6000803e3d6000fd5b505050506040513d604081101561192957600080fd5b810190808051906020019092919080519060200190929190505050915091508273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561198e57600080fd5b505afa1580156119a2573d6000803e3d6000fd5b505050506040513d60208110156119b857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611a0657808280925081935050505b6000821180611a155750600081115b15611c7557611a2685858484611e5f565b50600073b5c064f955d8e7f38fe0460c556a72987494ee1773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611aa457600080fd5b505afa158015611ab8573d6000803e3d6000fd5b505050506040513d6020811015611ace57600080fd5b810190808051906020019092919050505090506000611b0a6064611afc60508561230190919063ffffffff16565b61239690919063ffffffff16565b90506000611b21828461241f90919063ffffffff16565b9050611b84600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373b5c064f955d8e7f38fe0460c556a72987494ee1773ffffffffffffffffffffffffffffffffffffffff16611c7c9092919063ffffffff16565b611be5600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168273b5c064f955d8e7f38fe0460c556a72987494ee1773ffffffffffffffffffffffffffffffffffffffff16611c7c9092919063ffffffff16565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd06b1d7ed79b664d17472c6f6997b929f1abe463ccccb4e5b6a0038f2f730c1588888860405180848152602001838152602001828152602001935050505060405180910390a45050505b5050505050565b600060608473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310611d3f5780518252602082019150602081019050602083039250611d1c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611da1576040519150601f19603f3d011682016040523d82523d6000602084013e611da6565b606091505b5091509150818015611de65750600081511480611de55750808060200190516020811015611dd357600080fd5b81019080805190602001909291905050505b5b611e58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5361666545524332303a205472616e73666572206661696c656400000000000081525060200191505060405180910390fd5b5050505050565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611fb4576000611eaa83856124a290919063ffffffff16565b905073b5c064f955d8e7f38fe0460c556a72987494ee1773ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611efc57809150611fae565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611f8157611f7a7f000000000000000000000000000000000000000000000000000000000000000082612525565b9150611fad565b6000611f8c87611261565b9050611f9a8782843061254f565b9150611fa98182846000611e5f565b9250505b5b506122f9565b73b5c064f955d8e7f38fe0460c556a72987494ee1773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561201f576120188361200a8685612525565b6124a290919063ffffffff16565b90506122f8565b73b5c064f955d8e7f38fe0460c556a72987494ee1773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561208a57612083826120758786612525565b6124a290919063ffffffff16565b90506122f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561214c576121457f000000000000000000000000000000000000000000000000000000000000000061214085612132887f0000000000000000000000000000000000000000000000000000000000000000883061254f565b6124a290919063ffffffff16565b612525565b90506122f6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561220e576122077f0000000000000000000000000000000000000000000000000000000000000000612202846121f4897f0000000000000000000000000000000000000000000000000000000000000000893061254f565b6124a290919063ffffffff16565b612525565b90506122f5565b600061221986611261565b9050600061222686611261565b90508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227a57612273828761226d8a868a3061254f565b87611e5f565b92506122f2565b8673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122cc576122c58782876122c08a868a3061254f565b611e5f565b92506122f1565b6122ee82826122dd8a868a3061254f565b6122e98a868a3061254f565b611e5f565b92505b5b50505b5b5b5b5b949350505050565b60008082148061231e575082828385029250828161231b57fe5b04145b612390576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b600080821161240d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6469766973696f6e206279207a65726f0000000000000000000000000000000081525060200191505060405180910390fd5b81838161241657fe5b04905092915050565b600082828403915081111561249c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b600082828401915081101561251f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b60006125478373b5c064f955d8e7f38fe0460c556a72987494ee17843061254f565b905092915050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e6a4390587876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156125f757600080fd5b505afa15801561260b573d6000803e3d6000fd5b505050506040513d602081101561262157600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f517569636b436f6e7665727465723a2043616e6e6f7420636f6e76657274000081525060200191505060405180910390fd5b61270281858873ffffffffffffffffffffffffffffffffffffffff16611c7c9092919063ffffffff16565b6000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561274b57600080fd5b505afa15801561275f573d6000803e3d6000fd5b505050506040513d606081101561277557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561280557600080fd5b505afa158015612819573d6000803e3d6000fd5b505050506040513d602081101561282f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415612ad9576000612929838a73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156128e057600080fd5b505afa1580156128f4573d6000803e3d6000fd5b505050506040513d602081101561290a57600080fd5b810190808051906020019092919050505061241f90919063ffffffff16565b905060006129426103e58361230190919063ffffffff16565b905061296b8161295d6103e88761230190919063ffffffff16565b6124a290919063ffffffff16565b61297e848361230190919063ffffffff16565b8161298557fe5b0495508473ffffffffffffffffffffffffffffffffffffffff1663022c0d9f6000888a600067ffffffffffffffff811180156129c057600080fd5b506040519080825280601f01601f1916602001820160405280156129f35781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612a6b578082015181840152602081019050612a50565b50505050905090810190601f168015612a985780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015612aba57600080fd5b505af1158015612ace573d6000803e3d6000fd5b505050505050612d3b565b6000612b8f828a73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612b4657600080fd5b505afa158015612b5a573d6000803e3d6000fd5b505050506040513d6020811015612b7057600080fd5b810190808051906020019092919050505061241f90919063ffffffff16565b90506000612ba86103e58361230190919063ffffffff16565b9050612bd181612bc36103e88661230190919063ffffffff16565b6124a290919063ffffffff16565b612be4858361230190919063ffffffff16565b81612beb57fe5b0495508473ffffffffffffffffffffffffffffffffffffffff1663022c0d9f8760008a600067ffffffffffffffff81118015612c2657600080fd5b506040519080825280601f01601f191660200182016040528015612c595781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612cd1578082015181840152602081019050612cb6565b50505050905090810190601f168015612cfe5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015612d2057600080fd5b505af1158015612d34573d6000803e3d6000fd5b5050505050505b50505094935050505056fea2646970667358221220e030325b43ad50d7d80cf3e65f202416ad7e243c282a1749954348165d2a5a7b64736f6c634300060c00330000000000000000000000005757371414417b8c6caad45baef941abc7d3ab32000000000000000000000000000000000000000000000000000000000000dead0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127000000000000000000000000016899a9b449bb8608af81846d0336b7ba58b7504
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101005760003560e01c80638da5cb5b11610097578063bd1b820c11610066578063bd1b820c146104c7578063c45a01551461052b578063e30c39781461055f578063fdd3a8791461059357610100565b80638da5cb5b1461037d5780639d22ae8c146103b1578063a761a93914610415578063b14f2a391461048357610100565b806361d027b3116100d357806361d027b31461026d57806374bf7908146102a157806386e476dd146102e5578063886f039a1461031957610100565b8063078dfbe714610105578063303e6aa4146101615780633fc8cef31461022f5780634e71e0c814610263575b600080fd5b61015f6004803603606081101561011b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291908035151590602001909291905050506105c7565b005b61022d6004803603604081101561017757600080fd5b810190808035906020019064010000000081111561019457600080fd5b8201836020820111156101a657600080fd5b803590602001918460208302840111640100000000831117156101c857600080fd5b9091929391929390803590602001906401000000008111156101e957600080fd5b8201836020820111156101fb57600080fd5b8035906020019184602083028401116401000000008311171561021d57600080fd5b909192939192939050505061083f565b005b610237610962565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61026b610986565b005b610275610b4d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102e3600480360360208110156102b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b73565b005b6102ed610c78565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61037b6004803603604081101561032f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c9e565b005b610385610f5a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610413600480360360408110156103c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f7e565b005b6104576004803603602081101561042b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611261565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104c56004803603602081101561049957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611323565b005b610529600480360360408110156104dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611530565b005b6105336115df565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610567611603565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61059b611629565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610688576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81156107f857600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415806106c75750805b610739576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4f776e61626c653a207a65726f2061646472657373000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061083a565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f517569636b436f6e7665727465723a206d7573742075736520454f410000000081525060200191505060405180910390fd5b600084849050905060005b8181101561095a5761094d86868381811061090257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1685858481811061092b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16611641565b80806001019150506108eb565b505050505050565b7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127081565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e657281525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d5f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e6b57600080fd5b505afa158015610e7f573d6000803e3d6000fd5b505050506040513d6020811015610e9557600080fd5b810190808051906020019092919050505090508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610f1957600080fd5b505af1158015610f2d573d6000803e3d6000fd5b505050506040513d6020811015610f4357600080fd5b810190808051906020019092919050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461103f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b73b5c064f955d8e7f38fe0460c556a72987494ee1773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156110db57507f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561111357508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f517569636b436f6e7665727465723a20496e76616c696420627269646765000081525060200191505060405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f2e103aa707acc565f9a1547341914802b2bfe977fd79c595209f248ae4b0061360405160405180910390a35050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561131e577f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127090505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611487576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e61766c69642074726561737572790000000000000000000000000000000081525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fc714d22a2f08b695f81e7c707058db484aa5b4d6b4c9fd64beb10fe85832f60860405160405180910390a250565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f517569636b436f6e7665727465723a206d7573742075736520454f410000000081525060200191505060405180910390fd5b6115db8282611641565b5050565b7f0000000000000000000000005757371414417b8c6caad45baef941abc7d3ab3281565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73b5c064f955d8e7f38fe0460c556a72987494ee1781565b60007f0000000000000000000000005757371414417b8c6caad45baef941abc7d3ab3273ffffffffffffffffffffffffffffffffffffffff1663e6a4390584846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156116e857600080fd5b505afa1580156116fc573d6000803e3d6000fd5b505050506040513d602081101561171257600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f517569636b436f6e7665727465723a20496e76616c696420706169720000000081525060200191505060405180910390fd5b611894818273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561183357600080fd5b505afa158015611847573d6000803e3d6000fd5b505050506040513d602081101561185d57600080fd5b81019080805190602001909291905050508373ffffffffffffffffffffffffffffffffffffffff16611c7c9092919063ffffffff16565b6000808273ffffffffffffffffffffffffffffffffffffffff166389afcb44306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b1580156118ff57600080fd5b505af1158015611913573d6000803e3d6000fd5b505050506040513d604081101561192957600080fd5b810190808051906020019092919080519060200190929190505050915091508273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561198e57600080fd5b505afa1580156119a2573d6000803e3d6000fd5b505050506040513d60208110156119b857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611a0657808280925081935050505b6000821180611a155750600081115b15611c7557611a2685858484611e5f565b50600073b5c064f955d8e7f38fe0460c556a72987494ee1773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611aa457600080fd5b505afa158015611ab8573d6000803e3d6000fd5b505050506040513d6020811015611ace57600080fd5b810190808051906020019092919050505090506000611b0a6064611afc60508561230190919063ffffffff16565b61239690919063ffffffff16565b90506000611b21828461241f90919063ffffffff16565b9050611b84600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373b5c064f955d8e7f38fe0460c556a72987494ee1773ffffffffffffffffffffffffffffffffffffffff16611c7c9092919063ffffffff16565b611be5600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168273b5c064f955d8e7f38fe0460c556a72987494ee1773ffffffffffffffffffffffffffffffffffffffff16611c7c9092919063ffffffff16565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd06b1d7ed79b664d17472c6f6997b929f1abe463ccccb4e5b6a0038f2f730c1588888860405180848152602001838152602001828152602001935050505060405180910390a45050505b5050505050565b600060608473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310611d3f5780518252602082019150602081019050602083039250611d1c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611da1576040519150601f19603f3d011682016040523d82523d6000602084013e611da6565b606091505b5091509150818015611de65750600081511480611de55750808060200190516020811015611dd357600080fd5b81019080805190602001909291905050505b5b611e58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5361666545524332303a205472616e73666572206661696c656400000000000081525060200191505060405180910390fd5b5050505050565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611fb4576000611eaa83856124a290919063ffffffff16565b905073b5c064f955d8e7f38fe0460c556a72987494ee1773ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611efc57809150611fae565b7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611f8157611f7a7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127082612525565b9150611fad565b6000611f8c87611261565b9050611f9a8782843061254f565b9150611fa98182846000611e5f565b9250505b5b506122f9565b73b5c064f955d8e7f38fe0460c556a72987494ee1773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561201f576120188361200a8685612525565b6124a290919063ffffffff16565b90506122f8565b73b5c064f955d8e7f38fe0460c556a72987494ee1773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561208a57612083826120758786612525565b6124a290919063ffffffff16565b90506122f7565b7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561214c576121457f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127061214085612132887f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270883061254f565b6124a290919063ffffffff16565b612525565b90506122f6565b7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561220e576122077f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270612202846121f4897f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270893061254f565b6124a290919063ffffffff16565b612525565b90506122f5565b600061221986611261565b9050600061222686611261565b90508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227a57612273828761226d8a868a3061254f565b87611e5f565b92506122f2565b8673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122cc576122c58782876122c08a868a3061254f565b611e5f565b92506122f1565b6122ee82826122dd8a868a3061254f565b6122e98a868a3061254f565b611e5f565b92505b5b50505b5b5b5b5b949350505050565b60008082148061231e575082828385029250828161231b57fe5b04145b612390576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b600080821161240d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6469766973696f6e206279207a65726f0000000000000000000000000000000081525060200191505060405180910390fd5b81838161241657fe5b04905092915050565b600082828403915081111561249c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b600082828401915081101561251f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b60006125478373b5c064f955d8e7f38fe0460c556a72987494ee17843061254f565b905092915050565b6000807f0000000000000000000000005757371414417b8c6caad45baef941abc7d3ab3273ffffffffffffffffffffffffffffffffffffffff1663e6a4390587876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156125f757600080fd5b505afa15801561260b573d6000803e3d6000fd5b505050506040513d602081101561262157600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f517569636b436f6e7665727465723a2043616e6e6f7420636f6e76657274000081525060200191505060405180910390fd5b61270281858873ffffffffffffffffffffffffffffffffffffffff16611c7c9092919063ffffffff16565b6000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561274b57600080fd5b505afa15801561275f573d6000803e3d6000fd5b505050506040513d606081101561277557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561280557600080fd5b505afa158015612819573d6000803e3d6000fd5b505050506040513d602081101561282f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415612ad9576000612929838a73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156128e057600080fd5b505afa1580156128f4573d6000803e3d6000fd5b505050506040513d602081101561290a57600080fd5b810190808051906020019092919050505061241f90919063ffffffff16565b905060006129426103e58361230190919063ffffffff16565b905061296b8161295d6103e88761230190919063ffffffff16565b6124a290919063ffffffff16565b61297e848361230190919063ffffffff16565b8161298557fe5b0495508473ffffffffffffffffffffffffffffffffffffffff1663022c0d9f6000888a600067ffffffffffffffff811180156129c057600080fd5b506040519080825280601f01601f1916602001820160405280156129f35781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612a6b578082015181840152602081019050612a50565b50505050905090810190601f168015612a985780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015612aba57600080fd5b505af1158015612ace573d6000803e3d6000fd5b505050505050612d3b565b6000612b8f828a73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612b4657600080fd5b505afa158015612b5a573d6000803e3d6000fd5b505050506040513d6020811015612b7057600080fd5b810190808051906020019092919050505061241f90919063ffffffff16565b90506000612ba86103e58361230190919063ffffffff16565b9050612bd181612bc36103e88661230190919063ffffffff16565b6124a290919063ffffffff16565b612be4858361230190919063ffffffff16565b81612beb57fe5b0495508473ffffffffffffffffffffffffffffffffffffffff1663022c0d9f8760008a600067ffffffffffffffff81118015612c2657600080fd5b506040519080825280601f01601f191660200182016040528015612c595781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612cd1578082015181840152602081019050612cb6565b50505050905090810190601f168015612cfe5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015612d2057600080fd5b505af1158015612d34573d6000803e3d6000fd5b5050505050505b50505094935050505056fea2646970667358221220e030325b43ad50d7d80cf3e65f202416ad7e243c282a1749954348165d2a5a7b64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005757371414417b8c6caad45baef941abc7d3ab32000000000000000000000000000000000000000000000000000000000000dead0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127000000000000000000000000016899a9b449bb8608af81846d0336b7ba58b7504
-----Decoded View---------------
Arg [0] : _factory (address): 0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32
Arg [1] : _communityAddress (address): 0x000000000000000000000000000000000000dEaD
Arg [2] : _weth (address): 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270
Arg [3] : _treasury (address): 0x16899A9B449bb8608af81846d0336b7bA58B7504
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000005757371414417b8c6caad45baef941abc7d3ab32
Arg [1] : 000000000000000000000000000000000000000000000000000000000000dead
Arg [2] : 0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270
Arg [3] : 00000000000000000000000016899a9b449bb8608af81846d0336b7ba58b7504
Deployed Bytecode Sourcemap
9350:9943:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8342:385;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12794:360;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9817:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8735:301;;;:::i;:::-;;9905:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10978:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9599:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19026:264;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8020:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11159:337;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10780:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11504:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12570:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9480:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8047:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9657:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8342:385;9098:5;;;;;;;;;;9084:19;;:10;:19;;;9076:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8447:6:::1;8443:277;;;8498:1;8478:22;;:8;:22;;;;:34;;;;8504:8;8478:34;8470:68;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;8612:8;8584:37;;8605:5;::::0;::::1;;;;;;;;8584:37;;;;;;;;;;;;8644:8;8636:5;::::0;:16:::1;;;;;;;;;;;;;;;;;;8443:277;;;8700:8;8685:12;;:23;;;;;;;;;;;;;;;;;;8443:277;8342:385:::0;;;:::o;12794:360::-;12019:9;12005:23;;:10;:23;;;11997:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13018:11:::1;13032:6;;:13;;13018:27;;13061:9;13056:91;13080:3;13076:1;:7;13056:91;;;13105:30;13114:6;;13121:1;13114:9;;;;;;;;;;;;;;;13125:6;;13132:1;13125:9;;;;;;;;;;;;;;;13105:8;:30::i;:::-;13085:3;;;;;;;13056:91;;;;12072:1;12794:360:::0;;;;:::o;9817:29::-;;;:::o;8735:301::-;8779:21;8803:12;;;;;;;;;;;8779:36;;8850:13;8836:27;;:10;:27;;;8828:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8946:13;8918:42;;8939:5;;;;;;;;;;8918:42;;;;;;;;;;;;8979:13;8971:5;;:21;;;;;;;;;;;;;;;;;;9026:1;9003:12;;:25;;;;;;;;;;;;;;;;;;8735:301;:::o;9905:23::-;;;;;;;;;;;;;:::o;10978:133::-;9098:5;;;;;;;;;;9084:19;;:10;:19;;;9076:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11086:17:::1;11067:16;;:36;;;;;;;;;;;;;;;;;;10978:133:::0;:::o;9599:31::-;;;;;;;;;;;;;:::o;19026:264::-;9098:5;;;;;;;;;;9084:19;;:10;:19;;;9076:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19139:1:::1;19119:22;;:8;:22;;;;19111:50;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;19174:15;19199:5;19192:23;;;19224:4;19192:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;19174:56;;19248:5;19241:22;;;19264:8;19274:7;19241:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;9151:1;19026:264:::0;;:::o;8020:20::-;;;;;;;;;;;;:::o;11159:337::-;9098:5;;;;;;;;;;9084:19;;:10;:19;;;9076:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9697:42:::1;11280:14;;:5;:14;;;;:31;;;;;11307:4;11298:13;;:5;:13;;;;11280:31;:50;;;;;11324:6;11315:15;;:5;:15;;;;11280:50;11258:130;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;11439:6;11421:8;:15;11430:5;11421:15;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;11481:6;11461:27;;11474:5;11461:27;;;;;;;;;;;;11159:337:::0;;:::o;10780:190::-;10835:14;10871:8;:15;10880:5;10871:15;;;;;;;;;;;;;;;;;;;;;;;;;10862:24;;10919:1;10901:20;;:6;:20;;;10897:66;;;10947:4;10938:13;;10897:66;10780:190;;;:::o;11504:207::-;9098:5;;;;;;;;;;9084:19;;:10;:19;;;9076:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11606:1:::1;11585:23;;:9;:23;;;;11577:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;11651:9;11640:8;;:20;;;;;;;;;;;;;;;;;;11694:8;;;;;;;;;;;11678:25;;;;;;;;;;;;11504:207:::0;:::o;12570:111::-;12019:9;12005:23;;:10;:23;;;11997:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12649:24:::1;12658:6;12666;12649:8;:24::i;:::-;12570:111:::0;;:::o;9480:42::-;;;:::o;8047:27::-;;;;;;;;;;;;;:::o;9657:83::-;9697:42;9657:83;:::o;13203:1375::-;13322:19;13359:7;:15;;;13375:6;13383;13359:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13322:69;;13435:1;13410:27;;13418:4;13410:27;;;;13402:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13550:117;13607:4;13627;:14;;;13650:4;13627:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13565:4;13550:34;;;;:117;;;;;:::i;:::-;13703:15;13720;13739:4;:9;;;13757:4;13739:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13702:61;;;;13788:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13778:23;;:6;:23;;;13774:95;;13840:7;13849;13818:39;;;;;;;;13774:95;13895:1;13885:7;:11;:26;;;;13910:1;13900:7;:11;13885:26;13881:676;;;13928:46;13941:6;13949;13957:7;13966;13928:12;:46::i;:::-;;13991:19;9697:42;14013:23;;;14045:4;14013:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13991:60;;14068:23;14094:28;14118:3;14094:19;14110:2;14094:11;:15;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;14068:54;;14137:21;14161:32;14177:15;14161:11;:15;;:32;;;;:::i;:::-;14137:56;;14208:61;14235:16;;;;;;;;;;;14253:15;9697:42;14208:26;;;;:61;;;;;:::i;:::-;14284:51;14311:8;;;;;;;;;;;14321:13;9697:42;14284:26;;;;:51;;;;;:::i;:::-;14438:6;14355:190;;14413:6;14355:190;;14384:10;14355:190;;;14463:7;14489;14515:11;14355:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13881:676;;;;13203:1375;;;;;:::o;2651:302::-;2736:12;2750:17;2779:5;2771:19;;2814:10;2826:2;2830:6;2791:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2771:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2735:103;;;;2857:7;:57;;;;;2884:1;2869:4;:11;:16;:44;;;;2900:4;2889:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2869:44;2857:57;2849:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2651:302;;;;;:::o;14683:2534::-;14832:16;14900:6;14890:16;;:6;:16;;;14886:2324;;;14923:14;14940:20;14952:7;14940;:11;;:20;;;;:::i;:::-;14923:37;;9697:42;14979:15;;:6;:15;;;14975:383;;;15026:6;15015:17;;14975:383;;;15068:4;15058:14;;:6;:14;;;15054:304;;;15104:22;15113:4;15119:6;15104:8;:22::i;:::-;15093:33;;15054:304;;;15167:14;15184:17;15194:6;15184:9;:17::i;:::-;15167:34;;15229:44;15235:6;15243;15251;15267:4;15229:5;:44::i;:::-;15220:53;;15303:39;15316:6;15324;15332;15340:1;15303:12;:39::i;:::-;15292:50;;15054:304;;14975:383;14886:2324;;;;9697:42;15379:15;;:6;:15;;;15375:1835;;;15454:38;15484:7;15454:25;15463:6;15471:7;15454:8;:25::i;:::-;:29;;:38;;;;:::i;:::-;15443:49;;15375:1835;;;9697:42;15514:15;;:6;:15;;;15510:1700;;;15590:38;15620:7;15590:25;15599:6;15607:7;15590:8;:25::i;:::-;:29;;:38;;;;:::i;:::-;15579:49;;15510:1700;;;15660:4;15650:14;;:6;:14;;;15646:1564;;;15723:121;15750:4;15773:56;15821:7;15773:43;15779:6;15787:4;15793:7;15810:4;15773:5;:43::i;:::-;:47;;:56;;;;:::i;:::-;15723:8;:121::i;:::-;15712:132;;15646:1564;;;15876:4;15866:14;;:6;:14;;;15862:1348;;;15939:121;15966:4;15989:56;16037:7;15989:43;15995:6;16003:4;16009:7;16026:4;15989:5;:43::i;:::-;:47;;:56;;;;:::i;:::-;15939:8;:121::i;:::-;15928:132;;15862:1348;;;16124:15;16142:17;16152:6;16142:9;:17::i;:::-;16124:35;;16174:15;16192:17;16202:6;16192:9;:17::i;:::-;16174:35;;16239:6;16228:17;;:7;:17;;;16224:975;;;16340:189;16375:7;16405:6;16434:46;16440:6;16448:7;16457;16474:4;16434:5;:46::i;:::-;16503:7;16340:12;:189::i;:::-;16329:200;;16224:975;;;16566:6;16555:17;;:7;:17;;;16551:648;;;16667:189;16702:6;16731:7;16761;16791:46;16797:6;16805:7;16814;16831:4;16791:5;:46::i;:::-;16667:12;:189::i;:::-;16656:200;;16551:648;;;16908:275;16943:7;16973;17049:46;17055:6;17063:7;17072;17089:4;17049:5;:46::i;:::-;17118;17124:6;17132:7;17141;17158:4;17118:5;:46::i;:::-;16908:12;:275::i;:::-;16897:286;;16551:648;16224:975;15862:1348;;;15646:1564;15510:1700;15375:1835;14886:2324;14683:2534;;;;;;:::o;552:142::-;604:6;636:1;631;:6;:30;;;;660:1;655;650;646;:5;642:9;;;641:15;;;;;;:20;631:30;623:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;552:142;;;;:::o;702:137::-;754:7;786:1;782;:5;774:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;830:1;826;:5;;;;;;819:12;;702:137;;;;:::o;415:129::-;467:6;509:1;503;499;:5;495:9;;;494:16;;486:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;415:129;;;;:::o;279:128::-;331:6;373:1;367;363;:5;359:9;;;358:16;;350:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;279:128;;;;:::o;18808:210::-;18895:17;18966:44;18972:5;9697:42;18986:8;19004:4;18966:5;:44::i;:::-;18954:56;;18808:210;;;;:::o;17311:1447::-;17453:17;17526:19;17576:7;:15;;;17592:9;17603:7;17576:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17526:86;;17656:1;17631:27;;17639:4;17631:27;;;;17623:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17716:55;17755:4;17762:8;17723:9;17716:30;;;;:55;;;;;:::i;:::-;17834:16;17852;17874:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17833:59;;;;;;;;;17920:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17907:26;;:9;:26;;;17903:848;;;17950:19;17972:56;18019:8;17979:9;17972:27;;;18008:4;17972:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:46;;:56;;;;:::i;:::-;17950:78;;18043:23;18069:20;18085:3;18069:11;:15;;:20;;;;:::i;:::-;18043:46;;18182:39;18205:15;18182:18;18195:4;18182:8;:12;;:18;;;;:::i;:::-;:22;;:39;;;;:::i;:::-;18133:29;18153:8;18133:15;:19;;:29;;;;:::i;:::-;:88;;;;;;18104:117;;18250:4;:9;;;18260:1;18263:9;18274:2;18288:1;18278:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18250:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17903:848;;;;;18368:19;18390:56;18437:8;18397:9;18390:27;;;18426:4;18390:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:46;;:56;;;;:::i;:::-;18368:78;;18461:23;18487:20;18503:3;18487:11;:15;;:20;;;;:::i;:::-;18461:46;;18600:39;18623:15;18600:18;18613:4;18600:8;:12;;:18;;;;:::i;:::-;:22;;:39;;;;:::i;:::-;18551:29;18571:8;18551:15;:19;;:29;;;;:::i;:::-;:88;;;;;;18522:117;;18654:4;:9;;;18664;18675:1;18678:2;18692:1;18682:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18654:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17903:848;;;17311:1447;;;;;;;;;:::o
Swarm Source
ipfs://e030325b43ad50d7d80cf3e65f202416ad7e243c282a1749954348165d2a5a7b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.