Contract 0xb3eeb69945d278fe6f755830316a6a43eeb09bd5 1

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x9315fb07d93cec6567295710217a6d5f87240af81b46023c302b2693ad1c10ea95589462021-07-28 22:44:163 hrs 45 mins ago0x678a09c7bc5009a3f3dc3058a998d79f2335a96b IN  BorgSwap: Router0 BNB0.00064401
0xac5925ad351900ae2c9588eff9b84a68584ef3e0c7ea7e7308df8d10431b50d295353012021-07-28 1:21:401 day 1 hr ago0xcc5fb0b484e4ed1f3e67db5a8532fa178c2328b0 IN  BorgSwap: Router0 BNB0.00056948
0x65977c416e0150e950251e08bd827cbd099eb48aea4439f8c026e0b67b59e7a495327082021-07-27 23:03:231 day 3 hrs ago0xae3ccf1c969f666c855d8e9995f3a3c55f598106 IN  BorgSwap: Router0 BNB0.00079153
0x5bcbcaf91e7f31920079d366430ee4ad2dc1a3f618bdc53aca788d39d8f65c9a95326782021-07-27 23:01:531 day 3 hrs ago0xae3ccf1c969f666c855d8e9995f3a3c55f598106 IN  BorgSwap: Router0.000793432871454 BNB0.00059174
0x8627e87a55a40d4c3b279df490055f894dfa46883f157f0f36e09f4efa1d982995324582021-07-27 22:49:481 day 3 hrs ago0x678a09c7bc5009a3f3dc3058a998d79f2335a96b IN  BorgSwap: Router0 BNB0.00066513
0x59caaed821cf4e6f647ffc138e55dd3e59ad3519a679b3ea4f50512ba3b6e99495324402021-07-27 22:48:291 day 3 hrs ago0x678a09c7bc5009a3f3dc3058a998d79f2335a96b IN  BorgSwap: Router0 BNB0.00064395
0xfeab200f6d93247ad9c4b05afb5130ab6ff6d318a8d963bf5144d7e111cb2a5d95240292021-07-27 14:45:031 day 11 hrs ago0x678a09c7bc5009a3f3dc3058a998d79f2335a96b IN  BorgSwap: Router0 BNB0.00064395
0x73adcb59eb88419c48a50b3e8d502dab8739919241e5b5929e6623036fd12a3e95095992021-07-27 2:01:422 days 28 mins ago0x497ba8be7bcd745a1f05b3f91af242c92c81ec76 IN  BorgSwap: Router0 BNB0.00056942
0x67003ca9bfd138a0a2764c802f4e4f3c704b626293157ad055d8c07b03de3bc895094972021-07-27 1:56:362 days 33 mins ago0xcc5fb0b484e4ed1f3e67db5a8532fa178c2328b0 IN  BorgSwap: Router0 BNB0.00059089
0x6d902430b293696c830eacf1cf6a821c4a3923fe3c54c03d36d80d03a0133efc95070512021-07-26 23:53:112 days 2 hrs ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  BorgSwap: Router0.068926379205671 BNB0.000844865
0x3b7c5f246fab5938c688629c1f2bfb7659f7d87fc2ca2e3a3829e15b30900e3f95069062021-07-26 23:45:562 days 2 hrs ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  BorgSwap: Router0 BNB0.000832745
0xf77f4758277711e4b32e9d9f7921a2784f94417fc47aa70a064a0abecef40d9f95068872021-07-26 23:44:592 days 2 hrs ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  BorgSwap: Router0 BNB0.000756475
0x9921e4383c10c4cc93eda8009b62c99c5549d21b8311d246704edd9a2879aa4295068452021-07-26 23:42:512 days 2 hrs ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  BorgSwap: Router0 BNB0.00064249
0x40690e4d3dae049133db1d9305f7487c78fc76ddc6fbaf7bd77dce41abf73f9c95068312021-07-26 23:42:092 days 2 hrs ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  BorgSwap: Router0 BNB0.00078822
0x65eaf9b5a2e516f02cb224c2a1737d433be72718a6811c8930abf316679421dd95067662021-07-26 23:38:542 days 2 hrs ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  BorgSwap: Router0 BNB0.000812405
0x27bbf288bc760a43b65dfcf6e15f8e3692382cb93858e8f43fef21dfaafb0ec895067262021-07-26 23:36:542 days 2 hrs ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  BorgSwap: Router0 BNB0.00107822
0x5db8ba539e1fc96f0d9fa09a68062ecdd89fb1aaf1605df94b7525514684906295066572021-07-26 23:33:272 days 2 hrs ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  BorgSwap: Router0.032225676593497 BNB0.000763005
0x07dfbebc135ddb1a6807ef381504bc0a55a595ba88559e6d93248a0d2145c95c95066382021-07-26 23:32:302 days 2 hrs ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  BorgSwap: Router0 BNB0.00064401
0x5d94e6f8b3e40c10ae90bc06e175b8027f30212e0268df0fc38ae2932693a67595066262021-07-26 23:31:542 days 2 hrs ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  BorgSwap: Router0 BNB0.00142504
0xdae0b6067b54f5a78a4d766dbbf4a218bf92b1d5cbbb85516992990e4e3251f995066072021-07-26 23:30:572 days 2 hrs ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  BorgSwap: Router0 BNB0.00071847
0x3855e9940824f823595924a858c704d5aae1234370f141bbf2db59e95e72e5b195066052021-07-26 23:30:512 days 2 hrs ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  BorgSwap: Router0 BNB0.00219119
0x748400fbf9cfac29053d225935830790a2676016dac4abddcdf38e898e6b4a6b95065612021-07-26 23:28:392 days 3 hrs ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  BorgSwap: Router0 BNB0.000944395
0x98e87a40a86d08f4a442dfea7bc4c2a79a489a1fab4e940b8a19d1dd88e73a0c95065512021-07-26 23:28:092 days 3 hrs ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  BorgSwap: Router0 BNB0.00303042
0x595bc354e2480459cb4e3c63057ce14bf8b8652e638fcce709774d4edc47b1a295065432021-07-26 23:27:452 days 3 hrs ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  BorgSwap: Router0 BNB0.00100268
0x1841b6a277d3499c5e1c3879dae94928e17074263a9228591e3a641b6cdfb09495065382021-07-26 23:27:302 days 3 hrs ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  BorgSwap: Router0 BNB0.00197338
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x9315fb07d93cec6567295710217a6d5f87240af81b46023c302b2693ad1c10ea95589462021-07-28 22:44:163 hrs 45 mins ago BorgSwap: Router0x678a09c7bc5009a3f3dc3058a998d79f2335a96b0.041852794455742678 BNB
0x9315fb07d93cec6567295710217a6d5f87240af81b46023c302b2693ad1c10ea95589462021-07-28 22:44:163 hrs 45 mins ago Binance: WBNB Token BorgSwap: Router0.041852794455742678 BNB
0xac5925ad351900ae2c9588eff9b84a68584ef3e0c7ea7e7308df8d10431b50d295353012021-07-28 1:21:401 day 1 hr ago BorgSwap: Router0xcc5fb0b484e4ed1f3e67db5a8532fa178c2328b00.060684518251533715 BNB
0xac5925ad351900ae2c9588eff9b84a68584ef3e0c7ea7e7308df8d10431b50d295353012021-07-28 1:21:401 day 1 hr ago Binance: WBNB Token BorgSwap: Router0.060684518251533715 BNB
0x5bcbcaf91e7f31920079d366430ee4ad2dc1a3f618bdc53aca788d39d8f65c9a95326782021-07-27 23:01:531 day 3 hrs ago BorgSwap: Router0xae3ccf1c969f666c855d8e9995f3a3c55f5981060.000003947427221168 BNB
0x5bcbcaf91e7f31920079d366430ee4ad2dc1a3f618bdc53aca788d39d8f65c9a95326782021-07-27 23:01:531 day 3 hrs ago BorgSwap: Router Binance: WBNB Token0.000789485444233697 BNB
0x8627e87a55a40d4c3b279df490055f894dfa46883f157f0f36e09f4efa1d982995324582021-07-27 22:49:481 day 3 hrs ago BorgSwap: Router0x678a09c7bc5009a3f3dc3058a998d79f2335a96b0.013573984236497562 BNB
0x8627e87a55a40d4c3b279df490055f894dfa46883f157f0f36e09f4efa1d982995324582021-07-27 22:49:481 day 3 hrs ago Binance: WBNB Token BorgSwap: Router0.013573984236497562 BNB
0x59caaed821cf4e6f647ffc138e55dd3e59ad3519a679b3ea4f50512ba3b6e99495324402021-07-27 22:48:291 day 3 hrs ago BorgSwap: Router0x678a09c7bc5009a3f3dc3058a998d79f2335a96b0.044010531750008152 BNB
0x59caaed821cf4e6f647ffc138e55dd3e59ad3519a679b3ea4f50512ba3b6e99495324402021-07-27 22:48:291 day 3 hrs ago Binance: WBNB Token BorgSwap: Router0.044010531750008152 BNB
0xfeab200f6d93247ad9c4b05afb5130ab6ff6d318a8d963bf5144d7e111cb2a5d95240292021-07-27 14:45:031 day 11 hrs ago BorgSwap: Router0x678a09c7bc5009a3f3dc3058a998d79f2335a96b0.047019268280405359 BNB
0xfeab200f6d93247ad9c4b05afb5130ab6ff6d318a8d963bf5144d7e111cb2a5d95240292021-07-27 14:45:031 day 11 hrs ago Binance: WBNB Token BorgSwap: Router0.047019268280405359 BNB
0x73adcb59eb88419c48a50b3e8d502dab8739919241e5b5929e6623036fd12a3e95095992021-07-27 2:01:422 days 28 mins ago BorgSwap: Router0x497ba8be7bcd745a1f05b3f91af242c92c81ec760.04600344562415648 BNB
0x73adcb59eb88419c48a50b3e8d502dab8739919241e5b5929e6623036fd12a3e95095992021-07-27 2:01:422 days 28 mins ago Binance: WBNB Token BorgSwap: Router0.04600344562415648 BNB
0x6d902430b293696c830eacf1cf6a821c4a3923fe3c54c03d36d80d03a0133efc95070512021-07-26 23:53:112 days 2 hrs ago BorgSwap: Router Binance: WBNB Token0.068926379205671982 BNB
0x9921e4383c10c4cc93eda8009b62c99c5549d21b8311d246704edd9a2879aa4295068452021-07-26 23:42:512 days 2 hrs ago BorgSwap: Router0x2f35239270f2379ab1066a6c243789382c1e15b30.050815891500118963 BNB
0x9921e4383c10c4cc93eda8009b62c99c5549d21b8311d246704edd9a2879aa4295068452021-07-26 23:42:512 days 2 hrs ago Binance: WBNB Token BorgSwap: Router0.050815891500118963 BNB
0x5db8ba539e1fc96f0d9fa09a68062ecdd89fb1aaf1605df94b7525514684906295066572021-07-26 23:33:272 days 2 hrs ago BorgSwap: Router Binance: WBNB Token0.032225676593497685 BNB
0x07dfbebc135ddb1a6807ef381504bc0a55a595ba88559e6d93248a0d2145c95c95066382021-07-26 23:32:302 days 2 hrs ago BorgSwap: Router0x2f35239270f2379ab1066a6c243789382c1e15b30.044058027812184639 BNB
0x07dfbebc135ddb1a6807ef381504bc0a55a595ba88559e6d93248a0d2145c95c95066382021-07-26 23:32:302 days 2 hrs ago Binance: WBNB Token BorgSwap: Router0.044058027812184639 BNB
0xee0e3a009391893676e7a3520d925bc3c59e0a5ab42719ed78ead4088c2a566a95065162021-07-26 23:26:242 days 3 hrs ago BorgSwap: Router0x678a09c7bc5009a3f3dc3058a998d79f2335a96b0.045398747350523856 BNB
0xee0e3a009391893676e7a3520d925bc3c59e0a5ab42719ed78ead4088c2a566a95065162021-07-26 23:26:242 days 3 hrs ago Binance: WBNB Token BorgSwap: Router0.045398747350523856 BNB
0x78bd1540f546cdfcdba65bd3a086207762698b6bab82d9bd23e69e7a164d2ff394953622021-07-26 13:53:332 days 12 hrs ago BorgSwap: Router0x678a09c7bc5009a3f3dc3058a998d79f2335a96b0.032772807446005769 BNB
0x78bd1540f546cdfcdba65bd3a086207762698b6bab82d9bd23e69e7a164d2ff394953622021-07-26 13:53:332 days 12 hrs ago Binance: WBNB Token BorgSwap: Router0.032772807446005769 BNB
0x09153cb7befc0ec63823e9a3bed1329d225de68ebd1ab5759f88707b2647c14594952212021-07-26 13:46:052 days 12 hrs ago BorgSwap: Router0x678a09c7bc5009a3f3dc3058a998d79f2335a96b0.164906946692973117 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BSCswapRouter

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-03-17
*/

