Contract 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d9165

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xffcba8070297746fea9f42ac20de0082bff166dfd0ad8b5a1144ce36335d0031Send Sell Order152880712022-05-17 3:32:125 secs ago0x2614f941015497eff242ad182999dc194ead13ac IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00108536752.5
0x9688e023840608e28be5a92e141765fd84504b6d7430bdedf1fa19a56a382297Send Sell Order152880622022-05-17 3:31:4532 secs ago0x847538cd3b4c3e0d4b9884b8b202150cfbfea634 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.001114562.5
0xe73076dc8c843b1cccfac59793acf8824ac312c9c0d558db2d19893000296351Send Sell Order152880182022-05-17 3:29:332 mins ago0x8a9dafe1955f7486abcc8bf4d168aa741f1c03b8 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00124662752.5
0xe1f3bcd95edfefadab7255406e7b09bb0e0b9f6a528f21554b8c0e5105092a6cSend Buy Order152879672022-05-17 3:27:005 mins ago0x013d2096c0860407c004d06ed15c502ada6603c8 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00123608252.5
0x2e612e208f1dd77cfdecfcc14e4bfdc144b730ef840f851524abba7d5ff5ba32Send Sell Order152879322022-05-17 3:25:157 mins ago0x3af9c3dc25a47d032ce1120b5fb06c0f6da5c505 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00112101252.5
0x3553a0e005fb48e334929ec1dc57755a9340c64f2d1254f37b1a7a0b70a9c265Send Sell Order152879112022-05-17 3:24:128 mins ago0x9549a0e214a38c6df188fddc264a1b4ea9966353 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00371401252.5
0xfd7d71c14a6159036bdb102220c69bbe7eb5547d56a387805e91400dabab424fSend Sell Order152878932022-05-17 3:23:188 mins ago0x9e1fc514c0cf838afde745666e09a408a1684b99 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00764206752.5
0x96655e526f6c9edb1709b2abde9f6fd1cf0708b7ed8f08ee5ffc816a2d5db35bSend Buy Order152878892022-05-17 3:23:069 mins ago0xb1982d1854a521a266eede546a2b2a2553e5c84e IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00111996252.5
0x6d456709829e9442992414adb47a125896d84c96ba7afa8bf5da1c0f9a1fd54eSend Buy Order152878842022-05-17 3:22:519 mins ago0x3af9c3dc25a47d032ce1120b5fb06c0f6da5c505 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00419878252.5
0x2b7d841a6a441fa510ba6b383c59be2331d617a2b11824c1651d21020efc005fCancel Order152878832022-05-17 3:22:489 mins ago0xa1c7bfb95524b40e6710de9aa01e686d30041876 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00041466252.5
0x3b4e8b4c5d8b4f727d47d82da2473c5b834defe2e636c92d1d139519e4cd4f9eSend Sell Order152878772022-05-17 3:22:309 mins ago0xebec88e64a1926ddfa445873d27b7c5b873099f1 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00440888252.5
0x17d30861d36e2d00a7d927d9754d372db2f2fb5e7691413fd9fce0080dd2bb80Send Buy Order152878732022-05-17 3:22:189 mins ago0xa1c7bfb95524b40e6710de9aa01e686d30041876 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00149609752.5
0x4d1204480024d8d47c393732ba79a801a8383c9abf2b5251576143140980edb0Send Buy Order152878662022-05-17 3:21:5710 mins ago0xa1c7bfb95524b40e6710de9aa01e686d30041876 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.0014794952.5
0x55a883991ae11f5c82652b073897b6c4dcf427342978ce96dc66756915fe4d16Cancel Order152878652022-05-17 3:21:5410 mins ago0xebec88e64a1926ddfa445873d27b7c5b873099f1 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00044836252.5
0x088e73ebebaf31fe65c668925db27778ac42843066d94d431e283629e2a10391Send Buy Order152878592022-05-17 3:21:3610 mins ago0xa1c7bfb95524b40e6710de9aa01e686d30041876 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00146289252.5
0x1d3ae31366983bd0dac38f603d521b2241c026940682842cb5e8f1230278a175Send Buy Order152878542022-05-17 3:21:2110 mins ago0xa1c7bfb95524b40e6710de9aa01e686d30041876 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.001446292.5
0x6ba0a0b2065c10dd76713288e27b4cc961b305dc75c4389f002541c0f514a3b8Cancel Order152878452022-05-17 3:20:5411 mins ago0xa1c7bfb95524b40e6710de9aa01e686d30041876 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00051050252.5
0x5d307cdf52849b3b3dcdd73e528a17050d0131cfbf7fbf12d0e1bb83ef3fd0ecSend Buy Order152878072022-05-17 3:19:0013 mins ago0xd58e172971710d61babc33c907a7f756ae014722 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00125157752.5
0x7a657d126de9b5480c064c5de5e9394bf720caf695ee43ef4b3ba774de755d6bSend Buy Order152877842022-05-17 3:17:5114 mins ago0xe2f36facc46db2e145782138f4ef1f16da08aa1a IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.002116232.5
0xf47a5f10a1a64f10064edb68e231cc8b70710275da581f049e94d7fd06259bb6Send Buy Order152877832022-05-17 3:17:4814 mins ago0xdc0688a23ae35f4d875421429e3a94ebaa4d9c37 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00111392252.5
0x9279879233d36823704ad0231a0f53716399957bb24210fb9f83fc8bcd42a76fSend Buy Order152877692022-05-17 3:17:0615 mins ago0xd58e172971710d61babc33c907a7f756ae014722 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00134458252.5
0x2fe2df21a88c53479433c9bb661b7f62dfe43f6b15a824626447cb6a274fcfc9Send Sell Order152877632022-05-17 3:16:4815 mins ago0xe2f36facc46db2e145782138f4ef1f16da08aa1a IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.0082159452.5
0xf90bfd221ba55cfe594efa86cae173c9dec370cb3aec78cfc463b359fe92b543Cancel Order152877602022-05-17 3:16:3915 mins ago0xe2f36facc46db2e145782138f4ef1f16da08aa1a IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.000406172.5
0xa3a5b9ca17cb2cafcddb5b7004bf37190a07b941fc95bae102b8120da145710eSend Buy Order152877552022-05-17 3:16:2415 mins ago0x3f2f10c6fca3943ef2a0a2611ffddf1c32dc81f5 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00111395252.5
0xdedc3f6ecde448a46fbd80da247fdfbe1c94db5410cbb3d38fa6bdf33317e38fCancel Order152877352022-05-17 3:15:2416 mins ago0x965044322c5978ef0c0d31cb66dcdbb896a16884 IN 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650 HT0.00042463752.5
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xae624ad489a59529fe547dfc711b21b16c13dc3faebcef82415fb737e9295ee0152736232022-05-16 15:29:4812 hrs 2 mins ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b06760.1 HT
0xa5a46ee38519ed53752180d1f8c491032afe0b6983f9918187c1c25dc23f29cd152722502022-05-16 14:21:0913 hrs 11 mins ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b06762.51 HT
0x2c9daaa9ab6cb44c21f6aa0b1b1e3132742917e59094f5543c58b5ca1333ac23152720212022-05-16 14:09:4213 hrs 22 mins ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b067635.5 HT
0x59b15426c3177d4d1d643d0fbb0c420bb84abd5819f541f037831d4c0a53ddbd152713142022-05-16 13:34:2113 hrs 57 mins ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b06765 HT
0x3103241476fbbc125823f23cbbc5f53015b6a62be823fc5a0aad78767657c08c152697932022-05-16 12:18:1715 hrs 14 mins ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b06763 HT
0xd8a37577390cf3cf7b3a9f36cf3386d9ed6d0d32b3cfac78426fed223d010c65152697332022-05-16 12:15:1715 hrs 17 mins ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b06763 HT
0xb453b8b37834456fd566f91c1aa4c6f086664ec3b0e093b19a4882aeaab929b7152691492022-05-16 11:46:0515 hrs 46 mins ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b067635.5 HT
0x935283e65eee110298b0860380f3f39cc347b8b32e1c60a864b1c34ab36853c7152690612022-05-16 11:41:4115 hrs 50 mins ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b06769.5 HT
0x19987e3247749171039cdaa537ba73ec6c58116770b19307c62f25190b63af08152685932022-05-16 11:18:1716 hrs 14 mins ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b06763 HT
0x3b42065006e7e987f9f1cb7634004d98c50d4a340bdadbd2e96576f20a3ef32f152685602022-05-16 11:16:3816 hrs 15 mins ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b06763 HT
0xe092aedcb1b603237d72a387f5549d4d05e1cb1bd86a77aa88f78b969ecafa9a152664882022-05-16 9:33:0217 hrs 59 mins ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b067637.5 HT
0x1bf48c4d0dd692ccfe361366691762355c3e625f56f24a278d96b741b0dad1ac152657572022-05-16 8:56:2918 hrs 35 mins ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b06765.6 HT
0x89f9d510a027715bbad2b447508635e5ab5622138261640c7a45f6cb7eda94d3152586992022-05-16 3:03:351 day 28 mins ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b067637.5 HT
0x30267a16c632fb825ebd8a91cf6eb9e3b8378e07052280e9ea125e0a8f3b8998152575412022-05-16 2:05:411 day 1 hr ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b06769.91 HT
0x7fbdb842f6254d7d7f6443cf873ae55dd5086c154a3b911359e048f0af70059d152574992022-05-16 2:03:351 day 1 hr ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b06760.1 HT
0x3ca876d80a256fb79694f7eca03d025e477c8947459323c4cea6d132cd80ff14152571842022-05-16 1:47:501 day 1 hr ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b06763 HT
0x16b433ac7eac1dac50e685b88a29068b552e5e98d9a38a20c9ba1e1d37266ff2152542652022-05-15 23:21:531 day 4 hrs ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b067665 HT
0x37959e3c7ee2b84fe1cb8d87bd4b138585edfa8f3a110de5375c30501ae0cc93152542432022-05-15 23:20:471 day 4 hrs ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b067621.81 HT
0xf9ee8719f82ebb3d2adb4d1327df5cbe547558372d87ab3ef536f701213cc173152542132022-05-15 23:19:171 day 4 hrs ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b06761 HT
0x5e396e64f6382fd982f0609e9e95fb4cafb31a01092480a6f355d8ed21e54329152416852022-05-15 12:52:531 day 14 hrs ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b06769.9 HT
0xfcd85d398dcb0c3bafaf03400ebe370a88b882072c0c83121234926e65bf92ff152388412022-05-15 10:30:411 day 17 hrs ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b067637.5 HT
0x5f848477bc51d87e9096f2ef839a8d10309aeb51f1296045b0b3ab35c099c702152383222022-05-15 10:04:441 day 17 hrs ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b06766 HT
0xef5016cbcf6d84865cd4d52e506db8446508bf063d43887b2d820f7d5fb2740b152356062022-05-15 7:48:561 day 19 hrs ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b067637.5 HT
0x4854ba6b1e0d3d05b42d17a291cc8a5ccbabc0a2fd2a321792094ab55ece5d1d152345202022-05-15 6:54:381 day 20 hrs ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b06765.4 HT
0xcc1c75518f960056398fd0b6175c49e76d696d06b5774afb7e665eb62e3b34ef152323782022-05-15 5:07:321 day 22 hrs ago 0x6d70002c1dd5fc26d08da33a1a2fcaeda17d91650xe7024de44f9a9f9f9292cd67934241ac861b067619.5 HT
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x2fA96fB603fD347375D65DcfaAeBD5a775d1f40A

Contract Name:
TDEX

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2022-01-24
*/

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.8.0 <0.9.0;

address constant constant_ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;

address constant constant_USDT = 0xa71EdC38d189767582C38A3145b5873052c3e47a;

uint256 constant decimals_USDT = 18;

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

    /**
     * @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);
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    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;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by 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;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a >= b) return a;
        return b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        require(a >=0 && b>=0, "SafeMath: Cannot have negative numbers");
        if (a <= b) return a;
        return b;
    }
}

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

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

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

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract ERC20 {

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     */
    function decimals() public view virtual returns (uint8) {
        return _decimals;
    }
}


library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}


interface OrderInterface {

    function getPrice(address _tokenContract) external view returns (uint256 price);

    function getLastMatchId(address _tokenContract) external view returns (uint256 matchId);

    function getLastOrderId(address _tokenContract) external view returns (uint256 orderId);

    function getBuyOrderPriceListLength(address _tokenContract) external view returns (uint length);

    function getBuyOrderPriceListCountDesc50(address _tokenContract, uint index) external view returns (uint256[50] memory list);

    function getBuyOrderPriceListPublished(address _tokenContract) external view returns (uint256[100] memory list);

    function getBuyOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory list);

    function getSellOrderPriceListLength(address _tokenContract) external view returns (uint length);

    function getSellOrderPriceListCountDesc50(address _tokenContract, uint index) external view returns (uint256[50] memory list);

    function getSellOrderPriceListPublished(address _tokenContract) external view returns (uint256[100] memory list);

    function getBuyOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256 number);

    function getSellOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256 number);

    function getSellOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory list);

    function getOrderMatching(address _tokenContract, uint256 _orderId) external view returns (uint256[] memory matchingList);

    function getOrderUnmatchedListLength(address _tokenContract, address _sender) external view returns (uint length);

    function getOrderFinishedListLength(address _tokenContract, address _sender) external view returns (uint length);

    function getOrderUnmatchedListValuesCount10(address _tokenContract, address _sender, uint index) external view returns (uint256[10] memory list);

    function getOrderFinishedListValuesCountDesc10(address _tokenContract, address _sender, uint index) external view returns (uint256[10] memory list);
}

interface DexInterface {

    function createOrder(address _tokenContract, address _sender, uint256 _price, uint256 _token, uint256 _usdt, uint8 _type, uint256 price_magnification) external returns (uint256 _orderId);

    function removeOrder(address _tokenContract, uint256 _orderId, address _sender) external returns (bool _flag);

    function handleBuyMatchOrder(address _tokenContract, uint256 _orderId, uint price_magnification) external;

    function handleSellMatchOrder(address _tokenContract, uint256 _orderId, uint price_magnification) external;

    function getOrder(address _tokenContract, uint256 _orderId) external view returns (
        uint256 price,
        uint256 tokenTotal,
        uint256 tokenSurplus,
        uint256 tokenFee,
        uint256 usdtSurplus,
        uint256 usdtFee,
        uint256 createnTime,
        uint256 endTime,
        uint8 orderType,
        uint8 status,
        address sender
    );

    function getMatch(address _tokenContract, uint256 _matchId) external view returns (
        uint256 matchId,
        uint256 buyOrderId,
        uint256 sellOrderId,
        uint256 price,
        uint256 tokenDeal,
        uint256 usdtDeal,
        uint256 tokenFee,
        uint256 usdtFee,
        uint256 time
    );

    function orderManager() external view returns (address);

    function books() external view returns (address);

    function mining() external view returns (address);
}

struct Token {
    string symbol;
    string name;
    address tokenContract;
    uint decimals;
    uint price_decimals;
}

interface TokenInterface {

    function getToken(address _tokenContract) external view returns (Token memory token);

    function getTokenAddressListLength() external view returns (uint length);

    function getTokenAddressList50(uint index) external view returns (address[50] memory list);
}

interface __tdexDelegate {

    function __buy(address __tokenContract, address __sender) external;

    function __sell(address __tokenContract, address __sender) external;
}

/**
 * @title Storage
 * @dev Store & retrieve value in a variable
 */
