Contract Overview
[ Download CSV Export ]
Latest 2 internal transactions
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0x869f3b823469dfea307d1dc67e4bebeefeff99f7a0a2eaca839655bc0624de35 | 31543968 | 468 days 12 hrs ago | 0xeb30fc283d1ceb163ca848d13b06261784945395 | Contract Creation | 0 FTM | ||
0x869f3b823469dfea307d1dc67e4bebeefeff99f7a0a2eaca839655bc0624de35 | 31543968 | 468 days 12 hrs ago | 0x3faab499b519fdc5819e3d7ed0c26111904cbc28 | Contract Creation | 0 FTM |
[ Download CSV Export ]
Contract Name:
BaseV1Pair
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at FtmScan.com on 2022-03-03 */ /** https://ftm.guru/solidly https://discord.gg/QpyfMarNrV $ELITE + $USDC earns $SOLID Vote for vAMM-ELITE-USDC https://solidly.exchange/vote FFFFF TTTTTTT M M GGGGG U U RRRRR U U FF TTT M M M M G U U RR R U U FFFFF TTT M M M G GGG U U RRRRR U U FF TTT M M M O G G U U RR R U U FF TTT M M GGGGG UUUU RR RRR UUUU */ // SPDX-License-Identifier: MIT pragma solidity 0.8.11; interface erc20 { function totalSupply() external view returns (uint256); function transfer(address recipient, uint amount) external returns (bool); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function balanceOf(address) external view returns (uint); function transferFrom(address sender, address recipient, uint amount) external returns (bool); function approve(address spender, uint value) external returns (bool); } library Math { function min(uint a, uint b) internal pure returns (uint) { return a < b ? a : b; } function sqrt(uint y) internal pure returns (uint z) { if (y > 3) { z = y; uint x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } } interface IBaseV1Callee { function hook(address sender, uint amount0, uint amount1, bytes calldata data) external; } // Base V1 Fees contract is used as a 1:1 pair relationship to split out fees, this ensures that the curve does not need to be modified for LP shares contract BaseV1Fees { address internal immutable pair; // The pair it is bonded to address internal immutable token0; // token0 of pair, saved localy and statically for gas optimization address internal immutable token1; // Token1 of pair, saved localy and statically for gas optimization constructor(address _token0, address _token1) { pair = msg.sender; token0 = _token0; token1 = _token1; } function _safeTransfer(address token,address to,uint256 value) internal { require(token.code.length > 0); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(erc20.transfer.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool)))); } // Allow the pair to transfer fees to users function claimFeesFor(address recipient, uint amount0, uint amount1) external { require(msg.sender == pair); if (amount0 > 0) _safeTransfer(token0, recipient, amount0); if (amount1 > 0) _safeTransfer(token1, recipient, amount1); } } // The base pair of pools, either stable or volatile contract BaseV1Pair { string public name; string public symbol; uint8 public constant decimals = 18; // Used to denote stable or volatile pair, not immutable since construction happens in the initialize method for CREATE2 deterministic addresses bool public immutable stable; uint public totalSupply = 0; mapping(address => mapping (address => uint)) public allowance; mapping(address => uint) public balanceOf; bytes32 internal DOMAIN_SEPARATOR; // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 internal constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; mapping(address => uint) public nonces; uint internal constant MINIMUM_LIQUIDITY = 10**3; address public immutable token0; address public immutable token1; address public immutable fees; address immutable factory; // Structure to capture time period obervations every 30 minutes, used for local oracles struct Observation { uint timestamp; uint reserve0Cumulative; uint reserve1Cumulative; } // Capture oracle reading every 30 minutes uint constant periodSize = 1800; Observation[] public observations; uint internal immutable decimals0; uint internal immutable decimals1; uint public reserve0; uint public reserve1; uint public blockTimestampLast; uint public reserve0CumulativeLast; uint public reserve1CumulativeLast; // index0 and index1 are used to accumulate fees, this is split out from normal trades to keep the swap "clean" // this further allows LP holders to easily claim fees for tokens they have/staked uint public index0 = 0; uint public index1 = 0; // position assigned to each LP to track their current index0 & index1 vs the global position mapping(address => uint) public supplyIndex0; mapping(address => uint) public supplyIndex1; // tracks the amount of unclaimed, but claimable tokens off of fees for token0 and token1 mapping(address => uint) public claimable0; mapping(address => uint) public claimable1; event Fees(address indexed sender, uint amount0, uint amount1); event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint reserve0, uint reserve1); event Claim(address indexed sender, address indexed recipient, uint amount0, uint amount1); event Transfer(address indexed from, address indexed to, uint amount); event Approval(address indexed owner, address indexed spender, uint amount); constructor() { factory = msg.sender; (address _token0, address _token1, bool _stable) = BaseV1Factory(msg.sender).getInitializable(); (token0, token1, stable) = (_token0, _token1, _stable); fees = address(new BaseV1Fees(_token0, _token1)); if (_stable) { name = string(abi.encodePacked("StableV1 AMM - ", erc20(_token0).symbol(), "/", erc20(_token1).symbol())); symbol = string(abi.encodePacked("sAMM-", erc20(_token0).symbol(), "/", erc20(_token1).symbol())); } else { name = string(abi.encodePacked("VolatileV1 AMM - ", erc20(_token0).symbol(), "/", erc20(_token1).symbol())); symbol = string(abi.encodePacked("vAMM-", erc20(_token0).symbol(), "/", erc20(_token1).symbol())); } decimals0 = 10**erc20(_token0).decimals(); decimals1 = 10**erc20(_token1).decimals(); observations.push(Observation(block.timestamp, 0, 0)); } // simple re-entrancy check uint internal _unlocked = 1; modifier lock() { require(_unlocked == 1); _unlocked = 2; _; _unlocked = 1; } function observationLength() external view returns (uint) { return observations.length; } function lastObservation() public view returns (Observation memory) { return observations[observations.length-1]; } function metadata() external view returns (uint dec0, uint dec1, uint r0, uint r1, bool st, address t0, address t1) { return (decimals0, decimals1, reserve0, reserve1, stable, token0, token1); } function tokens() external view returns (address, address) { return (token0, token1); } // claim accumulated but unclaimed fees (viewable via claimable0 and claimable1) function claimFees() external returns (uint claimed0, uint claimed1) { _updateFor(msg.sender); claimed0 = claimable0[msg.sender]; claimed1 = claimable1[msg.sender]; if (claimed0 > 0 || claimed1 > 0) { claimable0[msg.sender] = 0; claimable1[msg.sender] = 0; BaseV1Fees(fees).claimFeesFor(msg.sender, claimed0, claimed1); emit Claim(msg.sender, msg.sender, claimed0, claimed1); } } // Accrue fees on token0 function _update0(uint amount) internal { _safeTransfer(token0, fees, amount); // transfer the fees out to BaseV1Fees uint256 _ratio = amount * 1e18 / totalSupply; // 1e18 adjustment is removed during claim if (_ratio > 0) { index0 += _ratio; } emit Fees(msg.sender, amount, 0); } // Accrue fees on token1 function _update1(uint amount) internal { _safeTransfer(token1, fees, amount); uint256 _ratio = amount * 1e18 / totalSupply; if (_ratio > 0) { index1 += _ratio; } emit Fees(msg.sender, 0, amount); } // this function MUST be called on any balance changes, otherwise can be used to infinitely claim fees // Fees are segregated from core funds, so fees can never put liquidity at risk function _updateFor(address recipient) internal { uint _supplied = balanceOf[recipient]; // get LP balance of `recipient` if (_supplied > 0) { uint _supplyIndex0 = supplyIndex0[recipient]; // get last adjusted index0 for recipient uint _supplyIndex1 = supplyIndex1[recipient]; uint _index0 = index0; // get global index0 for accumulated fees uint _index1 = index1; supplyIndex0[recipient] = _index0; // update user current position to global position supplyIndex1[recipient] = _index1; uint _delta0 = _index0 - _supplyIndex0; // see if there is any difference that need to be accrued uint _delta1 = _index1 - _supplyIndex1; if (_delta0 > 0) { uint _share = _supplied * _delta0 / 1e18; // add accrued difference for each supplied token claimable0[recipient] += _share; } if (_delta1 > 0) { uint _share = _supplied * _delta1 / 1e18; claimable1[recipient] += _share; } } else { supplyIndex0[recipient] = index0; // new users are set to the default global state supplyIndex1[recipient] = index1; } } function getReserves() public view returns (uint _reserve0, uint _reserve1, uint _blockTimestampLast) { _reserve0 = reserve0; _reserve1 = reserve1; _blockTimestampLast = blockTimestampLast; } // update reserves and, on the first call per block, price accumulators function _update(uint balance0, uint balance1, uint _reserve0, uint _reserve1) internal { uint blockTimestamp = block.timestamp; uint timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) { reserve0CumulativeLast += _reserve0 * timeElapsed; reserve1CumulativeLast += _reserve1 * timeElapsed; } Observation memory _point = lastObservation(); timeElapsed = blockTimestamp - _point.timestamp; // compare the last observation with current timestamp, if greater than 30 minutes, record a new event if (timeElapsed > periodSize) { observations.push(Observation(blockTimestamp, reserve0CumulativeLast, reserve1CumulativeLast)); } reserve0 = balance0; reserve1 = balance1; blockTimestampLast = blockTimestamp; emit Sync(reserve0, reserve1); } // produces the cumulative price using counterfactuals to save gas and avoid a call to sync. function currentCumulativePrices() public view returns (uint reserve0Cumulative, uint reserve1Cumulative, uint blockTimestamp) { blockTimestamp = block.timestamp; reserve0Cumulative = reserve0CumulativeLast; reserve1Cumulative = reserve1CumulativeLast; // if time has elapsed since the last update on the pair, mock the accumulated price values (uint _reserve0, uint _reserve1, uint _blockTimestampLast) = getReserves(); if (_blockTimestampLast != blockTimestamp) { // subtraction overflow is desired uint timeElapsed = blockTimestamp - _blockTimestampLast; reserve0Cumulative += _reserve0 * timeElapsed; reserve1Cumulative += _reserve1 * timeElapsed; } } // gives the current twap price measured from amountIn * tokenIn gives amountOut function current(address tokenIn, uint amountIn) external view returns (uint amountOut) { Observation memory _observation = lastObservation(); (uint reserve0Cumulative, uint reserve1Cumulative,) = currentCumulativePrices(); if (block.timestamp == _observation.timestamp) { _observation = observations[observations.length-2]; } uint timeElapsed = block.timestamp - _observation.timestamp; uint _reserve0 = (reserve0Cumulative - _observation.reserve0Cumulative) / timeElapsed; uint _reserve1 = (reserve1Cumulative - _observation.reserve1Cumulative) / timeElapsed; amountOut = _getAmountOut(amountIn, tokenIn, _reserve0, _reserve1); } // as per `current`, however allows user configured granularity, up to the full window size function quote(address tokenIn, uint amountIn, uint granularity) external view returns (uint amountOut) { uint [] memory _prices = sample(tokenIn, amountIn, granularity, 1); uint priceAverageCumulative; for (uint i = 0; i < _prices.length; i++) { priceAverageCumulative += _prices[i]; } return priceAverageCumulative / granularity; } // returns a memory set of twap prices function prices(address tokenIn, uint amountIn, uint points) external view returns (uint[] memory) { return sample(tokenIn, amountIn, points, 1); } function sample(address tokenIn, uint amountIn, uint points, uint window) public view returns (uint[] memory) { uint[] memory _prices = new uint[](points); uint length = observations.length-1; uint i = length - (points * window); uint nextIndex = 0; uint index = 0; for (; i < length; i+=window) { nextIndex = i + window; uint timeElapsed = observations[nextIndex].timestamp - observations[i].timestamp; uint _reserve0 = (observations[nextIndex].reserve0Cumulative - observations[i].reserve0Cumulative) / timeElapsed; uint _reserve1 = (observations[nextIndex].reserve1Cumulative - observations[i].reserve1Cumulative) / timeElapsed; _prices[index] = _getAmountOut(amountIn, tokenIn, _reserve0, _reserve1); index = index + 1; } return _prices; } // this low-level function should be called from a contract which performs important safety checks // standard uniswap v2 implementation function mint(address to) external lock returns (uint liquidity) { (uint _reserve0, uint _reserve1) = (reserve0, reserve1); uint _balance0 = erc20(token0).balanceOf(address(this)); uint _balance1 = erc20(token1).balanceOf(address(this)); uint _amount0 = _balance0 - _reserve0; uint _amount1 = _balance1 - _reserve1; uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee if (_totalSupply == 0) { liquidity = Math.sqrt(_amount0 * _amount1) - MINIMUM_LIQUIDITY; _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens } else { liquidity = Math.min(_amount0 * _totalSupply / _reserve0, _amount1 * _totalSupply / _reserve1); } require(liquidity > 0, 'ILM'); // BaseV1: INSUFFICIENT_LIQUIDITY_MINTED _mint(to, liquidity); _update(_balance0, _balance1, _reserve0, _reserve1); emit Mint(msg.sender, _amount0, _amount1); } // this low-level function should be called from a contract which performs important safety checks // standard uniswap v2 implementation function burn(address to) external lock returns (uint amount0, uint amount1) { (uint _reserve0, uint _reserve1) = (reserve0, reserve1); (address _token0, address _token1) = (token0, token1); uint _balance0 = erc20(_token0).balanceOf(address(this)); uint _balance1 = erc20(_token1).balanceOf(address(this)); uint _liquidity = balanceOf[address(this)]; uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee amount0 = _liquidity * _balance0 / _totalSupply; // using balances ensures pro-rata distribution amount1 = _liquidity * _balance1 / _totalSupply; // using balances ensures pro-rata distribution require(amount0 > 0 && amount1 > 0, 'ILB'); // BaseV1: INSUFFICIENT_LIQUIDITY_BURNED _burn(address(this), _liquidity); _safeTransfer(_token0, to, amount0); _safeTransfer(_token1, to, amount1); _balance0 = erc20(_token0).balanceOf(address(this)); _balance1 = erc20(_token1).balanceOf(address(this)); _update(_balance0, _balance1, _reserve0, _reserve1); emit Burn(msg.sender, amount0, amount1, to); } // this low-level function should be called from a contract which performs important safety checks function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external lock { require(!BaseV1Factory(factory).isPaused()); require(amount0Out > 0 || amount1Out > 0, 'IOA'); // BaseV1: INSUFFICIENT_OUTPUT_AMOUNT (uint _reserve0, uint _reserve1) = (reserve0, reserve1); require(amount0Out < _reserve0 && amount1Out < _reserve1, 'IL'); // BaseV1: INSUFFICIENT_LIQUIDITY uint _balance0; uint _balance1; { // scope for _token{0,1}, avoids stack too deep errors (address _token0, address _token1) = (token0, token1); require(to != _token0 && to != _token1, 'IT'); // BaseV1: INVALID_TO if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens if (data.length > 0) IBaseV1Callee(to).hook(msg.sender, amount0Out, amount1Out, data); // callback, used for flash loans _balance0 = erc20(_token0).balanceOf(address(this)); _balance1 = erc20(_token1).balanceOf(address(this)); } uint amount0In = _balance0 > _reserve0 - amount0Out ? _balance0 - (_reserve0 - amount0Out) : 0; uint amount1In = _balance1 > _reserve1 - amount1Out ? _balance1 - (_reserve1 - amount1Out) : 0; require(amount0In > 0 || amount1In > 0, 'IIA'); // BaseV1: INSUFFICIENT_INPUT_AMOUNT { // scope for reserve{0,1}Adjusted, avoids stack too deep errors (address _token0, address _token1) = (token0, token1); if (amount0In > 0) _update0(amount0In / 10000); // accrue fees for token0 and move them out of pool if (amount1In > 0) _update1(amount1In / 10000); // accrue fees for token1 and move them out of pool _balance0 = erc20(_token0).balanceOf(address(this)); // since we removed tokens, we need to reconfirm balances, can also simply use previous balance - amountIn/ 10000, but doing balanceOf again as safety check _balance1 = erc20(_token1).balanceOf(address(this)); // The curve, either x3y+y3x for stable pools, or x*y for volatile pools require(_k(_balance0, _balance1) >= _k(_reserve0, _reserve1), 'K'); // BaseV1: K } _update(_balance0, _balance1, _reserve0, _reserve1); emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to); } // force balances to match reserves function skim(address to) external lock { (address _token0, address _token1) = (token0, token1); _safeTransfer(_token0, to, erc20(_token0).balanceOf(address(this)) - (reserve0)); _safeTransfer(_token1, to, erc20(_token1).balanceOf(address(this)) - (reserve1)); } // force reserves to match balances function sync() external lock { _update(erc20(token0).balanceOf(address(this)), erc20(token1).balanceOf(address(this)), reserve0, reserve1); } function _f(uint x0, uint y) internal pure returns (uint) { return x0*(y*y/1e18*y/1e18)/1e18+(x0*x0/1e18*x0/1e18)*y/1e18; } function _d(uint x0, uint y) internal pure returns (uint) { return 3*x0*(y*y/1e18)/1e18+(x0*x0/1e18*x0/1e18); } function _get_y(uint x0, uint xy, uint y) internal pure returns (uint) { for (uint i = 0; i < 255; i++) { uint y_prev = y; uint k = _f(x0, y); if (k < xy) { uint dy = (xy - k)*1e18/_d(x0, y); y = y + dy; } else { uint dy = (k - xy)*1e18/_d(x0, y); y = y - dy; } if (y > y_prev) { if (y - y_prev <= 1) { return y; } } else { if (y_prev - y <= 1) { return y; } } } return y; } function getAmountOut(uint amountIn, address tokenIn) external view returns (uint) { (uint _reserve0, uint _reserve1) = (reserve0, reserve1); amountIn -= amountIn / 10000; // remove fee from amount received return _getAmountOut(amountIn, tokenIn, _reserve0, _reserve1); } function _getAmountOut(uint amountIn, address tokenIn, uint _reserve0, uint _reserve1) internal view returns (uint) { if (stable) { uint xy = _k(_reserve0, _reserve1); _reserve0 = _reserve0 * 1e18 / decimals0; _reserve1 = _reserve1 * 1e18 / decimals1; (uint reserveA, uint reserveB) = tokenIn == token0 ? (_reserve0, _reserve1) : (_reserve1, _reserve0); amountIn = tokenIn == token0 ? amountIn * 1e18 / decimals0 : amountIn * 1e18 / decimals1; uint y = reserveB - _get_y(amountIn+reserveA, xy, reserveB); return y * (tokenIn == token0 ? decimals1 : decimals0) / 1e18; } else { (uint reserveA, uint reserveB) = tokenIn == token0 ? (_reserve0, _reserve1) : (_reserve1, _reserve0); return amountIn * reserveB / (reserveA + amountIn); } } function _k(uint x, uint y) internal view returns (uint) { if (stable) { uint _x = x * 1e18 / decimals0; uint _y = y * 1e18 / decimals1; uint _a = (_x * _y) / 1e18; uint _b = ((_x * _x) / 1e18 + (_y * _y) / 1e18); return _a * _b / 1e18; // x3y+y3x >= k } else { return x * y; // xy >= k } } function _mint(address dst, uint amount) internal { _updateFor(dst); // balances must be updated on mint/burn/transfer totalSupply += amount; balanceOf[dst] += amount; emit Transfer(address(0), dst, amount); } function _burn(address dst, uint amount) internal { _updateFor(dst); totalSupply -= amount; balanceOf[dst] -= amount; emit Transfer(dst, address(0), amount); } function approve(address spender, uint amount) external returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external { require(deadline >= block.timestamp, 'BaseV1: EXPIRED'); DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'), keccak256(bytes(name)), keccak256('1'), block.chainid, address(this) ) ); bytes32 digest = keccak256( abi.encodePacked( '\x19\x01', DOMAIN_SEPARATOR, keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline)) ) ); address recoveredAddress = ecrecover(digest, v, r, s); require(recoveredAddress != address(0) && recoveredAddress == owner, 'BaseV1: INVALID_SIGNATURE'); allowance[owner][spender] = value; emit Approval(owner, spender, value); } function transfer(address dst, uint amount) external returns (bool) { _transferTokens(msg.sender, dst, amount); return true; } function transferFrom(address src, address dst, uint amount) external returns (bool) { address spender = msg.sender; uint spenderAllowance = allowance[src][spender]; if (spender != src && spenderAllowance != type(uint).max) { uint newAllowance = spenderAllowance - amount; allowance[src][spender] = newAllowance; emit Approval(src, spender, newAllowance); } _transferTokens(src, dst, amount); return true; } function _transferTokens(address src, address dst, uint amount) internal { _updateFor(src); // update fee position for src _updateFor(dst); // update fee position for dst balanceOf[src] -= amount; balanceOf[dst] += amount; emit Transfer(src, dst, amount); } function _safeTransfer(address token,address to,uint256 value) internal { require(token.code.length > 0); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(erc20.transfer.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool)))); } } contract BaseV1Factory { bool public isPaused; address public pauser; address public pendingPauser; mapping(address => mapping(address => mapping(bool => address))) public getPair; address[] public allPairs; mapping(address => bool) public isPair; // simplified check if its a pair, given that `stable` flag might not be available in peripherals address internal _temp0; address internal _temp1; bool internal _temp; event PairCreated(address indexed token0, address indexed token1, bool stable, address pair, uint); constructor() { pauser = msg.sender; isPaused = false; } function allPairsLength() external view returns (uint) { return allPairs.length; } function setPauser(address _pauser) external { require(msg.sender == pauser); pendingPauser = _pauser; } function acceptPauser() external { require(msg.sender == pendingPauser); pauser = pendingPauser; } function setPause(bool _state) external { require(msg.sender == pauser); isPaused = _state; } function pairCodeHash() external pure returns (bytes32) { return keccak256(type(BaseV1Pair).creationCode); } function getInitializable() external view returns (address, address, bool) { return (_temp0, _temp1, _temp); } function createPair(address tokenA, address tokenB, bool stable) external returns (address pair) { require(tokenA != tokenB, 'IA'); // BaseV1: IDENTICAL_ADDRESSES (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'ZA'); // BaseV1: ZERO_ADDRESS require(getPair[token0][token1][stable] == address(0), 'PE'); // BaseV1: PAIR_EXISTS - single check is sufficient bytes32 salt = keccak256(abi.encodePacked(token0, token1, stable)); // notice salt includes stable as well, 3 parameters (_temp0, _temp1, _temp) = (token0, token1, stable); pair = address(new BaseV1Pair{salt:salt}()); getPair[token0][token1][stable] = pair; getPair[token1][token0][stable] = pair; // populate mapping in the reverse direction allPairs.push(pair); isPair[pair] = true; emit PairCreated(token0, token1, stable, pair, allPairs.length); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Fees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reserve0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserve1","type":"uint256"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockTimestampLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimFees","outputs":[{"internalType":"uint256","name":"claimed0","type":"uint256"},{"internalType":"uint256","name":"claimed1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimable0","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimable1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"current","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentCumulativePrices","outputs":[{"internalType":"uint256","name":"reserve0Cumulative","type":"uint256"},{"internalType":"uint256","name":"reserve1Cumulative","type":"uint256"},{"internalType":"uint256","name":"blockTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fees","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint256","name":"_reserve0","type":"uint256"},{"internalType":"uint256","name":"_reserve1","type":"uint256"},{"internalType":"uint256","name":"_blockTimestampLast","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"index0","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"index1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastObservation","outputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"reserve0Cumulative","type":"uint256"},{"internalType":"uint256","name":"reserve1Cumulative","type":"uint256"}],"internalType":"struct BaseV1Pair.Observation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadata","outputs":[{"internalType":"uint256","name":"dec0","type":"uint256"},{"internalType":"uint256","name":"dec1","type":"uint256"},{"internalType":"uint256","name":"r0","type":"uint256"},{"internalType":"uint256","name":"r1","type":"uint256"},{"internalType":"bool","name":"st","type":"bool"},{"internalType":"address","name":"t0","type":"address"},{"internalType":"address","name":"t1","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"observationLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"observations","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"reserve0Cumulative","type":"uint256"},{"internalType":"uint256","name":"reserve1Cumulative","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"}],"name":"prices","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"granularity","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserve0","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserve0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserve1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserve1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"window","type":"uint256"}],"name":"sample","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"supplyIndex0","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"supplyIndex1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
61016060405260006002556000600d556000600e5560016013553480156200002657600080fd5b50336001600160a01b0316610100816001600160a01b0316815250506000806000336001600160a01b031663eb13c4cf6040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000086573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ac9190620007c8565b8015156080526001600160a01b0380831660c052831660a052604051929550909350915083908390620000df90620006f7565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000113573d6000803e3d6000fd5b506001600160a01b031660e05280156200034557826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000166573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000190919081019062000863565b826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620001cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620001f9919081019062000863565b6040516020016200020c9291906200091b565b604051602081830303815290604052600090805190602001906200023292919062000705565b50826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000272573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200029c919081019062000863565b826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620002db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000305919081019062000863565b6040516020016200031892919062000976565b604051602081830303815290604052600190805190602001906200033e92919062000705565b506200055e565b826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000384573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003ae919081019062000863565b826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620003ed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000417919081019062000863565b6040516020016200042a929190620009c7565b604051602081830303815290604052600090805190602001906200045092919062000705565b50826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000490573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620004ba919081019062000863565b826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620004f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000523919081019062000863565b6040516020016200053692919062000a24565b604051602081830303815290604052600190805190602001906200055c92919062000705565b505b826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200059d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005c3919062000a46565b620005d090600a62000b87565b6101208181525050816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000617573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200063d919062000a46565b6200064a90600a62000b87565b6101405250506040805160608101825242815260006020820181815292820181815260078054600181018255925291517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68860039092029182015591517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689830155517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a909101555062000bd5565b610370806200410c83390190565b828054620007139062000b98565b90600052602060002090601f01602090048101928262000737576000855562000782565b82601f106200075257805160ff191683800117855562000782565b8280016001018555821562000782579182015b828111156200078257825182559160200191906001019062000765565b506200079092915062000794565b5090565b5b8082111562000790576000815560010162000795565b80516001600160a01b0381168114620007c357600080fd5b919050565b600080600060608486031215620007de57600080fd5b620007e984620007ab565b9250620007f960208501620007ab565b9150604084015180151581146200080f57600080fd5b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200084d57818101518382015260200162000833565b838111156200085d576000848401525b50505050565b6000602082840312156200087657600080fd5b81516001600160401b03808211156200088e57600080fd5b818401915084601f830112620008a357600080fd5b815181811115620008b857620008b86200081a565b604051601f8201601f19908116603f01168101908382118183101715620008e357620008e36200081a565b81604052828152876020848701011115620008fd57600080fd5b6200091083602083016020880162000830565b979650505050505050565b6e029ba30b13632ab189020a6a690169608d1b8152600083516200094781600f85016020880162000830565b602f60f81b600f9184019182015283516200096a81601084016020880162000830565b01601001949350505050565b6473414d4d2d60d81b8152600083516200099881600585016020880162000830565b602f60f81b6005918401918201528351620009bb81600684016020880162000830565b01600601949350505050565b7002b37b630ba34b632ab189020a6a690169607d1b815260008351620009f581601185016020880162000830565b602f60f81b601191840191820152835162000a1881601284016020880162000830565b01601201949350505050565b6476414d4d2d60d81b8152600083516200099881600585016020880162000830565b60006020828403121562000a5957600080fd5b815160ff8116811462000a6b57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000ac957816000190482111562000aad5762000aad62000a72565b8085161562000abb57918102915b93841c939080029062000a8d565b509250929050565b60008262000ae25750600162000b81565b8162000af15750600062000b81565b816001811462000b0a576002811462000b155762000b35565b600191505062000b81565b60ff84111562000b295762000b2962000a72565b50506001821b62000b81565b5060208310610133831016604e8410600b841016171562000b5a575081810a62000b81565b62000b66838362000a88565b806000190482111562000b7d5762000b7d62000a72565b0290505b92915050565b600062000a6b60ff84168362000ad1565b600181811c9082168062000bad57607f821691505b6020821081141562000bcf57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516133e062000d2c6000396000818161043101528181612308015281816125f2015281816126b401526127bf01526000818161040e015281816122c7015281816125b3015281816126f60152612799015260006107b80152600081816105f201528181611b150152818161212e01526121fb0152600081816104bb0152818161064701528181610714015281816108f301528181610b9b015281816113ae01528181611595015281816119bc01528181611f9401526121da0152600081816102f90152818161049301528181610622015281816108d201528181610b7a01528181611318015281816115730152818161199a01528181611f0c0152818161210d015281816126340152818161267b015281816127600152612803015260008181610397015281816104630152818161229f015261257f01526133e06000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c80637ecebe0011610151578063bda39cad116100c3578063d294f09311610087578063d294f09314610736578063d505accf1461073e578063dd62ed3e14610751578063ebeb31db1461077c578063f140a35a14610784578063fff6cae91461079757600080fd5b8063bda39cad146106eb578063bf944dbc146106f4578063c245febc146106fd578063c5700a0214610706578063d21220a71461070f57600080fd5b80639d63848a116101155780639d63848a146106145780639e8cc04b146106725780639f767c8814610685578063a1ac4d13146106a5578063a9059cbb146106c5578063bc25cf77146106d857600080fd5b80637ecebe001461057357806389afcb44146105935780638a7b8cf2146105bb57806395d89b41146105e55780639af1d35a146105ed57600080fd5b8063252c09d7116101ea5780634d5a9f8a116101ae5780634d5a9f8a146104f1578063517b3f82146105115780635881c475146105245780635a76f25e146105375780636a6278421461054057806370a082311461055357600080fd5b8063252c09d7146103cc578063313ce567146103df57806332c0defd146103f9578063392f37e914610402578063443cb4bc146104e857600080fd5b806313345fe11161023c57806313345fe11461033357806318160ddd146103535780631df8c7171461036a578063205aabf11461037257806322be3de11461039257806323b872dd146103b957600080fd5b8063022c0d9f1461027957806306fdde031461028e5780630902f1ac146102ac578063095ea7b3146102d15780630dfe1681146102f4575b600080fd5b61028c610287366004612e5f565b61079f565b005b610296610d7e565b6040516102a39190612f23565b60405180910390f35b600854600954600a545b604080519384526020840192909252908201526060016102a3565b6102e46102df366004612f56565b610e0c565b60405190151581526020016102a3565b61031b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102a3565b610346610341366004612f80565b610e79565b6040516102a39190612fb9565b61035c60025481565b6040519081526020016102a3565b6102b6611081565b61035c610380366004612ffd565b60106020526000908152604090205481565b6102e47f000000000000000000000000000000000000000000000000000000000000000081565b6102e46103c7366004613018565b6110f0565b6102b66103da366004613054565b6111b9565b6103e7601281565b60405160ff90911681526020016102a3565b61035c600d5481565b600854600954604080517f000000000000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060208201529081019290925260608201527f0000000000000000000000000000000000000000000000000000000000000000151560808201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660a08301527f00000000000000000000000000000000000000000000000000000000000000001660c082015260e0016102a3565b61035c60085481565b61035c6104ff366004612ffd565b60116020526000908152604090205481565b61035c61051f366004612f56565b6111ec565b61034661053236600461306d565b6112d5565b61035c60095481565b61035c61054e366004612ffd565b6112e4565b61035c610561366004612ffd565b60046020526000908152604090205481565b61035c610581366004612ffd565b60066020526000908152604090205481565b6105a66105a1366004612ffd565b611541565b604080519283526020830191909152016102a3565b6105c361185e565b60408051825181526020808401519082015291810151908201526060016102a3565b6102966118de565b61031b7f000000000000000000000000000000000000000000000000000000000000000081565b604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811682527f0000000000000000000000000000000000000000000000000000000000000000166020820152016102a3565b61035c61068036600461306d565b6118eb565b61035c610693366004612ffd565b600f6020526000908152604090205481565b61035c6106b3366004612ffd565b60126020526000908152604090205481565b6102e46106d3366004612f56565b611958565b61028c6106e6366004612ffd565b61196e565b61035c600e5481565b61035c600b5481565b61035c600c5481565b61035c600a5481565b61031b7f000000000000000000000000000000000000000000000000000000000000000081565b6105a6611a8c565b61028c61074c3660046130a0565b611bb3565b61035c61075f366004613113565b600360209081526000928352604080842090915290825290205481565b60075461035c565b61035c610792366004613146565b611ea8565b61028c611edf565b6013546001146107ae57600080fd5b60026013819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190613169565b1561084257600080fd5b60008511806108515750600084115b6108885760405162461bcd60e51b8152602060048201526003602482015262494f4160e81b60448201526064015b60405180910390fd5b600854600954818710801561089c57508086105b6108cd5760405162461bcd60e51b8152602060048201526002602482015261125360f21b604482015260640161087f565b6000807f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03898116908316148015906109405750806001600160a01b0316896001600160a01b031614155b6109715760405162461bcd60e51b8152602060048201526002602482015261125560f21b604482015260640161087f565b8a1561098257610982828a8d612019565b891561099357610993818a8c612019565b8615610a0057604051639a7bff7960e01b81526001600160a01b038a1690639a7bff79906109cd9033908f908f908e908e9060040161318b565b600060405180830381600087803b1580156109e757600080fd5b505af11580156109fb573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6891906131d7565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a0823190602401602060405180830381865afa158015610aaf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad391906131d7565b9250505060008985610ae59190613206565b8311610af2576000610b06565b610afc8a86613206565b610b069084613206565b90506000610b148a86613206565b8311610b21576000610b35565b610b2b8a86613206565b610b359084613206565b90506000821180610b465750600081115b610b785760405162461bcd60e51b815260206004820152600360248201526249494160e81b604482015260640161087f565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008315610bd457610bd4610bcf6127108661321d565b612108565b8215610bee57610bee610be96127108561321d565b6121d5565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5691906131d7565b6040516370a0823160e01b81523060048201529096506001600160a01b038216906370a0823190602401602060405180830381865afa158015610c9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc191906131d7565b9450610ccd888861229b565b610cd7878761229b565b1015610d095760405162461bcd60e51b81526020600482015260016024820152604b60f81b604482015260640161087f565b5050610d17848488886123e7565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001601355505050505050505050565b60008054610d8b9061323f565b80601f0160208091040260200160405190810160405280929190818152602001828054610db79061323f565b8015610e045780601f10610dd957610100808354040283529160200191610e04565b820191906000526020600020905b815481529060010190602001808311610de757829003601f168201915b505050505081565b3360008181526003602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e679086815260200190565b60405180910390a35060015b92915050565b606060008367ffffffffffffffff811115610e9657610e96613274565b604051908082528060200260200182016040528015610ebf578160200160208202803683370190505b50600754909150600090610ed590600190613206565b90506000610ee3858761328a565b610eed9083613206565b90506000805b8383101561107157610f0587846132a9565b9150600060078481548110610f1c57610f1c6132c1565b90600052602060002090600302016000015460078481548110610f4157610f416132c1565b906000526020600020906003020160000154610f5d9190613206565b905060008160078681548110610f7557610f756132c1565b90600052602060002090600302016001015460078681548110610f9a57610f9a6132c1565b906000526020600020906003020160010154610fb69190613206565b610fc0919061321d565b905060008260078781548110610fd857610fd86132c1565b90600052602060002090600302016002015460078781548110610ffd57610ffd6132c1565b9060005260206000209060030201600201546110199190613206565b611023919061321d565b90506110318c8e848461257b565b888581518110611043576110436132c1565b60209081029190910101526110598460016132a9565b9350505050868361106a91906132a9565b9250610ef3565b509293505050505b949350505050565b600b54600c54426000808061109f600854600954600a549192909190565b9250925092508381146110e85760006110b88286613206565b90506110c4818561328a565b6110ce90886132a9565b96506110da818461328a565b6110e490876132a9565b9550505b505050909192565b6001600160a01b03831660008181526003602090815260408083203380855292528220549192909190821480159061112a57506000198114155b156111a057600061113b8583613206565b6001600160a01b038881166000818152600360209081526040808320948916808452948252918290208590559051848152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b6111ab868686612870565b6001925050505b9392505050565b600781815481106111c957600080fd5b600091825260209091206003909102018054600182015460029092015490925083565b6000806111f761185e565b9050600080611204611081565b508451919350915042141561126d576007805461122390600290613206565b81548110611233576112336132c1565b9060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505092505b825160009061127c9042613206565b90506000818560200151856112919190613206565b61129b919061321d565b90506000828660400151856112b09190613206565b6112ba919061321d565b90506112c8888a848461257b565b9998505050505050505050565b60606110798484846001610e79565b60006013546001146112f557600080fd5b60026013556008546009546040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138b91906131d7565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156113f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141991906131d7565b905060006114278584613206565b905060006114358584613206565b60025490915080611473576103e8611455611450848661328a565b612930565b61145f9190613206565b975061146e60006103e86129a0565b6114a8565b6114a587611481838661328a565b61148b919061321d565b87611496848661328a565b6114a0919061321d565b612a33565b97505b600088116114de5760405162461bcd60e51b8152602060048201526003602482015262494c4d60e81b604482015260640161087f565b6114e889896129a0565b6114f4858589896123e7565b604080518481526020810184905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001601355509395945050505050565b60008060135460011461155357600080fd5b60026013556008546009546040516370a0823160e01b81523060048201527f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156115e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160d91906131d7565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa158015611657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167b91906131d7565b30600090815260046020526040902054600254919250908061169d858461328a565b6116a7919061321d565b9950806116b4848461328a565b6116be919061321d565b985060008a1180156116d05750600089115b6117025760405162461bcd60e51b815260206004820152600360248201526224a62160e91b604482015260640161087f565b61170c3083612a49565b611717868c8c612019565b611722858c8b612019565b6040516370a0823160e01b81523060048201526001600160a01b038716906370a0823190602401602060405180830381865afa158015611766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178a91906131d7565b6040516370a0823160e01b81523060048201529094506001600160a01b038616906370a0823190602401602060405180830381865afa1580156117d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f591906131d7565b925061180384848a8a6123e7565b604080518b8152602081018b90526001600160a01b038d169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a350505050505050506001601381905550915091565b61188260405180606001604052806000815260200160008152602001600081525090565b6007805461189290600190613206565b815481106118a2576118a26132c1565b90600052602060002090600302016040518060600160405290816000820154815260200160018201548152602001600282015481525050905090565b60018054610d8b9061323f565b6000806118fb8585856001610e79565b90506000805b82518110156119435782818151811061191c5761191c6132c1565b60200260200101518261192f91906132a9565b91508061193b816132d7565b915050611901565b5061194e848261321d565b9695505050505050565b6000611965338484612870565b50600192915050565b60135460011461197d57600080fd5b60026013556008546040516370a0823160e01b81523060048201527f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091611a4a9184918691906001600160a01b038416906370a08231906024015b602060405180830381865afa158015611a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3b91906131d7565b611a459190613206565b612019565b6009546040516370a0823160e01b8152306004820152611a829183918691906001600160a01b038416906370a08231906024016119fa565b5050600160135550565b600080611a9833612ad4565b50503360009081526011602090815260408083205460129092529091205481151580611ac45750600081115b15611baf573360008181526011602090815260408083208390556012909152808220919091555163299e7ae760e11b8152600481019190915260248101839052604481018290526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063533cf5ce90606401600060405180830381600087803b158015611b5957600080fd5b505af1158015611b6d573d6000803e3d6000fd5b505060408051858152602081018590523393508392507f865ca08d59f5cb456e85cd2f7ef63664ea4f73327414e9d8152c4158b0e94645910160405180910390a35b9091565b42841015611bf55760405162461bcd60e51b815260206004820152600f60248201526e10985cd9558c4e8811561412549151608a1b604482015260640161087f565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051611c2591906132f2565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160408051601f19818403018152918152815160209283012060058190556001600160a01b038a166000908152600690935290822080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b919087611cdb836132d7565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e00160405160208183030381529060405280519060200120604051602001611d5492919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015611dbf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611df55750886001600160a01b0316816001600160a01b0316145b611e415760405162461bcd60e51b815260206004820152601960248201527f4261736556313a20494e56414c49445f5349474e415455524500000000000000604482015260640161087f565b6001600160a01b038981166000818152600360209081526040808320948d16808452948252918290208b905590518a81527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050505050505050565b60085460095460009190611ebe6127108661321d565b611ec89086613206565b9450611ed68585848461257b565b95945050505050565b601354600114611eee57600080fd5b60026013556040516370a0823160e01b8152306004820152612012907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7f91906131d7565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611fe3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200791906131d7565b6008546009546123e7565b6001601355565b6000836001600160a01b03163b1161203057600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161208c919061338e565b6000604051808303816000865af19150503d80600081146120c9576040519150601f19603f3d011682016040523d82523d6000602084013e6120ce565b606091505b50915091508180156120f85750805115806120f85750808060200190518101906120f89190613169565b61210157600080fd5b5050505050565b6121537f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000083612019565b60025460009061216b83670de0b6b3a764000061328a565b612175919061321d565b905080156121955780600d600082825461218f91906132a9565b90915550505b604080518381526000602082015233917f112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a860291015b60405180910390a25050565b6122207f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000083612019565b60025460009061223883670de0b6b3a764000061328a565b612242919061321d565b905080156122625780600e600082825461225c91906132a9565b90915550505b60408051600081526020810184905233917f112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a860291016121c9565b60007f0000000000000000000000000000000000000000000000000000000000000000156123d65760007f00000000000000000000000000000000000000000000000000000000000000006122f885670de0b6b3a764000061328a565b612302919061321d565b905060007f000000000000000000000000000000000000000000000000000000000000000061233985670de0b6b3a764000061328a565b612343919061321d565b90506000670de0b6b3a764000061235a838561328a565b612364919061321d565b90506000670de0b6b3a764000061237b848061328a565b612385919061321d565b670de0b6b3a7640000612398868061328a565b6123a2919061321d565b6123ac91906132a9565b9050670de0b6b3a76400006123c1828461328a565b6123cb919061321d565b945050505050610e73565b6123e0828461328a565b9050610e73565b600a5442906000906123f99083613206565b905060008111801561240a57508315155b801561241557508215155b1561245c57612424818561328a565b600b600082825461243591906132a9565b909155506124459050818461328a565b600c600082825461245691906132a9565b90915550505b600061246661185e565b80519091506124759084613206565b915061070882111561252a5760408051606081018252848152600b5460208201908152600c549282019283526007805460018101825560009190915291517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688600390930292830155517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68982015590517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a909101555b60088790556009869055600a83905560408051888152602081018890527fcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a910160405180910390a150505050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000156127fe5760006125af848461229b565b90507f00000000000000000000000000000000000000000000000000000000000000006125e485670de0b6b3a764000061328a565b6125ee919061321d565b93507f000000000000000000000000000000000000000000000000000000000000000061262384670de0b6b3a764000061328a565b61262d919061321d565b92506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614612672578486612675565b85855b915091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b0316146126f4577f00000000000000000000000000000000000000000000000000000000000000006126e589670de0b6b3a764000061328a565b6126ef919061321d565b612731565b7f000000000000000000000000000000000000000000000000000000000000000061272789670de0b6b3a764000061328a565b612731919061321d565b97506000612749612742848b6132a9565b8584612c34565b6127539083613206565b9050670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316896001600160a01b0316146127bd577f00000000000000000000000000000000000000000000000000000000000000006127df565b7f00000000000000000000000000000000000000000000000000000000000000005b6127e9908361328a565b6127f3919061321d565b945050505050611079565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614612841578385612844565b84845b909250905061285387836132a9565b61285d828961328a565b612867919061321d565b92505050611079565b61287983612ad4565b61288282612ad4565b6001600160a01b038316600090815260046020526040812080548392906128aa908490613206565b90915550506001600160a01b038216600090815260046020526040812080548392906128d79084906132a9565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161292391815260200190565b60405180910390a3505050565b60006003821115612991575080600061294a60028361321d565b6129559060016132a9565b90505b8181101561298b57905080600281612970818661321d565b61297a91906132a9565b612984919061321d565b9050612958565b50919050565b811561299b575060015b919050565b6129a982612ad4565b80600260008282546129bb91906132a9565b90915550506001600160a01b038216600090815260046020526040812080548392906129e89084906132a9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6000818310612a4257816111b2565b5090919050565b612a5282612ad4565b8060026000828254612a649190613206565b90915550506001600160a01b03821660009081526004602052604081208054839290612a91908490613206565b90915550506040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001612a27565b6001600160a01b0381166000908152600460205260409020548015612c02576001600160a01b0382166000908152600f60209081526040808320805460108085529285208054600d54600e54948190559490955282905593612b368584613206565b90506000612b448584613206565b90508115612b9f576000670de0b6b3a7640000612b61848a61328a565b612b6b919061321d565b6001600160a01b038a16600090815260116020526040812080549293508392909190612b989084906132a9565b9091555050505b8015612bf8576000670de0b6b3a7640000612bba838a61328a565b612bc4919061321d565b6001600160a01b038a16600090815260126020526040812080549293508392909190612bf19084906132a9565b9091555050505b5050505050505050565b600d546001600160a01b0383166000908152600f6020908152604080832093909355600e546010909152919020555050565b6000805b60ff811015612d3a57826000612c4e8783612d43565b905085811015612c9e576000612c648887612de0565b612c6e8389613206565b612c8090670de0b6b3a764000061328a565b612c8a919061321d565b9050612c9681876132a9565b955050612ce0565b6000612caa8887612de0565b612cb48884613206565b612cc690670de0b6b3a764000061328a565b612cd0919061321d565b9050612cdc8187613206565b9550505b81851115612d09576001612cf48387613206565b11612d04578493505050506111b2565b612d25565b6001612d158684613206565b11612d25578493505050506111b2565b50508080612d32906132d7565b915050612c38565b50909392505050565b6000670de0b6b3a764000082818581612d5c828061328a565b612d66919061321d565b612d70919061328a565b612d7a919061321d565b612d84919061328a565b612d8e919061321d565b670de0b6b3a7640000808481612da4828061328a565b612dae919061321d565b612db8919061328a565b612dc2919061321d565b612dcc908661328a565b612dd6919061321d565b6111b291906132a9565b6000670de0b6b3a76400008381612df7828061328a565b612e01919061321d565b612e0b919061328a565b612e15919061321d565b670de0b6b3a764000080612e29858061328a565b612e33919061321d565b612e3e86600361328a565b612dcc919061328a565b80356001600160a01b038116811461299b57600080fd5b600080600080600060808688031215612e7757600080fd5b8535945060208601359350612e8e60408701612e48565b9250606086013567ffffffffffffffff80821115612eab57600080fd5b818801915088601f830112612ebf57600080fd5b813581811115612ece57600080fd5b896020828501011115612ee057600080fd5b9699959850939650602001949392505050565b60005b83811015612f0e578181015183820152602001612ef6565b83811115612f1d576000848401525b50505050565b6020815260008251806020840152612f42816040850160208701612ef3565b601f01601f19169190910160400192915050565b60008060408385031215612f6957600080fd5b612f7283612e48565b946020939093013593505050565b60008060008060808587031215612f9657600080fd5b612f9f85612e48565b966020860135965060408601359560600135945092505050565b6020808252825182820181905260009190848201906040850190845b81811015612ff157835183529284019291840191600101612fd5565b50909695505050505050565b60006020828403121561300f57600080fd5b6111b282612e48565b60008060006060848603121561302d57600080fd5b61303684612e48565b925061304460208501612e48565b9150604084013590509250925092565b60006020828403121561306657600080fd5b5035919050565b60008060006060848603121561308257600080fd5b61308b84612e48565b95602085013595506040909401359392505050565b600080600080600080600060e0888a0312156130bb57600080fd5b6130c488612e48565b96506130d260208901612e48565b95506040880135945060608801359350608088013560ff811681146130f657600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561312657600080fd5b61312f83612e48565b915061313d60208401612e48565b90509250929050565b6000806040838503121561315957600080fd5b8235915061313d60208401612e48565b60006020828403121561317b57600080fd5b815180151581146111b257600080fd5b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b6000602082840312156131e957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015613218576132186131f0565b500390565b60008261323a57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061325357607f821691505b6020821081141561298b57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60008160001904831182151516156132a4576132a46131f0565b500290565b600082198211156132bc576132bc6131f0565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156132eb576132eb6131f0565b5060010190565b600080835481600182811c91508083168061330e57607f831692505b602080841082141561332e57634e487b7160e01b86526022600452602486fd5b818015613342576001811461335357613380565b60ff19861689528489019650613380565b60008a81526020902060005b868110156133785781548b82015290850190830161335f565b505084890196505b509498975050505050505050565b600082516133a0818460208701612ef3565b919091019291505056fea26469706673582212207f58bd00d2eb96a539b3386a208faf0f615fc5343486932c3b3ede7daebbb1e364736f6c634300080b003360e060405234801561001057600080fd5b5060405161037038038061037083398101604081905261002f91610066565b336080526001600160a01b0391821660a0521660c052610099565b80516001600160a01b038116811461006157600080fd5b919050565b6000806040838503121561007957600080fd5b6100828361004a565b91506100906020840161004a565b90509250929050565b60805160a05160c0516102ab6100c5600039600060b601526000608501526000605001526102ab6000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063533cf5ce14610030575b600080fd5b61004361003e3660046101d0565b610045565b005b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461007a57600080fd5b81156100ab576100ab7f000000000000000000000000000000000000000000000000000000000000000084846100e1565b80156100dc576100dc7f000000000000000000000000000000000000000000000000000000000000000084836100e1565b505050565b6000836001600160a01b03163b116100f857600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916101549190610211565b6000604051808303816000865af19150503d8060008114610191576040519150601f19603f3d011682016040523d82523d6000602084013e610196565b606091505b50915091508180156101c05750805115806101c05750808060200190518101906101c0919061024c565b6101c957600080fd5b5050505050565b6000806000606084860312156101e557600080fd5b83356001600160a01b03811681146101fc57600080fd5b95602085013595506040909401359392505050565b6000825160005b818110156102325760208186018101518583015201610218565b81811115610241576000828501525b509190910192915050565b60006020828403121561025e57600080fd5b8151801515811461026e57600080fd5b939250505056fea2646970667358221220ff8d5cca7112533e8b3f4bd124fe1df06f370b59c00b61b393e9bdc701da368364736f6c634300080b0033
Deployed ByteCode Sourcemap
2931:23414:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17701:2431;;;;;;:::i;:::-;;:::i;:::-;;2960:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10403:223;10528:8;;10559;;10600:18;;10403:223;;;;1852:25:1;;;1908:2;1893:18;;1886:34;;;;1936:18;;;1929:34;1840:2;1825:18;10403:223:0;1650:319:1;23740:206:0;;;;;;:::i;:::-;;:::i;:::-;;;2398:14:1;;2391:22;2373:41;;2361:2;2346:18;23740:206:0;2233:187:1;3764:31:0;;;;;;;;-1:-1:-1;;;;;2589:32:1;;;2571:51;;2559:2;2544:18;3764:31:0;2425:203:1;14098:902:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3243:27::-;;;;;;;;;3812:25:1;;;3800:2;3785:18;3243:27:0;3666:177:1;11782:777:0;;;:::i;4936:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;3206:28;;;;;25180:511;;;;;;:::i;:::-;;:::i;4220:33::-;;;;;;:::i;:::-;;:::i;3012:35::-;;3045:2;3012:35;;;;;4729:4:1;4717:17;;;4699:36;;4687:2;4672:18;3012:35:0;4557:184:1;4726:22:0;;;;;;7328:208;7485:8;;7495;;7328:208;;;7463:9;5055:25:1;;7474:9:0;5111:2:1;5096:18;;5089:34;5139:18;;;5132:34;;;;5197:2;5182:18;;5175:34;7505:6:0;5253:14:1;5246:22;5240:3;5225:19;;5218:51;-1:-1:-1;;;;;7513:6:0;5344:15:1;;5296:3;5323:19;;5316:44;7521:6:0;5397:15:1;5391:3;5376:19;;5369:44;5042:3;5027:19;7328:208:0;4746:673:1;4344:20:0;;;;;;5084:42;;;;;;:::i;:::-;;;;;;;;;;;;;;12653:723;;;;;;:::i;:::-;;:::i;13929:161::-;;;;;;:::i;:::-;;:::i;4371:20::-;;;;;;15155:1072;;;;;;:::i;:::-;;:::i;3348:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;3660:38;;;;;;:::i;:::-;;;;;;;;;;;;;;16382:1207;;;;;;:::i;:::-;;:::i;:::-;;;;5925:25:1;;;5981:2;5966:18;;5959:34;;;;5898:18;16382:1207:0;5751:248:1;7191:129:0;;;:::i;:::-;;;;6224:13:1;;6206:32;;6294:4;6282:17;;;6276:24;6254:20;;;6247:54;6345:17;;;6339:24;6317:20;;;6310:54;6194:2;6179:18;7191:129:0;6004:366:1;2985:20:0;;;:::i;3840:29::-;;;;;7544:101;;;;-1:-1:-1;;;;;7622:6:0;6605:15:1;;6587:34;;7630:6:0;6657:15:1;6652:2;6637:18;;6630:43;6522:18;7544:101:0;6375:304:1;13481:396:0;;;;;;:::i;:::-;;:::i;4885:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;5133:42;;;;;;:::i;:::-;;;;;;;;;;;;;;25023:149;;;;;;:::i;:::-;;:::i;20181:294::-;;;;;;:::i;:::-;;:::i;4755:22::-;;;;;;4437:34;;;;;;4478;;;;;;4398:30;;;;;;3802:31;;;;;7739:489;;;:::i;23954:1061::-;;;;;;:::i;:::-;;:::i;3279:62::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;7080:103;7156:12;:19;7080:103;;21662:303;;;;;;:::i;:::-;;:::i;20524:156::-;;;:::i;17701:2431::-;6989:9;;7002:1;6989:14;6981:23;;;;;;7027:1;7015:9;:13;;;;17830:7:::1;-1:-1:-1::0;;;;;17816:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17815:34;17807:43;;;::::0;::::1;;17882:1;17869:10;:14;:32;;;;17900:1;17887:10;:14;17869:32;17861:48;;;::::0;-1:-1:-1;;;17861:48:0;;8390:2:1;17861:48:0::1;::::0;::::1;8372:21:1::0;8429:1;8409:18;;;8402:29;-1:-1:-1;;;8447:18:1;;;8440:33;8490:18;;17861:48:0::1;;;;;;;;;17995:8;::::0;18005::::1;::::0;18033:22;;::::1;:48:::0;::::1;;;;18072:9;18059:10;:22;18033:48;18025:63;;;::::0;-1:-1:-1;;;18025:63:0;;8721:2:1;18025:63:0::1;::::0;::::1;8703:21:1::0;8760:1;8740:18;;;8733:29;-1:-1:-1;;;8778:18:1;;;8771:32;8820:18;;18025:63:0::1;8519:325:1::0;18025:63:0::1;18135:14;::::0;18289:6:::1;18297;-1:-1:-1::0;;;;;18323:13:0;;::::1;::::0;;::::1;;::::0;::::1;::::0;:30:::1;;;18346:7;-1:-1:-1::0;;;;;18340:13:0::1;:2;-1:-1:-1::0;;;;;18340:13:0::1;;;18323:30;18315:45;;;::::0;-1:-1:-1;;;18315:45:0;;9051:2:1;18315:45:0::1;::::0;::::1;9033:21:1::0;9090:1;9070:18;;;9063:29;-1:-1:-1;;;9108:18:1;;;9101:32;9150:18;;18315:45:0::1;8849:325:1::0;18315:45:0::1;18397:14:::0;;18393:58:::1;;18413:38;18427:7;18436:2;18440:10;18413:13;:38::i;:::-;18500:14:::0;;18496:58:::1;;18516:38;18530:7;18539:2;18543:10;18516:13;:38::i;:::-;18603:15:::0;;18599:85:::1;;18620:64;::::0;-1:-1:-1;;;18620:64:0;;-1:-1:-1;;;;;18620:22:0;::::1;::::0;::::1;::::0;:64:::1;::::0;18643:10:::1;::::0;18655;;18667;;18679:4;;;;18620:64:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18599:85;18741:39;::::0;-1:-1:-1;;;18741:39:0;;18774:4:::1;18741:39;::::0;::::1;2571:51:1::0;-1:-1:-1;;;;;18741:24:0;::::1;::::0;::::1;::::0;2544:18:1;;18741:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18803;::::0;-1:-1:-1;;;18803:39:0;;18836:4:::1;18803:39;::::0;::::1;2571:51:1::0;18729::0;;-1:-1:-1;;;;;;18803:24:0;::::1;::::0;::::1;::::0;2544:18:1;;18803:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18791:51;;18185:669;;18864:14;18905:10;18893:9;:22;;;;:::i;:::-;18881:9;:34;:77;;18957:1;18881:77;;;18931:22;18943:10:::0;18931:9;:22:::1;:::i;:::-;18918:36;::::0;:9;:36:::1;:::i;:::-;18864:94:::0;-1:-1:-1;18969:14:0::1;18998:22;19010:10:::0;18998:9;:22:::1;:::i;:::-;18986:9;:34;:77;;19062:1;18986:77;;;19036:22;19048:10:::0;19036:9;:22:::1;:::i;:::-;19023:36;::::0;:9;:36:::1;:::i;:::-;18969:94;;19094:1;19082:9;:13;:30;;;;19111:1;19099:9;:13;19082:30;19074:46;;;::::0;-1:-1:-1;;;19074:46:0;;10469:2:1;19074:46:0::1;::::0;::::1;10451:21:1::0;10508:1;10488:18;;;10481:29;-1:-1:-1;;;10526:18:1;;;10519:33;10569:18;;19074:46:0::1;10267:326:1::0;19074:46:0::1;19281:6;19289;19311:13:::0;;19307:46:::1;;19326:27;19335:17;19347:5;19335:9:::0;:17:::1;:::i;:::-;19326:8;:27::i;:::-;19420:13:::0;;19416:46:::1;;19435:27;19444:17;19456:5;19444:9:::0;:17:::1;:::i;:::-;19435:8;:27::i;:::-;19537:39;::::0;-1:-1:-1;;;19537:39:0;;19570:4:::1;19537:39;::::0;::::1;2571:51:1::0;-1:-1:-1;;;;;19537:24:0;::::1;::::0;::::1;::::0;2544:18:1;;19537:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19756;::::0;-1:-1:-1;;;19756:39:0;;19789:4:::1;19756:39;::::0;::::1;2571:51:1::0;19525::0;;-1:-1:-1;;;;;;19756:24:0;::::1;::::0;::::1;::::0;2544:18:1;;19756:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19744:51;;19924:24;19927:9;19938;19924:2;:24::i;:::-;19896;19899:9;19910;19896:2;:24::i;:::-;:52;;19888:66;;;::::0;-1:-1:-1;;;19888:66:0;;11022:2:1;19888:66:0::1;::::0;::::1;11004:21:1::0;11061:1;11041:18;;;11034:29;-1:-1:-1;;;11079:18:1;;;11072:31;11120:18;;19888:66:0::1;10820:324:1::0;19888:66:0::1;19168:811;;19991:51;19999:9;20010;20021;20032;19991:7;:51::i;:::-;20058:66;::::0;;11380:25:1;;;11436:2;11421:18;;11414:34;;;11464:18;;;11457:34;;;11522:2;11507:18;;11500:34;;;-1:-1:-1;;;;;20058:66:0;::::1;::::0;20063:10:::1;::::0;20058:66:::1;::::0;11367:3:1;11352:19;20058:66:0::1;;;;;;;-1:-1:-1::0;;7063:1:0;7051:9;:13;-1:-1:-1;;;;;;;;;17701:2431:0:o;2960:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23740:206::-;23832:10;23805:4;23822:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;23822:30:0;;;;;;;;;;:39;;;23879:37;23805:4;;23822:30;;23879:37;;;;23855:6;3812:25:1;;3800:2;3785:18;;3666:177;23879:37:0;;;;;;;;-1:-1:-1;23934:4:0;23740:206;;;;;:::o;14098:902::-;14193:13;14219:21;14254:6;14243:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14243:18:0;-1:-1:-1;14288:12:0;:19;14219:42;;-1:-1:-1;14274:11:0;;14288:21;;14308:1;;14288:21;:::i;:::-;14274:35;-1:-1:-1;14320:6:0;14339:15;14348:6;14339;:15;:::i;:::-;14329:26;;:6;:26;:::i;:::-;14320:35;;14366:14;14395:10;14422:546;14433:6;14429:1;:10;14422:546;;;14479:10;14483:6;14479:1;:10;:::i;:::-;14467:22;;14504:16;14559:12;14572:1;14559:15;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;14523:12;14536:9;14523:23;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;;:61;;;;:::i;:::-;14504:80;;14599:14;14700:11;14662:12;14675:1;14662:15;;;;;;;;:::i;:::-;;;;;;;;;;;:34;;;14617:12;14630:9;14617:23;;;;;;;;:::i;:::-;;;;;;;;;;;:42;;;:79;;;;:::i;:::-;14616:95;;;;:::i;:::-;14599:112;;14726:14;14827:11;14789:12;14802:1;14789:15;;;;;;;;:::i;:::-;;;;;;;;;;;:34;;;14744:12;14757:9;14744:23;;;;;;;;:::i;:::-;;;;;;;;;;;:42;;;:79;;;;:::i;:::-;14743:95;;;;:::i;:::-;14726:112;;14870:54;14884:8;14894:7;14903:9;14914;14870:13;:54::i;:::-;14853:7;14861:5;14853:14;;;;;;;;:::i;:::-;;;;;;;;;;:71;14947:9;:5;14955:1;14947:9;:::i;:::-;14939:17;;14452:516;;;14444:6;14441:9;;;;;:::i;:::-;;;14422:546;;;-1:-1:-1;14985:7:0;;-1:-1:-1;;;;14098:902:0;;;;;;;:::o;11782:777::-;11984:22;;12038;;11937:15;11838:23;;;12235:13;10528:8;;10559;;10600:18;;10528:8;;10559;;10600:18;10403:223;12235:13;12174:74;;;;;;12286:14;12263:19;:37;12259:293;;12365:16;12384:36;12401:19;12384:14;:36;:::i;:::-;12365:55;-1:-1:-1;12457:23:0;12365:55;12457:9;:23;:::i;:::-;12435:45;;;;:::i;:::-;;-1:-1:-1;12517:23:0;12529:11;12517:9;:23;:::i;:::-;12495:45;;;;:::i;:::-;;;12302:250;12259:293;11909:650;;;11782:777;;;:::o;25180:511::-;-1:-1:-1;;;;;25339:14:0;;25259:4;25339:14;;;:9;:14;;;;;;;;25294:10;25339:23;;;;;;;;25259:4;;25294:10;;25339:23;25379:14;;;;;:52;;;-1:-1:-1;;25397:16:0;:34;;25379:52;25375:241;;;25448:17;25468:25;25487:6;25468:16;:25;:::i;:::-;-1:-1:-1;;;;;25508:14:0;;;;;;;:9;:14;;;;;;;;:23;;;;;;;;;;;;;:38;;;25568:36;;3812:25:1;;;25508:38:0;;-1:-1:-1;25508:23:0;;:14;;25568:36;;3785:18:1;25568:36:0;;;;;;;25433:183;25375:241;25628:33;25644:3;25649;25654:6;25628:15;:33::i;:::-;25679:4;25672:11;;;;25180:511;;;;;;:::o;4220:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4220:33:0;:::o;12653:723::-;12725:14;12752:31;12786:17;:15;:17::i;:::-;12752:51;;12815:23;12840;12868:25;:23;:25::i;:::-;-1:-1:-1;12927:22:0;;12814:79;;-1:-1:-1;12814:79:0;-1:-1:-1;12908:15:0;:41;12904:124;;;12981:12;12994:19;;:21;;13014:1;;12994:21;:::i;:::-;12981:35;;;;;;;;:::i;:::-;;;;;;;;;;;12966:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12904:124;13077:22;;13040:16;;13059:40;;:15;:40;:::i;:::-;13040:59;;13110:14;13184:11;13149:12;:31;;;13128:18;:52;;;;:::i;:::-;13127:68;;;;:::i;:::-;13110:85;;13206:14;13280:11;13245:12;:31;;;13224:18;:52;;;;:::i;:::-;13223:68;;;;:::i;:::-;13206:85;;13314:54;13328:8;13338:7;13347:9;13358;13314:13;:54::i;:::-;13302:66;12653:723;-1:-1:-1;;;;;;;;;12653:723:0:o;13929:161::-;14013:13;14046:36;14053:7;14062:8;14072:6;14080:1;14046:6;:36::i;15155:1072::-;15204:14;6989:9;;7002:1;6989:14;6981:23;;;;;;7027:1;7015:9;:13;15267:8:::1;::::0;15277::::1;::::0;15314:38:::1;::::0;-1:-1:-1;;;15314:38:0;;15346:4:::1;15314:38;::::0;::::1;2571:51:1::0;15232:14:0::1;::::0;15320:6:::1;-1:-1:-1::0;;;;;15314:23:0::1;::::0;::::1;::::0;2544:18:1;;15314:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15380;::::0;-1:-1:-1;;;15380:38:0;;15412:4:::1;15380:38;::::0;::::1;2571:51:1::0;15297:55:0;;-1:-1:-1;15363:14:0::1;::::0;-1:-1:-1;;;;;15386:6:0::1;15380:23;::::0;::::1;::::0;2544:18:1;;15380:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15363:55:::0;-1:-1:-1;15429:13:0::1;15445:21;15457:9:::0;15445;:21:::1;:::i;:::-;15429:37:::0;-1:-1:-1;15477:13:0::1;15493:21;15505:9:::0;15493;:21:::1;:::i;:::-;15547:11;::::0;15477:37;;-1:-1:-1;15651:17:0;15647:345:::1;;3750:5;15697:30;15707:19;15718:8:::0;15707;:19:::1;:::i;:::-;15697:9;:30::i;:::-;:50;;;;:::i;:::-;15685:62;;15762:36;15776:1;3750:5;15762;:36::i;:::-;15647:345;;;15898:82;15933:9:::0;15907:23:::1;15918:12:::0;15907:8;:23:::1;:::i;:::-;:35;;;;:::i;:::-;15970:9:::0;15944:23:::1;15955:12:::0;15944:8;:23:::1;:::i;:::-;:35;;;;:::i;:::-;15898:8;:82::i;:::-;15886:94;;15647:345;16022:1;16010:9;:13;16002:29;;;::::0;-1:-1:-1;;;16002:29:0;;12702:2:1;16002:29:0::1;::::0;::::1;12684:21:1::0;12741:1;12721:18;;;12714:29;-1:-1:-1;;;12759:18:1;;;12752:33;12802:18;;16002:29:0::1;12500:326:1::0;16002:29:0::1;16083:20;16089:2;16093:9;16083:5;:20::i;:::-;16116:51;16124:9;16135;16146;16157;16116:7;:51::i;:::-;16183:36;::::0;;5925:25:1;;;5981:2;5966:18;;5959:34;;;16188:10:0::1;::::0;16183:36:::1;::::0;5898:18:1;16183:36:0::1;;;;;;;-1:-1:-1::0;;7063:1:0;7051:9;:13;-1:-1:-1;15155:1072:0;;;-1:-1:-1;;;;;15155:1072:0:o;16382:1207::-;16431:12;16445;6989:9;;7002:1;6989:14;6981:23;;;;;;7027:1;7015:9;:13;16506:8:::1;::::0;16516::::1;::::0;16617:39:::1;::::0;-1:-1:-1;;;16617:39:0;;16650:4:::1;16617:39;::::0;::::1;2571:51:1::0;16574:6:0::1;::::0;16582::::1;::::0;16471:14:::1;::::0;-1:-1:-1;;;;;16617:24:0;::::1;::::0;::::1;::::0;2544:18:1;;16617:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16684;::::0;-1:-1:-1;;;16684:39:0;;16717:4:::1;16684:39;::::0;::::1;2571:51:1::0;16600:56:0;;-1:-1:-1;16667:14:0::1;::::0;-1:-1:-1;;;;;16684:24:0;::::1;::::0;::::1;::::0;2544:18:1;;16684:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16770:4;16734:15;16752:24:::0;;;:9:::1;:24;::::0;;;;;16809:11:::1;::::0;16667:56;;-1:-1:-1;16752:24:0;16809:11;16919:22:::1;16932:9:::0;16752:24;16919:22:::1;:::i;:::-;:37;;;;:::i;:::-;16909:47:::0;-1:-1:-1;17050:12:0;17025:22:::1;17038:9:::0;17025:10;:22:::1;:::i;:::-;:37;;;;:::i;:::-;17015:47;;17139:1;17129:7;:11;:26;;;;;17154:1;17144:7;:11;17129:26;17121:42;;;::::0;-1:-1:-1;;;17121:42:0;;13033:2:1;17121:42:0::1;::::0;::::1;13015:21:1::0;13072:1;13052:18;;;13045:29;-1:-1:-1;;;13090:18:1;;;13083:33;13133:18;;17121:42:0::1;12831:326:1::0;17121:42:0::1;17215:32;17229:4;17236:10;17215:5;:32::i;:::-;17258:35;17272:7;17281:2;17285:7;17258:13;:35::i;:::-;17304;17318:7;17327:2;17331:7;17304:13;:35::i;:::-;17362:39;::::0;-1:-1:-1;;;17362:39:0;;17395:4:::1;17362:39;::::0;::::1;2571:51:1::0;-1:-1:-1;;;;;17362:24:0;::::1;::::0;::::1;::::0;2544:18:1;;17362:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17424;::::0;-1:-1:-1;;;17424:39:0;;17457:4:::1;17424:39;::::0;::::1;2571:51:1::0;17350::0;;-1:-1:-1;;;;;;17424:24:0;::::1;::::0;::::1;::::0;2544:18:1;;17424:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17412:51;;17476;17484:9;17495;17506;17517;17476:7;:51::i;:::-;17543:38;::::0;;5925:25:1;;;5981:2;5966:18;;5959:34;;;-1:-1:-1;;;;;17543:38:0;::::1;::::0;17548:10:::1;::::0;17543:38:::1;::::0;5898:18:1;17543:38:0::1;;;;;;;16459:1130;;;;;;;;7063:1:::0;7051:9;:13;;;;16382:1207;;;:::o;7191:129::-;7239:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;7239:18:0;7277:12;7290:19;;:21;;7310:1;;7290:21;:::i;:::-;7277:35;;;;;;;;:::i;:::-;;;;;;;;;;;7270:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7191:129;:::o;2985:20::-;;;;;;;:::i;13481:396::-;13569:14;13596:22;13621:41;13628:7;13637:8;13647:11;13660:1;13621:6;:41::i;:::-;13596:66;-1:-1:-1;13673:27:0;;13711:105;13732:7;:14;13728:1;:18;13711:105;;;13794:7;13802:1;13794:10;;;;;;;;:::i;:::-;;;;;;;13768:36;;;;;:::i;:::-;;-1:-1:-1;13748:3:0;;;;:::i;:::-;;;;13711:105;;;-1:-1:-1;13833:36:0;13858:11;13833:22;:36;:::i;:::-;13826:43;13481:396;-1:-1:-1;;;;;;13481:396:0:o;25023:149::-;25085:4;25102:40;25118:10;25130:3;25135:6;25102:15;:40::i;:::-;-1:-1:-1;25160:4:0;25023:149;;;;:::o;20181:294::-;6989:9;;7002:1;6989:14;6981:23;;;;;;7027:1;7015:9;:13;20366:8:::1;::::0;20323:39:::1;::::0;-1:-1:-1;;;20323:39:0;;20356:4:::1;20323:39;::::0;::::1;2571:51:1::0;20270:6:0::1;::::0;20278::::1;::::0;20296:80:::1;::::0;20270:6;;20319:2;;20366:8;-1:-1:-1;;;;;20323:24:0;::::1;::::0;::::1;::::0;2544:18:1;;20323:39:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;;;:::i;:::-;20296:13;:80::i;:::-;20457:8;::::0;20414:39:::1;::::0;-1:-1:-1;;;20414:39:0;;20447:4:::1;20414:39;::::0;::::1;2571:51:1::0;20387:80:0::1;::::0;20401:7;;20410:2;;20457:8;-1:-1:-1;;;;;20414:24:0;::::1;::::0;::::1;::::0;2544:18:1;;20414:39:0::1;2425:203:1::0;20387:80:0::1;-1:-1:-1::0;;7063:1:0;7051:9;:13;-1:-1:-1;20181:294:0:o;7739:489::-;7778:13;7793;7819:22;7830:10;7819;:22::i;:::-;-1:-1:-1;;7876:10:0;7865:22;;;;:10;:22;;;;;;;;;7909:10;:22;;;;;;;7948:12;;;;:28;;;7975:1;7964:8;:12;7948:28;7944:277;;;8004:10;8018:1;7993:22;;;:10;:22;;;;;;;;:26;;;8034:10;:22;;;;;;:26;;;;8077:61;-1:-1:-1;;;8077:61:0;;;;;13504:51:1;;;;13571:18;;;13564:34;;;13614:18;;;13607:34;;;-1:-1:-1;;;;;8088:4:0;8077:29;;;;13477:18:1;;8077:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8160:49:0;;;5925:25:1;;;5981:2;5966:18;;5959:34;;;8178:10:0;;-1:-1:-1;8178:10:0;;-1:-1:-1;8160:49:0;;5898:18:1;8160:49:0;;;;;;;7944:277;7739:489;;:::o;23954:1061::-;24100:15;24088:8;:27;;24080:55;;;;-1:-1:-1;;;24080:55:0;;13854:2:1;24080:55:0;;;13836:21:1;13893:2;13873:18;;;13866:30;-1:-1:-1;;;13912:18:1;;;13905:45;13967:18;;24080:55:0;13652:339:1;24080:55:0;24218:95;24348:4;24332:22;;;;;;:::i;:::-;;;;;;;;;;24189:277;;;15493:25:1;;;;15534:18;;15527:34;;;;24373:14:0;15577:18:1;;;15570:34;24406:13:0;15620:18:1;;;15613:34;24446:4:0;15663:19:1;;;15656:61;15465:19;;24189:277:0;;;-1:-1:-1;;24189:277:0;;;;;;;;;24165:312;;24189:277;24165:312;;;;24146:16;:331;;;-1:-1:-1;;;;;24689:13:0;;24488:14;24689:13;;;:6;:13;;;;;;:15;;3587:66;;24666:5;;24673:7;;24682:5;;24689:15;24488:14;24689:15;;;:::i;:::-;;;;-1:-1:-1;24638:77:0;;;;;;16015:25:1;;;;-1:-1:-1;;;;;16114:15:1;;;16094:18;;;16087:43;16166:15;;;;16146:18;;;16139:43;16198:18;;;16191:34;16241:19;;;16234:35;16285:19;;;16278:35;;;15987:19;;24638:77:0;;;;;;;;;;;;24628:88;;;;;;24529:202;;;;;;;;-1:-1:-1;;;16582:27:1;;16634:1;16625:11;;16618:27;;;;16670:2;16661:12;;16654:28;16707:2;16698:12;;16324:392;24529:202:0;;;;-1:-1:-1;;24529:202:0;;;;;;;;;24505:237;;24529:202;24505:237;;;;24753:24;24780:26;;;;;;;;;16948:25:1;;;17021:4;17009:17;;16989:18;;;16982:45;;;;17043:18;;;17036:34;;;17086:18;;;17079:34;;;24505:237:0;;-1:-1:-1;24753:24:0;24780:26;;16920:19:1;;24780:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24780:26:0;;-1:-1:-1;;24780:26:0;;;-1:-1:-1;;;;;;;24825:30:0;;;;;;:59;;;24879:5;-1:-1:-1;;;;;24859:25:0;:16;-1:-1:-1;;;;;24859:25:0;;24825:59;24817:97;;;;-1:-1:-1;;;24817:97:0;;17326:2:1;24817:97:0;;;17308:21:1;17365:2;17345:18;;;17338:30;17404:27;17384:18;;;17377:55;17449:18;;24817:97:0;17124:349:1;24817:97:0;-1:-1:-1;;;;;24925:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;24976:31;;3812:25:1;;;24976:31:0;;3785:18:1;24976:31:0;;;;;;;24069:946;;23954:1061;;;;;;;:::o;21662:303::-;21792:8;;21802;;21739:4;;21792:8;21834:16;21845:5;21834:8;:16;:::i;:::-;21822:28;;;;:::i;:::-;;;21903:54;21917:8;21927:7;21936:9;21947;21903:13;:54::i;:::-;21896:61;21662:303;-1:-1:-1;;;;;21662:303:0:o;20524:156::-;6989:9;;7002:1;6989:14;6981:23;;;;;;7027:1;7015:9;:13;20573:38:::1;::::0;-1:-1:-1;;;20573:38:0;;20605:4:::1;20573:38;::::0;::::1;2571:51:1::0;20565:107:0::1;::::0;20579:6:::1;-1:-1:-1::0;;;;;20573:23:0::1;::::0;::::1;::::0;2544:18:1;;20573:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20613;::::0;-1:-1:-1;;;20613:38:0;;20645:4:::1;20613:38;::::0;::::1;2571:51:1::0;20619:6:0::1;-1:-1:-1::0;;;;;20613:23:0::1;::::0;::::1;::::0;2544:18:1;;20613:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20653:8;;20663;;20565:7;:107::i;:::-;7063:1:::0;7051:9;:13;20524:156::o;26018:324::-;26129:1;26109:5;-1:-1:-1;;;;;26109:17:0;;:21;26101:30;;;;;;26198:58;;;-1:-1:-1;;;;;17670:32:1;;;26198:58:0;;;17652:51:1;17719:18;;;;17712:34;;;26198:58:0;;;;;;;;;;17625:18:1;;;;26198:58:0;;;;;;;-1:-1:-1;;;;;26198:58:0;-1:-1:-1;;;26198:58:0;;;26187:70;;-1:-1:-1;;;;26187:10:0;;;;:70;;26198:58;26187:70;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26142:115;;;;26276:7;:57;;;;-1:-1:-1;26288:11:0;;:16;;:44;;;26319:4;26308:24;;;;;;;;;;;;:::i;:::-;26268:66;;;;;;26090:252;;26018:324;;;:::o;8266:343::-;8317:35;8331:6;8339:4;8345:6;8317:13;:35::i;:::-;8435:11;;8402:14;;8419:13;:6;8428:4;8419:13;:::i;:::-;:27;;;;:::i;:::-;8402:44;-1:-1:-1;8504:10:0;;8500:59;;8541:6;8531;;:16;;;;;;;:::i;:::-;;;;-1:-1:-1;;8500:59:0;8574:27;;;5925:25:1;;;8599:1:0;5981:2:1;5966:18;;5959:34;8579:10:0;;8574:27;;5898:18:1;8574:27:0;;;;;;;;8306:303;8266:343;:::o;8647:261::-;8698:35;8712:6;8720:4;8726:6;8698:13;:35::i;:::-;8777:11;;8744:14;;8761:13;:6;8770:4;8761:13;:::i;:::-;:27;;;;:::i;:::-;8744:44;-1:-1:-1;8803:10:0;;8799:59;;8840:6;8830;;:16;;;;;;;:::i;:::-;;;;-1:-1:-1;;8799:59:0;8873:27;;;8890:1;5925:25:1;;5981:2;5966:18;;5959:34;;;8878:10:0;;8873:27;;5898:18:1;8873:27:0;5751:248:1;22865:401:0;22916:4;22937:6;22933:326;;;22960:7;22981:9;22970:8;:1;22974:4;22970:8;:::i;:::-;:20;;;;:::i;:::-;22960:30;-1:-1:-1;23005:7:0;23026:9;23015:8;:1;23019:4;23015:8;:::i;:::-;:20;;;;:::i;:::-;23005:30;-1:-1:-1;23050:7:0;23072:4;23061:7;23005:30;23061:2;:7;:::i;:::-;23060:16;;;;:::i;:::-;23050:26;-1:-1:-1;23091:7:0;23133:4;23122:7;23127:2;;23122:7;:::i;:::-;23121:16;;;;:::i;:::-;23114:4;23103:7;23108:2;;23103:7;:::i;:::-;23102:16;;;;:::i;:::-;:35;;;;:::i;:::-;23091:47;-1:-1:-1;23170:4:0;23160:7;23091:47;23160:2;:7;:::i;:::-;:14;;;;:::i;:::-;23153:21;;;;;;;;22933:326;23231:5;23235:1;23231;:5;:::i;:::-;23224:12;;;;10711:965;10894:18;;10832:15;;10810:19;;10877:35;;10832:15;10877:35;:::i;:::-;10858:54;;10964:1;10950:11;:15;:33;;;;-1:-1:-1;10969:14:0;;;10950:33;:51;;;;-1:-1:-1;10987:14:0;;;10950:51;10946:197;;;11044:23;11056:11;11044:9;:23;:::i;:::-;11018:22;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;11108:23:0;;-1:-1:-1;11120:11:0;11108:9;:23;:::i;:::-;11082:22;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;10946:197:0;11155:25;11183:17;:15;:17::i;:::-;11242:16;;11155:45;;-1:-1:-1;11225:33:0;;:14;:33;:::i;:::-;11211:47;;4207:4;11376:11;:24;11372:151;;;11435:75;;;;;;;;;;;11463:22;;11435:75;;;;;;11487:22;;11435:75;;;;;;11417:12;:94;;;;;;;-1:-1:-1;11417:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11372:151;11533:8;:19;;;11563:8;:19;;;11593:18;:35;;;11644:24;;;5925:25:1;;;5981:2;5966:18;;5959:34;;;11644:24:0;;5898:18:1;11644:24:0;;;;;;;10799:877;;;10711:965;;;;:::o;21973:884::-;22083:4;22104:6;22100:750;;;22127:7;22138:24;22141:9;22152;22138:2;:24::i;:::-;22127:35;-1:-1:-1;22208:9:0;22189:16;:9;22201:4;22189:16;:::i;:::-;:28;;;;:::i;:::-;22177:40;-1:-1:-1;22263:9:0;22244:16;:9;22256:4;22244:16;:::i;:::-;:28;;;;:::i;:::-;22232:40;;22288:13;22303;22331:6;-1:-1:-1;;;;;22320:17:0;:7;-1:-1:-1;;;;;22320:17:0;;:67;;22366:9;22377;22320:67;;;22341:9;22352;22320:67;22287:100;;;;22424:6;-1:-1:-1;;;;;22413:17:0;:7;-1:-1:-1;;;;;22413:17:0;;:77;;22481:9;22463:15;:8;22474:4;22463:15;:::i;:::-;:27;;;;:::i;:::-;22413:77;;;22451:9;22433:15;:8;22444:4;22433:15;:::i;:::-;:27;;;;:::i;:::-;22402:88;-1:-1:-1;22505:6:0;22525:39;22532:17;22541:8;22402:88;22532:17;:::i;:::-;22551:2;22555:8;22525:6;:39::i;:::-;22514:50;;:8;:50;:::i;:::-;22505:59;;22636:4;22602:6;-1:-1:-1;;;;;22591:17:0;:7;-1:-1:-1;;;;;22591:17:0;;:41;;22623:9;22591:41;;;22611:9;22591:41;22586:47;;:1;:47;:::i;:::-;:54;;;;:::i;:::-;22579:61;;;;;;;;22100:750;22674:13;22689;22717:6;-1:-1:-1;;;;;22706:17:0;:7;-1:-1:-1;;;;;22706:17:0;;:67;;22752:9;22763;22706:67;;;22727:9;22738;22706:67;22673:100;;-1:-1:-1;22673:100:0;-1:-1:-1;22818:19:0;22829:8;22673:100;22818:19;:::i;:::-;22795;22806:8;22795;:19;:::i;:::-;:43;;;;:::i;:::-;22788:50;;;;;;25699:311;25783:15;25794:3;25783:10;:15::i;:::-;25840;25851:3;25840:10;:15::i;:::-;-1:-1:-1;;;;;25899:14:0;;;;;;:9;:14;;;;;:24;;25917:6;;25899:14;:24;;25917:6;;25899:24;:::i;:::-;;;;-1:-1:-1;;;;;;;25934:14:0;;;;;;:9;:14;;;;;:24;;25952:6;;25934:14;:24;;25952:6;;25934:24;:::i;:::-;;;;;;;;25990:3;-1:-1:-1;;;;;25976:26:0;25985:3;-1:-1:-1;;;;;25976:26:0;;25995:6;25976:26;;;;3812:25:1;;3800:2;3785:18;;3666:177;25976:26:0;;;;;;;;25699:311;;;:::o;1181:303::-;1226:6;1253:1;1249;:5;1245:232;;;-1:-1:-1;1275:1:0;1291:6;1300:5;1304:1;1275;1300:5;:::i;:::-;:9;;1308:1;1300:9;:::i;:::-;1291:18;;1324:92;1335:1;1331;:5;1324:92;;;1361:1;-1:-1:-1;1361:1:0;1399;1361;1386:5;1361:1;1386;:5;:::i;:::-;:9;;;;:::i;:::-;1385:15;;;;:::i;:::-;1381:19;;1324:92;;;1256:171;1181:303;;;:::o;1245:232::-;1437:6;;1433:44;;-1:-1:-1;1464:1:0;1433:44;1181:303;;;:::o;23274:250::-;23335:15;23346:3;23335:10;:15::i;:::-;23426:6;23411:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;23443:14:0;;;;;;:9;:14;;;;;:24;;23461:6;;23443:14;:24;;23461:6;;23443:24;:::i;:::-;;;;-1:-1:-1;;23483:33:0;;3812:25:1;;;-1:-1:-1;;;;;23483:33:0;;;23500:1;;23483:33;;3800:2:1;3785:18;23483:33:0;;;;;;;;23274:250;;:::o;1078:97::-;1130:4;1158:1;1154;:5;:13;;1166:1;1154:13;;;-1:-1:-1;1162:1:0;;1147:20;-1:-1:-1;1078:97:0:o;23532:200::-;23593:15;23604:3;23593:10;:15::i;:::-;23634:6;23619:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;23651:14:0;;;;;;:9;:14;;;;;:24;;23669:6;;23651:14;:24;;23669:6;;23651:24;:::i;:::-;;;;-1:-1:-1;;23691:33:0;;3812:25:1;;;23713:1:0;;-1:-1:-1;;;;;23691:33:0;;;;;3800:2:1;3785:18;23691:33:0;3666:177:1;9109:1286:0;-1:-1:-1;;;;;9185:20:0;;9168:14;9185:20;;;:9;:20;;;;;;9253:13;;9249:1139;;-1:-1:-1;;;;;9304:23:0;;9283:18;9304:23;;;:12;:23;;;;;;;;;;9405:12;:23;;;;;;;;9458:6;;9536;;9557:33;;;;9656:23;;;;:33;;;9304:23;9719;9304;9458:6;9719:23;:::i;:::-;9704:38;-1:-1:-1;9815:12:0;9830:23;9840:13;9830:7;:23;:::i;:::-;9815:38;-1:-1:-1;9872:11:0;;9868:192;;9904:11;9940:4;9918:19;9930:7;9918:9;:19;:::i;:::-;:26;;;;:::i;:::-;-1:-1:-1;;;;;10013:21:0;;;;;;:10;:21;;;;;:31;;9904:40;;-1:-1:-1;9904:40:0;;10013:21;;;:31;;9904:40;;10013:31;:::i;:::-;;;;-1:-1:-1;;;9868:192:0;10078:11;;10074:142;;10110:11;10146:4;10124:19;10136:7;10124:9;:19;:::i;:::-;:26;;;;:::i;:::-;-1:-1:-1;;;;;10169:21:0;;;;;;:10;:21;;;;;:31;;10110:40;;-1:-1:-1;10110:40:0;;10169:21;;;:31;;10110:40;;10169:31;:::i;:::-;;;;-1:-1:-1;;;10074:142:0;9268:959;;;;;;9157:1238;9109:1286;:::o;9249:1139::-;10274:6;;-1:-1:-1;;;;;10248:23:0;;;;;;:12;:23;;;;;;;;:32;;;;10370:6;;10344:12;:23;;;;;;:32;9157:1238;9109:1286;:::o;20966:688::-;21031:4;;21048:580;21069:3;21065:1;:7;21048:580;;;21108:1;21094:11;21133:9;21136:2;21108:1;21133:2;:9::i;:::-;21124:18;;21165:2;21161:1;:6;21157:212;;;21188:7;21212:9;21215:2;21219:1;21212:2;:9::i;:::-;21199:6;21204:1;21199:2;:6;:::i;:::-;21198:13;;21207:4;21198:13;:::i;:::-;:23;;;;:::i;:::-;21188:33;-1:-1:-1;21244:6:0;21188:33;21244:1;:6;:::i;:::-;21240:10;;21169:97;21157:212;;;21291:7;21315:9;21318:2;21322:1;21315:2;:9::i;:::-;21302:6;21306:2;21302:1;:6;:::i;:::-;21301:13;;21310:4;21301:13;:::i;:::-;:23;;;;:::i;:::-;21291:33;-1:-1:-1;21347:6:0;21291:33;21347:1;:6;:::i;:::-;21343:10;;21272:97;21157:212;21391:6;21387:1;:10;21383:234;;;21436:1;21422:10;21426:6;21422:1;:10;:::i;:::-;:15;21418:72;;21469:1;21462:8;;;;;;;21418:72;21383:234;;;21548:1;21534:10;21543:1;21534:6;:10;:::i;:::-;:15;21530:72;;21581:1;21574:8;;;;;;;21530:72;21079:549;;21074:3;;;;;:::i;:::-;;;;21048:580;;;-1:-1:-1;21645:1:0;;20966:688;-1:-1:-1;;;20966:688:0:o;20688:137::-;20740:4;20813;20811:1;20813:4;20802:2;20813:4;20791:5;20802:2;;20791:5;:::i;:::-;:10;;;;:::i;:::-;:13;;;;:::i;:::-;:18;;;;:::i;:::-;20790:22;;;;:::i;:::-;:27;;;;:::i;:::-;20785:4;;20777:1;20785:4;20768:3;20777:1;;20768:3;:::i;:::-;:8;;;;:::i;:::-;:10;;;;:::i;:::-;:15;;;;:::i;:::-;20764:20;;:2;:20;:::i;:::-;:25;;;;:::i;:::-;:53;;;;:::i;20833:125::-;20885:4;20945;20942:2;20945:4;20931:5;20942:2;;20931:5;:::i;:::-;:10;;;;:::i;:::-;:13;;;;:::i;:::-;:18;;;;:::i;:::-;20925:4;;20915:3;20917:1;;20915:3;:::i;:::-;:8;;;;:::i;:::-;20909:4;20911:2;20909:1;:4;:::i;:::-;:15;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;192:802;289:6;297;305;313;321;374:3;362:9;353:7;349:23;345:33;342:53;;;391:1;388;381:12;342:53;427:9;414:23;404:33;;484:2;473:9;469:18;456:32;446:42;;507:38;541:2;530:9;526:18;507:38;:::i;:::-;497:48;;596:2;585:9;581:18;568:32;619:18;660:2;652:6;649:14;646:34;;;676:1;673;666:12;646:34;714:6;703:9;699:22;689:32;;759:7;752:4;748:2;744:13;740:27;730:55;;781:1;778;771:12;730:55;821:2;808:16;847:2;839:6;836:14;833:34;;;863:1;860;853:12;833:34;908:7;903:2;894:6;890:2;886:15;882:24;879:37;876:57;;;929:1;926;919:12;876:57;192:802;;;;-1:-1:-1;192:802:1;;-1:-1:-1;960:2:1;952:11;;982:6;192:802;-1:-1:-1;;;192:802:1:o;999:258::-;1071:1;1081:113;1095:6;1092:1;1089:13;1081:113;;;1171:11;;;1165:18;1152:11;;;1145:39;1117:2;1110:10;1081:113;;;1212:6;1209:1;1206:13;1203:48;;;1247:1;1238:6;1233:3;1229:16;1222:27;1203:48;;999:258;;;:::o;1262:383::-;1411:2;1400:9;1393:21;1374:4;1443:6;1437:13;1486:6;1481:2;1470:9;1466:18;1459:34;1502:66;1561:6;1556:2;1545:9;1541:18;1536:2;1528:6;1524:15;1502:66;:::i;:::-;1629:2;1608:15;-1:-1:-1;;1604:29:1;1589:45;;;;1636:2;1585:54;;1262:383;-1:-1:-1;;1262:383:1:o;1974:254::-;2042:6;2050;2103:2;2091:9;2082:7;2078:23;2074:32;2071:52;;;2119:1;2116;2109:12;2071:52;2142:29;2161:9;2142:29;:::i;:::-;2132:39;2218:2;2203:18;;;;2190:32;;-1:-1:-1;;;1974:254:1:o;2633:391::-;2719:6;2727;2735;2743;2796:3;2784:9;2775:7;2771:23;2767:33;2764:53;;;2813:1;2810;2803:12;2764:53;2836:29;2855:9;2836:29;:::i;:::-;2826:39;2912:2;2897:18;;2884:32;;-1:-1:-1;2963:2:1;2948:18;;2935:32;;3014:2;2999:18;2986:32;;-1:-1:-1;2633:391:1;-1:-1:-1;;;2633:391:1:o;3029:632::-;3200:2;3252:21;;;3322:13;;3225:18;;;3344:22;;;3171:4;;3200:2;3423:15;;;;3397:2;3382:18;;;3171:4;3466:169;3480:6;3477:1;3474:13;3466:169;;;3541:13;;3529:26;;3610:15;;;;3575:12;;;;3502:1;3495:9;3466:169;;;-1:-1:-1;3652:3:1;;3029:632;-1:-1:-1;;;;;;3029:632:1:o;3848:186::-;3907:6;3960:2;3948:9;3939:7;3935:23;3931:32;3928:52;;;3976:1;3973;3966:12;3928:52;3999:29;4018:9;3999:29;:::i;4039:328::-;4116:6;4124;4132;4185:2;4173:9;4164:7;4160:23;4156:32;4153:52;;;4201:1;4198;4191:12;4153:52;4224:29;4243:9;4224:29;:::i;:::-;4214:39;;4272:38;4306:2;4295:9;4291:18;4272:38;:::i;:::-;4262:48;;4357:2;4346:9;4342:18;4329:32;4319:42;;4039:328;;;;;:::o;4372:180::-;4431:6;4484:2;4472:9;4463:7;4459:23;4455:32;4452:52;;;4500:1;4497;4490:12;4452:52;-1:-1:-1;4523:23:1;;4372:180;-1:-1:-1;4372:180:1:o;5424:322::-;5501:6;5509;5517;5570:2;5558:9;5549:7;5545:23;5541:32;5538:52;;;5586:1;5583;5576:12;5538:52;5609:29;5628:9;5609:29;:::i;:::-;5599:39;5685:2;5670:18;;5657:32;;-1:-1:-1;5736:2:1;5721:18;;;5708:32;;5424:322;-1:-1:-1;;;5424:322:1:o;6684:693::-;6795:6;6803;6811;6819;6827;6835;6843;6896:3;6884:9;6875:7;6871:23;6867:33;6864:53;;;6913:1;6910;6903:12;6864:53;6936:29;6955:9;6936:29;:::i;:::-;6926:39;;6984:38;7018:2;7007:9;7003:18;6984:38;:::i;:::-;6974:48;;7069:2;7058:9;7054:18;7041:32;7031:42;;7120:2;7109:9;7105:18;7092:32;7082:42;;7174:3;7163:9;7159:19;7146:33;7219:4;7212:5;7208:16;7201:5;7198:27;7188:55;;7239:1;7236;7229:12;7188:55;6684:693;;;;-1:-1:-1;6684:693:1;;;;7262:5;7314:3;7299:19;;7286:33;;-1:-1:-1;7366:3:1;7351:19;;;7338:33;;6684:693;-1:-1:-1;;6684:693:1:o;7382:260::-;7450:6;7458;7511:2;7499:9;7490:7;7486:23;7482:32;7479:52;;;7527:1;7524;7517:12;7479:52;7550:29;7569:9;7550:29;:::i;:::-;7540:39;;7598:38;7632:2;7621:9;7617:18;7598:38;:::i;:::-;7588:48;;7382:260;;;;;:::o;7647:254::-;7715:6;7723;7776:2;7764:9;7755:7;7751:23;7747:32;7744:52;;;7792:1;7789;7782:12;7744:52;7828:9;7815:23;7805:33;;7857:38;7891:2;7880:9;7876:18;7857:38;:::i;7906:277::-;7973:6;8026:2;8014:9;8005:7;8001:23;7997:32;7994:52;;;8042:1;8039;8032:12;7994:52;8074:9;8068:16;8127:5;8120:13;8113:21;8106:5;8103:32;8093:60;;8149:1;8146;8139:12;9179:632;9449:1;9445;9440:3;9436:11;9432:19;9424:6;9420:32;9409:9;9402:51;9489:6;9484:2;9473:9;9469:18;9462:34;9532:6;9527:2;9516:9;9512:18;9505:34;9575:3;9570:2;9559:9;9555:18;9548:31;9616:6;9610:3;9599:9;9595:19;9588:35;9674:6;9666;9660:3;9649:9;9645:19;9632:49;9731:1;9701:22;;;9725:3;9697:32;;;9690:43;;;;9794:2;9773:15;;;-1:-1:-1;;9769:29:1;9754:45;9750:55;;9179:632;-1:-1:-1;;;;9179:632:1:o;9816:184::-;9886:6;9939:2;9927:9;9918:7;9914:23;9910:32;9907:52;;;9955:1;9952;9945:12;9907:52;-1:-1:-1;9978:16:1;;9816:184;-1:-1:-1;9816:184:1:o;10005:127::-;10066:10;10061:3;10057:20;10054:1;10047:31;10097:4;10094:1;10087:15;10121:4;10118:1;10111:15;10137:125;10177:4;10205:1;10202;10199:8;10196:34;;;10210:18;;:::i;:::-;-1:-1:-1;10247:9:1;;10137:125::o;10598:217::-;10638:1;10664;10654:132;;10708:10;10703:3;10699:20;10696:1;10689:31;10743:4;10740:1;10733:15;10771:4;10768:1;10761:15;10654:132;-1:-1:-1;10800:9:1;;10598:217::o;11545:380::-;11624:1;11620:12;;;;11667;;;11688:61;;11742:4;11734:6;11730:17;11720:27;;11688:61;11795:2;11787:6;11784:14;11764:18;11761:38;11758:161;;;11841:10;11836:3;11832:20;11829:1;11822:31;11876:4;11873:1;11866:15;11904:4;11901:1;11894:15;11930:127;11991:10;11986:3;11982:20;11979:1;11972:31;12022:4;12019:1;12012:15;12046:4;12043:1;12036:15;12062:168;12102:7;12168:1;12164;12160:6;12156:14;12153:1;12150:21;12145:1;12138:9;12131:17;12127:45;12124:71;;;12175:18;;:::i;:::-;-1:-1:-1;12215:9:1;;12062:168::o;12235:128::-;12275:3;12306:1;12302:6;12299:1;12296:13;12293:39;;;12312:18;;:::i;:::-;-1:-1:-1;12348:9:1;;12235:128::o;12368:127::-;12429:10;12424:3;12420:20;12417:1;12410:31;12460:4;12457:1;12450:15;12484:4;12481:1;12474:15;13162:135;13201:3;-1:-1:-1;;13222:17:1;;13219:43;;;13242:18;;:::i;:::-;-1:-1:-1;13289:1:1;13278:13;;13162:135::o;14125:1104::-;14255:3;14284:1;14317:6;14311:13;14347:3;14369:1;14397:9;14393:2;14389:18;14379:28;;14457:2;14446:9;14442:18;14479;14469:61;;14523:4;14515:6;14511:17;14501:27;;14469:61;14549:2;14597;14589:6;14586:14;14566:18;14563:38;14560:165;;;-1:-1:-1;;;14624:33:1;;14680:4;14677:1;14670:15;14710:4;14631:3;14698:17;14560:165;14741:18;14768:104;;;;14886:1;14881:323;;;;14734:470;;14768:104;-1:-1:-1;;14801:24:1;;14789:37;;14846:16;;;;-1:-1:-1;14768:104:1;;14881:323;14072:1;14065:14;;;14109:4;14096:18;;14979:1;14993:165;15007:6;15004:1;15001:13;14993:165;;;15085:14;;15072:11;;;15065:35;15128:16;;;;15022:10;;14993:165;;;14997:3;;15187:6;15182:3;15178:16;15171:23;;14734:470;-1:-1:-1;15220:3:1;;14125:1104;-1:-1:-1;;;;;;;;14125:1104:1:o;17757:274::-;17886:3;17924:6;17918:13;17940:53;17986:6;17981:3;17974:4;17966:6;17962:17;17940:53;:::i;:::-;18009:16;;;;;17757:274;-1:-1:-1;;17757:274:1:o
Swarm Source
ipfs://ff8d5cca7112533e8b3f4bd124fe1df06f370b59c00b61b393e9bdc701da3683
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Validator ID :
0 FTM
Amount Staked
0
Amount Delegated
0
Staking Total
0
Staking Start Epoch
0
Staking Start Time
0
Proof of Importance
0
Origination Score
0
Validation Score
0
Active
0
Online
0
Downtime
0 s
Address | Amount | claimed Rewards | Created On Epoch | Created On |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.