Contract 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f 8

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x200e542c52650e9194062cf5fecd1836d14855902decd0c34131ae89f7090ee5Swap Tokens For ...119611102021-10-21 9:20:4652 secs ago0x5a0b50ed91a268fd13efa248b3cb81bc8368e9da IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0 BNB0.0007096815
0x6339750ce3bca67547d43526a9bf457c4f96d0aa913ffa5cfd17488d64426af5Swap Exact Token...119611062021-10-21 9:20:341 min ago0x582ed4c095ee0217d11b001ae4bd3785278b6dc9 IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0 BNB0.000856015
0x73c006965726768a614d2f7996ff6b494ac2be63998c2a392906a5c980a60408Swap Exact Token...119611012021-10-21 9:20:161 min ago0xb1947a7ff8830a77235efc2f661c6e7ccfba8fdc IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0 BNB0.000561105
0x3faae95580ab54c707dbf090574dbf84d821ad3718a62b67a6a74726272fcd49Swap Tokens For ...119611002021-10-21 9:20:131 min ago0x5a0b50ed91a268fd13efa248b3cb81bc8368e9da IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0 BNB0.0007096815
0x9f79ce4edb613d9c1091b4a2eef5845ce3e469e7ac67c2224ea9fca1c4d50d6aSwap Tokens For ...119610822021-10-21 9:19:192 mins ago0x13592a93171712b41e5bdd08cb72562e2788f898 IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0 BNB0.00062194
0xed557947778e6fc70716b44f443d1d9230cb73b24903d455bb16b2f0416aea48Swap Exact BNB F...119610722021-10-21 9:18:492 mins ago0x77f9bf126016343df55c952dc5a7b3df9c6df839 IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0.2025 BNB0.000636015
0x0f6a4cd447b04854ff5145d335c3625de7cce35862202f4790065a5fadd7831eSwap BNB For Exa...119610332021-10-21 9:16:494 mins ago0x5598bc2d8dadfbc9884430bbabd86fef6fe43c97 IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0.028297350380913 BNB0.00060112
0x87778d6b8c9e5f851c89f2524574509c8ab862fb73c274b3b87c731161ca48f9Swap Exact Token...119610142021-10-21 9:15:525 mins ago0x9674ab93d4b088603d4121bb8f32ee451e4a2d8b IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0 BNB0.0006812427
0x3df327f97662a085202aa6474500b720cb0a2696a9b5a82ed5e0d2ed248c284bSwap Exact BNB F...119610112021-10-21 9:15:435 mins ago0x472276d38303f69915d9d9873969fc45c6d28c62 IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0.23892 BNB0.0006039385
0xfa9099dffd96470e323aef782a3ddecf928953bc1d5eca46e24dd37d43b70c14Swap Exact Token...119610072021-10-21 9:15:316 mins ago0x2c073881bd082f70942aa934c21464de53e9ffec IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0 BNB0.00054516
0x4539fb7f3f7d2657fdb238e888b89c41394e7017a8c08e3ebb04f459e61f61aeSwap Exact BNB F...119610022021-10-21 9:15:166 mins ago0x472276d38303f69915d9d9873969fc45c6d28c62 IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0.228103006505 BNB0.0006039385
0xb20c8874f0608b1de4b3e7f150c45161a7d99cdb1d0a3b0118961faa75b5524bSwap Exact BNB F...119609552021-10-21 9:12:528 mins ago0xd3b83199812e3992488c087617367e4560230599 IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0.61784126003935 BNB0.000549095
0x5453b015a66d264c74f419689bea1c2ba1a019505f205877bc83603ba081d708Remove Liquidity...119609172021-10-21 9:10:5810 mins ago0x15fbdc83b59a3cd74e66b59aca71ba661457730f IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0 BNB0.003337055
0x3a586f09f08914962103303be248878ba6e13c0b99f29d33d59b20bf4123a6adSwap Exact Token...119608912021-10-21 9:09:4011 mins ago0x0af20058f8d2fb47a25975ba548b5fb2aaf5e27d IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0 BNB0.002012165
0x73cef2417e94bc13191fbf53b05910eb7a9c798d71beece2c705d1adfdcd39adSwap Exact Token...119608792021-10-21 9:09:0412 mins ago0x25e7bf9c512347298d51cffeec38b823a0a75956 IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0 BNB0.000593005
0x43c2b7c9d84a3121570f4f05c5e2d8eb0c4412b2fb11fdf0fc8af2ada62db0a0Swap Exact BNB F...119608742021-10-21 9:08:4912 mins ago0x472276d38303f69915d9d9873969fc45c6d28c62 IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0.1982331186 BNB0.0006039385
0xaccae66562dfe2deaf61e57f943ee934824e78851f7b3f2e7ce2d5353f8c61ddSwap Exact BNB F...119608412021-10-21 9:07:1014 mins ago0x472276d38303f69915d9d9873969fc45c6d28c62 IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0.307562402895 BNB0.0006039385
0x9f0f8d270ae6387f7aafca27557db7d1da3014a7f14a3e0aa6b0dd504c4dfaa3Add Liquidity119608192021-10-21 9:06:0415 mins ago0xab995eee82541381d0dfedc7aae891210faa38f9 IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0 BNB0.00090453
0x413a242f6bf9b2156a24a05e55dd1c63a2817b02b52f459fe9e9a6b27c828e15Swap Exact BNB F...119608172021-10-21 9:05:5815 mins ago0x472276d38303f69915d9d9873969fc45c6d28c62 IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0.27831987909 BNB0.0006039385
0xdf81f1c08bdc15ba69f8e694b24a0e947a13a4ba7ed7c241297b6b11a6d98e03Swap Exact Token...119608102021-10-21 9:05:3716 mins ago0xc0e5c676833bdc6cc24ab1fd1e623380f4617db5 IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0 BNB0.00056443
0xaffc6c6e8c9ec0afd6bf6fe92cde410b4579b165cc56b1b00978f5060bf9bec0Swap Exact Token...119608032021-10-21 9:05:1616 mins ago0x5fa14270c772a99f956f49e5b10fee39d0550d3d IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0 BNB0.001331553548
0xd9ba3646e586ade1126db05fdbfa58998a5a4d0516323557046318dac9928001Swap Tokens For ...119607792021-10-21 9:04:0417 mins ago0x5a0b50ed91a268fd13efa248b3cb81bc8368e9da IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0 BNB0.0007098135
0x0f887f8ff9dc8863f8abdb41514ce076935ebf6cc4288f4500f194e55b7d39c6Swap Exact Token...119607782021-10-21 9:04:0117 mins ago0xd096a4416e849786ea0e5b0efdb730605d834d1c IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0 BNB0.00047028
0x2dc742650a95c5835f2c7438842fb269b2862cc527b83f51a1bf9f3000eafb6eSwap Exact BNB F...119607202021-10-21 9:00:5820 mins ago0xcd4e84e3b36ce96a0261f58026bd6533a2b52ff7 IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0.046624926939855 BNB0.000549095
0x19984a1512eb9900609fdca47e62dfe1eb6c2966b3b914a333979327e5512eb7Swap Exact BNB F...119607132021-10-21 9:00:3321 mins ago0x7415bcbb323dbbcc64dae7b46ed56bce1cc8ee97 IN  0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0.138775426947958 BNB0.000577265
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x73c006965726768a614d2f7996ff6b494ac2be63998c2a392906a5c980a60408119611012021-10-21 9:20:161 min ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0xb1947a7ff8830a77235efc2f661c6e7ccfba8fdc0.00486216545985928 BNB
0x73c006965726768a614d2f7996ff6b494ac2be63998c2a392906a5c980a60408119611012021-10-21 9:20:161 min ago Binance: WBNB Token 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0.00486216545985928 BNB
0x3faae95580ab54c707dbf090574dbf84d821ad3718a62b67a6a74726272fcd49119611002021-10-21 9:20:131 min ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0x5a0b50ed91a268fd13efa248b3cb81bc8368e9da0.19152 BNB
0x3faae95580ab54c707dbf090574dbf84d821ad3718a62b67a6a74726272fcd49119611002021-10-21 9:20:131 min ago Binance: WBNB Token 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0.19152 BNB
0xed557947778e6fc70716b44f443d1d9230cb73b24903d455bb16b2f0416aea48119610722021-10-21 9:18:492 mins ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f Binance: WBNB Token0.2025 BNB
0x0f6a4cd447b04854ff5145d335c3625de7cce35862202f4790065a5fadd7831e119610332021-10-21 9:16:494 mins ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0x5598bc2d8dadfbc9884430bbabd86fef6fe43c970.000140782837715987 BNB
0x0f6a4cd447b04854ff5145d335c3625de7cce35862202f4790065a5fadd7831e119610332021-10-21 9:16:494 mins ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f Binance: WBNB Token0.028156567543197416 BNB
0x87778d6b8c9e5f851c89f2524574509c8ab862fb73c274b3b87c731161ca48f9119610142021-10-21 9:15:525 mins ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0x9674ab93d4b088603d4121bb8f32ee451e4a2d8b0.156039952661414755 BNB
0x87778d6b8c9e5f851c89f2524574509c8ab862fb73c274b3b87c731161ca48f9119610142021-10-21 9:15:525 mins ago Binance: WBNB Token 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0.156039952661414755 BNB
0x3df327f97662a085202aa6474500b720cb0a2696a9b5a82ed5e0d2ed248c284b119610112021-10-21 9:15:435 mins ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f Binance: WBNB Token0.23892 BNB
0x4539fb7f3f7d2657fdb238e888b89c41394e7017a8c08e3ebb04f459e61f61ae119610022021-10-21 9:15:166 mins ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f Binance: WBNB Token0.228103006505 BNB
0xb20c8874f0608b1de4b3e7f150c45161a7d99cdb1d0a3b0118961faa75b5524b119609552021-10-21 9:12:528 mins ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f Binance: WBNB Token0.617841260039350257 BNB
0x5453b015a66d264c74f419689bea1c2ba1a019505f205877bc83603ba081d708119609172021-10-21 9:10:5810 mins ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0x15fbdc83b59a3cd74e66b59aca71ba661457730f0.056562076738809023 BNB
0x5453b015a66d264c74f419689bea1c2ba1a019505f205877bc83603ba081d708119609172021-10-21 9:10:5810 mins ago Binance: WBNB Token 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0.056562076738809023 BNB
0x73cef2417e94bc13191fbf53b05910eb7a9c798d71beece2c705d1adfdcd39ad119608792021-10-21 9:09:0412 mins ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0x25e7bf9c512347298d51cffeec38b823a0a759560.765378923235857642 BNB
0x73cef2417e94bc13191fbf53b05910eb7a9c798d71beece2c705d1adfdcd39ad119608792021-10-21 9:09:0412 mins ago Binance: WBNB Token 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0.765378923235857642 BNB
0x43c2b7c9d84a3121570f4f05c5e2d8eb0c4412b2fb11fdf0fc8af2ada62db0a0119608742021-10-21 9:08:4912 mins ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f Binance: WBNB Token0.1982331186 BNB
0xaccae66562dfe2deaf61e57f943ee934824e78851f7b3f2e7ce2d5353f8c61dd119608412021-10-21 9:07:1014 mins ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f Binance: WBNB Token0.307562402895 BNB
0x413a242f6bf9b2156a24a05e55dd1c63a2817b02b52f459fe9e9a6b27c828e15119608172021-10-21 9:05:5815 mins ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f Binance: WBNB Token0.27831987909 BNB
0xdf81f1c08bdc15ba69f8e694b24a0e947a13a4ba7ed7c241297b6b11a6d98e03119608102021-10-21 9:05:3716 mins ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0xc0e5c676833bdc6cc24ab1fd1e623380f4617db50.037156934449316728 BNB
0xdf81f1c08bdc15ba69f8e694b24a0e947a13a4ba7ed7c241297b6b11a6d98e03119608102021-10-21 9:05:3716 mins ago Binance: WBNB Token 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0.037156934449316728 BNB
0xd9ba3646e586ade1126db05fdbfa58998a5a4d0516323557046318dac9928001119607792021-10-21 9:04:0417 mins ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0x5a0b50ed91a268fd13efa248b3cb81bc8368e9da0.190949999999999968 BNB
0xd9ba3646e586ade1126db05fdbfa58998a5a4d0516323557046318dac9928001119607792021-10-21 9:04:0417 mins ago Binance: WBNB Token 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f0.190949999999999968 BNB
0x2dc742650a95c5835f2c7438842fb269b2862cc527b83f51a1bf9f3000eafb6e119607202021-10-21 9:00:5820 mins ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f Binance: WBNB Token0.046624926939855116 BNB
0x19984a1512eb9900609fdca47e62dfe1eb6c2966b3b914a333979327e5512eb7119607132021-10-21 9:00:3321 mins ago 0xcde540d7eafe93ac5fe6233bee57e1270d3e330f Binance: WBNB Token0.138775426947958043 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BakerySwapRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 999999 runs