// BORGSWAP.Exchange - Router

// Dependency file: contracts/interfaces/IBSCswapRouter01.sol


// pragma solidity >=0.6.2;

interface IBSCswapRouter01 {
    function factory() external pure returns (address);
    function WBNB() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityBNB(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountBNB, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityBNB(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountBNB);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityBNBWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountBNB);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactBNBForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactBNB(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForBNB(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapBNBForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

// Dependency file: contracts/interfaces/IBSCswapPair.sol

// pragma solidity >=0.5.0;

interface IBSCswapPair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// Dependency file: contracts/interfaces/IWBNB.sol

// pragma solidity >=0.5.0;

interface IWBNB {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

// Dependency file: contracts/interfaces/IBEP20.sol

// pragma solidity >=0.5.0;

interface IBEP20BSCswap {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}

// Dependency file: contracts/interfaces/IBSCswapFactory.sol

// pragma solidity >=0.5.0;

interface IBSCswapFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

// Dependency file: contracts/interfaces/IBSCswapRouter02.sol

// pragma solidity >=0.6.2;

// import './IBSCswapRouter01.sol';

interface IBSCswapRouter02 is IBSCswapRouter01 {
    function removeLiquidityBNBSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) external returns (uint amountBNB);
    function removeLiquidityBNBWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountBNB);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactBNBForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForBNBSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

// Dependency file: contracts/libraries/TransferHelper.sol

// pragma solidity >=0.6.0;

// helper methods for interacting with BEP20 tokens and sending BNB that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferBNB(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: BNB_TRANSFER_FAILED');
    }
}


library SafeMathBSCswap {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, 'ds-math-sub-underflow');
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
    }
}


library BSCswapLibrary {
    using SafeMathBSCswap for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'BSCswapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'BSCswapLibrary: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'f7aaf7795d1603a938caec26f0fc66896e0d88056023d18b76343b66ada743ff' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IBSCswapPair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, 'BSCswapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'BSCswapLibrary: INSUFFICIENT_LIQUIDITY');
        amountB = amountA.mul(reserveB) / reserveA;
    }

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'BSCswapLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'BSCswapLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(997);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'BSCswapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'BSCswapLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(997);
        amountIn = (numerator / denominator).add(1);
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'BSCswapLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[0] = amountIn;
        for (uint i; i < path.length - 1; i++) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]);
            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
        }
    }

    // performs chained getAmountIn calculations on any number of pairs
    function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'BSCswapLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

pragma solidity =0.6.12;


// import './libraries/BSCswapLibrary.sol';
// import './libraries/SafeMath.sol';
// import './libraries/TransferHelper.sol';
// import './interfaces/IBSCswapRouter02.sol';
// import './interfaces/IBSCswapFactory.sol';
// import './interfaces/IBEP20.sol';
// import './interfaces/IWBNB.sol';

