Contract 0x11111254369792b2ca5d084ab5eea397ca8fa48b

Dex  
 
Txn Hash
Block
From
To
Value [Txn Fee]
0xaa875fc39c8d5046a3d9153c042a693ee04a2db6df10794df9d43fddf3b71599(pending)2020-04-20 9:47:0525 mins ago0x2b72051f378bff38c63c286f4b5031a238c132cb IN 0x11111254369792b2ca5d084ab5eea397ca8fa48b0 Ether(Pending)
0x38b8d25b71dd472e02d1195f3bbfdeec8c9c6cb90014a29a21e4470bcd56a779(pending)2020-04-20 6:14:203 hrs 58 mins ago0x1dbef45c0ec6b5964c0b5df8c27e6d35d3ea342f IN 0x11111254369792b2ca5d084ab5eea397ca8fa48b0 Ether(Pending)
0x744ab8c6d28c835477d5f6bc7a3bba7cf1c5fdc6dbfee1d1c1bc198ac7217d58(pending)2020-04-19 22:25:4411 hrs 47 mins ago0x52d4fe66a1d5d6e33c96491d402b633141de0e01 IN 0x11111254369792b2ca5d084ab5eea397ca8fa48b0 Ether(Pending)
0x38373fc45847176dd9db527cfc2cc3bd17a809024a8c97a836a97bfcd01a5b5f(pending)2020-04-19 21:03:4113 hrs 9 mins ago0x3a2ef6d08fa3af3a0139d428286641192350d1e0 IN 0x11111254369792b2ca5d084ab5eea397ca8fa48b0 Ether(Pending)
0xd7111de273aa9ea0a13d33ffe65607ba57b5b822d7049b4b68d427bb0e3173e9(pending)2020-04-17 20:52:442 days 13 hrs ago0x2d3a19fafa4d7207b4dcee58964e106d66c1fed5 IN 0x11111254369792b2ca5d084ab5eea397ca8fa48b0 Ether(Pending)
0x57b06986b2cfe0ccf635154ede41cb0cbad0034bfc99e9a9862b471d0ee3b799(pending)2020-04-15 21:38:574 days 12 hrs ago0xf137128f3b79a52ee08a54897773725cb8f54e8d IN 0x11111254369792b2ca5d084ab5eea397ca8fa48b15 Ether(Pending)
0x1a60cb080a45a74bb9ecd81db870e02ee107fed61c377e62fd4bea01fefde43599086672020-04-20 10:07:545 mins ago0x0b0e3ebe78b965bd0ae25a7c5c1cc8cff23a07e7 IN 1inch.exchange278 Ether0.001859601568
0xc788a7de4b8a5bdf564dba76b829502704d1ea95cd2e853c4b1b021e8cbd478199086542020-04-20 10:04:158 mins ago0x6bbe2c5c7e455d64d0617d35b8c0be0e0c3fa69f IN 1inch.exchange0 Ether0.0024414228
0xc35d5791a5a3ae648dff86606c50161213e1173167164884b8962df6753810aa99086382020-04-20 10:00:3912 mins ago0xb258ad4125e84068f3a47fbbc4f6aced2bc148ec IN 1inch.exchange0 Ether0.016098775
0xff41a84236c8b7591690ff7815b1070bf74ac5b37dfac8277f0575663b1460ee99086292020-04-20 9:59:0413 mins ago0xac3f031a662f14263ebb2b5a712763662e00db89 IN 1inch.exchange0 Ether0.001060422
0xd1eb50e31f9ebed7275bbf6a06d254752b963de4bb80fd14f1befa4230fce34999086232020-04-20 9:57:0415 mins ago0xf54ba631657760bbeed65d9f974a81a2f8ce7c9c IN 1inch.exchange0 Ether0.0005399856
0xe885f2d0aca3a74a9cb4eccb6021301a905c525efa5a7571cc96b9402d98d50799086172020-04-20 9:55:4617 mins ago0x67ff08e7620462f59a23b12e60ad5d1d59f5b928 IN 1inch.exchange0.045054 Ether0.004174214
0x1e5ca8392cfd5948a603b79358a83704274b6fb4004e0891569704fb3e901c3899086092020-04-20 9:54:2118 mins ago0x4704c78ef4d090c4e8a516c80ad3d969c20f0bbf IN 1inch.exchange0 Ether0.002193818
0x78211b68936617ff14ebed7266d8cc7a7649a164a142e4c9fead29ebb6992d6399085912020-04-20 9:51:0222 mins ago0x6bbe2c5c7e455d64d0617d35b8c0be0e0c3fa69f IN 1inch.exchange0 Ether0.001352313
0x16237274b5945c871a6710a6e5e3065712b342b99b35bf0245960efcf28ad8da99085832020-04-20 9:48:3324 mins ago0xc50eaaee441566b4ef4f1e3270d19f24223cddf4 IN 1inch.exchange0 Ether0.007913301
0xeba6932b2f62db75f64a7f0f6ec585aaacf6bfc8100af189766a2acbb142dc1299085742020-04-20 9:47:2525 mins ago0x3302bf726082fc8f3adb9c2f85279c73812f9b00 IN 1inch.exchange0 Ether0.001659007
0x1052b39ee1a237d09bea849f622d35ab5229991c3707facb8ec3453567b0cbf699085742020-04-20 9:47:2525 mins ago0x4a22c8d17a7287902212d8089d65c0f5b1428ca6 IN 1inch.exchange0 Ether0.001060422
0xa1a25c7bff3cec28c1c3628cfa3dddc3fc43de9bb94c5659aa6c7c2cf4fe9e5099085432020-04-20 9:42:4930 mins ago0x6bbe2c5c7e455d64d0617d35b8c0be0e0c3fa69f IN 1inch.exchange0 Ether0.0017376606
0xde8e6dcf3ecdb056184d3376bcfe51e1eb34b72aa7ac5a94dece9406a44a0c4199085222020-04-20 9:37:4735 mins ago0x6bbe2c5c7e455d64d0617d35b8c0be0e0c3fa69f IN 1inch.exchange0 Ether0.002328535
0xd2b19cf0f9b76083632a2fc083f95128de8cec54d97e3a70421f96d3f6e4771999085162020-04-20 9:35:4437 mins ago0x6bbe2c5c7e455d64d0617d35b8c0be0e0c3fa69f IN 1inch.exchange0 Ether0.0017300357
0xa23e5208c799fb645e8571be3dbc3eabe97f7d2fa478b960ae115f5e3bc0cc2c99085122020-04-20 9:35:0238 mins ago0x4704c78ef4d090c4e8a516c80ad3d969c20f0bbf IN 1inch.exchange0 Ether0.002193686
0xd23cb20cdc46b13b075b5f9209bcc5d4beefe473e9b80b150b4e301b17acfab399084492020-04-20 9:20:2452 mins ago0xe46c5e9c313782befd6618df092bd4d250dd2b98 IN 1inch.exchange0 Ether0.005714291
0x0f317c7e1438e8f113eb4b90d054704dc5f7c34aa900f8a0e74276b8ade5d2f399084302020-04-20 9:14:1458 mins ago0xa9a5d0daa8bc8f65d9bc7bfcb281907b07256262 IN 1inch.exchange0 Ether0.002489652
0xb01b54334b9c4773dd92427d865b4cc80d82a780df3ac082ffae5d91982b9c1099084272020-04-20 9:12:271 hr ago0xff0bd4cb75016029397a697d204eae41c7aa1f55 IN 1inch.exchange0.27 Ether0.00506688
0xc3b91f96c7d8e26855e91e88af5797b1f400a17794df14246feed438dd598dd299084162020-04-20 9:11:041 hr 1 min ago0x8ebab0129ffea1145a505d8d6d5d046770dd97e6 IN 1inch.exchange0 Ether0.00320751
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x1a60cb080a45a74bb9ecd81db870e02ee107fed61c377e62fd4bea01fefde43599086672020-04-20 10:07:545 mins ago 1inch.exchange Wrapped Ether278 Ether
0xc788a7de4b8a5bdf564dba76b829502704d1ea95cd2e853c4b1b021e8cbd478199086542020-04-20 10:04:158 mins ago 1inch.exchange0x6bbe2c5c7e455d64d0617d35b8c0be0e0c3fa69f10.981770260019545167 Ether
0xc788a7de4b8a5bdf564dba76b829502704d1ea95cd2e853c4b1b021e8cbd478199086542020-04-20 10:04:158 mins ago 1inch.exchange0x4d37f28d2db99e8d35a6c725a5f1749a085850a30.000000001346587053 Ether
0xc788a7de4b8a5bdf564dba76b829502704d1ea95cd2e853c4b1b021e8cbd478199086542020-04-20 10:04:158 mins ago Wrapped Ether1inch.exchange10.98177026136613222 Ether
0xff41a84236c8b7591690ff7815b1070bf74ac5b37dfac8277f0575663b1460ee99086292020-04-20 9:59:0413 mins ago 1inch.exchange0xac3f031a662f14263ebb2b5a712763662e00db895.538983678678919251 Ether
0xff41a84236c8b7591690ff7815b1070bf74ac5b37dfac8277f0575663b1460ee99086292020-04-20 9:59:0413 mins ago Uniswap: DAI1inch.exchange5.538983678678919251 Ether
0xd1eb50e31f9ebed7275bbf6a06d254752b963de4bb80fd14f1befa4230fce34999086232020-04-20 9:57:0415 mins ago 1inch.exchange0xf54ba631657760bbeed65d9f974a81a2f8ce7c9c0.763480370712464668 Ether
0xd1eb50e31f9ebed7275bbf6a06d254752b963de4bb80fd14f1befa4230fce34999086232020-04-20 9:57:0415 mins ago Uniswap: DAI1inch.exchange0.763480370712464668 Ether
0xe885f2d0aca3a74a9cb4eccb6021301a905c525efa5a7571cc96b9402d98d50799086172020-04-20 9:55:4617 mins ago 1inch.exchange 0xee7f212545b3c388f8fd176f83bdff85f3dcea7d0.045054 Ether
0x78211b68936617ff14ebed7266d8cc7a7649a164a142e4c9fead29ebb6992d6399085912020-04-20 9:51:0222 mins ago 1inch.exchange0x6bbe2c5c7e455d64d0617d35b8c0be0e0c3fa69f10.943874452337623483 Ether
0x78211b68936617ff14ebed7266d8cc7a7649a164a142e4c9fead29ebb6992d6399085912020-04-20 9:51:0222 mins ago 1inch.exchange0x4d37f28d2db99e8d35a6c725a5f1749a085850a30.000000001346587053 Ether
0x78211b68936617ff14ebed7266d8cc7a7649a164a142e4c9fead29ebb6992d6399085912020-04-20 9:51:0222 mins ago Uniswap: USDC1inch.exchange10.943874453684210536 Ether
0x1052b39ee1a237d09bea849f622d35ab5229991c3707facb8ec3453567b0cbf699085742020-04-20 9:47:2525 mins ago 1inch.exchange0x4a22c8d17a7287902212d8089d65c0f5b1428ca611.076625479218160032 Ether
0x1052b39ee1a237d09bea849f622d35ab5229991c3707facb8ec3453567b0cbf699085742020-04-20 9:47:2525 mins ago Uniswap: DAI1inch.exchange11.076625479218160032 Ether
0xa1a25c7bff3cec28c1c3628cfa3dddc3fc43de9bb94c5659aa6c7c2cf4fe9e5099085432020-04-20 9:42:4930 mins ago 1inch.exchange0x6bbe2c5c7e455d64d0617d35b8c0be0e0c3fa69f5.484520163020244287 Ether
0xa1a25c7bff3cec28c1c3628cfa3dddc3fc43de9bb94c5659aa6c7c2cf4fe9e5099085432020-04-20 9:42:4930 mins ago 1inch.exchange0x4d37f28d2db99e8d35a6c725a5f1749a085850a30.000642472051885601 Ether
0xa1a25c7bff3cec28c1c3628cfa3dddc3fc43de9bb94c5659aa6c7c2cf4fe9e5099085432020-04-20 9:42:4930 mins ago Wrapped Ether1inch.exchange5.485162635072129888 Ether
0xde8e6dcf3ecdb056184d3376bcfe51e1eb34b72aa7ac5a94dece9406a44a0c4199085222020-04-20 9:37:4735 mins ago 1inch.exchange0x6bbe2c5c7e455d64d0617d35b8c0be0e0c3fa69f5.49601538884308876 Ether
0xde8e6dcf3ecdb056184d3376bcfe51e1eb34b72aa7ac5a94dece9406a44a0c4199085222020-04-20 9:37:4735 mins ago Wrapped Ether1inch.exchange5.49601538884308876 Ether
0xd23cb20cdc46b13b075b5f9209bcc5d4beefe473e9b80b150b4e301b17acfab399084492020-04-20 9:20:2452 mins ago 1inch.exchange0xe46c5e9c313782befd6618df092bd4d250dd2b984.720237429960218608 Ether
0xd23cb20cdc46b13b075b5f9209bcc5d4beefe473e9b80b150b4e301b17acfab399084492020-04-20 9:20:2452 mins ago 0xee7f212545b3c388f8fd176f83bdff85f3dcea7d1inch.exchange1.8913389624403856 Ether
0xd23cb20cdc46b13b075b5f9209bcc5d4beefe473e9b80b150b4e301b17acfab399084492020-04-20 9:20:2452 mins ago 0xfc96e234d4b31c63051e707105fcc4aba37807fa1inch.exchange2.828898467519833008 Ether
0xb01b54334b9c4773dd92427d865b4cc80d82a780df3ac082ffae5d91982b9c1099084272020-04-20 9:12:271 hr ago 1inch.exchange 0xee7f212545b3c388f8fd176f83bdff85f3dcea7d0.27 Ether
0x3291c0e999ba39ab255267661bd29ad273b818cf26c0966f6edfe3274d36b19e99083702020-04-20 9:02:001 hr 11 mins ago 1inch.exchange 0x: Exchange v30.00165 Ether
0x2afc4a45b3f6fb18acb11539f14d65af0de83d657a4823d5d4a94ab0aed325f399083622020-04-20 8:59:281 hr 13 mins ago 1inch.exchange0x8ebab0129ffea1145a505d8d6d5d046770dd97e60.547795124623390851 Ether
[ Download CSV Export 

Contract Source Code Verified (Exact Match)

Contract Name:
OneInchExchange

Compiler Version
v0.5.11+commit.c082d0b4

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-09-28
*/

pragma solidity ^0.5.0;
pragma experimental ABIEncoderV2;


library ExternalCall {
    // Source: https://github.com/gnosis/MultiSigWallet/blob/master/contracts/MultiSigWallet.sol
    // call has been separated into its own function in order to take advantage
    // of the Solidity's code generator to produce a loop that copies tx.data into memory.
    function externalCall(address destination, uint value, bytes memory data, uint dataOffset, uint dataLength, uint gasLimit) internal returns(bool result) {
        // solium-disable-next-line security/no-inline-assembly
        if (gasLimit == 0) {
            gasLimit = gasleft() - 40000;
        }
        assembly {
            let x := mload(0x40)   // "Allocate" memory for output (0x40 is where "free memory" pointer is stored by convention)
            let d := add(data, 32) // First 32 bytes are the padded length of data, so exclude that
            result := call(
                gasLimit,
                destination,
                value,
                add(d, dataOffset),
                dataLength,        // Size of the input (in bytes) - this is what fixes the padding problem
                x,
                0                  // Output is ignored, therefore the output size is zero
            )
        }
    }
}


/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see `ERC20Detailed`.
 */
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.
     *
     * > 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);
}


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

        return c;
    }

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

        return c;
    }

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

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

        return c;
    }

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

        return c;
    }

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


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be aplied to your functions to restrict their use to
 * the owner.
 */
contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * > Note: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract IZrxExchange {

    struct Order {
        address makerAddress;           // Address that created the order.
        address takerAddress;           // Address that is allowed to fill the order. If set to 0, any address is allowed to fill the order.
        address feeRecipientAddress;    // Address that will recieve fees when order is filled.
        address senderAddress;          // Address that is allowed to call Exchange contract methods that affect this order. If set to 0, any address is allowed to call these methods.
        uint256 makerAssetAmount;       // Amount of makerAsset being offered by maker. Must be greater than 0.
        uint256 takerAssetAmount;       // Amount of takerAsset being bid on by maker. Must be greater than 0.
        uint256 makerFee;               // Amount of ZRX paid to feeRecipient by maker when order is filled. If set to 0, no transfer of ZRX from maker to feeRecipient will be attempted.
        uint256 takerFee;               // Amount of ZRX paid to feeRecipient by taker when order is filled. If set to 0, no transfer of ZRX from taker to feeRecipient will be attempted.
        uint256 expirationTimeSeconds;  // Timestamp in seconds at which order expires.
        uint256 salt;                   // Arbitrary number to facilitate uniqueness of the order's hash.
        bytes makerAssetData;           // Encoded data that can be decoded by a specified proxy contract when transferring makerAsset. The last byte references the id of this proxy.
        bytes takerAssetData;           // Encoded data that can be decoded by a specified proxy contract when transferring takerAsset. The last byte references the id of this proxy.
    }

    struct OrderInfo {
        uint8 orderStatus;                    // Status that describes order's validity and fillability.
        bytes32 orderHash;                    // EIP712 hash of the order (see IZrxExchange.getOrderHash).
        uint256 orderTakerAssetFilledAmount;  // Amount of order that has already been filled.
    }

    struct FillResults {
        uint256 makerAssetFilledAmount;  // Total amount of makerAsset(s) filled.
        uint256 takerAssetFilledAmount;  // Total amount of takerAsset(s) filled.
        uint256 makerFeePaid;            // Total amount of ZRX paid by maker(s) to feeRecipient(s).
        uint256 takerFeePaid;            // Total amount of ZRX paid by taker to feeRecipients(s).
    }

    function getOrderInfo(Order memory order)
        public
        view
        returns (OrderInfo memory orderInfo);

    function getOrdersInfo(Order[] memory orders)
        public
        view
        returns (OrderInfo[] memory ordersInfo);

    function fillOrder(
        Order memory order,
        uint256 takerAssetFillAmount,
        bytes memory signature
    )
        public
        returns (FillResults memory fillResults);

    function fillOrderNoThrow(
        Order memory order,
        uint256 takerAssetFillAmount,
        bytes memory signature
    )
        public
        returns (FillResults memory fillResults);
}


contract IGST2 is IERC20 {

    function freeUpTo(uint256 value) external returns (uint256 freed);

    function freeFromUpTo(address from, uint256 value) external returns (uint256 freed);

    function balanceOf(address who) external view returns (uint256);
}