Other Settings:
istanbul EvmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2020-09-14
*/

pragma solidity >=0.5.0;

interface IBakerySwapFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint256);

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// helper methods for interacting with BEP20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 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,
        uint256 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,
        uint256 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, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, 'TransferHelper: BNB_TRANSFER_FAILED');
    }
}

interface IBakerySwapRouter {
    function factory() external pure returns (address);

    function WBNB() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityBNB(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountBNBMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountBNB,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityBNB(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountBNBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountBNB);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityBNBWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountBNBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountBNB);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactBNBForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactBNB(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForBNB(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapBNBForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function removeLiquidityBNBSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountBNBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountBNB);

    function removeLiquidityBNBWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountBNBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountBNB);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactBNBForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForBNBSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
}

library BakerySwapLibrary {
    using SafeMath for uint256;

    // 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, 'BakerySwapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'BakerySwapLibrary: 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(
            uint256(
                keccak256(
                    abi.encodePacked(
                        hex'ff',
                        factory,
                        keccak256(abi.encodePacked(token0, token1)),
                        hex'e2e87433120e32c4738a7d8f3271f3d872cbe16241d67537139158d90bac61d3' // init code hash
                    )
                )
            )
        );
    }

    // fetches and sorts the reserves for a pair
    function getReserves(
        address factory,
        address tokenA,
        address tokenB
    ) internal view returns (uint256 reserveA, uint256 reserveB) {
        (address token0, ) = sortTokens(tokenA, tokenB);
        (uint256 reserve0, uint256 reserve1, ) = IBakerySwapPair(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(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) internal pure returns (uint256 amountB) {
        require(amountA > 0, 'BakerySwapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'BakerySwapLibrary: 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(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) internal pure returns (uint256 amountOut) {
        require(amountIn > 0, 'BakerySwapLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'BakerySwapLibrary: INSUFFICIENT_LIQUIDITY');
        uint256 amountInWithFee = amountIn.mul(997);
        uint256 numerator = amountInWithFee.mul(reserveOut);
        uint256 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(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) internal pure returns (uint256 amountIn) {
        require(amountOut > 0, 'BakerySwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'BakerySwapLibrary: INSUFFICIENT_LIQUIDITY');
        uint256 numerator = reserveIn.mul(amountOut).mul(1000);
        uint256 denominator = reserveOut.sub(amountOut).mul(997);
        amountIn = (numerator / denominator).add(1);
    }

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

interface IBakerySwapPair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to) external returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, 'SafeMath: addition overflow');

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, 'SafeMath: subtraction overflow');
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, 'SafeMath: multiplication overflow');

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, 'SafeMath: division by zero');
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, 'SafeMath: modulo by zero');
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = x < y ? x : y;
    }

    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint256 y) internal pure returns (uint256 z) {
        if (y > 3) {
            z = y;
            uint256 x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

interface IBEP20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the token decimals.
     */
    function decimals() external view returns (uint8);

    /**
     * @dev Returns the token symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the token name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external view returns (address);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address _owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IWBNB {
    function deposit() external payable;

    function transfer(address to, uint256 value) external returns (bool);

    function withdraw(uint256) external;
}

contract BakerySwapRouter is IBakerySwapRouter {
    using SafeMath for uint256;
    address public immutable override factory;
    address public immutable override WBNB;

    modifier ensure(uint256 deadline) {
        require(deadline >= block.timestamp, 'BakerySwapRouter: 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,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin
    ) internal virtual returns (uint256 amountA, uint256 amountB) {
        // create the pair if it doesn't exist yet
        if (IBakerySwapFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IBakerySwapFactory(factory).createPair(tokenA, tokenB);
        }
        (uint256 reserveA, uint256 reserveB) = BakerySwapLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint256 amountBOptimal = BakerySwapLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'BakerySwapRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint256 amountAOptimal = BakerySwapLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'BakerySwapRouter: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        virtual
        override
        ensure(deadline)
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        )
    {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = BakerySwapLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IBakerySwapPair(pair).mint(to);
    }

    function addLiquidityBNB(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountBNBMin,
        address to,
        uint256 deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (
            uint256 amountToken,
            uint256 amountBNB,
            uint256 liquidity
        )
    {
        (amountToken, amountBNB) = _addLiquidity(
            token,
            WBNB,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountBNBMin
        );
        address pair = BakerySwapLibrary.pairFor(factory, token, WBNB);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWBNB(WBNB).deposit{value: amountBNB}();
        assert(IWBNB(WBNB).transfer(pair, amountBNB));
        liquidity = IBakerySwapPair(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,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) public virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB) {
        address pair = BakerySwapLibrary.pairFor(factory, tokenA, tokenB);
        IBakerySwapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint256 amount0, uint256 amount1) = IBakerySwapPair(pair).burn(to);
        (address token0, ) = BakerySwapLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'BakerySwapRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'BakerySwapRouter: INSUFFICIENT_B_AMOUNT');
    }

    function removeLiquidityBNB(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountBNBMin,
        address to,
        uint256 deadline
    ) public virtual override ensure(deadline) returns (uint256 amountToken, uint256 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,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external virtual override returns (uint256 amountA, uint256 amountB) {
        address pair = BakerySwapLibrary.pairFor(factory, tokenA, tokenB);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IBakerySwapPair(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,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountBNBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external virtual override returns (uint256 amountToken, uint256 amountBNB) {
        address pair = BakerySwapLibrary.pairFor(factory, token, WBNB);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IBakerySwapPair(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,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountBNBMin,
        address to,
        uint256 deadline
    ) public virtual override ensure(deadline) returns (uint256 amountBNB) {
        (, amountBNB) = removeLiquidity(token, WBNB, liquidity, amountTokenMin, amountBNBMin, address(this), deadline);
        TransferHelper.safeTransfer(token, to, IBEP20(token).balanceOf(address(this)));
        IWBNB(WBNB).withdraw(amountBNB);
        TransferHelper.safeTransferBNB(to, amountBNB);
    }

    function removeLiquidityBNBWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountBNBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external virtual override returns (uint256 amountBNB) {
        address pair = BakerySwapLibrary.pairFor(factory, token, WBNB);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IBakerySwapPair(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(
        uint256[] memory amounts,
        address[] memory path,
        address _to
    ) internal virtual {
        for (uint256 i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0, ) = BakerySwapLibrary.sortTokens(input, output);
            uint256 amountOut = amounts[i + 1];
            (uint256 amount0Out, uint256 amount1Out) = input == token0
                ? (uint256(0), amountOut)
                : (amountOut, uint256(0));
            address to = i < path.length - 2 ? BakerySwapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IBakerySwapPair(BakerySwapLibrary.pairFor(factory, input, output)).swap(amount0Out, amount1Out, to);
        }
    }

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
        amounts = BakerySwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BakerySwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            BakerySwapLibrary.pairFor(factory, path[0], path[1]),
            amounts[0]
        );
        _swap(amounts, path, to);
    }

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
        amounts = BakerySwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'BakerySwapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            BakerySwapLibrary.pairFor(factory, path[0], path[1]),
            amounts[0]
        );
        _swap(amounts, path, to);
    }

    function swapExactBNBForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override payable ensure(deadline) returns (uint256[] memory amounts) {
        require(path[0] == WBNB, 'BakerySwapRouter: INVALID_PATH');
        amounts = BakerySwapLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BakerySwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWBNB(WBNB).deposit{value: amounts[0]}();
        assert(IWBNB(WBNB).transfer(BakerySwapLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }

    function swapTokensForExactBNB(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
        require(path[path.length - 1] == WBNB, 'BakerySwapRouter: INVALID_PATH');
        amounts = BakerySwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'BakerySwapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            BakerySwapLibrary.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(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
        require(path[path.length - 1] == WBNB, 'BakerySwapRouter: INVALID_PATH');
        amounts = BakerySwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BakerySwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            BakerySwapLibrary.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(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override payable ensure(deadline) returns (uint256[] memory amounts) {
        require(path[0] == WBNB, 'BakerySwapRouter: INVALID_PATH');
        amounts = BakerySwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'BakerySwapRouter: EXCESSIVE_INPUT_AMOUNT');
        IWBNB(WBNB).deposit{value: amounts[0]}();
        assert(IWBNB(WBNB).transfer(BakerySwapLibrary.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 (uint256 i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0, ) = BakerySwapLibrary.sortTokens(input, output);
            IBakerySwapPair pair = IBakerySwapPair(BakerySwapLibrary.pairFor(factory, input, output));
            uint256 amountInput;
            uint256 amountOutput;
            {
                // scope to avoid stack too deep errors
                (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();
                (uint256 reserveInput, uint256 reserveOutput) = input == token0
                    ? (reserve0, reserve1)
                    : (reserve1, reserve0);
                amountInput = IBEP20(input).balanceOf(address(pair)).sub(reserveInput);
                amountOutput = BakerySwapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint256 amount0Out, uint256 amount1Out) = input == token0
                ? (uint256(0), amountOutput)
                : (amountOutput, uint256(0));
            address to = i < path.length - 2 ? BakerySwapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to);
        }
    }

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            BakerySwapLibrary.pairFor(factory, path[0], path[1]),
            amountIn
        );
        uint256 balanceBefore = IBEP20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IBEP20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'BakerySwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }

    function swapExactBNBForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override payable ensure(deadline) {
        require(path[0] == WBNB, 'BakerySwapRouter: INVALID_PATH');
        uint256 amountIn = msg.value;
        IWBNB(WBNB).deposit{value: amountIn}();
        assert(IWBNB(WBNB).transfer(BakerySwapLibrary.pairFor(factory, path[0], path[1]), amountIn));
        uint256 balanceBefore = IBEP20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IBEP20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'BakerySwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }

    function swapExactTokensForBNBSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) {
        require(path[path.length - 1] == WBNB, 'BakerySwapRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            BakerySwapLibrary.pairFor(factory, path[0], path[1]),
            amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint256 amountOut = IBEP20(WBNB).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'BakerySwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWBNB(WBNB).withdraw(amountOut);
        TransferHelper.safeTransferBNB(to, amountOut);
    }

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

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

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

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

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

Contract Security Audit

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"}]

60c06040523480156200001157600080fd5b50604051620056d4380380620056d4833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61554d62000187600039806101ac5280610f995280611388528061147052806114f15280611c1b5280611e295280611f1452806120b0528061226052806122f552806125e35280612679528061282c52806128c15280612aa05280612b755280612fea528061316e528061323e528061335a528061358d52806135c8528061387152806138c752806138fb528061397c525080610e005280610e395280610f77528061113c528061123a5280611530528061195f5280611d0d5280611ef2528061219652806123345280612519528061275f52806129005280612c825280612f145280612f3d528061344c52806136f652806138a552806142be5280614301528061443d528061461e5280614e155280614ef65280614f76525061554d6000f3fe60806040526004361061018f5760003560e01c80638dd95002116100d6578063d06ca61f1161007f578063e058848811610059578063e058848814610ca4578063e8e3370014610d04578063eaaed44214610d91576101d5565b8063d06ca61f14610aa3578063d46d2f8314610b5a578063d67b571e14610bff576101d5565b8063b7e65949116100b0578063b7e65949146109c4578063baa2abde14610a24578063c45a015514610a8e576101d5565b80638dd95002146108bd5780639cf68911146108fb578063ad615dec1461098e576101d5565b80635c11d795116101385780638332a963116101125780638332a9631461074f57806385f8c259146107e25780638803dbee14610818576101d5565b80635c11d795146105855780635d616c5b1461062a578063685a0a34146106cf576101d5565b806334a0772d1161016957806334a0772d146103cd57806338ed17391461044d57806350e27df3146104f2576101d5565b8063054d50d4146101da5780631f00ca74146102225780632195995c14610329576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b50610210600480360360608110156101fd57600080fd5b5080359060208101359060400135610de4565b60408051918252519081900360200190f35b34801561022e57600080fd5b506102d96004803603604081101561024557600080fd5b8135919081019060408101602082013564010000000081111561026757600080fd5b82018360208201111561027957600080fd5b8035906020019184602083028401116401000000008311171561029b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610df9945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103155781810151838201526020016102fd565b505050509050019250505060405180910390f35b34801561033557600080fd5b506103b4600480360361016081101561034d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135610e2f565b6040805192835260208301919091528051918290030190f35b3480156103d957600080fd5b506103b460048036036101408110156103f157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135610f6d565b34801561045957600080fd5b506102d9600480360360a081101561047057600080fd5b81359160208101359181019060608101604082013564010000000081111561049757600080fd5b8201836020820111156104a957600080fd5b803590602001918460208302840111640100000000831117156104cb57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356110c5565b6101d36004803603608081101561050857600080fd5b8135919081019060408101602082013564010000000081111561052a57600080fd5b82018360208201111561053c57600080fd5b8035906020019184602083028401116401000000008311171561055e57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611316565b34801561059157600080fd5b506101d3600480360360a08110156105a857600080fd5b8135916020810135918101906060810160408201356401000000008111156105cf57600080fd5b8201836020820111156105e157600080fd5b8035906020019184602083028401116401000000008311171561060357600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356118bc565b34801561063657600080fd5b506102d9600480360360a081101561064d57600080fd5b81359160208101359181019060608101604082013564010000000081111561067457600080fd5b82018360208201111561068657600080fd5b803590602001918460208302840111640100000000831117156106a857600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611b92565b3480156106db57600080fd5b5061021060048036036101408110156106f357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611eea565b6102d96004803603608081101561076557600080fd5b8135919081019060408101602082013564010000000081111561078757600080fd5b82018360208201111561079957600080fd5b803590602001918460208302840111640100000000831117156107bb57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561203c565b3480156107ee57600080fd5b506102106004803603606081101561080557600080fd5b5080359060208101359060400135612495565b34801561082457600080fd5b506102d9600480360360a081101561083b57600080fd5b81359160208101359181019060608101604082013564010000000081111561086257600080fd5b82018360208201111561087457600080fd5b8035906020019184602083028401116401000000008311171561089657600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356124a2565b3480156108c957600080fd5b506108d26125e1565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102d96004803603608081101561091157600080fd5b8135919081019060408101602082013564010000000081111561093357600080fd5b82018360208201111561094557600080fd5b8035906020019184602083028401116401000000008311171561096757600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612605565b34801561099a57600080fd5b50610210600480360360608110156109b157600080fd5b5080359060208101359060400135612a1b565b3480156109d057600080fd5b50610210600480360360c08110156109e757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135612a28565b348015610a3057600080fd5b506103b4600480360360e0811015610a4757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612c08565b348015610a9a57600080fd5b506108d2612f12565b348015610aaf57600080fd5b506102d960048036036040811015610ac657600080fd5b81359190810190604081016020820135640100000000811115610ae857600080fd5b820183602082011115610afa57600080fd5b80359060200191846020830284011164010000000083111715610b1c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612f36945050505050565b348015610b6657600080fd5b506101d3600480360360a0811015610b7d57600080fd5b813591602081013591810190606081016040820135640100000000811115610ba457600080fd5b820183602082011115610bb657600080fd5b80359060200191846020830284011164010000000083111715610bd857600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612f63565b348015610c0b57600080fd5b506102d9600480360360a0811015610c2257600080fd5b813591602081013591810190606081016040820135640100000000811115610c4957600080fd5b820183602082011115610c5b57600080fd5b80359060200191846020830284011164010000000083111715610c7d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356132d1565b348015610cb057600080fd5b506103b4600480360360c0811015610cc757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135613514565b348015610d1057600080fd5b50610d736004803603610100811015610d2857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613667565b60408051938452602084019290925282820152519081900360600190f35b610d73600480360360c0811015610da757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356137f6565b6000610df1848484613b22565b949350505050565b6060610e267f00000000000000000000000000000000000000000000000000000000000000008484613c46565b90505b92915050565b6000806000610e5f7f00000000000000000000000000000000000000000000000000000000000000008f8f613de9565b9050600087610e6e578c610e90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b158015610f2c57600080fd5b505af1158015610f40573d6000803e3d6000fd5b50505050610f538f8f8f8f8f8f8f612c08565b809450819550505050509b509b9950505050505050505050565b6000806000610fbd7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613de9565b9050600087610fcc578c610fee565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561108a57600080fd5b505af115801561109e573d6000803e3d6000fd5b505050506110b08e8e8e8e8e8e613514565b909f909e509c50505050505050505050505050565b6060814281101561113757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b6111957f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613ed492505050565b915086826001845103815181106111a857fe5b60200260200101511015611207576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061544f602c913960400191505060405180910390fd5b6112cc8686600081811061121757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16336112b27f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061126657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061129057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16613de9565b856000815181106112bf57fe5b6020026020010151614025565b61130b828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506141f5915050565b509695505050505050565b804281101561138657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16858560008181106113ca57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f42616b65727953776170526f757465723a20494e56414c49445f504154480000604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156114d657600080fd5b505af11580156114ea573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6115867f00000000000000000000000000000000000000000000000000000000000000008989600081811061155c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061129057fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156115f057600080fd5b505af1158015611604573d6000803e3d6000fd5b505050506040513d602081101561161a57600080fd5b505161162257fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061165257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156116eb57600080fd5b505afa1580156116ff573d6000803e3d6000fd5b505050506040513d602081101561171557600080fd5b505160408051602089810282810182019093528982529293506117579290918a918a9182918501908490808284376000920191909152508992506143e6915050565b8761185b8289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061178a57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561182357600080fd5b505afa158015611837573d6000803e3d6000fd5b505050506040513d602081101561184d57600080fd5b50519063ffffffff61471016565b10156118b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061544f602c913960400191505060405180910390fd5b5050505050505050565b804281101561192c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b6119918585600081811061193c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361198b7f00000000000000000000000000000000000000000000000000000000000000008989600081811061155c57fe5b8a614025565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106119c157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a5a57600080fd5b505afa158015611a6e573d6000803e3d6000fd5b505050506040513d6020811015611a8457600080fd5b50516040805160208881028281018201909352888252929350611ac69290918991899182918501908490808284376000920191909152508892506143e6915050565b8661185b8288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611af957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561182357600080fd5b60608142811015611c0457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d0857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f42616b65727953776170526f757465723a20494e56414c49445f504154480000604482015290519081900360640190fd5b611d667f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613ed492505050565b91508682600184510381518110611d7957fe5b60200260200101511015611dd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061544f602c913960400191505060405180910390fd5b611de88686600081811061121757fe5b611e27828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506141f5915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d83600185510381518110611e7357fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611eb157600080fd5b505af1158015611ec5573d6000803e3d6000fd5b5050505061130b8483600185510381518110611edd57fe5b6020026020010151614752565b600080611f387f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613de9565b9050600086611f47578b611f69565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561200557600080fd5b505af1158015612019573d6000803e3d6000fd5b5050505061202b8d8d8d8d8d8d612a28565b9d9c50505050505050505050505050565b606081428110156120ae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106120f257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461219157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f42616b65727953776170526f757465723a20494e56414c49445f504154480000604482015290519081900360640190fd5b6121ef7f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c4692505050565b915034826000815181106121ff57fe5b6020026020010151111561225e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806153406028913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836000815181106122a757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156122da57600080fd5b505af11580156122ee573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6123607f00000000000000000000000000000000000000000000000000000000000000008989600081811061155c57fe5b8460008151811061236d57fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156123de57600080fd5b505af11580156123f2573d6000803e3d6000fd5b505050506040513d602081101561240857600080fd5b505161241057fe5b61244f828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506141f5915050565b8160008151811061245c57fe5b602002602001015134111561248b5761248b338360008151811061247c57fe5b60200260200101513403614752565b5095945050505050565b6000610df184848461488a565b6060814281101561251457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b6125727f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c4692505050565b9150868260008151811061258257fe5b60200260200101511115611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806153406028913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6060814281101561267757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106126bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461275a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f42616b65727953776170526f757465723a20494e56414c49445f504154480000604482015290519081900360640190fd5b6127b87f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613ed492505050565b915086826001845103815181106127cb57fe5b6020026020010151101561282a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061544f602c913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061287357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156128a657600080fd5b505af11580156128ba573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61292c7f00000000000000000000000000000000000000000000000000000000000000008989600081811061155c57fe5b8460008151811061293957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129aa57600080fd5b505af11580156129be573d6000803e3d6000fd5b505050506040513d60208110156129d457600080fd5b50516129dc57fe5b61248b828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506141f5915050565b6000610df18484846149ae565b60008142811015612a9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b612ac9887f00000000000000000000000000000000000000000000000000000000000000008989893089612c08565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051919450612b7392508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b158015612b4257600080fd5b505afa158015612b56573d6000803e3d6000fd5b505050506040513d6020811015612b6c57600080fd5b5051614a8e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612be657600080fd5b505af1158015612bfa573d6000803e3d6000fd5b5050505061130b8483614752565b6000808242811015612c7b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b6000612ca87f00000000000000000000000000000000000000000000000000000000000000008c8c613de9565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612d2957600080fd5b505af1158015612d3d573d6000803e3d6000fd5b505050506040513d6020811015612d5357600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612dc657600080fd5b505af1158015612dda573d6000803e3d6000fd5b505050506040513d6040811015612df057600080fd5b50805160209091015190925090506000612e0a8e8e614c6b565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612e47578183612e4a565b82825b90975095508a871015612ea8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154286027913960400191505060405180910390fd5b89861015612f01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154016027913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060610e267f00000000000000000000000000000000000000000000000000000000000000008484613ed4565b8042811015612fd357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061303857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146130d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f42616b65727953776170526f757465723a20494e56414c49445f504154480000604482015290519081900360640190fd5b6130e78585600081811061193c57fe5b6131258585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506143e6915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b1580156131b557600080fd5b505afa1580156131c9573d6000803e3d6000fd5b505050506040513d60208110156131df57600080fd5b505190508681101561323c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061544f602c913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156132af57600080fd5b505af11580156132c3573d6000803e3d6000fd5b505050506118b28482614752565b6060814281101561334357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106133a857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461344757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f42616b65727953776170526f757465723a20494e56414c49445f504154480000604482015290519081900360640190fd5b6134a57f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c4692505050565b915086826000815181106134b557fe5b60200260200101511115611dd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806153406028913960400191505060405180910390fd5b600080824281101561358757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b6135b6897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612c08565b90935091506135c6898685614a8e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561363957600080fd5b505af115801561364d573d6000803e3d6000fd5b5050505061365b8583614752565b50965096945050505050565b600080600083428110156136dc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b6136ea8c8c8c8c8c8c614dbe565b9094509250600061371c7f00000000000000000000000000000000000000000000000000000000000000008e8e613de9565b905061372a8d338388614025565b6137368c338387614025565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156137b557600080fd5b505af11580156137c9573d6000803e3d6000fd5b505050506040513d60208110156137df57600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561386b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b6138998a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614dbe565b909450925060006138eb7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613de9565b90506138f98b338388614025565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561396157600080fd5b505af1158015613975573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a2157600080fd5b505af1158015613a35573d6000803e3d6000fd5b505050506040513d6020811015613a4b57600080fd5b5051613a5357fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015613ad257600080fd5b505af1158015613ae6573d6000803e3d6000fd5b505050506040513d6020811015613afc57600080fd5b5051925034841015613b1457613b1433853403614752565b505096509650969350505050565b6000808411613b7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061538e602c913960400191505060405180910390fd5b600083118015613b8c5750600082115b613be1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154ef6029913960400191505060405180910390fd5b6000613bf5856103e563ffffffff6150bf16565b90506000613c09828563ffffffff6150bf16565b90506000613c2f83613c23886103e863ffffffff6150bf16565b9063ffffffff61513216565b9050808281613c3a57fe5b04979650505050505050565b6060600282511015613cb957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f42616b657279537761704c6962726172793a20494e56414c49445f5041544800604482015290519081900360640190fd5b815167ffffffffffffffff81118015613cd157600080fd5b50604051908082528060200260200182016040528015613cfb578160200160208202803683370190505b5090508281600183510381518110613d0f57fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015613de157600080613d7c87866001860381518110613d5b57fe5b6020026020010151878681518110613d6f57fe5b60200260200101516151a6565b91509150613d9e848481518110613d8f57fe5b6020026020010151838361488a565b846001850381518110613dad57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613d3f565b509392505050565b6000806000613df88585614c6b565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527fe2e87433120e32c4738a7d8f3271f3d872cbe16241d67537139158d90bac61d3609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6060600282511015613f4757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f42616b657279537761704c6962726172793a20494e56414c49445f5041544800604482015290519081900360640190fd5b815167ffffffffffffffff81118015613f5f57600080fd5b50604051908082528060200260200182016040528015613f89578160200160208202803683370190505b5090508281600081518110613f9a57fe5b60200260200101818152505060005b6001835103811015613de157600080613fdf87868581518110613fc857fe5b6020026020010151878660010181518110613d6f57fe5b91509150614001848481518110613ff257fe5b60200260200101518383613b22565b84846001018151811061401057fe5b60209081029190910101525050600101613fa9565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061410357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016140c6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614165576040519150601f19603f3d011682016040523d82523d6000602084013e61416a565b606091505b5091509150818015614198575080511580614198575080806020019051602081101561419557600080fd5b50515b6141ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154cb6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156143e05760008084838151811061421357fe5b602002602001015185846001018151811061422a57fe5b60200260200101519150915060006142428383614c6b565b509050600087856001018151811061425657fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461429e578260006142a2565b6000835b91509150600060028a510388106142b957886142fa565b6142fa7f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106142ed57fe5b6020026020010151613de9565b90506143277f00000000000000000000000000000000000000000000000000000000000000008888613de9565b73ffffffffffffffffffffffffffffffffffffffff16636d9a640a8484846040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156143b557600080fd5b505af11580156143c9573d6000803e3d6000fd5b5050600190990198506141f8975050505050505050565b50505050565b60005b600183510381101561470b5760008084838151811061440457fe5b602002602001015185846001018151811061441b57fe5b60200260200101519150915060006144338383614c6b565b50905060006144637f00000000000000000000000000000000000000000000000000000000000000008585613de9565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156144b157600080fd5b505afa1580156144c5573d6000803e3d6000fd5b505050506040513d60608110156144db57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a811690891614614525578284614528565b83835b915091506145ad828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561182357600080fd5b95506145ba868383613b22565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146145fe57826000614602565b6000835b91509150600060028c51038a10614619578a61464d565b61464d7f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106142ed57fe5b90508573ffffffffffffffffffffffffffffffffffffffff16636d9a640a8484846040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156146de57600080fd5b505af11580156146f2573d6000803e3d6000fd5b50506001909b019a506143e99950505050505050505050565b505050565b6000610e2683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061528e565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b602083106147c957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161478c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461482b576040519150601f19603f3d011682016040523d82523d6000602084013e614830565b606091505b505090508061470b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061547b6023913960400191505060405180910390fd5b60008084116148e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d81526020018061549e602d913960400191505060405180910390fd5b6000831180156148f45750600082115b614949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154ef6029913960400191505060405180910390fd5b600061496d6103e8614961868863ffffffff6150bf16565b9063ffffffff6150bf16565b905060006149876103e5614961868963ffffffff61471016565b90506149a4600182848161499757fe5b049063ffffffff61513216565b9695505050505050565b6000808411614a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806153ba6026913960400191505060405180910390fd5b600083118015614a185750600082115b614a6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154ef6029913960400191505060405180910390fd5b82614a7e858463ffffffff6150bf16565b81614a8557fe5b04949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310614b6457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614b27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614bc6576040519150601f19603f3d011682016040523d82523d6000602084013e614bcb565b606091505b5091509150818015614bf9575080511580614bf95750808060200190516020811015614bf657600080fd5b50515b614c6457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614cf3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806153686026913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614d2d578284614d30565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614db757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f42616b657279537761704c6962726172793a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614e5e57600080fd5b505afa158015614e72573d6000803e3d6000fd5b505050506040513d6020811015614e8857600080fd5b505173ffffffffffffffffffffffffffffffffffffffff161415614f6e57604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b158015614f4157600080fd5b505af1158015614f55573d6000803e3d6000fd5b505050506040513d6020811015614f6b57600080fd5b50505b600080614f9c7f00000000000000000000000000000000000000000000000000000000000000008b8b6151a6565b91509150816000148015614fae575080155b15614fbe578793508692506150b2565b6000614fcb8984846149ae565b9050878111615038578581101561502d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154016027913960400191505060405180910390fd5b8894509250826150b0565b60006150458984866149ae565b90508981111561505157fe5b878110156150aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154286027913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000826150ce57506000610e29565b828202828482816150db57fe5b0414610e26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806153e06021913960400191505060405180910390fd5b600082820183811015610e2657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060006151b58585614c6b565b5090506000806151c6888888613de9565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561520b57600080fd5b505afa15801561521f573d6000803e3d6000fd5b505050506040513d606081101561523557600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff8781169084161461527c57808261527f565b81815b90999098509650505050505050565b60008184841115615337576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156152fc5781810151838201526020016152e4565b50505050905090810190601f1680156153295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe42616b65727953776170526f757465723a204558434553534956455f494e5055545f414d4f554e5442616b657279537761704c6962726172793a204944454e544943414c5f41444452455353455342616b657279537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5442616b657279537761704c6962726172793a20494e53554646494349454e545f414d4f554e54536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7742616b65727953776170526f757465723a20494e53554646494349454e545f425f414d4f554e5442616b65727953776170526f757465723a20494e53554646494349454e545f415f414d4f554e5442616b65727953776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a20424e425f5452414e534645525f4641494c454442616b657279537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454442616b657279537761704c6962726172793a20494e53554646494349454e545f4c4951554944495459a2646970667358221220299e6ec863a05b34facb61387047c1629d5fac978f54568d39a4d31919f46fcb64736f6c6343000606003300000000000000000000000001bf7c66c6bd861915cdaae475042d3c4bae16a7000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

00000000000000000000000001bf7c66c6bd861915cdaae475042d3c4bae16a7000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Decoded View---------------
Arg [0] : _factory (address): 0x01bf7c66c6bd861915cdaae475042d3c4bae16a7
Arg [1] : _WBNB (address): 0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000001bf7c66c6bd861915cdaae475042d3c4bae16a7
Arg [1] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c


Deployed ByteCode Sourcemap

24821:19546:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25306:10;:18;25320:4;25306:18;;25299:26;;;;24821:19546;;12:1:-1;9;2:12;43303:259:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43303:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;43303:259:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;44104:260;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44104:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;44104:260:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;44104:260:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;44104:260:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;44104:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;44104:260:0;;-1:-1:-1;44104:260:0;;-1:-1:-1;;;;;44104:260:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;44104:260:0;;;;;;;;;;;;;;;;;30487:730;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30487:730:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;30487:730:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31225:722;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31225:722:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;31225:722:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34382:682::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34382:682:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34382:682:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34382:682:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34382:682:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34382:682:0;;-1:-1:-1;34382:682:0;-1:-1:-1;34382:682:0;;;;;;;;;:::i;41337:815::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;41337:815:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;41337:815:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;41337:815:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;41337:815:0;;-1:-1:-1;41337:815:0;-1:-1:-1;41337:815:0;;;;;;;;;:::i;40562:767::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40562:767:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;40562:767:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;40562:767:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;40562:767:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;40562:767:0;;-1:-1:-1;40562:767:0;-1:-1:-1;40562:767:0;;;;;;;;;:::i;37335:907::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37335:907:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;37335:907:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;37335:907:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;37335:907:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37335:907:0;;-1:-1:-1;37335:907:0;-1:-1:-1;37335:907:0;;;;;;;;;:::i;32647:833::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32647:833:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;32647:833:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;38250:807::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;38250:807:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;38250:807:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;38250:807:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;38250:807:0;;-1:-1:-1;38250:807:0;-1:-1:-1;38250:807:0;;;;;;;;;:::i;43570:258::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43570:258:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;43570:258:0;;;;;;;;;;;;:::i;35072:660::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35072:660:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;35072:660:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35072:660:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35072:660:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35072:660:0;;-1:-1:-1;35072:660:0;-1:-1:-1;35072:660:0;;;;;;;;;:::i;24956:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24956:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35740:694;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;35740:694:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35740:694:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35740:694:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35740:694:0;;-1:-1:-1;35740:694:0;-1:-1:-1;35740:694:0;;;;;;;;;:::i;43060:235::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43060:235:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;43060:235:0;;;;;;;;;;;;:::i;32026:613::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32026:613:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;32026:613:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28884:896::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28884:896:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;28884:896:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24908:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24908:41:0;;;:::i;43836:260::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43836:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;43836:260:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;43836:260:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;43836:260:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;43836:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;43836:260:0;;-1:-1:-1;43836:260:0;;-1:-1:-1;;;;;43836:260:0:i;42160:856::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42160:856:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;42160:856:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;42160:856:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;42160:856:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;42160:856:0;;-1:-1:-1;42160:856:0;-1:-1:-1;42160:856:0;;;;;;;;;:::i;36442:885::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36442:885:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;36442:885:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;36442:885:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36442:885:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36442:885:0;;-1:-1:-1;36442:885:0;-1:-1:-1;36442:885:0;;;;;;;;;:::i;29788:691::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29788:691:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;29788:691:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26863:864::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26863:864:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;26863:864:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;27735:1106;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;27735:1106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;43303:259::-;43454:17;43491:63;43522:8;43532:9;43543:10;43491:30;:63::i;:::-;43484:70;43303:259;-1:-1:-1;;;;43303:259:0:o;44104:260::-;44251:24;44300:56;44331:7;44340:9;44351:4;44300:30;:56::i;:::-;44293:63;;44104:260;;;;;:::o;30487:730::-;30832:15;30849;30877:12;30892:50;30918:7;30927:6;30935;30892:25;:50::i;:::-;30877:65;;30953:13;30969:10;:36;;30996:9;30969:36;;;30990:2;30969:36;31016:81;;;;;;31045:10;31016:81;;;;31065:4;31016:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30953:52;;-1:-1:-1;31016:28:0;;;;;;:81;;;;;-1:-1:-1;;31016:81:0;;;;;;;;-1:-1:-1;31016:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;31016:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31016:81:0;;;;31129:80;31145:6;31153;31161:9;31172:10;31184;31196:2;31200:8;31129:15;:80::i;:::-;31108:101;;;;;;;;30487:730;;;;;;;;;;;;;;;;:::o;31225:722::-;31553:19;31574:17;31604:12;31619:47;31645:7;31654:5;31661:4;31619:25;:47::i;:::-;31604:62;;31677:13;31693:10;:36;;31720:9;31693:36;;;31714:2;31693:36;31740:81;;;;;;31769:10;31740:81;;;;31789:4;31740:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31677:52;;-1:-1:-1;31740:28:0;;;;;;:81;;;;;-1:-1:-1;;31740:81:0;;;;;;;;-1:-1:-1;31740:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;31740:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31740:81:0;;;;31859:80;31878:5;31885:9;31896:14;31912:12;31926:2;31930:8;31859:18;:80::i;:::-;31832:107;;;;-1:-1:-1;31225:722:0;-1:-1:-1;;;;;;;;;;;;;31225:722:0:o;34382:682::-;34615:24;34596:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34662:56:::1;34694:7;34703:8;34713:4;;34662:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34662:31:0::1;::::0;-1:-1:-1;;;34662:56:0:i:1;:::-;34652:66;;34768:12;34737:7;34762:1;34745:7;:14;:18;34737:27;;;;;;;;;;;;;;:43;;34729:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34840:181;34886:4;;34891:1;34886:7;;;;;;;;;;;;;;;34908:10;34933:52;34959:7;34968:4;;34973:1;34968:7;;;;;;;;;;;;;;;34977:4;;34982:1;34977:7;;;;;;;;;;;;;;;34933:25;:52::i;:::-;35000:7;35008:1;35000:10;;;;;;;;;;;;;;34840:31;:181::i;:::-;35032:24;35038:7;35047:4;;35032:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35053:2:0;;-1:-1:-1;35032:5:0::1;::::0;-1:-1:-1;;35032:24:0:i:1;:::-;34382:682:::0;;;;;;;;;:::o;41337:815::-;41558:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41598:4:::1;41587:15;;:4;;41592:1;41587:7;;;;;;;;;;;;;;;:15;;;41579:58;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;41648:16;41667:9;41648:28;;41693:4;41687:19;;;41714:8;41687:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;41687:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41687:38:0;;;;;41749:4;41743:20;;;41764:52;41790:7;41799:4;;41804:1;41799:7;;;;;;;;;;;;;;;41808:4;;41813:1;41808:7;;;;;;41764:52;41818:8;41743:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;41743:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41743:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;41743:84:0;41736:92:::1;;;;41839:21;41870:4:::0;;41875:15;;;41870:21;;::::1;;;;;;;;;;;;;41863:39;;;41903:2;41863:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;41863:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41863:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;41863:43:0;41917:44:::1;::::0;;41863:43:::1;41917:44:::0;;::::1;::::0;;;;;;;;;;;41863:43;;-1:-1:-1;41917:44:0::1;::::0;;;41952:4;;;;;;41917:44;::::1;::::0;41952:4;;41917:44;41952:4;41917:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;41958:2:0;;-1:-1:-1;41917:34:0::1;::::0;-1:-1:-1;;41917:44:0:i:1;:::-;42060:12:::0;41994:62:::1;42042:13:::0;42001:4;;42006:15;;;42001:21;;::::1;;;;;;;;;;;;;41994:39;;;42034:2;41994:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;41994:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41994:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;41994:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;41972:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25124:1;;41337:815:::0;;;;;;:::o;40562:767::-;40805:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40826:179:::1;40872:4;;40877:1;40872:7;;;;;;;;;;;;;;;40894:10;40919:52;40945:7;40954:4;;40959:1;40954:7;;;;;;40919:52;40986:8;40826:31;:179::i;:::-;41016:21;41047:4:::0;;41052:15;;;41047:21;;::::1;;;;;;;;;;;;;41040:39;;;41080:2;41040:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;41040:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41040:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;41040:43:0;41094:44:::1;::::0;;41040:43:::1;41094:44:::0;;::::1;::::0;;;;;;;;;;;41040:43;;-1:-1:-1;41094:44:0::1;::::0;;;41129:4;;;;;;41094:44;::::1;::::0;41129:4;;41094:44;41129:4;41094:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;41135:2:0;;-1:-1:-1;41094:34:0::1;::::0;-1:-1:-1;;41094:44:0:i:1;:::-;41237:12:::0;41171:62:::1;41219:13:::0;41178:4;;41183:15;;;41178:21;;::::1;;;;;;;;;;;;;41171:39;;;41211:2;41171:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;37335:907:0::0;37565:24;37546:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37610:29:::1;37635:4;37610:29;:4:::0;;37615:15;;;37610:21;;::::1;;;;;;;;;;;;;:29;;;37602:72;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;37695:56;37727:7;37736:8;37746:4;;37695:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;37695:31:0::1;::::0;-1:-1:-1;;;37695:56:0:i:1;:::-;37685:66;;37801:12;37770:7;37795:1;37778:7;:14;:18;37770:27;;;;;;;;;;;;;;:43;;37762:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37873:181;37919:4;;37924:1;37919:7;;;;;;37873:181;38065:35;38071:7;38080:4;;38065:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;38094:4:0::1;::::0;-1:-1:-1;38065:5:0::1;::::0;-1:-1:-1;;38065:35:0:i:1;:::-;38117:4;38111:20;;;38132:7;38157:1;38140:7;:14;:18;38132:27;;;;;;;;;;;;;;38111:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38111:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38111:49:0;;;;38171:63;38202:2;38206:7;38231:1;38214:7;:14;:18;38206:27;;;;;;;;;;;;;;38171:30;:63::i;32647:833::-:0;33004:17;33034:12;33049:47;33075:7;33084:5;33091:4;33049:25;:47::i;:::-;33034:62;;33107:13;33123:10;:36;;33150:9;33123:36;;;33144:2;33123:36;33170:81;;;;;;33199:10;33170:81;;;;33219:4;33170:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33107:52;;-1:-1:-1;33170:28:0;;;;;;:81;;;;;-1:-1:-1;;33170:81:0;;;;;;;;-1:-1:-1;33170:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;33170:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33170:81:0;;;;33274:198;33336:5;33356:9;33380:14;33409:12;33436:2;33453:8;33274:47;:198::i;:::-;33262:210;32647:833;-1:-1:-1;;;;;;;;;;;;;32647:833:0:o;38250:807::-;38458:24;38439:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38514:4:::1;38503:15;;:4;;38508:1;38503:7;;;;;;;;;;;;;;;:15;;;38495:58;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;38574:56;38605:7;38614:9;38625:4;;38574:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;38574:30:0::1;::::0;-1:-1:-1;;;38574:56:0:i:1;:::-;38564:66;;38663:9;38649:7;38657:1;38649:10;;;;;;;;;;;;;;:23;;38641:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38734:4;38728:19;;;38755:7;38763:1;38755:10;;;;;;;;;;;;;;38728:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38728:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38728:40:0;;;;;38792:4;38786:20;;;38807:52;38833:7;38842:4;;38847:1;38842:7;;;;;;38807:52;38861:7;38869:1;38861:10;;;;;;;;;;;;;;38786:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38786:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38786:86:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;38786:86:0;38779:94:::1;;;;38884:24;38890:7;38899:4;;38884:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;38905:2:0;;-1:-1:-1;38884:5:0::1;::::0;-1:-1:-1;;38884:24:0:i:1;:::-;38971:7;38979:1;38971:10;;;;;;;;;;;;;;38959:9;:22;38955:94;;;38983:66;39014:10;39038:7;39046:1;39038:10;;;;;;;;;;;;;;39026:9;:22;38983:30;:66::i;:::-;38250:807:::0;;;;;;;;:::o;43570:258::-;43721:16;43757:63;43787:9;43798;43809:10;43757:29;:63::i;35072:660::-;35305:24;35286:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35352:56:::1;35383:7;35392:9;35403:4;;35352:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35352:30:0::1;::::0;-1:-1:-1;;;35352:56:0:i:1;:::-;35342:66;;35441:11;35427:7;35435:1;35427:10;;;;;;;;;;;;;;:25;;35419:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24956:38:::0;;;:::o;35740:694::-;35951:24;35932:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36007:4:::1;35996:15;;:4;;36001:1;35996:7;;;;;;;;;;;;;;;:15;;;35988:58;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;36067:57;36099:7;36108:9;36119:4;;36067:57;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36067:31:0::1;::::0;-1:-1:-1;;;36067:57:0:i:1;:::-;36057:67;;36174:12;36143:7;36168:1;36151:7;:14;:18;36143:27;;;;;;;;;;;;;;:43;;36135:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36252:4;36246:19;;;36273:7;36281:1;36273:10;;;;;;;;;;;;;;36246:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36246:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36246:40:0;;;;;36310:4;36304:20;;;36325:52;36351:7;36360:4;;36365:1;36360:7;;;;;;36325:52;36379:7;36387:1;36379:10;;;;;;;;;;;;;;36304:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36304:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36304:86:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36304:86:0;36297:94:::1;;;;36402:24;36408:7;36417:4;;36402:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36423:2:0;;-1:-1:-1;36402:5:0::1;::::0;-1:-1:-1;;36402:24:0:i:1;43060:235::-:0;43200:15;43235:52;43259:7;43268:8;43278;43235:23;:52::i;32026:613::-;32304:17;32285:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32350:94:::1;32366:5;32373:4;32379:9;32390:14;32406:12;32428:4;32435:8;32350:15;:94::i;:::-;32494:38;::::0;;;;;32526:4:::1;32494:38;::::0;::::1;::::0;;;32334:110;;-1:-1:-1;32455:78:0::1;::::0;-1:-1:-1;32483:5:0;;32490:2;;32494:23:::1;::::0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32494:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32494:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32494:38:0;32455:27:::1;:78::i;:::-;32550:4;32544:20;;;32565:9;32544:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32544:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32544:31:0;;;;32586:45;32617:2;32621:9;32586:30;:45::i;28884:896::-:0;29150:15;29167;29131:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29195:12:::1;29210:50;29236:7;29245:6;29253;29210:25;:50::i;:::-;29271:63;::::0;;;;;29306:10:::1;29271:63;::::0;::::1;::::0;:34:::1;::::0;::::1;:63:::0;;;;;;;;;;;;;;29195:65;;-1:-1:-1;29271:34:0;;::::1;::::0;:63;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;29271:34:0;:63;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;29271:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29271:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;29408:30:0::1;::::0;;;;;:26:::1;:30:::0;;::::1;;::::0;::::1;::::0;;;29372:15:::1;::::0;;;29408:26;;::::1;::::0;::::1;::::0;:30;;;;;;;;;;;29372:15;29408:26;:30;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;29408:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29408:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29408:30:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;29408:30:0;-1:-1:-1;29450:14:0::1;29470:44;29499:6:::0;29507;29470:28:::1;:44::i;:::-;29449:65;;;29556:6;29546:16;;:6;:16;;;:58;;29587:7;29596;29546:58;;;29566:7;29575;29546:58;29525:79:::0;;-1:-1:-1;29525:79:0;-1:-1:-1;29623:21:0;;::::1;;29615:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29718:10;29707:7;:21;;29699:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25124:1;;;;28884:896:::0;;;;;;;;;;;:::o;24908:41::-;;;:::o;43836:260::-;43983:24;44032:56;44064:7;44073:8;44083:4;44032:31;:56::i;42160:856::-;42400:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42429:29:::1;42454:4;42429:29;:4:::0;;42434:15;;;42429:21;;::::1;;;;;;;;;;;;;:29;;;42421:72;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;42504:179;42550:4;;42555:1;42550:7;;;;;;42504:179;42694:55;42729:4;;42694:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;42743:4:0::1;::::0;-1:-1:-1;42694:34:0::1;::::0;-1:-1:-1;;42694:55:0:i:1;:::-;42780:37;::::0;;;;;42811:4:::1;42780:37;::::0;::::1;::::0;;;42760:17:::1;::::0;42780:22:::1;42787:4;42780:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;42780:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;42780:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;42780:37:0;;-1:-1:-1;42836:25:0;;::::1;;42828:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42927:4;42921:20;;;42942:9;42921:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;42921:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;42921:31:0;;;;42963:45;42994:2;42998:9;42963:30;:45::i;36442:885::-:0;36672:24;36653:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36717:29:::1;36742:4;36717:29;:4:::0;;36722:15;;;36717:21;;::::1;;;;;;;;;;;;;:29;;;36709:72;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;36802:56;36833:7;36842:9;36853:4;;36802:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36802:30:0::1;::::0;-1:-1:-1;;;36802:56:0:i:1;:::-;36792:66;;36891:11;36877:7;36885:1;36877:10;;;;;;;;;;;;;;:25;;36869:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29788:691:::0;30037:19;30058:17;30018:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30115:196:::1;30145:5;30165:4;30184:9;30208:14;30237:12;30272:4;30292:8;30115:15;:196::i;:::-;30088:223:::0;;-1:-1:-1;30088:223:0;-1:-1:-1;30322:51:0::1;30350:5:::0;30357:2;30088:223;30322:27:::1;:51::i;:::-;30390:4;30384:20;;;30405:9;30384:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30384:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30384:31:0;;;;30426:45;30457:2;30461:9;30426:30;:45::i;:::-;29788:691:::0;;;;;;;;;;:::o;26863:864::-;27225:15;27255;27285:17;27183:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27351:85:::1;27365:6;27373;27381:14;27397;27413:10;27425;27351:13;:85::i;:::-;27330:106:::0;;-1:-1:-1;27330:106:0;-1:-1:-1;27447:12:0::1;27462:50;27488:7;27497:6:::0;27505;27462:25:::1;:50::i;:::-;27447:65;;27523:66;27555:6;27563:10;27575:4;27581:7;27523:31;:66::i;:::-;27600;27632:6;27640:10;27652:4;27658:7;27600:31;:66::i;:::-;27705:4;27689:26;;;27716:2;27689:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27689:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27689:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27689:30:0;26863:864;;;;-1:-1:-1;27689:30:0;;-1:-1:-1;26863:864:0;;-1:-1:-1;;;;;;;;;26863:864:0:o;27735:1106::-;28068:19;28102:17;28134;28026:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28206:176:::1;28234:5;28254:4;28273:18;28306:9;28330:14;28359:12;28206:13;:176::i;:::-;28179:203:::0;;-1:-1:-1;28179:203:0;-1:-1:-1;28393:12:0::1;28408:47;28434:7;28443:5:::0;28450:4:::1;28408:25;:47::i;:::-;28393:62;;28466:69;28498:5;28505:10;28517:4;28523:11;28466:31;:69::i;:::-;28552:4;28546:19;;;28573:9;28546:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28546:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28546:39:0;;;;;28609:4;28603:20;;;28624:4;28630:9;28603:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28603:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28603:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28603:37:0;28596:45:::1;;;;28680:4;28664:26;;;28691:2;28664:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28664:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28664:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28664:30:0;;-1:-1:-1;28745:9:0::1;:21:::0;-1:-1:-1;28741:92:0::1;;;28768:65;28799:10;28823:9;28811;:21;28768:30;:65::i;:::-;25124:1;27735:1106:::0;;;;;;;;;;;:::o;10231:574::-;10367:17;10416:1;10405:8;:12;10397:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10497:1;10485:9;:13;:31;;;;;10515:1;10502:10;:14;10485:31;10477:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10573:23;10599:17;:8;10612:3;10599:17;:12;:17;:::i;:::-;10573:43;-1:-1:-1;10627:17:0;10647:31;10573:43;10667:10;10647:31;:19;:31;:::i;:::-;10627:51;-1:-1:-1;10689:19:0;10711:40;10735:15;10711:19;:9;10725:4;10711:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;10689:62;;10786:11;10774:9;:23;;;;;;;10231:574;-1:-1:-1;;;;;;;10231:574:0:o;12179:585::-;12317:24;12377:1;12362:4;:11;:16;;12354:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12449:4;:11;12435:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12435:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;12435:26:0;;12425:36;;12502:9;12472:7;12497:1;12480:7;:14;:18;12472:27;;;;;;;;;;;;;;;;;:39;12539:11;;:15;;12522:235;12556:5;;12522:235;;12584:17;12603:18;12625:42;12637:7;12646:4;12655:1;12651;:5;12646:11;;;;;;;;;;;;;;12659:4;12664:1;12659:7;;;;;;;;;;;;;;12625:11;:42::i;:::-;12583:84;;;;12699:46;12711:7;12719:1;12711:10;;;;;;;;;;;;;;12723:9;12734:10;12699:11;:46::i;:::-;12682:7;12694:1;12690;:5;12682:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;12563:3:0;;12522:235;;;;12179:585;;;;;:::o;8478:651::-;8601:12;8627:14;8643;8661:26;8672:6;8680;8661:10;:26::i;:::-;8906:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;8906:32:0;;;;;8896:43;;;;;;8785:291;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8785:291:0;;;;;;;8753:342;;;;;;;;;8478:651;-1:-1:-1;;;;;8478:651:0:o;11534:564::-;11672:24;11732:1;11717:4;:11;:16;;11709:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11804:4;:11;11790:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11790:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;11790:26:0;;11780:36;;11840:8;11827:7;11835:1;11827:10;;;;;;;;;;;;;:21;;;;;11864:9;11859:232;11893:1;11879:4;:11;:15;11875:1;:19;11859:232;;;11917:17;11936:18;11958:42;11970:7;11979:4;11984:1;11979:7;;;;;;;;;;;;;;11988:4;11993:1;11997;11993:5;11988:11;;;;;;;11958:42;11916:84;;;;12032:47;12045:7;12053:1;12045:10;;;;;;;;;;;;;;12057:9;12068:10;12032:12;:47::i;:::-;12015:7;12023:1;12027;12023:5;12015:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;11896:3:0;;11859:232;;1649:448;1920:51;;;1909:10;1920:51;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1920:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1920:51:0;179:29:-1;160:49;;1909:63:0;;;;1874:12;;1888:17;;1909:10;;;;1920:51;1909:63;;;25:18:-1;1909:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1909:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1873:99:0;;;;1991:7;:57;;;;-1:-1:-1;2003:11:0;;:16;;:44;;;2034:4;2023:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2023:24:0;2003:44;1983:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1649:448;;;;;;:::o;33591:783::-;33735:9;33730:637;33764:1;33750:4;:11;:15;33746:1;:19;33730:637;;;33788:13;33803:14;33822:4;33827:1;33822:7;;;;;;;;;;;;;;33831:4;33836:1;33840;33836:5;33831:11;;;;;;;;;;;;;;33787:56;;;;33859:14;33879:43;33908:5;33915:6;33879:28;:43::i;:::-;33858:64;;;33937:17;33957:7;33965:1;33969;33965:5;33957:14;;;;;;;;;;;;;;33937:34;;33987:18;34007;34038:6;34029:15;;:5;:15;;;:101;;34108:9;34127:1;34029:101;;;34073:1;34077:9;34029:101;33986:144;;;;34145:10;34176:1;34162:4;:11;:15;34158:1;:19;:83;;34238:3;34158:83;;;34180:55;34206:7;34215:6;34223:4;34228:1;34232;34228:5;34223:11;;;;;;;;;;;;;;34180:25;:55::i;:::-;34145:96;;34272:49;34298:7;34307:5;34314:6;34272:25;:49::i;:::-;34256:71;;;34328:10;34340;34352:2;34256:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34256:99:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;33767:3:0;;;;;-1:-1:-1;33730:637:0;;-1:-1:-1;;;;;;;;33730:637:0;;;33591:783;;;:::o;39204:1350::-;39317:9;39312:1235;39346:1;39332:4;:11;:15;39328:1;:19;39312:1235;;;39370:13;39385:14;39404:4;39409:1;39404:7;;;;;;;;;;;;;;39413:4;39418:1;39422;39418:5;39413:11;;;;;;;;;;;;;;39369:56;;;;39441:14;39461:43;39490:5;39497:6;39461:28;:43::i;:::-;39440:64;;;39519:20;39558:49;39584:7;39593:5;39600:6;39558:25;:49::i;:::-;39519:89;;39623:19;39657:20;39769:16;39787;39809:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39809:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39809:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;39809:18:0;;;;;;;39768:59;;;;;-1:-1:-1;39768:59:0;;-1:-1:-1;39847:20:0;;39894:15;;;;;;;;:103;;39978:8;39988;39894:103;;;39934:8;39944;39894:103;39846:151;;;;40030:56;40073:12;40037:5;40030:23;;;40062:4;40030:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;40030:56:0;40016:70;;40120:72;40151:11;40164:12;40178:13;40120:30;:72::i;:::-;40105:87;;39312:1235;;;;40223:18;40243;40274:6;40265:15;;:5;:15;;;:107;;40347:12;40369:1;40265:107;;;40309:1;40313:12;40265:107;40222:150;;;;40387:10;40418:1;40404:4;:11;:15;40400:1;:19;:83;;40480:3;40400:83;;;40422:55;40448:7;40457:6;40465:4;40470:1;40474;40470:5;40465:11;;;;;;;40422:55;40387:96;;40498:4;:9;;;40508:10;40520;40532:2;40498:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40498:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;39349:3:0;;;;;-1:-1:-1;39312:1235:0;;-1:-1:-1;;;;;;;;;;39312:1235:0;;;39204:1350;;:::o;16844:136::-;16902:7;16929:43;16933:1;16936;16929:43;;;;;;;;;;;;;;;;;:3;:43::i;2105:200::-;2218:12;;;2178;2218;;;;;;;;;2196:7;;;;2211:5;;2196:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2196:35:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;2177:54:0;;;2250:7;2242:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10926:526;11062:16;11111:1;11099:9;:13;11091:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11193:1;11181:9;:13;:31;;;;;11211:1;11198:10;:14;11181:31;11173:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11269:17;11289:34;11318:4;11289:24;:9;11303;11289:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;11269:54;-1:-1:-1;11334:19:0;11356:34;11386:3;11356:25;:10;11371:9;11356:25;:14;:25;:::i;:34::-;11334:56;;11412:32;11442:1;11425:11;11413:9;:23;;;;;;;11412:32;:29;:32;:::i;:::-;11401:43;10926:526;-1:-1:-1;;;;;;10926:526:0:o;9740:369::-;9865:15;9911:1;9901:7;:11;9893:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9985:1;9974:8;:12;:28;;;;;10001:1;9990:8;:12;9974:28;9966:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10093:8;10069:21;:7;10081:8;10069:21;:11;:21;:::i;:::-;:32;;;;;;;9740:369;-1:-1:-1;;;;9740:369:0:o;1243:398::-;1475:45;;;1464:10;1475:45;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1475:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1475:45:0;179:29:-1;160:49;;1464:57:0;;;;1429:12;;1443:17;;1464:10;;;;1475:45;1464:57;;;25:18:-1;1464:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1464:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1428:93:0;;;;1540:7;:57;;;;-1:-1:-1;1552:11:0;;:16;;:44;;;1583:4;1572:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1572:24:0;1552:44;1532:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1243:398;;;;;:::o;8035:351::-;8110:14;8126;8171:6;8161:16;;:6;:16;;;;8153:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8259:6;8250:15;;:6;:15;;;:53;;8288:6;8296;8250:53;;;8269:6;8277;8250:53;8231:72;;-1:-1:-1;8231:72:0;-1:-1:-1;8322:20:0;;;8314:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8035:351;;;;;:::o;25428:1427::-;25759:51;;;;;;:65;:51;;;;;;;;;;;;;;;;25658:15;;;;;;25778:7;25759:35;;;;;;:51;;;;;;;;;;;;;;;:35;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;25759:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25759:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25759:51:0;:65;;;25755:152;;;25841:54;;;;;;:38;:54;;;;;;;;;;;;;;;;25860:7;25841:38;;;;;;:54;;;;;;;;;;;;;;;-1:-1:-1;25841:38:0;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;25841:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25841:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;25755:152:0;25918:16;25936;25956:54;25986:7;25995:6;26003;25956:29;:54::i;:::-;25917:93;;;;26025:8;26037:1;26025:13;:30;;;;-1:-1:-1;26042:13:0;;26025:30;26021:827;;;26094:14;;-1:-1:-1;26110:14:0;;-1:-1:-1;26021:827:0;;;26158:22;26183:59;26207:14;26223:8;26233;26183:23;:59::i;:::-;26158:84;;26279:14;26261;:32;26257:580;;26340:10;26322:14;:28;;26314:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26435:14;;-1:-1:-1;26451:14:0;-1:-1:-1;26451:14:0;26257:580;;;26507:22;26532:59;26556:14;26572:8;26582;26532:23;:59::i;:::-;26507:84;;26635:14;26617;:32;;26610:40;;;;26695:10;26677:14;:28;;26669:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26790:14;-1:-1:-1;26806:14:0;;-1:-1:-1;26257:580:0;26021:827;;25428:1427;;;;;;;;;;;:::o;17768:471::-;17826:7;18071:6;18067:47;;-1:-1:-1;18101:1:0;18094:8;;18067:47;18138:5;;;18142:1;18138;:5;:1;18162:5;;;;;:10;18154:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16380:181;16438:7;16470:5;;;16494:6;;;;16486:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9187:440;9314:16;9332;9362:14;9382:26;9393:6;9401;9382:10;:26::i;:::-;9361:47;;;9420:16;9438;9476:32;9484:7;9493:6;9501;9476:7;:32::i;:::-;9460:61;;;:63;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9460:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9460:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9460:63:0;;;;;;;9419:104;;;;;-1:-1:-1;9419:104:0;;-1:-1:-1;9557:16:0;;;;;;;;:62;;9600:8;9610;9557:62;;;9577:8;9587;9557:62;9534:85;;;;-1:-1:-1;9187:440:0;-1:-1:-1;;;;;;;9187:440:0:o;17283:226::-;17403:7;17439:12;17431:6;;;;17423:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17423:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17475:5:0;;;17283:226::o

Swarm Source

ipfs://299e6ec863a05b34facb61387047c1629d5fac978f54568d39a4d31919f46fcb
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.