contract BSCswapRouter is IBSCswapRouter02 {
    using SafeMathBSCswap for uint;

    address public immutable override factory;
    address public immutable override WBNB;

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'BSCswapRouter: EXPIRED');
        _;
    }

    constructor(address _factory, address _WBNB) public {
        factory = _factory;
        WBNB = _WBNB;
    }

    receive() external payable {
        assert(msg.sender == WBNB); // only accept BNB via fallback from the WBNB contract
    }

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (IBSCswapFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IBSCswapFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = BSCswapLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = BSCswapLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'BSCswapRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = BSCswapLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'BSCswapRouter: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = BSCswapLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IBSCswapPair(pair).mint(to);
    }
    function addLiquidityBNB(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountBNB, uint liquidity) {
        (amountToken, amountBNB) = _addLiquidity(
            token,
            WBNB,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountBNBMin
        );
        address pair = BSCswapLibrary.pairFor(factory, token, WBNB);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWBNB(WBNB).deposit{value: amountBNB}();
        assert(IWBNB(WBNB).transfer(pair, amountBNB));
        liquidity = IBSCswapPair(pair).mint(to);
        // refund dust BNB, if any
        if (msg.value > amountBNB) TransferHelper.safeTransferBNB(msg.sender, msg.value - amountBNB);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = BSCswapLibrary.pairFor(factory, tokenA, tokenB);
        IBSCswapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IBSCswapPair(pair).burn(to);
        (address token0,) = BSCswapLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'BSCswapRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'BSCswapRouter: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityBNB(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountBNB) {
        (amountToken, amountBNB) = removeLiquidity(
            token,
            WBNB,
            liquidity,
            amountTokenMin,
            amountBNBMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWBNB(WBNB).withdraw(amountBNB);
        TransferHelper.safeTransferBNB(to, amountBNB);
    }
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountA, uint amountB) {
        address pair = BSCswapLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IBSCswapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityBNBWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountBNB) {
        address pair = BSCswapLibrary.pairFor(factory, token, WBNB);
        uint value = approveMax ? uint(-1) : liquidity;
        IBSCswapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountBNB) = removeLiquidityBNB(token, liquidity, amountTokenMin, amountBNBMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityBNBSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountBNB) {
        (, amountBNB) = removeLiquidity(
            token,
            WBNB,
            liquidity,
            amountTokenMin,
            amountBNBMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IBEP20BSCswap(token).balanceOf(address(this)));
        IWBNB(WBNB).withdraw(amountBNB);
        TransferHelper.safeTransferBNB(to, amountBNB);
    }
    function removeLiquidityBNBWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountBNB) {
        address pair = BSCswapLibrary.pairFor(factory, token, WBNB);
        uint value = approveMax ? uint(-1) : liquidity;
        IBSCswapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountBNB = removeLiquidityBNBSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountBNBMin, to, deadline
        );
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = BSCswapLibrary.sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? BSCswapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IBSCswapPair(BSCswapLibrary.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = BSCswapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BSCswapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = BSCswapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'BSCswapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BSCswapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactBNBForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WBNB, 'BSCswapRouter: INVALID_PATH');
        amounts = BSCswapLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWBNB(WBNB).deposit{value: amounts[0]}();
        assert(IWBNB(WBNB).transfer(BSCswapLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactBNB(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WBNB, 'BSCswapRouter: INVALID_PATH');
        amounts = BSCswapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'BSCswapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BSCswapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWBNB(WBNB).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferBNB(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForBNB(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WBNB, 'BSCswapRouter: INVALID_PATH');
        amounts = BSCswapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BSCswapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWBNB(WBNB).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferBNB(to, amounts[amounts.length - 1]);
    }
    function swapBNBForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WBNB, 'BSCswapRouter: INVALID_PATH');
        amounts = BSCswapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'BSCswapRouter: EXCESSIVE_INPUT_AMOUNT');
        IWBNB(WBNB).deposit{value: amounts[0]}();
        assert(IWBNB(WBNB).transfer(BSCswapLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust BNB, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferBNB(msg.sender, msg.value - amounts[0]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = BSCswapLibrary.sortTokens(input, output);
            IBSCswapPair pair = IBSCswapPair(BSCswapLibrary.pairFor(factory, input, output));
            uint amountInput;
            uint amountOutput;
            { // scope to avoid stack too deep errors
            (uint reserve0, uint reserve1,) = pair.getReserves();
            (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IBEP20BSCswap(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = BSCswapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? BSCswapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BSCswapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IBEP20BSCswap(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IBEP20BSCswap(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactBNBForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WBNB, 'BSCswapRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWBNB(WBNB).deposit{value: amountIn}();
        assert(IWBNB(WBNB).transfer(BSCswapLibrary.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IBEP20BSCswap(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IBEP20BSCswap(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForBNBSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WBNB, 'BSCswapRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BSCswapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IBEP20BSCswap(WBNB).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWBNB(WBNB).withdraw(amountOut);
        TransferHelper.safeTransferBNB(to, amountOut);
    }

    // **** LIBRARY FUNCTIONS ****
    function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) {
        return BSCswapLibrary.quote(amountA, reserveA, reserveB);
    }

    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountOut)
    {
        return BSCswapLibrary.getAmountOut(amountIn, reserveIn, reserveOut);
    }

    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountIn)
    {
        return BSCswapLibrary.getAmountIn(amountOut, reserveIn, reserveOut);
    }

    function getAmountsOut(uint amountIn, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return BSCswapLibrary.getAmountsOut(factory, amountIn, path);
    }

    function getAmountsIn(uint amountOut, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return BSCswapLibrary.getAmountsIn(factory, amountOut, path);
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WBNB","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WBNB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountBNBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityBNB","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountBNB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountBNBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityBNB","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountBNB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountBNBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityBNBSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountBNB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountBNBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityBNBWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountBNB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountBNBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityBNBWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountBNB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapBNBForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactBNBForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactBNBForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForBNB","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForBNBSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactBNB","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b50604051620046d5380380620046d58339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614550620001856000398061015f5280610e08528061111a52806111af5280611223528061171252806118a252806119805280611aac5280611bef5280611c775280611eef5280611f59528061209f528061212752806122aa528061235e52806126c752806127a2528061287c52806129525280612adb5280612b165280612d2a5280612d805280612db45280612e28525080610cb35280610cec5280610de65280610f3b52806110125280611255528061154552806117a0528061195e5280611b3f5280611ca95280611e3f5280611fec52806121595280612432528061262a528061265352806129e05280612c0b5280612d5e528061359652806135d9528061377b52806138f15280613f445280613ffd52806140b052506145506000f3fe60806040526004361061014f5760003560e01c80638dd95002116100b6578063d06ca61f1161006f578063d06ca61f1461099d578063d46d2f8314610a52578063d67b571e14610ae8578063e058848814610b7e578063e8e3370014610bd1578063eaaed44214610c5157610188565b80638dd95002146107ed5780639cf689111461081e578063ad615dec146108a2578063b7e65949146108d8578063baa2abde1461092b578063c45a01551461098857610188565b80635c11d795116101085780635c11d795146104fe5780635d616c5b14610594578063685a0a341461062a5780638332a9631461069d57806385f8c259146107215780638803dbee1461075757610188565b8063054d50d41461018d5780631f00ca74146101d55780632195995c146102da57806334a0772d1461037157806338ed1739146103e457806350e27df31461047a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101c3600480360360608110156101b057600080fd5b5080359060208101359060400135610c97565b60408051918252519081900360200190f35b3480156101e157600080fd5b5061028a600480360360408110156101f857600080fd5b81359190810190604081016020820135600160201b81111561021957600080fd5b82018360208201111561022b57600080fd5b803590602001918460208302840111600160201b8311171561024c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610cac945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102c65781810151838201526020016102ae565b505050509050019250505060405180910390f35b3480156102e657600080fd5b5061035860048036036101608110156102fe57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135610ce2565b6040805192835260208301919091528051918290030190f35b34801561037d57600080fd5b50610358600480360361014081101561039557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135610ddc565b3480156103f057600080fd5b5061028a600480360360a081101561040757600080fd5b813591602081013591810190606081016040820135600160201b81111561042d57600080fd5b82018360208201111561043f57600080fd5b803590602001918460208302840111600160201b8311171561046057600080fd5b91935091506001600160a01b038135169060200135610ef0565b6101866004803603608081101561049057600080fd5b81359190810190604081016020820135600160201b8111156104b157600080fd5b8201836020820111156104c357600080fd5b803590602001918460208302840111600160201b831117156104e457600080fd5b91935091506001600160a01b0381351690602001356110d4565b34801561050a57600080fd5b50610186600480360360a081101561052157600080fd5b813591602081013591810190606081016040820135600160201b81111561054757600080fd5b82018360208201111561055957600080fd5b803590602001918460208302840111600160201b8311171561057a57600080fd5b91935091506001600160a01b0381351690602001356114db565b3480156105a057600080fd5b5061028a600480360360a08110156105b757600080fd5b813591602081013591810190606081016040820135600160201b8111156105dd57600080fd5b8201836020820111156105ef57600080fd5b803590602001918460208302840111600160201b8311171561061057600080fd5b91935091506001600160a01b0381351690602001356116c2565b34801561063657600080fd5b506101c3600480360361014081101561064e57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611956565b61028a600480360360808110156106b357600080fd5b81359190810190604081016020820135600160201b8111156106d457600080fd5b8201836020820111156106e657600080fd5b803590602001918460208302840111600160201b8311171561070757600080fd5b91935091506001600160a01b038135169060200135611a64565b34801561072d57600080fd5b506101c36004803603606081101561074457600080fd5b5080359060208101359060400135611de7565b34801561076357600080fd5b5061028a600480360360a081101561077a57600080fd5b813591602081013591810190606081016040820135600160201b8111156107a057600080fd5b8201836020820111156107b257600080fd5b803590602001918460208302840111600160201b831117156107d357600080fd5b91935091506001600160a01b038135169060200135611df4565b3480156107f957600080fd5b50610802611eed565b604080516001600160a01b039092168252519081900360200190f35b61028a6004803603608081101561083457600080fd5b81359190810190604081016020820135600160201b81111561085557600080fd5b82018360208201111561086757600080fd5b803590602001918460208302840111600160201b8311171561088857600080fd5b91935091506001600160a01b038135169060200135611f11565b3480156108ae57600080fd5b506101c3600480360360608110156108c557600080fd5b5080359060208101359060400135612251565b3480156108e457600080fd5b506101c3600480360360c08110156108fb57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561225e565b34801561093757600080fd5b50610358600480360360e081101561094e57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356123e4565b34801561099457600080fd5b50610802612628565b3480156109a957600080fd5b5061028a600480360360408110156109c057600080fd5b81359190810190604081016020820135600160201b8111156109e157600080fd5b8201836020820111156109f357600080fd5b803590602001918460208302840111600160201b83111715610a1457600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061264c945050505050565b348015610a5e57600080fd5b50610186600480360360a0811015610a7557600080fd5b813591602081013591810190606081016040820135600160201b811115610a9b57600080fd5b820183602082011115610aad57600080fd5b803590602001918460208302840111600160201b83111715610ace57600080fd5b91935091506001600160a01b038135169060200135612679565b348015610af457600080fd5b5061028a600480360360a0811015610b0b57600080fd5b813591602081013591810190606081016040820135600160201b811115610b3157600080fd5b820183602082011115610b4357600080fd5b803590602001918460208302840111600160201b83111715610b6457600080fd5b91935091506001600160a01b038135169060200135612902565b348015610b8a57600080fd5b50610358600480360360c0811015610ba157600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a8e565b348015610bdd57600080fd5b50610c336004803603610100811015610bf557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612ba8565b60408051938452602084019290925282820152519081900360600190f35b610c33600480360360c0811015610c6757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612cdb565b6000610ca4848484612f6e565b949350505050565b6060610cd97f00000000000000000000000000000000000000000000000000000000000000008484613046565b90505b92915050565b6000806000610d127f00000000000000000000000000000000000000000000000000000000000000008f8f613193565b9050600087610d21578c610d25565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610d9b57600080fd5b505af1158015610daf573d6000803e3d6000fd5b50505050610dc28f8f8f8f8f8f8f6123e4565b809450819550505050509b509b9950505050505050505050565b6000806000610e2c7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613193565b9050600087610e3b578c610e3f565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610eb557600080fd5b505af1158015610ec9573d6000803e3d6000fd5b50505050610edb8e8e8e8e8e8e612a8e565b909f909e509c50505050505050505050505050565b60608142811015610f36576040805162461bcd60e51b81526020600482015260166024820152600080516020614445833981519152604482015290519081900360640190fd5b610f947f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061325392505050565b91508682600184510381518110610fa757fe5b60200260200101511015610fec5760405162461bcd60e51b81526004018080602001828103825260298152602001806144656029913960400191505060405180910390fd5b61108a86866000818110610ffc57fe5b905060200201356001600160a01b0316336110707f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061103e57fe5b905060200201356001600160a01b03168b8b600181811061105b57fe5b905060200201356001600160a01b0316613193565b8560008151811061107d57fe5b602002602001015161338a565b6110c9828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506134e7915050565b509695505050505050565b8042811015611118576040805162461bcd60e51b81526020600482015260166024820152600080516020614445833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061114f57fe5b905060200201356001600160a01b03166001600160a01b0316146111a8576040805162461bcd60e51b815260206004820152601b60248201526000805160206143db833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561120857600080fd5b505af115801561121c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61129e7f00000000000000000000000000000000000000000000000000000000000000008989600081811061128157fe5b905060200201356001600160a01b03168a8a600181811061105b57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156112e557600080fd5b505af11580156112f9573d6000803e3d6000fd5b505050506040513d602081101561130f57600080fd5b505161131757fe5b60008686600019810181811061132957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561138557600080fd5b505afa158015611399573d6000803e3d6000fd5b505050506040513d60208110156113af57600080fd5b505160408051602089810282810182019093528982529293506113f19290918a918a918291850190849080828437600092019190915250899250613724915050565b87611494828989600019810181811061140657fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561146257600080fd5b505afa158015611476573d6000803e3d6000fd5b505050506040513d602081101561148c57600080fd5b505190613a2b565b10156114d15760405162461bcd60e51b81526004018080602001828103825260298152602001806144656029913960400191505060405180910390fd5b5050505050505050565b804281101561151f576040805162461bcd60e51b81526020600482015260166024820152600080516020614445833981519152604482015290519081900360640190fd5b6115778585600081811061152f57fe5b905060200201356001600160a01b0316336115717f00000000000000000000000000000000000000000000000000000000000000008989600081811061128157fe5b8a61338a565b60008585600019810181811061158957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156115e557600080fd5b505afa1580156115f9573d6000803e3d6000fd5b505050506040513d602081101561160f57600080fd5b50516040805160208881028281018201909352888252929350611651929091899189918291850190849080828437600092019190915250889250613724915050565b86611494828888600019810181811061166657fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561146257600080fd5b60608142811015611708576040805162461bcd60e51b81526020600482015260166024820152600080516020614445833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061174257fe5b905060200201356001600160a01b03166001600160a01b03161461179b576040805162461bcd60e51b815260206004820152601b60248201526000805160206143db833981519152604482015290519081900360640190fd5b6117f97f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061325392505050565b9150868260018451038151811061180c57fe5b602002602001015110156118515760405162461bcd60e51b81526004018080602001828103825260298152602001806144656029913960400191505060405180910390fd5b61186186866000818110610ffc57fe5b6118a0828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506134e7915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106118df57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561191d57600080fd5b505af1158015611931573d6000803e3d6000fd5b505050506110c9848360018551038151811061194957fe5b6020026020010151613a7b565b6000806119a47f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613193565b90506000866119b3578b6119b7565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611a2d57600080fd5b505af1158015611a41573d6000803e3d6000fd5b50505050611a538d8d8d8d8d8d61225e565b9d9c50505050505050505050505050565b60608142811015611aaa576040805162461bcd60e51b81526020600482015260166024820152600080516020614445833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611ae157fe5b905060200201356001600160a01b03166001600160a01b031614611b3a576040805162461bcd60e51b815260206004820152601b60248201526000805160206143db833981519152604482015290519081900360640190fd5b611b987f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061304692505050565b91503482600081518110611ba857fe5b60200260200101511115611bed5760405162461bcd60e51b81526004018080602001828103825260258152602001806143b66025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611c2957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611c5c57600080fd5b505af1158015611c70573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611cd57f00000000000000000000000000000000000000000000000000000000000000008989600081811061128157fe5b84600081518110611ce257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611d3057600080fd5b505af1158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b5051611d6257fe5b611da1828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506134e7915050565b81600081518110611dae57fe5b6020026020010151341115611ddd57611ddd3383600081518110611dce57fe5b60200260200101513403613a7b565b5095945050505050565b6000610ca4848484613b6e565b60608142811015611e3a576040805162461bcd60e51b81526020600482015260166024820152600080516020614445833981519152604482015290519081900360640190fd5b611e987f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061304692505050565b91508682600081518110611ea857fe5b60200260200101511115610fec5760405162461bcd60e51b81526004018080602001828103825260258152602001806143b66025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b60608142811015611f57576040805162461bcd60e51b81526020600482015260166024820152600080516020614445833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611f8e57fe5b905060200201356001600160a01b03166001600160a01b031614611fe7576040805162461bcd60e51b815260206004820152601b60248201526000805160206143db833981519152604482015290519081900360640190fd5b6120457f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061325392505050565b9150868260018451038151811061205857fe5b6020026020010151101561209d5760405162461bcd60e51b81526004018080602001828103825260298152602001806144656029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106120d957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561210c57600080fd5b505af1158015612120573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6121857f00000000000000000000000000000000000000000000000000000000000000008989600081811061128157fe5b8460008151811061219257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156121e057600080fd5b505af11580156121f4573d6000803e3d6000fd5b505050506040513d602081101561220a57600080fd5b505161221257fe5b611ddd828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506134e7915050565b6000610ca4848484613c46565b600081428110156122a4576040805162461bcd60e51b81526020600482015260166024820152600080516020614445833981519152604482015290519081900360640190fd5b6122d3887f000000000000000000000000000000000000000000000000000000000000000089898930896123e4565b90508092505061235c88858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561232b57600080fd5b505afa15801561233f573d6000803e3d6000fd5b505050506040513d602081101561235557600080fd5b5051613cec565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156123c257600080fd5b505af11580156123d6573d6000803e3d6000fd5b505050506110c98483613a7b565b600080824281101561242b576040805162461bcd60e51b81526020600482015260166024820152600080516020614445833981519152604482015290519081900360640190fd5b60006124587f00000000000000000000000000000000000000000000000000000000000000008c8c613193565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156124b357600080fd5b505af11580156124c7573d6000803e3d6000fd5b505050506040513d60208110156124dd57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561252a57600080fd5b505af115801561253e573d6000803e3d6000fd5b505050506040513d604081101561255457600080fd5b5080516020909101519092509050600061256e8e8e613e56565b509050806001600160a01b03168e6001600160a01b031614612591578183612594565b82825b90975095508a8710156125d85760405162461bcd60e51b81526004018080602001828103825260248152602001806143926024913960400191505060405180910390fd5b898610156126175760405162461bcd60e51b81526004018080602001828103825260248152602001806143fb6024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060610cd97f00000000000000000000000000000000000000000000000000000000000000008484613253565b80428110156126bd576040805162461bcd60e51b81526020600482015260166024820152600080516020614445833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016858560001981018181106126f757fe5b905060200201356001600160a01b03166001600160a01b031614612750576040805162461bcd60e51b815260206004820152601b60248201526000805160206143db833981519152604482015290519081900360640190fd5b6127608585600081811061152f57fe5b61279e858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613724915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561280d57600080fd5b505afa158015612821573d6000803e3d6000fd5b505050506040513d602081101561283757600080fd5b505190508681101561287a5760405162461bcd60e51b81526004018080602001828103825260298152602001806144656029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156128e057600080fd5b505af11580156128f4573d6000803e3d6000fd5b505050506114d18482613a7b565b60608142811015612948576040805162461bcd60e51b81526020600482015260166024820152600080516020614445833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061298257fe5b905060200201356001600160a01b03166001600160a01b0316146129db576040805162461bcd60e51b815260206004820152601b60248201526000805160206143db833981519152604482015290519081900360640190fd5b612a397f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061304692505050565b91508682600081518110612a4957fe5b602002602001015111156118515760405162461bcd60e51b81526004018080602001828103825260258152602001806143b66025913960400191505060405180910390fd5b6000808242811015612ad5576040805162461bcd60e51b81526020600482015260166024820152600080516020614445833981519152604482015290519081900360640190fd5b612b04897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6123e4565b9093509150612b14898685613cec565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612b7a57600080fd5b505af1158015612b8e573d6000803e3d6000fd5b50505050612b9c8583613a7b565b50965096945050505050565b60008060008342811015612bf1576040805162461bcd60e51b81526020600482015260166024820152600080516020614445833981519152604482015290519081900360640190fd5b612bff8c8c8c8c8c8c613f34565b90945092506000612c317f00000000000000000000000000000000000000000000000000000000000000008e8e613193565b9050612c3f8d33838861338a565b612c4b8c33838761338a565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612c9a57600080fd5b505af1158015612cae573d6000803e3d6000fd5b505050506040513d6020811015612cc457600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612d24576040805162461bcd60e51b81526020600482015260166024820152600080516020614445833981519152604482015290519081900360640190fd5b612d528a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613f34565b90945092506000612da47f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613193565b9050612db28b33838861338a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e0d57600080fd5b505af1158015612e21573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612e9d57600080fd5b505af1158015612eb1573d6000803e3d6000fd5b505050506040513d6020811015612ec757600080fd5b5051612ecf57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612f1e57600080fd5b505af1158015612f32573d6000803e3d6000fd5b505050506040513d6020811015612f4857600080fd5b5051925034841015612f6057612f6033853403613a7b565b505096509650969350505050565b6000808411612fae5760405162461bcd60e51b815260040180806020018281038252602981526020018061433f6029913960400191505060405180910390fd5b600083118015612fbe5750600082115b612ff95760405162461bcd60e51b815260040180806020018281038252602681526020018061441f6026913960400191505060405180910390fd5b6000613007856103e56141c5565b9050600061301582856141c5565b9050600061302f83613029886103e86141c5565b90614228565b905080828161303a57fe5b04979650505050505050565b606060028251101561309f576040805162461bcd60e51b815260206004820152601c60248201527f425343737761704c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156130b757600080fd5b506040519080825280602002602001820160405280156130e1578160200160208202803683370190505b50905082816001835103815181106130f557fe5b60209081029190910101528151600019015b801561318b576000806131448786600186038151811061312357fe5b602002602001015187868151811061313757fe5b6020026020010151614277565b9150915061316684848151811061315757fe5b60200260200101518383613b6e565b84600185038151811061317557fe5b6020908102919091010152505060001901613107565b509392505050565b60008060006131a28585613e56565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527ff7aaf7795d1603a938caec26f0fc66896e0d88056023d18b76343b66ada743ff609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60606002825110156132ac576040805162461bcd60e51b815260206004820152601c60248201527f425343737761704c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156132c457600080fd5b506040519080825280602002602001820160405280156132ee578160200160208202803683370190505b50905082816000815181106132ff57fe5b60200260200101818152505060005b600183510381101561318b576000806133448786858151811061332d57fe5b602002602001015187866001018151811061313757fe5b9150915061336684848151811061335757fe5b60200260200101518383612f6e565b84846001018151811061337557fe5b6020908102919091010152505060010161330e565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b6020831061340f5780518252601f1990920191602091820191016133f0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613471576040519150601f19603f3d011682016040523d82523d6000602084013e613476565b606091505b50915091508180156134a45750805115806134a457508080602001905160208110156134a157600080fd5b50515b6134df5760405162461bcd60e51b81526004018080602001828103825260248152602001806144d46024913960400191505060405180910390fd5b505050505050565b60005b600183510381101561371e5760008084838151811061350557fe5b602002602001015185846001018151811061351c57fe5b60200260200101519150915060006135348383613e56565b509050600087856001018151811061354857fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146135765782600061357a565b6000835b91509150600060028a5103881061359157886135d2565b6135d27f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106135c557fe5b6020026020010151613193565b90506135ff7f00000000000000000000000000000000000000000000000000000000000000008888613193565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f19166020018201604052801561363c576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156136a457818101518382015260200161368c565b50505050905090810190601f1680156136d15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156136f357600080fd5b505af1158015613707573d6000803e3d6000fd5b5050600190990198506134ea975050505050505050565b50505050565b60005b6001835103811015613a265760008084838151811061374257fe5b602002602001015185846001018151811061375957fe5b60200260200101519150915060006137718383613e56565b50905060006137a17f00000000000000000000000000000000000000000000000000000000000000008585613193565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156137e257600080fd5b505afa1580156137f6573d6000803e3d6000fd5b505050506040513d606081101561380c57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613842578284613845565b83835b9150915061389a828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561146257600080fd5b95506138a7868383612f6e565b945050505050600080856001600160a01b0316886001600160a01b0316146138d1578260006138d5565b6000835b91509150600060028c51038a106138ec578a613920565b6139207f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106135c557fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b838110156139aa578181015183820152602001613992565b50505050905090810190601f1680156139d75780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156139f957600080fd5b505af1158015613a0d573d6000803e3d6000fd5b50506001909b019a506137279950505050505050505050565b505050565b80820382811115610cdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613ac75780518252601f199092019160209182019101613aa8565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613b29576040519150601f19603f3d011682016040523d82523d6000602084013e613b2e565b606091505b5050905080613a265760405162461bcd60e51b815260040180806020018281038252602381526020018061448e6023913960400191505060405180910390fd5b6000808411613bae5760405162461bcd60e51b815260040180806020018281038252602a815260200180614368602a913960400191505060405180910390fd5b600083118015613bbe5750600082115b613bf95760405162461bcd60e51b815260040180806020018281038252602681526020018061441f6026913960400191505060405180910390fd5b6000613c116103e8613c0b86886141c5565b906141c5565b90506000613c256103e5613c0b8689613a2b565b9050613c3c6001828481613c3557fe5b0490614228565b9695505050505050565b6000808411613c865760405162461bcd60e51b81526004018080602001828103825260238152602001806144f86023913960400191505060405180910390fd5b600083118015613c965750600082115b613cd15760405162461bcd60e51b815260040180806020018281038252602681526020018061441f6026913960400191505060405180910390fd5b82613cdc85846141c5565b81613ce357fe5b04949350505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310613d695780518252601f199092019160209182019101613d4a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613dcb576040519150601f19603f3d011682016040523d82523d6000602084013e613dd0565b606091505b5091509150818015613dfe575080511580613dfe5750808060200190516020811015613dfb57600080fd5b50515b613e4f576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b03161415613eaa5760405162461bcd60e51b81526004018080602001828103825260238152602001806144b16023913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613eca578284613ecd565b83835b90925090506001600160a01b038216613f2d576040805162461bcd60e51b815260206004820152601c60248201527f425343737761704c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015613fc057600080fd5b505afa158015613fd4573d6000803e3d6000fd5b505050506040513d6020811015613fea57600080fd5b50516001600160a01b031614156140a8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561407b57600080fd5b505af115801561408f573d6000803e3d6000fd5b505050506040513d60208110156140a557600080fd5b50505b6000806140d67f00000000000000000000000000000000000000000000000000000000000000008b8b614277565b915091508160001480156140e8575080155b156140f8578793508692506141b8565b6000614105898484613c46565b9050878111614158578581101561414d5760405162461bcd60e51b81526004018080602001828103825260248152602001806143fb6024913960400191505060405180910390fd5b8894509250826141b6565b6000614165898486613c46565b90508981111561417157fe5b878110156141b05760405162461bcd60e51b81526004018080602001828103825260248152602001806143926024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806141e0575050808202828282816141dd57fe5b04145b610cdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610cdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006142868585613e56565b509050600080614297888888613193565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156142cf57600080fd5b505afa1580156142e3573d6000803e3d6000fd5b505050506040513d60608110156142f957600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b038781169084161461432c57808261432f565b81815b9099909850965050505050505056fe425343737761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54425343737761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5442534373776170526f757465723a20494e53554646494349454e545f415f414d4f554e5442534373776170526f757465723a204558434553534956455f494e5055545f414d4f554e5442534373776170526f757465723a20494e56414c49445f50415448000000000042534373776170526f757465723a20494e53554646494349454e545f425f414d4f554e54425343737761704c6962726172793a20494e53554646494349454e545f4c495155494449545942534373776170526f757465723a20455850495245440000000000000000000042534373776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a20424e425f5452414e534645525f4641494c4544425343737761704c6962726172793a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544425343737761704c6962726172793a20494e53554646494349454e545f414d4f554e54a2646970667358221220f111186ad54607bcd6dfcb5b46c7edb47656c52a704fda54d2887144510cf0e364736f6c634300060c003300000000000000000000000040dfc2f530469452d5a9bb33356b071be0758c4c000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

00000000000000000000000040dfc2f530469452d5a9bb33356b071be0758c4c000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000040dfc2f530469452d5a9bb33356b071be0758c4c
Arg [1] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c


Deployed ByteCode Sourcemap

16340:18461:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16821:10;-1:-1:-1;;;;;16835:4:0;16821:18;;16814:26;;;;16340:18461;;;;;33753:260;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33753:260:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34547:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34547:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34547:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34547:251:0;;-1:-1:-1;34547:251:0;;-1:-1:-1;;;;;34547:251:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21616:673;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21616:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22295:665;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22295:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25310:622::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25310:622:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25310:622:0;;;;;;;;;;;;-1:-1:-1;25310:622:0;-1:-1:-1;;;;;;25310:622:0;;;;;;;;:::i;31807:858::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31807:858:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31807:858:0;;;;;;;;;;;;-1:-1:-1;31807:858:0;-1:-1:-1;;;;;;31807:858:0;;;;;;;;:::i;31077:724::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31077:724:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31077:724:0;;;;;;;;;;;;-1:-1:-1;31077:724:0;-1:-1:-1;;;;;;31077:724:0;;;;;;;;:::i;28065:842::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28065:842:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28065:842:0;;;;;;;;;;;;-1:-1:-1;28065:842:0;-1:-1:-1;;;;;;28065:842:0;;;;;;;;:::i;23752:714::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23752:714:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28913:802::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28913:802:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28913:802:0;;;;;;;;;;;;-1:-1:-1;28913:802:0;-1:-1:-1;;;;;;28913:802:0;;;;;;;;:::i;34021:259::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34021:259:0;;;;;;;;;;;;:::i;25938:600::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25938:600:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25938:600:0;;;;;;;;;;;;-1:-1:-1;25938:600:0;-1:-1:-1;;;;;;25938:600:0;;;;;;;;:::i;16477:38::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;16477:38:0;;;;;;;;;;;;;;26544:689;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26544:689:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26544:689:0;;;;;;;;;;;;-1:-1:-1;26544:689:0;-1:-1:-1;;;;;;26544:689:0;;;;;;;;:::i;33559:186::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33559:186:0;;;;;;;;;;;;:::i;23039:707::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23039:707:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20078:853::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20078:853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16429:41::-;;;;;;;;;;;;;:::i;34288:251::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34288:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34288:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34288:251:0;;-1:-1:-1;34288:251:0;;-1:-1:-1;;;;;34288:251:0:i;32671:844::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32671:844:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32671:844:0;;;;;;;;;;;;-1:-1:-1;32671:844:0;-1:-1:-1;;;;;;32671:844:0;;;;;;;;:::i;27239:820::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27239:820:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27239:820:0;;;;;;;;;;;;-1:-1:-1;27239:820:0;-1:-1:-1;;;;;;27239:820:0;;;;;;;;:::i;20937:673::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20937:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18325:734::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18325:734:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19065:970;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19065:970:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33753:260::-;33906:14;33945:60;33973:8;33983:9;33994:10;33945:27;:60::i;:::-;33938:67;33753:260;-1:-1:-1;;;;33753:260:0:o;34547:251::-;34691:21;34737:53;34765:7;34774:9;34785:4;34737:27;:53::i;:::-;34730:60;;34547:251;;;;;:::o;21616:673::-;21922:12;21936;21961;21976:47;21999:7;22008:6;22016;21976:22;:47::i;:::-;21961:62;;22034:10;22047;:33;;22071:9;22047:33;;;-1:-1:-1;;22047:33:0;22091:78;;;-1:-1:-1;;;22091:78:0;;22117:10;22091:78;;;;22137:4;22091:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22034:46;;-1:-1:-1;;;;;;22091:25:0;;;;;:78;;;;;-1:-1:-1;;22091:78:0;;;;;;;;-1:-1:-1;22091:25:0;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22201:80;22217:6;22225;22233:9;22244:10;22256;22268:2;22272:8;22201:15;:80::i;:::-;22180:101;;;;;;;;21616:673;;;;;;;;;;;;;;;;:::o;22295:665::-;22584:16;22602:14;22629:12;22644:44;22667:7;22676:5;22683:4;22644:22;:44::i;:::-;22629:59;;22699:10;22712;:33;;22736:9;22712:33;;;-1:-1:-1;;22712:33:0;22756:78;;;-1:-1:-1;;;22756:78:0;;22782:10;22756:78;;;;22802:4;22756:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22699:46;;-1:-1:-1;;;;;;22756:25:0;;;;;:78;;;;;-1:-1:-1;;22756:78:0;;;;;;;;-1:-1:-1;22756:25:0;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22872:80;22891:5;22898:9;22909:14;22925:12;22939:2;22943:8;22872:18;:80::i;:::-;22845:107;;;;-1:-1:-1;22295:665:0;-1:-1:-1;;;;;;;;;;;;;22295:665:0:o;25310:622::-;25534:21;25515:8;16586:15;16574:8;:27;;16566:62;;;;;-1:-1:-1;;;16566:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16566:62:0;;;;;;;;;;;;;;;25578:53:::1;25607:7;25616:8;25626:4;;25578:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;25578:28:0::1;::::0;-1:-1:-1;;;25578:53:0:i:1;:::-;25568:63;;25681:12;25650:7;25675:1;25658:7;:14;:18;25650:27;;;;;;;;;;;;;;:43;;25642:97;;;;-1:-1:-1::0;;;25642:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25750:139;25796:4;;25801:1;25796:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25796:7:0::1;25805:10;25817:49;25840:7;25849:4;;25854:1;25849:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25849:7:0::1;25858:4;;25863:1;25858:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25858:7:0::1;25817:22;:49::i;:::-;25868:7;25876:1;25868:10;;;;;;;;;;;;;;25750:31;:139::i;:::-;25900:24;25906:7;25915:4;;25900:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;25921:2:0;;-1:-1:-1;25900:5:0::1;::::0;-1:-1:-1;;25900:24:0:i:1;:::-;25310:622:::0;;;;;;;;;:::o;31807:858::-;32067:8;16586:15;16574:8;:27;;16566:62;;;;;-1:-1:-1;;;16566:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16566:62:0;;;;;;;;;;;;;;;32112:4:::1;-1:-1:-1::0;;;;;32101:15:0::1;:4;;32106:1;32101:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32101:7:0::1;-1:-1:-1::0;;;;;32101:15:0::1;;32093:55;;;::::0;;-1:-1:-1;;;32093:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32093:55:0;;;;;;;;;;;;;::::1;;32159:13;32175:9;32159:25;;32201:4;-1:-1:-1::0;;;;;32195:19:0::1;;32222:8;32195:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;32257:4;-1:-1:-1::0;;;;;32251:20:0::1;;32272:49;32295:7;32304:4;;32309:1;32304:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32304:7:0::1;32313:4;;32318:1;32313:7;;;;;;32272:49;32323:8;32251:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;32251:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32251:81:0;32244:89:::1;;;;32344:18;32379:4:::0;;-1:-1:-1;;32384:15:0;;32379:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32379:21:0::1;-1:-1:-1::0;;;;;32365:46:0::1;;32412:2;32365:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;32365:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32365:50:0;32426:44:::1;::::0;;32365:50:::1;32426:44:::0;;::::1;::::0;;;;;;;;;;;32365:50;;-1:-1:-1;32426:44:0::1;::::0;;;32461:4;;;;;;32426:44;::::1;::::0;32461:4;;32426:44;32461:4;32426:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;32467:2:0;;-1:-1:-1;32426:34:0::1;::::0;-1:-1:-1;;32426:44:0:i:1;:::-;32576:12:::0;32503:69:::1;32558:13:::0;32517:4;;-1:-1:-1;;32522:15:0;;32517:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32517:21:0::1;-1:-1:-1::0;;;;;32503:46:0::1;;32550:2;32503:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;32503:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32503:50:0;;:54:::1;:69::i;:::-;:85;;32481:176;;;;-1:-1:-1::0;;;32481:176:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16639:1;;31807:858:::0;;;;;;:::o;31077:724::-;31311:8;16586:15;16574:8;:27;;16566:62;;;;;-1:-1:-1;;;16566:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16566:62:0;;;;;;;;;;;;;;;31332:137:::1;31378:4;;31383:1;31378:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31378:7:0::1;31387:10;31399:49;31422:7;31431:4;;31436:1;31431:7;;;;;;31399:49;31450:8;31332:31;:137::i;:::-;31480:18;31515:4:::0;;-1:-1:-1;;31520:15:0;;31515:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31515:21:0::1;-1:-1:-1::0;;;;;31501:46:0::1;;31548:2;31501:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;31501:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31501:50:0;31562:44:::1;::::0;;31501:50:::1;31562:44:::0;;::::1;::::0;;;;;;;;;;;31501:50;;-1:-1:-1;31562:44:0::1;::::0;;;31597:4;;;;;;31562:44;::::1;::::0;31597:4;;31562:44;31597:4;31562:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;31603:2:0;;-1:-1:-1;31562:34:0::1;::::0;-1:-1:-1;;31562:44:0:i:1;:::-;31712:12:::0;31639:69:::1;31694:13:::0;31653:4;;-1:-1:-1;;31658:15:0;;31653:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31653:21:0::1;-1:-1:-1::0;;;;;31639:46:0::1;;31686:2;31639:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;31639:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;28065:842:::0;28279:21;28251:8;16586:15;16574:8;:27;;16566:62;;;;;-1:-1:-1;;;16566:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16566:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28351:4:0::1;28326:29;:4:::0;;-1:-1:-1;;28331:15:0;;28326:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28326:21:0::1;-1:-1:-1::0;;;;;28326:29:0::1;;28318:69;;;::::0;;-1:-1:-1;;;28318:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28318:69:0;;;;;;;;;;;;;::::1;;28408:53;28437:7;28446:8;28456:4;;28408:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28408:28:0::1;::::0;-1:-1:-1;;;28408:53:0:i:1;:::-;28398:63;;28511:12;28480:7;28505:1;28488:7;:14;:18;28480:27;;;;;;;;;;;;;;:43;;28472:97;;;;-1:-1:-1::0;;;28472:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28580:139;28626:4;;28631:1;28626:7;;;;;;28580:139;28730:35;28736:7;28745:4;;28730:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28759:4:0::1;::::0;-1:-1:-1;28730:5:0::1;::::0;-1:-1:-1;;28730:35:0:i:1;:::-;28782:4;-1:-1:-1::0;;;;;28776:20:0::1;;28797:7;28822:1;28805:7;:14;:18;28797:27;;;;;;;;;;;;;;28776:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28836:63;28867:2;28871:7;28896:1;28879:7;:14;:18;28871:27;;;;;;;;;;;;;;28836:30;:63::i;23752:714::-:0;24070:14;24097:12;24112:44;24135:7;24144:5;24151:4;24112:22;:44::i;:::-;24097:59;;24167:10;24180;:33;;24204:9;24180:33;;;-1:-1:-1;;24180:33:0;24224:78;;;-1:-1:-1;;;24224:78:0;;24250:10;24224:78;;;;24270:4;24224:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24167:46;;-1:-1:-1;;;;;;24224:25:0;;;;;:78;;;;;-1:-1:-1;;24224:78:0;;;;;;;;-1:-1:-1;24224:25:0;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24325:133;24387:5;24394:9;24405:14;24421:12;24435:2;24439:8;24325:47;:133::i;:::-;24313:145;23752:714;-1:-1:-1;;;;;;;;;;;;;23752:714:0:o;28913:802::-;29126:21;29098:8;16586:15;16574:8;:27;;16566:62;;;;;-1:-1:-1;;;16566:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16566:62:0;;;;;;;;;;;;;;;29184:4:::1;-1:-1:-1::0;;;;;29173:15:0::1;:4;;29178:1;29173:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29173:7:0::1;-1:-1:-1::0;;;;;29173:15:0::1;;29165:55;;;::::0;;-1:-1:-1;;;29165:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29165:55:0;;;;;;;;;;;;;::::1;;29241:53;29269:7;29278:9;29289:4;;29241:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29241:27:0::1;::::0;-1:-1:-1;;;29241:53:0:i:1;:::-;29231:63;;29327:9;29313:7;29321:1;29313:10;;;;;;;;;;;;;;:23;;29305:73;;;;-1:-1:-1::0;;;29305:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29395:4;-1:-1:-1::0;;;;;29389:19:0::1;;29416:7;29424:1;29416:10;;;;;;;;;;;;;;29389:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29453:4;-1:-1:-1::0;;;;;29447:20:0::1;;29468:49;29491:7;29500:4;;29505:1;29500:7;;;;;;29468:49;29519:7;29527:1;29519:10;;;;;;;;;;;;;;29447:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;29447:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29447:83:0;29440:91:::1;;;;29542:24;29548:7;29557:4;;29542:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29563:2:0;;-1:-1:-1;29542:5:0::1;::::0;-1:-1:-1;;29542:24:0:i:1;:::-;29629:7;29637:1;29629:10;;;;;;;;;;;;;;29617:9;:22;29613:94;;;29641:66;29672:10;29696:7;29704:1;29696:10;;;;;;;;;;;;;;29684:9;:22;29641:30;:66::i;:::-;28913:802:::0;;;;;;;;:::o;34021:259::-;34174:13;34212:60;34239:9;34250;34261:10;34212:26;:60::i;25938:600::-;26162:21;26143:8;16586:15;16574:8;:27;;16566:62;;;;;-1:-1:-1;;;16566:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16566:62:0;;;;;;;;;;;;;;;26206:53:::1;26234:7;26243:9;26254:4;;26206:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26206:27:0::1;::::0;-1:-1:-1;;;26206:53:0:i:1;:::-;26196:63;;26292:11;26278:7;26286:1;26278:10;;;;;;;;;;;;;;:25;;26270:75;;;;-1:-1:-1::0;;;26270:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16477:38:::0;;;:::o;26544:689::-;26760:21;26732:8;16586:15;16574:8;:27;;16566:62;;;;;-1:-1:-1;;;16566:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16566:62:0;;;;;;;;;;;;;;;26818:4:::1;-1:-1:-1::0;;;;;26807:15:0::1;:4;;26812:1;26807:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26807:7:0::1;-1:-1:-1::0;;;;;26807:15:0::1;;26799:55;;;::::0;;-1:-1:-1;;;26799:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26799:55:0;;;;;;;;;;;;;::::1;;26875:54;26904:7;26913:9;26924:4;;26875:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26875:28:0::1;::::0;-1:-1:-1;;;26875:54:0:i:1;:::-;26865:64;;26979:12;26948:7;26973:1;26956:7;:14;:18;26948:27;;;;;;;;;;;;;;:43;;26940:97;;;;-1:-1:-1::0;;;26940:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27054:4;-1:-1:-1::0;;;;;27048:19:0::1;;27075:7;27083:1;27075:10;;;;;;;;;;;;;;27048:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;27112:4;-1:-1:-1::0;;;;;27106:20:0::1;;27127:49;27150:7;27159:4;;27164:1;27159:7;;;;;;27127:49;27178:7;27186:1;27178:10;;;;;;;;;;;;;;27106:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;27106:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27106:83:0;27099:91:::1;;;;27201:24;27207:7;27216:4;;27201:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27222:2:0;;-1:-1:-1;27201:5:0::1;::::0;-1:-1:-1;;27201:24:0:i:1;33559:186::-:0;33656:12;33688:49;33709:7;33718:8;33728;33688:20;:49::i;23039:707::-;23305:14;23286:8;16586:15;16574:8;:27;;16566:62;;;;;-1:-1:-1;;;16566:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16566:62:0;;;;;;;;;;;;;;;23348:196:::1;23378:5;23398:4;23417:9;23441:14;23470:12;23505:4;23525:8;23348:15;:196::i;:::-;23332:212;;;;;;23555:85;23583:5;23590:2;23608:5;-1:-1:-1::0;;;;;23594:30:0::1;;23633:4;23594:45;;;;;;;;;;;;;-1:-1:-1::0;;;;;23594:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23594:45:0;23555:27:::1;:85::i;:::-;23657:4;-1:-1:-1::0;;;;;23651:20:0::1;;23672:9;23651:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23693:45;23724:2;23728:9;23693:30;:45::i;20078:853::-:0;20332:12;20346;20313:8;16586:15;16574:8;:27;;16566:62;;;;;-1:-1:-1;;;16566:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16566:62:0;;;;;;;;;;;;;;;20371:12:::1;20386:47;20409:7;20418:6;20426;20386:22;:47::i;:::-;20444:60;::::0;;-1:-1:-1;;;20444:60:0;;20476:10:::1;20444:60;::::0;::::1;::::0;-1:-1:-1;;;;;20444:31:0;::::1;:60:::0;;;;;;;;;;;;;;20371:62;;-1:-1:-1;20444:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20444:31:0;:60;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;20572:27:0::1;::::0;;-1:-1:-1;;;20572:27:0;;-1:-1:-1;;;;;20572:27:0;;::::1;;::::0;::::1;::::0;;;20542:12:::1;::::0;;;20572:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;20542:12;20572:23;:27;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20572:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20572:27:0;-1:-1:-1;20611:14:0::1;20630:41;20656:6:::0;20664;20630:25:::1;:41::i;:::-;20610:61;;;20713:6;-1:-1:-1::0;;;;;20703:16:0::1;:6;-1:-1:-1::0;;;;;20703:16:0::1;;:58;;20744:7;20753;20703:58;;;20723:7;20732;20703:58;20682:79:::0;;-1:-1:-1;20682:79:0;-1:-1:-1;20780:21:0;;::::1;;20772:70;;;;-1:-1:-1::0;;;20772:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20872:10;20861:7;:21;;20853:70;;;;-1:-1:-1::0;;;20853:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16639:1;;;;20078:853:::0;;;;;;;;;;;:::o;16429:41::-;;;:::o;34288:251::-;34432:21;34478:53;34507:7;34516:8;34526:4;34478:28;:53::i;32671:844::-;32938:8;16586:15;16574:8;:27;;16566:62;;;;;-1:-1:-1;;;16566:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16566:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32997:4:0::1;32972:29;:4:::0;;-1:-1:-1;;32977:15:0;;32972:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32972:21:0::1;-1:-1:-1::0;;;;;32972:29:0::1;;32964:69;;;::::0;;-1:-1:-1;;;32964:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32964:69:0;;;;;;;;;;;;;::::1;;33044:137;33090:4;;33095:1;33090:7;;;;;;33044:137;33192:55;33227:4;;33192:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33241:4:0::1;::::0;-1:-1:-1;33192:34:0::1;::::0;-1:-1:-1;;33192:55:0:i:1;:::-;33258:14;33289:4;-1:-1:-1::0;;;;;33275:29:0::1;;33313:4;33275:44;;;;;;;;;;;;;-1:-1:-1::0;;;;;33275:44:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33275:44:0;;-1:-1:-1;33338:25:0;;::::1;;33330:79;;;;-1:-1:-1::0;;;33330:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33426:4;-1:-1:-1::0;;;;;33420:20:0::1;;33441:9;33420:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33462:45;33493:2;33497:9;33462:30;:45::i;27239:820::-:0;27453:21;27425:8;16586:15;16574:8;:27;;16566:62;;;;;-1:-1:-1;;;16566:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16566:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27525:4:0::1;27500:29;:4:::0;;-1:-1:-1;;27505:15:0;;27500:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27500:21:0::1;-1:-1:-1::0;;;;;27500:29:0::1;;27492:69;;;::::0;;-1:-1:-1;;;27492:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27492:69:0;;;;;;;;;;;;;::::1;;27582:53;27610:7;27619:9;27630:4;;27582:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27582:27:0::1;::::0;-1:-1:-1;;;27582:53:0:i:1;:::-;27572:63;;27668:11;27654:7;27662:1;27654:10;;;;;;;;;;;;;;:25;;27646:75;;;;-1:-1:-1::0;;;27646:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20937:673:::0;21174:16;21192:14;21155:8;16586:15;16574:8;:27;;16566:62;;;;;-1:-1:-1;;;16566:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16566:62:0;;;;;;;;;;;;;;;21246:196:::1;21276:5;21296:4;21315:9;21339:14;21368:12;21403:4;21423:8;21246:15;:196::i;:::-;21219:223:::0;;-1:-1:-1;21219:223:0;-1:-1:-1;21453:51:0::1;21481:5:::0;21488:2;21219:223;21453:27:::1;:51::i;:::-;21521:4;-1:-1:-1::0;;;;;21515:20:0::1;;21536:9;21515:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21557:45;21588:2;21592:9;21557:30;:45::i;:::-;20937:673:::0;;;;;;;;;;:::o;18325:734::-;18613:12;18627;18641:14;18594:8;16586:15;16574:8;:27;;16566:62;;;;;-1:-1:-1;;;16566:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16566:62:0;;;;;;;;;;;;;;;18689:85:::1;18703:6;18711;18719:14;18735;18751:10;18763;18689:13;:85::i;:::-;18668:106:::0;;-1:-1:-1;18668:106:0;-1:-1:-1;18785:12:0::1;18800:47;18823:7;18832:6:::0;18840;18800:22:::1;:47::i;:::-;18785:62;;18858:66;18890:6;18898:10;18910:4;18916:7;18858:31;:66::i;:::-;18935;18967:6;18975:10;18987:4;18993:7;18935:31;:66::i;:::-;19037:4;-1:-1:-1::0;;;;;19024:23:0::1;;19048:2;19024:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;19024:27:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19024:27:0;18325:734;;;;-1:-1:-1;19024:27:0;;-1:-1:-1;18325:734:0;;-1:-1:-1;;;;;;;;;18325:734:0:o;19065:970::-;19318:16;19336:14;19352;19299:8;16586:15;16574:8;:27;;16566:62;;;;;-1:-1:-1;;;16566:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16566:62:0;;;;;;;;;;;;;;;19406:176:::1;19434:5;19454:4;19473:18;19506:9;19530:14;19559:12;19406:13;:176::i;:::-;19379:203:::0;;-1:-1:-1;19379:203:0;-1:-1:-1;19593:12:0::1;19608:44;19631:7;19640:5:::0;19647:4:::1;19608:22;:44::i;:::-;19593:59;;19663:69;19695:5;19702:10;19714:4;19720:11;19663:31;:69::i;:::-;19749:4;-1:-1:-1::0;;;;;19743:19:0::1;;19770:9;19743:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;19806:4;-1:-1:-1::0;;;;;19800:20:0::1;;19821:4;19827:9;19800:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19800:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19800:37:0;19793:45:::1;;;;19874:4;-1:-1:-1::0;;;;;19861:23:0::1;;19885:2;19861:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;19861:27:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19861:27:0;;-1:-1:-1;19939:9:0::1;:21:::0;-1:-1:-1;19935:92:0::1;;;19962:65;19993:10;20017:9;20005;:21;19962:30;:65::i;:::-;16639:1;19065:970:::0;;;;;;;;;;;:::o;13698:513::-;13791:14;13837:1;13826:8;:12;13818:66;;;;-1:-1:-1;;;13818:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13915:1;13903:9;:13;:31;;;;;13933:1;13920:10;:14;13903:31;13895:82;;;;-1:-1:-1;;;13895:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13988:20;14011:17;:8;14024:3;14011:12;:17::i;:::-;13988:40;-1:-1:-1;14039:14:0;14056:31;13988:40;14076:10;14056:19;:31::i;:::-;14039:48;-1:-1:-1;14098:16:0;14117:40;14141:15;14117:19;:9;14131:4;14117:13;:19::i;:::-;:23;;:40::i;:::-;14098:59;;14192:11;14180:9;:23;;;;;;;13698:513;-1:-1:-1;;;;;;;13698:513:0:o;15472:530::-;15573:21;15630:1;15615:4;:11;:16;;15607:57;;;;;-1:-1:-1;;;15607:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15696:4;:11;15685:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15685:23:0;;15675:33;;15749:9;15719:7;15744:1;15727:7;:14;:18;15719:27;;;;;;;;;;;;;;;;;:39;15783:11;;-1:-1:-1;;15783:15:0;15769:226;15800:5;;15769:226;;15828:14;15844:15;15863:42;15875:7;15884:4;15893:1;15889;:5;15884:11;;;;;;;;;;;;;;15897:4;15902:1;15897:7;;;;;;;;;;;;;;15863:11;:42::i;:::-;15827:78;;;;15937:46;15949:7;15957:1;15949:10;;;;;;;;;;;;;;15961:9;15972:10;15937:11;:46::i;:::-;15920:7;15932:1;15928;:5;15920:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;15807:3:0;15769:226;;;;15472:530;;;;;:::o;12221:478::-;12310:12;12336:14;12352;12370:26;12381:6;12389;12370:10;:26::i;:::-;12534:32;;;-1:-1:-1;;12534:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12524:43;;;;;;-1:-1:-1;;;;;;12437:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12427:262;;;;;;;;;12221:478;-1:-1:-1;;;;;12221:478:0:o;14882:509::-;14983:21;15040:1;15025:4;:11;:16;;15017:57;;;;;-1:-1:-1;;;15017:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15106:4;:11;15095:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15095:23:0;;15085:33;;15142:8;15129:7;15137:1;15129:10;;;;;;;;;;;;;:21;;;;;15166:6;15161:223;15192:1;15178:4;:11;:15;15174:1;:19;15161:223;;;15216:14;15232:15;15251:42;15263:7;15272:4;15277:1;15272:7;;;;;;;;;;;;;;15281:4;15286:1;15290;15286:5;15281:11;;;;;;;15251:42;15215:78;;;;15325:47;15338:7;15346:1;15338:10;;;;;;;;;;;;;;15350:9;15361:10;15325:12;:47::i;:::-;15308:7;15316:1;15320;15316:5;15308:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;15195:3:0;;15161:223;;10545:402;10770:51;;;-1:-1:-1;;;;;10770:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10770:51:0;-1:-1:-1;;;10770:51:0;;;10759:63;;;;10724:12;;10738:17;;10759:10;;;;10770:51;10759:63;;;10770:51;10759:63;;10770:51;10759:63;;;;;;;;;;-1:-1:-1;;10759:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10723:99;;;;10841:7;:57;;;;-1:-1:-1;10853:11:0;;:16;;:44;;;10884:4;10873:24;;;;;;;;;;;;;;;-1:-1:-1;10873:24:0;10853:44;10833:106;;;;-1:-1:-1;;;10833:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10545:402;;;;;;:::o;24577:727::-;24684:6;24679:618;24710:1;24696:4;:11;:15;24692:1;:19;24679:618;;;24734:13;24749:14;24768:4;24773:1;24768:7;;;;;;;;;;;;;;24777:4;24782:1;24786;24782:5;24777:11;;;;;;;;;;;;;;24733:56;;;;24805:14;24824:40;24850:5;24857:6;24824:25;:40::i;:::-;24804:60;;;24879:14;24896:7;24904:1;24908;24904:5;24896:14;;;;;;;;;;;;;;24879:31;;24926:15;24943;24971:6;-1:-1:-1;;;;;24962:15:0;:5;-1:-1:-1;;;;;24962:15:0;;:61;;25004:9;25020:1;24962:61;;;24986:1;24990:9;24962:61;24925:98;;;;25038:10;25069:1;25055:4;:11;:15;25051:1;:19;:80;;25128:3;25051:80;;;25073:52;25096:7;25105:6;25113:4;25118:1;25122;25118:5;25113:11;;;;;;;;;;;;;;25073:22;:52::i;:::-;25038:93;;25159:46;25182:7;25191:5;25198:6;25159:22;:46::i;:::-;-1:-1:-1;;;;;25146:65:0;;25230:10;25242;25254:2;25268:1;25258:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25258:12:0;;25146:139;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25146:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24713:3:0;;;;;-1:-1:-1;24679:618:0;;-1:-1:-1;;;;;;;;24679:618:0;;;24577:727;;;:::o;29862:1209::-;29975:6;29970:1094;30001:1;29987:4;:11;:15;29983:1;:19;29970:1094;;;30025:13;30040:14;30059:4;30064:1;30059:7;;;;;;;;;;;;;;30068:4;30073:1;30077;30073:5;30068:11;;;;;;;;;;;;;;30024:56;;;;30096:14;30115:40;30141:5;30148:6;30115:25;:40::i;:::-;30095:60;;;30170:17;30203:46;30226:7;30235:5;30242:6;30203:22;:46::i;:::-;30170:80;;30265:16;30296:17;30384:13;30399;30417:4;-1:-1:-1;;;;;30417:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30417:18:0;;;;;;;-1:-1:-1;;;;;30383:52:0;;;;-1:-1:-1;30383:52:0;;-1:-1:-1;30451:17:0;;-1:-1:-1;;;;;30492:15:0;;;;;;;:61;;30534:8;30544;30492:61;;;30511:8;30521;30492:61;30450:103;;;;30582:63;30632:12;30596:5;-1:-1:-1;;;;;30582:30:0;;30621:4;30582:45;;;;;;;;;;;;;-1:-1:-1;;;;;30582:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;:63;30568:77;;30675:69;30703:11;30716:12;30730:13;30675:27;:69::i;:::-;30660:84;;29970:1094;;;;30775:15;30792;30820:6;-1:-1:-1;;;;;30811:15:0;:5;-1:-1:-1;;;;;30811:15:0;;:67;;30856:12;30875:1;30811:67;;;30835:1;30839:12;30811:67;30774:104;;;;30893:10;30924:1;30910:4;:11;:15;30906:1;:19;:80;;30983:3;30906:80;;;30928:52;30951:7;30960:6;30968:4;30973:1;30977;30973:5;30968:11;;;;;;;30928:52;31039:12;;;31049:1;31039:12;;;;;;;;;;-1:-1:-1;;;31001:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31001:51:0;;;;;;;;;;;;;;;;;;;;;;30893:93;;-1:-1:-1;31001:9:0;;;;;;31011:10;;31023;;30893:93;;31039:12;;31001:51;;;;;;;;31039:12;;31001:51;;;;31039:12;;31001:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30004:3:0;;;;;-1:-1:-1;29970:1094:0;;-1:-1:-1;;;;;;;;;;29970:1094:0;;;29862:1209;;:::o;11326:129::-;11410:5;;;11405:16;;;;11397:50;;;;;-1:-1:-1;;;11397:50:0;;;;;;;;;;;;-1:-1:-1;;;11397:50:0;;;;;;;;;;;;;;10955:195;11063:12;;;11025;11063;;;;;;;;;-1:-1:-1;;;;;11042:7:0;;;11056:5;;11042:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11042:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11024:52;;;11095:7;11087:55;;;;-1:-1:-1;;;11087:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14332:468;14425:13;14471:1;14459:9;:13;14451:68;;;;-1:-1:-1;;;14451:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14550:1;14538:9;:13;:31;;;;;14568:1;14555:10;:14;14538:31;14530:82;;;;-1:-1:-1;;;14530:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14623:14;14640:34;14669:4;14640:24;:9;14654;14640:13;:24::i;:::-;:28;;:34::i;:::-;14623:51;-1:-1:-1;14685:16:0;14704:34;14734:3;14704:25;:10;14719:9;14704:14;:25::i;:34::-;14685:53;;14760:32;14790:1;14773:11;14761:9;:23;;;;;;;14760:29;:32::i;:::-;14749:43;14332:468;-1:-1:-1;;;;;;14332:468:0:o;13259:317::-;13341:12;13384:1;13374:7;:11;13366:59;;;;-1:-1:-1;;;13366:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13455:1;13444:8;:12;:28;;;;;13471:1;13460:8;:12;13444:28;13436:79;;;;-1:-1:-1;;;13436:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13560:8;13536:21;:7;13548:8;13536:11;:21::i;:::-;:32;;;;;;;13259:317;-1:-1:-1;;;;13259:317:0:o;10176:361::-;10371:45;;;-1:-1:-1;;;;;10371:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10371:45:0;-1:-1:-1;;;10371:45:0;;;10360:57;;;;10325:12;;10339:17;;10360:10;;;;10371:45;10360:57;;;10371:45;10360:57;;10371:45;10360:57;;;;;;;;;;-1:-1:-1;;10360:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10324:93;;;;10436:7;:57;;;;-1:-1:-1;10448:11:0;;:16;;:44;;;10479:4;10468:24;;;;;;;;;;;;;;;-1:-1:-1;10468:24:0;10448:44;10428:101;;;;;-1:-1:-1;;;10428:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10176:361;;;;;:::o;11784:345::-;11859:14;11875;11920:6;-1:-1:-1;;;;;11910:16:0;:6;-1:-1:-1;;;;;11910:16:0;;;11902:64;;;;-1:-1:-1;;;11902:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12005:6;-1:-1:-1;;;;;11996:15:0;:6;-1:-1:-1;;;;;11996:15:0;;:53;;12034:6;12042;11996:53;;;12015:6;12023;11996:53;11977:72;;-1:-1:-1;11977:72:0;-1:-1:-1;;;;;;12068:20:0;;12060:61;;;;;-1:-1:-1;;;12060:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11784:345;;;;;:::o;16943:1376::-;17161:12;17175;17316:1;-1:-1:-1;;;;;17256:62:0;17272:7;-1:-1:-1;;;;;17256:32:0;;17289:6;17297;17256:48;;;;;;;;;;;;;-1:-1:-1;;;;;17256:48:0;;;;;;-1:-1:-1;;;;;17256:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17256:48:0;-1:-1:-1;;;;;17256:62:0;;17252:146;;;17351:7;-1:-1:-1;;;;;17335:35:0;;17371:6;17379;17335:51;;;;;;;;;;;;;-1:-1:-1;;;;;17335:51:0;;;;;;-1:-1:-1;;;;;17335:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17252:146:0;17409:13;17424;17441:51;17468:7;17477:6;17485;17441:26;:51::i;:::-;17408:84;;;;17507:8;17519:1;17507:13;:30;;;;-1:-1:-1;17524:13:0;;17507:30;17503:809;;;17576:14;;-1:-1:-1;17592:14:0;;-1:-1:-1;17503:809:0;;;17640:19;17662:56;17683:14;17699:8;17709;17662:20;:56::i;:::-;17640:78;;17755:14;17737;:32;17733:568;;17816:10;17798:14;:28;;17790:77;;;;-1:-1:-1;;;17790:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17908:14;;-1:-1:-1;17924:14:0;-1:-1:-1;17924:14:0;17733:568;;;17980:19;18002:56;18023:14;18039:8;18049;18002:20;:56::i;:::-;17980:78;;18102:14;18084;:32;;18077:40;;;;18162:10;18144:14;:28;;18136:77;;;;-1:-1:-1;;;18136:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18254:14;-1:-1:-1;18270:14:0;;-1:-1:-1;17733:568:0;17503:809;;16943:1376;;;;;;;;;;;:::o;11463:142::-;11515:6;11542;;;:30;;-1:-1:-1;;11557:5:0;;;11571:1;11566;11557:5;11566:1;11552:15;;;;;:20;11542:30;11534:63;;;;;-1:-1:-1;;;11534:63:0;;;;;;;;;;;;-1:-1:-1;;;11534:63:0;;;;;;;;;;;;;;11190:128;11274:5;;;11269:16;;;;11261:49;;;;;-1:-1:-1;;;11261:49:0;;;;;;;;;;;;-1:-1:-1;;;11261:49:0;;;;;;;;;;;;;;12757:389;12850:13;12865;12892:14;12911:26;12922:6;12930;12911:10;:26::i;:::-;12891:46;;;12949:13;12964;12995:32;13003:7;13012:6;13020;12995:7;:32::i;:::-;-1:-1:-1;;;;;12982:58:0;;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12982:60:0;;;;;;;-1:-1:-1;;;;;12948:94:0;;;;-1:-1:-1;12948:94:0;;-1:-1:-1;;;;;;13076:16:0;;;;;;;:62;;13119:8;13129;13076:62;;;13096:8;13106;13076:62;13053:85;;;;-1:-1:-1;12757:389:0;-1:-1:-1;;;;;;;12757:389:0:o

Swarm Source

ipfs://f111186ad54607bcd6dfcb5b46c7edb47656c52a704fda54d2887144510cf0e3
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.