/**
 * @dev Collection of functions related to the address type,
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * This test is non-exhaustive, and there may be false-negatives: during the
     * execution of a contract's constructor, its address will be reported as
     * not containing a contract.
     *
     * > It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in 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;
    }
}



contract IWETH is IERC20 {

    function deposit() external payable;

    function withdraw(uint256 amount) external;
}



contract Shutdownable is Ownable {

    bool public isShutdown;

    event Shutdown();

    modifier notShutdown {
        require(!isShutdown, "Smart contract is shut down.");
        _;
    }

    function shutdown() public onlyOwner {
        isShutdown = true;
        emit Shutdown();
    }
}

contract IERC20NonView {
    // Methods are not view to avoid throw on proxy tokens with delegatecall inside
    function balanceOf(address user) public returns(uint256);
    function allowance(address from, address to) public returns(uint256);
}

contract ZrxMarketOrder {

    using SafeMath for uint256;

    function marketSellOrdersProportion(
        IERC20 tokenSell,
        address tokenBuy,
        address zrxExchange,
        address zrxTokenProxy,
        IZrxExchange.Order[] calldata orders,
        bytes[] calldata signatures,
        uint256 mul,
        uint256 div
    )
        external
    {
        uint256 amount = tokenSell.balanceOf(msg.sender).mul(mul).div(div);
        this.marketSellOrders(tokenBuy, zrxExchange, zrxTokenProxy, amount, orders, signatures);
    }

    function marketSellOrders(
        address makerAsset,
        address zrxExchange,
        address zrxTokenProxy,
        uint256 takerAssetFillAmount,
        IZrxExchange.Order[] calldata orders,
        bytes[] calldata signatures
    )
        external
        returns (IZrxExchange.FillResults memory totalFillResults)
    {
        for (uint i = 0; i < orders.length; i++) {

            // Stop execution if the entire amount of takerAsset has been sold
            if (totalFillResults.takerAssetFilledAmount >= takerAssetFillAmount) {
                break;
            }

            // Calculate the remaining amount of takerAsset to sell
            uint256 remainingTakerAmount = takerAssetFillAmount.sub(totalFillResults.takerAssetFilledAmount);

            IZrxExchange.OrderInfo memory orderInfo = IZrxExchange(zrxExchange).getOrderInfo(orders[i]);
            uint256 orderRemainingTakerAmount = orders[i].takerAssetAmount.sub(orderInfo.orderTakerAssetFilledAmount);

            // Check available balance and allowance and update orderRemainingTakerAmount
            {
                uint256 balance = IERC20NonView(makerAsset).balanceOf(orders[i].makerAddress);
                uint256 allowance = IERC20NonView(makerAsset).allowance(orders[i].makerAddress, zrxTokenProxy);
                uint256 availableMakerAmount = (allowance < balance) ? allowance : balance;
                uint256 availableTakerAmount = availableMakerAmount.mul(orders[i].takerAssetAmount).div(orders[i].makerAssetAmount);

                if (availableTakerAmount < orderRemainingTakerAmount) {
                    orderRemainingTakerAmount = availableTakerAmount;
                }
            }

            uint256 takerAmount = (orderRemainingTakerAmount < remainingTakerAmount) ? orderRemainingTakerAmount : remainingTakerAmount;

            IZrxExchange.FillResults memory fillResults = IZrxExchange(zrxExchange).fillOrderNoThrow(
                orders[i],
                takerAmount,
                signatures[i]
            );

            _addFillResults(totalFillResults, fillResults);
        }

        return totalFillResults;
    }

    function _addFillResults(
        IZrxExchange.FillResults memory totalFillResults,
        IZrxExchange.FillResults memory singleFillResults
    )
        internal
        pure
    {
        totalFillResults.makerAssetFilledAmount = totalFillResults.makerAssetFilledAmount.add(singleFillResults.makerAssetFilledAmount);
        totalFillResults.takerAssetFilledAmount = totalFillResults.takerAssetFilledAmount.add(singleFillResults.takerAssetFilledAmount);
        totalFillResults.makerFeePaid = totalFillResults.makerFeePaid.add(singleFillResults.makerFeePaid);
        totalFillResults.takerFeePaid = totalFillResults.takerFeePaid.add(singleFillResults.takerFeePaid);
    }

    function getOrdersInfoRespectingBalancesAndAllowances(
        IERC20 token,
        IZrxExchange zrx,
        address zrxTokenProxy,
        IZrxExchange.Order[] memory orders
    )
        public
        view
        returns (IZrxExchange.OrderInfo[] memory ordersInfo)
    {
        ordersInfo = zrx.getOrdersInfo(orders);

        for (uint i = 0; i < ordersInfo.length; i++) {

            uint256 balance = token.balanceOf(orders[i].makerAddress);
            uint256 allowance = token.allowance(orders[i].makerAddress, zrxTokenProxy);
            uint256 availableMakerAmount = (allowance < balance) ? allowance : balance;
            uint256 availableTakerAmount = availableMakerAmount.mul(orders[i].takerAssetAmount).div(orders[i].makerAssetAmount);

            for (uint j = 0; j < i; j++) {

                if (orders[j].makerAddress == orders[i].makerAddress) {

                    uint256 orderTakerAssetRemainigAmount = orders[j].takerAssetAmount.sub(
                        ordersInfo[j].orderTakerAssetFilledAmount
                    );

                    if (availableTakerAmount > orderTakerAssetRemainigAmount) {

                        availableTakerAmount = availableTakerAmount.sub(orderTakerAssetRemainigAmount);
                    } else {

                        availableTakerAmount = 0;
                        break;
                    }
                }
            }

            uint256 remainingTakerAmount = orders[i].takerAssetAmount.sub(
                ordersInfo[i].orderTakerAssetFilledAmount
            );

            if (availableTakerAmount < remainingTakerAmount) {

                ordersInfo[i].orderTakerAssetFilledAmount = orders[i].takerAssetAmount.sub(availableTakerAmount);
            }
        }
    }
}




/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
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));
    }

    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);
        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.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "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");
        }
    }
}





library UniversalERC20 {

    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    IERC20 private constant ZERO_ADDRESS = IERC20(0x0000000000000000000000000000000000000000);
    IERC20 private constant ETH_ADDRESS = IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);

    function universalTransfer(IERC20 token, address to, uint256 amount) internal {
        universalTransfer(token, to, amount, false);
    }

    function universalTransfer(IERC20 token, address to, uint256 amount, bool mayFail) internal returns(bool) {
        if (amount == 0) {
            return true;
        }

        if (token == ZERO_ADDRESS || token == ETH_ADDRESS) {
            if (mayFail) {
                return address(uint160(to)).send(amount);
            } else {
                address(uint160(to)).transfer(amount);
                return true;
            }
        } else {
            token.safeTransfer(to, amount);
            return true;
        }
    }

    function universalApprove(IERC20 token, address to, uint256 amount) internal {
        if (token != ZERO_ADDRESS && token != ETH_ADDRESS) {
            token.safeApprove(to, amount);
        }
    }

    function universalTransferFrom(IERC20 token, address from, address to, uint256 amount) internal {
        if (amount == 0) {
            return;
        }

        if (token == ZERO_ADDRESS || token == ETH_ADDRESS) {
            require(from == msg.sender && msg.value >= amount, "msg.value is zero");
            if (to != address(this)) {
                address(uint160(to)).transfer(amount);
            }
            if (msg.value > amount) {
                msg.sender.transfer(msg.value.sub(amount));
            }
        } else {
            token.safeTransferFrom(from, to, amount);
        }
    }

    function universalBalanceOf(IERC20 token, address who) internal view returns (uint256) {
        if (token == ZERO_ADDRESS || token == ETH_ADDRESS) {
            return who.balance;
        } else {
            return token.balanceOf(who);
        }
    }
}



contract TokenSpender {

    using SafeERC20 for IERC20;

    address public owner;
    IGST2 public gasToken;
    address public gasTokenOwner;

    constructor(IGST2 _gasToken, address _gasTokenOwner) public {
        owner = msg.sender;
        gasToken = _gasToken;
        gasTokenOwner = _gasTokenOwner;
    }

    function claimTokens(IERC20 token, address who, address dest, uint256 amount) external {
        require(msg.sender == owner, "Access restricted");
        token.safeTransferFrom(who, dest, amount);
    }

    function burnGasToken(uint gasSpent) external {
        require(msg.sender == owner, "Access restricted");
        uint256 tokens = (gasSpent + 14154) / 41130;
        gasToken.freeUpTo(tokens);
    }

    function() external {
        if (msg.sender == gasTokenOwner) {
            gasToken.transfer(msg.sender, gasToken.balanceOf(address(this)));
        }
    }
}

contract OneInchExchange is Shutdownable, ZrxMarketOrder {

    using SafeMath for uint256;
    using UniversalERC20 for IERC20;
    using ExternalCall for address;

    IERC20 constant ETH_ADDRESS = IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);

    TokenSpender public spender;
    uint fee; // 10000 => 100%, 1 => 0.01%

    event History(
        address indexed sender,
        IERC20 fromToken,
        IERC20 toToken,
        uint256 fromAmount,
        uint256 toAmount
    );

    event Swapped(
        IERC20 indexed fromToken,
        IERC20 indexed toToken,
        address indexed referrer,
        uint256 fromAmount,
        uint256 toAmount,
        uint256 referrerFee,
        uint256 fee
    );

    constructor(address _owner, IGST2 _gasToken, uint _fee) public {
        spender = new TokenSpender(
            _gasToken,
            _owner
        );

        _transferOwnership(_owner);
        fee = _fee;
    }

    function() external payable notShutdown {
        require(msg.sender != tx.origin);
    }

    function swap(
        IERC20 fromToken,
        IERC20 toToken,
        uint256 fromTokenAmount,
        uint256 minReturnAmount,
        uint256 guaranteedAmount,
        address payable referrer,
        address[] memory callAddresses,
        bytes memory callDataConcat,
        uint256[] memory starts,
        uint256[] memory gasLimitsAndValues
    )
    public
    payable
    notShutdown
    returns (uint256 returnAmount)
    {
        uint256 gasProvided = gasleft();

        require(minReturnAmount > 0, "Min return should be bigger then 0.");
        require(callAddresses.length > 0, "Call data should exists.");

        if (fromToken != ETH_ADDRESS) {
            spender.claimTokens(fromToken, msg.sender, address(this), fromTokenAmount);
        }

        for (uint i = 0; i < callAddresses.length; i++) {
            require(callAddresses[i] != address(spender), "Access denied");
            require(callAddresses[i].externalCall(
                gasLimitsAndValues[i] & ((1 << 128) - 1),
                callDataConcat,
                starts[i],
                starts[i + 1] - starts[i],
                gasLimitsAndValues[i] >> 128
            ));
        }

        // Return back all unswapped
        fromToken.universalTransfer(msg.sender, fromToken.universalBalanceOf(address(this)));

        returnAmount = toToken.universalBalanceOf(address(this));
        (uint256 toTokenAmount, uint256 referrerFee) = _handleFees(toToken, referrer, returnAmount, guaranteedAmount);

        require(toTokenAmount >= minReturnAmount, "Return amount is not enough");
        toToken.universalTransfer(msg.sender, toTokenAmount);

        emit History(
            msg.sender,
            fromToken,
            toToken,
            fromTokenAmount,
            toTokenAmount
        );

        emit Swapped(
            fromToken,
            toToken,
            referrer,
            fromTokenAmount,
            toTokenAmount,
            referrerFee,
            returnAmount.sub(toTokenAmount)
        );

        spender.burnGasToken(gasProvided.sub(gasleft()));
    }

    function _handleFees(
        IERC20 toToken,
        address referrer,
        uint256 returnAmount,
        uint256 guaranteedAmount
    )
    internal
    returns (
        uint256 toTokenAmount,
        uint256 referrerFee
    )
    {
        if (returnAmount <= guaranteedAmount) {
            return (returnAmount, 0);
        }

        uint256 feeAmount = returnAmount.sub(guaranteedAmount).mul(fee).div(10000);

        if (referrer != address(0) && referrer != msg.sender && referrer != tx.origin) {
            referrerFee = feeAmount.div(10);
            if (toToken.universalTransfer(referrer, referrerFee, true)) {
                returnAmount = returnAmount.sub(referrerFee);
                feeAmount = feeAmount.sub(referrerFee);
            } else {
                referrerFee = 0;
            }
        }

        if (toToken.universalTransfer(owner(), feeAmount, true)) {
            returnAmount = returnAmount.sub(feeAmount);
        }

        return (returnAmount, referrerFee);
    }

    function infiniteApproveIfNeeded(IERC20 token, address to) external notShutdown {
        if (token != ETH_ADDRESS) {
            if ((token.allowance(address(this), to) >> 255) == 0) {
                token.universalApprove(to, uint256(- 1));
            }
        }
    }

    function withdrawAllToken(IWETH token) external notShutdown {
        uint256 amount = token.balanceOf(address(this));
        token.withdraw(amount);
    }
}

Contract ABI

[{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"contract IZrxExchange","name":"zrx","type":"address"},{"internalType":"address","name":"zrxTokenProxy","type":"address"},{"components":[{"internalType":"address","name":"makerAddress","type":"address"},{"internalType":"address","name":"takerAddress","type":"address"},{"internalType":"address","name":"feeRecipientAddress","type":"address"},{"internalType":"address","name":"senderAddress","type":"address"},{"internalType":"uint256","name":"makerAssetAmount","type":"uint256"},{"internalType":"uint256","name":"takerAssetAmount","type":"uint256"},{"internalType":"uint256","name":"makerFee","type":"uint256"},{"internalType":"uint256","name":"takerFee","type":"uint256"},{"internalType":"uint256","name":"expirationTimeSeconds","type":"uint256"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes","name":"makerAssetData","type":"bytes"},{"internalType":"bytes","name":"takerAssetData","type":"bytes"}],"internalType":"struct IZrxExchange.Order[]","name":"orders","type":"tuple[]"}],"name":"getOrdersInfoRespectingBalancesAndAllowances","outputs":[{"components":[{"internalType":"uint8","name":"orderStatus","type":"uint8"},{"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"internalType":"uint256","name":"orderTakerAssetFilledAmount","type":"uint256"}],"internalType":"struct IZrxExchange.OrderInfo[]","name":"ordersInfo","type":"tuple[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"tokenSell","type":"address"},{"internalType":"address","name":"tokenBuy","type":"address"},{"internalType":"address","name":"zrxExchange","type":"address"},{"internalType":"address","name":"zrxTokenProxy","type":"address"},{"components":[{"internalType":"address","name":"makerAddress","type":"address"},{"internalType":"address","name":"takerAddress","type":"address"},{"internalType":"address","name":"feeRecipientAddress","type":"address"},{"internalType":"address","name":"senderAddress","type":"address"},{"internalType":"uint256","name":"makerAssetAmount","type":"uint256"},{"internalType":"uint256","name":"takerAssetAmount","type":"uint256"},{"internalType":"uint256","name":"makerFee","type":"uint256"},{"internalType":"uint256","name":"takerFee","type":"uint256"},{"internalType":"uint256","name":"expirationTimeSeconds","type":"uint256"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes","name":"makerAssetData","type":"bytes"},{"internalType":"bytes","name":"takerAssetData","type":"bytes"}],"internalType":"struct IZrxExchange.Order[]","name":"orders","type":"tuple[]"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"},{"internalType":"uint256","name":"mul","type":"uint256"},{"internalType":"uint256","name":"div","type":"uint256"}],"name":"marketSellOrdersProportion","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IWETH","name":"token","type":"address"}],"name":"withdrawAllToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isShutdown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"infiniteApproveIfNeeded","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"spender","outputs":[{"internalType":"contract TokenSpender","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"fromToken","type":"address"},{"internalType":"contract IERC20","name":"toToken","type":"address"},{"internalType":"uint256","name":"fromTokenAmount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"guaranteedAmount","type":"uint256"},{"internalType":"address payable","name":"referrer","type":"address"},{"internalType":"address[]","name":"callAddresses","type":"address[]"},{"internalType":"bytes","name":"callDataConcat","type":"bytes"},{"internalType":"uint256[]","name":"starts","type":"uint256[]"},{"internalType":"uint256[]","name":"gasLimitsAndValues","type":"uint256[]"}],"name":"swap","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"shutdown","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"makerAsset","type":"address"},{"internalType":"address","name":"zrxExchange","type":"address"},{"internalType":"address","name":"zrxTokenProxy","type":"address"},{"internalType":"uint256","name":"takerAssetFillAmount","type":"uint256"},{"components":[{"internalType":"address","name":"makerAddress","type":"address"},{"internalType":"address","name":"takerAddress","type":"address"},{"internalType":"address","name":"feeRecipientAddress","type":"address"},{"internalType":"address","name":"senderAddress","type":"address"},{"internalType":"uint256","name":"makerAssetAmount","type":"uint256"},{"internalType":"uint256","name":"takerAssetAmount","type":"uint256"},{"internalType":"uint256","name":"makerFee","type":"uint256"},{"internalType":"uint256","name":"takerFee","type":"uint256"},{"internalType":"uint256","name":"expirationTimeSeconds","type":"uint256"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes","name":"makerAssetData","type":"bytes"},{"internalType":"bytes","name":"takerAssetData","type":"bytes"}],"internalType":"struct IZrxExchange.Order[]","name":"orders","type":"tuple[]"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"marketSellOrders","outputs":[{"components":[{"internalType":"uint256","name":"makerAssetFilledAmount","type":"uint256"},{"internalType":"uint256","name":"takerAssetFilledAmount","type":"uint256"},{"internalType":"uint256","name":"makerFeePaid","type":"uint256"},{"internalType":"uint256","name":"takerFeePaid","type":"uint256"}],"internalType":"struct IZrxExchange.FillResults","name":"totalFillResults","type":"tuple"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"contract IGST2","name":"_gasToken","type":"address"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"contract IERC20","name":"fromToken","type":"address"},{"indexed":false,"internalType":"contract IERC20","name":"toToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toAmount","type":"uint256"}],"name":"History","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"fromToken","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"toToken","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"referrerFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"Swapped","type":"event"},{"anonymous":false,"inputs":[],"name":"Shutdown","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60806040523480156200001157600080fd5b5060405162003e1438038062003e148339810160408190526200003491620001af565b600080546001600160a01b03191633178082556040516001600160a01b0391909116919060008051602062003df4833981519152908290a381836040516200007c9062000174565b6200008992919062000280565b604051809103906000f080158015620000a6573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216919091179055620000d283620000de565b600255506200031a9050565b6001600160a01b0381166200012a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012190620002a6565b60405180910390fd5b600080546040516001600160a01b038085169392169160008051602062003df483398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b61094180620034b383390190565b80516200018f81620002ea565b92915050565b80516200018f8162000304565b80516200018f816200030f565b600080600060608486031215620001c557600080fd5b6000620001d3868662000182565b9350506020620001e68682870162000195565b9250506040620001f986828701620001a2565b9150509250925092565b6200020e81620002c1565b82525050565b6200020e81620002ce565b60006200022e602683620002b8565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181527f6464726573730000000000000000000000000000000000000000000000000000602082015260400192915050565b6040810162000290828562000214565b6200029f602083018462000203565b9392505050565b602080825281016200018f816200021f565b90815260200190565b60006200018f82620002db565b60006200018f82620002c1565b6001600160a01b031690565b90565b620002f581620002c1565b81146200030157600080fd5b50565b620002f581620002ce565b620002f581620002e7565b613189806200032a6000396000f3fe6080604052600436106100c25760003560e01c8063bf86d6901161007f578063f2fde38b11610059578063f2fde38b1461022a578063f88309d71461024a578063fc0e74d11461026a578063fcc06f8e1461027f576100c2565b8063bf86d690146101d3578063c9b27359146101e8578063e8edc81614610208576100c2565b8063715018a61461010457806371a2039a146101195780638da5cb5b1461014f5780638f32d59b14610171578063a96c400e14610193578063ae4dd0fc146101b3575b600054600160a01b900460ff16156100f55760405162461bcd60e51b81526004016100ec90612e12565b60405180910390fd5b3332141561010257600080fd5b005b34801561011057600080fd5b506101026102ac565b34801561012557600080fd5b5061013961013436600461229b565b61031a565b6040516101469190612d77565b60405180910390f35b34801561015b57600080fd5b50610164610689565b6040516101469190612cac565b34801561017d57600080fd5b50610186610698565b6040516101469190612d99565b34801561019f57600080fd5b506101026101ae366004612091565b6106a9565b3480156101bf57600080fd5b506101026101ce366004612313565b6107cf565b3480156101df57600080fd5b506101866108dd565b3480156101f457600080fd5b50610102610203366004612057565b6108ed565b34801561021457600080fd5b5061021d6109e2565b6040516101469190612e04565b34801561023657600080fd5b50610102610245366004611f28565b6109f1565b61025d610258366004612178565b610a21565b6040516101469190612f54565b34801561027657600080fd5b50610102610e1c565b34801561028b57600080fd5b5061029f61029a366004611f46565b610e7c565b6040516101469190612f02565b6102b4610698565b6102d05760405162461bcd60e51b81526004016100ec90612eb2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b604051631fa75d3760e21b81526060906001600160a01b03851690637e9d74dc90610349908590600401612d88565b60006040518083038186803b15801561036157600080fd5b505afa158015610375573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261039d9190810190612005565b905060005b8151811015610680576000866001600160a01b03166370a082318584815181106103c857fe5b6020026020010151600001516040518263ffffffff1660e01b81526004016103f09190612cac565b60206040518083038186803b15801561040857600080fd5b505afa15801561041c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610440919081019061236d565b90506000876001600160a01b031663dd62ed3e86858151811061045f57fe5b602002602001015160000151886040518363ffffffff1660e01b8152600401610489929190612ce3565b60206040518083038186803b1580156104a157600080fd5b505afa1580156104b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104d9919081019061236d565b905060008282106104ea57826104ec565b815b905060006105418786815181106104ff57fe5b60200260200101516080015161053589888151811061051a57fe5b602002602001015160a001518561130e90919063ffffffff16565b9063ffffffff61135116565b905060005b8581101561060e5787868151811061055a57fe5b6020026020010151600001516001600160a01b031688828151811061057b57fe5b6020026020010151600001516001600160a01b031614156106065760006105d98883815181106105a757fe5b6020026020010151604001518a84815181106105bf57fe5b602002602001015160a0015161138690919063ffffffff16565b9050808311156105fa576105f3838263ffffffff61138616565b9250610604565b600092505061060e565b505b600101610546565b50600061063887878151811061062057fe5b6020026020010151604001518988815181106105bf57fe5b90508082101561066f57610652828988815181106105bf57fe5b87878151811061065e57fe5b602002602001015160400181815250505b5050600190930192506103a2915050565b50949350505050565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b600061073b82610535858e6001600160a01b03166370a08231336040518263ffffffff1660e01b81526004016106df9190612cba565b60206040518083038186803b1580156106f757600080fd5b505afa15801561070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061072f919081019061236d565b9063ffffffff61130e16565b604051637e6037c760e11b8152909150309063fcc06f8e9061076f908d908d908d9087908e908e908e908e90600401612cf1565b608060405180830381600087803b15801561078957600080fd5b505af115801561079d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107c19190810190612331565b505050505050505050505050565b600054600160a01b900460ff16156107f95760405162461bcd60e51b81526004016100ec90612e12565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610828903090600401612cba565b60206040518083038186803b15801561084057600080fd5b505afa158015610854573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610878919081019061236d565b604051632e1a7d4d60e01b81529091506001600160a01b03831690632e1a7d4d906108a7908490600401612f54565b600060405180830381600087803b1580156108c157600080fd5b505af11580156108d5573d6000803e3d6000fd5b505050505050565b600054600160a01b900460ff1681565b600054600160a01b900460ff16156109175760405162461bcd60e51b81526004016100ec90612e12565b6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146109de57604051636eb1769f60e11b815260ff906001600160a01b0384169063dd62ed3e9061096c9030908690600401612cc8565b60206040518083038186803b15801561098457600080fd5b505afa158015610998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109bc919081019061236d565b901c6109de576109de6001600160a01b0383168260001963ffffffff6113ae16565b5050565b6001546001600160a01b031681565b6109f9610698565b610a155760405162461bcd60e51b81526004016100ec90612eb2565b610a1e81611407565b50565b60008054600160a01b900460ff1615610a4c5760405162461bcd60e51b81526004016100ec90612e12565b60005a905060008911610a715760405162461bcd60e51b81526004016100ec90612e82565b6000865111610a925760405162461bcd60e51b81526004016100ec90612e32565b6001600160a01b038c1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610b3057600160009054906101000a90046001600160a01b03166001600160a01b0316630a5ea4668d33308e6040518563ffffffff1660e01b8152600401610afd9493929190612da7565b600060405180830381600087803b158015610b1757600080fd5b505af1158015610b2b573d6000803e3d6000fd5b505050505b60005b8651811015610c4a5760015487516001600160a01b0390911690889083908110610b5957fe5b60200260200101516001600160a01b03161415610b885760405162461bcd60e51b81526004016100ec90612ed2565b610c39848281518110610b9757fe5b60200260200101516fffffffffffffffffffffffffffffffff1687878481518110610bbe57fe5b6020026020010151888581518110610bd257fe5b6020026020010151898660010181518110610be957fe5b6020026020010151036080898781518110610c0057fe5b6020026020010151901c8c8781518110610c1657fe5b60200260200101516001600160a01b03166114889095949392919063ffffffff16565b610c4257600080fd5b600101610b33565b50610c7f33610c686001600160a01b038f163063ffffffff6114b616565b6001600160a01b038f16919063ffffffff61158316565b610c986001600160a01b038c163063ffffffff6114b616565b9150600080610ca98d8a868d611596565b915091508a821015610ccd5760405162461bcd60e51b81526004016100ec90612e92565b610ce76001600160a01b038e16338463ffffffff61158316565b336001600160a01b03167f894dbf1262199c24e1750298a384c709160f49d163422cc6cee694c73713f1d28f8f8f86604051610d269493929190612ddc565b60405180910390a2886001600160a01b03168d6001600160a01b03168f6001600160a01b03167fe2cee3f6836059820b673943853afebd9b3026125dab0d774284e6f28a4855be8f8686610d83898c61138690919063ffffffff16565b604051610d939493929190612f62565b60405180910390a46001546001600160a01b031663b1746b86610dbd5a869063ffffffff61138616565b6040518263ffffffff1660e01b8152600401610dd99190612f54565b600060405180830381600087803b158015610df357600080fd5b505af1158015610e07573d6000803e3d6000fd5b505050505050509a9950505050505050505050565b610e24610698565b610e405760405162461bcd60e51b81526004016100ec90612eb2565b6000805460ff60a01b1916600160a01b1781556040517f4426aa1fb73e391071491fcfe21a88b5c38a0a0333a1f6e77161470439704cf89190a1565b610e84611a38565b60005b848110156113015786826020015110610e9f57611301565b6000610eb883602001518961138690919063ffffffff16565b9050610ec2611a60565b8a6001600160a01b031663c75e0a81898986818110610edd57fe5b60200282019050803561017e1936849003018112610efa57600080fd5b6040516001600160e01b031960e086901b168152610f1f939091019150600401612f10565b60606040518083038186803b158015610f3757600080fd5b505afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f6f919081019061234f565b90506000610fb382604001518a8a87818110610f8757fe5b60200282019050803561017e1936849003018112610fa457600080fd5b90910160a00135919050611386565b905060008d6001600160a01b03166370a082318b8b88818110610fd257fe5b60200282019050803561017e1936849003018112610fef57600080fd5b610fff9201602081019150611f28565b6040518263ffffffff1660e01b815260040161101b9190612cac565b602060405180830381600087803b15801561103557600080fd5b505af1158015611049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061106d919081019061236d565b905060008e6001600160a01b031663dd62ed3e8c8c8981811061108c57fe5b60200282019050803561017e19368490030181126110a957600080fd5b6110b99201602081019150611f28565b8f6040518363ffffffff1660e01b81526004016110d7929190612ce3565b602060405180830381600087803b1580156110f157600080fd5b505af1158015611105573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611129919081019061236d565b9050600082821061113a578261113c565b815b905060006111b18d8d8a81811061114f57fe5b60200282019050803561017e193684900301811261116c57600080fd5b80830192505050608001356105358f8f8c81811061118657fe5b60200282019050803561017e19368490030181126111a357600080fd5b87920160a00135905061130e565b9050848110156111bf578094505b5050505060008382106111d257836111d4565b815b90506111de611a38565b8d6001600160a01b0316633e228bae8c8c898181106111f957fe5b60200282019050803561017e193684900301811261121657600080fd5b919091019050848c8c8b81811061122957fe5b602002820190508035601e193684900301811261124557600080fd5b909101602081019150356001600160401b0381111561126357600080fd5b3681900382131561127357600080fd5b6040518563ffffffff1660e01b81526004016112929493929190612f21565b608060405180830381600087803b1580156112ac57600080fd5b505af11580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112e49190810190612331565b90506112f087826116b5565b505060019093019250610e87915050565b5098975050505050505050565b60008261131d5750600061134b565b8282028284828161132a57fe5b04146113485760405162461bcd60e51b81526004016100ec90612ea2565b90505b92915050565b60008082116113725760405162461bcd60e51b81526004016100ec90612e72565b600082848161137d57fe5b04949350505050565b6000828211156113a85760405162461bcd60e51b81526004016100ec90612e62565b50900390565b6001600160a01b038316158015906113e357506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b15611402576114026001600160a01b038416838363ffffffff61172b16565b505050565b6001600160a01b03811661142d5760405162461bcd60e51b81526004016100ec90612e22565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008161149757619c405a0391505b60405160208601600082868884018b8d89f19998505050505050505050565b60006001600160a01b03831615806114ea57506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b1561150057506001600160a01b0381163161134b565b6040516370a0823160e01b81526001600160a01b038416906370a082319061152c908590600401612cac565b60206040518083038186803b15801561154457600080fd5b505afa158015611558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061157c919081019061236d565b905061134b565b6115908383836000611828565b50505050565b6000808284116115ab575082905060006116ac565b60006115cc61271061053560025461072f888a61138690919063ffffffff16565b90506001600160a01b038616158015906115ef57506001600160a01b0386163314155b801561160457506001600160a01b0386163214155b1561166b5761161a81600a63ffffffff61135116565b91506116386001600160a01b0388168784600163ffffffff61182816565b156116665761164d858363ffffffff61138616565b945061165f818363ffffffff61138616565b905061166b565b600091505b61168f611676610689565b6001600160a01b0389169083600163ffffffff61182816565b156116a7576116a4858263ffffffff61138616565b94505b508391505b94509492505050565b805182516116c89163ffffffff61190616565b8252602080820151908301516116e39163ffffffff61190616565b6020830152604080820151908301516117019163ffffffff61190616565b60408301526060808201519083015161171f9163ffffffff61190616565b60609092019190915250565b8015806117b35750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e906117619030908690600401612ce3565b60206040518083038186803b15801561177957600080fd5b505afa15801561178d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117b1919081019061236d565b155b6117cf5760405162461bcd60e51b81526004016100ec90612ee2565b60405161140290849063095ea7b360e01b906117f19086908690602401612d5c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261192b565b600082611837575060016118fe565b6001600160a01b038516158061186957506001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b156118e05781156118a0576040516001600160a01b0385169084156108fc029085906000818181858888f1935050505090506118fe565b6040516001600160a01b0385169084156108fc029085906000818181858888f193505050501580156118d6573d6000803e3d6000fd5b50600190506118fe565b6118fa6001600160a01b038616858563ffffffff611a1016565b5060015b949350505050565b6000828201838110156113485760405162461bcd60e51b81526004016100ec90612e42565b61193d826001600160a01b0316611a32565b6119595760405162461bcd60e51b81526004016100ec90612ef2565b60006060836001600160a01b0316836040516119759190612ca0565b6000604051808303816000865af19150503d80600081146119b2576040519150601f19603f3d011682016040523d82523d6000602084013e6119b7565b606091505b5091509150816119d95760405162461bcd60e51b81526004016100ec90612e52565b80511561159057808060200190516119f49190810190612039565b6115905760405162461bcd60e51b81526004016100ec90612ec2565b60405161140290849063a9059cbb60e01b906117f19086908690602401612d5c565b3b151590565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b803561134b8161310e565b600082601f830112611a9c57600080fd5b8135611aaf611aaa82612fa3565b612f7d565b91508181835260208401935060208101905083856020840282011115611ad457600080fd5b60005b83811015611b005781611aea8882611a80565b8452506020928301929190910190600101611ad7565b5050505092915050565b60008083601f840112611b1c57600080fd5b5081356001600160401b03811115611b3357600080fd5b602083019150836020820283011115611b4b57600080fd5b9250929050565b600082601f830112611b6357600080fd5b8151611b71611aaa82612fa3565b91508181835260208401935060208101905083856060840282011115611b9657600080fd5b60005b83811015611b005781611bac8882611d70565b84525060209092019160609190910190600101611b99565b600082601f830112611bd557600080fd5b8135611be3611aaa82612fa3565b81815260209384019390925082018360005b83811015611b005781358601611c0b8882611dcb565b8452506020928301929190910190600101611bf5565b600082601f830112611c3257600080fd5b8135611c40611aaa82612fa3565b91508181835260208401935060208101905083856020840282011115611c6557600080fd5b60005b83811015611b005781611c7b8882611f12565b8452506020928301929190910190600101611c68565b805161134b81613122565b805161134b8161312b565b600082601f830112611cb857600080fd5b8135611cc6611aaa82612fc3565b91508082526020830160208301858383011115611ce257600080fd5b611ced8382846130cc565b50505092915050565b803561134b81613134565b600060808284031215611d1357600080fd5b611d1d6080612f7d565b90506000611d2b8484611c9c565b8252506020611d3c84848301611c9c565b6020830152506040611d5084828501611c9c565b6040830152506060611d6484828501611c9c565b60608301525092915050565b600060608284031215611d8257600080fd5b611d8c6060612f7d565b90506000611d9a8484611f1d565b8252506020611dab84848301611c9c565b6020830152506040611dbf84828501611c9c565b60408301525092915050565b60006101808284031215611dde57600080fd5b611de9610180612f7d565b90506000611df78484611a80565b8252506020611e0884848301611a80565b6020830152506040611e1c84828501611a80565b6040830152506060611e3084828501611a80565b6060830152506080611e4484828501611f12565b60808301525060a0611e5884828501611f12565b60a08301525060c0611e6c84828501611f12565b60c08301525060e0611e8084828501611f12565b60e083015250610100611e9584828501611f12565b61010083015250610120611eab84828501611f12565b610120830152506101408201356001600160401b03811115611ecc57600080fd5b611ed884828501611ca7565b610140830152506101608201356001600160401b03811115611ef957600080fd5b611f0584828501611ca7565b6101608301525092915050565b803561134b8161312b565b805161134b8161313d565b600060208284031215611f3a57600080fd5b60006118fe8484611a80565b60008060008060008060008060c0898b031215611f6257600080fd5b6000611f6e8b8b611a80565b9850506020611f7f8b828c01611a80565b9750506040611f908b828c01611a80565b9650506060611fa18b828c01611f12565b95505060808901356001600160401b03811115611fbd57600080fd5b611fc98b828c01611b0a565b945094505060a08901356001600160401b03811115611fe757600080fd5b611ff38b828c01611b0a565b92509250509295985092959890939650565b60006020828403121561201757600080fd5b81516001600160401b0381111561202d57600080fd5b6118fe84828501611b52565b60006020828403121561204b57600080fd5b60006118fe8484611c91565b6000806040838503121561206a57600080fd5b60006120768585611cf6565b925050602061208785828601611a80565b9150509250929050565b6000806000806000806000806000806101008b8d0312156120b157600080fd5b60006120bd8d8d611cf6565b9a505060206120ce8d828e01611a80565b99505060406120df8d828e01611a80565b98505060606120f08d828e01611a80565b97505060808b01356001600160401b0381111561210c57600080fd5b6121188d828e01611b0a565b965096505060a08b01356001600160401b0381111561213657600080fd5b6121428d828e01611b0a565b945094505060c06121558d828e01611f12565b92505060e06121668d828e01611f12565b9150509295989b9194979a5092959850565b6000806000806000806000806000806101408b8d03121561219857600080fd5b60006121a48d8d611cf6565b9a505060206121b58d828e01611cf6565b99505060406121c68d828e01611f12565b98505060606121d78d828e01611f12565b97505060806121e88d828e01611f12565b96505060a06121f98d828e01611a80565b95505060c08b01356001600160401b0381111561221557600080fd5b6122218d828e01611a8b565b94505060e08b01356001600160401b0381111561223d57600080fd5b6122498d828e01611ca7565b9350506101008b01356001600160401b0381111561226657600080fd5b6122728d828e01611c21565b9250506101208b01356001600160401b0381111561228f57600080fd5b6121668d828e01611c21565b600080600080608085870312156122b157600080fd5b60006122bd8787611cf6565b94505060206122ce87828801611cf6565b93505060406122df87828801611a80565b92505060608501356001600160401b038111156122fb57600080fd5b61230787828801611bc4565b91505092959194509250565b60006020828403121561232557600080fd5b60006118fe8484611cf6565b60006080828403121561234357600080fd5b60006118fe8484611d01565b60006060828403121561236157600080fd5b60006118fe8484611d70565b60006020828403121561237f57600080fd5b60006118fe8484611c9c565b60006118fe84848461257e565b60006123a483836129f8565b505060600190565b60006123b88383612a2f565b9392505050565b60006123b88383612b94565b6123d4816130c1565b82525050565b6123d481613094565b60006123ef8385612ff7565b93508360208402850161240184612fea565b8060005b8781101561244557848403895261241c8284613014565b61242786828461238b565b955061243284612fed565b60209b909b019a93505050600101612405565b5091979650505050505050565b600061245d82612ff3565b6124678185612ff7565b935061247283612fed565b8060005b838110156124a057815161248a8882612398565b975061249583612fed565b925050600101612476565b509495945050505050565b60006124b78385612ff7565b9350836020840285016124c984612fea565b8060005b878110156124455784840389526124e48284613064565b6124ee85826123ac565b94506124f983612fed565b60209a909a01999250506001016124cd565b600061251682612ff3565b6125208185612ff7565b93508360208202850161253285612fed565b8060005b85811015612445578484038952815161254f85826123bf565b945061255a83612fed565b60209a909a0199925050600101612536565b6123d48161309f565b6123d481612fea565b600061258a8385612ff7565b93506125978385846130cc565b6125a083613104565b9093019392505050565b60006125b582612ff3565b6125bf8185613000565b93506125cf8185602086016130d8565b9290920192915050565b60006125e482612ff3565b6125ee8185612ff7565b93506125fe8185602086016130d8565b6125a081613104565b6123d4816130a4565b600061261d601c83612ff7565b7f536d61727420636f6e7472616374206973207368757420646f776e2e00000000815260200192915050565b6000612656602683612ff7565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b600061269e601883612ff7565b7f43616c6c20646174612073686f756c64206578697374732e0000000000000000815260200192915050565b60006126d7601b83612ff7565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000612710602083612ff7565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000612749601e83612ff7565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815260200192915050565b6000612782601a83612ff7565b7f536166654d6174683a206469766973696f6e206279207a65726f000000000000815260200192915050565b60006127bb602383612ff7565b7f4d696e2072657475726e2073686f756c6420626520626967676572207468656e81526210181760e91b602082015260400192915050565b6000612800601b83612ff7565b7f52657475726e20616d6f756e74206973206e6f7420656e6f7567680000000000815260200192915050565b6000612839602183612ff7565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061287c602083612ff7565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006128b5602a83612ff7565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b6000612901600d83612ff7565b6c1058d8d95cdcc819195b9a5959609a1b815260200192915050565b600061292a603683612ff7565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b602082015260400192915050565b6000612982601f83612ff7565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b805160808301906129bf8482612575565b5060208201516129d26020850182612575565b5060408201516129e56040850182612575565b5060608201516115906060850182612575565b80516060830190612a098482612c97565b506020820151612a1c6020850182612575565b5060408201516115906040850182612575565b60006101808301612a408380613005565b612a4a85826123da565b50612a586020840184613005565b612a6560208601826123da565b50612a736040840184613005565b612a8060408601826123da565b50612a8e6060840184613005565b612a9b60608601826123da565b50612aa96080840184613085565b612ab66080860182612575565b50612ac460a0840184613085565b612ad160a0860182612575565b50612adf60c0840184613085565b612aec60c0860182612575565b50612afa60e0840184613085565b612b0760e0860182612575565b50612b16610100840184613085565b612b24610100860182612575565b50612b33610120840184613085565b612b41610120860182612575565b50612b50610140840184613014565b858303610140870152612b6483828461257e565b92505050612b76610160840184613014565b858303610160870152612b8a83828461257e565b9695505050505050565b8051600090610180840190612ba985826123da565b506020830151612bbc60208601826123da565b506040830151612bcf60408601826123da565b506060830151612be260608601826123da565b506080830151612bf56080860182612575565b5060a0830151612c0860a0860182612575565b5060c0830151612c1b60c0860182612575565b5060e0830151612c2e60e0860182612575565b50610100830151612c43610100860182612575565b50610120830151612c58610120860182612575565b50610140830151848203610140860152612c7282826125d9565b915050610160830151848203610160860152612c8e82826125d9565b95945050505050565b6123d4816130bb565b60006123b882846125aa565b6020810161134b82846123da565b6020810161134b82846123cb565b60408101612cd682856123cb565b6123b860208301846123da565b60408101612cd682856123da565b60c08101612cff828b6123da565b612d0c602083018a6123da565b612d1960408301896123da565b612d266060830188612575565b8181036080830152612d398186886124ab565b905081810360a0830152612d4e8184866123e3565b9a9950505050505050505050565b60408101612d6a82856123da565b6123b86020830184612575565b602080825281016123b88184612452565b602080825281016123b8818461250b565b6020810161134b828461256c565b60808101612db58287612607565b612dc260208301866123cb565b612dcf60408301856123cb565b612c8e6060830184612575565b60808101612dea8287612607565b612df76020830186612607565b612dcf6040830185612575565b6020810161134b8284612607565b6020808252810161134b81612610565b6020808252810161134b81612649565b6020808252810161134b81612691565b6020808252810161134b816126ca565b6020808252810161134b81612703565b6020808252810161134b8161273c565b6020808252810161134b81612775565b6020808252810161134b816127ae565b6020808252810161134b816127f3565b6020808252810161134b8161282c565b6020808252810161134b8161286f565b6020808252810161134b816128a8565b6020808252810161134b816128f4565b6020808252810161134b8161291d565b6020808252810161134b81612975565b6080810161134b82846129ae565b602080825281016123b88184612a2f565b60608082528101612f328187612a2f565b9050612f416020830186612575565b8181036040830152612b8a81848661257e565b6020810161134b8284612575565b60808101612f708287612575565b612df76020830186612575565b6040518181016001600160401b0381118282101715612f9b57600080fd5b604052919050565b60006001600160401b03821115612fb957600080fd5b5060209081020190565b60006001600160401b03821115612fd957600080fd5b506020601f91909101601f19160190565b90565b60200190565b5190565b90815260200190565b919050565b60006123b86020840184611a80565b6000808335601e193685900301811261302c57600080fd5b8381016020810193503591506001600160401b0382111561304c57600080fd5b3682900384131561305c57600080fd5b509250929050565b6000823561017e193684900301811261307c57600080fd5b90910192915050565b60006123b86020840184611f12565b600061134b826130af565b151590565b600061134b82613094565b6001600160a01b031690565b60ff1690565b600061134b826130a4565b82818337506000910152565b60005b838110156130f35781810151838201526020016130db565b838111156115905750506000910152565b601f01601f191690565b61311781613094565b8114610a1e57600080fd5b6131178161309f565b61311781612fea565b613117816130a4565b613117816130bb56fea365627a7a72315820c1a43fede7d704bc97ef81f3eb6109843bed9e1d91537fb3baf3572e1ec5fd506c6578706572696d656e74616cf564736f6c634300050b0040608060405234801561001057600080fd5b5060405161094138038061094183398101604081905261002f91610087565b600080546001600160a01b03199081163317909155600180546001600160a01b0394851690831617905560028054929093169116179055610103565b8051610076816100e3565b92915050565b8051610076816100fa565b6000806040838503121561009a57600080fd5b60006100a6858561007c565b92505060206100b78582860161006b565b9150509250929050565b6000610076826100d7565b6000610076826100c1565b6001600160a01b031690565b6100ec816100c1565b81146100f757600080fd5b50565b6100ec816100cc565b61082f806101126000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630a5ea466146101675780638da5cb5b1461017a578063b1746b8614610198578063c91d59fe146101ab578063ccf1af31146101c0575b6002546001600160a01b0316331415610165576001546040516370a0823160e01b81526001600160a01b039091169063a9059cbb90339083906370a08231906100a490309060040161069a565b60206040518083038186803b1580156100bc57600080fd5b505afa1580156100d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506100f49190810190610525565b6040518363ffffffff1660e01b81526004016101119291906106a8565b602060405180830381600087803b15801561012b57600080fd5b505af115801561013f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101639190810190610480565b505b005b6101656101753660046104a6565b6101c8565b61018261021c565b60405161018f919061069a565b60405180910390f35b6101656101a6366004610507565b61022b565b6101b36102e4565b60405161018f91906106eb565b6101826102f3565b6000546001600160a01b031633146101fb5760405162461bcd60e51b81526004016101f2906106f9565b60405180910390fd5b6102166001600160a01b03851684848463ffffffff61030216565b50505050565b6000546001600160a01b031681565b6000546001600160a01b031633146102555760405162461bcd60e51b81526004016101f2906106f9565b6001546040516331b35c9b60e11b815261a0aa61374a840104916001600160a01b031690636366b9369061028d908490600401610739565b602060405180830381600087803b1580156102a757600080fd5b505af11580156102bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506102df9190810190610525565b505050565b6001546001600160a01b031681565b6002546001600160a01b031681565b6040516102169085906323b872dd60e01b90610326908790879087906024016106c3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261036a826001600160a01b031661043d565b6103865760405162461bcd60e51b81526004016101f290610729565b60006060836001600160a01b0316836040516103a29190610687565b6000604051808303816000865af19150503d80600081146103df576040519150601f19603f3d011682016040523d82523d6000602084013e6103e4565b606091505b5091509150816104065760405162461bcd60e51b81526004016101f290610709565b80511561021657808060200190516104219190810190610480565b6102165760405162461bcd60e51b81526004016101f290610719565b3b151590565b803561044e816107ba565b92915050565b805161044e816107d1565b803561044e816107da565b803561044e816107e3565b805161044e816107e3565b60006020828403121561049257600080fd5b600061049e8484610454565b949350505050565b600080600080608085870312156104bc57600080fd5b60006104c8878761045f565b94505060206104d987828801610443565b93505060406104ea87828801610443565b92505060606104fb8782880161046a565b91505092959194509250565b60006020828403121561051957600080fd5b600061049e848461046a565b60006020828403121561053757600080fd5b600061049e8484610475565b61054c81610783565b82525050565b61054c81610759565b600061056682610747565b610570818561074b565b935061058081856020860161078e565b9290920192915050565b61054c81610769565b60006105a0601183610750565b701058d8d95cdcc81c995cdd1c9a58dd1959607a1b815260200192915050565b60006105cd602083610750565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000610606602a83610750565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b6000610652601f83610750565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b61054c81610780565b6000610693828461055b565b9392505050565b6020810161044e8284610552565b604081016106b68285610543565b610693602083018461067e565b606081016106d18286610552565b6106de6020830185610552565b61049e604083018461067e565b6020810161044e828461058a565b6020808252810161044e81610593565b6020808252810161044e816105c0565b6020808252810161044e816105f9565b6020808252810161044e81610645565b6020810161044e828461067e565b5190565b919050565b90815260200190565b600061044e82610774565b151590565b600061044e82610759565b6001600160a01b031690565b90565b600061044e82610769565b60005b838110156107a9578181015183820152602001610791565b838111156102165750506000910152565b6107c381610759565b81146107ce57600080fd5b50565b6107c381610764565b6107c381610769565b6107c38161078056fea365627a7a72315820e005115a269ff5c349553b71468dcd1821d809aac683b349abf11d6bdd0925866c6578706572696d656e74616cf564736f6c634300050b00408be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000000000000000000004d37f28d2db99e8d35a6c725a5f1749a085850a30000000000000000000000000000000000b3f879cb30fe243b4dfee438691c040000000000000000000000000000000000000000000000000000000000001388

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

0000000000000000000000004d37f28d2db99e8d35a6c725a5f1749a085850a30000000000000000000000000000000000b3f879cb30fe243b4dfee438691c040000000000000000000000000000000000000000000000000000000000001388

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000004d37f28d2db99e8d35a6c725a5f1749a085850a3
Arg [1] : 0000000000000000000000000000000000b3f879cb30fe243b4dfee438691c04
Arg [2] : 0000000000000000000000000000000000000000000000000000000000001388


Deployed ByteCode Sourcemap

27203:4752:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14746:10;;-1:-1:-1;;;14746:10:0;;;;14745:11;14737:52;;;;-1:-1:-1;;;14737:52:0;;;;;;;;;;;;;;;;;28249:10;28263:9;28249:23;;28241:32;;;;;;27203:4752;9352:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9352:140:0;;;:::i;18649:1813::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18649:1813:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8541:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8541:79:0;;;:::i;:::-;;;;;;;;8907:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8907:92:0;;;:::i;:::-;;;;;;;;15245:494;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15245:494:0;;;;;;;;:::i;31793:159::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31793:159:0;;;;;;;;:::i;14649:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14649:22:0;;;:::i;31506:279::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31506:279:0;;;;;;;;:::i;27468:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27468:27:0;;;:::i;:::-;;;;;;;;9647:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9647:109:0;;;;;;;;:::i;28289:2159::-;;;;;;;;;:::i;:::-;;;;;;;;14817:99;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14817:99:0;;;:::i;15747:2198::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15747:2198:0;;;;;;;;:::i;:::-;;;;;;;;9352:140;8753:9;:7;:9::i;:::-;8745:54;;;;-1:-1:-1;;;8745:54:0;;;;;;;;;9451:1;9435:6;;9414:40;;-1:-1:-1;;;;;9435:6:0;;;;9414:40;;9451:1;;9414:40;9482:1;9465:19;;-1:-1:-1;;;;;;9465:19:0;;;9352:140::o;18649:1813::-;18958:25;;-1:-1:-1;;;18958:25:0;;18885:42;;-1:-1:-1;;;;;18958:17:0;;;;;:25;;18976:6;;18958:25;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18958:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18958:25:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;18958:25:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;18958:25:0;;;;;;;;;18945:38;-1:-1:-1;19001:6:0;18996:1459;19017:10;:17;19013:1;:21;18996:1459;;;19058:15;19076:5;-1:-1:-1;;;;;19076:15:0;;19092:6;19099:1;19092:9;;;;;;;;;;;;;;:22;;;19076:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19076:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19076:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19076:39:0;;;;;;;;;19058:57;;19130:17;19150:5;-1:-1:-1;;;;;19150:15:0;;19166:6;19173:1;19166:9;;;;;;;;;;;;;;:22;;;19190:13;19150:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19150:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19150:54:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19150:54:0;;;;;;;;;19130:74;;19219:28;19263:7;19251:9;:19;19250:43;;19286:7;19250:43;;;19274:9;19250:43;19219:74;;19308:28;19339:84;19396:6;19403:1;19396:9;;;;;;;;;;;;;;:26;;;19339:52;19364:6;19371:1;19364:9;;;;;;;;;;;;;;:26;;;19339:20;:24;;:52;;;;:::i;:::-;:56;:84;:56;:84;:::i;:::-;19308:115;-1:-1:-1;19445:6:0;19440:653;19461:1;19457;:5;19440:653;;;19520:6;19527:1;19520:9;;;;;;;;;;;;;;:22;;;-1:-1:-1;;;;;19494:48:0;:6;19501:1;19494:9;;;;;;;;;;;;;;:22;;;-1:-1:-1;;;;;19494:48:0;;19490:588;;;19569:37;19609:121;19666:10;19677:1;19666:13;;;;;;;;;;;;;;:41;;;19609:6;19616:1;19609:9;;;;;;;;;;;;;;:26;;;:30;;:121;;;;:::i;:::-;19569:161;;19782:29;19759:20;:52;19755:304;;;19865:55;:20;19890:29;19865:55;:24;:55;:::i;:::-;19842:78;;19755:304;;;20002:1;19979:24;;20030:5;;;19755:304;19490:588;;19464:3;;19440:653;;;;20109:28;20140:105;20189:10;20200:1;20189:13;;;;;;;;;;;;;;:41;;;20140:6;20147:1;20140:9;;;;;;;:105;20109:136;;20289:20;20266;:43;20262:182;;;20376:52;20407:20;20376:6;20383:1;20376:9;;;;;;;:52;20332:10;20343:1;20332:13;;;;;;;;;;;;;;:41;;:96;;;;;20262:182;-1:-1:-1;;19036:3:0;;;;;-1:-1:-1;18996:1459:0;;-1:-1:-1;;18996:1459:0;;;18649:1813;;;;;;:::o;8541:79::-;8579:7;8606:6;-1:-1:-1;;;;;8606:6:0;8541:79;:::o;8907:92::-;8947:4;8985:6;-1:-1:-1;;;;;8985:6:0;8971:10;:20;;8907:92::o;15245:494::-;15567:14;15584:49;15629:3;15584:40;15620:3;15584:9;-1:-1:-1;;;;;15584:19:0;;15604:10;15584:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15584:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15584:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15584:31:0;;;;;;;;;:35;:40;:35;:40;:::i;:49::-;15644:87;;-1:-1:-1;;;15644:87:0;;15567:66;;-1:-1:-1;15644:4:0;;:21;;:87;;15666:8;;15676:11;;15689:13;;15567:66;;15712:6;;;;15720:10;;;;15644:87;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15644:87:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15644:87:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15644:87:0;;;;;;;;;;15245:494;;;;;;;;;;;:::o;31793:159::-;14746:10;;-1:-1:-1;;;14746:10:0;;;;14745:11;14737:52;;;;-1:-1:-1;;;14737:52:0;;;;;;;;;31881:30;;-1:-1:-1;;;31881:30:0;;31864:14;;-1:-1:-1;;;;;31881:15:0;;;;;:30;;31905:4;;31881:30;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31881:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31881:30:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;31881:30:0;;;;;;;;;31922:22;;-1:-1:-1;;;31922:22:0;;31864:47;;-1:-1:-1;;;;;;31922:14:0;;;;;:22;;31864:47;;31922:22;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31922:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31922:22:0;;;;14800:1;31793:159;:::o;14649:22::-;;;-1:-1:-1;;;14649:22:0;;;;;:::o;31506:279::-;14746:10;;-1:-1:-1;;;14746:10:0;;;;14745:11;14737:52;;;;-1:-1:-1;;;14737:52:0;;;;;;;;;-1:-1:-1;;;;;31601:20:0;;27416:42;31601:20;31597:181;;31643:34;;-1:-1:-1;;;31643:34:0;;31681:3;;-1:-1:-1;;;;;31643:15:0;;;;;:34;;31667:4;;31674:2;;31643:34;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31643:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31643:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;31643:34:0;;;;;;;;;:41;;31638:129;;31711:40;-1:-1:-1;;;;;31711:22:0;;31734:2;-1:-1:-1;;31711:40:0;:22;:40;:::i;:::-;31506:279;;:::o;27468:27::-;;;-1:-1:-1;;;;;27468:27:0;;:::o;9647:109::-;8753:9;:7;:9::i;:::-;8745:54;;;;-1:-1:-1;;;8745:54:0;;;;;;;;;9720:28;9739:8;9720:18;:28::i;:::-;9647:109;:::o;28289:2159::-;28715:20;14746:10;;-1:-1:-1;;;14746:10:0;;;;14745:11;14737:52;;;;-1:-1:-1;;;14737:52:0;;;;;;;;;28753:19;28775:9;28753:31;;28823:1;28805:15;:19;28797:67;;;;-1:-1:-1;;;28797:67:0;;;;;;;;;28906:1;28883:13;:20;:24;28875:61;;;;-1:-1:-1;;;28875:61:0;;;;;;;;;-1:-1:-1;;;;;28953:24:0;;27416:42;28953:24;28949:131;;28994:7;;;;;;;;;-1:-1:-1;;;;;28994:7:0;-1:-1:-1;;;;;28994:19:0;;29014:9;29025:10;29045:4;29052:15;28994:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28994:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28994:74:0;;;;28949:131;29097:6;29092:416;29113:13;:20;29109:1;:24;29092:416;;;29191:7;;29163:16;;-1:-1:-1;;;;;29191:7:0;;;;29163:13;;29177:1;;29163:16;;;;;;;;;;;;-1:-1:-1;;;;;29163:36:0;;;29155:62;;;;-1:-1:-1;;;29155:62:0;;;;;;;;;29240:255;29288:18;29307:1;29288:21;;;;;;;;;;;;;;29313:14;29288:40;29347:14;29380:6;29387:1;29380:9;;;;;;;;;;;;;;29424:6;29431:1;29424:9;;;;;;;;;;;;;;29408:6;29415:1;29419;29415:5;29408:13;;;;;;;;;;;;;;:25;29477:3;29452:18;29471:1;29452:21;;;;;;;;;;;;;;:28;;29240:13;29254:1;29240:16;;;;;;;;;;;;;;-1:-1:-1;;;;;29240:29:0;;;:255;;;;;;;;:::i;:::-;29232:264;;;;;;29135:3;;29092:416;;;-1:-1:-1;29558:84:0;29586:10;29598:43;-1:-1:-1;;;;;29598:28:0;;29635:4;29598:43;:28;:43;:::i;:::-;-1:-1:-1;;;;;29558:27:0;;;:84;;:27;:84;:::i;:::-;29670:41;-1:-1:-1;;;;;29670:26:0;;29705:4;29670:41;:26;:41;:::i;:::-;29655:56;;29723:21;29746:19;29769:62;29781:7;29790:8;29800:12;29814:16;29769:11;:62::i;:::-;29722:109;;;;29869:15;29852:13;:32;;29844:72;;;;-1:-1:-1;;;29844:72:0;;;;;;;;;29927:52;-1:-1:-1;;;;;29927:25:0;;29953:10;29965:13;29927:52;:25;:52;:::i;:::-;30019:10;-1:-1:-1;;;;;29997:147:0;;30044:9;30068:7;30090:15;30120:13;29997:147;;;;;;;;;;;;;;;;;;30230:8;-1:-1:-1;;;;;30162:217:0;30208:7;-1:-1:-1;;;;;30162:217:0;30184:9;-1:-1:-1;;;;;30162:217:0;;30253:15;30283:13;30311:11;30337:31;30354:13;30337:12;:16;;:31;;;;:::i;:::-;30162:217;;;;;;;;;;;;;;;;;;30392:7;;-1:-1:-1;;;;;30392:7:0;:20;30413:26;30429:9;30413:11;;:26;:15;:26;:::i;:::-;30392:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30392:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30392:48:0;;;;14800:1;;;28289:2159;;;;;;;;;;;;:::o;14817:99::-;8753:9;:7;:9::i;:::-;8745:54;;;;-1:-1:-1;;;8745:54:0;;;;;;;;;14865:10;:17;;-1:-1:-1;;;;14865:17:0;-1:-1:-1;;;14865:17:0;;;14898:10;;;;14865;14898;14817:99::o;15747:2198::-;16031:48;;:::i;:::-;16102:6;16097:1805;16114:17;;;16097:1805;;;16282:20;16239:16;:39;;;:63;16235:109;;16323:5;;16235:109;16429:28;16460:65;16485:16;:39;;;16460:20;:24;;:65;;;;:::i;:::-;16429:96;;16542:39;;:::i;:::-;16597:11;-1:-1:-1;;;;;16584:38:0;;16623:6;;16630:1;16623:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;16584:49:0;;-1:-1:-1;;;;;;16584:49:0;;;;;;;;;175:33:-1;;;;-1:-1;16584:49:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16584:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16584:49:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16584:49:0;;;;;;;;;16542:91;;16648:33;16684:69;16715:9;:37;;;16684:6;;16691:1;16684:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;175:33;;;16684:26:0;;;;;-1:-1:-1;16684:30:0;:69::i;:::-;16648:105;;16880:15;16912:10;-1:-1:-1;;;;;16898:35:0;;16934:6;;16941:1;16934:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;16934:22:0;;175:33:-1;16934:22:0;;;;-1:-1:-1;16934:22:0;;;16898:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16898:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16898:59:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16898:59:0;;;;;;;;;16880:77;;16976:17;17010:10;-1:-1:-1;;;;;16996:35:0;;17032:6;;17039:1;17032:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;17032:22:0;;175:33:-1;17032:22:0;;;;-1:-1:-1;17032:22:0;;;17056:13;16996:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16996:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16996:74:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16996:74:0;;;;;;;;;16976:94;;17089:28;17133:7;17121:9;:19;17120:43;;17156:7;17120:43;;;17144:9;17120:43;17089:74;;17182:28;17213:84;17270:6;;17277:1;17270:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;189:18;179:8;175:33;163:45;;0:211;17270:9:0;:26;;;17213:52;17238:6;;17245:1;17238:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;17213:20:0;;175:33:-1;17238:26:0;;;;-1:-1:-1;17213:24:0;:52::i;:84::-;17182:115;;17345:25;17322:20;:48;17318:145;;;17423:20;17395:48;;17318:145;16097:1805;;;;17494:19;17545:20;17517:25;:48;17516:101;;17597:20;17516:101;;;17569:25;17516:101;17494:123;;17634:43;;:::i;:::-;17693:11;-1:-1:-1;;;;;17680:42:0;;17741:6;;17748:1;17741:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;175:33;;;;;-1:-1;17769:11:0;17799:10;;17810:1;17799:13;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:48;68:73;;58:2;;155:1;152;145:12;58:2;174:33;;;69:4;55:19;;;-1:-1;16:22;-1:-1;;;;;82:30;;79:2;;;125:1;122;115:12;79:2;155:14;151:37;;;137:52;;134:2;;;202:1;199;192:12;134:2;17680:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17680:147:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17680:147:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17680:147:0;;;;;;;;;17634:193;;17844:46;17860:16;17878:11;17844:15;:46::i;:::-;-1:-1:-1;;16133:3:0;;;;;-1:-1:-1;16097:1805:0;;-1:-1:-1;;16097:1805:0;;-1:-1:-1;15747:2198:0;;;;;;;;;;:::o;5837:471::-;5895:7;6140:6;6136:47;;-1:-1:-1;6170:1:0;6163:8;;6136:47;6207:5;;;6211:1;6207;:5;:1;6231:5;;;;;:10;6223:56;;;;-1:-1:-1;;;6223:56:0;;;;;;;;;6299:1;-1:-1:-1;5837:471:0;;;;;:::o;6776:333::-;6834:7;6933:1;6929;:5;6921:44;;;;-1:-1:-1;;;6921:44:0;;;;;;;;;6976:9;6992:1;6988;:5;;;;;;;6776:333;-1:-1:-1;;;;6776:333:0:o;5402:184::-;5460:7;5493:1;5488;:6;;5480:49;;;;-1:-1:-1;;;5480:49:0;;;;;;;;;-1:-1:-1;5552:5:0;;;5402:184::o;25158:202::-;-1:-1:-1;;;;;25250:21:0;;;;;;:45;;-1:-1:-1;;;;;;25275:20:0;;24397:42;25275:20;;25250:45;25246:107;;;25312:29;-1:-1:-1;;;;;25312:17:0;;25330:2;25334:6;25312:29;:17;:29;:::i;:::-;25158:202;;;:::o;9862:229::-;-1:-1:-1;;;;;9936:22:0;;9928:73;;;;-1:-1:-1;;;9928:73:0;;;;;;;;;10038:6;;;10017:38;;-1:-1:-1;;;;;10017:38:0;;;;10038:6;;;10017:38;;;10066:6;:17;;-1:-1:-1;;;;;;10066:17:0;-1:-1:-1;;;;;10066:17:0;;;;;;;;;;9862:229::o;363:955::-;503:11;596:13;592:74;;649:5;637:9;:17;626:28;;592:74;715:4;709:11;849:2;843:4;839:13;1211:1;1191;1082:10;1052;1049:1;1045:18;1021:5;991:11;964:8;941:359;931:369;685:626;-1:-1:-1;;;;;;;;;685:626:0:o;26000:261::-;26078:7;-1:-1:-1;;;;;26102:21:0;;;;:45;;-1:-1:-1;;;;;;26127:20:0;;24397:42;26127:20;26102:45;26098:156;;;-1:-1:-1;;;;;;26171:11:0;;;26164:18;;26098:156;26222:20;;-1:-1:-1;;;26222:20:0;;-1:-1:-1;;;;;26222:15:0;;;;;:20;;26238:3;;26222:20;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26222:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26222:20:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26222:20:0;;;;;;;;;26215:27;;;;24449:140;24538:43;24556:5;24563:2;24567:6;24575:5;24538:17;:43::i;:::-;;24449:140;;;:::o;30456:1042::-;30640:21;30672:19;30735:16;30719:12;:32;30715:89;;-1:-1:-1;30776:12:0;;-1:-1:-1;30790:1:0;30768:24;;30715:89;30816:17;30836:54;30884:5;30836:43;30875:3;;30836:34;30853:16;30836:12;:16;;:34;;;;:::i;:54::-;30816:74;-1:-1:-1;;;;;;30907:22:0;;;;;;:48;;-1:-1:-1;;;;;;30933:22:0;;30945:10;30933:22;;30907:48;:73;;;;-1:-1:-1;;;;;;30959:21:0;;30971:9;30959:21;;30907:73;30903:403;;;31011:17;:9;31025:2;31011:17;:13;:17;:::i;:::-;30997:31;-1:-1:-1;31047:54:0;-1:-1:-1;;;;;31047:25:0;;31073:8;30997:31;31096:4;31047:54;:25;:54;:::i;:::-;31043:252;;;31137:29;:12;31154:11;31137:29;:16;:29;:::i;:::-;31122:44;-1:-1:-1;31197:26:0;:9;31211:11;31197:26;:13;:26;:::i;:::-;31185:38;;31043:252;;;31278:1;31264:15;;31043:252;31322:51;31348:7;:5;:7::i;:::-;-1:-1:-1;;;;;31322:25:0;;;31357:9;31368:4;31322:51;:25;:51;:::i;:::-;31318:126;;;31405:27;:12;31422:9;31405:27;:16;:27;:::i;:::-;31390:42;;31318:126;-1:-1:-1;31464:12:0;;-1:-1:-1;30456:1042:0;;;;;;;;:::o;17953:688::-;18238:40;;18194:39;;:85;;;:43;:85;:::i;:::-;18152:127;;18376:40;;;;;18332:39;;;;:85;;;:43;:85;:::i;:::-;18290:39;;;:127;18494:30;;;;;18460:29;;;;:65;;;:33;:65;:::i;:::-;18428:29;;;:97;18602:30;;;;;18568:29;;;;:65;;;:33;:65;:::i;:::-;18536:29;;;;:97;;;;-1:-1:-1;17953:688:0:o;21429:621::-;21799:10;;;21798:62;;-1:-1:-1;21815:39:0;;-1:-1:-1;;;21815:39:0;;-1:-1:-1;;;;;21815:15:0;;;;;:39;;21839:4;;21846:7;;21815:39;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21815:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21815:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;21815:39:0;;;;;;;;;:44;21798:62;21790:152;;;;-1:-1:-1;;;21790:152:0;;;;;;;;;21979:62;;21953:89;;21972:5;;-1:-1:-1;;;22002:22:0;21979:62;;22026:7;;22035:5;;21979:62;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;21979:62:0;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;;21979:62:0;;;179:29:-1;;;;160:49;;;21953:18:0;:89::i;24597:553::-;24697:4;24718:11;24714:55;;-1:-1:-1;24753:4:0;24746:11;;24714:55;-1:-1:-1;;;;;24785:21:0;;;;:45;;-1:-1:-1;;;;;;24810:20:0;;24397:42;24810:20;24785:45;24781:362;;;24851:7;24847:196;;;24886:33;;-1:-1:-1;;;;;24886:25:0;;;:33;;;;;24912:6;;24886:33;;;;24912:6;24886:25;:33;;;;;;;24879:40;;;;24847:196;24960:37;;-1:-1:-1;;;;;24960:29:0;;;:37;;;;;24990:6;;24960:37;;;;24990:6;24960:29;:37;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24960:37:0;25023:4;25016:11;;;;24781:362;25075:30;-1:-1:-1;;;;;25075:18:0;;25094:2;25098:6;25075:30;:18;:30;:::i;:::-;-1:-1:-1;25127:4:0;24781:362;24597:553;;;;;;:::o;4946:181::-;5004:7;5036:5;;;5060:6;;;;5052:46;;;;-1:-1:-1;;;5052:46:0;;;;;;;;23027:1114;23631:27;23639:5;-1:-1:-1;;;;;23631:25:0;;:27::i;:::-;23623:71;;;;-1:-1:-1;;;23623:71:0;;;;;;;;;23768:12;23782:23;23817:5;-1:-1:-1;;;;;23809:19:0;23829:4;23809:25;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;23767:67:0;;;;23853:7;23845:52;;;;-1:-1:-1;;;23845:52:0;;;;;;;;;23914:17;;:21;23910:224;;24056:10;24045:30;;;;;;;;;;;;;;24037:85;;;;-1:-1:-1;;;24037:85:0;;;;;;;;21033:176;21142:58;;21116:85;;21135:5;;-1:-1:-1;;;21165:23:0;21142:58;;21190:2;;21194:5;;21142:58;;;;14042:422;14409:20;14448:8;;;14042:422::o;27203:4752::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;27203:4752:0;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;313:707;;430:3;423:4;415:6;411:17;407:27;397:2;;448:1;445;438:12;397:2;485:6;472:20;507:80;522:64;579:6;522:64;;;507:80;;;498:89;;604:5;629:6;622:5;615:21;659:4;651:6;647:17;637:27;;681:4;676:3;672:14;665:21;;734:6;781:3;773:4;765:6;761:17;756:3;752:27;749:36;746:2;;;798:1;795;788:12;746:2;823:1;808:206;833:6;830:1;827:13;808:206;;;891:3;913:37;946:3;934:10;913:37;;;901:50;;-1:-1;974:4;965:14;;;;993;;;;;855:1;848:9;808:206;;;812:14;390:630;;;;;;;;1044:359;;;1181:3;1174:4;1166:6;1162:17;1158:27;1148:2;;1199:1;1196;1189:12;1148:2;-1:-1;1219:20;;-1:-1;;;;;1248:30;;1245:2;;;1291:1;1288;1281:12;1245:2;1325:4;1317:6;1313:17;1301:29;;1376:3;1368:4;1360:6;1356:17;1346:8;1342:32;1339:41;1336:2;;;1393:1;1390;1383:12;1336:2;1141:262;;;;;;1451:788;;1601:3;1594:4;1586:6;1582:17;1578:27;1568:2;;1619:1;1616;1609:12;1568:2;1649:6;1643:13;1671:102;1686:86;1765:6;1686:86;;1671:102;1662:111;;1790:5;1815:6;1808:5;1801:21;1845:4;1837:6;1833:17;1823:27;;1867:4;1862:3;1858:14;1851:21;;1920:6;1967:3;1959:4;1951:6;1947:17;1942:3;1938:27;1935:36;1932:2;;;1984:1;1981;1974:12;1932:2;2009:1;1994:239;2019:6;2016:1;2013:13;1994:239;;;2077:3;2099:70;2165:3;2153:10;2099:70;;;2087:83;;-1:-1;2193:4;2184:14;;;;2221:4;2212:14;;;;;2041:1;2034:9;1994:239;;2699:732;;2834:3;2827:4;2819:6;2815:17;2811:27;2801:2;;2852:1;2849;2842:12;2801:2;2889:6;2876:20;2911:98;2926:82;3001:6;2926:82;;2911:98;3037:21;;;3081:4;3069:17;;;;2902:107;;-1:-1;3094:14;;3069:17;3189:1;3174:251;3199:6;3196:1;3193:13;3174:251;;;3282:3;3269:17;3261:6;3257:30;3306:55;3357:3;3345:10;3306:55;;;3294:68;;-1:-1;3385:4;3376:14;;;;3404;;;;;3221:1;3214:9;3174:251;;3457:707;;3574:3;3567:4;3559:6;3555:17;3551:27;3541:2;;3592:1;3589;3582:12;3541:2;3629:6;3616:20;3651:80;3666:64;3723:6;3666:64;;3651:80;3642:89;;3748:5;3773:6;3766:5;3759:21;3803:4;3795:6;3791:17;3781:27;;3825:4;3820:3;3816:14;3809:21;;3878:6;3925:3;3917:4;3909:6;3905:17;3900:3;3896:27;3893:36;3890:2;;;3942:1;3939;3932:12;3890:2;3967:1;3952:206;3977:6;3974:1;3971:13;3952:206;;;4035:3;4057:37;4090:3;4078:10;4057:37;;;4045:50;;-1:-1;4118:4;4109:14;;;;4137;;;;;3999:1;3992:9;3952:206;;4172:128;4247:13;;4265:30;4247:13;4265:30;;4307:134;4385:13;;4403:33;4385:13;4403:33;;4449:432;;4546:3;4539:4;4531:6;4527:17;4523:27;4513:2;;4564:1;4561;4554:12;4513:2;4601:6;4588:20;4623:60;4638:44;4675:6;4638:44;;4623:60;4614:69;;4703:6;4696:5;4689:21;4739:4;4731:6;4727:17;4772:4;4765:5;4761:16;4807:3;4798:6;4793:3;4789:16;4786:25;4783:2;;;4824:1;4821;4814:12;4783:2;4834:41;4868:6;4863:3;4858;4834:41;;;4506:375;;;;;;;;5338:158;5419:20;;5444:47;5419:20;5444:47;;5881:864;;6009:4;5997:9;5992:3;5988:19;5984:30;5981:2;;;6027:1;6024;6017:12;5981:2;6045:20;6060:4;6045:20;;;6036:29;-1:-1;6133:1;6164:60;6220:3;6200:9;6164:60;;;6140:85;;-1:-1;6304:2;6337:60;6393:3;6369:22;;;6337:60;;;6330:4;6323:5;6319:16;6312:86;6246:163;6467:2;6500:60;6556:3;6547:6;6536:9;6532:22;6500:60;;;6493:4;6486:5;6482:16;6475:86;6419:153;6630:2;6663:60;6719:3;6710:6;6699:9;6695:22;6663:60;;;6656:4;6649:5;6645:16;6638:86;6582:153;5975:770;;;;;6788:684;;6910:4;6898:9;6893:3;6889:19;6885:30;6882:2;;;6928:1;6925;6918:12;6882:2;6946:20;6961:4;6946:20;;;6937:29;-1:-1;7023:1;7054:58;7108:3;7088:9;7054:58;;;7030:83;;-1:-1;7179:2;7212:60;7268:3;7244:22;;;7212:60;;;7205:4;7198:5;7194:16;7187:86;7134:150;7357:2;7390:60;7446:3;7437:6;7426:9;7422:22;7390:60;;;7383:4;7376:5;7372:16;7365:86;7294:168;6876:596;;;;;8242:2204;;8349:5;8337:9;8332:3;8328:19;8324:31;8321:2;;;8368:1;8365;8358:12;8321:2;8386:21;8401:5;8386:21;;;8377:30;-1:-1;8465:1;8496:49;8541:3;8521:9;8496:49;;;8472:74;;-1:-1;8615:2;8648:49;8693:3;8669:22;;;8648:49;;;8641:4;8634:5;8630:16;8623:75;8567:142;8774:2;8807:49;8852:3;8843:6;8832:9;8828:22;8807:49;;;8800:4;8793:5;8789:16;8782:75;8719:149;8927:2;8960:49;9005:3;8996:6;8985:9;8981:22;8960:49;;;8953:4;8946:5;8942:16;8935:75;8878:143;9083:3;9117:49;9162:3;9153:6;9142:9;9138:22;9117:49;;;9110:4;9103:5;9099:16;9092:75;9031:147;9240:3;9274:49;9319:3;9310:6;9299:9;9295:22;9274:49;;;9267:4;9260:5;9256:16;9249:75;9188:147;9389:3;9423:49;9468:3;9459:6;9448:9;9444:22;9423:49;;;9416:4;9409:5;9405:16;9398:75;9345:139;9538:3;9572:49;9617:3;9608:6;9597:9;9593:22;9572:49;;;9565:4;9558:5;9554:16;9547:75;9494:139;9700:3;9735:49;9780:3;9771:6;9760:9;9756:22;9735:49;;;9727:5;9720;9716:17;9709:76;9643:153;9846:3;9881:49;9926:3;9917:6;9906:9;9902:22;9881:49;;;9873:5;9866;9862:17;9855:76;9806:136;10030:3;10019:9;10015:19;10002:33;-1:-1;;;;;10047:6;10044:30;10041:2;;;10087:1;10084;10077:12;10041:2;10123:54;10173:3;10164:6;10153:9;10149:22;10123:54;;;10115:5;10108;10104:17;10097:81;9952:237;10277:3;10266:9;10262:19;10249:33;-1:-1;;;;;10294:6;10291:30;10288:2;;;10334:1;10331;10324:12;10288:2;10370:54;10420:3;10411:6;10400:9;10396:22;10370:54;;;10362:5;10355;10351:17;10344:81;10199:237;8315:2131;;;;;10453:130;10520:20;;10545:33;10520:20;10545:33;;10731:130;10807:13;;10825:31;10807:13;10825:31;;10868:241;;10972:2;10960:9;10951:7;10947:23;10943:32;10940:2;;;10988:1;10985;10978:12;10940:2;11023:1;11040:53;11085:7;11065:9;11040:53;;11116:1235;;;;;;;;;11402:3;11390:9;11381:7;11377:23;11373:33;11370:2;;;11419:1;11416;11409:12;11370:2;11454:1;11471:53;11516:7;11496:9;11471:53;;;11461:63;;11433:97;11561:2;11579:53;11624:7;11615:6;11604:9;11600:22;11579:53;;;11569:63;;11540:98;11669:2;11687:53;11732:7;11723:6;11712:9;11708:22;11687:53;;;11677:63;;11648:98;11777:2;11795:53;11840:7;11831:6;11820:9;11816:22;11795:53;;;11785:63;;11756:98;11913:3;11902:9;11898:19;11885:33;-1:-1;;;;;11930:6;11927:30;11924:2;;;11970:1;11967;11960:12;11924:2;11998:100;12090:7;12081:6;12070:9;12066:22;11998:100;;;11988:110;;;;11864:240;12163:3;12152:9;12148:19;12135:33;-1:-1;;;;;12180:6;12177:30;12174:2;;;12220:1;12217;12210:12;12174:2;12248:87;12327:7;12318:6;12307:9;12303:22;12248:87;;;12238:97;;;;12114:227;11364:987;;;;;;;;;;;;12358:436;;12520:2;12508:9;12499:7;12495:23;12491:32;12488:2;;;12536:1;12533;12526:12;12488:2;12571:24;;-1:-1;;;;;12604:30;;12601:2;;;12647:1;12644;12637:12;12601:2;12667:111;12770:7;12761:6;12750:9;12746:22;12667:111;;12801:257;;12913:2;12901:9;12892:7;12888:23;12884:32;12881:2;;;12929:1;12926;12919:12;12881:2;12964:1;12981:61;13034:7;13014:9;12981:61;;13065:394;;;13200:2;13188:9;13179:7;13175:23;13171:32;13168:2;;;13216:1;13213;13206:12;13168:2;13251:1;13268:67;13327:7;13307:9;13268:67;;;13258:77;;13230:111;13372:2;13390:53;13435:7;13426:6;13415:9;13411:22;13390:53;;;13380:63;;13351:98;13162:297;;;;;;13466:1515;;;;;;;;;;;13800:3;13788:9;13779:7;13775:23;13771:33;13768:2;;;13817:1;13814;13807:12;13768:2;13852:1;13869:67;13928:7;13908:9;13869:67;;;13859:77;;13831:111;13973:2;13991:53;14036:7;14027:6;14016:9;14012:22;13991:53;;;13981:63;;13952:98;14081:2;14099:53;14144:7;14135:6;14124:9;14120:22;14099:53;;;14089:63;;14060:98;14189:2;14207:53;14252:7;14243:6;14232:9;14228:22;14207:53;;;14197:63;;14168:98;14325:3;14314:9;14310:19;14297:33;-1:-1;;;;;14342:6;14339:30;14336:2;;;14382:1;14379;14372:12;14336:2;14410:100;14502:7;14493:6;14482:9;14478:22;14410:100;;;14400:110;;;;14276:240;14575:3;14564:9;14560:19;14547:33;-1:-1;;;;;14592:6;14589:30;14586:2;;;14632:1;14629;14622:12;14586:2;14660:87;14739:7;14730:6;14719:9;14715:22;14660:87;;;14650:97;;;;14526:227;14784:3;14803:53;14848:7;14839:6;14828:9;14824:22;14803:53;;;14793:63;;14763:99;14893:3;14912:53;14957:7;14948:6;14937:9;14933:22;14912:53;;;14902:63;;14872:99;13762:1219;;;;;;;;;;;;;;14988:1957;;;;;;;;;;;15365:3;15353:9;15344:7;15340:23;15336:33;15333:2;;;15382:1;15379;15372:12;15333:2;15417:1;15434:67;15493:7;15473:9;15434:67;;;15424:77;;15396:111;15538:2;15556:67;15615:7;15606:6;15595:9;15591:22;15556:67;;;15546:77;;15517:112;15660:2;15678:53;15723:7;15714:6;15703:9;15699:22;15678:53;;;15668:63;;15639:98;15768:2;15786:53;15831:7;15822:6;15811:9;15807:22;15786:53;;;15776:63;;15747:98;15876:3;15895:53;15940:7;15931:6;15920:9;15916:22;15895:53;;;15885:63;;15855:99;15985:3;16004:61;16057:7;16048:6;16037:9;16033:22;16004:61;;;15994:71;;15964:107;16130:3;16119:9;16115:19;16102:33;-1:-1;;;;;16147:6;16144:30;16141:2;;;16187:1;16184;16177:12;16141:2;16207:78;16277:7;16268:6;16257:9;16253:22;16207:78;;;16197:88;;16081:210;16350:3;16339:9;16335:19;16322:33;-1:-1;;;;;16367:6;16364:30;16361:2;;;16407:1;16404;16397:12;16361:2;16427:62;16481:7;16472:6;16461:9;16457:22;16427:62;;;16417:72;;16301:194;16554:3;16543:9;16539:19;16526:33;-1:-1;;;;;16571:6;16568:30;16565:2;;;16611:1;16608;16601:12;16565:2;16631:78;16701:7;16692:6;16681:9;16677:22;16631:78;;;16621:88;;16505:210;16774:3;16763:9;16759:19;16746:33;-1:-1;;;;;16791:6;16788:30;16785:2;;;16831:1;16828;16821:12;16785:2;16851:78;16921:7;16912:6;16901:9;16897:22;16851:78;;16952:857;;;;;17184:3;17172:9;17163:7;17159:23;17155:33;17152:2;;;17201:1;17198;17191:12;17152:2;17236:1;17253:67;17312:7;17292:9;17253:67;;;17243:77;;17215:111;17357:2;17375:73;17440:7;17431:6;17420:9;17416:22;17375:73;;;17365:83;;17336:118;17485:2;17503:53;17548:7;17539:6;17528:9;17524:22;17503:53;;;17493:63;;17464:98;17621:2;17610:9;17606:18;17593:32;-1:-1;;;;;17637:6;17634:30;17631:2;;;17677:1;17674;17667:12;17631:2;17697:96;17785:7;17776:6;17765:9;17761:22;17697:96;;;17687:106;;17572:227;17146:663;;;;;;;;17816:267;;17933:2;17921:9;17912:7;17908:23;17904:32;17901:2;;;17949:1;17946;17939:12;17901:2;17984:1;18001:66;18059:7;18039:9;18001:66;;18090:320;;18233:3;18221:9;18212:7;18208:23;18204:33;18201:2;;;18250:1;18247;18240:12;18201:2;18285:1;18302:92;18386:7;18366:9;18302:92;;18417:315;;18558:2;18546:9;18537:7;18533:23;18529:32;18526:2;;;18574:1;18571;18564:12;18526:2;18609:1;18626:90;18708:7;18688:9;18626:90;;18739:263;;18854:2;18842:9;18833:7;18829:23;18825:32;18822:2;;;18870:1;18867;18860:12;18822:2;18905:1;18922:64;18978:7;18958:9;18922:64;;19010:197;;19131:70;19197:3;19189:6;19181;19131:70;;19216:265;;19347:94;19437:3;19429:6;19347:94;;;-1:-1;;19470:4;19461:14;;19340:141;19490:233;;19629:88;19713:3;19705:6;19629:88;;;19615:102;19608:115;-1:-1;;;19608:115;19732:229;;19869:86;19951:3;19943:6;19869:86;;19969:142;20060:45;20099:5;20060:45;;;20055:3;20048:58;20042:69;;;20118:103;20191:24;20209:5;20191:24;;20375:903;;20541:91;20625:6;20620:3;20541:91;;;20534:98;;20655:3;20697:4;20689:6;20685:17;20680:3;20676:27;20724:65;20783:5;20724:65;;;20809:7;20837:1;20822:417;20847:6;20844:1;20841:13;20822:417;;;20909:9;20903:4;20899:20;20894:3;20887:33;20963:49;21005:6;20996:7;20963:49;;;21027:91;21113:4;21098:13;21083;21027:91;;;21019:99;;21135:69;21197:6;21135:69;;;21227:4;21218:14;;;;;21125:79;-1:-1;;;20869:1;20862:9;20822:417;;;-1:-1;21252:4;;20521:757;-1:-1;;;;;;;20521:757;21361:866;;21550:76;21620:5;21550:76;;;21639:108;21740:6;21735:3;21639:108;;;21632:115;;21768:78;21840:5;21768:78;;;21866:7;21894:1;21879:326;21904:6;21901:1;21898:13;21879:326;;;21971:6;21965:13;21992:107;22095:3;22080:13;21992:107;;;21985:114;;22116:82;22191:6;22116:82;;;22106:92;-1:-1;;21926:1;21919:9;21879:326;;;-1:-1;22218:3;;21529:698;-1:-1;;;;;21529:698;22302:977;;22494:104;22591:6;22586:3;22494:104;;;22487:111;;22621:3;22663:4;22655:6;22651:17;22646:3;22642:27;22690:78;22762:5;22690:78;;;22788:7;22816:1;22801:439;22826:6;22823:1;22820:13;22801:439;;;22888:9;22882:4;22878:20;22873:3;22866:33;22927:62;22982:6;22973:7;22927:62;;;23004:102;23101:4;23086:13;23004:102;;;22996:110;;23123:82;23198:6;23123:82;;;23228:4;23219:14;;;;;23113:92;-1:-1;;22848:1;22841:9;22801:439;;23354:992;;23535:72;23601:5;23535:72;;;23620:104;23717:6;23712:3;23620:104;;;23613:111;;23747:3;23789:4;23781:6;23777:17;23772:3;23768:27;23816:74;23884:5;23816:74;;;23910:7;23938:1;23923:384;23948:6;23945:1;23942:13;23923:384;;;24010:9;24004:4;24000:20;23995:3;23988:33;24055:6;24049:13;24077:100;24172:4;24157:13;24077:100;;;24069:108;;24194:78;24265:6;24194:78;;;24295:4;24286:14;;;;;24184:88;-1:-1;;23970:1;23963:9;23923:384;;24354:104;24431:21;24446:5;24431:21;;24465:103;24538:24;24556:5;24538:24;;24598:273;;24698:60;24751:6;24746:3;24698:60;;;24691:67;;24770:43;24806:6;24801:3;24794:5;24770:43;;;24835:29;24857:6;24835:29;;;24826:39;;;;24684:187;-1:-1;;;24684:187;25203:356;;25331:38;25363:5;25331:38;;;25381:88;25462:6;25457:3;25381:88;;;25374:95;;25474:52;25519:6;25514:3;25507:4;25500:5;25496:16;25474:52;;;25538:16;;;;;25311:248;-1:-1;;25311:248;25566:315;;25662:34;25690:5;25662:34;;;25708:60;25761:6;25756:3;25708:60;;;25701:67;;25773:52;25818:6;25813:3;25806:4;25799:5;25795:16;25773:52;;;25846:29;25868:6;25846:29;;25888:154;25985:51;26030:5;25985:51;;26225:364;;26385:67;26449:2;26444:3;26385:67;;;26485:66;26465:87;;26580:2;26571:12;;26371:218;-1:-1;;26371:218;26598:465;;26758:67;26822:2;26817:3;26758:67;;;26858:66;26838:87;;-1:-1;;;26954:2;26945:12;;26938:88;27054:2;27045:12;;26744:319;-1:-1;;26744:319;27072:364;;27232:67;27296:2;27291:3;27232:67;;;27332:66;27312:87;;27427:2;27418:12;;27218:218;-1:-1;;27218:218;27445:364;;27605:67;27669:2;27664:3;27605:67;;;27705:66;27685:87;;27800:2;27791:12;;27591:218;-1:-1;;27591:218;27818:364;;27978:67;28042:2;28037:3;27978:67;;;28078:66;28058:87;;28173:2;28164:12;;27964:218;-1:-1;;27964:218;28191:364;;28351:67;28415:2;28410:3;28351:67;;;28451:66;28431:87;;28546:2;28537:12;;28337:218;-1:-1;;28337:218;28564:364;;28724:67;28788:2;28783:3;28724:67;;;28824:66;28804:87;;28919:2;28910:12;;28710:218;-1:-1;;28710:218;28937:465;;29097:67;29161:2;29156:3;29097:67;;;29197:66;29177:87;;-1:-1;;;29293:2;29284:12;;29277:88;29393:2;29384:12;;29083:319;-1:-1;;29083:319;29411:364;;29571:67;29635:2;29630:3;29571:67;;;29671:66;29651:87;;29766:2;29757:12;;29557:218;-1:-1;;29557:218;29784:465;;29944:67;30008:2;30003:3;29944:67;;;30044:66;30024:87;;-1:-1;;;30140:2;30131:12;;30124:88;30240:2;30231:12;;29930:319;-1:-1;;29930:319;30258:364;;30418:67;30482:2;30477:3;30418:67;;;30518:66;30498:87;;30613:2;30604:12;;30404:218;-1:-1;;30404:218;30631:465;;30791:67;30855:2;30850:3;30791:67;;;30891:66;30871:87;;-1:-1;;;30987:2;30978:12;;30971:88;31087:2;31078:12;;30777:319;-1:-1;;30777:319;31105:364;;31265:67;31329:2;31324:3;31265:67;;;-1:-1;;;31345:87;;31460:2;31451:12;;31251:218;-1:-1;;31251:218;31478:465;;31638:67;31702:2;31697:3;31638:67;;;31738:66;31718:87;;-1:-1;;;31834:2;31825:12;;31818:88;31934:2;31925:12;;31624:319;-1:-1;;31624:319;31952:364;;32112:67;32176:2;32171:3;32112:67;;;32212:66;32192:87;;32307:2;32298:12;;32098:218;-1:-1;;32098:218;32397:840;32630:22;;32546:4;32537:14;;;32658:62;32541:3;32630:22;32658:62;;;32566:160;32817:4;32810:5;32806:16;32800:23;32829:63;32886:4;32881:3;32877:14;32863:12;32829:63;;;32736:162;32979:4;32972:5;32968:16;32962:23;32991:63;33048:4;33043:3;33039:14;33025:12;32991:63;;;32908:152;33141:4;33134:5;33130:16;33124:23;33153:63;33210:4;33205:3;33201:14;33187:12;33153:63;;33313:647;33517:22;;33444:4;33435:14;;;33545:58;33439:3;33517:22;33545:58;;;33464:145;33687:4;33680:5;33676:16;33670:23;33699:63;33756:4;33751:3;33747:14;33733:12;33699:63;;;33619:149;33864:4;33857:5;33853:16;33847:23;33876:63;33933:4;33928:3;33924:14;33910:12;33876:63;;34028:2671;;34161:5;34152:15;;34236:49;34273:5;;34236:49;;;34291:62;34343:3;34325:12;34291:62;;;34182:177;34423:50;34467:4;34460:5;34456:16;34449:5;34423:50;;;34479:63;34536:4;34531:3;34527:14;34513:12;34479:63;;;34369:179;34619:50;34663:4;34656:5;34652:16;34645:5;34619:50;;;34675:63;34732:4;34727:3;34723:14;34709:12;34675:63;;;34558:186;34809:50;34853:4;34846:5;34842:16;34835:5;34809:50;;;34865:63;34922:4;34917:3;34913:14;34899:12;34865:63;;;34754:180;35002:50;35046:4;35039:5;35035:16;35028:5;35002:50;;;35058:63;35115:4;35110:3;35106:14;35092:12;35058:63;;;34944:183;35195:50;35239:4;35232:5;35228:16;35221:5;35195:50;;;35251:63;35308:4;35303:3;35299:14;35285:12;35251:63;;;35137:183;35380:50;35424:4;35417:5;35413:16;35406:5;35380:50;;;35436:63;35493:4;35488:3;35484:14;35470:12;35436:63;;;35330:175;35565:50;35609:4;35602:5;35598:16;35591:5;35565:50;;;35621:63;35678:4;35673:3;35669:14;35655:12;35621:63;;;35515:175;35763:51;35807:5;35800;35796:17;35789:5;35763:51;;;35820:64;35877:5;35872:3;35868:15;35854:12;35820:64;;;35700:190;35946:51;35990:5;35983;35979:17;35972:5;35946:51;;;36003:64;36060:5;36055:3;36051:15;36037:12;36003:64;;;35900:173;36153:58;36204:5;36197;36193:17;36186:5;36153:58;;;36258:3;36252:4;36248:14;36240:5;36235:3;36231:15;36224:39;36278:83;36356:4;36342:12;36328;36278:83;;;36270:91;;36083:290;;36453:58;36504:5;36497;36493:17;36486:5;36453:58;;;36558:3;36552:4;36548:14;36540:5;36535:3;36531:15;36524:39;36578:83;36656:4;36642:12;36628;36578:83;;;36570:91;34134:2565;-1:-1;;;;;;34134:2565;39516:2271;39722:22;;39516:2271;;39647:5;39638:15;;;39750:62;39642:3;39722:22;39750:62;;;39668:150;39899:4;39892:5;39888:16;39882:23;39911:63;39968:4;39963:3;39959:14;39945:12;39911:63;;;39828:152;40068:4;40061:5;40057:16;40051:23;40080:63;40137:4;40132:3;40128:14;40114:12;40080:63;;;39990:159;40231:4;40224:5;40220:16;40214:23;40243:63;40300:4;40295:3;40291:14;40277:12;40243:63;;;40159:153;40397:4;40390:5;40386:16;40380:23;40409:63;40466:4;40461:3;40457:14;40443:12;40409:63;;;40322:156;40563:4;40556:5;40552:16;40546:23;40575:63;40632:4;40627:3;40623:14;40609:12;40575:63;;;40488:156;40721:4;40714:5;40710:16;40704:23;40733:63;40790:4;40785:3;40781:14;40767:12;40733:63;;;40654:148;40879:4;40872:5;40868:16;40862:23;40891:63;40948:4;40943:3;40939:14;40925:12;40891:63;;;40812:148;41050:5;41043;41039:17;41033:24;41063:64;41120:5;41115:3;41111:15;41097:12;41063:64;;;40970:163;41206:5;41199;41195:17;41189:24;41219:64;41276:5;41271:3;41267:15;41253:12;41219:64;;;41143:146;41372:5;41365;41361:17;41355:24;41426:3;41420:4;41416:14;41408:5;41403:3;41399:15;41392:39;41446:67;41508:4;41494:12;41446:67;;;41438:75;;41299:226;41608:5;41601;41597:17;41591:24;41662:3;41656:4;41652:14;41644:5;41639:3;41635:15;41628:39;41682:67;41744:4;41730:12;41682:67;;;41674:75;39620:2167;-1:-1;;;;;39620:2167;42024:97;42093:22;42109:5;42093:22;;42128:262;;42272:93;42361:3;42352:6;42272:93;;42397:213;42515:2;42500:18;;42529:71;42504:9;42573:6;42529:71;;42617:229;42743:2;42728:18;;42757:79;42732:9;42809:6;42757:79;;42853:340;43007:2;42992:18;;43021:79;42996:9;43073:6;43021:79;;;43111:72;43179:2;43168:9;43164:18;43155:6;43111:72;;43200:324;43346:2;43331:18;;43360:71;43335:9;43404:6;43360:71;;43531:1207;43959:3;43944:19;;43974:71;43948:9;44018:6;43974:71;;;44056:72;44124:2;44113:9;44109:18;44100:6;44056:72;;;44139;44207:2;44196:9;44192:18;44183:6;44139:72;;;44222;44290:2;44279:9;44275:18;44266:6;44222:72;;;44343:9;44337:4;44333:20;44327:3;44316:9;44312:19;44305:49;44368:156;44519:4;44510:6;44502;44368:156;;;44360:164;;44573:9;44567:4;44563:20;44557:3;44546:9;44542:19;44535:49;44598:130;44723:4;44714:6;44706;44598:130;;;44590:138;43930:808;-1:-1;;;;;;;;;;43930:808;44745:324;44891:2;44876:18;;44905:71;44880:9;44949:6;44905:71;;;44987:72;45055:2;45044:9;45040:18;45031:6;44987:72;;45076:449;45288:2;45302:47;;;45273:18;;45363:152;45273:18;45501:6;45363:152;;45532:433;45736:2;45750:47;;;45721:18;;45811:144;45721:18;45941:6;45811:144;;45972:201;46084:2;46069:18;;46098:65;46073:9;46136:6;46098:65;;46180:607;46412:3;46397:19;;46427:85;46401:9;46485:6;46427:85;;;46523:80;46599:2;46588:9;46584:18;46575:6;46523:80;;;46614;46690:2;46679:9;46675:18;46666:6;46614:80;;;46705:72;46773:2;46762:9;46758:18;46749:6;46705:72;;46794:603;47024:3;47009:19;;47039:85;47013:9;47097:6;47039:85;;;47135:86;47217:2;47206:9;47202:18;47193:6;47135:86;;;47232:72;47300:2;47289:9;47285:18;47276:6;47232:72;;47404:255;47543:2;47528:18;;47557:92;47532:9;47622:6;47557:92;;47666:407;47857:2;47871:47;;;47842:18;;47932:131;47842:18;47932:131;;48080:407;48271:2;48285:47;;;48256:18;;48346:131;48256:18;48346:131;;48494:407;48685:2;48699:47;;;48670:18;;48760:131;48670:18;48760:131;;48908:407;49099:2;49113:47;;;49084:18;;49174:131;49084:18;49174:131;;49322:407;49513:2;49527:47;;;49498:18;;49588:131;49498:18;49588:131;;49736:407;49927:2;49941:47;;;49912:18;;50002:131;49912:18;50002:131;;50150:407;50341:2;50355:47;;;50326:18;;50416:131;50326:18;50416:131;;50564:407;50755:2;50769:47;;;50740:18;;50830:131;50740:18;50830:131;;50978:407;51169:2;51183:47;;;51154:18;;51244:131;51154:18;51244:131;;51392:407;51583:2;51597:47;;;51568:18;;51658:131;51568:18;51658:131;;51806:407;51997:2;52011:47;;;51982:18;;52072:131;51982:18;52072:131;;52220:407;52411:2;52425:47;;;52396:18;;52486:131;52396:18;52486:131;;52634:407;52825:2;52839:47;;;52810:18;;52900:131;52810:18;52900:131;;53048:407;53239:2;53253:47;;;53224:18;;53314:131;53224:18;53314:131;;53462:407;53653:2;53667:47;;;53638:18;;53728:131;53638:18;53728:131;;53876:326;54050:3;54035:19;;54065:127;54039:9;54165:6;54065:127;;54209:345;54369:2;54383:47;;;54354:18;;54444:100;54354:18;54530:6;54444:100;;54561:663;54801:2;54815:47;;;54786:18;;54876:100;54786:18;54962:6;54876:100;;;54868:108;;54987:72;55055:2;55044:9;55040:18;55031:6;54987:72;;;55107:9;55101:4;55097:20;55092:2;55081:9;55077:18;55070:48;55132:82;55209:4;55200:6;55192;55132:82;;55231:213;55349:2;55334:18;;55363:71;55338:9;55407:6;55363:71;;55451:547;55653:3;55638:19;;55668:71;55642:9;55712:6;55668:71;;;55750:72;55818:2;55807:9;55803:18;55794:6;55750:72;;56005:256;56067:2;56061:9;56093:17;;;-1:-1;;;;;56153:34;;56189:22;;;56150:62;56147:2;;;56225:1;56222;56215:12;56147:2;56241;56234:22;56045:216;;-1:-1;56045:216;56268:304;;-1:-1;;;;;56419:6;56416:30;56413:2;;;56459:1;56456;56449:12;56413:2;-1:-1;56494:4;56482:17;;;56547:15;;56350:222;57552:317;;-1:-1;;;;;57683:6;57680:30;57677:2;;;57723:1;57720;57713:12;57677:2;-1:-1;57854:4;57790;57767:17;;;;-1:-1;;57763:33;57844:15;;57614:255;58204:125;58299:3;58285:44;58336:173;58482:4;58473:14;;58430:79;58837:159;58962:12;;58933:63;59949:183;60072:19;;;60121:4;60112:14;;60065:67;60887:144;61022:3;61000:31;-1:-1;61000:31;61212:119;;61286:39;61321:2;61316:3;61312:12;61307:3;61286:39;;61340:496;;;61447:17;;-1:-1;;61512:14;61508:29;;;61504:48;61480:73;;61470:2;;61567:1;61564;61557:12;61470:2;61586:33;;;61686:4;61675:16;;;-1:-1;61641:19;;-1:-1;;;;;;61700:30;;61697:2;;;61743:1;61740;61733:12;61697:2;61774:14;61770:37;;;61756:52;;61753:2;;;61821:1;61818;61811:12;61753:2;61414:422;;;;;;;61845:297;;61957:17;;-1:-1;;62022:14;62018:29;;;62014:49;61990:74;;61980:2;;62078:1;62075;62068:12;61980:2;62097:33;;;;61924:218;-1:-1;;61924:218;62151:119;;62225:39;62260:2;62255:3;62251:12;62246:3;62225:39;;62278:91;;62340:24;62358:5;62340:24;;62482:85;62548:13;62541:21;;62524:43;62653:105;;62729:24;62747:5;62729:24;;62994:121;-1:-1;;;;;63056:54;;63039:76;63201:81;63272:4;63261:16;;63244:38;63289:129;;63376:37;63407:5;63376:37;;64260:145;64341:6;64336:3;64331;64318:30;-1:-1;64397:1;64379:16;;64372:27;64311:94;64414:268;64479:1;64486:101;64500:6;64497:1;64494:13;64486:101;;;64567:11;;;64561:18;64548:11;;;64541:39;64522:2;64515:10;64486:101;;;64602:6;64599:1;64596:13;64593:2;;;-1:-1;;64667:1;64649:16;;64642:27;64463:219;64690:97;64778:2;64758:14;-1:-1;;64754:28;;64738:49;64795:117;64864:24;64882:5;64864:24;;;64857:5;64854:35;64844:2;;64903:1;64900;64893:12;65059:111;65125:21;65140:5;65125:21;;65177:117;65246:24;65264:5;65246:24;;65301:145;65384:38;65416:5;65384:38;;65891:113;65958:22;65974:5;65958:22;

Swarm Source

bzzr://e005115a269ff5c349553b71468dcd1821d809aac683b349abf11d6bdd092586
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.