contract TDEX {

    address private _owner;

    address private _dexInterface = address(0);

    address private _tokenManager = address(0);

    address private _delegate = address(0);

    constructor () {
        _owner = msg.sender;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    function mining() external view returns (address)
    {
        return DexInterface(_dexInterface).mining();
    }

    function init(address __dexInterface, address ___tokenManager) external onlyOwner
    {
        require(_dexInterface == address(0), "Can only be assigned once");
        _dexInterface = __dexInterface;
        _tokenManager = ___tokenManager;
    }

    function setDelegate(address __delegate) external onlyOwner
    {
        _delegate = __delegate;
    }

    function getToken(address _tokenContract) external view returns (
        string memory symbol,
        string memory name,
        address tokenContract,
        uint decimals,
        uint price_decimals)
    {
        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);

        symbol = token.symbol;
        name = token.name;
        tokenContract = token.tokenContract;
        decimals = token.decimals;
        price_decimals = token.price_decimals;
    }

    function getTokenAddressListLength() external view returns (uint length)
    {
        return TokenInterface(_tokenManager).getTokenAddressListLength();
    }

    function getTokenAddressList50(uint index) external view returns (address[50] memory list)
    {
        return TokenInterface(_tokenManager).getTokenAddressList50(index);
    }

    /**********************************************************/

    function sendBuyOrder(address _tokenContract, uint256 _price, uint256 _token_amount) external returns (uint256 orderId)
    {
        if (_delegate != address(0)) __tdexDelegate(_delegate).__buy(_tokenContract, msg.sender);

        require(_tokenContract != constant_ETH, "Does not support ETH");
        require(_token_amount > 0, "The quantity cannot be 0");

        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);
        require(token.decimals > 0, "This contract address is not supported");
        require(_price > 0, "No, no price");

        uint256 price_magnification = 10 ** token.price_decimals;
        uint256 _usdt_amount = SafeMath.div(SafeMath.mul(_token_amount, _price), price_magnification);

        require(_usdt_amount <= 100000 * 10 ** decimals_USDT, "Maximum single transaction amount 100000 USDT");

        SafeERC20.safeTransferFrom(IERC20(constant_USDT), msg.sender, _dexInterface, _usdt_amount);

        orderId = DexInterface(_dexInterface).createOrder(_tokenContract, msg.sender, _price, _token_amount, _usdt_amount, 0, price_magnification);
        if (orderId > 0)
        {
            DexInterface(_dexInterface).handleBuyMatchOrder(_tokenContract, orderId, price_magnification);
        }

        return orderId;
    }

    function sendSellOrder(address _tokenContract, uint256 _price, uint256 _token_amount) external returns (uint256 orderId)
    {
        if (_delegate != address(0)) __tdexDelegate(_delegate).__sell(_tokenContract, msg.sender);

        require(_tokenContract != constant_ETH, "Does not support ETH");
        require(_token_amount > 0, "The quantity cannot be 0");

        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);
        require(token.decimals > 0, "This contract address is not supported");
        require(_price > 0, "No, no price");

        uint256 price_magnification = 10 ** token.price_decimals;
        uint256 _usdt_amount = SafeMath.div(SafeMath.mul(_token_amount, _price), price_magnification);
        require(_usdt_amount <= 100000 * 10 ** decimals_USDT, "Maximum single transaction amount 100000 USDT");

        SafeERC20.safeTransferFrom(IERC20(_tokenContract), msg.sender, _dexInterface, _token_amount);

        orderId = DexInterface(_dexInterface).createOrder(_tokenContract, msg.sender, _price, _token_amount, _usdt_amount, 1, price_magnification);
        if (orderId > 0)
        {
            DexInterface(_dexInterface).handleSellMatchOrder(_tokenContract, orderId, price_magnification);
        }

        return orderId;
    }

    function sendBuyOrderETH(uint256 _price, uint256 _token_amount) external returns (uint256 orderId)
    {
        if (_delegate != address(0)) __tdexDelegate(_delegate).__buy(constant_ETH, msg.sender);

        require(_price > 0, "No, no price");
        require(_token_amount > 0, "The quantity cannot be 0");

        Token memory token = TokenInterface(_tokenManager).getToken(constant_ETH);
        uint256 price_magnification = 10 ** token.price_decimals;
        uint256 _usdt_amount = SafeMath.div(SafeMath.mul(_token_amount, _price), price_magnification);

        require(_usdt_amount <= 100000 * 10 ** decimals_USDT, "Maximum single transaction amount 100000 USDT");

        SafeERC20.safeTransferFrom(IERC20(constant_USDT), msg.sender, _dexInterface, _usdt_amount);

        orderId = DexInterface(_dexInterface).createOrder(constant_ETH, msg.sender, _price, _token_amount, _usdt_amount, 0, price_magnification);
        if (orderId > 0)
        {
            DexInterface(_dexInterface).handleBuyMatchOrder(constant_ETH, orderId, price_magnification);
        }

        return orderId;
    }

    function sendSellOrderETH(uint256 _price) external payable returns (uint256 orderId)
    {
        if (_delegate != address(0)) __tdexDelegate(_delegate).__sell(constant_ETH, msg.sender);

        require(_price > 0, "No, no price");
        require(msg.value > 0, "The quantity cannot be 0");

        uint256 _token_amount = msg.value;

        Token memory token = TokenInterface(_tokenManager).getToken(constant_ETH);
        require(token.decimals > 0, "This contract address is not supported");
        require(_price > 0, "No, no price");

        uint256 price_magnification = 10 ** token.price_decimals;
        uint256 _usdt_amount = SafeMath.div(SafeMath.mul(_token_amount, _price), price_magnification);
        require(_usdt_amount <= 100000 * 10 ** decimals_USDT, "Maximum single transaction amount 100000 USDT");

        TransferHelper.safeTransferETH(_dexInterface, _token_amount);

        orderId = DexInterface(_dexInterface).createOrder(constant_ETH, msg.sender, _price, _token_amount, _usdt_amount, 1, price_magnification);
        if (orderId > 0)
        {
            DexInterface(_dexInterface).handleSellMatchOrder(constant_ETH, orderId, price_magnification);
        }

        return orderId;
    }

    function cancelOrder(address _tokenContract, uint256 _orderId) external returns (bool)
    {
        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);
        require(token.decimals > 0, "This contract address is not supported");

        return DexInterface(_dexInterface).removeOrder(_tokenContract, _orderId, msg.sender);
    }

    function cancelOrderRoot(address _tokenContract, uint256 _orderId, address _sender) external onlyOwner returns (bool)
    {
        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);
        require(token.decimals > 0, "This contract address is not supported");

        return DexInterface(_dexInterface).removeOrder(_tokenContract, _orderId, _sender);
    }

    /**********************************************************/

    function balanceOf(address _tokenContract, address _sender) external view returns (uint256)
    {
        uint256 balance;
        if (_tokenContract == constant_ETH)
        {
            balance = _sender.balance;
        }
        else
        {
            balance = IERC20(_tokenContract).balanceOf(_sender);
        }
        return balance;
    }

    function getPrice(address _tokenContract) external view returns (uint256 price)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getPrice(_tokenContract);
    }

    function getLastMatchId(address _tokenContract) external view returns (uint256 matchId)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getLastMatchId(_tokenContract);
    }

    function getLastOrderId(address _tokenContract) external view returns (uint256 orderId)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getLastOrderId(_tokenContract);
    }

    function getOrder(address _tokenContract, uint256 _orderId) external view returns (
        uint256 price,
        uint256 tokenTotal,
        uint256 tokenSurplus,
        uint256 tokenFee,
        uint256 usdtSurplus,
        uint256 usdtFee,
        uint256 createnTime,
        uint256 endTime,
        uint8 orderType,
        uint8 status,
        address sender
    )
    {
        return DexInterface(_dexInterface).getOrder(_tokenContract, _orderId);
    }

    function getBuyOrderPriceListLength(address _tokenContract) external view returns (uint length)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getBuyOrderPriceListLength(_tokenContract);
    }

    function getBuyOrderPriceListCountDesc50(address _tokenContract, uint index) external view returns (uint256[50] memory list)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getBuyOrderPriceListCountDesc50(_tokenContract, index);
    }

    function getBuyOrderPriceListPublished(address _tokenContract) external view returns (uint256[100] memory list)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getBuyOrderPriceListPublished(_tokenContract);
    }

    function getBuyOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory list)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getBuyOrderPriceOrderIdList(_tokenContract, _price);
    }

    function getSellOrderPriceListLength(address _tokenContract) external view returns (uint length)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getSellOrderPriceListLength(_tokenContract);
    }

    function getSellOrderPriceListCountDesc50(address _tokenContract, uint index) external view returns (uint256[50] memory list)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getSellOrderPriceListCountDesc50(_tokenContract, index);
    }

    function getSellOrderPriceListPublished(address _tokenContract) external view returns (uint256[100] memory list)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getSellOrderPriceListPublished(_tokenContract);

    }

    function getSellOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory list)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getSellOrderPriceOrderIdList(_tokenContract, _price);
    }

    function getBuyOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256 number)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getBuyOrderPriceTokenNumber(_tokenContract, _price);
    }

    function getSellOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256 number)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getSellOrderPriceTokenNumber(_tokenContract, _price);
    }

    function getMatch(address _tokenContract, uint256 _matchId) external view returns (
        uint256 matchId,
        uint256 buyOrderId,
        uint256 sellOrderId,
        uint256 price,
        uint256 tokenDeal,
        uint256 usdtDeal,
        uint256 tokenFee,
        uint256 usdtFee,
        uint256 time
    )
    {
        return DexInterface(_dexInterface).getMatch(_tokenContract, _matchId);
    }

    function getOrderMatching(address _tokenContract, uint256 _orderId) external view returns (uint256[] memory matchingList)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getOrderMatching(_tokenContract, _orderId);
    }

    function getOrderUnmatchedListLength(address _tokenContract, address _sender) external view returns (uint length)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getOrderUnmatchedListLength(_tokenContract, _sender);
    }

    function getOrderFinishedListLength(address _tokenContract, address _sender) external view returns (uint length)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getOrderFinishedListLength(_tokenContract, _sender);
    }

    function getOrderUnmatchedListValuesCount10(address _tokenContract, address _sender, uint index) external view returns (uint256[10] memory list)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getOrderUnmatchedListValuesCount10(_tokenContract, _sender, index);
    }

    function getOrderFinishedListValuesCountDesc10(address _tokenContract, address _sender, uint index) external view returns (uint256[10] memory list)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager()).getOrderFinishedListValuesCountDesc10(_tokenContract, _sender, index);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"cancelOrder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"},{"internalType":"address","name":"_sender","type":"address"}],"name":"cancelOrderRoot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getBuyOrderPriceListCountDesc50","outputs":[{"internalType":"uint256[50]","name":"list","type":"uint256[50]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getBuyOrderPriceListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getBuyOrderPriceListPublished","outputs":[{"internalType":"uint256[100]","name":"list","type":"uint256[100]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getBuyOrderPriceOrderIdList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getBuyOrderPriceTokenNumber","outputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getLastMatchId","outputs":[{"internalType":"uint256","name":"matchId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getLastOrderId","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_matchId","type":"uint256"}],"name":"getMatch","outputs":[{"internalType":"uint256","name":"matchId","type":"uint256"},{"internalType":"uint256","name":"buyOrderId","type":"uint256"},{"internalType":"uint256","name":"sellOrderId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"tokenDeal","type":"uint256"},{"internalType":"uint256","name":"usdtDeal","type":"uint256"},{"internalType":"uint256","name":"tokenFee","type":"uint256"},{"internalType":"uint256","name":"usdtFee","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"getOrder","outputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"tokenTotal","type":"uint256"},{"internalType":"uint256","name":"tokenSurplus","type":"uint256"},{"internalType":"uint256","name":"tokenFee","type":"uint256"},{"internalType":"uint256","name":"usdtSurplus","type":"uint256"},{"internalType":"uint256","name":"usdtFee","type":"uint256"},{"internalType":"uint256","name":"createnTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint8","name":"orderType","type":"uint8"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"address","name":"sender","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"getOrderFinishedListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getOrderFinishedListValuesCountDesc10","outputs":[{"internalType":"uint256[10]","name":"list","type":"uint256[10]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"getOrderMatching","outputs":[{"internalType":"uint256[]","name":"matchingList","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"getOrderUnmatchedListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getOrderUnmatchedListValuesCount10","outputs":[{"internalType":"uint256[10]","name":"list","type":"uint256[10]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getSellOrderPriceListCountDesc50","outputs":[{"internalType":"uint256[50]","name":"list","type":"uint256[50]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getSellOrderPriceListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getSellOrderPriceListPublished","outputs":[{"internalType":"uint256[100]","name":"list","type":"uint256[100]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getSellOrderPriceOrderIdList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getSellOrderPriceTokenNumber","outputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getToken","outputs":[{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"uint256","name":"price_decimals","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getTokenAddressList50","outputs":[{"internalType":"address[50]","name":"list","type":"address[50]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenAddressListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"__dexInterface","type":"address"},{"internalType":"address","name":"___tokenManager","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mining","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_token_amount","type":"uint256"}],"name":"sendBuyOrder","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_token_amount","type":"uint256"}],"name":"sendBuyOrderETH","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_token_amount","type":"uint256"}],"name":"sendSellOrder","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"sendSellOrderETH","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"__delegate","type":"address"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100d657600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550615fd480620001276000396000f3fe6080604052600436106101ee5760003560e01c806394f27d081161010d578063ca5eb5e1116100a0578063f29334421161006f578063f29334421461086e578063f51022e0146108ab578063f7888aec146108e8578063f79fde6714610925578063fd8ff72a14610950576101ee565b8063ca5eb5e114610798578063e501d5f4146107c1578063edb25841146107fe578063f09a401614610845576101ee565b8063bdda1d1a116100dc578063bdda1d1a146106a4578063c13ec815146106e1578063c27b6f291461071e578063c7ae35d31461075b576101ee565b806394f27d08146105bd57806395265e6c146105fa578063a5f46ad014610637578063b424bd8314610667576101ee565b806350ab387111610185578063662fac3911610154578063662fac39146104db5780636a206137146105065780636c09a91f146105435780637c41fb9b14610580576101ee565b806350ab3871146103db5780635942513414610420578063597704381461045d5780635f8e651e1461049e576101ee565b806321dd4946116101c157806321dd4946146102e757806330c62441146103245780633a271e351461036157806341976e091461039e576101ee565b80630179e026146101f357806305a7b04114610230578063083c63511461026d578063161b71fa146102aa575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190614235565b61098d565b6040516102279190614317565b60405180910390f35b34801561023c57600080fd5b5061025760048036038101906102529190614235565b610aa7565b6040516102649190614342565b60405180910390f35b34801561027957600080fd5b50610294600480360381019061028f9190614235565b610bba565b6040516102a19190614342565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190614389565b610ccd565b6040516102de9190614460565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190614482565b610de8565b60405161031b9190614342565b60405180910390f35b34801561033057600080fd5b5061034b600480360381019061034691906144d5565b6112ce565b60405161035891906145ad565b60405180910390f35b34801561036d57600080fd5b5061038860048036038101906103839190614389565b61137a565b604051610395919061464d565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190614235565b611497565b6040516103d29190614342565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd9190614389565b6115aa565b60405161041799989796959493929190614669565b60405180910390f35b34801561042c57600080fd5b5061044760048036038101906104429190614235565b611676565b6040516104549190614342565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190614235565b611789565b60405161049595949392919061479e565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c091906147ff565b611862565b6040516104d29190614342565b60405180910390f35b3480156104e757600080fd5b506104f0611978565b6040516104fd919061483f565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190614389565b611a10565b60405161053a9190614875565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190614890565b611ba8565b6040516105779190614342565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a291906148d0565b612027565b6040516105b49190614875565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190614389565b61224f565b6040516105f19190614460565b60405180910390f35b34801561060657600080fd5b50610621600480360381019061061c9190614389565b61236a565b60405161062e9190614342565b60405180910390f35b610651600480360381019061064c91906144d5565b612480565b60405161065e9190614342565b60405180910390f35b34801561067357600080fd5b5061068e60048036038101906106899190614235565b612978565b60405161069b9190614342565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c69190614389565b612a8b565b6040516106d89190614460565b60405180910390f35b3480156106ed57600080fd5b5061070860048036038101906107039190614923565b612ba6565b60405161071591906149fa565b60405180910390f35b34801561072a57600080fd5b50610745600480360381019061074091906147ff565b612cc6565b6040516107529190614342565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d9190614923565b612ddc565b60405161078f91906149fa565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba9190614235565b612efc565b005b3480156107cd57600080fd5b506107e860048036038101906107e39190614389565b612fce565b6040516107f59190614342565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190614389565b6130e4565b60405161083c9b9a99989796959493929190614a32565b60405180910390f35b34801561085157600080fd5b5061086c600480360381019061086791906147ff565b6131ba565b005b34801561087a57600080fd5b5061089560048036038101906108909190614235565b61335f565b6040516108a29190614317565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd9190614389565b613479565b6040516108df919061464d565b60405180910390f35b3480156108f457600080fd5b5061090f600480360381019061090a91906147ff565b613596565b60405161091c9190614342565b60405180910390f35b34801561093157600080fd5b5061093a613687565b6040516109479190614342565b60405180910390f35b34801561095c57600080fd5b5061097760048036038101906109729190614482565b61371f565b6040516109849190614342565b60405180910390f35b610995614137565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a269190614af2565b73ffffffffffffffffffffffffffffffffffffffff16630179e026836040518263ffffffff1660e01b8152600401610a5e919061483f565b610c8060405180830381865afa158015610a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa09190614c6a565b9050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3a9190614af2565b73ffffffffffffffffffffffffffffffffffffffff166305a7b041836040518263ffffffff1660e01b8152600401610b72919061483f565b602060405180830381865afa158015610b8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb39190614c98565b9050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4d9190614af2565b73ffffffffffffffffffffffffffffffffffffffff1663083c6351836040518263ffffffff1660e01b8152600401610c85919061483f565b602060405180830381865afa158015610ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc69190614c98565b9050919050565b6060600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d609190614af2565b73ffffffffffffffffffffffffffffffffffffffff1663161b71fa84846040518363ffffffff1660e01b8152600401610d9a929190614cc5565b600060405180830381865afa158015610db7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610de09190614db1565b905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ecf57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f46dc94785336040518363ffffffff1660e01b8152600401610e9c929190614dfa565b600060405180830381600087803b158015610eb657600080fd5b505af1158015610eca573d6000803e3d6000fd5b505050505b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990614e6f565b60405180910390fd5b60008211610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90614edb565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359770438866040518263ffffffff1660e01b8152600401610ff2919061483f565b600060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611038919061506f565b90506000816060015111611081576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110789061512a565b60405180910390fd5b600084116110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb90615196565b60405180910390fd5b60008160800151600a6110d79190615318565b905060006110ee6110e88688613c19565b83613c94565b90506012600a6110fe9190615318565b620186a061110c9190615363565b81111561114e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111459061542f565b60405180910390fd5b61117c8733600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688613cde565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631b898b1788338989866001896040518863ffffffff1660e01b81526004016111e49796959493929190615494565b6020604051808303816000875af1158015611203573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112279190614c98565b935060008411156112c457600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166332e668ab8886856040518463ffffffff1660e01b815260040161129193929190615503565b600060405180830381600087803b1580156112ab57600080fd5b505af11580156112bf573d6000803e3d6000fd5b505050505b5050509392505050565b6112d661415a565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166330c62441836040518263ffffffff1660e01b81526004016113319190614342565b61064060405180830381865afa15801561134f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137391906155eb565b9050919050565b61138261417d565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114139190614af2565b73ffffffffffffffffffffffffffffffffffffffff16633a271e3584846040518363ffffffff1660e01b815260040161144d929190614cc5565b61064060405180830381865afa15801561146b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148f91906156ca565b905092915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611506573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152a9190614af2565b73ffffffffffffffffffffffffffffffffffffffff166341976e09836040518263ffffffff1660e01b8152600401611562919061483f565b602060405180830381865afa15801561157f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a39190614c98565b9050919050565b6000806000806000806000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350ab38718c8c6040518363ffffffff1660e01b8152600401611615929190614cc5565b61012060405180830381865afa158015611633573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165791906156f8565b9850985098509850985098509850985098509295985092959850929598565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117099190614af2565b73ffffffffffffffffffffffffffffffffffffffff166359425134836040518263ffffffff1660e01b8152600401611741919061483f565b602060405180830381865afa15801561175e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117829190614c98565b9050919050565b606080600080600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359770438886040518263ffffffff1660e01b81526004016117ed919061483f565b600060405180830381865afa15801561180a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611833919061506f565b905080600001519550806020015194508060400151935080606001519250806080015191505091939590929450565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f59190614af2565b73ffffffffffffffffffffffffffffffffffffffff16635f8e651e84846040518363ffffffff1660e01b815260040161192f929190614dfa565b602060405180830381865afa15801561194c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119709190614c98565b905092915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663662fac396040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0b9190614af2565b905090565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359770438856040518263ffffffff1660e01b8152600401611a6e919061483f565b600060405180830381865afa158015611a8b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611ab4919061506f565b90506000816060015111611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af49061512a565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a72b3fc8585336040518463ffffffff1660e01b8152600401611b5c939291906157c2565b6020604051808303816000875af1158015611b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9f9190615825565b91505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca357600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d67300273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee336040518363ffffffff1660e01b8152600401611c70929190614dfa565b600060405180830381600087803b158015611c8a57600080fd5b505af1158015611c9e573d6000803e3d6000fd5b505050505b60008311611ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdd90615196565b60405180910390fd5b60008211611d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2090614edb565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635977043873eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6040518263ffffffff1660e01b8152600401611d9a919061483f565b600060405180830381865afa158015611db7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611de0919061506f565b905060008160800151600a611df59190615318565b90506000611e0c611e068688613c19565b83613c94565b90506012600a611e1c9190615318565b620186a0611e2a9190615363565b811115611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e639061542f565b60405180910390fd5b611eae73a71edc38d189767582c38a3145b5873052c3e47a33600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613cde565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631b898b1773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee338989866000896040518863ffffffff1660e01b8152600401611f2a979695949392919061588d565b6020604051808303816000875af1158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d9190614c98565b9350600084111561201e57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d6a033f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee86856040518463ffffffff1660e01b8152600401611feb93929190615503565b600060405180830381600087803b15801561200557600080fd5b505af1158015612019573d6000803e3d6000fd5b505050505b50505092915050565b60003373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ae90615948565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359770438866040518263ffffffff1660e01b8152600401612114919061483f565b600060405180830381865afa158015612131573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061215a919061506f565b905060008160600151116121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a9061512a565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a72b3fc8686866040518463ffffffff1660e01b8152600401612202939291906157c2565b6020604051808303816000875af1158015612221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122459190615825565b9150509392505050565b6060600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e29190614af2565b73ffffffffffffffffffffffffffffffffffffffff166394f27d0884846040518363ffffffff1660e01b815260040161231c929190614cc5565b600060405180830381865afa158015612339573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906123629190614db1565b905092915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fd9190614af2565b73ffffffffffffffffffffffffffffffffffffffff166395265e6c84846040518363ffffffff1660e01b8152600401612437929190614cc5565b602060405180830381865afa158015612454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124789190614c98565b905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461257b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f46dc94773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee336040518363ffffffff1660e01b8152600401612548929190614dfa565b600060405180830381600087803b15801561256257600080fd5b505af1158015612576573d6000803e3d6000fd5b505050505b600082116125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b590615196565b60405180910390fd5b60003411612601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f890614edb565b60405180910390fd5b60003490506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635977043873eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6040518263ffffffff1660e01b8152600401612677919061483f565b600060405180830381865afa158015612694573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906126bd919061506f565b90506000816060015111612706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fd9061512a565b60405180910390fd5b60008411612749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274090615196565b60405180910390fd5b60008160800151600a61275c9190615318565b9050600061277361276d8588613c19565b83613c94565b90506012600a6127839190615318565b620186a06127919190615363565b8111156127d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ca9061542f565b60405180910390fd5b6127ff600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685613d67565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631b898b1773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee338988866001896040518863ffffffff1660e01b815260040161287b9796959493929190615494565b6020604051808303816000875af115801561289a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128be9190614c98565b9450600085111561296f57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166332e668ab73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee87856040518463ffffffff1660e01b815260040161293c93929190615503565b600060405180830381600087803b15801561295657600080fd5b505af115801561296a573d6000803e3d6000fd5b505050505b50505050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0b9190614af2565b73ffffffffffffffffffffffffffffffffffffffff1663b424bd83836040518263ffffffff1660e01b8152600401612a43919061483f565b602060405180830381865afa158015612a60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a849190614c98565b9050919050565b6060600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1e9190614af2565b73ffffffffffffffffffffffffffffffffffffffff1663bdda1d1a84846040518363ffffffff1660e01b8152600401612b58929190614cc5565b600060405180830381865afa158015612b75573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612b9e9190614db1565b905092915050565b612bae6141a0565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3f9190614af2565b73ffffffffffffffffffffffffffffffffffffffff1663c13ec8158585856040518463ffffffff1660e01b8152600401612c7b93929190615968565b61014060405180830381865afa158015612c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cbd9190615a50565b90509392505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d599190614af2565b73ffffffffffffffffffffffffffffffffffffffff1663c27b6f2984846040518363ffffffff1660e01b8152600401612d93929190614dfa565b602060405180830381865afa158015612db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd49190614c98565b905092915050565b612de46141a0565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e759190614af2565b73ffffffffffffffffffffffffffffffffffffffff1663c7ae35d38585856040518463ffffffff1660e01b8152600401612eb193929190615968565b61014060405180830381865afa158015612ecf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef39190615a50565b90509392505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8190615948565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561303d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130619190614af2565b73ffffffffffffffffffffffffffffffffffffffff1663e501d5f484846040518363ffffffff1660e01b815260040161309b929190614cc5565b602060405180830381865afa1580156130b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130dc9190614c98565b905092915050565b6000806000806000806000806000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663edb258418e8e6040518363ffffffff1660e01b8152600401613152929190614cc5565b61016060405180830381865afa158015613170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131949190615aaa565b9a509a509a509a509a509a509a509a509a509a509a509295989b509295989b9093969950565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323f90615948565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d090615bea565b60405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b613367614137565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f89190614af2565b73ffffffffffffffffffffffffffffffffffffffff1663f2933442836040518263ffffffff1660e01b8152600401613430919061483f565b610c8060405180830381865afa15801561344e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134729190614c6a565b9050919050565b61348161417d565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135129190614af2565b73ffffffffffffffffffffffffffffffffffffffff1663f51022e084846040518363ffffffff1660e01b815260040161354c929190614cc5565b61064060405180830381865afa15801561356a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061358e91906156ca565b905092915050565b60008073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613600578273ffffffffffffffffffffffffffffffffffffffff1631905061367d565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401613639919061483f565b602060405180830381865afa158015613656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061367a9190614c98565b90505b8091505092915050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f79fde676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061371a9190614c98565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461380657600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d67300285336040518363ffffffff1660e01b81526004016137d3929190614dfa565b600060405180830381600087803b1580156137ed57600080fd5b505af1158015613801573d6000803e3d6000fd5b505050505b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388090614e6f565b60405180910390fd5b600082116138cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c390614edb565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359770438866040518263ffffffff1660e01b8152600401613929919061483f565b600060405180830381865afa158015613946573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061396f919061506f565b905060008160600151116139b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139af9061512a565b60405180910390fd5b600084116139fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f290615196565b60405180910390fd5b60008160800151600a613a0e9190615318565b90506000613a25613a1f8688613c19565b83613c94565b90506012600a613a359190615318565b620186a0613a439190615363565b811115613a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7c9061542f565b60405180910390fd5b613ac773a71edc38d189767582c38a3145b5873052c3e47a33600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613cde565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631b898b1788338989866000896040518863ffffffff1660e01b8152600401613b2f979695949392919061588d565b6020604051808303816000875af1158015613b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b729190614c98565b93506000841115613c0f57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d6a033f8886856040518463ffffffff1660e01b8152600401613bdc93929190615503565b600060405180830381600087803b158015613bf657600080fd5b505af1158015613c0a573d6000803e3d6000fd5b505050505b5050509392505050565b600080831415613c2c5760009050613c8e565b60008284613c3a9190615363565b9050828482613c499190615c39565b14613c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c8090615cdc565b60405180910390fd5b809150505b92915050565b6000613cd683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e67565b905092915050565b613d61846323b872dd60e01b858585604051602401613cff93929190615968565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613eca565b50505050565b60008273ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff811115613d9c57613d9b614b24565b5b6040519080825280601f01601f191660200182016040528015613dce5781602001600182028036833780820191505090505b50604051613ddc9190615d43565b60006040518083038185875af1925050503d8060008114613e19576040519150601f19603f3d011682016040523d82523d6000602084013e613e1e565b606091505b5050905080613e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e5990615dcc565b60405180910390fd5b505050565b60008083118290613eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ea59190615dec565b60405180910390fd5b5060008385613ebd9190615c39565b9050809150509392505050565b6000613f2c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613f919092919063ffffffff16565b9050600081511115613f8c5780806020019051810190613f4c9190615825565b613f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f8290615e80565b60405180910390fd5b5b505050565b6060613fa08484600085613fa9565b90509392505050565b606082471015613fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fe590615f12565b60405180910390fd5b613ff7856140bd565b614036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161402d90615f7e565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161405f9190615d43565b60006040518083038185875af1925050503d806000811461409c576040519150601f19603f3d011682016040523d82523d6000602084013e6140a1565b606091505b50915091506140b18282866140d0565b92505050949350505050565b600080823b905060008111915050919050565b606083156140e057829050614130565b6000835111156140f35782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141279190615dec565b60405180910390fd5b9392505050565b60405180610c800160405280606490602082028036833780820191505090505090565b604051806106400160405280603290602082028036833780820191505090505090565b604051806106400160405280603290602082028036833780820191505090505090565b604051806101400160405280600a90602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614202826141d7565b9050919050565b614212816141f7565b811461421d57600080fd5b50565b60008135905061422f81614209565b92915050565b60006020828403121561424b5761424a6141cd565b5b600061425984828501614220565b91505092915050565b600060649050919050565b600081905092915050565b6000819050919050565b6000819050919050565b61429581614282565b82525050565b60006142a7838361428c565b60208301905092915050565b6000602082019050919050565b6142c981614262565b6142d3818461426d565b92506142de82614278565b8060005b8381101561430f5781516142f6878261429b565b9650614301836142b3565b9250506001810190506142e2565b505050505050565b6000610c808201905061432d60008301846142c0565b92915050565b61433c81614282565b82525050565b60006020820190506143576000830184614333565b92915050565b61436681614282565b811461437157600080fd5b50565b6000813590506143838161435d565b92915050565b600080604083850312156143a05761439f6141cd565b5b60006143ae85828601614220565b92505060206143bf85828601614374565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000602082019050919050565b600061440d826143c9565b61441781856143d4565b9350614422836143e5565b8060005b8381101561445357815161443a888261429b565b9750614445836143f5565b925050600181019050614426565b5085935050505092915050565b6000602082019050818103600083015261447a8184614402565b905092915050565b60008060006060848603121561449b5761449a6141cd565b5b60006144a986828701614220565b93505060206144ba86828701614374565b92505060406144cb86828701614374565b9150509250925092565b6000602082840312156144eb576144ea6141cd565b5b60006144f984828501614374565b91505092915050565b600060329050919050565b600081905092915050565b6000819050919050565b61452b816141f7565b82525050565b600061453d8383614522565b60208301905092915050565b6000602082019050919050565b61455f81614502565b614569818461450d565b925061457482614518565b8060005b838110156145a557815161458c8782614531565b965061459783614549565b925050600181019050614578565b505050505050565b6000610640820190506145c36000830184614556565b92915050565b600060329050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b6145ff816145c9565b61460981846145d4565b9250614614826145df565b8060005b8381101561464557815161462c878261429b565b9650614637836145e9565b925050600181019050614618565b505050505050565b60006106408201905061466360008301846145f6565b92915050565b60006101208201905061467f600083018c614333565b61468c602083018b614333565b614699604083018a614333565b6146a66060830189614333565b6146b36080830188614333565b6146c060a0830187614333565b6146cd60c0830186614333565b6146da60e0830185614333565b6146e8610100830184614333565b9a9950505050505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614730578082015181840152602081019050614715565b8381111561473f576000848401525b50505050565b6000601f19601f8301169050919050565b6000614761826146f6565b61476b8185614701565b935061477b818560208601614712565b61478481614745565b840191505092915050565b614798816141f7565b82525050565b600060a08201905081810360008301526147b88188614756565b905081810360208301526147cc8187614756565b90506147db604083018661478f565b6147e86060830185614333565b6147f56080830184614333565b9695505050505050565b60008060408385031215614816576148156141cd565b5b600061482485828601614220565b925050602061483585828601614220565b9150509250929050565b6000602082019050614854600083018461478f565b92915050565b60008115159050919050565b61486f8161485a565b82525050565b600060208201905061488a6000830184614866565b92915050565b600080604083850312156148a7576148a66141cd565b5b60006148b585828601614374565b92505060206148c685828601614374565b9150509250929050565b6000806000606084860312156148e9576148e86141cd565b5b60006148f786828701614220565b935050602061490886828701614374565b925050604061491986828701614220565b9150509250925092565b60008060006060848603121561493c5761493b6141cd565b5b600061494a86828701614220565b935050602061495b86828701614220565b925050604061496c86828701614374565b9150509250925092565b6000600a9050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b6149ac81614976565b6149b68184614981565b92506149c18261498c565b8060005b838110156149f25781516149d9878261429b565b96506149e483614996565b9250506001810190506149c5565b505050505050565b600061014082019050614a1060008301846149a3565b92915050565b600060ff82169050919050565b614a2c81614a16565b82525050565b600061016082019050614a48600083018e614333565b614a55602083018d614333565b614a62604083018c614333565b614a6f606083018b614333565b614a7c608083018a614333565b614a8960a0830189614333565b614a9660c0830188614333565b614aa360e0830187614333565b614ab1610100830186614a23565b614abf610120830185614a23565b614acd61014083018461478f565b9c9b505050505050505050505050565b600081519050614aec81614209565b92915050565b600060208284031215614b0857614b076141cd565b5b6000614b1684828501614add565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614b5c82614745565b810181811067ffffffffffffffff82111715614b7b57614b7a614b24565b5b80604052505050565b6000614b8e6141c3565b9050614b9a8282614b53565b919050565b600067ffffffffffffffff821115614bba57614bb9614b24565b5b602082029050919050565b600080fd5b600081519050614bd98161435d565b92915050565b6000614bf2614bed84614b9f565b614b84565b90508060208402830185811115614c0c57614c0b614bc5565b5b835b81811015614c355780614c218882614bca565b845260208401935050602081019050614c0e565b5050509392505050565b600082601f830112614c5457614c53614b1f565b5b6064614c61848285614bdf565b91505092915050565b6000610c808284031215614c8157614c806141cd565b5b6000614c8f84828501614c3f565b91505092915050565b600060208284031215614cae57614cad6141cd565b5b6000614cbc84828501614bca565b91505092915050565b6000604082019050614cda600083018561478f565b614ce76020830184614333565b9392505050565b600067ffffffffffffffff821115614d0957614d08614b24565b5b602082029050602081019050919050565b6000614d2d614d2884614cee565b614b84565b90508083825260208201905060208402830185811115614d5057614d4f614bc5565b5b835b81811015614d795780614d658882614bca565b845260208401935050602081019050614d52565b5050509392505050565b600082601f830112614d9857614d97614b1f565b5b8151614da8848260208601614d1a565b91505092915050565b600060208284031215614dc757614dc66141cd565b5b600082015167ffffffffffffffff811115614de557614de46141d2565b5b614df184828501614d83565b91505092915050565b6000604082019050614e0f600083018561478f565b614e1c602083018461478f565b9392505050565b7f446f6573206e6f7420737570706f727420455448000000000000000000000000600082015250565b6000614e59601483614701565b9150614e6482614e23565b602082019050919050565b60006020820190508181036000830152614e8881614e4c565b9050919050565b7f546865207175616e746974792063616e6e6f7420626520300000000000000000600082015250565b6000614ec5601883614701565b9150614ed082614e8f565b602082019050919050565b60006020820190508181036000830152614ef481614eb8565b9050919050565b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff821115614f2557614f24614b24565b5b614f2e82614745565b9050602081019050919050565b6000614f4e614f4984614f0a565b614b84565b905082815260208101848484011115614f6a57614f69614f05565b5b614f75848285614712565b509392505050565b600082601f830112614f9257614f91614b1f565b5b8151614fa2848260208601614f3b565b91505092915050565b600060a08284031215614fc157614fc0614efb565b5b614fcb60a0614b84565b9050600082015167ffffffffffffffff811115614feb57614fea614f00565b5b614ff784828501614f7d565b600083015250602082015167ffffffffffffffff81111561501b5761501a614f00565b5b61502784828501614f7d565b602083015250604061503b84828501614add565b604083015250606061504f84828501614bca565b606083015250608061506384828501614bca565b60808301525092915050565b600060208284031215615085576150846141cd565b5b600082015167ffffffffffffffff8111156150a3576150a26141d2565b5b6150af84828501614fab565b91505092915050565b7f5468697320636f6e74726163742061646472657373206973206e6f742073757060008201527f706f727465640000000000000000000000000000000000000000000000000000602082015250565b6000615114602683614701565b915061511f826150b8565b604082019050919050565b6000602082019050818103600083015261514381615107565b9050919050565b7f4e6f2c206e6f2070726963650000000000000000000000000000000000000000600082015250565b6000615180600c83614701565b915061518b8261514a565b602082019050919050565b600060208201905081810360008301526151af81615173565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561523c57808604811115615218576152176151b6565b5b60018516156152275780820291505b8081029050615235856151e5565b94506151fc565b94509492505050565b6000826152555760019050615311565b816152635760009050615311565b81600181146152795760028114615283576152b2565b6001915050615311565b60ff841115615295576152946151b6565b5b8360020a9150848211156152ac576152ab6151b6565b5b50615311565b5060208310610133831016604e8410600b84101617156152e75782820a9050838111156152e2576152e16151b6565b5b615311565b6152f484848460016151f2565b9250905081840481111561530b5761530a6151b6565b5b81810290505b9392505050565b600061532382614282565b915061532e83614282565b925061535b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615245565b905092915050565b600061536e82614282565b915061537983614282565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153b2576153b16151b6565b5b828202905092915050565b7f4d6178696d756d2073696e676c65207472616e73616374696f6e20616d6f756e60008201527f7420313030303030205553445400000000000000000000000000000000000000602082015250565b6000615419602d83614701565b9150615424826153bd565b604082019050919050565b600060208201905081810360008301526154488161540c565b9050919050565b6000819050919050565b6000819050919050565b600061547e6154796154748461544f565b615459565b614a16565b9050919050565b61548e81615463565b82525050565b600060e0820190506154a9600083018a61478f565b6154b6602083018961478f565b6154c36040830188614333565b6154d06060830187614333565b6154dd6080830186614333565b6154ea60a0830185615485565b6154f760c0830184614333565b98975050505050505050565b6000606082019050615518600083018661478f565b6155256020830185614333565b6155326040830184614333565b949350505050565b600067ffffffffffffffff82111561555557615554614b24565b5b602082029050919050565b600061557361556e8461553a565b614b84565b9050806020840283018581111561558d5761558c614bc5565b5b835b818110156155b657806155a28882614add565b84526020840193505060208101905061558f565b5050509392505050565b600082601f8301126155d5576155d4614b1f565b5b60326155e2848285615560565b91505092915050565b60006106408284031215615602576156016141cd565b5b6000615610848285016155c0565b91505092915050565b600067ffffffffffffffff82111561563457615633614b24565b5b602082029050919050565b600061565261564d84615619565b614b84565b9050806020840283018581111561566c5761566b614bc5565b5b835b8181101561569557806156818882614bca565b84526020840193505060208101905061566e565b5050509392505050565b600082601f8301126156b4576156b3614b1f565b5b60326156c184828561563f565b91505092915050565b600061064082840312156156e1576156e06141cd565b5b60006156ef8482850161569f565b91505092915050565b60008060008060008060008060006101208a8c03121561571b5761571a6141cd565b5b60006157298c828d01614bca565b995050602061573a8c828d01614bca565b985050604061574b8c828d01614bca565b975050606061575c8c828d01614bca565b965050608061576d8c828d01614bca565b95505060a061577e8c828d01614bca565b94505060c061578f8c828d01614bca565b93505060e06157a08c828d01614bca565b9250506101006157b28c828d01614bca565b9150509295985092959850929598565b60006060820190506157d7600083018661478f565b6157e46020830185614333565b6157f1604083018461478f565b949350505050565b6158028161485a565b811461580d57600080fd5b50565b60008151905061581f816157f9565b92915050565b60006020828403121561583b5761583a6141cd565b5b600061584984828501615810565b91505092915050565b6000819050919050565b600061587761587261586d84615852565b615459565b614a16565b9050919050565b6158878161585c565b82525050565b600060e0820190506158a2600083018a61478f565b6158af602083018961478f565b6158bc6040830188614333565b6158c96060830187614333565b6158d66080830186614333565b6158e360a083018561587e565b6158f060c0830184614333565b98975050505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615932602083614701565b915061593d826158fc565b602082019050919050565b6000602082019050818103600083015261596181615925565b9050919050565b600060608201905061597d600083018661478f565b61598a602083018561478f565b6159976040830184614333565b949350505050565b600067ffffffffffffffff8211156159ba576159b9614b24565b5b602082029050919050565b60006159d86159d38461599f565b614b84565b905080602084028301858111156159f2576159f1614bc5565b5b835b81811015615a1b5780615a078882614bca565b8452602084019350506020810190506159f4565b5050509392505050565b600082601f830112615a3a57615a39614b1f565b5b600a615a478482856159c5565b91505092915050565b60006101408284031215615a6757615a666141cd565b5b6000615a7584828501615a25565b91505092915050565b615a8781614a16565b8114615a9257600080fd5b50565b600081519050615aa481615a7e565b92915050565b60008060008060008060008060008060006101608c8e031215615ad057615acf6141cd565b5b6000615ade8e828f01614bca565b9b50506020615aef8e828f01614bca565b9a50506040615b008e828f01614bca565b9950506060615b118e828f01614bca565b9850506080615b228e828f01614bca565b97505060a0615b338e828f01614bca565b96505060c0615b448e828f01614bca565b95505060e0615b558e828f01614bca565b945050610100615b678e828f01615a95565b935050610120615b798e828f01615a95565b925050610140615b8b8e828f01614add565b9150509295989b509295989b9093969950565b7f43616e206f6e6c792062652061737369676e6564206f6e636500000000000000600082015250565b6000615bd4601983614701565b9150615bdf82615b9e565b602082019050919050565b60006020820190508181036000830152615c0381615bc7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615c4482614282565b9150615c4f83614282565b925082615c5f57615c5e615c0a565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615cc6602183614701565b9150615cd182615c6a565b604082019050919050565b60006020820190508181036000830152615cf581615cb9565b9050919050565b600081519050919050565b600081905092915050565b6000615d1d82615cfc565b615d278185615d07565b9350615d37818560208601614712565b80840191505092915050565b6000615d4f8284615d12565b915081905092915050565b7f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960008201527f4c45440000000000000000000000000000000000000000000000000000000000602082015250565b6000615db6602383614701565b9150615dc182615d5a565b604082019050919050565b60006020820190508181036000830152615de581615da9565b9050919050565b60006020820190508181036000830152615e068184614756565b905092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000615e6a602a83614701565b9150615e7582615e0e565b604082019050919050565b60006020820190508181036000830152615e9981615e5d565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000615efc602683614701565b9150615f0782615ea0565b604082019050919050565b60006020820190508181036000830152615f2b81615eef565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000615f68601d83614701565b9150615f7382615f32565b602082019050919050565b60006020820190508181036000830152615f9781615f5b565b905091905056fea2646970667358221220e814f59f66a6f70980ffb80b6ffb182893f090c1cbf87acc194bf1be078eab6a64736f6c634300080b0033

Deployed ByteCode Sourcemap

22781:13658:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32492:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31059:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33019:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32747:264;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25927:1315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24351:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33257:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30857:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34601:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;31979:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23671:503;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;35294:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23170:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29646:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27250:1127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30017:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33795:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34334:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28385:1253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31275:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35032:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35820:301;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35558:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36129:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23557:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34069:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31491:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;23295:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33536:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32215:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30484:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24182:161;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24607:1312;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32492:247;32578:24;;:::i;:::-;32655:13;;;;;;;;;;;32642:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32627:88;;;32716:14;32627:104;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32620:111;;32492:247;;;:::o;31059:208::-;31130:15;31198:13;;;;;;;;;;;31185:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31170:73;;;31244:14;31170:89;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31163:96;;31059:208;;;:::o;33019:230::-;33103:11;33167:13;;;;;;;;;;;33154:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33139:86;;;33226:14;33139:102;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33132:109;;33019:230;;;:::o;32747:264::-;32847:21;32921:13;;;;;;;;;;;32908:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32893:86;;;32980:14;32996:6;32893:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32886:117;;32747:264;;;;:::o;25927:1315::-;26031:15;26089:1;26068:23;;:9;;;;;;;;;;;:23;;;26064:89;;26108:9;;;;;;;;;;;26093:32;;;26126:14;26142:10;26093:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26064:89;106:42;26174:30;;:14;:30;;;;26166:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;26264:1;26248:13;:17;26240:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;26307:18;26343:13;;;;;;;;;;;26328:38;;;26367:14;26328:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26307:75;;26418:1;26401:5;:14;;;:18;26393:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26490:1;26481:6;:10;26473:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;26521:27;26557:5;:20;;;26551:2;:26;;;;:::i;:::-;26521:56;;26588:20;26611:70;26624:35;26637:13;26652:6;26624:12;:35::i;:::-;26661:19;26611:12;:70::i;:::-;26588:93;;266:2;26725;:19;;;;:::i;:::-;26716:6;:28;;;;:::i;:::-;26700:12;:44;;26692:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;26807:92;26841:14;26858:10;26870:13;;;;;;;;;;;26885;26807:26;:92::i;:::-;26935:13;;;;;;;;;;;26922:39;;;26962:14;26978:10;26990:6;26998:13;27013:12;27027:1;27030:19;26922:128;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26912:138;;27075:1;27065:7;:11;27061:147;;;27115:13;;;;;;;;;;;27102:48;;;27151:14;27167:7;27176:19;27102:94;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27061:147;27220:14;;;25927:1315;;;;;:::o;24351:180::-;24417:23;;:::i;:::-;24480:13;;;;;;;;;;;24465:51;;;24517:5;24465:58;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24458:65;;24351:180;;;:::o;33257:271::-;33358:23;;:::i;:::-;33434:13;;;;;;;;;;;33421:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33406:91;;;33498:14;33514:5;33406:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33399:121;;33257:271;;;;:::o;30857:194::-;30922:13;30988;;;;;;;;;;;30975:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30960:67;;;31028:14;30960:83;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30953:90;;30857:194;;;:::o;34601:423::-;34694:15;34720:18;34749:19;34779:13;34803:17;34831:16;34858;34885:15;34911:12;34967:13;;;;;;;;;;;34954:36;;;34991:14;35007:8;34954:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34947:69;;;;;;;;;;;;;;;;;;34601:423;;;;;;;;;;;:::o;31979:228::-;32062:11;32126:13;;;;;;;;;;;32113:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32098:85;;;32184:14;32098:101;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32091:108;;31979:228;;;:::o;23671:503::-;23746:20;23777:18;23806:21;23838:13;23862:19;23899:18;23935:13;;;;;;;;;;;23920:38;;;23959:14;23920:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23899:75;;23996:5;:12;;;23987:21;;24026:5;:10;;;24019:17;;24063:5;:19;;;24047:35;;24104:5;:14;;;24093:25;;24146:5;:20;;;24129:37;;23888:286;23671:503;;;;;;;:::o;35294:256::-;35395:11;35459:13;;;;;;;;;;;35446:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35431:86;;;35518:14;35534:7;35431:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35424:118;;35294:256;;;;:::o;23170:117::-;23211:7;23256:13;;;;;;;;;;;23243:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23236:43;;23170:117;:::o;29646:363::-;29727:4;29749:18;29785:13;;;;;;;;;;;29770:38;;;29809:14;29770:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29749:75;;29860:1;29843:5;:14;;;:18;29835:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;29937:13;;;;;;;;;;;29924:39;;;29964:14;29980:8;29990:10;29924:77;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29917:84;;;29646:363;;;;:::o;27250:1127::-;27332:15;27390:1;27369:23;;:9;;;;;;;;;;;:23;;;27365:86;;27409:9;;;;;;;;;;;27394:31;;;106:42;27440:10;27394:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27365:86;27481:1;27472:6;:10;27464:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;27534:1;27518:13;:17;27510:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;27577:18;27613:13;;;;;;;;;;;27598:38;;;106:42;27598:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27577:73;;27661:27;27697:5;:20;;;27691:2;:26;;;;:::i;:::-;27661:56;;27728:20;27751:70;27764:35;27777:13;27792:6;27764:12;:35::i;:::-;27801:19;27751:12;:70::i;:::-;27728:93;;266:2;27867;:19;;;;:::i;:::-;27858:6;:28;;;;:::i;:::-;27842:12;:44;;27834:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;27949:90;186:42;27999:10;28011:13;;;;;;;;;;;28026:12;27949:26;:90::i;:::-;28075:13;;;;;;;;;;;28062:39;;;106:42;28116:10;28128:6;28136:13;28151:12;28165:1;28168:19;28062:126;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28052:136;;28213:1;28203:7;:11;28199:144;;;28253:13;;;;;;;;;;;28240:47;;;106:42;28302:7;28311:19;28240:91;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28199:144;28355:14;;;27250:1127;;;;:::o;30017:391::-;30129:4;23095:10;23085:20;;:6;;;;;;;;;;:20;;;23077:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30151:18:::1;30187:13;;;;;;;;;;;30172:38;;;30211:14;30172:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30151:75;;30262:1;30245:5;:14;;;:18;30237:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;30339:13;;;;;;;;;;;30326:39;;;30366:14;30382:8;30392:7;30326:74;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30319:81;;;30017:391:::0;;;;;:::o;33795:266::-;33896:21;33970:13;;;;;;;;;;;33957:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33942:87;;;34030:14;34046:6;33942:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33935:118;;33795:266;;;;:::o;34334:259::-;34435:14;34502:13;;;;;;;;;;;34489:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34474:87;;;34562:14;34578:6;34474:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34467:118;;34334:259;;;;:::o;28385:1253::-;28453:15;28511:1;28490:23;;:9;;;;;;;;;;;:23;;;28486:87;;28530:9;;;;;;;;;;;28515:32;;;106:42;28562:10;28515:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28486:87;28603:1;28594:6;:10;28586:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;28652:1;28640:9;:13;28632:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;28695:21;28719:9;28695:33;;28741:18;28777:13;;;;;;;;;;;28762:38;;;106:42;28762:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28741:73;;28850:1;28833:5;:14;;;:18;28825:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;28922:1;28913:6;:10;28905:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;28953:27;28989:5;:20;;;28983:2;:26;;;;:::i;:::-;28953:56;;29020:20;29043:70;29056:35;29069:13;29084:6;29056:12;:35::i;:::-;29093:19;29043:12;:70::i;:::-;29020:93;;266:2;29157;:19;;;;:::i;:::-;29148:6;:28;;;;:::i;:::-;29132:12;:44;;29124:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;29239:60;29270:13;;;;;;;;;;;29285;29239:30;:60::i;:::-;29335:13;;;;;;;;;;;29322:39;;;106:42;29376:10;29388:6;29396:13;29411:12;29425:1;29428:19;29322:126;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29312:136;;29473:1;29463:7;:11;29459:145;;;29513:13;;;;;;;;;;;29500:48;;;106:42;29563:7;29572:19;29500:92;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29459:145;29616:14;;;;28385:1253;;;:::o;31275:208::-;31346:15;31414:13;;;;;;;;;;;31401:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31386:73;;;31460:14;31386:89;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31379:96;;31275:208;;;:::o;35032:254::-;35123:29;35205:13;;;;;;;;;;;35192:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35177:75;;;35253:14;35269:8;35177:101;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35170:108;;35032:254;;;;:::o;35820:301::-;35940:23;;:::i;:::-;36016:13;;;;;;;;;;;36003:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35988:93;;;36082:14;36098:7;36107:5;35988:125;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35981:132;;35820:301;;;;;:::o;35558:254::-;35658:11;35722:13;;;;;;;;;;;35709:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35694:85;;;35780:14;35796:7;35694:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35687:117;;35558:254;;;;:::o;36129:307::-;36252:23;;:::i;:::-;36328:13;;;;;;;;;;;36315:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36300:96;;;36397:14;36413:7;36422:5;36300:128;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36293:135;;36129:307;;;;;:::o;23557:106::-;23095:10;23085:20;;:6;;;;;;;;;;:20;;;23077:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23645:10:::1;23633:9;;:22;;;;;;;;;;;;;;;;;;23557:106:::0;:::o;34069:257::-;34169:14;34236:13;;;;;;;;;;;34223:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34208:86;;;34295:14;34311:6;34208:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34201:117;;34069:257;;;;:::o;31491:480::-;31584:13;31608:18;31637:20;31668:16;31695:19;31725:15;31751:19;31781:15;31807;31833:12;31856:14;31914:13;;;;;;;;;;;31901:36;;;31938:14;31954:8;31901:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31894:69;;;;;;;;;;;;;;;;;;;;;;31491:480;;;;;;;;;;;;;;:::o;23295:254::-;23095:10;23085:20;;:6;;;;;;;;;;:20;;;23077:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23426:1:::1;23401:27;;:13;;;;;;;;;;;:27;;;23393:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23485:14;23469:13;;:30;;;;;;;;;;;;;;;;;;23526:15;23510:13;;:31;;;;;;;;;;;;;;;;;;23295:254:::0;;:::o;33536:251::-;33623:24;;:::i;:::-;33700:13;;;;;;;;;;;33687:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33672:89;;;33762:14;33672:105;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33665:112;;33536:251;;;:::o;32215:269::-;32315:23;;:::i;:::-;32391:13;;;;;;;;;;;32378:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32363:90;;;32454:14;32470:5;32363:113;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32356:120;;32215:269;;;;:::o;30484:365::-;30567:7;30592:15;106:42;30622:30;;:14;:30;;;30618:199;;;30688:7;:15;;;30678:25;;30618:199;;;30771:14;30764:32;;;30797:7;30764:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30754:51;;30618:199;30834:7;30827:14;;;30484:365;;;;:::o;24182:161::-;24242:11;24293:13;;;;;;;;;;;24278:55;;;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24271:64;;24182:161;:::o;24607:1312::-;24710:15;24768:1;24747:23;;:9;;;;;;;;;;;:23;;;24743:88;;24787:9;;;;;;;;;;;24772:31;;;24804:14;24820:10;24772:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24743:88;106:42;24852:30;;:14;:30;;;;24844:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;24942:1;24926:13;:17;24918:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24985:18;25021:13;;;;;;;;;;;25006:38;;;25045:14;25006:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24985:75;;25096:1;25079:5;:14;;;:18;25071:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;25168:1;25159:6;:10;25151:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;25199:27;25235:5;:20;;;25229:2;:26;;;;:::i;:::-;25199:56;;25266:20;25289:70;25302:35;25315:13;25330:6;25302:12;:35::i;:::-;25339:19;25289:12;:70::i;:::-;25266:93;;266:2;25405;:19;;;;:::i;:::-;25396:6;:28;;;;:::i;:::-;25380:12;:44;;25372:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;25487:90;186:42;25537:10;25549:13;;;;;;;;;;;25564:12;25487:26;:90::i;:::-;25613:13;;;;;;;;;;;25600:39;;;25640:14;25656:10;25668:6;25676:13;25691:12;25705:1;25708:19;25600:128;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25590:138;;25753:1;25743:7;:11;25739:146;;;25793:13;;;;;;;;;;;25780:47;;;25828:14;25844:7;25853:19;25780:93;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25739:146;25897:14;;;24607:1312;;;;;:::o;3505:471::-;3563:7;3813:1;3808;:6;3804:47;;;3838:1;3831:8;;;;3804:47;3863:9;3879:1;3875;:5;;;;:::i;:::-;3863:17;;3908:1;3903;3899;:5;;;;:::i;:::-;:10;3891:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3967:1;3960:8;;;3505:471;;;;;:::o;3984:132::-;4042:7;4069:39;4073:1;4076;4069:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;4062:46;;3984:132;;;;:::o;15484:205::-;15585:96;15605:5;15635:27;;;15664:4;15670:2;15674:5;15612:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15585:19;:96::i;:::-;15484:205;;;;:::o;6237:197::-;6307:12;6324:2;:7;;6340:5;6357:1;6347:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6324:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6306:54;;;6379:7;6371:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;6295:139;6237:197;;:::o;4124:278::-;4210:7;4242:1;4238;:5;4245:12;4230:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4269:9;4285:1;4281;:5;;;;:::i;:::-;4269:17;;4393:1;4386:8;;;4124:278;;;;;:::o;17604:761::-;18028:23;18054:69;18082:4;18054:69;;;;;;;;;;;;;;;;;18062:5;18054:27;;;;:69;;;;;:::i;:::-;18028:95;;18158:1;18138:10;:17;:21;18134:224;;;18280:10;18269:30;;;;;;;;;;;;:::i;:::-;18261:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;18134:224;17674:691;17604:761;;:::o;10040:195::-;10143:12;10175:52;10197:6;10205:4;10211:1;10214:12;10175:21;:52::i;:::-;10168:59;;10040:195;;;;;:::o;11092:530::-;11219:12;11277:5;11252:21;:30;;11244:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;11344:18;11355:6;11344:10;:18::i;:::-;11336:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;11470:12;11484:23;11511:6;:11;;11531:5;11539:4;11511:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11469:75;;;;11562:52;11580:7;11589:10;11601:12;11562:17;:52::i;:::-;11555:59;;;;11092:530;;;;;;:::o;7122:422::-;7182:4;7390:12;7501:7;7489:20;7481:28;;7535:1;7528:4;:8;7521:15;;;7122:422;;;:::o;13632:742::-;13747:12;13776:7;13772:595;;;13807:10;13800:17;;;;13772:595;13941:1;13921:10;:17;:21;13917:439;;;14184:10;14178:17;14245:15;14232:10;14228:2;14224:19;14217:44;13917:439;14327:12;14320:20;;;;;;;;;;;:::i;:::-;;;;;;;;13632:742;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:106::-;1243:6;1271:4;1261:14;;1176:106;;;:::o;1288:145::-;1387:11;1424:3;1409:18;;1288:145;;;;:::o;1439:100::-;1506:4;1529:3;1521:11;;1439:100;;;:::o;1545:77::-;1582:7;1611:5;1600:16;;1545:77;;;:::o;1628:108::-;1705:24;1723:5;1705:24;:::i;:::-;1700:3;1693:37;1628:108;;:::o;1742:179::-;1811:10;1832:46;1874:3;1866:6;1832:46;:::i;:::-;1910:4;1905:3;1901:14;1887:28;;1742:179;;;;:::o;1927:113::-;1997:4;2029;2024:3;2020:14;2012:22;;1927:113;;;:::o;2082:706::-;2222:54;2270:5;2222:54;:::i;:::-;2292:86;2371:6;2366:3;2292:86;:::i;:::-;2285:93;;2402:56;2452:5;2402:56;:::i;:::-;2481:7;2512:1;2497:284;2522:6;2519:1;2516:13;2497:284;;;2598:6;2592:13;2625:63;2684:3;2669:13;2625:63;:::i;:::-;2618:70;;2711:60;2764:6;2711:60;:::i;:::-;2701:70;;2557:224;2544:1;2541;2537:9;2532:14;;2497:284;;;2501:14;2198:590;;;2082:706;;:::o;2794:324::-;2937:4;2975;2964:9;2960:20;2952:28;;2990:121;3108:1;3097:9;3093:17;3084:6;2990:121;:::i;:::-;2794:324;;;;:::o;3124:118::-;3211:24;3229:5;3211:24;:::i;:::-;3206:3;3199:37;3124:118;;:::o;3248:222::-;3341:4;3379:2;3368:9;3364:18;3356:26;;3392:71;3460:1;3449:9;3445:17;3436:6;3392:71;:::i;:::-;3248:222;;;;:::o;3476:122::-;3549:24;3567:5;3549:24;:::i;:::-;3542:5;3539:35;3529:63;;3588:1;3585;3578:12;3529:63;3476:122;:::o;3604:139::-;3650:5;3688:6;3675:20;3666:29;;3704:33;3731:5;3704:33;:::i;:::-;3604:139;;;;:::o;3749:474::-;3817:6;3825;3874:2;3862:9;3853:7;3849:23;3845:32;3842:119;;;3880:79;;:::i;:::-;3842:119;4000:1;4025:53;4070:7;4061:6;4050:9;4046:22;4025:53;:::i;:::-;4015:63;;3971:117;4127:2;4153:53;4198:7;4189:6;4178:9;4174:22;4153:53;:::i;:::-;4143:63;;4098:118;3749:474;;;;;:::o;4229:114::-;4296:6;4330:5;4324:12;4314:22;;4229:114;;;:::o;4349:184::-;4448:11;4482:6;4477:3;4470:19;4522:4;4517:3;4513:14;4498:29;;4349:184;;;;:::o;4539:132::-;4606:4;4629:3;4621:11;;4659:4;4654:3;4650:14;4642:22;;4539:132;;;:::o;4677:113::-;4747:4;4779;4774:3;4770:14;4762:22;;4677:113;;;:::o;4826:732::-;4945:3;4974:54;5022:5;4974:54;:::i;:::-;5044:86;5123:6;5118:3;5044:86;:::i;:::-;5037:93;;5154:56;5204:5;5154:56;:::i;:::-;5233:7;5264:1;5249:284;5274:6;5271:1;5268:13;5249:284;;;5350:6;5344:13;5377:63;5436:3;5421:13;5377:63;:::i;:::-;5370:70;;5463:60;5516:6;5463:60;:::i;:::-;5453:70;;5309:224;5296:1;5293;5289:9;5284:14;;5249:284;;;5253:14;5549:3;5542:10;;4950:608;;;4826:732;;;;:::o;5564:373::-;5707:4;5745:2;5734:9;5730:18;5722:26;;5794:9;5788:4;5784:20;5780:1;5769:9;5765:17;5758:47;5822:108;5925:4;5916:6;5822:108;:::i;:::-;5814:116;;5564:373;;;;:::o;5943:619::-;6020:6;6028;6036;6085:2;6073:9;6064:7;6060:23;6056:32;6053:119;;;6091:79;;:::i;:::-;6053:119;6211:1;6236:53;6281:7;6272:6;6261:9;6257:22;6236:53;:::i;:::-;6226:63;;6182:117;6338:2;6364:53;6409:7;6400:6;6389:9;6385:22;6364:53;:::i;:::-;6354:63;;6309:118;6466:2;6492:53;6537:7;6528:6;6517:9;6513:22;6492:53;:::i;:::-;6482:63;;6437:118;5943:619;;;;;:::o;6568:329::-;6627:6;6676:2;6664:9;6655:7;6651:23;6647:32;6644:119;;;6682:79;;:::i;:::-;6644:119;6802:1;6827:53;6872:7;6863:6;6852:9;6848:22;6827:53;:::i;:::-;6817:63;;6773:117;6568:329;;;;:::o;6903:105::-;6969:6;6997:4;6987:14;;6903:105;;;:::o;7014:144::-;7112:11;7149:3;7134:18;;7014:144;;;;:::o;7164:99::-;7230:4;7253:3;7245:11;;7164:99;;;:::o;7269:108::-;7346:24;7364:5;7346:24;:::i;:::-;7341:3;7334:37;7269:108;;:::o;7383:179::-;7452:10;7473:46;7515:3;7507:6;7473:46;:::i;:::-;7551:4;7546:3;7542:14;7528:28;;7383:179;;;;:::o;7568:112::-;7637:4;7669;7664:3;7660:14;7652:22;;7568:112;;;:::o;7720:700::-;7858:53;7905:5;7858:53;:::i;:::-;7927:85;8005:6;8000:3;7927:85;:::i;:::-;7920:92;;8036:55;8085:5;8036:55;:::i;:::-;8114:7;8145:1;8130:283;8155:6;8152:1;8149:13;8130:283;;;8231:6;8225:13;8258:63;8317:3;8302:13;8258:63;:::i;:::-;8251:70;;8344:59;8396:6;8344:59;:::i;:::-;8334:69;;8190:223;8177:1;8174;8170:9;8165:14;;8130:283;;;8134:14;7834:586;;;7720:700;;:::o;8426:320::-;8567:4;8605;8594:9;8590:20;8582:28;;8620:119;8736:1;8725:9;8721:17;8712:6;8620:119;:::i;:::-;8426:320;;;;:::o;8752:105::-;8818:6;8846:4;8836:14;;8752:105;;;:::o;8863:144::-;8961:11;8998:3;8983:18;;8863:144;;;;:::o;9013:99::-;9079:4;9102:3;9094:11;;9013:99;;;:::o;9118:112::-;9187:4;9219;9214:3;9210:14;9202:22;;9118:112;;;:::o;9270:700::-;9408:53;9455:5;9408:53;:::i;:::-;9477:85;9555:6;9550:3;9477:85;:::i;:::-;9470:92;;9586:55;9635:5;9586:55;:::i;:::-;9664:7;9695:1;9680:283;9705:6;9702:1;9699:13;9680:283;;;9781:6;9775:13;9808:63;9867:3;9852:13;9808:63;:::i;:::-;9801:70;;9894:59;9946:6;9894:59;:::i;:::-;9884:69;;9740:223;9727:1;9724;9720:9;9715:14;;9680:283;;;9684:14;9384:586;;;9270:700;;:::o;9976:320::-;10117:4;10155;10144:9;10140:20;10132:28;;10170:119;10286:1;10275:9;10271:17;10262:6;10170:119;:::i;:::-;9976:320;;;;:::o;10302:1108::-;10619:4;10657:3;10646:9;10642:19;10634:27;;10671:71;10739:1;10728:9;10724:17;10715:6;10671:71;:::i;:::-;10752:72;10820:2;10809:9;10805:18;10796:6;10752:72;:::i;:::-;10834;10902:2;10891:9;10887:18;10878:6;10834:72;:::i;:::-;10916;10984:2;10973:9;10969:18;10960:6;10916:72;:::i;:::-;10998:73;11066:3;11055:9;11051:19;11042:6;10998:73;:::i;:::-;11081;11149:3;11138:9;11134:19;11125:6;11081:73;:::i;:::-;11164;11232:3;11221:9;11217:19;11208:6;11164:73;:::i;:::-;11247;11315:3;11304:9;11300:19;11291:6;11247:73;:::i;:::-;11330;11398:3;11387:9;11383:19;11374:6;11330:73;:::i;:::-;10302:1108;;;;;;;;;;;;:::o;11416:99::-;11468:6;11502:5;11496:12;11486:22;;11416:99;;;:::o;11521:169::-;11605:11;11639:6;11634:3;11627:19;11679:4;11674:3;11670:14;11655:29;;11521:169;;;;:::o;11696:307::-;11764:1;11774:113;11788:6;11785:1;11782:13;11774:113;;;11873:1;11868:3;11864:11;11858:18;11854:1;11849:3;11845:11;11838:39;11810:2;11807:1;11803:10;11798:15;;11774:113;;;11905:6;11902:1;11899:13;11896:101;;;11985:1;11976:6;11971:3;11967:16;11960:27;11896:101;11745:258;11696:307;;;:::o;12009:102::-;12050:6;12101:2;12097:7;12092:2;12085:5;12081:14;12077:28;12067:38;;12009:102;;;:::o;12117:364::-;12205:3;12233:39;12266:5;12233:39;:::i;:::-;12288:71;12352:6;12347:3;12288:71;:::i;:::-;12281:78;;12368:52;12413:6;12408:3;12401:4;12394:5;12390:16;12368:52;:::i;:::-;12445:29;12467:6;12445:29;:::i;:::-;12440:3;12436:39;12429:46;;12209:272;12117:364;;;;:::o;12487:118::-;12574:24;12592:5;12574:24;:::i;:::-;12569:3;12562:37;12487:118;;:::o;12611:846::-;12856:4;12894:3;12883:9;12879:19;12871:27;;12944:9;12938:4;12934:20;12930:1;12919:9;12915:17;12908:47;12972:78;13045:4;13036:6;12972:78;:::i;:::-;12964:86;;13097:9;13091:4;13087:20;13082:2;13071:9;13067:18;13060:48;13125:78;13198:4;13189:6;13125:78;:::i;:::-;13117:86;;13213:72;13281:2;13270:9;13266:18;13257:6;13213:72;:::i;:::-;13295;13363:2;13352:9;13348:18;13339:6;13295:72;:::i;:::-;13377:73;13445:3;13434:9;13430:19;13421:6;13377:73;:::i;:::-;12611:846;;;;;;;;:::o;13463:474::-;13531:6;13539;13588:2;13576:9;13567:7;13563:23;13559:32;13556:119;;;13594:79;;:::i;:::-;13556:119;13714:1;13739:53;13784:7;13775:6;13764:9;13760:22;13739:53;:::i;:::-;13729:63;;13685:117;13841:2;13867:53;13912:7;13903:6;13892:9;13888:22;13867:53;:::i;:::-;13857:63;;13812:118;13463:474;;;;;:::o;13943:222::-;14036:4;14074:2;14063:9;14059:18;14051:26;;14087:71;14155:1;14144:9;14140:17;14131:6;14087:71;:::i;:::-;13943:222;;;;:::o;14171:90::-;14205:7;14248:5;14241:13;14234:21;14223:32;;14171:90;;;:::o;14267:109::-;14348:21;14363:5;14348:21;:::i;:::-;14343:3;14336:34;14267:109;;:::o;14382:210::-;14469:4;14507:2;14496:9;14492:18;14484:26;;14520:65;14582:1;14571:9;14567:17;14558:6;14520:65;:::i;:::-;14382:210;;;;:::o;14598:474::-;14666:6;14674;14723:2;14711:9;14702:7;14698:23;14694:32;14691:119;;;14729:79;;:::i;:::-;14691:119;14849:1;14874:53;14919:7;14910:6;14899:9;14895:22;14874:53;:::i;:::-;14864:63;;14820:117;14976:2;15002:53;15047:7;15038:6;15027:9;15023:22;15002:53;:::i;:::-;14992:63;;14947:118;14598:474;;;;;:::o;15078:619::-;15155:6;15163;15171;15220:2;15208:9;15199:7;15195:23;15191:32;15188:119;;;15226:79;;:::i;:::-;15188:119;15346:1;15371:53;15416:7;15407:6;15396:9;15392:22;15371:53;:::i;:::-;15361:63;;15317:117;15473:2;15499:53;15544:7;15535:6;15524:9;15520:22;15499:53;:::i;:::-;15489:63;;15444:118;15601:2;15627:53;15672:7;15663:6;15652:9;15648:22;15627:53;:::i;:::-;15617:63;;15572:118;15078:619;;;;;:::o;15703:::-;15780:6;15788;15796;15845:2;15833:9;15824:7;15820:23;15816:32;15813:119;;;15851:79;;:::i;:::-;15813:119;15971:1;15996:53;16041:7;16032:6;16021:9;16017:22;15996:53;:::i;:::-;15986:63;;15942:117;16098:2;16124:53;16169:7;16160:6;16149:9;16145:22;16124:53;:::i;:::-;16114:63;;16069:118;16226:2;16252:53;16297:7;16288:6;16277:9;16273:22;16252:53;:::i;:::-;16242:63;;16197:118;15703:619;;;;;:::o;16328:105::-;16394:6;16422:4;16412:14;;16328:105;;;:::o;16439:144::-;16537:11;16574:3;16559:18;;16439:144;;;;:::o;16589:99::-;16655:4;16678:3;16670:11;;16589:99;;;:::o;16694:112::-;16763:4;16795;16790:3;16786:14;16778:22;;16694:112;;;:::o;16846:700::-;16984:53;17031:5;16984:53;:::i;:::-;17053:85;17131:6;17126:3;17053:85;:::i;:::-;17046:92;;17162:55;17211:5;17162:55;:::i;:::-;17240:7;17271:1;17256:283;17281:6;17278:1;17275:13;17256:283;;;17357:6;17351:13;17384:63;17443:3;17428:13;17384:63;:::i;:::-;17377:70;;17470:59;17522:6;17470:59;:::i;:::-;17460:69;;17316:223;17303:1;17300;17296:9;17291:14;;17256:283;;;17260:14;16960:586;;;16846:700;;:::o;17552:319::-;17693:4;17731:3;17720:9;17716:19;17708:27;;17745:119;17861:1;17850:9;17846:17;17837:6;17745:119;:::i;:::-;17552:319;;;;:::o;17877:86::-;17912:7;17952:4;17945:5;17941:16;17930:27;;17877:86;;;:::o;17969:112::-;18052:22;18068:5;18052:22;:::i;:::-;18047:3;18040:35;17969:112;;:::o;18087:1316::-;18453:4;18491:3;18480:9;18476:19;18468:27;;18505:71;18573:1;18562:9;18558:17;18549:6;18505:71;:::i;:::-;18586:72;18654:2;18643:9;18639:18;18630:6;18586:72;:::i;:::-;18668;18736:2;18725:9;18721:18;18712:6;18668:72;:::i;:::-;18750;18818:2;18807:9;18803:18;18794:6;18750:72;:::i;:::-;18832:73;18900:3;18889:9;18885:19;18876:6;18832:73;:::i;:::-;18915;18983:3;18972:9;18968:19;18959:6;18915:73;:::i;:::-;18998;19066:3;19055:9;19051:19;19042:6;18998:73;:::i;:::-;19081;19149:3;19138:9;19134:19;19125:6;19081:73;:::i;:::-;19164:69;19228:3;19217:9;19213:19;19204:6;19164:69;:::i;:::-;19243;19307:3;19296:9;19292:19;19283:6;19243:69;:::i;:::-;19322:74;19391:3;19380:9;19376:19;19366:7;19322:74;:::i;:::-;18087:1316;;;;;;;;;;;;;;:::o;19409:143::-;19466:5;19497:6;19491:13;19482:22;;19513:33;19540:5;19513:33;:::i;:::-;19409:143;;;;:::o;19558:351::-;19628:6;19677:2;19665:9;19656:7;19652:23;19648:32;19645:119;;;19683:79;;:::i;:::-;19645:119;19803:1;19828:64;19884:7;19875:6;19864:9;19860:22;19828:64;:::i;:::-;19818:74;;19774:128;19558:351;;;;:::o;19915:117::-;20024:1;20021;20014:12;20038:180;20086:77;20083:1;20076:88;20183:4;20180:1;20173:15;20207:4;20204:1;20197:15;20224:281;20307:27;20329:4;20307:27;:::i;:::-;20299:6;20295:40;20437:6;20425:10;20422:22;20401:18;20389:10;20386:34;20383:62;20380:88;;;20448:18;;:::i;:::-;20380:88;20488:10;20484:2;20477:22;20267:238;20224:281;;:::o;20511:129::-;20545:6;20572:20;;:::i;:::-;20562:30;;20601:33;20629:4;20621:6;20601:33;:::i;:::-;20511:129;;;:::o;20646:251::-;20723:4;20813:18;20805:6;20802:30;20799:56;;;20835:18;;:::i;:::-;20799:56;20885:4;20877:6;20873:17;20865:25;;20646:251;;;:::o;20903:117::-;21012:1;21009;21002:12;21026:143;21083:5;21114:6;21108:13;21099:22;;21130:33;21157:5;21130:33;:::i;:::-;21026:143;;;;:::o;21195:669::-;21302:5;21327:81;21343:64;21400:6;21343:64;:::i;:::-;21327:81;:::i;:::-;21318:90;;21428:5;21481:4;21473:6;21469:17;21461:6;21457:30;21510:3;21502:6;21499:15;21496:122;;;21529:79;;:::i;:::-;21496:122;21644:6;21627:231;21661:6;21656:3;21653:15;21627:231;;;21736:3;21765:48;21809:3;21797:10;21765:48;:::i;:::-;21760:3;21753:61;21843:4;21838:3;21834:14;21827:21;;21703:155;21687:4;21682:3;21678:14;21671:21;;21627:231;;;21631:21;21308:556;;21195:669;;;;;:::o;21890:365::-;21972:5;22021:3;22014:4;22006:6;22002:17;21998:27;21988:122;;22029:79;;:::i;:::-;21988:122;22133:4;22155:94;22245:3;22237:6;22229;22155:94;:::i;:::-;22146:103;;21978:277;21890:365;;;;:::o;22261:403::-;22356:6;22405:4;22393:9;22384:7;22380:23;22376:34;22373:121;;;22413:79;;:::i;:::-;22373:121;22533:1;22558:89;22639:7;22630:6;22619:9;22615:22;22558:89;:::i;:::-;22548:99;;22504:153;22261:403;;;;:::o;22670:351::-;22740:6;22789:2;22777:9;22768:7;22764:23;22760:32;22757:119;;;22795:79;;:::i;:::-;22757:119;22915:1;22940:64;22996:7;22987:6;22976:9;22972:22;22940:64;:::i;:::-;22930:74;;22886:128;22670:351;;;;:::o;23027:332::-;23148:4;23186:2;23175:9;23171:18;23163:26;;23199:71;23267:1;23256:9;23252:17;23243:6;23199:71;:::i;:::-;23280:72;23348:2;23337:9;23333:18;23324:6;23280:72;:::i;:::-;23027:332;;;;;:::o;23365:311::-;23442:4;23532:18;23524:6;23521:30;23518:56;;;23554:18;;:::i;:::-;23518:56;23604:4;23596:6;23592:17;23584:25;;23664:4;23658;23654:15;23646:23;;23365:311;;;:::o;23699:732::-;23806:5;23831:81;23847:64;23904:6;23847:64;:::i;:::-;23831:81;:::i;:::-;23822:90;;23932:5;23961:6;23954:5;23947:21;23995:4;23988:5;23984:16;23977:23;;24048:4;24040:6;24036:17;24028:6;24024:30;24077:3;24069:6;24066:15;24063:122;;;24096:79;;:::i;:::-;24063:122;24211:6;24194:231;24228:6;24223:3;24220:15;24194:231;;;24303:3;24332:48;24376:3;24364:10;24332:48;:::i;:::-;24327:3;24320:61;24410:4;24405:3;24401:14;24394:21;;24270:155;24254:4;24249:3;24245:14;24238:21;;24194:231;;;24198:21;23812:619;;23699:732;;;;;:::o;24454:385::-;24536:5;24585:3;24578:4;24570:6;24566:17;24562:27;24552:122;;24593:79;;:::i;:::-;24552:122;24703:6;24697:13;24728:105;24829:3;24821:6;24814:4;24806:6;24802:17;24728:105;:::i;:::-;24719:114;;24542:297;24454:385;;;;:::o;24845:554::-;24940:6;24989:2;24977:9;24968:7;24964:23;24960:32;24957:119;;;24995:79;;:::i;:::-;24957:119;25136:1;25125:9;25121:17;25115:24;25166:18;25158:6;25155:30;25152:117;;;25188:79;;:::i;:::-;25152:117;25293:89;25374:7;25365:6;25354:9;25350:22;25293:89;:::i;:::-;25283:99;;25086:306;24845:554;;;;:::o;25405:332::-;25526:4;25564:2;25553:9;25549:18;25541:26;;25577:71;25645:1;25634:9;25630:17;25621:6;25577:71;:::i;:::-;25658:72;25726:2;25715:9;25711:18;25702:6;25658:72;:::i;:::-;25405:332;;;;;:::o;25743:170::-;25883:22;25879:1;25871:6;25867:14;25860:46;25743:170;:::o;25919:366::-;26061:3;26082:67;26146:2;26141:3;26082:67;:::i;:::-;26075:74;;26158:93;26247:3;26158:93;:::i;:::-;26276:2;26271:3;26267:12;26260:19;;25919:366;;;:::o;26291:419::-;26457:4;26495:2;26484:9;26480:18;26472:26;;26544:9;26538:4;26534:20;26530:1;26519:9;26515:17;26508:47;26572:131;26698:4;26572:131;:::i;:::-;26564:139;;26291:419;;;:::o;26716:174::-;26856:26;26852:1;26844:6;26840:14;26833:50;26716:174;:::o;26896:366::-;27038:3;27059:67;27123:2;27118:3;27059:67;:::i;:::-;27052:74;;27135:93;27224:3;27135:93;:::i;:::-;27253:2;27248:3;27244:12;27237:19;;26896:366;;;:::o;27268:419::-;27434:4;27472:2;27461:9;27457:18;27449:26;;27521:9;27515:4;27511:20;27507:1;27496:9;27492:17;27485:47;27549:131;27675:4;27549:131;:::i;:::-;27541:139;;27268:419;;;:::o;27693:117::-;27802:1;27799;27792:12;27816:117;27925:1;27922;27915:12;27939:117;28048:1;28045;28038:12;28062:308;28124:4;28214:18;28206:6;28203:30;28200:56;;;28236:18;;:::i;:::-;28200:56;28274:29;28296:6;28274:29;:::i;:::-;28266:37;;28358:4;28352;28348:15;28340:23;;28062:308;;;:::o;28376:421::-;28465:5;28490:66;28506:49;28548:6;28506:49;:::i;:::-;28490:66;:::i;:::-;28481:75;;28579:6;28572:5;28565:21;28617:4;28610:5;28606:16;28655:3;28646:6;28641:3;28637:16;28634:25;28631:112;;;28662:79;;:::i;:::-;28631:112;28752:39;28784:6;28779:3;28774;28752:39;:::i;:::-;28471:326;28376:421;;;;;:::o;28817:355::-;28884:5;28933:3;28926:4;28918:6;28914:17;28910:27;28900:122;;28941:79;;:::i;:::-;28900:122;29051:6;29045:13;29076:90;29162:3;29154:6;29147:4;29139:6;29135:17;29076:90;:::i;:::-;29067:99;;28890:282;28817:355;;;;:::o;29198:1473::-;29281:5;29325:4;29313:9;29308:3;29304:19;29300:30;29297:117;;;29333:79;;:::i;:::-;29297:117;29432:21;29448:4;29432:21;:::i;:::-;29423:30;;29535:1;29524:9;29520:17;29514:24;29565:18;29557:6;29554:30;29551:117;;;29587:79;;:::i;:::-;29551:117;29707:70;29773:3;29764:6;29753:9;29749:22;29707:70;:::i;:::-;29700:4;29693:5;29689:16;29682:96;29463:326;29869:2;29858:9;29854:18;29848:25;29900:18;29892:6;29889:30;29886:117;;;29922:79;;:::i;:::-;29886:117;30042:70;30108:3;30099:6;30088:9;30084:22;30042:70;:::i;:::-;30035:4;30028:5;30024:16;30017:96;29799:325;30192:2;30233:60;30289:3;30280:6;30269:9;30265:22;30233:60;:::i;:::-;30226:4;30219:5;30215:16;30208:86;30134:171;30368:2;30409:60;30465:3;30456:6;30445:9;30441:22;30409:60;:::i;:::-;30402:4;30395:5;30391:16;30384:86;30315:166;30550:3;30592:60;30648:3;30639:6;30628:9;30624:22;30592:60;:::i;:::-;30585:4;30578:5;30574:16;30567:86;30491:173;29198:1473;;;;:::o;30677:550::-;30770:6;30819:2;30807:9;30798:7;30794:23;30790:32;30787:119;;;30825:79;;:::i;:::-;30787:119;30966:1;30955:9;30951:17;30945:24;30996:18;30988:6;30985:30;30982:117;;;31018:79;;:::i;:::-;30982:117;31123:87;31202:7;31193:6;31182:9;31178:22;31123:87;:::i;:::-;31113:97;;30916:304;30677:550;;;;:::o;31233:225::-;31373:34;31369:1;31361:6;31357:14;31350:58;31442:8;31437:2;31429:6;31425:15;31418:33;31233:225;:::o;31464:366::-;31606:3;31627:67;31691:2;31686:3;31627:67;:::i;:::-;31620:74;;31703:93;31792:3;31703:93;:::i;:::-;31821:2;31816:3;31812:12;31805:19;;31464:366;;;:::o;31836:419::-;32002:4;32040:2;32029:9;32025:18;32017:26;;32089:9;32083:4;32079:20;32075:1;32064:9;32060:17;32053:47;32117:131;32243:4;32117:131;:::i;:::-;32109:139;;31836:419;;;:::o;32261:162::-;32401:14;32397:1;32389:6;32385:14;32378:38;32261:162;:::o;32429:366::-;32571:3;32592:67;32656:2;32651:3;32592:67;:::i;:::-;32585:74;;32668:93;32757:3;32668:93;:::i;:::-;32786:2;32781:3;32777:12;32770:19;;32429:366;;;:::o;32801:419::-;32967:4;33005:2;32994:9;32990:18;32982:26;;33054:9;33048:4;33044:20;33040:1;33029:9;33025:17;33018:47;33082:131;33208:4;33082:131;:::i;:::-;33074:139;;32801:419;;;:::o;33226:180::-;33274:77;33271:1;33264:88;33371:4;33368:1;33361:15;33395:4;33392:1;33385:15;33412:102;33454:8;33501:5;33498:1;33494:13;33473:34;;33412:102;;;:::o;33520:848::-;33581:5;33588:4;33612:6;33603:15;;33636:5;33627:14;;33650:712;33671:1;33661:8;33658:15;33650:712;;;33766:4;33761:3;33757:14;33751:4;33748:24;33745:50;;;33775:18;;:::i;:::-;33745:50;33825:1;33815:8;33811:16;33808:451;;;34240:4;34233:5;34229:16;34220:25;;33808:451;34290:4;34284;34280:15;34272:23;;34320:32;34343:8;34320:32;:::i;:::-;34308:44;;33650:712;;;33520:848;;;;;;;:::o;34374:1073::-;34428:5;34619:8;34609:40;;34640:1;34631:10;;34642:5;;34609:40;34668:4;34658:36;;34685:1;34676:10;;34687:5;;34658:36;34754:4;34802:1;34797:27;;;;34838:1;34833:191;;;;34747:277;;34797:27;34815:1;34806:10;;34817:5;;;34833:191;34878:3;34868:8;34865:17;34862:43;;;34885:18;;:::i;:::-;34862:43;34934:8;34931:1;34927:16;34918:25;;34969:3;34962:5;34959:14;34956:40;;;34976:18;;:::i;:::-;34956:40;35009:5;;;34747:277;;35133:2;35123:8;35120:16;35114:3;35108:4;35105:13;35101:36;35083:2;35073:8;35070:16;35065:2;35059:4;35056:12;35052:35;35036:111;35033:246;;;35189:8;35183:4;35179:19;35170:28;;35224:3;35217:5;35214:14;35211:40;;;35231:18;;:::i;:::-;35211:40;35264:5;;35033:246;35304:42;35342:3;35332:8;35326:4;35323:1;35304:42;:::i;:::-;35289:57;;;;35378:4;35373:3;35369:14;35362:5;35359:25;35356:51;;;35387:18;;:::i;:::-;35356:51;35436:4;35429:5;35425:16;35416:25;;34374:1073;;;;;;:::o;35453:285::-;35513:5;35537:23;35555:4;35537:23;:::i;:::-;35529:31;;35581:27;35599:8;35581:27;:::i;:::-;35569:39;;35627:104;35664:66;35654:8;35648:4;35627:104;:::i;:::-;35618:113;;35453:285;;;;:::o;35744:348::-;35784:7;35807:20;35825:1;35807:20;:::i;:::-;35802:25;;35841:20;35859:1;35841:20;:::i;:::-;35836:25;;36029:1;35961:66;35957:74;35954:1;35951:81;35946:1;35939:9;35932:17;35928:105;35925:131;;;36036:18;;:::i;:::-;35925:131;36084:1;36081;36077:9;36066:20;;35744:348;;;;:::o;36098:232::-;36238:34;36234:1;36226:6;36222:14;36215:58;36307:15;36302:2;36294:6;36290:15;36283:40;36098:232;:::o;36336:366::-;36478:3;36499:67;36563:2;36558:3;36499:67;:::i;:::-;36492:74;;36575:93;36664:3;36575:93;:::i;:::-;36693:2;36688:3;36684:12;36677:19;;36336:366;;;:::o;36708:419::-;36874:4;36912:2;36901:9;36897:18;36889:26;;36961:9;36955:4;36951:20;36947:1;36936:9;36932:17;36925:47;36989:131;37115:4;36989:131;:::i;:::-;36981:139;;36708:419;;;:::o;37133:85::-;37178:7;37207:5;37196:16;;37133:85;;;:::o;37224:60::-;37252:3;37273:5;37266:12;;37224:60;;;:::o;37290:154::-;37346:9;37379:59;37395:42;37404:32;37430:5;37404:32;:::i;:::-;37395:42;:::i;:::-;37379:59;:::i;:::-;37366:72;;37290:154;;;:::o;37450:143::-;37543:43;37580:5;37543:43;:::i;:::-;37538:3;37531:56;37450:143;;:::o;37599:898::-;37866:4;37904:3;37893:9;37889:19;37881:27;;37918:71;37986:1;37975:9;37971:17;37962:6;37918:71;:::i;:::-;37999:72;38067:2;38056:9;38052:18;38043:6;37999:72;:::i;:::-;38081;38149:2;38138:9;38134:18;38125:6;38081:72;:::i;:::-;38163;38231:2;38220:9;38216:18;38207:6;38163:72;:::i;:::-;38245:73;38313:3;38302:9;38298:19;38289:6;38245:73;:::i;:::-;38328:79;38402:3;38391:9;38387:19;38378:6;38328:79;:::i;:::-;38417:73;38485:3;38474:9;38470:19;38461:6;38417:73;:::i;:::-;37599:898;;;;;;;;;;:::o;38503:442::-;38652:4;38690:2;38679:9;38675:18;38667:26;;38703:71;38771:1;38760:9;38756:17;38747:6;38703:71;:::i;:::-;38784:72;38852:2;38841:9;38837:18;38828:6;38784:72;:::i;:::-;38866;38934:2;38923:9;38919:18;38910:6;38866:72;:::i;:::-;38503:442;;;;;;:::o;38951:250::-;39027:4;39117:18;39109:6;39106:30;39103:56;;;39139:18;;:::i;:::-;39103:56;39189:4;39181:6;39177:17;39169:25;;38951:250;;;:::o;39226:667::-;39332:5;39357:80;39373:63;39429:6;39373:63;:::i;:::-;39357:80;:::i;:::-;39348:89;;39457:5;39510:4;39502:6;39498:17;39490:6;39486:30;39539:3;39531:6;39528:15;39525:122;;;39558:79;;:::i;:::-;39525:122;39673:6;39656:231;39690:6;39685:3;39682:15;39656:231;;;39765:3;39794:48;39838:3;39826:10;39794:48;:::i;:::-;39789:3;39782:61;39872:4;39867:3;39863:14;39856:21;;39732:155;39716:4;39711:3;39707:14;39700:21;;39656:231;;;39660:21;39338:555;;39226:667;;;;;:::o;39918:363::-;39999:5;40048:3;40041:4;40033:6;40029:17;40025:27;40015:122;;40056:79;;:::i;:::-;40015:122;40160:4;40182:93;40271:3;40263:6;40255;40182:93;:::i;:::-;40173:102;;40005:276;39918:363;;;;:::o;40287:401::-;40381:6;40430:4;40418:9;40409:7;40405:23;40401:34;40398:121;;;40438:79;;:::i;:::-;40398:121;40558:1;40583:88;40663:7;40654:6;40643:9;40639:22;40583:88;:::i;:::-;40573:98;;40529:152;40287:401;;;;:::o;40694:250::-;40770:4;40860:18;40852:6;40849:30;40846:56;;;40882:18;;:::i;:::-;40846:56;40932:4;40924:6;40920:17;40912:25;;40694:250;;;:::o;40969:667::-;41075:5;41100:80;41116:63;41172:6;41116:63;:::i;:::-;41100:80;:::i;:::-;41091:89;;41200:5;41253:4;41245:6;41241:17;41233:6;41229:30;41282:3;41274:6;41271:15;41268:122;;;41301:79;;:::i;:::-;41268:122;41416:6;41399:231;41433:6;41428:3;41425:15;41399:231;;;41508:3;41537:48;41581:3;41569:10;41537:48;:::i;:::-;41532:3;41525:61;41615:4;41610:3;41606:14;41599:21;;41475:155;41459:4;41454:3;41450:14;41443:21;;41399:231;;;41403:21;41081:555;;40969:667;;;;;:::o;41661:363::-;41742:5;41791:3;41784:4;41776:6;41772:17;41768:27;41758:122;;41799:79;;:::i;:::-;41758:122;41903:4;41925:93;42014:3;42006:6;41998;41925:93;:::i;:::-;41916:102;;41748:276;41661:363;;;;:::o;42030:401::-;42124:6;42173:4;42161:9;42152:7;42148:23;42144:34;42141:121;;;42181:79;;:::i;:::-;42141:121;42301:1;42326:88;42406:7;42397:6;42386:9;42382:22;42326:88;:::i;:::-;42316:98;;42272:152;42030:401;;;;:::o;42437:1605::-;42579:6;42587;42595;42603;42611;42619;42627;42635;42643;42692:3;42680:9;42671:7;42667:23;42663:33;42660:120;;;42699:79;;:::i;:::-;42660:120;42819:1;42844:64;42900:7;42891:6;42880:9;42876:22;42844:64;:::i;:::-;42834:74;;42790:128;42957:2;42983:64;43039:7;43030:6;43019:9;43015:22;42983:64;:::i;:::-;42973:74;;42928:129;43096:2;43122:64;43178:7;43169:6;43158:9;43154:22;43122:64;:::i;:::-;43112:74;;43067:129;43235:2;43261:64;43317:7;43308:6;43297:9;43293:22;43261:64;:::i;:::-;43251:74;;43206:129;43374:3;43401:64;43457:7;43448:6;43437:9;43433:22;43401:64;:::i;:::-;43391:74;;43345:130;43514:3;43541:64;43597:7;43588:6;43577:9;43573:22;43541:64;:::i;:::-;43531:74;;43485:130;43654:3;43681:64;43737:7;43728:6;43717:9;43713:22;43681:64;:::i;:::-;43671:74;;43625:130;43794:3;43821:64;43877:7;43868:6;43857:9;43853:22;43821:64;:::i;:::-;43811:74;;43765:130;43934:3;43961:64;44017:7;44008:6;43997:9;43993:22;43961:64;:::i;:::-;43951:74;;43905:130;42437:1605;;;;;;;;;;;:::o;44048:442::-;44197:4;44235:2;44224:9;44220:18;44212:26;;44248:71;44316:1;44305:9;44301:17;44292:6;44248:71;:::i;:::-;44329:72;44397:2;44386:9;44382:18;44373:6;44329:72;:::i;:::-;44411;44479:2;44468:9;44464:18;44455:6;44411:72;:::i;:::-;44048:442;;;;;;:::o;44496:116::-;44566:21;44581:5;44566:21;:::i;:::-;44559:5;44556:32;44546:60;;44602:1;44599;44592:12;44546:60;44496:116;:::o;44618:137::-;44672:5;44703:6;44697:13;44688:22;;44719:30;44743:5;44719:30;:::i;:::-;44618:137;;;;:::o;44761:345::-;44828:6;44877:2;44865:9;44856:7;44852:23;44848:32;44845:119;;;44883:79;;:::i;:::-;44845:119;45003:1;45028:61;45081:7;45072:6;45061:9;45057:22;45028:61;:::i;:::-;45018:71;;44974:125;44761:345;;;;:::o;45112:85::-;45157:7;45186:5;45175:16;;45112:85;;;:::o;45203:154::-;45259:9;45292:59;45308:42;45317:32;45343:5;45317:32;:::i;:::-;45308:42;:::i;:::-;45292:59;:::i;:::-;45279:72;;45203:154;;;:::o;45363:143::-;45456:43;45493:5;45456:43;:::i;:::-;45451:3;45444:56;45363:143;;:::o;45512:898::-;45779:4;45817:3;45806:9;45802:19;45794:27;;45831:71;45899:1;45888:9;45884:17;45875:6;45831:71;:::i;:::-;45912:72;45980:2;45969:9;45965:18;45956:6;45912:72;:::i;:::-;45994;46062:2;46051:9;46047:18;46038:6;45994:72;:::i;:::-;46076;46144:2;46133:9;46129:18;46120:6;46076:72;:::i;:::-;46158:73;46226:3;46215:9;46211:19;46202:6;46158:73;:::i;:::-;46241:79;46315:3;46304:9;46300:19;46291:6;46241:79;:::i;:::-;46330:73;46398:3;46387:9;46383:19;46374:6;46330:73;:::i;:::-;45512:898;;;;;;;;;;:::o;46416:182::-;46556:34;46552:1;46544:6;46540:14;46533:58;46416:182;:::o;46604:366::-;46746:3;46767:67;46831:2;46826:3;46767:67;:::i;:::-;46760:74;;46843:93;46932:3;46843:93;:::i;:::-;46961:2;46956:3;46952:12;46945:19;;46604:366;;;:::o;46976:419::-;47142:4;47180:2;47169:9;47165:18;47157:26;;47229:9;47223:4;47219:20;47215:1;47204:9;47200:17;47193:47;47257:131;47383:4;47257:131;:::i;:::-;47249:139;;46976:419;;;:::o;47401:442::-;47550:4;47588:2;47577:9;47573:18;47565:26;;47601:71;47669:1;47658:9;47654:17;47645:6;47601:71;:::i;:::-;47682:72;47750:2;47739:9;47735:18;47726:6;47682:72;:::i;:::-;47764;47832:2;47821:9;47817:18;47808:6;47764:72;:::i;:::-;47401:442;;;;;;:::o;47849:250::-;47925:4;48015:18;48007:6;48004:30;48001:56;;;48037:18;;:::i;:::-;48001:56;48087:4;48079:6;48075:17;48067:25;;47849:250;;;:::o;48124:667::-;48230:5;48255:80;48271:63;48327:6;48271:63;:::i;:::-;48255:80;:::i;:::-;48246:89;;48355:5;48408:4;48400:6;48396:17;48388:6;48384:30;48437:3;48429:6;48426:15;48423:122;;;48456:79;;:::i;:::-;48423:122;48571:6;48554:231;48588:6;48583:3;48580:15;48554:231;;;48663:3;48692:48;48736:3;48724:10;48692:48;:::i;:::-;48687:3;48680:61;48770:4;48765:3;48761:14;48754:21;;48630:155;48614:4;48609:3;48605:14;48598:21;;48554:231;;;48558:21;48236:555;;48124:667;;;;;:::o;48816:363::-;48897:5;48946:3;48939:4;48931:6;48927:17;48923:27;48913:122;;48954:79;;:::i;:::-;48913:122;49058:4;49080:93;49169:3;49161:6;49153;49080:93;:::i;:::-;49071:102;;48903:276;48816:363;;;;:::o;49185:400::-;49279:6;49328:3;49316:9;49307:7;49303:23;49299:33;49296:120;;;49335:79;;:::i;:::-;49296:120;49455:1;49480:88;49560:7;49551:6;49540:9;49536:22;49480:88;:::i;:::-;49470:98;;49426:152;49185:400;;;;:::o;49591:118::-;49662:22;49678:5;49662:22;:::i;:::-;49655:5;49652:33;49642:61;;49699:1;49696;49689:12;49642:61;49591:118;:::o;49715:139::-;49770:5;49801:6;49795:13;49786:22;;49817:31;49842:5;49817:31;:::i;:::-;49715:139;;;;:::o;49860:1913::-;50016:6;50024;50032;50040;50048;50056;50064;50072;50080;50088;50096:7;50146:3;50134:9;50125:7;50121:23;50117:33;50114:120;;;50153:79;;:::i;:::-;50114:120;50273:1;50298:64;50354:7;50345:6;50334:9;50330:22;50298:64;:::i;:::-;50288:74;;50244:128;50411:2;50437:64;50493:7;50484:6;50473:9;50469:22;50437:64;:::i;:::-;50427:74;;50382:129;50550:2;50576:64;50632:7;50623:6;50612:9;50608:22;50576:64;:::i;:::-;50566:74;;50521:129;50689:2;50715:64;50771:7;50762:6;50751:9;50747:22;50715:64;:::i;:::-;50705:74;;50660:129;50828:3;50855:64;50911:7;50902:6;50891:9;50887:22;50855:64;:::i;:::-;50845:74;;50799:130;50968:3;50995:64;51051:7;51042:6;51031:9;51027:22;50995:64;:::i;:::-;50985:74;;50939:130;51108:3;51135:64;51191:7;51182:6;51171:9;51167:22;51135:64;:::i;:::-;51125:74;;51079:130;51248:3;51275:64;51331:7;51322:6;51311:9;51307:22;51275:64;:::i;:::-;51265:74;;51219:130;51388:3;51415:62;51469:7;51460:6;51449:9;51445:22;51415:62;:::i;:::-;51405:72;;51359:128;51526:3;51553:62;51607:7;51598:6;51587:9;51583:22;51553:62;:::i;:::-;51543:72;;51497:128;51664:3;51692:64;51748:7;51739:6;51728:9;51724:22;51692:64;:::i;:::-;51681:75;;51635:131;49860:1913;;;;;;;;;;;;;;:::o;51779:175::-;51919:27;51915:1;51907:6;51903:14;51896:51;51779:175;:::o;51960:366::-;52102:3;52123:67;52187:2;52182:3;52123:67;:::i;:::-;52116:74;;52199:93;52288:3;52199:93;:::i;:::-;52317:2;52312:3;52308:12;52301:19;;51960:366;;;:::o;52332:419::-;52498:4;52536:2;52525:9;52521:18;52513:26;;52585:9;52579:4;52575:20;52571:1;52560:9;52556:17;52549:47;52613:131;52739:4;52613:131;:::i;:::-;52605:139;;52332:419;;;:::o;52757:180::-;52805:77;52802:1;52795:88;52902:4;52899:1;52892:15;52926:4;52923:1;52916:15;52943:185;52983:1;53000:20;53018:1;53000:20;:::i;:::-;52995:25;;53034:20;53052:1;53034:20;:::i;:::-;53029:25;;53073:1;53063:35;;53078:18;;:::i;:::-;53063:35;53120:1;53117;53113:9;53108:14;;52943:185;;;;:::o;53134:220::-;53274:34;53270:1;53262:6;53258:14;53251:58;53343:3;53338:2;53330:6;53326:15;53319:28;53134:220;:::o;53360:366::-;53502:3;53523:67;53587:2;53582:3;53523:67;:::i;:::-;53516:74;;53599:93;53688:3;53599:93;:::i;:::-;53717:2;53712:3;53708:12;53701:19;;53360:366;;;:::o;53732:419::-;53898:4;53936:2;53925:9;53921:18;53913:26;;53985:9;53979:4;53975:20;53971:1;53960:9;53956:17;53949:47;54013:131;54139:4;54013:131;:::i;:::-;54005:139;;53732:419;;;:::o;54157:98::-;54208:6;54242:5;54236:12;54226:22;;54157:98;;;:::o;54261:147::-;54362:11;54399:3;54384:18;;54261:147;;;;:::o;54414:373::-;54518:3;54546:38;54578:5;54546:38;:::i;:::-;54600:88;54681:6;54676:3;54600:88;:::i;:::-;54593:95;;54697:52;54742:6;54737:3;54730:4;54723:5;54719:16;54697:52;:::i;:::-;54774:6;54769:3;54765:16;54758:23;;54522:265;54414:373;;;;:::o;54793:271::-;54923:3;54945:93;55034:3;55025:6;54945:93;:::i;:::-;54938:100;;55055:3;55048:10;;54793:271;;;;:::o;55070:222::-;55210:34;55206:1;55198:6;55194:14;55187:58;55279:5;55274:2;55266:6;55262:15;55255:30;55070:222;:::o;55298:366::-;55440:3;55461:67;55525:2;55520:3;55461:67;:::i;:::-;55454:74;;55537:93;55626:3;55537:93;:::i;:::-;55655:2;55650:3;55646:12;55639:19;;55298:366;;;:::o;55670:419::-;55836:4;55874:2;55863:9;55859:18;55851:26;;55923:9;55917:4;55913:20;55909:1;55898:9;55894:17;55887:47;55951:131;56077:4;55951:131;:::i;:::-;55943:139;;55670:419;;;:::o;56095:313::-;56208:4;56246:2;56235:9;56231:18;56223:26;;56295:9;56289:4;56285:20;56281:1;56270:9;56266:17;56259:47;56323:78;56396:4;56387:6;56323:78;:::i;:::-;56315:86;;56095:313;;;;:::o;56414:229::-;56554:34;56550:1;56542:6;56538:14;56531:58;56623:12;56618:2;56610:6;56606:15;56599:37;56414:229;:::o;56649:366::-;56791:3;56812:67;56876:2;56871:3;56812:67;:::i;:::-;56805:74;;56888:93;56977:3;56888:93;:::i;:::-;57006:2;57001:3;56997:12;56990:19;;56649:366;;;:::o;57021:419::-;57187:4;57225:2;57214:9;57210:18;57202:26;;57274:9;57268:4;57264:20;57260:1;57249:9;57245:17;57238:47;57302:131;57428:4;57302:131;:::i;:::-;57294:139;;57021:419;;;:::o;57446:225::-;57586:34;57582:1;57574:6;57570:14;57563:58;57655:8;57650:2;57642:6;57638:15;57631:33;57446:225;:::o;57677:366::-;57819:3;57840:67;57904:2;57899:3;57840:67;:::i;:::-;57833:74;;57916:93;58005:3;57916:93;:::i;:::-;58034:2;58029:3;58025:12;58018:19;;57677:366;;;:::o;58049:419::-;58215:4;58253:2;58242:9;58238:18;58230:26;;58302:9;58296:4;58292:20;58288:1;58277:9;58273:17;58266:47;58330:131;58456:4;58330:131;:::i;:::-;58322:139;;58049:419;;;:::o;58474:179::-;58614:31;58610:1;58602:6;58598:14;58591:55;58474:179;:::o;58659:366::-;58801:3;58822:67;58886:2;58881:3;58822:67;:::i;:::-;58815:74;;58898:93;58987:3;58898:93;:::i;:::-;59016:2;59011:3;59007:12;59000:19;;58659:366;;;:::o;59031:419::-;59197:4;59235:2;59224:9;59220:18;59212:26;;59284:9;59278:4;59274:20;59270:1;59259:9;59255:17;59248:47;59312:131;59438:4;59312:131;:::i;:::-;59304:139;;59031:419;;;:::o

Swarm Source

ipfs://e814f59f66a6f70980ffb80b6ffb182893f090c1cbf87acc194bf1be078eab6a
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading