Polygon Sponsored slots available. Book your slot here!
Overview
POL Balance
0 POL
POL Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
TokenSwapSpot
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2024-11-30 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface ITokenSwap { function swapToken( address tokenIn, address tokenOut, uint256 amountIn, uint24 feeTier, address payable reseller ) external payable; function getPrice(address token1,address token2,uint256 feeTier) external view returns (uint256); function WETH() external view returns (address); } interface IERC20 { function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function allowance(address owner,address spender) external view returns (uint); function approve(address spender, uint256 amount) external returns (bool); } interface IWETH { function deposit() external payable; function withdraw(uint wad) external; } contract TokenSwapSpot { // Owner of the contract address public owner; // Oracle address to call for order processing address public oracle; // Address of the TokenSwap contract (Uniswap swap handler) address public tokenSwapContract; ITokenSwap tokenSwap; address public WETH; uint public oracleFee = 0.02 ether; // Event for order placed event OrderPlaced(address indexed user, address tokenIn, address tokenOut, uint256 price, uint256 amountIn); // Event for swap triggered via oracle event OrderTriggered(address indexed user, address tokenIn, address tokenOut, uint256 price, uint256 amountIn); // Event for order cancellation event OrderCancelled(address indexed user, address tokenIn, address tokenOut, uint256 price, uint256 amountIn); // Struct representing a limit order struct Order { address user; uint256 priceIn; uint256 pairPriceId; uint256 amountIn; // tokenInAmount uint8 status; // 0=>open / 1=>withdrawed / 2=>cancelled uint256 createdAt; uint256 updatedAt; } uint256 public lastOrderId; mapping(uint256 => Order) public orders; mapping (address => uint[]) userOrderIds; mapping (address =>uint) public userOrderCount; struct PairPrice{ address tokenIn; address tokenOut; uint256 price; uint256 totalAmountIn; uint256 amountOut; // if 0 its open, if more it's done uint256 totalWithdrawn; } uint256 public lastPairId; mapping(uint256 => PairPrice) public pairPrices; mapping(address => mapping(address => mapping(uint=>uint))) pairPriceIds; // Modifier to restrict functions to the contract owner modifier onlyOwner() { require(msg.sender == owner, "Not the contract owner"); _; } // Modifier to restrict functions to the oracle modifier onlyOracle() { require(msg.sender == oracle, "Not the oracle"); _; } constructor(address _tokenSwapContract) { owner = msg.sender; oracle = msg.sender; tokenSwapContract = _tokenSwapContract; tokenSwap = ITokenSwap(tokenSwapContract); WETH = tokenSwap.WETH(); } // Function to place a limit order function placeOrder(address tokenIn, address tokenOut, uint256 price, uint256 amountIn) external payable { require(msg.value >= oracleFee,"Not enough oracle fee"); if(tokenIn==address(0)) tokenIn=WETH; if(tokenOut==address(0)) tokenOut=WETH; if (msg.value > oracleFee && tokenIn==address(WETH)) { tokenIn = WETH; amountIn = msg.value - oracleFee; IWETH wethContract = IWETH(WETH); wethContract.deposit{value: amountIn}(); //transfer oracle fee to oracle address (bool sent, ) = oracle.call{value: oracleFee}(""); require(sent, "Failed to send oracle fee"); }else{ require(amountIn > 0, "Must specify an amount to swap"); //transfer token to contract IERC20 token = IERC20(tokenIn); token.transferFrom(msg.sender, address(this), amountIn); //transfer oracle fee to oracle address if(msg.value>0){ (bool sent, ) = oracle.call{value: msg.value}(""); require(sent, "Failed to send oracle fee"); } } uint256 pairPriceId = getPairPriceId(tokenIn,tokenOut,price); pairPrices[pairPriceId].totalAmountIn += amountIn; //approve tokenIn IERC20 erc20 = IERC20(tokenIn); if(erc20.allowance(address(this), tokenSwapContract)<amountIn) erc20.approve(tokenSwapContract,type(uint256).max); //place order uint priceIn = tokenSwap.getPrice(tokenIn, tokenOut,3000); Order memory newOrder = Order({ user: msg.sender, priceIn: priceIn, pairPriceId:pairPriceId, amountIn: amountIn, status:0,//pending createdAt: block.timestamp, updatedAt: 0 }); lastOrderId++; orders[lastOrderId] = newOrder; userOrderIds[msg.sender].push(lastOrderId); userOrderCount[msg.sender]++; emit OrderPlaced(msg.sender, tokenIn, tokenOut, price, amountIn); } // Function to cancel an order function cancelOrder(uint256 orderIndex) external { //validate inputs require(orderIndex<=userOrderCount[msg.sender],"Order id is not valid"); uint256 orderId = userOrderIds[msg.sender][orderIndex]; require(orders[orderId].status==0 && orders[orderId].amountIn>0,"Order is not open"); //update order status orders[orderId].status=2; orders[orderId].updatedAt=block.timestamp; //rolback the amounts uint256 pairPriceId = orders[orderId].pairPriceId; if(pairPrices[pairPriceId].tokenIn==WETH) { IWETH(WETH).withdraw(orders[orderId].amountIn); (bool success, ) = msg.sender.call{value: orders[orderId].amountIn}(""); require(success, "Failed to send ETH"); }else IERC20(pairPrices[pairPriceId].tokenIn).transfer(msg.sender, orders[orderId].amountIn); pairPrices[pairPriceId].totalAmountIn -= orders[orderId].amountIn; } function withdrawOrder(uint256 orderIndex) public{ //validate inputs require(orderIndex<=userOrderCount[msg.sender],"Order id is not valid"); uint256 orderId = userOrderIds[msg.sender][orderIndex]; require(orders[orderId].status==0 && orders[orderId].amountIn>0,"Order is not open"); //update order status orders[orderId].status=1; //withdrawed orders[orderId].updatedAt=block.timestamp; //pay the swapped amounts uint256 pairPriceId = orders[orderId].pairPriceId; require(pairPrices[pairPriceId].amountOut>0,"Order is not placed yet."); uint256 totalAmountIn = pairPrices[pairPriceId].totalAmountIn; uint256 totalAmountOut = pairPrices[pairPriceId].amountOut; uint256 myAmountIn = orders[orderId].amountIn; uint256 ratio = myAmountIn * 10**18 / totalAmountIn; uint256 myAmountOut = totalAmountOut * ratio / 10**18; if(pairPrices[pairPriceId].tokenOut==WETH) { //IWETH(WETH).withdraw(myAmountOut); //already converted to ETH in swap contract (bool success, ) = msg.sender.call{value: myAmountOut}(""); require(success, "Failed to send ETH"); }else IERC20(pairPrices[pairPriceId].tokenOut).transfer(msg.sender, myAmountOut); pairPrices[pairPriceId].totalWithdrawn += myAmountOut; } // Function to process orders in steps (batch processing) function processPairPrice(uint256 pairPriceId) external onlyOracle { //TODO: //get price and check if it is ok //?????????????????? //place swap order and get received token amount uint256 firstBalance; if(pairPrices[pairPriceId].tokenOut == WETH) firstBalance = address(this).balance; else firstBalance = IERC20(pairPrices[pairPriceId].tokenOut).balanceOf(address(this)); tokenSwap.swapToken( pairPrices[pairPriceId].tokenIn, pairPrices[pairPriceId].tokenOut, pairPrices[pairPriceId].totalAmountIn, 3000, payable(oracle) ); uint256 newBalance; if(pairPrices[pairPriceId].tokenOut == WETH) newBalance = address(this).balance; else newBalance = IERC20(pairPrices[pairPriceId].tokenOut).balanceOf(address(this)); uint256 income = newBalance - firstBalance; require(income>0,"Failed to process swap"); //disable old pairPrice and update income pairPrices[pairPriceId].amountOut = income; pairPriceIds[pairPrices[pairPriceId].tokenIn][pairPrices[pairPriceId].tokenOut][pairPrices[pairPriceId].price]=0; } // Function to get all active orders for a user with pagination struct TmpOrder { uint userOrderIndex; address user; uint256 priceIn; uint256 pairPriceId; uint256 amountIn; // tokenInAmount uint8 status; // 0=>open / 1=>withdrawed / 2=>cancelled uint256 createdAt; uint256 updatedAt; address tokenIn; address tokenOut; uint256 price; uint256 totalAmountIn; uint256 amountOut; // if 0 its open, if more it's done uint256 totalWithdrawn; } function getUserOrdersPaginated(address user,uint256 fromId, uint256 toId) external view returns (TmpOrder[] memory) { if (toId > userOrderIds[user].length) { toId = userOrderIds[user].length; } require(fromId <= toId, "Invalid pagination range"); uint256 size = toId - fromId; TmpOrder[] memory paginatedOrders = new TmpOrder[](size); for (uint256 i = 0; i < size; i++) { uint256 orderIndex = userOrderIds[user][fromId + i]; uint256 pairPriceId = orders[orderIndex].pairPriceId; TmpOrder memory _tmpOrder = TmpOrder({ userOrderIndex: fromId + i, user: orders[orderIndex].user, priceIn: orders[orderIndex].priceIn, pairPriceId: orders[orderIndex].pairPriceId, amountIn: orders[orderIndex].amountIn, // tokenInAmount status: orders[orderIndex].status, // 0=>open / 1=>withdrawed / 2=>cancelled createdAt: orders[orderIndex].createdAt, updatedAt: orders[orderIndex].updatedAt, tokenIn: pairPrices[pairPriceId].tokenIn, tokenOut: pairPrices[pairPriceId].tokenOut, price: pairPrices[pairPriceId].price, totalAmountIn: pairPrices[pairPriceId].totalAmountIn, amountOut: pairPrices[pairPriceId].amountOut, totalWithdrawn: pairPrices[pairPriceId].totalWithdrawn }); // Store the struct in the paginatedOrders array paginatedOrders[i] = _tmpOrder; } return paginatedOrders; } // Function to set a new TokenSwap contract address function setTokenSwapContract(address _tokenSwapContract) external onlyOwner { tokenSwapContract = _tokenSwapContract; tokenSwap = ITokenSwap(tokenSwapContract); WETH = tokenSwap.WETH(); } // Function to set the oracle address function setOracle(address _oracle) external onlyOwner { oracle = _oracle; } // Function to set the oracle address function setOracleFee(uint _oracleFee) external onlyOwner { oracleFee = _oracleFee; } // Helper function to round the price to a smaller step using base 2 function roundPriceBase2(uint256 price) private pure returns (uint256) { uint256 magnitude = 1 << (log2(price) - 8); // Shift to create smaller rounding steps uint256 roundedPrice = (price / magnitude) * magnitude; return roundedPrice; } // Efficient log2 implementation (based on bit-shifting) function log2(uint256 x) private pure returns (uint256) { uint256 result = 0; if (x >= 2**128) { x >>= 128; result += 128; } if (x >= 2**64) { x >>= 64; result += 64; } if (x >= 2**32) { x >>= 32; result += 32; } if (x >= 2**16) { x >>= 16; result += 16; } if (x >= 2**8) { x >>= 8; result += 8; } if (x >= 2**4) { x >>= 4; result += 4; } if (x >= 2**2) { x >>= 2; result += 2; } if (x >= 2**1) { result += 1; } return result; } function getPairPriceId(address tokenIn,address tokenOut,uint256 price) private returns(uint){ // Round the price to the nearest 0.1% price = roundPriceBase2(price); if(pairPriceIds[tokenIn][tokenOut][price]>0) return pairPriceIds[tokenIn][tokenOut][price]; PairPrice memory _pairPrice = PairPrice({ tokenIn:tokenIn, tokenOut:tokenOut, price:price, totalAmountIn:0, amountOut:0, // if 0 its open, if more it's done totalWithdrawn:0 }); lastPairId++; pairPrices[lastPairId] = _pairPrice; pairPriceIds[tokenIn][tokenOut][price] = lastPairId; return lastPairId; } // Emergency withdraw ETH function emergencyWithdrawETH(address payable to) external onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "No ETH to withdraw"); to.transfer(balance); } // Emergency withdraw ERC20 tokens function emergencyWithdrawToken(address token, address to) external onlyOwner { IERC20 erc20 = IERC20(token); uint256 balance = erc20.balanceOf(address(this)); require(balance > 0, "No token balance to withdraw"); erc20.transfer(to, balance); } // Fallback function to receive ETH receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_tokenSwapContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"OrderPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"OrderTriggered","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"emergencyWithdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"emergencyWithdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"fromId","type":"uint256"},{"internalType":"uint256","name":"toId","type":"uint256"}],"name":"getUserOrdersPaginated","outputs":[{"components":[{"internalType":"uint256","name":"userOrderIndex","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"priceIn","type":"uint256"},{"internalType":"uint256","name":"pairPriceId","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"totalAmountIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"totalWithdrawn","type":"uint256"}],"internalType":"struct TokenSwapSpot.TmpOrder[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastOrderId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPairId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"orders","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"priceIn","type":"uint256"},{"internalType":"uint256","name":"pairPriceId","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairPrices","outputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"totalAmountIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"totalWithdrawn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"placeOrder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pairPriceId","type":"uint256"}],"name":"processPairPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_oracleFee","type":"uint256"}],"name":"setOracleFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenSwapContract","type":"address"}],"name":"setTokenSwapContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenSwapContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userOrderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"}],"name":"withdrawOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405266470de4df82000060055534801561001a575f5ffd5b50604051614047380380614047833981810160405281019061003c919061028d565b335f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ea919061028d565b60045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506102b8565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61025c82610233565b9050919050565b61026c81610252565b8114610276575f5ffd5b50565b5f8151905061028781610263565b92915050565b5f602082840312156102a2576102a161022f565b5b5f6102af84828501610279565b91505092915050565b613d82806102c55f395ff3fe608060405260043610610122575f3560e01c8063817422c01161009f578063af01afdf11610063578063af01afdf146103cc578063b6d9ef60146103f4578063ec4eb4f91461041c578063f9cd3ceb14610458578063fb791b0b1461048257610129565b8063817422c0146102cb5780638da5cb5b1461030c578063962fba2714610336578063a85c38ef14610360578063ad5c4648146103a257610129565b806366f48cf5116100e657806366f48cf5146101ed578063682458bd146102295780636e2bd98d146102515780637adbf973146102795780637dc0d1d0146102a157610129565b8063214ff4591461012d5780633bb7dac714610155578063514fcac71461017f578063559bf6fd146101a75780635662ecc7146101c357610129565b3661012957005b5f5ffd5b348015610138575f5ffd5b50610153600480360381019061014e9190612dfc565b6104aa565b005b348015610160575f5ffd5b506101696105c6565b6040516101769190612e47565b60405180910390f35b34801561018a575f5ffd5b506101a560048036038101906101a09190612e93565b6105eb565b005b6101c160048036038101906101bc9190612ee8565b610a91565b005b3480156101ce575f5ffd5b506101d761136d565b6040516101e49190612f5b565b60405180910390f35b3480156101f8575f5ffd5b50610213600480360381019061020e9190612f74565b611373565b60405161022091906131c4565b60405180910390f35b348015610234575f5ffd5b5061024f600480360381019061024a91906131e4565b61178d565b005b34801561025c575f5ffd5b5061027760048036038101906102729190612e93565b61195e565b005b348015610284575f5ffd5b5061029f600480360381019061029a9190613222565b611f09565b005b3480156102ac575f5ffd5b506102b5611fda565b6040516102c29190612e47565b60405180910390f35b3480156102d6575f5ffd5b506102f160048036038101906102ec9190612e93565b611fff565b6040516103039695949392919061324d565b60405180910390f35b348015610317575f5ffd5b50610320612075565b60405161032d9190612e47565b60405180910390f35b348015610341575f5ffd5b5061034a612099565b6040516103579190612f5b565b60405180910390f35b34801561036b575f5ffd5b5061038660048036038101906103819190612e93565b61209f565b60405161039997969594939291906132bb565b60405180910390f35b3480156103ad575f5ffd5b506103b6612108565b6040516103c39190612e47565b60405180910390f35b3480156103d7575f5ffd5b506103f260048036038101906103ed9190613222565b61212d565b005b3480156103ff575f5ffd5b5061041a60048036038101906104159190612e93565b61232c565b005b348015610427575f5ffd5b50610442600480360381019061043d9190613222565b6123c4565b60405161044f9190612f5b565b60405180910390f35b348015610463575f5ffd5b5061046c6123d9565b6040516104799190612f5b565b60405180910390f35b34801561048d575f5ffd5b506104a860048036038101906104a39190612e93565b6123df565b005b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052f90613382565b60405180910390fd5b5f4790505f811161057e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610575906133ea565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156105c1573d5f5f3e3d5ffd5b505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205481111561066b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066290613452565b60405180910390fd5b5f60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106106bb576106ba613470565b5b905f5260205f20015490505f60075f8381526020019081526020015f206004015f9054906101000a900460ff1660ff1614801561070b57505f60075f8381526020019081526020015f2060030154115b61074a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610741906134e7565b60405180910390fd5b600260075f8381526020019081526020015f206004015f6101000a81548160ff021916908360ff1602179055504260075f8381526020019081526020015f20600601819055505f60075f8381526020019081526020015f2060020154905060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361098b5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d60075f8581526020019081526020015f20600301546040518263ffffffff1660e01b815260040161089c9190612f5b565b5f604051808303815f87803b1580156108b3575f5ffd5b505af11580156108c5573d5f5f3e3d5ffd5b505050505f3373ffffffffffffffffffffffffffffffffffffffff1660075f8581526020019081526020015f206003015460405161090290613532565b5f6040518083038185875af1925050503d805f811461093c576040519150601f19603f3d011682016040523d82523d5f602084013e610941565b606091505b5050905080610985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097c90613590565b60405180910390fd5b50610a4e565b600b5f8281526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3360075f8681526020019081526020015f20600301546040518363ffffffff1660e01b8152600401610a0c9291906135ae565b6020604051808303815f875af1158015610a28573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4c919061360a565b505b60075f8381526020019081526020015f2060030154600b5f8381526020019081526020015f206003015f828254610a859190613662565b92505081905550505050565b600554341015610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd906136df565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b2e5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1693505b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b865760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692505b60055434118015610be3575060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15610d705760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935060055434610c1a9190613662565b90505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b158015610c87575f5ffd5b505af1158015610c99573d5f5f3e3d5ffd5b50505050505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600554604051610ce690613532565b5f6040518083038185875af1925050503d805f8114610d20576040519150601f19603f3d011682016040523d82523d5f602084013e610d25565b606091505b5050905080610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6090613747565b60405180910390fd5b5050610f09565b5f8111610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da9906137af565b60405180910390fd5b5f8490508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401610df3939291906137cd565b6020604051808303815f875af1158015610e0f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e33919061360a565b505f341115610f07575f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610e8290613532565b5f6040518083038185875af1925050503d805f8114610ebc576040519150601f19603f3d011682016040523d82523d5f602084013e610ec1565b606091505b5050905080610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc90613747565b60405180910390fd5b505b505b5f610f15858585612897565b905081600b5f8381526020019081526020015f206003015f828254610f3a9190613802565b925050819055505f859050828173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610fa2929190613835565b602060405180830381865afa158015610fbd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe19190613870565b10156110a5578073ffffffffffffffffffffffffffffffffffffffff1663095ea7b360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016110639291906135ae565b6020604051808303815f875af115801561107f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a3919061360a565b505b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9dd14d68888610bb86040518463ffffffff1660e01b8152600401611106939291906138dd565b602060405180830381865afa158015611121573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111459190613870565b90505f6040518060e001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018581526020018681526020015f60ff1681526020014281526020015f815250905060065f8154809291906111a890613912565b91905055508060075f60065481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff021916908360ff16021790555060a0820151816005015560c0820151816006015590505060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600654908060018154018082558091505060019003905f5260205f20015f909190919091505560095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919061130a90613912565b91905055503373ffffffffffffffffffffffffffffffffffffffff167f25f958e981f7f2a99eb96852a8dffe251ff392838f2c8e280d160399a90b0fe18989898960405161135b9493929190613959565b60405180910390a25050505050505050565b60065481565b606060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490508211156114015760085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905091505b81831115611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b906139e6565b60405180910390fd5b5f83836114519190613662565b90505f8167ffffffffffffffff81111561146e5761146d613a04565b5b6040519080825280602002602001820160405280156114a757816020015b611494612cf8565b81526020019060019003908161148c5790505b5090505f5f90505b82811015611780575f60085f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082886115019190613802565b8154811061151257611511613470565b5b905f5260205f20015490505f60075f8381526020019081526020015f206002015490505f604051806101c00160405280858b61154e9190613802565b815260200160075f8681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160075f8681526020019081526020015f2060010154815260200160075f8681526020019081526020015f2060020154815260200160075f8681526020019081526020015f2060030154815260200160075f8681526020019081526020015f206004015f9054906101000a900460ff1660ff16815260200160075f8681526020019081526020015f2060050154815260200160075f8681526020019081526020015f20600601548152602001600b5f8581526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b5f8581526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b5f8581526020019081526020015f20600201548152602001600b5f8581526020019081526020015f20600301548152602001600b5f8581526020019081526020015f20600401548152602001600b5f8581526020019081526020015f206005015481525090508085858151811061176557611764613470565b5b602002602001018190525050505080806001019150506114af565b5080925050509392505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461181b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181290613382565b60405180910390fd5b5f8290505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118599190612e47565b602060405180830381865afa158015611874573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118989190613870565b90505f81116118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390613a7b565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b81526004016119179291906135ae565b6020604051808303815f875af1158015611933573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611957919061360a565b5050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490613ae3565b60405180910390fd5b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8481526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a7d57479050611b2b565b600b5f8381526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ae99190612e47565b602060405180830381865afa158015611b04573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b289190613870565b90505b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394ef1501600b5f8581526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b5f8681526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b5f8781526020019081526020015f2060030154610bb860015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b8152600401611c29959493929190613b4e565b5f604051808303815f87803b158015611c40575f5ffd5b505af1158015611c52573d5f5f3e3d5ffd5b505050505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8581526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611ce657479050611d94565b600b5f8481526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d529190612e47565b602060405180830381865afa158015611d6d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d919190613870565b90505b5f8282611da19190613662565b90505f8111611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc90613be9565b60405180910390fd5b80600b5f8681526020019081526020015f20600401819055505f600c5f600b5f8881526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600b5f8881526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600b5f8881526020019081526020015f206002015481526020019081526020015f208190555050505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8e90613382565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154908060050154905086565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6007602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015490806003015490806004015f9054906101000a900460ff16908060050154908060060154905087565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b290613382565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ea9190613c1b565b60045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b190613382565b60405180910390fd5b8060058190555050565b6009602052805f5260405f205f915090505481565b60055481565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205481111561245f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245690613452565b60405180910390fd5b5f60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106124af576124ae613470565b5b905f5260205f20015490505f60075f8381526020019081526020015f206004015f9054906101000a900460ff1660ff161480156124ff57505f60075f8381526020019081526020015f2060030154115b61253e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612535906134e7565b60405180910390fd5b600160075f8381526020019081526020015f206004015f6101000a81548160ff021916908360ff1602179055504260075f8381526020019081526020015f20600601819055505f60075f8381526020019081526020015f206002015490505f600b5f8381526020019081526020015f2060040154116125f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e990613c90565b60405180910390fd5b5f600b5f8381526020019081526020015f206003015490505f600b5f8481526020019081526020015f206004015490505f60075f8681526020019081526020015f206003015490505f83670de0b6b3a7640000836126509190613cae565b61265a9190613d1c565b90505f670de0b6b3a764000082856126729190613cae565b61267c9190613d1c565b905060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8881526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036127b3575f3373ffffffffffffffffffffffffffffffffffffffff168260405161272a90613532565b5f6040518083038185875af1925050503d805f8114612764576040519150601f19603f3d011682016040523d82523d5f602084013e612769565b606091505b50509050806127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a490613590565b60405180910390fd5b50612863565b600b5f8781526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016128219291906135ae565b6020604051808303815f875af115801561283d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612861919061360a565b505b80600b5f8881526020019081526020015f206005015f8282546128869190613802565b925050819055505050505050505050565b5f6128a182612b99565b91505f600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205411156129c157600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20549050612b92565b5f6040518060c001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020015f81526020015f81526020015f8152509050600a5f815480929190612a2f90613912565b919050555080600b5f600a5481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a08201518160050155905050600a54600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f2081905550600a549150505b9392505050565b5f5f6008612ba684612bda565b612bb09190613662565b6001901b90505f818285612bc49190613d1c565b612bce9190613cae565b90508092505050919050565b5f5f5f90507001000000000000000000000000000000008310612c0e57608083901c9250608081612c0b9190613802565b90505b680100000000000000008310612c3557604083901c9250604081612c329190613802565b90505b6401000000008310612c5857602083901c9250602081612c559190613802565b90505b620100008310612c7957601083901c9250601081612c769190613802565b90505b6101008310612c9957600883901c9250600881612c969190613802565b90505b60108310612cb857600483901c9250600481612cb59190613802565b90505b60048310612cd757600283901c9250600281612cd49190613802565b90505b60028310612cef57600181612cec9190613802565b90505b80915050919050565b604051806101c001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f60ff1681526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81525090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612dcb82612da2565b9050919050565b612ddb81612dc1565b8114612de5575f5ffd5b50565b5f81359050612df681612dd2565b92915050565b5f60208284031215612e1157612e10612d9e565b5b5f612e1e84828501612de8565b91505092915050565b5f612e3182612da2565b9050919050565b612e4181612e27565b82525050565b5f602082019050612e5a5f830184612e38565b92915050565b5f819050919050565b612e7281612e60565b8114612e7c575f5ffd5b50565b5f81359050612e8d81612e69565b92915050565b5f60208284031215612ea857612ea7612d9e565b5b5f612eb584828501612e7f565b91505092915050565b612ec781612e27565b8114612ed1575f5ffd5b50565b5f81359050612ee281612ebe565b92915050565b5f5f5f5f60808587031215612f0057612eff612d9e565b5b5f612f0d87828801612ed4565b9450506020612f1e87828801612ed4565b9350506040612f2f87828801612e7f565b9250506060612f4087828801612e7f565b91505092959194509250565b612f5581612e60565b82525050565b5f602082019050612f6e5f830184612f4c565b92915050565b5f5f5f60608486031215612f8b57612f8a612d9e565b5b5f612f9886828701612ed4565b9350506020612fa986828701612e7f565b9250506040612fba86828701612e7f565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612ff681612e60565b82525050565b61300581612e27565b82525050565b5f60ff82169050919050565b6130208161300b565b82525050565b6101c082015f82015161303b5f850182612fed565b50602082015161304e6020850182612ffc565b5060408201516130616040850182612fed565b5060608201516130746060850182612fed565b5060808201516130876080850182612fed565b5060a082015161309a60a0850182613017565b5060c08201516130ad60c0850182612fed565b5060e08201516130c060e0850182612fed565b506101008201516130d5610100850182612ffc565b506101208201516130ea610120850182612ffc565b506101408201516130ff610140850182612fed565b50610160820151613114610160850182612fed565b50610180820151613129610180850182612fed565b506101a082015161313e6101a0850182612fed565b50505050565b5f61314f8383613026565b6101c08301905092915050565b5f602082019050919050565b5f61317282612fc4565b61317c8185612fce565b935061318783612fde565b805f5b838110156131b757815161319e8882613144565b97506131a98361315c565b92505060018101905061318a565b5085935050505092915050565b5f6020820190508181035f8301526131dc8184613168565b905092915050565b5f5f604083850312156131fa576131f9612d9e565b5b5f61320785828601612ed4565b925050602061321885828601612ed4565b9150509250929050565b5f6020828403121561323757613236612d9e565b5b5f61324484828501612ed4565b91505092915050565b5f60c0820190506132605f830189612e38565b61326d6020830188612e38565b61327a6040830187612f4c565b6132876060830186612f4c565b6132946080830185612f4c565b6132a160a0830184612f4c565b979650505050505050565b6132b58161300b565b82525050565b5f60e0820190506132ce5f83018a612e38565b6132db6020830189612f4c565b6132e86040830188612f4c565b6132f56060830187612f4c565b61330260808301866132ac565b61330f60a0830185612f4c565b61331c60c0830184612f4c565b98975050505050505050565b5f82825260208201905092915050565b7f4e6f742074686520636f6e7472616374206f776e6572000000000000000000005f82015250565b5f61336c601683613328565b915061337782613338565b602082019050919050565b5f6020820190508181035f83015261339981613360565b9050919050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f6133d4601283613328565b91506133df826133a0565b602082019050919050565b5f6020820190508181035f830152613401816133c8565b9050919050565b7f4f72646572206964206973206e6f742076616c696400000000000000000000005f82015250565b5f61343c601583613328565b915061344782613408565b602082019050919050565b5f6020820190508181035f83015261346981613430565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f72646572206973206e6f74206f70656e0000000000000000000000000000005f82015250565b5f6134d1601183613328565b91506134dc8261349d565b602082019050919050565b5f6020820190508181035f8301526134fe816134c5565b9050919050565b5f81905092915050565b50565b5f61351d5f83613505565b91506135288261350f565b5f82019050919050565b5f61353c82613512565b9150819050919050565b7f4661696c656420746f2073656e642045544800000000000000000000000000005f82015250565b5f61357a601283613328565b915061358582613546565b602082019050919050565b5f6020820190508181035f8301526135a78161356e565b9050919050565b5f6040820190506135c15f830185612e38565b6135ce6020830184612f4c565b9392505050565b5f8115159050919050565b6135e9816135d5565b81146135f3575f5ffd5b50565b5f81519050613604816135e0565b92915050565b5f6020828403121561361f5761361e612d9e565b5b5f61362c848285016135f6565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61366c82612e60565b915061367783612e60565b925082820390508181111561368f5761368e613635565b5b92915050565b7f4e6f7420656e6f756768206f7261636c652066656500000000000000000000005f82015250565b5f6136c9601583613328565b91506136d482613695565b602082019050919050565b5f6020820190508181035f8301526136f6816136bd565b9050919050565b7f4661696c656420746f2073656e64206f7261636c6520666565000000000000005f82015250565b5f613731601983613328565b915061373c826136fd565b602082019050919050565b5f6020820190508181035f83015261375e81613725565b9050919050565b7f4d757374207370656369667920616e20616d6f756e7420746f207377617000005f82015250565b5f613799601e83613328565b91506137a482613765565b602082019050919050565b5f6020820190508181035f8301526137c68161378d565b9050919050565b5f6060820190506137e05f830186612e38565b6137ed6020830185612e38565b6137fa6040830184612f4c565b949350505050565b5f61380c82612e60565b915061381783612e60565b925082820190508082111561382f5761382e613635565b5b92915050565b5f6040820190506138485f830185612e38565b6138556020830184612e38565b9392505050565b5f8151905061386a81612e69565b92915050565b5f6020828403121561388557613884612d9e565b5b5f6138928482850161385c565b91505092915050565b5f819050919050565b5f819050919050565b5f6138c76138c26138bd8461389b565b6138a4565b612e60565b9050919050565b6138d7816138ad565b82525050565b5f6060820190506138f05f830186612e38565b6138fd6020830185612e38565b61390a60408301846138ce565b949350505050565b5f61391c82612e60565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361394e5761394d613635565b5b600182019050919050565b5f60808201905061396c5f830187612e38565b6139796020830186612e38565b6139866040830185612f4c565b6139936060830184612f4c565b95945050505050565b7f496e76616c696420706167696e6174696f6e2072616e676500000000000000005f82015250565b5f6139d0601883613328565b91506139db8261399c565b602082019050919050565b5f6020820190508181035f8301526139fd816139c4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e6f20746f6b656e2062616c616e636520746f207769746864726177000000005f82015250565b5f613a65601c83613328565b9150613a7082613a31565b602082019050919050565b5f6020820190508181035f830152613a9281613a59565b9050919050565b7f4e6f7420746865206f7261636c650000000000000000000000000000000000005f82015250565b5f613acd600e83613328565b9150613ad882613a99565b602082019050919050565b5f6020820190508181035f830152613afa81613ac1565b9050919050565b5f62ffffff82169050919050565b5f613b29613b24613b1f8461389b565b6138a4565b613b01565b9050919050565b613b3981613b0f565b82525050565b613b4881612dc1565b82525050565b5f60a082019050613b615f830188612e38565b613b6e6020830187612e38565b613b7b6040830186612f4c565b613b886060830185613b30565b613b956080830184613b3f565b9695505050505050565b7f4661696c656420746f2070726f636573732073776170000000000000000000005f82015250565b5f613bd3601683613328565b9150613bde82613b9f565b602082019050919050565b5f6020820190508181035f830152613c0081613bc7565b9050919050565b5f81519050613c1581612ebe565b92915050565b5f60208284031215613c3057613c2f612d9e565b5b5f613c3d84828501613c07565b91505092915050565b7f4f72646572206973206e6f7420706c61636564207965742e00000000000000005f82015250565b5f613c7a601883613328565b9150613c8582613c46565b602082019050919050565b5f6020820190508181035f830152613ca781613c6e565b9050919050565b5f613cb882612e60565b9150613cc383612e60565b9250828202613cd181612e60565b91508282048414831517613ce857613ce7613635565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d2682612e60565b9150613d3183612e60565b925082613d4157613d40613cef565b5b82820490509291505056fea2646970667358221220df7f1ac82219dc665858868495d27fe15e91dc7b9edccc488eea518f234239e364736f6c634300081c003300000000000000000000000032d6b39bc53f9d85d7d64034bad9e5061b408e38
Deployed Bytecode
0x608060405260043610610122575f3560e01c8063817422c01161009f578063af01afdf11610063578063af01afdf146103cc578063b6d9ef60146103f4578063ec4eb4f91461041c578063f9cd3ceb14610458578063fb791b0b1461048257610129565b8063817422c0146102cb5780638da5cb5b1461030c578063962fba2714610336578063a85c38ef14610360578063ad5c4648146103a257610129565b806366f48cf5116100e657806366f48cf5146101ed578063682458bd146102295780636e2bd98d146102515780637adbf973146102795780637dc0d1d0146102a157610129565b8063214ff4591461012d5780633bb7dac714610155578063514fcac71461017f578063559bf6fd146101a75780635662ecc7146101c357610129565b3661012957005b5f5ffd5b348015610138575f5ffd5b50610153600480360381019061014e9190612dfc565b6104aa565b005b348015610160575f5ffd5b506101696105c6565b6040516101769190612e47565b60405180910390f35b34801561018a575f5ffd5b506101a560048036038101906101a09190612e93565b6105eb565b005b6101c160048036038101906101bc9190612ee8565b610a91565b005b3480156101ce575f5ffd5b506101d761136d565b6040516101e49190612f5b565b60405180910390f35b3480156101f8575f5ffd5b50610213600480360381019061020e9190612f74565b611373565b60405161022091906131c4565b60405180910390f35b348015610234575f5ffd5b5061024f600480360381019061024a91906131e4565b61178d565b005b34801561025c575f5ffd5b5061027760048036038101906102729190612e93565b61195e565b005b348015610284575f5ffd5b5061029f600480360381019061029a9190613222565b611f09565b005b3480156102ac575f5ffd5b506102b5611fda565b6040516102c29190612e47565b60405180910390f35b3480156102d6575f5ffd5b506102f160048036038101906102ec9190612e93565b611fff565b6040516103039695949392919061324d565b60405180910390f35b348015610317575f5ffd5b50610320612075565b60405161032d9190612e47565b60405180910390f35b348015610341575f5ffd5b5061034a612099565b6040516103579190612f5b565b60405180910390f35b34801561036b575f5ffd5b5061038660048036038101906103819190612e93565b61209f565b60405161039997969594939291906132bb565b60405180910390f35b3480156103ad575f5ffd5b506103b6612108565b6040516103c39190612e47565b60405180910390f35b3480156103d7575f5ffd5b506103f260048036038101906103ed9190613222565b61212d565b005b3480156103ff575f5ffd5b5061041a60048036038101906104159190612e93565b61232c565b005b348015610427575f5ffd5b50610442600480360381019061043d9190613222565b6123c4565b60405161044f9190612f5b565b60405180910390f35b348015610463575f5ffd5b5061046c6123d9565b6040516104799190612f5b565b60405180910390f35b34801561048d575f5ffd5b506104a860048036038101906104a39190612e93565b6123df565b005b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052f90613382565b60405180910390fd5b5f4790505f811161057e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610575906133ea565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156105c1573d5f5f3e3d5ffd5b505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205481111561066b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066290613452565b60405180910390fd5b5f60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106106bb576106ba613470565b5b905f5260205f20015490505f60075f8381526020019081526020015f206004015f9054906101000a900460ff1660ff1614801561070b57505f60075f8381526020019081526020015f2060030154115b61074a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610741906134e7565b60405180910390fd5b600260075f8381526020019081526020015f206004015f6101000a81548160ff021916908360ff1602179055504260075f8381526020019081526020015f20600601819055505f60075f8381526020019081526020015f2060020154905060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361098b5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d60075f8581526020019081526020015f20600301546040518263ffffffff1660e01b815260040161089c9190612f5b565b5f604051808303815f87803b1580156108b3575f5ffd5b505af11580156108c5573d5f5f3e3d5ffd5b505050505f3373ffffffffffffffffffffffffffffffffffffffff1660075f8581526020019081526020015f206003015460405161090290613532565b5f6040518083038185875af1925050503d805f811461093c576040519150601f19603f3d011682016040523d82523d5f602084013e610941565b606091505b5050905080610985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097c90613590565b60405180910390fd5b50610a4e565b600b5f8281526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3360075f8681526020019081526020015f20600301546040518363ffffffff1660e01b8152600401610a0c9291906135ae565b6020604051808303815f875af1158015610a28573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4c919061360a565b505b60075f8381526020019081526020015f2060030154600b5f8381526020019081526020015f206003015f828254610a859190613662565b92505081905550505050565b600554341015610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd906136df565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b2e5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1693505b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b865760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692505b60055434118015610be3575060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15610d705760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935060055434610c1a9190613662565b90505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b158015610c87575f5ffd5b505af1158015610c99573d5f5f3e3d5ffd5b50505050505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600554604051610ce690613532565b5f6040518083038185875af1925050503d805f8114610d20576040519150601f19603f3d011682016040523d82523d5f602084013e610d25565b606091505b5050905080610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6090613747565b60405180910390fd5b5050610f09565b5f8111610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da9906137af565b60405180910390fd5b5f8490508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401610df3939291906137cd565b6020604051808303815f875af1158015610e0f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e33919061360a565b505f341115610f07575f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610e8290613532565b5f6040518083038185875af1925050503d805f8114610ebc576040519150601f19603f3d011682016040523d82523d5f602084013e610ec1565b606091505b5050905080610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc90613747565b60405180910390fd5b505b505b5f610f15858585612897565b905081600b5f8381526020019081526020015f206003015f828254610f3a9190613802565b925050819055505f859050828173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610fa2929190613835565b602060405180830381865afa158015610fbd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe19190613870565b10156110a5578073ffffffffffffffffffffffffffffffffffffffff1663095ea7b360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016110639291906135ae565b6020604051808303815f875af115801561107f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a3919061360a565b505b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9dd14d68888610bb86040518463ffffffff1660e01b8152600401611106939291906138dd565b602060405180830381865afa158015611121573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111459190613870565b90505f6040518060e001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018581526020018681526020015f60ff1681526020014281526020015f815250905060065f8154809291906111a890613912565b91905055508060075f60065481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff021916908360ff16021790555060a0820151816005015560c0820151816006015590505060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600654908060018154018082558091505060019003905f5260205f20015f909190919091505560095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919061130a90613912565b91905055503373ffffffffffffffffffffffffffffffffffffffff167f25f958e981f7f2a99eb96852a8dffe251ff392838f2c8e280d160399a90b0fe18989898960405161135b9493929190613959565b60405180910390a25050505050505050565b60065481565b606060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490508211156114015760085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905091505b81831115611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b906139e6565b60405180910390fd5b5f83836114519190613662565b90505f8167ffffffffffffffff81111561146e5761146d613a04565b5b6040519080825280602002602001820160405280156114a757816020015b611494612cf8565b81526020019060019003908161148c5790505b5090505f5f90505b82811015611780575f60085f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082886115019190613802565b8154811061151257611511613470565b5b905f5260205f20015490505f60075f8381526020019081526020015f206002015490505f604051806101c00160405280858b61154e9190613802565b815260200160075f8681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160075f8681526020019081526020015f2060010154815260200160075f8681526020019081526020015f2060020154815260200160075f8681526020019081526020015f2060030154815260200160075f8681526020019081526020015f206004015f9054906101000a900460ff1660ff16815260200160075f8681526020019081526020015f2060050154815260200160075f8681526020019081526020015f20600601548152602001600b5f8581526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b5f8581526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b5f8581526020019081526020015f20600201548152602001600b5f8581526020019081526020015f20600301548152602001600b5f8581526020019081526020015f20600401548152602001600b5f8581526020019081526020015f206005015481525090508085858151811061176557611764613470565b5b602002602001018190525050505080806001019150506114af565b5080925050509392505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461181b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181290613382565b60405180910390fd5b5f8290505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118599190612e47565b602060405180830381865afa158015611874573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118989190613870565b90505f81116118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390613a7b565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b81526004016119179291906135ae565b6020604051808303815f875af1158015611933573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611957919061360a565b5050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490613ae3565b60405180910390fd5b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8481526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a7d57479050611b2b565b600b5f8381526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ae99190612e47565b602060405180830381865afa158015611b04573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b289190613870565b90505b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394ef1501600b5f8581526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b5f8681526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b5f8781526020019081526020015f2060030154610bb860015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b8152600401611c29959493929190613b4e565b5f604051808303815f87803b158015611c40575f5ffd5b505af1158015611c52573d5f5f3e3d5ffd5b505050505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8581526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611ce657479050611d94565b600b5f8481526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d529190612e47565b602060405180830381865afa158015611d6d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d919190613870565b90505b5f8282611da19190613662565b90505f8111611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc90613be9565b60405180910390fd5b80600b5f8681526020019081526020015f20600401819055505f600c5f600b5f8881526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600b5f8881526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600b5f8881526020019081526020015f206002015481526020019081526020015f208190555050505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8e90613382565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154908060050154905086565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6007602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015490806003015490806004015f9054906101000a900460ff16908060050154908060060154905087565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b290613382565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ea9190613c1b565b60045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b190613382565b60405180910390fd5b8060058190555050565b6009602052805f5260405f205f915090505481565b60055481565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205481111561245f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245690613452565b60405180910390fd5b5f60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106124af576124ae613470565b5b905f5260205f20015490505f60075f8381526020019081526020015f206004015f9054906101000a900460ff1660ff161480156124ff57505f60075f8381526020019081526020015f2060030154115b61253e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612535906134e7565b60405180910390fd5b600160075f8381526020019081526020015f206004015f6101000a81548160ff021916908360ff1602179055504260075f8381526020019081526020015f20600601819055505f60075f8381526020019081526020015f206002015490505f600b5f8381526020019081526020015f2060040154116125f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e990613c90565b60405180910390fd5b5f600b5f8381526020019081526020015f206003015490505f600b5f8481526020019081526020015f206004015490505f60075f8681526020019081526020015f206003015490505f83670de0b6b3a7640000836126509190613cae565b61265a9190613d1c565b90505f670de0b6b3a764000082856126729190613cae565b61267c9190613d1c565b905060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8881526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036127b3575f3373ffffffffffffffffffffffffffffffffffffffff168260405161272a90613532565b5f6040518083038185875af1925050503d805f8114612764576040519150601f19603f3d011682016040523d82523d5f602084013e612769565b606091505b50509050806127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a490613590565b60405180910390fd5b50612863565b600b5f8781526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016128219291906135ae565b6020604051808303815f875af115801561283d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612861919061360a565b505b80600b5f8881526020019081526020015f206005015f8282546128869190613802565b925050819055505050505050505050565b5f6128a182612b99565b91505f600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205411156129c157600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20549050612b92565b5f6040518060c001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020015f81526020015f81526020015f8152509050600a5f815480929190612a2f90613912565b919050555080600b5f600a5481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a08201518160050155905050600a54600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f2081905550600a549150505b9392505050565b5f5f6008612ba684612bda565b612bb09190613662565b6001901b90505f818285612bc49190613d1c565b612bce9190613cae565b90508092505050919050565b5f5f5f90507001000000000000000000000000000000008310612c0e57608083901c9250608081612c0b9190613802565b90505b680100000000000000008310612c3557604083901c9250604081612c329190613802565b90505b6401000000008310612c5857602083901c9250602081612c559190613802565b90505b620100008310612c7957601083901c9250601081612c769190613802565b90505b6101008310612c9957600883901c9250600881612c969190613802565b90505b60108310612cb857600483901c9250600481612cb59190613802565b90505b60048310612cd757600283901c9250600281612cd49190613802565b90505b60028310612cef57600181612cec9190613802565b90505b80915050919050565b604051806101c001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f60ff1681526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81525090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612dcb82612da2565b9050919050565b612ddb81612dc1565b8114612de5575f5ffd5b50565b5f81359050612df681612dd2565b92915050565b5f60208284031215612e1157612e10612d9e565b5b5f612e1e84828501612de8565b91505092915050565b5f612e3182612da2565b9050919050565b612e4181612e27565b82525050565b5f602082019050612e5a5f830184612e38565b92915050565b5f819050919050565b612e7281612e60565b8114612e7c575f5ffd5b50565b5f81359050612e8d81612e69565b92915050565b5f60208284031215612ea857612ea7612d9e565b5b5f612eb584828501612e7f565b91505092915050565b612ec781612e27565b8114612ed1575f5ffd5b50565b5f81359050612ee281612ebe565b92915050565b5f5f5f5f60808587031215612f0057612eff612d9e565b5b5f612f0d87828801612ed4565b9450506020612f1e87828801612ed4565b9350506040612f2f87828801612e7f565b9250506060612f4087828801612e7f565b91505092959194509250565b612f5581612e60565b82525050565b5f602082019050612f6e5f830184612f4c565b92915050565b5f5f5f60608486031215612f8b57612f8a612d9e565b5b5f612f9886828701612ed4565b9350506020612fa986828701612e7f565b9250506040612fba86828701612e7f565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612ff681612e60565b82525050565b61300581612e27565b82525050565b5f60ff82169050919050565b6130208161300b565b82525050565b6101c082015f82015161303b5f850182612fed565b50602082015161304e6020850182612ffc565b5060408201516130616040850182612fed565b5060608201516130746060850182612fed565b5060808201516130876080850182612fed565b5060a082015161309a60a0850182613017565b5060c08201516130ad60c0850182612fed565b5060e08201516130c060e0850182612fed565b506101008201516130d5610100850182612ffc565b506101208201516130ea610120850182612ffc565b506101408201516130ff610140850182612fed565b50610160820151613114610160850182612fed565b50610180820151613129610180850182612fed565b506101a082015161313e6101a0850182612fed565b50505050565b5f61314f8383613026565b6101c08301905092915050565b5f602082019050919050565b5f61317282612fc4565b61317c8185612fce565b935061318783612fde565b805f5b838110156131b757815161319e8882613144565b97506131a98361315c565b92505060018101905061318a565b5085935050505092915050565b5f6020820190508181035f8301526131dc8184613168565b905092915050565b5f5f604083850312156131fa576131f9612d9e565b5b5f61320785828601612ed4565b925050602061321885828601612ed4565b9150509250929050565b5f6020828403121561323757613236612d9e565b5b5f61324484828501612ed4565b91505092915050565b5f60c0820190506132605f830189612e38565b61326d6020830188612e38565b61327a6040830187612f4c565b6132876060830186612f4c565b6132946080830185612f4c565b6132a160a0830184612f4c565b979650505050505050565b6132b58161300b565b82525050565b5f60e0820190506132ce5f83018a612e38565b6132db6020830189612f4c565b6132e86040830188612f4c565b6132f56060830187612f4c565b61330260808301866132ac565b61330f60a0830185612f4c565b61331c60c0830184612f4c565b98975050505050505050565b5f82825260208201905092915050565b7f4e6f742074686520636f6e7472616374206f776e6572000000000000000000005f82015250565b5f61336c601683613328565b915061337782613338565b602082019050919050565b5f6020820190508181035f83015261339981613360565b9050919050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f6133d4601283613328565b91506133df826133a0565b602082019050919050565b5f6020820190508181035f830152613401816133c8565b9050919050565b7f4f72646572206964206973206e6f742076616c696400000000000000000000005f82015250565b5f61343c601583613328565b915061344782613408565b602082019050919050565b5f6020820190508181035f83015261346981613430565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f72646572206973206e6f74206f70656e0000000000000000000000000000005f82015250565b5f6134d1601183613328565b91506134dc8261349d565b602082019050919050565b5f6020820190508181035f8301526134fe816134c5565b9050919050565b5f81905092915050565b50565b5f61351d5f83613505565b91506135288261350f565b5f82019050919050565b5f61353c82613512565b9150819050919050565b7f4661696c656420746f2073656e642045544800000000000000000000000000005f82015250565b5f61357a601283613328565b915061358582613546565b602082019050919050565b5f6020820190508181035f8301526135a78161356e565b9050919050565b5f6040820190506135c15f830185612e38565b6135ce6020830184612f4c565b9392505050565b5f8115159050919050565b6135e9816135d5565b81146135f3575f5ffd5b50565b5f81519050613604816135e0565b92915050565b5f6020828403121561361f5761361e612d9e565b5b5f61362c848285016135f6565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61366c82612e60565b915061367783612e60565b925082820390508181111561368f5761368e613635565b5b92915050565b7f4e6f7420656e6f756768206f7261636c652066656500000000000000000000005f82015250565b5f6136c9601583613328565b91506136d482613695565b602082019050919050565b5f6020820190508181035f8301526136f6816136bd565b9050919050565b7f4661696c656420746f2073656e64206f7261636c6520666565000000000000005f82015250565b5f613731601983613328565b915061373c826136fd565b602082019050919050565b5f6020820190508181035f83015261375e81613725565b9050919050565b7f4d757374207370656369667920616e20616d6f756e7420746f207377617000005f82015250565b5f613799601e83613328565b91506137a482613765565b602082019050919050565b5f6020820190508181035f8301526137c68161378d565b9050919050565b5f6060820190506137e05f830186612e38565b6137ed6020830185612e38565b6137fa6040830184612f4c565b949350505050565b5f61380c82612e60565b915061381783612e60565b925082820190508082111561382f5761382e613635565b5b92915050565b5f6040820190506138485f830185612e38565b6138556020830184612e38565b9392505050565b5f8151905061386a81612e69565b92915050565b5f6020828403121561388557613884612d9e565b5b5f6138928482850161385c565b91505092915050565b5f819050919050565b5f819050919050565b5f6138c76138c26138bd8461389b565b6138a4565b612e60565b9050919050565b6138d7816138ad565b82525050565b5f6060820190506138f05f830186612e38565b6138fd6020830185612e38565b61390a60408301846138ce565b949350505050565b5f61391c82612e60565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361394e5761394d613635565b5b600182019050919050565b5f60808201905061396c5f830187612e38565b6139796020830186612e38565b6139866040830185612f4c565b6139936060830184612f4c565b95945050505050565b7f496e76616c696420706167696e6174696f6e2072616e676500000000000000005f82015250565b5f6139d0601883613328565b91506139db8261399c565b602082019050919050565b5f6020820190508181035f8301526139fd816139c4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e6f20746f6b656e2062616c616e636520746f207769746864726177000000005f82015250565b5f613a65601c83613328565b9150613a7082613a31565b602082019050919050565b5f6020820190508181035f830152613a9281613a59565b9050919050565b7f4e6f7420746865206f7261636c650000000000000000000000000000000000005f82015250565b5f613acd600e83613328565b9150613ad882613a99565b602082019050919050565b5f6020820190508181035f830152613afa81613ac1565b9050919050565b5f62ffffff82169050919050565b5f613b29613b24613b1f8461389b565b6138a4565b613b01565b9050919050565b613b3981613b0f565b82525050565b613b4881612dc1565b82525050565b5f60a082019050613b615f830188612e38565b613b6e6020830187612e38565b613b7b6040830186612f4c565b613b886060830185613b30565b613b956080830184613b3f565b9695505050505050565b7f4661696c656420746f2070726f636573732073776170000000000000000000005f82015250565b5f613bd3601683613328565b9150613bde82613b9f565b602082019050919050565b5f6020820190508181035f830152613c0081613bc7565b9050919050565b5f81519050613c1581612ebe565b92915050565b5f60208284031215613c3057613c2f612d9e565b5b5f613c3d84828501613c07565b91505092915050565b7f4f72646572206973206e6f7420706c61636564207965742e00000000000000005f82015250565b5f613c7a601883613328565b9150613c8582613c46565b602082019050919050565b5f6020820190508181035f830152613ca781613c6e565b9050919050565b5f613cb882612e60565b9150613cc383612e60565b9250828202613cd181612e60565b91508282048414831517613ce857613ce7613635565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d2682612e60565b9150613d3183612e60565b925082613d4157613d40613cef565b5b82820490509291505056fea2646970667358221220df7f1ac82219dc665858868495d27fe15e91dc7b9edccc488eea518f234239e364736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000032d6b39bc53f9d85d7d64034bad9e5061b408e38
-----Decoded View---------------
Arg [0] : _tokenSwapContract (address): 0x32d6B39bc53F9D85d7d64034bAD9e5061b408e38
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000032d6b39bc53f9d85d7d64034bad9e5061b408e38
Deployed Bytecode Sourcemap
994:13640:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14009:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1230:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5556:1017;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3360:2152;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2146:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9965:1696;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14268:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8085:1293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12003:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1135:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2595:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;1054:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2563:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2179:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;1296:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11732:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12144:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2272:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1324:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6581:1433;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14009:211;2849:5;;;;;;;;;;;2835:19;;:10;:19;;;2827:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;14089:15:::1;14107:21;14089:39;;14157:1;14147:7;:11;14139:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;14192:2;:11;;:20;14204:7;14192:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14078:142;14009:211:::0;:::o;1230:32::-;;;;;;;;;;;;;:::o;5556:1017::-;5664:14;:26;5679:10;5664:26;;;;;;;;;;;;;;;;5652:10;:38;;5644:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5726:15;5744:12;:24;5757:10;5744:24;;;;;;;;;;;;;;;5769:10;5744:36;;;;;;;;:::i;:::-;;;;;;;;;;5726:54;;5823:1;5799:6;:15;5806:7;5799:15;;;;;;;;;;;:22;;;;;;;;;;;;:25;;;:55;;;;;5853:1;5828:6;:15;5835:7;5828:15;;;;;;;;;;;:24;;;:26;5799:55;5791:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;5942:1;5919:6;:15;5926:7;5919:15;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;5980:15;5954:6;:15;5961:7;5954:15;;;;;;;;;;;:25;;:41;;;;6048:19;6070:6;:15;6077:7;6070:15;;;;;;;;;;;:27;;;6048:49;;6144:4;;;;;;;;;;;6111:37;;:10;:23;6122:11;6111:23;;;;;;;;;;;:31;;;;;;;;;;;;:37;;;6108:367;;6180:4;;;;;;;;;;;6174:20;;;6195:6;:15;6202:7;6195:15;;;;;;;;;;;:24;;;6174:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6236:12;6254:10;:15;;6277:6;:15;6284:7;6277:15;;;;;;;;;;;:24;;;6254:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6235:71;;;6329:7;6321:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;6159:212;6108:367;;;6396:10;:23;6407:11;6396:23;;;;;;;;;;;:31;;;;;;;;;;;;6389:48;;;6438:10;6450:6;:15;6457:7;6450:15;;;;;;;;;;;:24;;;6389:86;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6108:367;6541:6;:15;6548:7;6541:15;;;;;;;;;;;:24;;;6500:10;:23;6511:11;6500:23;;;;;;;;;;;:37;;;:65;;;;;;;:::i;:::-;;;;;;;;5606:967;;5556:1017;:::o;3360:2152::-;3497:9;;3484;:22;;3476:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;3572:1;3555:19;;:7;:19;;;3552:36;;3584:4;;;;;;;;;;;3576:12;;3552:36;3620:1;3602:20;;:8;:20;;;3599:38;;3633:4;;;;;;;;;;;3624:13;;3599:38;3666:9;;3654;:21;:47;;;;;3696:4;;;;;;;;;;;3679:22;;:7;:22;;;3654:47;3650:892;;;3728:4;;;;;;;;;;;3718:14;;3770:9;;3758;:21;;;;:::i;:::-;3747:32;;3794:18;3821:4;;;;;;;;;;;3794:32;;3841:12;:20;;;3869:8;3841:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3951:9;3966:6;;;;;;;;;;;:11;;3985:9;;3966:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3950:49;;;4022:4;4014:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;3703:365;;3650:892;;;4106:1;4095:8;:12;4087:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;4201:12;4223:7;4201:30;;4246:5;:18;;;4265:10;4285:4;4292:8;4246:55;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4384:1;4374:9;:11;4371:160;;;4406:9;4421:6;;;;;;;;;;;:11;;4440:9;4421:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4405:49;;;4481:4;4473:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;4386:145;4371:160;4072:470;3650:892;4562:19;4584:38;4599:7;4607:8;4616:5;4584:14;:38::i;:::-;4562:60;;4674:8;4633:10;:23;4644:11;4633:23;;;;;;;;;;;:37;;;:49;;;;;;;:::i;:::-;;;;;;;;4722:12;4744:7;4722:30;;4816:8;4766:5;:15;;;4790:4;4797:17;;;;;;;;;;;4766:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;4763:126;;;4839:5;:13;;;4853:17;;;;;;;;;;;4871;4839:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4763:126;4925:12;4940:9;;;;;;;;;;;:18;;;4959:7;4968:8;4977:4;4940:42;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4925:57;;4993:21;5017:251;;;;;;;;5044:10;5017:251;;;;;;5078:7;5017:251;;;;5112:11;5017:251;;;;5148:8;5017:251;;;;5178:1;5017:251;;;;;;5214:15;5017:251;;;;5255:1;5017:251;;;4993:275;;5281:11;;:13;;;;;;;;;:::i;:::-;;;;;;5327:8;5305:6;:19;5312:11;;5305:19;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5346:12;:24;5359:10;5346:24;;;;;;;;;;;;;;;5376:11;;5346:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5399:14;:26;5414:10;5399:26;;;;;;;;;;;;;;;;:28;;;;;;;;;:::i;:::-;;;;;;5457:10;5445:59;;;5469:7;5478:8;5488:5;5495:8;5445:59;;;;;;;;;:::i;:::-;;;;;;;;3465:2047;;;;3360:2152;;;;:::o;2146:26::-;;;;:::o;9965:1696::-;10063:17;10110:12;:18;10123:4;10110:18;;;;;;;;;;;;;;;:25;;;;10103:4;:32;10099:97;;;10159:12;:18;10172:4;10159:18;;;;;;;;;;;;;;;:25;;;;10152:32;;10099:97;10224:4;10214:6;:14;;10206:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;10270:12;10292:6;10285:4;:13;;;;:::i;:::-;10270:28;;10309:33;10360:4;10345:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;10309:56;;10391:9;10403:1;10391:13;;10386:1233;10410:4;10406:1;:8;10386:1233;;;10436:18;10457:12;:18;10470:4;10457:18;;;;;;;;;;;;;;;10485:1;10476:6;:10;;;;:::i;:::-;10457:30;;;;;;;;:::i;:::-;;;;;;;;;;10436:51;;10502:19;10524:6;:18;10531:10;10524:18;;;;;;;;;;;:30;;;10502:52;;10571:25;10599:899;;;;;;;;10652:1;10643:6;:10;;;;:::i;:::-;10599:899;;;;10678:6;:18;10685:10;10678:18;;;;;;;;;;;:23;;;;;;;;;;;;10599:899;;;;;;10729:6;:18;10736:10;10729:18;;;;;;;;;;;:26;;;10599:899;;;;10787:6;:18;10794:10;10787:18;;;;;;;;;;;:30;;;10599:899;;;;10846:6;:18;10853:10;10846:18;;;;;;;;;;;:27;;;10599:899;;;;10917:6;:18;10924:10;10917:18;;;;;;;;;;;:25;;;;;;;;;;;;10599:899;;;;;;11014:6;:18;11021:10;11014:18;;;;;;;;;;;:28;;;10599:899;;;;11072:6;:18;11079:10;11072:18;;;;;;;;;;;:28;;;10599:899;;;;11128:10;:23;11139:11;11128:23;;;;;;;;;;;:31;;;;;;;;;;;;10599:899;;;;;;11188:10;:23;11199:11;11188:23;;;;;;;;;;;:32;;;;;;;;;;;;10599:899;;;;;;11246:10;:23;11257:11;11246:23;;;;;;;;;;;:29;;;10599:899;;;;11309:10;:23;11320:11;11309:23;;;;;;;;;;;:37;;;10599:899;;;;11376:10;:23;11387:11;11376:23;;;;;;;;;;;:33;;;10599:899;;;;11444:10;:23;11455:11;11444:23;;;;;;;;;;;:38;;;10599:899;;;10571:927;;11598:9;11577:15;11593:1;11577:18;;;;;;;;:::i;:::-;;;;;;;:30;;;;10421:1198;;;10416:3;;;;;;;10386:1233;;;;11638:15;11631:22;;;;9965:1696;;;;;:::o;14268:285::-;2849:5;;;;;;;;;;;2835:19;;:10;:19;;;2827:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;14357:12:::1;14379:5;14357:28;;14396:15;14414:5;:15;;;14438:4;14414:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14396:48;;14473:1;14463:7;:11;14455:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;14518:5;:14;;;14533:2;14537:7;14518:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14346:207;;14268:285:::0;;:::o;8085:1293::-;3017:6;;;;;;;;;;;3003:20;;:10;:20;;;2995:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;8323:20:::1;8393:4;;;;;;;;;;;8357:40;;:10;:23;8368:11;8357:23;;;;;;;;;;;:32;;;;;;;;;;;;:40;;::::0;8354:203:::1;;8427:21;8412:36;;8354:203;;;8499:10;:23;8510:11;8499:23;;;;;;;;;;;:32;;;;;;;;;;;;8492:50;;;8551:4;8492:65;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8477:80;;8354:203;8570:9;;;;;;;;;;;:19;;;8604:10;:23;8615:11;8604:23;;;;;;;;;;;:31;;;;;;;;;;;;8650:10;:23;8661:11;8650:23;;;;;;;;;;;:32;;;;;;;;;;;;8697:10;:23;8708:11;8697:23;;;;;;;;;;;:37;;;8749:4;8776:6;;;;;;;;;;;8570:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8807:18;8875:4;;;;;;;;;;;8839:40;;:10;:23;8850:11;8839:23;;;;;;;;;;;:32;;;;;;;;;;;;:40;;::::0;8836:199:::1;;8907:21;8894:34;;8836:199;;;8977:10;:23;8988:11;8977:23;;;;;;;;;;;:32;;;;;;;;;;;;8970:50;;;9029:4;8970:65;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8957:78;;8836:199;9046:14;9076:12;9063:10;:25;;;;:::i;:::-;9046:42;;9114:1;9107:6;:8;9099:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;9241:6;9205:10;:23;9216:11;9205:23;;;;;;;;;;;:33;;:42;;;;9369:1;9258:12;:45;9271:10;:23;9282:11;9271:23;;;;;;;;;;;:31;;;;;;;;;;;;9258:45;;;;;;;;;;;;;;;:79;9304:10;:23;9315:11;9304:23;;;;;;;;;;;:32;;;;;;;;;;;;9258:79;;;;;;;;;;;;;;;:110;9338:10;:23;9349:11;9338:23;;;;;;;;;;;:29;;;9258:110;;;;;;;;;;;:112;;;;8152:1226;;;8085:1293:::0;:::o;12003:90::-;2849:5;;;;;;;;;;;2835:19;;:10;:19;;;2827:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;12078:7:::1;12069:6;;:16;;;;;;;;;;;;;;;;;;12003:90:::0;:::o;1135:21::-;;;;;;;;;;;;;:::o;2595:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1054:20::-;;;;;;;;;;;;;:::o;2563:25::-;;;;:::o;2179:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1296:19::-;;;;;;;;;;;;;:::o;11732:220::-;2849:5;;;;;;;;;;;2835:19;;:10;:19;;;2827:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;11840:18:::1;11820:17;;:38;;;;;;;;;;;;;;;;;;11892:17;;;;;;;;;;;11869:9;;:41;;;;;;;;;;;;;;;;;;11928:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11921:4;;:23;;;;;;;;;;;;;;;;;;11732:220:::0;:::o;12144:99::-;2849:5;;;;;;;;;;;2835:19;;:10;:19;;;2827:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;12225:10:::1;12213:9;:22;;;;12144:99:::0;:::o;2272:46::-;;;;;;;;;;;;;;;;;:::o;1324:34::-;;;;:::o;6581:1433::-;6698:14;:26;6713:10;6698:26;;;;;;;;;;;;;;;;6686:10;:38;;6678:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6760:15;6778:12;:24;6791:10;6778:24;;;;;;;;;;;;;;;6803:10;6778:36;;;;;;;;:::i;:::-;;;;;;;;;;6760:54;;6857:1;6833:6;:15;6840:7;6833:15;;;;;;;;;;;:22;;;;;;;;;;;;:25;;;:55;;;;;6887:1;6862:6;:15;6869:7;6862:15;;;;;;;;;;;:24;;;:26;6833:55;6825:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;6976:1;6953:6;:15;6960:7;6953:15;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;7027:15;7001:6;:15;7008:7;7001:15;;;;;;;;;;;:25;;:41;;;;7099:19;7121:6;:15;7128:7;7121:15;;;;;;;;;;;:27;;;7099:49;;7201:1;7167:10;:23;7178:11;7167:23;;;;;;;;;;;:33;;;:35;7159:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7241:21;7265:10;:23;7276:11;7265:23;;;;;;;;;;;:37;;;7241:61;;7313:22;7338:10;:23;7349:11;7338:23;;;;;;;;;;;:33;;;7313:58;;7382:18;7403:6;:15;7410:7;7403:15;;;;;;;;;;;:24;;;7382:45;;7438:13;7476;7467:6;7454:10;:19;;;;:::i;:::-;:35;;;;:::i;:::-;7438:51;;7500:19;7547:6;7539:5;7522:14;:22;;;;:::i;:::-;:31;;;;:::i;:::-;7500:53;;7603:4;;;;;;;;;;;7569:38;;:10;:23;7580:11;7569:23;;;;;;;;;;;:32;;;;;;;;;;;;:38;;;7566:376;;7728:12;7746:10;:15;;7769:11;7746:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7727:58;;;7808:7;7800:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;7618:232;7566:376;;;7875:10;:23;7886:11;7875:23;;;;;;;;;;;:32;;;;;;;;;;;;7868:49;;;7918:10;7930:11;7868:74;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7566:376;7995:11;7953:10;:23;7964:11;7953:23;;;;;;;;;;;:38;;;:53;;;;;;;:::i;:::-;;;;;;;;6630:1384;;;;;;;6581:1433;:::o;13213:757::-;13301:4;13373:22;13389:5;13373:15;:22::i;:::-;13365:30;;13458:1;13419:12;:21;13432:7;13419:21;;;;;;;;;;;;;;;:31;13441:8;13419:31;;;;;;;;;;;;;;;:38;13451:5;13419:38;;;;;;;;;;;;:40;13416:103;;;13481:12;:21;13494:7;13481:21;;;;;;;;;;;;;;;:31;13503:8;13481:31;;;;;;;;;;;;;;;:38;13513:5;13481:38;;;;;;;;;;;;13474:45;;;;13416:103;13540:27;13570:233;;;;;;;;13603:7;13570:233;;;;;;13634:8;13570:233;;;;;;13663:5;13570:233;;;;13697:1;13570:233;;;;13723:1;13570:233;;;;13790:1;13570:233;;;13540:263;;13814:10;;:12;;;;;;;;;:::i;:::-;;;;;;13862:10;13837;:22;13848:10;;13837:22;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13924:10;;13883:12;:21;13896:7;13883:21;;;;;;;;;;;;;;;:31;13905:8;13883:31;;;;;;;;;;;;;;;:38;13915:5;13883:38;;;;;;;;;;;:51;;;;13952:10;;13945:17;;;13213:757;;;;;;:::o;12325:269::-;12387:7;12407:17;12447:1;12433:11;12438:5;12433:4;:11::i;:::-;:15;;;;:::i;:::-;12427:1;:22;;12407:42;;12502:20;12547:9;12534;12526:5;:17;;;;:::i;:::-;12525:31;;;;:::i;:::-;12502:54;;12574:12;12567:19;;;;12325:269;;;:::o;12664:537::-;12711:7;12731:14;12748:1;12731:18;;12769:6;12764:1;:11;12760:46;;12785:3;12779:9;;;;;12800:3;12790:13;;;;;:::i;:::-;;;12760:46;12825:5;12820:1;:10;12816:44;;12841:2;12835:8;;;;;12855:2;12845:12;;;;;:::i;:::-;;;12816:44;12879:5;12874:1;:10;12870:44;;12895:2;12889:8;;;;;12909:2;12899:12;;;;;:::i;:::-;;;12870:44;12933:5;12928:1;:10;12924:44;;12949:2;12943:8;;;;;12963:2;12953:12;;;;;:::i;:::-;;;12924:44;12987:4;12982:1;:9;12978:43;;13003:1;12997:7;;;;;13017:1;13007:11;;;;;:::i;:::-;;;12978:43;13040:4;13035:1;:9;13031:43;;13056:1;13050:7;;;;;13070:1;13060:11;;;;;:::i;:::-;;;13031:43;13093:4;13088:1;:9;13084:43;;13109:1;13103:7;;;;;13123:1;13113:11;;;;;:::i;:::-;;;13084:43;13146:4;13141:1;:9;13137:33;;13166:1;13156:11;;;;;:::i;:::-;;;13137:33;13187:6;13180:13;;;12664:537;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:104::-;511:7;540:24;558:5;540:24;:::i;:::-;529:35;;466:104;;;:::o;576:138::-;657:32;683:5;657:32;:::i;:::-;650:5;647:43;637:71;;704:1;701;694:12;637:71;576:138;:::o;720:155::-;774:5;812:6;799:20;790:29;;828:41;863:5;828:41;:::i;:::-;720:155;;;;:::o;881:345::-;948:6;997:2;985:9;976:7;972:23;968:32;965:119;;;1003:79;;:::i;:::-;965:119;1123:1;1148:61;1201:7;1192:6;1181:9;1177:22;1148:61;:::i;:::-;1138:71;;1094:125;881:345;;;;:::o;1232:96::-;1269:7;1298:24;1316:5;1298:24;:::i;:::-;1287:35;;1232:96;;;:::o;1334:118::-;1421:24;1439:5;1421:24;:::i;:::-;1416:3;1409:37;1334:118;;:::o;1458:222::-;1551:4;1589:2;1578:9;1574:18;1566:26;;1602:71;1670:1;1659:9;1655:17;1646:6;1602:71;:::i;:::-;1458:222;;;;:::o;1686:77::-;1723:7;1752:5;1741:16;;1686:77;;;:::o;1769:122::-;1842:24;1860:5;1842:24;:::i;:::-;1835:5;1832:35;1822:63;;1881:1;1878;1871:12;1822:63;1769:122;:::o;1897:139::-;1943:5;1981:6;1968:20;1959:29;;1997:33;2024:5;1997:33;:::i;:::-;1897:139;;;;:::o;2042:329::-;2101:6;2150:2;2138:9;2129:7;2125:23;2121:32;2118:119;;;2156:79;;:::i;:::-;2118:119;2276:1;2301:53;2346:7;2337:6;2326:9;2322:22;2301:53;:::i;:::-;2291:63;;2247:117;2042:329;;;;:::o;2377:122::-;2450:24;2468:5;2450:24;:::i;:::-;2443:5;2440:35;2430:63;;2489:1;2486;2479:12;2430:63;2377:122;:::o;2505:139::-;2551:5;2589:6;2576:20;2567:29;;2605:33;2632:5;2605:33;:::i;:::-;2505:139;;;;:::o;2650:765::-;2736:6;2744;2752;2760;2809:3;2797:9;2788:7;2784:23;2780:33;2777:120;;;2816:79;;:::i;:::-;2777:120;2936:1;2961:53;3006:7;2997:6;2986:9;2982:22;2961:53;:::i;:::-;2951:63;;2907:117;3063:2;3089:53;3134:7;3125:6;3114:9;3110:22;3089:53;:::i;:::-;3079:63;;3034:118;3191:2;3217:53;3262:7;3253:6;3242:9;3238:22;3217:53;:::i;:::-;3207:63;;3162:118;3319:2;3345:53;3390:7;3381:6;3370:9;3366:22;3345:53;:::i;:::-;3335:63;;3290:118;2650:765;;;;;;;:::o;3421:118::-;3508:24;3526:5;3508:24;:::i;:::-;3503:3;3496:37;3421:118;;:::o;3545:222::-;3638:4;3676:2;3665:9;3661:18;3653:26;;3689:71;3757:1;3746:9;3742:17;3733:6;3689:71;:::i;:::-;3545:222;;;;:::o;3773:619::-;3850:6;3858;3866;3915:2;3903:9;3894:7;3890:23;3886:32;3883:119;;;3921:79;;:::i;:::-;3883:119;4041:1;4066:53;4111:7;4102:6;4091:9;4087:22;4066:53;:::i;:::-;4056:63;;4012:117;4168:2;4194:53;4239:7;4230:6;4219:9;4215:22;4194:53;:::i;:::-;4184:63;;4139:118;4296:2;4322:53;4367:7;4358:6;4347:9;4343:22;4322:53;:::i;:::-;4312:63;;4267:118;3773:619;;;;;:::o;4398:139::-;4490:6;4524:5;4518:12;4508:22;;4398:139;;;:::o;4543:209::-;4667:11;4701:6;4696:3;4689:19;4741:4;4736:3;4732:14;4717:29;;4543:209;;;;:::o;4758:157::-;4850:4;4873:3;4865:11;;4903:4;4898:3;4894:14;4886:22;;4758:157;;;:::o;4921:108::-;4998:24;5016:5;4998:24;:::i;:::-;4993:3;4986:37;4921:108;;:::o;5035:::-;5112:24;5130:5;5112:24;:::i;:::-;5107:3;5100:37;5035:108;;:::o;5149:86::-;5184:7;5224:4;5217:5;5213:16;5202:27;;5149:86;;;:::o;5241:102::-;5314:22;5330:5;5314:22;:::i;:::-;5309:3;5302:35;5241:102;;:::o;5419:2675::-;5556:6;5551:3;5547:16;5655:4;5648:5;5644:16;5638:23;5674:63;5731:4;5726:3;5722:14;5708:12;5674:63;:::i;:::-;5573:174;5829:4;5822:5;5818:16;5812:23;5848:63;5905:4;5900:3;5896:14;5882:12;5848:63;:::i;:::-;5757:164;6006:4;5999:5;5995:16;5989:23;6025:63;6082:4;6077:3;6073:14;6059:12;6025:63;:::i;:::-;5931:167;6187:4;6180:5;6176:16;6170:23;6206:63;6263:4;6258:3;6254:14;6240:12;6206:63;:::i;:::-;6108:171;6365:4;6358:5;6354:16;6348:23;6384:63;6441:4;6436:3;6432:14;6418:12;6384:63;:::i;:::-;6289:168;6541:4;6534:5;6530:16;6524:23;6560:59;6613:4;6608:3;6604:14;6590:12;6560:59;:::i;:::-;6467:162;6716:4;6709:5;6705:16;6699:23;6735:63;6792:4;6787:3;6783:14;6769:12;6735:63;:::i;:::-;6639:169;6895:4;6888:5;6884:16;6878:23;6914:63;6971:4;6966:3;6962:14;6948:12;6914:63;:::i;:::-;6818:169;7072:6;7065:5;7061:18;7055:25;7093:65;7150:6;7145:3;7141:16;7127:12;7093:65;:::i;:::-;6997:171;7254:6;7247:5;7243:18;7237:25;7275:65;7332:6;7327:3;7323:16;7309:12;7275:65;:::i;:::-;7178:172;7433:6;7426:5;7422:18;7416:25;7454:65;7511:6;7506:3;7502:16;7488:12;7454:65;:::i;:::-;7360:169;7620:6;7613:5;7609:18;7603:25;7641:65;7698:6;7693:3;7689:16;7675:12;7641:65;:::i;:::-;7539:177;7803:6;7796:5;7792:18;7786:25;7824:65;7881:6;7876:3;7872:16;7858:12;7824:65;:::i;:::-;7726:173;7991:6;7984:5;7980:18;7974:25;8012:65;8069:6;8064:3;8060:16;8046:12;8012:65;:::i;:::-;7909:178;5525:2569;5419:2675;;:::o;8100:281::-;8219:10;8240:96;8332:3;8324:6;8240:96;:::i;:::-;8368:6;8363:3;8359:16;8345:30;;8100:281;;;;:::o;8387:138::-;8482:4;8514;8509:3;8505:14;8497:22;;8387:138;;;:::o;8605:932::-;8774:3;8803:79;8876:5;8803:79;:::i;:::-;8898:111;9002:6;8997:3;8898:111;:::i;:::-;8891:118;;9033:81;9108:5;9033:81;:::i;:::-;9137:7;9168:1;9153:359;9178:6;9175:1;9172:13;9153:359;;;9254:6;9248:13;9281:113;9390:3;9375:13;9281:113;:::i;:::-;9274:120;;9417:85;9495:6;9417:85;:::i;:::-;9407:95;;9213:299;9200:1;9197;9193:9;9188:14;;9153:359;;;9157:14;9528:3;9521:10;;8779:758;;;8605:932;;;;:::o;9543:473::-;9736:4;9774:2;9763:9;9759:18;9751:26;;9823:9;9817:4;9813:20;9809:1;9798:9;9794:17;9787:47;9851:158;10004:4;9995:6;9851:158;:::i;:::-;9843:166;;9543:473;;;;:::o;10022:474::-;10090:6;10098;10147:2;10135:9;10126:7;10122:23;10118:32;10115:119;;;10153:79;;:::i;:::-;10115:119;10273:1;10298:53;10343:7;10334:6;10323:9;10319:22;10298:53;:::i;:::-;10288:63;;10244:117;10400:2;10426:53;10471:7;10462:6;10451:9;10447:22;10426:53;:::i;:::-;10416:63;;10371:118;10022:474;;;;;:::o;10502:329::-;10561:6;10610:2;10598:9;10589:7;10585:23;10581:32;10578:119;;;10616:79;;:::i;:::-;10578:119;10736:1;10761:53;10806:7;10797:6;10786:9;10782:22;10761:53;:::i;:::-;10751:63;;10707:117;10502:329;;;;:::o;10837:775::-;11070:4;11108:3;11097:9;11093:19;11085:27;;11122:71;11190:1;11179:9;11175:17;11166:6;11122:71;:::i;:::-;11203:72;11271:2;11260:9;11256:18;11247:6;11203:72;:::i;:::-;11285;11353:2;11342:9;11338:18;11329:6;11285:72;:::i;:::-;11367;11435:2;11424:9;11420:18;11411:6;11367:72;:::i;:::-;11449:73;11517:3;11506:9;11502:19;11493:6;11449:73;:::i;:::-;11532;11600:3;11589:9;11585:19;11576:6;11532:73;:::i;:::-;10837:775;;;;;;;;;:::o;11618:112::-;11701:22;11717:5;11701:22;:::i;:::-;11696:3;11689:35;11618:112;;:::o;11736:878::-;11993:4;12031:3;12020:9;12016:19;12008:27;;12045:71;12113:1;12102:9;12098:17;12089:6;12045:71;:::i;:::-;12126:72;12194:2;12183:9;12179:18;12170:6;12126:72;:::i;:::-;12208;12276:2;12265:9;12261:18;12252:6;12208:72;:::i;:::-;12290;12358:2;12347:9;12343:18;12334:6;12290:72;:::i;:::-;12372:69;12436:3;12425:9;12421:19;12412:6;12372:69;:::i;:::-;12451:73;12519:3;12508:9;12504:19;12495:6;12451:73;:::i;:::-;12534;12602:3;12591:9;12587:19;12578:6;12534:73;:::i;:::-;11736:878;;;;;;;;;;:::o;12620:169::-;12704:11;12738:6;12733:3;12726:19;12778:4;12773:3;12769:14;12754:29;;12620:169;;;;:::o;12795:172::-;12935:24;12931:1;12923:6;12919:14;12912:48;12795:172;:::o;12973:366::-;13115:3;13136:67;13200:2;13195:3;13136:67;:::i;:::-;13129:74;;13212:93;13301:3;13212:93;:::i;:::-;13330:2;13325:3;13321:12;13314:19;;12973:366;;;:::o;13345:419::-;13511:4;13549:2;13538:9;13534:18;13526:26;;13598:9;13592:4;13588:20;13584:1;13573:9;13569:17;13562:47;13626:131;13752:4;13626:131;:::i;:::-;13618:139;;13345:419;;;:::o;13770:168::-;13910:20;13906:1;13898:6;13894:14;13887:44;13770:168;:::o;13944:366::-;14086:3;14107:67;14171:2;14166:3;14107:67;:::i;:::-;14100:74;;14183:93;14272:3;14183:93;:::i;:::-;14301:2;14296:3;14292:12;14285:19;;13944:366;;;:::o;14316:419::-;14482:4;14520:2;14509:9;14505:18;14497:26;;14569:9;14563:4;14559:20;14555:1;14544:9;14540:17;14533:47;14597:131;14723:4;14597:131;:::i;:::-;14589:139;;14316:419;;;:::o;14741:171::-;14881:23;14877:1;14869:6;14865:14;14858:47;14741:171;:::o;14918:366::-;15060:3;15081:67;15145:2;15140:3;15081:67;:::i;:::-;15074:74;;15157:93;15246:3;15157:93;:::i;:::-;15275:2;15270:3;15266:12;15259:19;;14918:366;;;:::o;15290:419::-;15456:4;15494:2;15483:9;15479:18;15471:26;;15543:9;15537:4;15533:20;15529:1;15518:9;15514:17;15507:47;15571:131;15697:4;15571:131;:::i;:::-;15563:139;;15290:419;;;:::o;15715:180::-;15763:77;15760:1;15753:88;15860:4;15857:1;15850:15;15884:4;15881:1;15874:15;15901:167;16041:19;16037:1;16029:6;16025:14;16018:43;15901:167;:::o;16074:366::-;16216:3;16237:67;16301:2;16296:3;16237:67;:::i;:::-;16230:74;;16313:93;16402:3;16313:93;:::i;:::-;16431:2;16426:3;16422:12;16415:19;;16074:366;;;:::o;16446:419::-;16612:4;16650:2;16639:9;16635:18;16627:26;;16699:9;16693:4;16689:20;16685:1;16674:9;16670:17;16663:47;16727:131;16853:4;16727:131;:::i;:::-;16719:139;;16446:419;;;:::o;16871:147::-;16972:11;17009:3;16994:18;;16871:147;;;;:::o;17024:114::-;;:::o;17144:398::-;17303:3;17324:83;17405:1;17400:3;17324:83;:::i;:::-;17317:90;;17416:93;17505:3;17416:93;:::i;:::-;17534:1;17529:3;17525:11;17518:18;;17144:398;;;:::o;17548:379::-;17732:3;17754:147;17897:3;17754:147;:::i;:::-;17747:154;;17918:3;17911:10;;17548:379;;;:::o;17933:168::-;18073:20;18069:1;18061:6;18057:14;18050:44;17933:168;:::o;18107:366::-;18249:3;18270:67;18334:2;18329:3;18270:67;:::i;:::-;18263:74;;18346:93;18435:3;18346:93;:::i;:::-;18464:2;18459:3;18455:12;18448:19;;18107:366;;;:::o;18479:419::-;18645:4;18683:2;18672:9;18668:18;18660:26;;18732:9;18726:4;18722:20;18718:1;18707:9;18703:17;18696:47;18760:131;18886:4;18760:131;:::i;:::-;18752:139;;18479:419;;;:::o;18904:332::-;19025:4;19063:2;19052:9;19048:18;19040:26;;19076:71;19144:1;19133:9;19129:17;19120:6;19076:71;:::i;:::-;19157:72;19225:2;19214:9;19210:18;19201:6;19157:72;:::i;:::-;18904:332;;;;;:::o;19242:90::-;19276:7;19319:5;19312:13;19305:21;19294:32;;19242:90;;;:::o;19338:116::-;19408:21;19423:5;19408:21;:::i;:::-;19401:5;19398:32;19388:60;;19444:1;19441;19434:12;19388:60;19338:116;:::o;19460:137::-;19514:5;19545:6;19539:13;19530:22;;19561:30;19585:5;19561:30;:::i;:::-;19460:137;;;;:::o;19603:345::-;19670:6;19719:2;19707:9;19698:7;19694:23;19690:32;19687:119;;;19725:79;;:::i;:::-;19687:119;19845:1;19870:61;19923:7;19914:6;19903:9;19899:22;19870:61;:::i;:::-;19860:71;;19816:125;19603:345;;;;:::o;19954:180::-;20002:77;19999:1;19992:88;20099:4;20096:1;20089:15;20123:4;20120:1;20113:15;20140:194;20180:4;20200:20;20218:1;20200:20;:::i;:::-;20195:25;;20234:20;20252:1;20234:20;:::i;:::-;20229:25;;20278:1;20275;20271:9;20263:17;;20302:1;20296:4;20293:11;20290:37;;;20307:18;;:::i;:::-;20290:37;20140:194;;;;:::o;20340:171::-;20480:23;20476:1;20468:6;20464:14;20457:47;20340:171;:::o;20517:366::-;20659:3;20680:67;20744:2;20739:3;20680:67;:::i;:::-;20673:74;;20756:93;20845:3;20756:93;:::i;:::-;20874:2;20869:3;20865:12;20858:19;;20517:366;;;:::o;20889:419::-;21055:4;21093:2;21082:9;21078:18;21070:26;;21142:9;21136:4;21132:20;21128:1;21117:9;21113:17;21106:47;21170:131;21296:4;21170:131;:::i;:::-;21162:139;;20889:419;;;:::o;21314:175::-;21454:27;21450:1;21442:6;21438:14;21431:51;21314:175;:::o;21495:366::-;21637:3;21658:67;21722:2;21717:3;21658:67;:::i;:::-;21651:74;;21734:93;21823:3;21734:93;:::i;:::-;21852:2;21847:3;21843:12;21836:19;;21495:366;;;:::o;21867:419::-;22033:4;22071:2;22060:9;22056:18;22048:26;;22120:9;22114:4;22110:20;22106:1;22095:9;22091:17;22084:47;22148:131;22274:4;22148:131;:::i;:::-;22140:139;;21867:419;;;:::o;22292:180::-;22432:32;22428:1;22420:6;22416:14;22409:56;22292:180;:::o;22478:366::-;22620:3;22641:67;22705:2;22700:3;22641:67;:::i;:::-;22634:74;;22717:93;22806:3;22717:93;:::i;:::-;22835:2;22830:3;22826:12;22819:19;;22478:366;;;:::o;22850:419::-;23016:4;23054:2;23043:9;23039:18;23031:26;;23103:9;23097:4;23093:20;23089:1;23078:9;23074:17;23067:47;23131:131;23257:4;23131:131;:::i;:::-;23123:139;;22850:419;;;:::o;23275:442::-;23424:4;23462:2;23451:9;23447:18;23439:26;;23475:71;23543:1;23532:9;23528:17;23519:6;23475:71;:::i;:::-;23556:72;23624:2;23613:9;23609:18;23600:6;23556:72;:::i;:::-;23638;23706:2;23695:9;23691:18;23682:6;23638:72;:::i;:::-;23275:442;;;;;;:::o;23723:191::-;23763:3;23782:20;23800:1;23782:20;:::i;:::-;23777:25;;23816:20;23834:1;23816:20;:::i;:::-;23811:25;;23859:1;23856;23852:9;23845:16;;23880:3;23877:1;23874:10;23871:36;;;23887:18;;:::i;:::-;23871:36;23723:191;;;;:::o;23920:332::-;24041:4;24079:2;24068:9;24064:18;24056:26;;24092:71;24160:1;24149:9;24145:17;24136:6;24092:71;:::i;:::-;24173:72;24241:2;24230:9;24226:18;24217:6;24173:72;:::i;:::-;23920:332;;;;;:::o;24258:143::-;24315:5;24346:6;24340:13;24331:22;;24362:33;24389:5;24362:33;:::i;:::-;24258:143;;;;:::o;24407:351::-;24477:6;24526:2;24514:9;24505:7;24501:23;24497:32;24494:119;;;24532:79;;:::i;:::-;24494:119;24652:1;24677:64;24733:7;24724:6;24713:9;24709:22;24677:64;:::i;:::-;24667:74;;24623:128;24407:351;;;;:::o;24764:88::-;24812:7;24841:5;24830:16;;24764:88;;;:::o;24858:60::-;24886:3;24907:5;24900:12;;24858:60;;;:::o;24924:164::-;24985:9;25018:64;25036:45;25045:35;25074:5;25045:35;:::i;:::-;25036:45;:::i;:::-;25018:64;:::i;:::-;25005:77;;24924:164;;;:::o;25094:153::-;25192:48;25234:5;25192:48;:::i;:::-;25187:3;25180:61;25094:153;;:::o;25253:464::-;25413:4;25451:2;25440:9;25436:18;25428:26;;25464:71;25532:1;25521:9;25517:17;25508:6;25464:71;:::i;:::-;25545:72;25613:2;25602:9;25598:18;25589:6;25545:72;:::i;:::-;25627:83;25706:2;25695:9;25691:18;25682:6;25627:83;:::i;:::-;25253:464;;;;;;:::o;25723:233::-;25762:3;25785:24;25803:5;25785:24;:::i;:::-;25776:33;;25831:66;25824:5;25821:77;25818:103;;25901:18;;:::i;:::-;25818:103;25948:1;25941:5;25937:13;25930:20;;25723:233;;;:::o;25962:553::-;26139:4;26177:3;26166:9;26162:19;26154:27;;26191:71;26259:1;26248:9;26244:17;26235:6;26191:71;:::i;:::-;26272:72;26340:2;26329:9;26325:18;26316:6;26272:72;:::i;:::-;26354;26422:2;26411:9;26407:18;26398:6;26354:72;:::i;:::-;26436;26504:2;26493:9;26489:18;26480:6;26436:72;:::i;:::-;25962:553;;;;;;;:::o;26521:174::-;26661:26;26657:1;26649:6;26645:14;26638:50;26521:174;:::o;26701:366::-;26843:3;26864:67;26928:2;26923:3;26864:67;:::i;:::-;26857:74;;26940:93;27029:3;26940:93;:::i;:::-;27058:2;27053:3;27049:12;27042:19;;26701:366;;;:::o;27073:419::-;27239:4;27277:2;27266:9;27262:18;27254:26;;27326:9;27320:4;27316:20;27312:1;27301:9;27297:17;27290:47;27354:131;27480:4;27354:131;:::i;:::-;27346:139;;27073:419;;;:::o;27498:180::-;27546:77;27543:1;27536:88;27643:4;27640:1;27633:15;27667:4;27664:1;27657:15;27684:178;27824:30;27820:1;27812:6;27808:14;27801:54;27684:178;:::o;27868:366::-;28010:3;28031:67;28095:2;28090:3;28031:67;:::i;:::-;28024:74;;28107:93;28196:3;28107:93;:::i;:::-;28225:2;28220:3;28216:12;28209:19;;27868:366;;;:::o;28240:419::-;28406:4;28444:2;28433:9;28429:18;28421:26;;28493:9;28487:4;28483:20;28479:1;28468:9;28464:17;28457:47;28521:131;28647:4;28521:131;:::i;:::-;28513:139;;28240:419;;;:::o;28665:164::-;28805:16;28801:1;28793:6;28789:14;28782:40;28665:164;:::o;28835:366::-;28977:3;28998:67;29062:2;29057:3;28998:67;:::i;:::-;28991:74;;29074:93;29163:3;29074:93;:::i;:::-;29192:2;29187:3;29183:12;29176:19;;28835:366;;;:::o;29207:419::-;29373:4;29411:2;29400:9;29396:18;29388:26;;29460:9;29454:4;29450:20;29446:1;29435:9;29431:17;29424:47;29488:131;29614:4;29488:131;:::i;:::-;29480:139;;29207:419;;;:::o;29632:91::-;29668:7;29708:8;29701:5;29697:20;29686:31;;29632:91;;;:::o;29729:162::-;29789:9;29822:63;29839:45;29848:35;29877:5;29848:35;:::i;:::-;29839:45;:::i;:::-;29822:63;:::i;:::-;29809:76;;29729:162;;;:::o;29897:151::-;29994:47;30035:5;29994:47;:::i;:::-;29989:3;29982:60;29897:151;;:::o;30054:142::-;30157:32;30183:5;30157:32;:::i;:::-;30152:3;30145:45;30054:142;;:::o;30202:716::-;30433:4;30471:3;30460:9;30456:19;30448:27;;30485:71;30553:1;30542:9;30538:17;30529:6;30485:71;:::i;:::-;30566:72;30634:2;30623:9;30619:18;30610:6;30566:72;:::i;:::-;30648;30716:2;30705:9;30701:18;30692:6;30648:72;:::i;:::-;30730:82;30808:2;30797:9;30793:18;30784:6;30730:82;:::i;:::-;30822:89;30906:3;30895:9;30891:19;30882:6;30822:89;:::i;:::-;30202:716;;;;;;;;:::o;30924:172::-;31064:24;31060:1;31052:6;31048:14;31041:48;30924:172;:::o;31102:366::-;31244:3;31265:67;31329:2;31324:3;31265:67;:::i;:::-;31258:74;;31341:93;31430:3;31341:93;:::i;:::-;31459:2;31454:3;31450:12;31443:19;;31102:366;;;:::o;31474:419::-;31640:4;31678:2;31667:9;31663:18;31655:26;;31727:9;31721:4;31717:20;31713:1;31702:9;31698:17;31691:47;31755:131;31881:4;31755:131;:::i;:::-;31747:139;;31474:419;;;:::o;31899:143::-;31956:5;31987:6;31981:13;31972:22;;32003:33;32030:5;32003:33;:::i;:::-;31899:143;;;;:::o;32048:351::-;32118:6;32167:2;32155:9;32146:7;32142:23;32138:32;32135:119;;;32173:79;;:::i;:::-;32135:119;32293:1;32318:64;32374:7;32365:6;32354:9;32350:22;32318:64;:::i;:::-;32308:74;;32264:128;32048:351;;;;:::o;32405:174::-;32545:26;32541:1;32533:6;32529:14;32522:50;32405:174;:::o;32585:366::-;32727:3;32748:67;32812:2;32807:3;32748:67;:::i;:::-;32741:74;;32824:93;32913:3;32824:93;:::i;:::-;32942:2;32937:3;32933:12;32926:19;;32585:366;;;:::o;32957:419::-;33123:4;33161:2;33150:9;33146:18;33138:26;;33210:9;33204:4;33200:20;33196:1;33185:9;33181:17;33174:47;33238:131;33364:4;33238:131;:::i;:::-;33230:139;;32957:419;;;:::o;33382:410::-;33422:7;33445:20;33463:1;33445:20;:::i;:::-;33440:25;;33479:20;33497:1;33479:20;:::i;:::-;33474:25;;33534:1;33531;33527:9;33556:30;33574:11;33556:30;:::i;:::-;33545:41;;33735:1;33726:7;33722:15;33719:1;33716:22;33696:1;33689:9;33669:83;33646:139;;33765:18;;:::i;:::-;33646:139;33430:362;33382:410;;;;:::o;33798:180::-;33846:77;33843:1;33836:88;33943:4;33940:1;33933:15;33967:4;33964:1;33957:15;33984:185;34024:1;34041:20;34059:1;34041:20;:::i;:::-;34036:25;;34075:20;34093:1;34075:20;:::i;:::-;34070:25;;34114:1;34104:35;;34119:18;;:::i;:::-;34104:35;34161:1;34158;34154:9;34149:14;;33984:185;;;;:::o
Swarm Source
ipfs://df7f1ac82219dc665858868495d27fe15e91dc7b9edccc488eea518f234239e3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.