ETH Price: $3,991.56 (-0.18%)

Token

ERC-20: SyncSwap WETH/Cheems Classic LP (WETH/Cheems cSLP)

Overview

Max Total Supply

657,027.047389147226392822 WETH/Cheems cSLP

Holders

3,482

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
106.670567062683186446 WETH/Cheems cSLP

Value
$0.00
0xb76F765A785eCa438e1d95f594490088aFAF9acc
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x80115c70...6C547c05c
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
SyncSwapClassicPool

Compiler Version
v0.8.15+commit.e14f2714

ZkSolc Version
v1.3.5

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at era.zksync.network on 2024-05-04
*/

// SPDX-License-Identifier: AGPL-3.0-or-later

pragma solidity ^0.8.0;









/// @notice The manager contract to control fees.
/// Management functions are omitted.
interface IFeeManager {
    function getSwapFee(
        address pool,
        address sender,
        address tokenIn,
        address tokenOut,
        bytes calldata data) external view returns (uint24);
    function getProtocolFee(address pool) external view returns (uint24);
    function getFeeRecipient() external view returns (address);
}




interface IForwarderRegistry {
    function isForwarder(address forwarder) external view returns (bool);
}

/// @dev The master contract to create pools and manage whitelisted factories.
/// Inheriting the fee manager interface to support fee queries.
interface IPoolMaster is IFeeManager, IForwarderRegistry {
    event SetFactoryWhitelisted(address indexed factory, bool whitelisted);

    event RegisterPool(
        address indexed factory,
        address indexed pool,
        uint16 indexed poolType,
        bytes data
    );

    event UpdateForwarderRegistry(address indexed newForwarderRegistry);

    event UpdateFeeManager(address indexed newFeeManager);

    function vault() external view returns (address);

    function feeManager() external view returns (address);

    function pools(uint) external view returns (address);

    function poolsLength() external view returns (uint);

    // Forwarder Registry
    function setForwarderRegistry(address) external;

    // Fees
    function setFeeManager(address) external;

    // Factories
    function isFactoryWhitelisted(address) external view returns (bool);

    function setFactoryWhitelisted(address factory, bool whitelisted) external;

    // Pools
    function isPool(address) external view returns (bool);

    function getPool(bytes32) external view returns (address);

    function createPool(address factory, bytes calldata data) external returns (address pool);

    function registerPool(address pool, uint16 poolType, bytes calldata data) external;
}








interface IERC20Base {
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint amount) external returns (bool);
    function transfer(address to, uint amount) external returns (bool);
    function transferFrom(address from, address to, uint amount) external returns (bool);
    
    event Approval(address indexed owner, address indexed spender, uint amount);
    event Transfer(address indexed from, address indexed to, uint amount);
}

interface IERC20 is IERC20Base {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}













interface IPoolFactory {
    function master() external view returns (address);

    function getDeployData() external view returns (bytes memory);

    function createPool(bytes calldata data) external returns (address pool);
}

interface IBasePoolFactory is IPoolFactory {
    event PoolCreated(
        address indexed token0,
        address indexed token1,
        address pool
    );

    function getPool(address tokenA, address tokenB) external view returns (address pool);

    function getSwapFee(
        address pool,
        address sender,
        address tokenIn,
        address tokenOut,
        bytes calldata data
    ) external view returns (uint24 swapFee);
}


error InvalidTokens();

abstract contract BasePoolFactory is IBasePoolFactory {
    /// @dev The pool master that control fees and registry.
    address public immutable master;

    /// @dev Pools by its two pool tokens.
    mapping(address => mapping(address => address)) public override getPool;

    bytes internal cachedDeployData;

    constructor(address _master) {
        master = _master;
    }

    function getDeployData() external view override returns (bytes memory deployData) {
        deployData = cachedDeployData;
    }

    function getSwapFee(
        address pool,
        address sender,
        address tokenIn,
        address tokenOut,
        bytes calldata data
    ) external view override returns (uint24 swapFee) {
        swapFee = IPoolMaster(master).getSwapFee(pool, sender, tokenIn, tokenOut, data);
    }

    function createPool(bytes calldata data) external override returns (address pool) {
        (address tokenA, address tokenB) = abi.decode(data, (address, address));

        // Perform safety checks.
        if (tokenA == tokenB) {
            revert InvalidTokens();
        }

        // Sort tokens.
        if (tokenB < tokenA) {
            (tokenA, tokenB) = (tokenB, tokenA);
        }
        if (tokenA == address(0)) {
            revert InvalidTokens();
        }

        // Underlying implementation to deploy the pools and register them.
        pool = _createPool(tokenA, tokenB);

        // Populate mapping in both directions.
        // Not necessary as existence of the master, but keep them for better compatibility.
        getPool[tokenA][tokenB] = pool;
        getPool[tokenB][tokenA] = pool;

        emit PoolCreated(tokenA, tokenB, pool);
    }

    function _createPool(address tokenA, address tokenB) internal virtual returns (address) {
    }
}









/// @dev Math functions.
/// @dev Modified from Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol)
library Math {

    /// @notice Compares a and b and returns 'true' if the difference between a and b
    /// is less than 1 or equal to each other.
    /// @param a uint256 to compare with.
    /// @param b uint256 to compare with.
    function within1(uint256 a, uint256 b) internal pure returns (bool) {
        unchecked {
            if (a > b) {
                return a - b <= 1;
            }
            return b - a <= 1;
        }
    }

    /// @dev Returns the square root of `x`.
    function sqrt(uint256 x) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            // `floor(sqrt(2**15)) = 181`. `sqrt(2**15) - 181 = 2.84`.
            z := 181 // The "correct" value is 1, but this saves a multiplication later.

            // This segment is to get a reasonable initial estimate for the Babylonian method. With a bad
            // start, the correct # of bits increases ~linearly each iteration instead of ~quadratically.

            // Let `y = x / 2**r`.
            // We check `y >= 2**(k + 8)` but shift right by `k` bits
            // each branch to ensure that if `x >= 256`, then `y >= 256`.
            let r := shl(7, lt(0xffffffffffffffffffffffffffffffffff, x))
            r := or(r, shl(6, lt(0xffffffffffffffffff, shr(r, x))))
            r := or(r, shl(5, lt(0xffffffffff, shr(r, x))))
            r := or(r, shl(4, lt(0xffffff, shr(r, x))))
            z := shl(shr(1, r), z)

            // Goal was to get `z*z*y` within a small factor of `x`. More iterations could
            // get y in a tighter range. Currently, we will have y in `[256, 256*(2**16))`.
            // We ensured `y >= 256` so that the relative difference between `y` and `y+1` is small.
            // That's not possible if `x < 256` but we can just verify those cases exhaustively.

            // Now, `z*z*y <= x < z*z*(y+1)`, and `y <= 2**(16+8)`, and either `y >= 256`, or `x < 256`.
            // Correctness can be checked exhaustively for `x < 256`, so we assume `y >= 256`.
            // Then `z*sqrt(y)` is within `sqrt(257)/sqrt(256)` of `sqrt(x)`, or about 20bps.

            // For `s` in the range `[1/256, 256]`, the estimate `f(s) = (181/1024) * (s+1)`
            // is in the range `(1/2.84 * sqrt(s), 2.84 * sqrt(s))`,
            // with largest error when `s = 1` and when `s = 256` or `1/256`.

            // Since `y` is in `[256, 256*(2**16))`, let `a = y/65536`, so that `a` is in `[1/256, 256)`.
            // Then we can estimate `sqrt(y)` using
            // `sqrt(65536) * 181/1024 * (a + 1) = 181/4 * (y + 65536)/65536 = 181 * (y + 65536)/2**18`.

            // There is no overflow risk here since `y < 2**136` after the first branch above.
            z := shr(18, mul(z, add(shr(r, x), 65536))) // A `mul()` is saved from starting `z` at 181.

            // Given the worst case multiplicative error of 2.84 above, 7 iterations should be enough.
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))

            // If `x+1` is a perfect square, the Babylonian method cycles between
            // `floor(sqrt(x))` and `ceil(sqrt(x))`. This statement ensures we return floor.
            // See: https://en.wikipedia.org/wiki/Integer_square_root#Using_only_integer_division
            // Since the ceil is rare, we save gas on the assignment and repeat division in the rare case.
            // If you don't care whether the floor or ceil square root is returned, you can remove this statement.
            z := sub(z, lt(div(x, z), z))
        }
    }

    // Mul Div

    /// @dev Rounded down.
    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 denominator
    ) internal pure returns (uint256 z) {
        assembly {
            // Store x * y in z for now.
            z := mul(x, y)

            // Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y))
            if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) {
                revert(0, 0)
            }

            // Divide z by the denominator.
            z := div(z, denominator)
        }
    }

    /// @dev Rounded down.
    /// This function assumes that `x` is not zero, and must be checked externally.
    function mulDivUnsafeFirst(
        uint256 x,
        uint256 y,
        uint256 denominator
    ) internal pure returns (uint256 z) {
        assembly {
            // Store x * y in z for now.
            z := mul(x, y)

            // Equivalent to require(denominator != 0 && (x * y) / x == y)
            if iszero(and(iszero(iszero(denominator)), eq(div(z, x), y))) {
                revert(0, 0)
            }

            // Divide z by the denominator.
            z := div(z, denominator)
        }
    }

    /// @dev Rounded down.
    /// This function assumes that `denominator` is not zero, and must be checked externally.
    function mulDivUnsafeLast(
        uint256 x,
        uint256 y,
        uint256 denominator
    ) internal pure returns (uint256 z) {
        assembly {
            // Store x * y in z for now.
            z := mul(x, y)

            // Equivalent to require(x == 0 || (x * y) / x == y)
            if iszero(or(iszero(x), eq(div(z, x), y))) {
                revert(0, 0)
            }

            // Divide z by the denominator.
            z := div(z, denominator)
        }
    }

    /// @dev Rounded down.
    /// This function assumes that both `x` and `denominator` are not zero, and must be checked externally.
    function mulDivUnsafeFirstLast(
        uint256 x,
        uint256 y,
        uint256 denominator
    ) internal pure returns (uint256 z) {
        assembly {
            // Store x * y in z for now.
            z := mul(x, y)

            // Equivalent to require((x * y) / x == y)
            if iszero(eq(div(z, x), y)) {
                revert(0, 0)
            }

            // Divide z by the denominator.
            z := div(z, denominator)
        }
    }

    // Mul

    /// @dev Optimized safe multiplication operation for minimal gas cost.
    /// Equivalent to *
    function mul(
        uint256 x,
        uint256 y
    ) internal pure returns (uint256 z) {
        assembly {
            // Store x * y in z for now.
            z := mul(x, y)

            // Equivalent to require(x == 0 || (x * y) / x == y)
            if iszero(or(iszero(x), eq(div(z, x), y))) {
                revert(0, 0)
            }
        }
    }

    /// @dev Optimized unsafe multiplication operation for minimal gas cost.
    /// This function assumes that `x` is not zero, and must be checked externally.
    function mulUnsafeFirst(
        uint256 x,
        uint256 y
    ) internal pure returns (uint256 z) {
        assembly {
            // Store x * y in z for now.
            z := mul(x, y)

            // Equivalent to require((x * y) / x == y)
            if iszero(eq(div(z, x), y)) {
                revert(0, 0)
            }
        }
    }

    // Div

    /// @dev Optimized safe division operation for minimal gas cost.
    /// Equivalent to /
    function div(
        uint256 x,
        uint256 y
    ) internal pure returns (uint256 z) {
        assembly {
            // Store x * y in z for now.
            z := div(x, y)

            // Equivalent to require(y != 0)
            if iszero(y) {
                revert(0, 0)
            }
        }
    }

    /// @dev Optimized unsafe division operation for minimal gas cost.
    /// Division by 0 will not reverts and returns 0, and must be checked externally.
    function divUnsafeLast(
        uint256 x,
        uint256 y
    ) internal pure returns (uint256 z) {
        assembly {
            z := div(x, y)
        }
    }
}








interface IERC165 {
    /// @notice Query if a contract implements an interface
    /// @param interfaceID The interface identifier, as specified in ERC-165
    /// @dev Interface identification is specified in ERC-165. This function
    ///  uses less than 30,000 gas.
    /// @return `true` if the contract implements `interfaceID` and
    ///  `interfaceID` is not 0xffffffff, `false` otherwise
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}










interface IERC20Permit is IERC20 {
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    function nonces(address owner) external view returns (uint);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

interface IERC20Permit2 is IERC20Permit {
    function permit2(address owner, address spender, uint amount, uint deadline, bytes calldata signature) external;
}









/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 *
 * Based on OpenZeppelin's ECDSA library.
 * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/561d1061fc568f04c7a65853538e834a889751e8/contracts/utils/cryptography/ECDSA.sol
 */
library ECDSA {

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        // Check the signature length
        if (signature.length != 65) {
            return address(0);
        }

        // Divide the signature in r, s and v variables
        bytes32 r;
        bytes32 s;
        uint8 v;

        // ecrecover takes the signature parameters, and the only way to get them
        // currently is to use assembly.
        /// @solidity memory-safe-assembly
        // solhint-disable-next-line no-inline-assembly
        assembly {
            r := mload(add(signature, 0x20))
            s := mload(add(signature, 0x40))
            v := byte(0, mload(add(signature, 0x60)))
        }

        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return address(0);
        }

        return ecrecover(hash, v, r, s);
    }
}

/**
 * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA
 * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like
 * Argent and Gnosis Safe.
 *
 * Based on OpenZeppelin's SignatureChecker library.
 * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/561d1061fc568f04c7a65853538e834a889751e8/contracts/utils/cryptography/SignatureChecker.sol
 */
library SignatureChecker {

    bytes4 constant internal MAGICVALUE = 0x1626ba7e; // bytes4(keccak256("isValidSignature(bytes32,bytes)")

    /** 
     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the
     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.
     *
     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus
     * change through time. It could return true at block N and false at block N+1 (or the opposite).
     */
    function isValidSignatureNow(
        address signer,
        bytes32 hash,
        bytes memory signature
    ) internal view returns (bool) {
        (address recovered) = ECDSA.recover(hash, signature);
        if (recovered == signer) {
            if (recovered != address(0)) {
                return true;
            }
        }

        (bool success, bytes memory result) = signer.staticcall(
            abi.encodeWithSelector(MAGICVALUE, hash, signature)
        );
        return (
            success &&
            result.length == 32 &&
            abi.decode(result, (bytes32)) == bytes32(MAGICVALUE)
        );
    }
}

error Expired();
error InvalidSignature();

/**
 * @dev A simple ERC20 implementation for pool's liquidity token, supports permit by both ECDSA signatures from
 * externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like Argent.
 *
 * Based on Solmate's ERC20.
 * https://github.com/transmissions11/solmate/blob/bff24e835192470ed38bf15dbed6084c2d723ace/src/tokens/ERC20.sol
 */
contract ERC20Permit2 is IERC165, IERC20Permit2 {
    uint8 public immutable override decimals = 18;

    uint public override totalSupply;
    mapping(address => uint) public override balanceOf;
    mapping(address => mapping(address => uint)) public override allowance;

    bytes32 private constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)")
    mapping(address => uint) public override nonces;

    // These members are actually immutable as
    // `_initialize` will only indent to be called once.
    string public override name;
    string public override symbol;
    uint private INITIAL_CHAIN_ID;
    bytes32 private INITIAL_DOMAIN_SEPARATOR;

    function _initialize(string memory _name, string memory _symbol) internal {
        name = _name;
        symbol = _symbol;

        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = _computeDomainSeparator();
    }

    function supportsInterface(bytes4 interfaceID) external pure override returns (bool) {
        return
            interfaceID == this.supportsInterface.selector || // ERC-165
            interfaceID == this.permit.selector || // ERC-2612
            interfaceID == this.permit2.selector; // Permit2
    }

    function DOMAIN_SEPARATOR() public view override returns (bytes32) {
        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : _computeDomainSeparator();
    }

    function _computeDomainSeparator() private view returns (bytes32) {
        return keccak256(
            abi.encode(
                // keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)")
                0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f,
                keccak256(bytes(name)),
                // keccak256(bytes("1"))
                0xc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6,
                block.chainid,
                address(this)
            )
        );
    }

    function _approve(address _owner, address _spender, uint _amount) private {
        allowance[_owner][_spender] = _amount;
        emit Approval(_owner, _spender, _amount);
    }

    function approve(address _spender, uint _amount) public override returns (bool) {
        _approve(msg.sender, _spender, _amount);
        return true;
    }

    function transfer(address _to, uint _amount) public override returns (bool) {
        balanceOf[msg.sender] -= _amount;

        // Cannot overflow because the sum of all user balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[_to] += _amount;
        }

        emit Transfer(msg.sender, _to, _amount);
        return true;
    }

    function transferFrom(address _from, address _to, uint _amount) public override returns (bool) {
        uint256 _allowed = allowance[_from][msg.sender]; // Saves gas for limited approvals.
        if (_allowed != type(uint).max) {
            allowance[_from][msg.sender] = _allowed - _amount;
        }

        balanceOf[_from] -= _amount;
        // Cannot overflow because the sum of all user balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[_to] += _amount;
        }

        emit Transfer(_from, _to, _amount);
        return true;
    }

    function _mint(address _to, uint _amount) internal {
        totalSupply += _amount;

        // Cannot overflow because the sum of all user balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[_to] += _amount;
        }

        emit Transfer(address(0), _to, _amount);
    }

    function _burn(address _from, uint _amount) internal {
        balanceOf[_from] -= _amount;

        // Cannot underflow because a user's balance will never be larger than the total supply.
        unchecked {
            totalSupply -= _amount;
        }

        emit Transfer(_from, address(0), _amount);
    }

    modifier ensures(uint _deadline) {
        // solhint-disable-next-line not-rely-on-time
        if (block.timestamp > _deadline) {
            revert Expired();
        }
        _;
    }

    function _permitHash(
        address _owner,
        address _spender,
        uint _amount,
        uint _deadline
    ) private returns (bytes32) {
        return keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR(),
                keccak256(abi.encode(PERMIT_TYPEHASH, _owner, _spender, _amount, nonces[_owner]++, _deadline))
            )
        );
    }

    function permit(
        address _owner,
        address _spender,
        uint _amount,
        uint _deadline,
        uint8 _v,
        bytes32 _r,
        bytes32 _s
    ) public override ensures(_deadline) {
        bytes32 _hash = _permitHash(_owner, _spender, _amount, _deadline);
        address _recoveredAddress = ecrecover(_hash, _v, _r, _s);

        if (_recoveredAddress != _owner) {
            revert InvalidSignature();
        }
        if (_recoveredAddress == address(0)) {
            revert InvalidSignature();
        }

        _approve(_owner, _spender, _amount);
    }

    function permit2(
        address _owner,
        address _spender,
        uint _amount,
        uint _deadline,
        bytes calldata _signature
    ) public override ensures(_deadline) {
        bytes32 _hash = _permitHash(_owner, _spender, _amount, _deadline);

        if (!SignatureChecker.isValidSignatureNow(_owner, _hash, _signature)) {
            revert InvalidSignature();
        }

        _approve(_owner, _spender, _amount);
    }
}




library MetadataHelper {
    /**
     * @dev Returns symbol of the token.
     *
     * @param token The address of a ERC20 token.
     *
     * Return boolean indicating the status and the symbol as string;
     *
     * NOTE: Symbol is not the standard interface and some tokens may not support it.
     * Calling against these tokens will not success, with an empty result.
     */
    function getSymbol(address token) internal view returns (bool, string memory) {
        // bytes4(keccak256(bytes("symbol()")))
        (bool success, bytes memory returndata) = token.staticcall(abi.encodeWithSelector(0x95d89b41));
        if (success) {
            return (true, abi.decode(returndata, (string)));
        } else {
            return (false, "");
        }
    }
}

// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)



/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}





/// @dev The callback interface for SyncSwap base pool operations.
/// Note additional checks will be required for some callbacks, see below for more information.
/// Visit the documentation https://syncswap.gitbook.io/api-documentation/ for more details.
interface ICallback {

    struct BaseMintCallbackParams {
        address sender;
        address to;
        uint reserve0;
        uint reserve1;
        uint balance0;
        uint balance1;
        uint amount0;
        uint amount1;
        uint fee0;
        uint fee1;
        uint newInvariant;
        uint oldInvariant;
        uint totalSupply;
        uint liquidity;
        uint24 swapFee;
        bytes callbackData;
    }
    function syncSwapBaseMintCallback(BaseMintCallbackParams calldata params) external;

    struct BaseBurnCallbackParams {
        address sender;
        address to;
        uint balance0;
        uint balance1;
        uint liquidity;
        uint totalSupply;
        uint amount0;
        uint amount1;
        uint8 withdrawMode;
        bytes callbackData;
    }
    function syncSwapBaseBurnCallback(BaseBurnCallbackParams calldata params) external;

    struct BaseBurnSingleCallbackParams {
        address sender;
        address to;
        address tokenIn;
        address tokenOut;
        uint balance0;
        uint balance1;
        uint liquidity;
        uint totalSupply;
        uint amount0;
        uint amount1;
        uint amountOut;
        uint amountSwapped;
        uint feeIn;
        uint24 swapFee;
        uint8 withdrawMode;
        bytes callbackData;
    }
    /// @dev Note the `tokenOut` parameter can be decided by the caller, and the correctness is not guaranteed.
    /// Additional checks MUST be performed in callback to ensure the `tokenOut` is one of the pools tokens if the sender
    /// is not a trusted source to avoid potential issues.
    function syncSwapBaseBurnSingleCallback(BaseBurnSingleCallbackParams calldata params) external;

    struct BaseSwapCallbackParams {
        address sender;
        address to;
        address tokenIn;
        address tokenOut;
        uint reserve0;
        uint reserve1;
        uint balance0;
        uint balance1;
        uint amountIn;
        uint amountOut;
        uint feeIn;
        uint24 swapFee;
        uint8 withdrawMode;
        bytes callbackData;
    }
    /// @dev Note the `tokenIn` parameter can be decided by the caller, and the correctness is not guaranteed.
    /// Additional checks MUST be performed in callback to ensure the `tokenIn` is one of the pools tokens if the sender
    /// is not a trusted source to avoid potential issues.
    function syncSwapBaseSwapCallback(BaseSwapCallbackParams calldata params) external;
}












// Inspired by Aave Protocol's IFlashLoanReceiver.

interface IFlashLoanRecipient {
    /**
     * @dev When `flashLoan` is called on the Vault, it invokes the `receiveFlashLoan` hook on the recipient.
     *
     * At the time of the call, the Vault will have transferred `amounts` for `tokens` to the recipient. Before this
     * call returns, the recipient must have transferred `amounts` plus `feeAmounts` for each token back to the
     * Vault, or else the entire flash loan will revert.
     *
     * `userData` is the same value passed in the `IVault.flashLoan` call.
     */
    function receiveFlashLoan(
        address[] memory tokens,
        uint[] memory amounts,
        uint[] memory feeAmounts,
        bytes memory userData
    ) external;
}








interface IERC3156FlashBorrower {
    /**
     * @dev Receive a flash loan.
     * @param initiator The initiator of the loan.
     * @param token The loan currency.
     * @param amount The amount of tokens lent.
     * @param fee The additional amount of tokens to repay.
     * @param data Arbitrary data structure, intended to contain user-defined parameters.
     * @return The keccak256 hash of "ERC3156FlashBorrower.onFlashLoan"
     */
    function onFlashLoan(
        address initiator,
        address token,
        uint256 amount,
        uint256 fee,
        bytes calldata data
    ) external returns (bytes32);
}

interface IERC3156FlashLender {
    /**
     * @dev The amount of currency available to be lent.
     * @param token The loan currency.
     * @return The amount of `token` that can be borrowed.
     */
    function maxFlashLoan(
        address token
    ) external view returns (uint256);

    /**
     * @dev The fee to be charged for a given loan.
     * @param token The loan currency.
     * @param amount The amount of tokens lent.
     * @return The amount of `token` to be charged for the loan, on top of the returned principal.
     */
    function flashFee(
        address token,
        uint256 amount
    ) external view returns (uint256);

    /**
     * @dev Initiate a flash loan.
     * @param receiver The receiver of the tokens in the loan, and the receiver of the callback.
     * @param token The loan currency.
     * @param amount The amount of tokens lent.
     * @param data Arbitrary data structure, intended to contain user-defined parameters.
     */
    function flashLoan(
        IERC3156FlashBorrower receiver,
        address token,
        uint256 amount,
        bytes calldata data
    ) external returns (bool);
}

interface IFlashLoan is IERC3156FlashLender {
    function flashLoanFeePercentage() external view returns (uint);

    /**
     * @dev Performs a 'flash loan', sending tokens to `recipient`, executing the `receiveFlashLoan` hook on it,
     * and then reverting unless the tokens plus a proportional protocol fee have been returned.
     *
     * The `tokens` and `amounts` arrays must have the same length, and each entry in these indicates the loan amount
     * for each token contract. `tokens` must be sorted in ascending order.
     *
     * The 'userData' field is ignored by the Vault, and forwarded as-is to `recipient` as part of the
     * `receiveFlashLoan` call.
     *
     * Emits `FlashLoan` events.
     */
    function flashLoanMultiple(
        IFlashLoanRecipient recipient,
        address[] memory tokens,
        uint[] memory amounts,
        bytes memory userData
    ) external;

    /**
     * @dev Emitted for each individual flash loan performed by `flashLoan`.
     */
    event FlashLoan(address indexed recipient, address indexed token, uint amount, uint feeAmount);
}

interface IVault is IFlashLoan {
    function wETH() external view returns (address);

    function reserves(address token) external view returns (uint reserve);

    function balanceOf(address token, address owner) external view returns (uint balance);

    function deposit(address token, address to) external payable returns (uint amount);

    function depositETH(address to) external payable returns (uint amount);

    function transferAndDeposit(address token, address to, uint amount) external payable returns (uint);

    function transfer(address token, address to, uint amount) external;

    function withdraw(address token, address to, uint amount) external;

    function withdrawAlternative(address token, address to, uint amount, uint8 mode) external;

    function withdrawETH(address to, uint amount) external;
}












interface IPool {
    struct TokenAmount {
        address token;
        uint amount;
    }

    /// @dev Returns the address of pool master.
    function master() external view returns (address);

    /// @dev Returns the vault.
    function vault() external view returns (address);

    /// @dev Returns the pool type.
    function poolType() external view returns (uint16);

    /// @dev Returns the assets of the pool.
    function getAssets() external view returns (address[] memory assets);

    /// @dev Returns the swap fee of the pool.
    function getSwapFee(address sender, address tokenIn, address tokenOut, bytes calldata data) external view returns (uint24 swapFee);

    /// @dev Returns the protocol fee of the pool.
    function getProtocolFee() external view returns (uint24 protocolFee);

    /// @dev Mints liquidity.
    function mint(
        bytes calldata data,
        address sender,
        address callback,
        bytes calldata callbackData
    ) external returns (uint liquidity);

    /// @dev Burns liquidity.
    function burn(
        bytes calldata data,
        address sender,
        address callback,
        bytes calldata callbackData
    ) external returns (TokenAmount[] memory tokenAmounts);

    /// @dev Burns liquidity with single output token.
    function burnSingle(
        bytes calldata data,
        address sender,
        address callback,
        bytes calldata callbackData
    ) external returns (TokenAmount memory tokenAmount);

    /// @dev Swaps between tokens.
    function swap(
        bytes calldata data,
        address sender,
        address callback,
        bytes calldata callbackData
    ) external returns (TokenAmount memory tokenAmount);
}


interface IBasePool is IPool, IERC20Permit2 {
    function token0() external view returns (address);
    function token1() external view returns (address);

    function reserve0() external view returns (uint);
    function reserve1() external view returns (uint);
    function invariantLast() external view returns (uint);

    function getReserves() external view returns (uint, uint);
    function getAmountOut(address tokenIn, uint amountIn, address sender) external view returns (uint amountOut);
    function getAmountIn(address tokenOut, uint amountOut, address sender) external view returns (uint amountIn);

    event Mint(
        address indexed sender,
        uint amount0,
        uint amount1,
        uint liquidity,
        address indexed to
    );

    event Burn(
        address indexed sender,
        uint amount0,
        uint amount1,
        uint liquidity,
        address indexed to
    );

    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );

    event Sync(
        uint reserve0,
        uint reserve1
    );
}

interface IClassicPool is IBasePool {
}





interface IFeeRecipient {
    /// @dev Notifies the fee recipient after sent fees.
    function notifyFees(
        uint16 feeType,
        address token,
        uint amount,
        uint feeRate,
        bytes calldata data
    ) external;
}


error Overflow();
error InsufficientLiquidityMinted();

contract SyncSwapClassicPool is IClassicPool, ERC20Permit2, ReentrancyGuard {
    using Math for uint;

    uint private constant MINIMUM_LIQUIDITY = 1000;
    uint private constant MAX_FEE = 1e5; /// @dev 100%.

    /// @dev Pool type `1` for classic pools.
    uint16 public constant override poolType = 1;

    address public immutable override master;
    address public immutable override vault;

    address public immutable override token0;
    address public immutable override token1;

    /// @dev Pool reserve of each pool token as of immediately after the most recent balance event.
    /// The value is used to measure growth in invariant on mints and input tokens on swaps.
    uint public override reserve0;
    uint public override reserve1;

    /// @dev Invariant of the pool as of immediately after the most recent liquidity event.
    /// The value is used to measure growth in invariant when protocol fee is enabled,
    /// and will be reset to zero if protocol fee is disabled.
    uint public override invariantLast;

    /// @dev Factory must ensures that the parameters are valid.
    constructor() {
        (bytes memory _deployData) = IPoolFactory(msg.sender).getDeployData();
        (address _token0, address _token1) = abi.decode(_deployData, (address, address));
        address _master = IPoolFactory(msg.sender).master();

        master = _master;
        vault = IPoolMaster(_master).vault();
        (token0, token1) = (_token0, _token1);

        // try to set symbols for the LP token
        (bool _success0, string memory _symbol0) = MetadataHelper.getSymbol(_token0);
        (bool _success1, string memory _symbol1) = MetadataHelper.getSymbol(_token1);
        if (_success0 && _success1) {
            _initialize(
                string(abi.encodePacked("SyncSwap ", _symbol0, "/", _symbol1, " Classic LP")),
                string(abi.encodePacked(_symbol0, "/", _symbol1, " cSLP"))
            );
        } else {
            _initialize(
                "SyncSwap Classic LP",
                "cSLP"
            );
        }
    }

    function getAssets() external view override returns (address[] memory assets) {
        assets = new address[](2);
        assets[0] = token0;
        assets[1] = token1;
    }

    /// @dev Returns the verified sender address otherwise `address(0)`.
    function _getVerifiedSender(address _sender) private view returns (address) {
        if (_sender != address(0)) {
            if (_sender != msg.sender) {
                if (!IPoolMaster(master).isForwarder(msg.sender)) {
                    // The sender from non-forwarder is invalid.
                    return address(0);
                }
            }
        }
        return _sender;
    }

    /// @dev Mints LP tokens - should be called via the router after transferring pool tokens.
    /// The router should ensure that sufficient LP tokens are minted.
    function mint(
        bytes calldata _data,
        address _sender,
        address _callback,
        bytes calldata _callbackData
    ) external override nonReentrant returns (uint) {
        ICallback.BaseMintCallbackParams memory params;

        params.to = abi.decode(_data, (address));
        (params.reserve0, params.reserve1) = (reserve0, reserve1);
        (params.balance0, params.balance1) = _balances();

        params.newInvariant = _computeInvariant(params.balance0, params.balance1);
        params.amount0 = params.balance0 - params.reserve0;
        params.amount1 = params.balance1 - params.reserve1;
        //require(_amount0 != 0 && _amount1 != 0);

        // Gets swap fee for the sender.
        _sender = _getVerifiedSender(_sender);
        uint _amount1Optimal = params.reserve0 == 0 ? 0 : (params.amount0 * params.reserve1) / params.reserve0;
        bool _swap0For1 = params.amount1 < _amount1Optimal;
        if (_swap0For1) {
            params.swapFee = _getSwapFee(_sender, token0, token1);
        } else {
            params.swapFee = _getSwapFee(_sender, token1, token0);
        }

        // Adds mint fee to reserves (applies to invariant increase) if unbalanced.
        (params.fee0, params.fee1) = _unbalancedMintFee(params.swapFee, params.amount0, params.amount1, _amount1Optimal, params.reserve0, params.reserve1);
        params.reserve0 += params.fee0;
        params.reserve1 += params.fee1;

        // Calculates old invariant (where unbalanced fee added to) and, mint protocol fee if any.
        params.oldInvariant = _computeInvariant(params.reserve0, params.reserve1);
        bool _feeOn;
        (_feeOn, params.totalSupply) = _mintProtocolFee(0, 0, params.oldInvariant);

        if (params.totalSupply == 0) {
            params.liquidity = params.newInvariant - MINIMUM_LIQUIDITY;
            _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock on first mint.
        } else {
            // Calculates liquidity proportional to invariant growth.
            params.liquidity = ((params.newInvariant - params.oldInvariant) * params.totalSupply) / params.oldInvariant;
        }

        // Mints liquidity for recipient.
        if (params.liquidity == 0) {
            revert InsufficientLiquidityMinted();
        }
        _mint(params.to, params.liquidity);

        // Calls callback with data.
        if (_callback != address(0)) {
            // Fills additional values for callback params.
            params.sender = _sender;
            params.callbackData = _callbackData;

            ICallback(_callback).syncSwapBaseMintCallback(params);
        }

        // Updates reserves and last invariant with new balances.
        _updateReserves(params.balance0, params.balance1);
        if (_feeOn) {
            invariantLast = params.newInvariant;
        }

        emit Mint(msg.sender, params.amount0, params.amount1, params.liquidity, params.to);

        return params.liquidity;
    }

    /// @dev Burns LP tokens sent to this contract.
    /// The router should ensure that sufficient pool tokens are received.
    function burn(
        bytes calldata _data,
        address _sender,
        address _callback,
        bytes calldata _callbackData
    ) external override nonReentrant returns (TokenAmount[] memory _amounts) {
        ICallback.BaseBurnCallbackParams memory params;

        (params.to, params.withdrawMode) = abi.decode(_data, (address, uint8));
        (params.balance0, params.balance1) = _balances();
        params.liquidity = balanceOf[address(this)];

        // Mints protocol fee if any.
        // Note `_mintProtocolFee` here will checks overflow.
        bool _feeOn;
        (_feeOn, params.totalSupply) = _mintProtocolFee(params.balance0, params.balance1, 0);

        // Calculates amounts of pool tokens proportional to balances.
        params.amount0 = params.liquidity * params.balance0 / params.totalSupply;
        params.amount1 = params.liquidity * params.balance1 / params.totalSupply;
        //require(_amount0 != 0 || _amount1 != 0);

        // Burns liquidity and transfers pool tokens.
        _burn(address(this), params.liquidity);
        _transferTokens(token0, params.to, params.amount0, params.withdrawMode);
        _transferTokens(token1, params.to, params.amount1, params.withdrawMode);

        // Updates balances.
        /// @dev Cannot underflow because amounts are lesser figures derived from balances.
        unchecked {
            params.balance0 -= params.amount0;
            params.balance1 -= params.amount1;
        }

        // Calls callback with data.
        // Note reserves are not updated at this point to allow read the old values.
        if (_callback != address(0)) {
            // Fills additional values for callback params.
            params.sender = _getVerifiedSender(_sender);
            params.callbackData = _callbackData;

            ICallback(_callback).syncSwapBaseBurnCallback(params);
        }

        // Updates reserves and last invariant with up-to-date balances (after transfers).
        _updateReserves(params.balance0, params.balance1);
        if (_feeOn) {
            invariantLast = _computeInvariant(params.balance0, params.balance1);
        }

        _amounts = new TokenAmount[](2);
        _amounts[0] = TokenAmount(token0, params.amount0);
        _amounts[1] = TokenAmount(token1, params.amount1);

        emit Burn(msg.sender, params.amount0, params.amount1, params.liquidity, params.to);
    }

    /// @dev Burns LP tokens sent to this contract and swaps one of the output tokens for another
    /// - i.e., the user gets a single token out by burning LP tokens.
    /// The router should ensure that sufficient pool tokens are received.
    function burnSingle(
        bytes calldata _data,
        address _sender,
        address _callback,
        bytes calldata _callbackData
    ) external override nonReentrant returns (TokenAmount memory _tokenAmount) {
        ICallback.BaseBurnSingleCallbackParams memory params;

        (params.tokenOut, params.to, params.withdrawMode) = abi.decode(_data, (address, address, uint8));
        (params.balance0, params.balance1) = _balances();
        params.liquidity = balanceOf[address(this)];

        // Mints protocol fee if any.
        // Note `_mintProtocolFee` here will checks overflow.
        bool _feeOn;
        (_feeOn, params.totalSupply) = _mintProtocolFee(params.balance0, params.balance1, 0);

        // Calculates amounts of pool tokens proportional to balances.
        params.amount0 = params.liquidity * params.balance0 / params.totalSupply;
        params.amount1 = params.liquidity * params.balance1 / params.totalSupply;

        // Burns liquidity.
        _burn(address(this), params.liquidity);

        // Gets swap fee for the sender.
        _sender = _getVerifiedSender(_sender);

        // Swaps one token for another, transfers desired tokens, and update context values.
        /// @dev Calculate `amountOut` as if the user first withdrew balanced liquidity and then swapped from one token for another.
        if (params.tokenOut == token1) {
            // Swaps `token0` for `token1`.
            params.swapFee = _getSwapFee(_sender, token0, token1);

            params.tokenIn = token0;
            (params.amountSwapped, params.feeIn) = _getAmountOut(
                params.swapFee, params.amount0, params.balance0 - params.amount0, params.balance1 - params.amount1, true
            );
            params.amount1 += params.amountSwapped;

            _transferTokens(token1, params.to, params.amount1, params.withdrawMode);
            params.amountOut = params.amount1;
            params.amount0 = 0;
            params.balance1 -= params.amount1;
        } else {
            // Swaps `token1` for `token0`.
            //require(_tokenOut == token0);
            params.swapFee = _getSwapFee(_sender, token1, token0);

            params.tokenIn = token1;
            (params.amountSwapped, params.feeIn) = _getAmountOut(
                params.swapFee, params.amount1, params.balance0 - params.amount0, params.balance1 - params.amount1, false
            );
            params.amount0 += params.amountSwapped;

            _transferTokens(token0, params.to, params.amount0, params.withdrawMode);
            params.amountOut = params.amount0;
            params.amount1 = 0;
            params.balance0 -= params.amount0;
        }

        // Calls callback with data.
        // Note reserves are not updated at this point to allow read the old values.
        if (_callback != address(0)) {
            // Fills additional values for callback params.
            params.sender = _sender;
            params.callbackData = _callbackData;

            /// @dev Note the `tokenOut` parameter can be decided by the caller, and the correctness is not guaranteed.
            /// Additional checks MUST be performed in callback to ensure the `tokenOut` is one of the pools tokens if the sender
            /// is not a trusted source to avoid potential issues.
            ICallback(_callback).syncSwapBaseBurnSingleCallback(params);
        }

        // Update reserves and last invariant with up-to-date balances (updated above).
        _updateReserves(params.balance0, params.balance1);
        if (_feeOn) {
            invariantLast = _computeInvariant(params.balance0, params.balance1);
        }

        _tokenAmount = TokenAmount(params.tokenOut, params.amountOut);

        emit Burn(msg.sender, params.amount0, params.amount1, params.liquidity, params.to);
    }

    /// @dev Swaps one token for another - should be called via the router after transferring input tokens.
    /// The router should ensure that sufficient output tokens are received.
    function swap(
        bytes calldata _data,
        address _sender,
        address _callback,
        bytes calldata _callbackData
    ) external override nonReentrant returns (TokenAmount memory _tokenAmount) {
        ICallback.BaseSwapCallbackParams memory params;

        (params.tokenIn, params.to, params.withdrawMode) = abi.decode(_data, (address, address, uint8));
        (params.reserve0, params.reserve1) = (reserve0, reserve1);
        (params.balance0, params.balance1) = _balances();

        // Gets swap fee for the sender.
        _sender = _getVerifiedSender(_sender);

        // Calculates output amount, update context values and emit event.
        if (params.tokenIn == token0) {
            params.swapFee = _getSwapFee(_sender, token0, token1);

            params.tokenOut = token1;
            params.amountIn = params.balance0 - params.reserve0;

            (params.amountOut, params.feeIn) = _getAmountOut(params.swapFee, params.amountIn, params.reserve0, params.reserve1, true);
            params.balance1 -= params.amountOut;

            emit Swap(msg.sender, params.amountIn, 0, 0, params.amountOut, params.to);
        } else {
            //require(params.tokenIn == token1);
            params.swapFee = _getSwapFee(_sender, token1, token0);

            params.tokenOut = token0;
            params.amountIn = params.balance1 - params.reserve1;

            (params.amountOut, params.feeIn) = _getAmountOut(params.swapFee, params.amountIn, params.reserve0, params.reserve1, false);
            params.balance0 -= params.amountOut;

            emit Swap(msg.sender, 0, params.amountIn, params.amountOut, 0, params.to);
        }

        // Checks overflow.
        if (params.balance0 > type(uint128).max) {
            revert Overflow();
        }
        if (params.balance1 > type(uint128).max) {
            revert Overflow();
        }

        // Transfers output tokens.
        _transferTokens(params.tokenOut, params.to, params.amountOut, params.withdrawMode);

        // Calls callback with data.
        if (_callback != address(0)) {
            // Fills additional values for callback params.
            params.sender = _sender;
            params.callbackData = _callbackData;

            /// @dev Note the `tokenIn` parameter can be decided by the caller, and the correctness is not guaranteed.
            /// Additional checks MUST be performed in callback to ensure the `tokenIn` is one of the pools tokens if the sender
            /// is not a trusted source to avoid potential issues.
            ICallback(_callback).syncSwapBaseSwapCallback(params);
        }

        // Updates reserves with up-to-date balances (updated above).
        _updateReserves(params.balance0, params.balance1);

        _tokenAmount.token = params.tokenOut;
        _tokenAmount.amount = params.amountOut;
    }

    function _getSwapFee(address _sender, address _tokenIn, address _tokenOut) private view returns (uint24 _swapFee) {
        _swapFee = getSwapFee(_sender, _tokenIn, _tokenOut, "");
    }

    /// @dev This function doesn't check the forwarder.
    function getSwapFee(address _sender, address _tokenIn, address _tokenOut, bytes memory data) public view override returns (uint24 _swapFee) {
        _swapFee = IPoolMaster(master).getSwapFee(address(this), _sender, _tokenIn, _tokenOut, data);
    }

    function getProtocolFee() public view override returns (uint24 _protocolFee) {
        _protocolFee = IPoolMaster(master).getProtocolFee(address(this));
    }

    function _updateReserves(uint _balance0, uint _balance1) private {
        (reserve0, reserve1) = (_balance0, _balance1);
        emit Sync(_balance0, _balance1);
    }

    function _transferTokens(address token, address to, uint amount, uint8 withdrawMode) private {
        if (withdrawMode == 0) {
            IVault(vault).transfer(token, to, amount);
        } else {
            IVault(vault).withdrawAlternative(token, to, amount, withdrawMode);
        }
    }

    function _balances() private view returns (uint balance0, uint balance1) {
        balance0 = IVault(vault).balanceOf(token0, address(this));
        balance1 = IVault(vault).balanceOf(token1, address(this));
    }

    /// @dev This fee is charged to cover for the swap fee when users adding unbalanced liquidity.
    function _unbalancedMintFee(
        uint _swapFee,
        uint _amount0,
        uint _amount1,
        uint _amount1Optimal,
        uint _reserve0,
        uint _reserve1
    ) private pure returns (uint _token0Fee, uint _token1Fee) {
        if (_reserve0 == 0) {
            return (0, 0);
        }
        if (_amount1 >= _amount1Optimal) {
            _token1Fee = (_swapFee * (_amount1 - _amount1Optimal)) / (2 * MAX_FEE);
        } else {
            uint _amount0Optimal = (_amount1 * _reserve0) / _reserve1;
            _token0Fee = (_swapFee * (_amount0 - _amount0Optimal)) / (2 * MAX_FEE);
        }
    }

    function _mintProtocolFee(uint _reserve0, uint _reserve1, uint _invariant) private returns (bool _feeOn, uint _totalSupply) {
        _totalSupply = totalSupply;

        address _feeRecipient = IPoolMaster(master).getFeeRecipient();
        _feeOn = (_feeRecipient != address(0));

        uint _invariantLast = invariantLast;
        if (_invariantLast != 0) {
            if (_feeOn) {
                if (_invariant == 0) {
                    _invariant = _computeInvariant(_reserve0, _reserve1);
                }

                if (_invariant > _invariantLast) {
                    /// @dev Mints `protocolFee` % of growth in liquidity (invariant).
                    uint _protocolFee = getProtocolFee();
                    uint _numerator = _totalSupply * (_invariant - _invariantLast) * _protocolFee;
                    uint _denominator = (MAX_FEE - _protocolFee) * _invariant + _protocolFee * _invariantLast;
                    uint _liquidity = _numerator / _denominator;

                    if (_liquidity != 0) {
                        _mint(_feeRecipient, _liquidity);

                        // Notifies the fee recipient.
                        IFeeRecipient(_feeRecipient).notifyFees(1, address(this), _liquidity, _protocolFee, "");

                        _totalSupply += _liquidity; // update cached value.
                    }
                }
            } else {
                /// @dev Resets last invariant to clear measured growth if protocol fee is not enabled.
                invariantLast = 0;
            }
        }
    }

    function getReserves() external view override returns (uint _reserve0, uint _reserve1) {
        (_reserve0, _reserve1) = (reserve0, reserve1);
    }

    function getAmountOut(address _tokenIn, uint _amountIn, address _sender) external view override returns (uint _amountOut) {
        (uint _reserve0, uint _reserve1) = (reserve0, reserve1);
        bool _swap0For1 = _tokenIn == token0;
        address _tokenOut = _swap0For1 ? token1 : token0;
        (_amountOut,) = _getAmountOut(_getSwapFee(_sender, _tokenIn, _tokenOut), _amountIn, _reserve0, _reserve1, _swap0For1);
    }

    function getAmountIn(address _tokenOut, uint _amountOut, address _sender) external view override returns (uint _amountIn) {
        (uint _reserve0, uint _reserve1) = (reserve0, reserve1);
        bool _swap1For0 = _tokenOut == token0;
        address _tokenIn = _swap1For0 ? token1 : token0;
        _amountIn = _getAmountIn(_getSwapFee(_sender, _tokenIn, _tokenOut), _amountOut, _reserve0, _reserve1, _swap1For0);
    }

    function _getAmountOut(
        uint _swapFee,
        uint _amountIn,
        uint _reserve0,
        uint _reserve1,
        bool _token0In
    ) private pure returns (uint _dy, uint _feeIn) {
        if (_amountIn == 0) {
            _dy = 0;
        } else {
            uint _amountInWithFee = _amountIn * (MAX_FEE - _swapFee);
            _feeIn = _amountIn * _swapFee / MAX_FEE;

            if (_token0In) {
                _dy = (_amountInWithFee * _reserve1) / (_reserve0 * MAX_FEE + _amountInWithFee);
            } else {
                _dy = (_amountInWithFee * _reserve0) / (_reserve1 * MAX_FEE + _amountInWithFee);
            }
        }
    }

    function _getAmountIn(
        uint _swapFee,
        uint _amountOut,
        uint _reserve0,
        uint _reserve1,
        bool _token0Out
    ) private pure returns (uint _dx) {
        if (_amountOut == 0) {
            _dx = 0;
        } else {
            if (_token0Out) {
                _dx = (_reserve1 * _amountOut * MAX_FEE) / ((_reserve0 - _amountOut) * (MAX_FEE - _swapFee)) + 1;
            } else {
                _dx = (_reserve0 * _amountOut * MAX_FEE) / ((_reserve1 - _amountOut) * (MAX_FEE - _swapFee)) + 1;
            }
        }
    }

    function _computeInvariant(uint _reserve0, uint _reserve1) private pure returns (uint _invariant) {
        if (_reserve0 > type(uint128).max) {
            revert Overflow();
        }
        if (_reserve1 > type(uint128).max) {
            revert Overflow();
        }
        _invariant = (_reserve0 * _reserve1).sqrt();
    }
}

contract SyncSwapClassicPoolFactory is BasePoolFactory {
    constructor(address _master) BasePoolFactory(_master) {
    }

    function _createPool(address token0, address token1) internal override returns (address pool) {
        // Perform sanity checks.
        IERC20(token0).balanceOf(address(this));
        IERC20(token1).balanceOf(address(this));

        bytes memory deployData = abi.encode(token0, token1);
        cachedDeployData = deployData;

        // The salt is same with deployment data.
        bytes32 salt = keccak256(deployData);
        pool = address(new SyncSwapClassicPool{salt: salt}()); // this will prevent duplicated pools.

        // Register the pool. The config is same with deployment data.
        IPoolMaster(master).registerPool(pool, 1, deployData);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Expired","type":"error"},{"inputs":[],"name":"InsufficientLiquidityMinted","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"Overflow","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reserve0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserve1","type":"uint256"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_callback","type":"address"},{"internalType":"bytes","name":"_callbackData","type":"bytes"}],"name":"burn","outputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct IPool.TokenAmount[]","name":"_amounts","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_callback","type":"address"},{"internalType":"bytes","name":"_callbackData","type":"bytes"}],"name":"burnSingle","outputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct IPool.TokenAmount","name":"_tokenAmount","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenOut","type":"address"},{"internalType":"uint256","name":"_amountOut","type":"uint256"},{"internalType":"address","name":"_sender","type":"address"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"address","name":"_sender","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"_amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAssets","outputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFee","outputs":[{"internalType":"uint24","name":"_protocolFee","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint256","name":"_reserve0","type":"uint256"},{"internalType":"uint256","name":"_reserve1","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"getSwapFee","outputs":[{"internalType":"uint24","name":"_swapFee","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"invariantLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"master","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_callback","type":"address"},{"internalType":"bytes","name":"_callbackData","type":"bytes"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"permit2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"poolType","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserve0","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserve1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_callback","type":"address"},{"internalType":"bytes","name":"_callbackData","type":"bytes"}],"name":"swap","outputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct IPool.TokenAmount","name":"_tokenAmount","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

13b8683f000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000005aea5775959fbc2557cc8789bc1bf90a239d9a910000000000000000000000003355df6d4c9c3035724fd0e3914de96a5a83aaf4

Deployed Bytecode

0x0004000000000002000400000000000200000000030100190000006003300270000007ae0430019700030000004103550002000000010355000007ae0030019d000100000000001f00000001012001900000000c0000c13d1eb102560000040f0000012001000039000000400010043f0000000001000416000000000110004c000000aa0000c13d0000001201000039000000800010043f00000001010000390000000802000039000000000012041b000007af01000041000001200010043f00000000010004140000000009000411000000040290008c000000460000613d00000004040000390000012003000039000000000209001900000000050300190000000006000019000400000009001d1eb101e30000040f0000000409000029000000000110004c000000460000c13d0000000302000367000000400100043d00000001040000310000001f0340018f0000000504400272000000350000613d000000000500001900000005065002100000000007610019000000000662034f000000000606043b00000000006704350000000105500039000000000645004b0000002d0000413d000000000530004c000000440000613d0000000504400210000000000242034f00000000044100190000000303300210000000000504043300000000053501cf000000000535022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000252019f000000000024043500000001020000311eb1024d0000040f000000030200036700000001010000310000001f0310018f0000000504100272000000540000613d00000000050000190000000506500210000000000762034f000000000707043b000001200660003900000000007604350000000105500039000000000645004b0000004c0000413d000000000530004c000000630000613d0000000504400210000000000242034f00000003033002100000012004400039000000000504043300000000053501cf000000000535022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000252019f00000000002404350000013f02100039000000200800008a000000000282016f000007b003200041000007b10330009c000000700000213d000007bf0100004100000000001004350000004101000039000000040010043f000000240200003900000000010000191eb1024d0000040f000007b203000041000000200410008c00000000040000190000000004034019000007b205100197000000000650004c000000000300a019000007b20550009c000000000304c019000000400020043f000000000230004c000000aa0000c13d000001200400043d000007b30240009c000000aa0000213d00000120031000390000013f01400039000007b202000041000000000531004b00000000050000190000000005024019000007b206300197000007b201100197000000000761004b000000000200a019000000000161013f000007b20110009c00000000010500190000000001026019000000000110004c000000aa0000613d000001200140003900000000020104330000014001400039000300000008001d000400000009001d1eb116dd0000040f00000004020000290000000005010433000007b203000041000000400450008c00000000040000190000000004034019000007b206500197000000000560004c000000000300a019000007b20560009c000000000304c019000000000330004c000000aa0000c13d00000020031000390000000005030433000007b40350009c000000aa0000213d00000040011000390000000006010433000007b40160009c000000ad0000a13d000000000100001900000000020000191eb1024d0000040f000000400300043d000007b50100004100000000001304350000000001000414000000040420008c000000bf0000613d0000000404000039000200000006001d0000002006000039000400000005001d0000000005030019000100000003001d1eb101e30000040f000000010300002900000002060000290000000405000029000000000110004c000000260000613d0000000101000031000000200210008c000000200200003900000000020140190000001f02200039000000600420018f0000000002340019000000000442004b00000000070000190000000107004039000007b30420009c000000690000213d0000000104700190000000690000c13d000000400020043f000000200110008c000000aa0000413d0000000002030433000007b40120009c000000aa0000213d000000a00020043f000007b601000041000000400300043d00000000001304350000000001000414000000040420008c000000e60000613d0000000404000039000200000006001d0000002006000039000400000005001d0000000005030019000100000003001d1eb101e30000040f000000010300002900000002060000290000000405000029000000000110004c000000260000613d0000000101000031000000200210008c000000200200003900000000020140190000001f02200039000000600420018f0000000002340019000000000442004b00000000070000190000000107004039000007b30420009c000000690000213d0000000104700190000000690000c13d000000400020043f000000200110008c000000aa0000413d0000000001030433000007b40210009c000000aa0000213d000000c00010043f000001000060043f000000e00050043f0000000001050019000200000006001d1eb118330000040f000400000001001d000100000002001d00000002010000291eb118330000040f0000000403000029000000000330004c0000011a0000613d000000000110004c0000011a0000613d000000400100043d0000002003100039000007b704000041000000000043043500000029051000390000000103000029000000200430003900000000030304330000000006000019000000000736004b0000012f0000813d00000000075600190000000008460019000000000808043300000000008704350000002006600039000001120000013d000000400100043d000007bb0210009c000000690000213d0000004002100039000000400020043f0000002002100039000007bc03000041000000000032043500000013020000390000000000210435000000400300043d000007bb0230009c000000690000213d0000004002300039000000400020043f0000002002300039000007bd04000041000000000042043500000004020000390000000000230435000001900000013d000000000636004b000001330000a13d0000000005530019000000000005043500000000031300190000002905300039000007b806000041000000000065043500000020052000390000002a0730003900000000060204330000000008000019000000000968004b000001430000813d0000000009780019000000000a580019000000000a0a04330000000000a9043500000020088000390000013b0000013d000000000868004b000001470000a13d0000000007760019000000000007043500000000033600190000002a06300039000007b907000041000000000076043500000000031300490000001506300039000000000061043500000054033000390000000306000029000000000663016f0000000003160019000000000663004b00000000060000190000000106004039000007b30730009c000000690000213d0000000106600190000000690000c13d000000400030043f0000002007300039000000010600002900000000060604330000000008000019000000000968004b000001660000813d0000000009780019000000000a480019000000000a0a04330000000000a9043500000020088000390000015e0000013d000000000468004b0000016a0000a13d0000000004760019000000000004043500000000043600190000002006400039000007b8070000410000000000760435000000210640003900000000020204330000000007000019000000000827004b000001790000813d00000000086700190000000009570019000000000909043300000000009804350000002007700039000001710000013d000000000527004b0000017d0000a13d0000000005620019000000000005043500000000024200190000002104200039000007ba05000041000000000054043500000000023200490000000604200039000000000043043500000045022000390000000304000029000000000442016f0000000002340019000000000442004b00000000040000190000000104004039000007b30520009c000000690000213d0000000104400190000000690000c13d000000400020043f00000000020300191eb1171c0000040f000000800100043d00000140000004430000016000100443000000a00100043d00000020020000390000018000200443000001a0001004430000004001000039000000c00300043d000001c000100443000001e0003004430000006001000039000000e00300043d000002000010044300000220003004430000008001000039000001000300043d0000024000100443000002600030044300000100002004430000000501000039000001200010044300000100010000390000018002000039000007be030000411eb102430000040f0002000000000002000200000006001d000100000005001d000007ae05000041000007ae0630009c00000000030580190000004003300210000007ae0640009c00000000040580190000006004400210000000000334019f000007ae0410009c0000000001058019000000c001100210000000000113019f1eb11ea70000040f000000010900002900000000030100190000006003300270000007ae033001970000000205000029000000000453004b00000000050340190000001f0450018f0000000505500272000001cf0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000001c70000413d000000010220018f000000000640004c000001df0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000001020019000000000001042d0002000000000002000200000006001d000100000005001d000007ae05000041000007ae0630009c00000000030580190000004003300210000007ae0640009c00000000040580190000006004400210000000000334019f000007ae0410009c0000000001058019000000c001100210000000000113019f1eb11eac0000040f000000010900002900000000030100190000006003300270000007ae033001970000000205000029000000000453004b00000000050340190000001f0450018f0000000505500272000002060000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000001fe0000413d000000010220018f000000000640004c000002160000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000001020019000000000001042d000007ae03000041000007ae0410009c00000000010380190000004001100210000007ae0420009c00000000020380190000006002200210000000000112019f0000000002000414000007ae0420009c0000000002038019000000c002200210000000000112019f000007c0011001c700008010020000391eb11eac0000040f00000001022001900000022e0000613d000000000101043b000000000001042d000000000100001900000000020000191eb1024d0000040f0000000003010019000007ae010000410000000004000414000007ae0540009c0000000001044019000000c00110021000000060022002100000000001120019000007c10110004100000000020300191eb11eac0000040f0000000102200190000002400000613d000000000101043b000000000001042d000000000100001900000000020000191eb1024d0000040f000007ae04000041000007ae0510009c000000000104801900000040011002100000000001310019000007ae0320009c00000000020480190000006002200210000000000121001900001eb20001042e000007ae03000041000007ae0420009c0000000002038019000007ae0410009c000000000103801900000040011002100000006002200210000000000112019f00001eb30001043000220000000000020000008006000039000000400060043f0000000001000031000000040110008c00000a2f0000413d002200000000001d0000000201000367000000000101043b000000e001100270000007c20210009c000005240000613d000007c30210009c00000000050004120000000003000410000005490000613d000007c40210009c000005de0000613d000007c50210009c0000080a0000613d000007c60210009c000008220000613d000007c70210009c000002de0000613d000007c80210009c000008680000613d000007c90210009c000003760000613d000007ca0210009c0000038d0000613d000007cb0210009c0000083e0000613d000007cc0210009c000007d30000613d000007cd0210009c000006110000613d000007ce0210009c000006310000613d000007cf0210009c000008500000613d000007d00210009c000006490000613d000007d10210009c000006610000613d000007d20210009c000002fc0000613d000007d30210009c000004050000613d000007d40210009c0000031b0000613d000007d50210009c000006a50000613d000007d60210009c000004280000613d000007d70210009c0000033a0000613d000007d80210009c000006e90000613d000007d90210009c0000045c0000613d000007da0210009c000007010000613d000007db0210009c000007180000613d000007dc0210009c000007380000613d000007dd0210009c000007a80000613d000007de0210009c000004a60000613d000007df0210009c000004c80000613d000007e00210009c000005030000613d000007e10110009c00000a2f0000c13d0000000001000416000000000110004c00000a2f0000c13d001b00000006001d0000000001000031001c00000005001d1eb1199b0000040f001a00000001001d001900000002001d001800000003001d0000000a01000039000000000101041a001600000001001d0000000901000039000000000101041a001700000001001d000007e20100004100000000001004390000001c01000029000000040010044300000060010000390000002400100443000080050100003900000044020000391eb102310000040f00000000030100190000001a01000029000000000131013f000007b401100198001500000001001d000002cb0000c13d000007e20100004100000000001004390000001c0100002900000004001004430000001b010000290000002400100443000080050100003900000044020000391eb102310000040f0000000003010019000000400400043d000007e30140009c000008490000213d0000002001400039000000400010043f000000000004043500000018010000290000001a020000291eb11bd40000040f0000002202000029000007e4011001970000001903000029000000000330004c000009210000c13d000000400100043d0000000000210435000000200200003900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000400310008c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d1eb118d10000040f00000024020000390000000202200367000000000302043b000000000201001900000000010004111eb11a1a0000040f0000000102000039000000400100043d0000000000210435000000200200003900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000200310008c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d1eb118d10000040f000007b40110019700000000001004350000000101000039000000200010043f000000400200003900000000010000191eb1021a0000040f000000000201041a000000400100043d0000000000210435000000200200003900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000200310008c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d1eb118d10000040f000007b40110019700000000001004350000000301000039000000200010043f000000400200003900000000010000191eb1021a0000040f000000000201041a000000400100043d0000000000210435000000200200003900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d001b00000006001d0000000001000031001c00000005001d1eb1199b0000040f001a00000001001d001900000002001d001800000003001d0000000a01000039000000000101041a001600000001001d0000000901000039000000000101041a001700000001001d000007e20100004100000000001004390000001c01000029000000040010044300000060010000390000002400100443000080050100003900000044020000391eb102310000040f00000000020100190000001a01000029000000000121013f000007b401100198001500000001001d000003630000c13d000007e20100004100000000001004390000001c0100002900000004001004430000001b010000290000002400100443000080050100003900000044020000391eb102310000040f0000000002010019000000400400043d000007e30140009c000008490000213d0000002001400039000000400010043f000000000004043500000018010000290000001a030000291eb11bd40000040f0000002202000029000007e4031001970000001901000029000000000110004c0000092a0000c13d000000400100043d0000000000210435000000200200003900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000000310004c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d000000400100043d000000000200041a0000000000210435000000200200003900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000600310008c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d00000002010003670000000402100370000000000202043b001c00000002001d000007b40220009c00000a2f0000213d0000002402100370000000000202043b001a00000002001d000007b40220009c00000a2f0000213d0000004401100370000000000101043b001b00000001001d0000001c0100002900000000001004350000000201000039001800000001001d000000200010043f0000004002000039001900000002001d00000000010000191eb1021a0000040f0000000002000411001700000002001d0000000000200435000000200010043f000000000100001900000019020000291eb1021a0000040f000000000201041a000000010100008a000000000112004b000003d60000613d0000001b01000029001900000002001d000000000112004b000010830000413d0000001c0100002900000000001004350000001801000029000000200010043f0000004002000039001800000002001d00000000010000191eb1021a0000040f00000017020000290000000000200435000000200010043f000000000100001900000018020000291eb1021a0000040f0000001b0200002900000019030000290000000002230049000000000021041b0000001c0100002900000000001004350000000101000039001900000001001d000000200010043f000000400200003900000000010000191eb1021a0000040f000000000201041a0000001b03000029000000000332004b000010830000413d0000001b030000290000000002320049000000000021041b0000001a0100002900000000001004350000001901000029000000200010043f000000400200003900000000010000191eb1021a0000040f000000000201041a0000001b030000290000000002320019000000000021041b000000400100043d0000000000310435000007ae020000410000000003000414000007ae0430009c0000000003028019000007ae0410009c00000000010280190000004001100210000000c002300210000000000112019f000007f3011001c70000800d020000390000000303000039000007f4040000410000001c050000290000001a060000291eb11ea70000040f000000010120019000000a2f0000613d000007120000013d0000000001000416000000000110004c00000a2f0000c13d001c00000005001d0000000001000031001b00000006001d1eb118e30000040f002100000004001d002000000005001d001f00000006001d000000400400043d001e00000004001d000007bb0540009c000008490000213d001800000002001d001900000001001d001a00000003001d0000004002400039000000400020043f00000000000404350000002001400039000000220200002900000000002104351eb11b010000040f000000400100043d001d00000001001d000007f60210009c0000094f0000413d0000002201000029000007bf0200004100000000002104350000004102000039000000040020043f00000024020000391eb1024d0000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000000310004c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d0000000501000039001a00000001001d000000000101041a001b00000001001d000000400200043d001c00000002001d1eb1191a0000040f0000001b030000290000001c070000290000000000170435000000010230019000000a090000c13d000001000200008a000000000223016f00000020057000390000000000250435000000000110004c000000200200003900000000020060190000000001250019000000000271004900000000010700191eb1192c0000040f0000002001000039000000400200043d001b00000002001d000000000012043500000020022000390000001c010000291eb119400000040f0000001b030000290000000002310049000000000103001900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000400310008c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d00000002010003670000000402100370000000000202043b001c00000002001d000007b40220009c00000a2f0000213d0000002401100370000000000101043b001b00000001001d0000000001000411001a00000001001d00000000001004350000000101000039001900000001001d000000200010043f000000400200003900000000010000191eb1021a0000040f000000000201041a0000001b030000290000000004030019000000000332004b000010830000413d0000000002420049000000000021041b0000001c0100002900000000001004350000001901000029000000200010043f000000400200003900000000010000191eb1021a0000040f000000000201041a0000001b030000290000000002230019000000000021041b000000400100043d0000000000310435000007ae020000410000000003000414000007ae0430009c0000000003028019000007ae0410009c00000000010280190000004001100210000000c002300210000000000112019f000007f3011001c70000800d020000390000000303000039000007f4040000410000001a050000290000001c060000291eb11ea70000040f0000000101200190000007120000c13d00000a2f0000013d0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000000310004c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d000000400100043d001b00000001001d000007e201000041000000000010043900000004005004430000002001000039001c00000001001d0000002400100443000080050100003900000044020000391eb102310000040f000007b4021001970000001b0100002900000000002104350000001c0200002900000000030000191eb102430000040f001a00000003001d0000000001000416000000000110004c00000a2f0000c13d001c00000005001d0000000001000031001b00000006001d1eb118e30000040f001800000001001d001900000002001d001400000003001d001700000004001d001600000005001d001500000006001d1eb11b010000040f000000400a00043d000007e901a0009c000008490000213d000007b2010000410000001903000029000000400230008c00000000020000190000000002014019000007b203300197000000000430004c000000000100a019000007b20330009c000000000102c0190000014002a00039000000400020043f00000000000a04350000004008a00039000000220200002900000000002804350000002004a0003900000000002404350000008003a00039000000220200002900000000002304350000006009a000390000000000290435000000c005a0003900000022020000290000000000250435000000a00da0003900000000002d0435000001200ba000390000006007000039000000220200002900000000007b0435000000e006a00039000001000ca0003900000000002c04350000000000260435000000000110004c00000a170000613d000000220100002900000000020100191eb1024d0000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000000310004c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d000000400100043d001b00000001001d000007e2010000410000000000100439000000040050044300000040010000390000002400100443000080050100003900000044020000391eb102310000040f000007b4021001970000001b010000290000000000210435000000200200003900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000200310008c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d00000004010000390000000201100367000000000101043b0000080702100197000000000221004b00000a2f0000c13d0000000102000039000008080310009c000005430000613d000008090310009c000005430000613d0000080a0110009c00000000020000190000000102006039000000010120018f000000800010043f0000008001000039000000200200003900000000030000191eb102430000040f001a00000003001d0000000001000416000000000110004c00000a2f0000c13d0000000001000031001c00000005001d001b00000006001d1eb118e30000040f001700000001001d001600000003001d001500000004001d001400000005001d001300000006001d000007b201000041000000200320008c00000000030000190000000003014019000007b202200197000000000420004c000000000100a019000007b20220009c000000000103c019001900000001001d1eb11b010000040f1eb11a9f0000040f001800000001001d0000001901000029000000000110004c00000a2f0000c13d00000017010000290000000201100367000000000101043b000007b40210009c00000a2f0000213d00000018030000290000002002300039000f00000002001d00000000001204350000000a01000039000000000101041a0000000902000039000000000202041a0000004004300039001900000004001d00000000002404350000006002300039001200000002001d00000000001204351eb11d440000040f0000001804000029000000a003400039001100000003001d00000000002304350000008003400039001700000003001d00000000001304351eb11e450000040f00000018020000290000014002200039001000000002001d00000000001204350000001901000029000000000101043300000017020000290000000002020433000000000312004b000010830000413d00000000011200490000001802000029000000c002200039000e00000002001d00000000001204350000001201000029000000000101043300000011020000290000000002020433000000000312004b000010830000413d00000000011200490000001802000029000000e002200039000d00000002001d000000000012043500000016010000291eb11b160000040f0000002202000029001600000001001d00000019010000290000000001010433000000000310004c0000000004020019000005b10000613d000000120300002900000000030304330000000e040000290000000004040433000000000540004c000005af0000613d000000010500008a00000000654500d9000000000535004b000010830000413d00000000434300a900000000141300d9000000400500043d0000000d010000290000000001010433000000000141004b000000200150003900000bc90000813d000007e30350009c0000001b03000029000008490000213d000a00000004001d000000400010043f0000000000250435000007e201000041000c00000001001d00000000001004390000001c010000290000000400100443000000600100003900000024001004430000800501000039000800000001001d0000004402000039000900000002001d000b00000005001d1eb102310000040f0000000c0200002900000000002004390000001c0200002900000004002004430000001b020000290000002400200443001b00000001001d000000080100002900000009020000291eb102310000040f000000000301001900000016010000290000001b020000290000000b040000291eb11bd40000040f0000001802000029000001c005200039000007e401100197000000000015043500000bf00000013d0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000000310004c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d0000000401000039001a00000001001d000000000101041a001b00000001001d000000400200043d001c00000002001d1eb1191a0000040f0000001b030000290000001c070000290000000000170435000000010230019000000a320000c13d000001000200008a000000000223016f00000020037000390000000000230435000000000110004c00000020020000390000000002006019000000200220003900000000010700191eb1192c0000040f0000002001000039000000400200043d001b00000002001d000000000012043500000020022000390000001c010000291eb119400000040f0000001b030000290000000002310049000000000103001900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000000310004c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d000000400100043d001b00000001001d000007e201000041000000000010043900000004005004430000002400000443000080050100003900000044020000391eb102310000040f000000ff0210018f0000001b010000290000000000210435000000200200003900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000000310004c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d1eb119b70000040f000000400300043d00000000001304350000002002000039000000000103001900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000000310004c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d0000000a01000039000000000201041a000000400100043d0000000000210435000000200200003900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000000310004c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d001c00000005001d000000400700043d000007ef0170009c000008490000213d0000006001700039000000400010043f00000002010000390000000000170435000000200570003900000000010000310000000201100367000000000200001900000005032002100000000004350019000000000331034f000000000303043b00000000003404350000000102200039000000020320008c0000067e0000413d0000000001070433000000000110004c0000001c020000290000069e0000613d000007e201000041000000000010043900000004002004430000006001000039000000240010044300008005010000390000004402000039001b00000006001d001a00000005001d001900000007001d1eb102310000040f00000019050000290000001b030000290000001c02000029000007b4011001970000001a0400002900000000001404350000000001050433000000020110008c00000add0000813d000007bf0100004100000000001004350000003201000039000000040010043f000000240200003900000000010000191eb1024d0000040f0000000001000416000000000110004c00000a2f0000c13d0000000003000031000000040130008a000007b202000041000000800410008c00000000040000190000000004024019000007b201100197000000000510004c000000000200a019000007b20110009c00000000010400190000000001026019000000000110004c00000a2f0000c13d00000002010003670000000402100370000000000202043b001c00000002001d000007b40220009c00000a2f0000213d0000002402100370000000000202043b001b00000002001d000007b40220009c00000a2f0000213d0000004402100370000000000202043b001a00000002001d000007b40220009c00000a2f0000213d0000006402100370000000000402043b000007b30240009c00000a2f0000213d0000002302400039000007b205000041000000000632004b00000000060000190000000006058019000007b207300197000007b202200197000000000872004b0000000005008019000000000272013f000007b20220009c00000000020600190000000002056019000000000220004c00000a2f0000c13d0000000402400039000000000121034f000000000201043b00000024014000391eb1195d0000040f00000000040100190000001c010000290000001b020000290000001a030000291eb11bd40000040f000007e402100197000000400100043d0000000000210435000000200200003900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000000310004c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d1eb11c460000040f000007e402100197000000400100043d0000000000210435000000200200003900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000000310004c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d000000400100043d00000001020000390000000000210435000000200200003900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000000310004c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d000000400100043d001a00000001001d000007e201000041000000000010043900000004005004430000002400600443000080050100003900000044020000391eb102310000040f000007b4021001970000001a010000290000000000210435000000200200003900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000e00310008c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d00000002010003670000000402100370000000000202043b001c00000002001d000007b40220009c00000a2f0000213d0000002402100370000000000202043b001b00000002001d000007b40220009c00000a2f0000213d0000006402100370000000000202043b001a00000002001d0000004402100370000000000202043b001900000002001d0000008401100370000000000101043b001800000001001d000000ff0110008c00000a2f0000213d000007f20100004100000000001004390000800b0100003900000004020000391eb102310000040f0000001a04000029000000000141004b000008050000213d0000001c010000290000001b0200002900000019030000291eb11a480000040f0000000202000367000000a403200370000000000403043b000000c402200370000000000202043b000000400300043d00000060053000390000000000250435000000400230003900000000004204350000002002300039000000180400002900000000004204350000000000130435000000220500002900000000005504350000000001000414000000010200003900000080040000390000002006000039001a00000005001d1eb101e30000040f000000000110004c00000c2a0000c13d00000001040000310000001a0100002900000000030100190000000001140019000000000141004b00000a2f0000213d000000400100043d0000001f0240018f00000003033003670000000504400272000007970000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b0000078f0000413d000000000520004c000007a60000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f000000000024043500000001020000311eb1024d0000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000400310008c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d1eb118d10000040f001c00000001001d1eb118da0000040f0000001c02000029000007b40220019700000000002004350000000202000039000000200020043f001b00000001001d0000004002000039001c00000002001d00000000010000191eb1021a0000040f0000001b02000029000007b4022001970000000000200435000000200010043f00000000010000190000001c020000291eb1021a0000040f000000000201041a000000400100043d0000000000210435000000200200003900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d0000000002000031000000040120008a000007b203000041000000a00410008c00000000040000190000000004034019000007b201100197000000000510004c000000000300a019000007b20110009c00000000010400190000000001036019000000000110004c00000a2f0000c13d00000002010003670000000403100370000000000303043b001c00000003001d000007b40330009c00000a2f0000213d0000002403100370000000000303043b001b00000003001d000007b40330009c00000a2f0000213d0000006403100370000000000303043b001a00000003001d0000004403100370000000000303043b001900000003001d0000008401100370000000000101043b000007b30310009c00000a2f0000213d00000004011000391eb118b50000040f000007f2030000410000000000300439001800000001001d001700000002001d0000800b0100003900000004020000391eb102310000040f0000001a04000029000000000141004b00000b7e0000a13d000000400100043d000007ff02000041000000000021043500000004020000391eb1024d0000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000000310004c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d0000000b01000039000000000201041a000000400100043d0000000000210435000000200200003900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000000310004c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d0000000901000039000000000201041a0000000a01000039000000000301041a000000400100043d000000200410003900000000003404350000000000210435000000400200003900000000030000191eb102430000040f001a00000003001d0000000001000416000000000110004c00000a2f0000c13d001c00000005001d0000000001000031001b00000006001d1eb118e30000040f000000400700043d000007bb0870009c000008890000a13d000007bf0100004100000000001004350000004101000039000000040010043f000000240200003900000000010000191eb1024d0000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000000310004c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d0000000901000039000000000201041a000000400100043d0000000000210435000000200200003900000000030000191eb102430000040f0000000001000416000000000110004c00000a2f0000c13d000000040100008a0000000001100031000007b202000041000000000310004c00000000030000190000000003024019000007b201100197000000000410004c000000000200a019000007b20110009c00000000010300190000000001026019000000000110004c00000a2f0000c13d000000400100043d001b00000001001d000007e2010000410000000000100439000000040050044300000060010000390000002400100443000080050100003900000044020000391eb102310000040f000007b4021001970000001b010000290000000000210435000000200200003900000000030000191eb102430000040f000f00000003001d000c00000004001d000a00000006001d000b00000005001d0000004003700039000000400030043f0000000000070435000000200370003900000022040000290000000000430435001800000001001d001900000002001d1eb11b010000040f1eb11a9f0000040f000000180300002900000019020000290000000002230019001900000001001d00000000010300191eb11bb30000040f0000001905000029000001c004500039000000ff0330018f000d00000004001d00000000003404350000006003500039000007b401100197001000000003001d0000000000130435000007b4012001970000002002500039000e00000002001d00000000001204351eb11d440000040f0000001903000029000000a004300039001600000004001d00000000002404350000008002300039001700000002001d000000000012043500000022010000290000001a0200002900000000002104350000000102000039000900000002001d000000200020043f00000040020000391eb1021a0000040f000000000101041a0000001902000029000000c002200039001300000002001d00000000001204350000002201000029000000000101041a001400000001001d000007ea0100004100000017020000290000000002020433001200000002001d00000016020000290000000002020433001100000002001d000000400200043d001800000002001d0000000000120435000007e2010000410000000002000414001500000002001d00000000001004390000001c0100002900000004001004430000002001000039000800000001001d0000002400100443000080050100003900000044020000391eb102310000040f000007b402100197000000040120008c000009070000613d000000040400003900000020060000390000001501000029000000180300002900000000050300191eb101e30000040f000000000110004c000009070000c13d000000220300002900000001040000310000000001340019000000000141004b00000a2f0000213d000000400100043d0000001f0240018f00000003033003670000000504400272000008f60000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000008ee0000413d000000000520004c000009050000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f000000000024043500000001020000311eb1024d0000040f00000022050000290000000101000031000000200210008c000000200200003900000000020140190000001f02200039000000600320018f00000018060000290000000002630019000000000332004b00000000030000190000000103004039000007b30420009c0000000004060019000008490000213d0000000103300190000008490000c13d000000400020043f000000200110008c0000091e0000413d0000000003040433000007b40130009c00000b590000a13d000000000105001900000000020500191eb1024d0000040f000007e50310009c00000a3f0000413d000007bf0100004100000000001204350000001101000039000000040010043f000000220100002900000024020000391eb1024d0000040f0000001501000029000000000110004c00000a530000c13d0000001601000029000000000110004c000009360000613d000000010100008a000000160400002900000000414100d90000001904000029000000000141004b000010830000413d0000001901000029000000160400002900000000411400a9000007e80410009c000010830000213d00000019040000290000001705000029000000000445004b000010830000413d000007e60430009c00000a670000213d000000190500002900000017060000290000000002560049000007e6040000410000000003340049000000000456004b0000094c0000613d000000010400008a00000000542400d9000000000434004b000010830000413d00000000322300aa0000108e0000613d00000c260000013d000001c002100039000000400020043f0000002003100039001600000003001d0000002202000029000000000023043500000000002104350000006002100039000000220300002900000000003204350000004002100039001700000002001d0000000000320435000000a003100039001400000003001d000000220200002900000000002304350000008003100039001200000003001d0000000000230435000000e003100039001500000003001d00000022020000290000000000230435000000c003100039001300000003001d00000000002304350000012002100039000000220300002900000000003204350000010002100039000000000032043500000160021000390000002203000029000000000032043500000140021000390000000000320435000001a0021000390000006004000039001100000004001d000000220300002900000000004204350000018001100039001000000001001d00000000003104350000001901000029000000180200002900000000021200191eb11bb30000040f000000ff0330018f00000010040000290000000000340435000007b40220019700000016030000290000000000230435000007b401100197000000170200002900000000001204350000000a01000039000000000101041a0000000902000039000000000202041a00000012030000290000000000230435000000140200002900000000001204351eb11d440000040f00000015030000290000000000230435000000130200002900000000001204350000001a010000291eb11b160000040f00000017020000290000000002020433001a00000002001d000007e20200004100000000002004390000001c02000029000000040020044300000011020000290000002400200443001900000001001d000080050100003900000044020000391eb102310000040f000007b4031001970000001a02000029000007b402200197000000000232004b001800000001001d00000a6e0000c13d000007e20100004100000000001004390000001c0100002900000004001004430000001b010000290000002400100443000080050100003900000044020000391eb102310000040f0000000003010019000000400400043d000007e30140009c000008490000213d0000002001400039000000400010043f000000220100002900000000001404350000001d01000029001a00000001001d00000019010000290000001802000029001c00000003001d1eb11bd40000040f0000001c02000029000007b4022001970000001a0400002900000060034000390000000000230435000007e4021001970000016001400039000000000021043500000080034000390000000002030433000000c004400039001c00000004001d0000000004040433000000000524004b000010830000413d00000000022400490000001a050000290000010004500039001b00000004001d0000000000240435000000a004500039000000000404043300000000030304330000000001010433000007e4011001971eb11e150000040f0000001a040000290000014003400039000000000023043500000120024000390000000000120435000000e0034000390000000004030433000000000514004b000010830000413d000000000114004900000000001304350000001a010000290000002001100039000000000101043300000000020204330000001b030000290000000003030433000000400400043d00000000003404350000006003400039000000220500002900000000002304350000004002400039000000000052043500000020024000390000000000520435000007ae020000410000000003000414000007ae0530009c0000000003028019000007ae0540009c00000000020440190000004002200210000000c003300210000000000223019f000007b406100197000007f7012001c70000800d020000390000000303000039000007f80400004100000000050004111eb11ea70000040f000000010120019000000ace0000c13d00000a2f0000013d00000022030000290000001a020000290000000000230435000007f50400004100000020020000390000000005370019000000000613004b0000044c0000813d0000002005500039000000000604041a00000000006504350000002003300039000000010440003900000a0e0000013d000f0000000d001d00100000000c001d000a0000000b001d000b0000000a001d001300000009001d001900000008001d000c00000007001d000d00000006001d000e00000005001d001100000004001d001200000003001d00000002020003670000001801000029000000000112034f000000000101043b000007b40310009c0000001c0400002900000a2f0000213d00000018030000290000002003300039000000000232034f000000000202043b000000ff0320008c00000afa0000a13d000000000100001900000000020000191eb1024d0000040f00000022020000290000001a03000029000000000032043500000801030000410000002004700039000000000512004b000006020000813d0000000005240019000000000603041a00000000006504350000002002200039000000010330003900000a370000013d000000010200008a000000190300002900000000343200d9000007e6030000410000000003130049000000000534004b000010830000413d000000000114004b000010830000413d000000190100002900000000311300a90000001503000029000000000330004c00000c390000c13d000000000310004c00000c6b0000c13d0000001703000029000007e80330009c000010830000213d00000c720000013d0000001701000029000000000110004c00000a5c0000613d000000010100008a000000170400002900000000414100d90000001904000029000000000141004b000010830000413d0000001901000029000000170400002900000000411400a9000007e80410009c000010830000213d00000019040000290000001605000029000000000445004b000010830000413d000007e50430009c00000c190000413d000007bf0100004100000000001204350000001101000039000000040010043f000000220100002900000024020000391eb1024d0000040f000000400400043d000007e30140009c0000001b02000029000008490000213d0000002001400039000000400010043f000000220100002900000000001404350000001d01000029001a00000001001d000007e20100004100000000001004390000001c010000290000000400100443000000240020044300008005010000390000004402000039001c00000003001d001b00000004001d1eb102310000040f0000000002010019000000190100002900000018030000290000001b040000291eb11bd40000040f0000001a0400002900000060024000390000001c030000290000000000320435000007e40210019700000160014000390000000000210435000000e003400039000000a00440003900000000020404330000000003030433000000000523004b000010830000413d00000000022300490000001a050000290000010003500039001b00000003001d00000000002304350000008003500039000000000303043300000000040404330000000001010433000007e4011001971eb11de50000040f0000001a040000290000014003400039000000000023043500000120024000390000000000120435000000c003400039001c00000003001d0000000003030433000000000413004b000010830000413d00000000011300490000001c0300002900000000001304350000001a01000029000000200110003900000000010104330000001b0300002900000000030304330000000002020433000000400400043d000000400540003900000022060000290000000000250435000000200240003900000000003204350000000000640435000000600240003900000022030000290000000000320435000007ae020000410000000003000414000007ae0530009c0000000003028019000007ae0540009c00000000020440190000004002200210000000c003300210000000000223019f000007b406100197000007f7012001c70000800d020000390000000303000039000007f80400004100000000050004111eb11ea70000040f000000010120019000000a2f0000613d0000001c010000290000000001010433000007f90110009c00000ad80000213d0000001a01000029000000e001100039001b00000001001d0000000001010433000007f90110009c00000d0c0000a13d000000400100043d000007fb02000041000000000021043500000004020000391eb1024d0000040f000007e201000041000000000010043900000004002004430000002400300443000080050100003900000044020000391eb102310000040f0000001a06000029000007b4011001970000001903000029000000400230003900000000001204350000002002000039000000400100043d000000000021043500000000020304330000002003100039000000000023043500000040031000390000002204000029000000000524004b00000b560000813d0000000005060433000007b405500197000000000053043500000001044000390000002006600039000000200330003900000af10000013d00000010030000290000000000230435000000110200002900000000001204351eb11d440000040f000000130300002900000000002304350000001902000029000000000012043500000022010000290000001a0200002900000000002104350000000102000039000400000002001d000000200020043f00000040020000391eb1021a0000040f000000000101041a0000001202000029000000000012043500000013010000290000000001010433000700000001001d00000019010000290000000001010433000600000001001d0000002201000029000000000101041a000800000001001d000007ea01000041000000400200043d001800000002001d0000000000120435000007e2010000410000000002000414000900000002001d00000000001004390000001c0100002900000004001004430000002001000039000500000001001d0000002400100443000080050100003900000044020000391eb102310000040f000007b402100197000000040120008c00000b640000613d000000040400003900000020060000390000000901000029000000180300002900000000050300191eb101e30000040f000000000110004c00000b640000c13d000000220300002900000001040000310000000001340019000000000141004b00000a2f0000213d000000400100043d0000001f0240018f0000000303300367000000050440027200000b450000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b00000b3d0000413d000000000520004c00000b540000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f000000000024043500000001020000311eb1024d0000040f000000000213004900000000030000191eb102430000040f0000000b01000039001500000001001d000000000201041a000000000120004c00000e6a0000613d000700000002001d000000000130004c00000c3f0000c13d0000001501000029000000000051041b00000e6a0000013d00000022010000290000000105000031000000200250008c000000200200003900000000020540190000001f02200039000000600320018f00000018060000290000000002630019000000000332004b00000000030000190000000103004039000007b30420009c0000000004060019000008490000213d0000000103300190000008490000c13d000000400020043f000000200250008c00000b7c0000413d0000000002040433001800000002001d000007b40220009c00000cfe0000a13d00000000020100191eb1024d0000040f0000001c010000290000001b0200002900000019030000291eb11a480000040f001a00000001001d0000000003000031000000180100002900000017020000291eb1195d0000040f00000000030100190000000001030433000000410110008c000000000100001900000d3c0000c13d00000040013000390000000002010433000007fc0120009c000000000100001900000d3c0000213d00000060013000390000000001010433001800000003001d00000020033000390000000004030433000000400300043d0000006005300039000000000025043500000040023000390000000000420435000000f801100270000000200230003900000000001204350000001a0100002900000000001304350000000000000435000000000100041400000001020000390000008004000039000000200600003900000000050000191eb101e30000040f000000000110004c00000d390000c13d0000000302000367000000400100043d00000001040000310000001f0340018f000000050440027200000bb80000613d000000000500001900000005065002100000000007610019000000000662034f000000000606043b00000000006704350000000105500039000000000645004b00000bb00000413d000000000530004c00000bc70000613d0000000504400210000000000242034f00000000044100190000000303300210000000000504043300000000053501cf000000000535022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000252019f000000000024043500000001020000311eb1024d0000040f000008020350009c0000001b03000029000008490000813d000a00000004001d0000001804000029000001c004400039000c00000004001d000000400010043f0000000000250435000007e201000041000900000001001d00000000001004390000001c01000029000000040010044300000024003004430000800501000039000800000001001d0000004402000039001b00000002001d000b00000005001d1eb102310000040f000000090200002900000000002004390000001c02000029000000040020044300000060020000390000002400200443000900000001001d00000008010000290000001b020000291eb102310000040f0000000003010019000000160100002900000009020000290000000b040000291eb11bd40000040f0000000c05000029000007e4011001970000000000150435000000120100002900000000030104330000000d0100002900000000040104330000000e010000290000000002010433000c00000005001d0000000001050433000007e40110019700000019050000290000000005050433000000000650004c0000000006000019000000000700001900000c980000613d0000000a07000029000000000674004b00000c8e0000813d000000000640004c00000c080000613d000000010600008a00000000764600d9000000000656004b000010830000413d000000000630004c0000108e0000613d00000000544500a900000000433400d9000000000432004b000010830000413d0000000002320049000000000310004c00000c150000613d000000010300008a00000000431300d9000000000323004b000010830000413d00000000211200a9000008031610012a000000000700001900000c980000013d000000190500002900000016060000290000000002560049000007e6040000410000000003340049000000000456004b00000c240000613d000000010400008a00000000542400d9000000000434004b000010830000413d00000000322300aa0000108e0000613d000007e6311000d100000000212100d90000000102100039000003710000013d0000001a010000290000000001010433000007b4031001970000001c01000029000000000213004b00000d820000c13d000000000230004c00000d820000613d0000001b0200002900000019030000291eb11a1a0000040f000000400100043d0000001a0200002900000000030000191eb102430000040f000000000310004c00000c7c0000c13d0000001603000029000007e80330009c000010830000213d00000c830000013d00000012010000290000001102000029001800000003001d001100000005001d1eb11e450000040f00000018030000290000000702000029000000000421004b00000e6a0000a13d000500000001001d0000000001210049000600000001001d1eb11c460000040f000007e401100197001200000001001d0000001401000029000000000110004c00000c570000613d000000010100008a000000140200002900000000212100d90000000602000029000000000121004b000010830000413d0000001401000029000000060200002900000000211200aa00000c600000613d000000010200008a00000000321200d90000001203000029000000000232004b000010830000413d0000001202000029000007e50220009c00000e440000413d000007bf01000041000000110200002900000000001204350000001101000039000000040010043f000000220100002900000024020000391eb1024d0000040f00000000431200d90000001604000029000000000343004b000010830000413d0000001703000029000007e70330009c000010830000813d000000000321013f0000001702000029000007e6422000d1000000000332004b000010830000213d000000000212001a0000001603000029001700000003001d0000108e0000613d00000c8a0000013d00000000431200d90000001704000029000000000343004b000010830000413d0000001603000029000007e70330009c000010830000813d000000000321013f0000001602000029000007e6422000d1000000000332004b000010830000213d000000000212001a0000108e0000613d000000170300002900000000311300a900000000122100d9000002d90000013d0000000002740049000000000310004c00000c950000613d000000010300008a00000000431300d9000000000323004b000010830000413d00000000211200a9000008031710012a000000000600001900000018010000290000012002100039000b00000002001d00000000007204350000010001100039000a00000001001d0000000000610435000000010100008a001b00000001001d000000000216013f00000019010000290000000001010433000000000221004b000010830000213d0000000001610019000000190200002900000000001204350000000b0100002900000000010104330000001b02000029000000000321013f00000012020000290000000002020433000000000332004b000010830000213d000000000221001900000012010000290000000000210435000000190100002900000000010104331eb11e450000040f00000018020000290000016002200039000600000002001d000500000001001d00000000001204350000002201000029000000000101041a000700000001001d000007ea01000041000000400200043d000900000002001d0000000000120435000007e2010000410000000002000414000800000002001d00000000001004390000001c0100002900000004001004430000002001000039000400000001001d0000002400100443000080050100003900000044020000391eb102310000040f000007b402100197000000040120008c00000d870000613d000000040400003900000020060000390000000801000029000000090300002900000000050300191eb101e30000040f000000000110004c00000d870000c13d000000220300002900000001040000310000000001340019000000000141004b00000a2f0000213d000000400100043d0000001f0240018f0000000303300367000000050440027200000ced0000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b00000ce50000413d000000000520004c00000cfc0000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f000000000024043500000001020000311eb1024d0000040f000300000001001d0000000b01000039000200000001001d000000000101041a000900000001001d000000000110004c000010640000613d0000001801000029000000000110004c00000f9d0000c13d00000002010000290000000302000029000000000021041b000010640000013d0000001a010000290000006005100039000000200610003900000180021000390000012001100039001700000001001d0000000003010433001500000002001d0000000004020433001400000006001d0000000002060433001600000005001d0000000001050433000007b401100197000007b402200197000000ff0440018f1eb11cc10000040f000007b4010000410000002101100180001800000001001d00000dd20000c13d0000001b0100002900000000020104330000001c0100002900000000010104331eb11ca50000040f00000016010000290000000001010433000007b4021001970000001e010000290000000000210435000000170200002900000000020204330000002003100039000000000023043500000001020000390000000803000039000000000023041b000000400200043d001c00000002001d1eb119550000040f00000040020000390000001c0100002900000000030000191eb102430000040f0000000001000433000007b40110019700000018030000290000001c02000029000000000221004b00000d490000c13d000000000110004c00000d490000613d0000001c010000290000001b0200002900000019030000291eb11a1a0000040f0000002202000029000000400100043d00000000030000191eb102430000040f000000400400043d001800000004001d0000004401400039000000400200003900000000002104350000002002400039000007fd01000041001700000002001d000000000012043500000024014000390000001a020000290000000000210435000000640240003900000000010300191eb119400000040f00000018030000290000000001310049000000200210008a00000000002304350000001f01100039000000200200008a001a00000002001d000000000221016f00000000040300190000000001320019000000000221004b00000000020000190000000102004039000007b30310009c000008490000213d0000000102200190000008490000c13d000000400010043f000000010100003900000000020004140000001c03000029000000040330008c00000d760000613d000000000404043300000000010200190000001c020000290000001703000029000000000500001900000000060000191eb101e30000040f0000006002000039000000010300003200000da30000c13d000000000110004c00000d820000613d0000000001020433000000200110008c00000d820000c13d00000020012000390000000001010433000007fd0110009c00000d410000613d000000400100043d000007fe02000041000000000021043500000004020000391eb1024d0000040f0000002201000029001c00000001001d0000000101000031000000200210008c000000200200003900000000020140190000001f02200039000000600320018f00000009020000290000000002230019000000000332004b00000000030000190000000103004039000007b30420009c000008490000213d0000000103300190000008490000c13d000000400020043f000000200110008c00000da00000413d00000009010000290000000001010433000900000001001d000007b40110009c00000fc90000a13d0000001c0100002900000000020100191eb1024d0000040f000007b30230009c000008490000213d0000003f023000390000001a04000029000000000442016f000000400200043d0000000004420019000000000524004b00000000050000190000000105004039000007b30640009c000008490000213d0000000105500190000008490000c13d000000400040043f00000000003204350000002003200039000000030400036700000001060000310000001f0560018f000000050660027200000dc20000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b00000dba0000413d000000000750004c00000d790000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000d790000013d0000001901000029000007b4011001970000001a02000029001a00000002001d000000000012043500000000030000310000001f0200002900000020010000291eb1195d0000040f0000001a02000029000001a002200039001300000002001d0000000000120435000007eb01000041000000000010043900000018010000290000000400100443000080020100003900000024020000391eb102310000040f000000000110004c000005000000613d000000400400043d000007fa0100004100000000001404350000000401400039000000200200003900000000002104350000001a030000290000000001030433000007b4011001970000002402400039000000000012043500000014010000290000000001010433000007b4011001970000004402400039000000000012043500000040013000390000000001010433000007b4011001970000006402400039000000000012043500000016010000290000000001010433000007b4011001970000008402400039000000000012043500000080013000390000000001010433000000a4024000390000000000120435000000a0013000390000000001010433000000c40240003900000000001204350000001c010000290000000001010433000000e40240003900000000001204350000001b0100002900000000010104330000010402400039000000000012043500000100013000390000000001010433000001240240003900000000001204350000001701000029000000000101043300000144024000390000000000120435000001400130003900000000010104330000016402400039000000000012043500000160013000390000000001010433000007e4011001970000018402400039000000000012043500000015010000290000000001010433000000ff0110018f000001a402400039000000000012043500000013010000290000000001010433000001c402400039000001c00300003900000000003204350000000002000414001500000002001d0000002202000029001a00000002001d001900000004001d000001e4024000391eb119400000040f0000001802000029000000040220008c000010390000613d000000190200002900000000042100490000001a01000029000000000110004c00000fd60000c13d000000150100002900000018020000290000001903000029000000000503001900000000060000191eb101ac0000040f0000000002010019000010120000013d000007e6030000410000001202000029000007e60220009c000000000200001900000e550000613d00000012020000290000000002230049000000010300008a00000000432300d90000000504000029000000000343004b000010830000413d000000050300002900000000322300a90000001203000029000000000330004c00000e5b0000613d000000010300008a000000120400002900000000434300d90000000704000029000000000343004b000010830000413d0000001203000029000000070400002900000000433400a9000000010400008a000700000004001d000000000443013f000000000442004b000010830000213d000000000223001a0000108e0000613d000000120300002900000000313100a9000000000312004b0000001803000029000012840000a13d001800000003001d0000001901000029000000e0021000390000001401000029001200000002001d00000000001204350000001701000029000000000101043300000013020000290000000002020433000000000320004c00000e7a0000613d000000010300008a00000000432300d9000000000313004b000010830000413d0000001404000029000000000340004c0000108e0000613d00000000212100a900000000214100d900000019020000290000010002200039001400000002001d00000000001204350000001601000029000000000101043300000013020000290000000002020433000000000320004c00000e8d0000613d000000010300008a00000000432300d9000000000313004b000010830000413d00000012030000290000000003030433000000000430004c0000108e0000613d00000000212100a900000000213100d900000019020000290000012002200039000600000002001d0000000000120435000000130100002900000000020104330000001a010000291eb11b810000040f0000000f010000291eb11b160000040f00000010020000290000000002020433001a00000002001d000007e202000041001100000002001d00000000002004390000001c0200002900000004002004430000001b020000290000002400200443000700000001001d0000800501000039001b00000001001d0000004402000039000f00000002001d1eb102310000040f000000110200002900000000002004390000001c02000029000000040020044300000060020000390000002400200443001c00000001001d0000001b010000290000000f020000291eb102310000040f000000400400043d001b00000001001d0000001c01000029000007b4021001970000001a01000029000007b401100197000f00000002001d000000000121004b00000019020000290000004001200039001100000001001d0000014001200039000300000001001d0000016001200039000400000001001d0000018001200039000500000001001d000001a001200039001a00000001001d000000200140003900000f0f0000c13d000007e30240009c000008490000213d000000400010043f0000002201000029000000000014043500000007010000290000001b020000290000001c030000291eb11bd40000040f0000001b02000029000007b40220019700000011030000290000000000230435000007e4011001970000001a0200002900000000001204350000001702000029000000000302043300000014020000290000000002020433000000000423004b000010830000413d0000000604000029000000000404043300000016050000290000000005050433000000000645004b000010830000413d000000000445004900000000032300491eb11e150000040f0000000503000029000000000023043500000004020000290000000000120435000000010200008a000000000321013f00000006020000290000000002020433000000000332004b000010830000213d0000000003120019000000060100002900000000003104350000000d0100002900000000010104330000000e020000290000000002020433000007b402200197000000ff0410018f0000001c010000291eb11cc10000040f000000060100002900000000010104330000000302000029000000000012043500000022020000290000001403000029000000000023043500000016020000290000000002020433000000000312004b000010830000413d00000000011200490000001602000029000000000012043500000f500000013d000007e30240009c000008490000213d000000400010043f0000002201000029000000000014043500000007010000290000001c020000290000001b030000291eb11bd40000040f00000011020000290000000f030000290000000000320435000007e4011001970000001a0200002900000000001204350000001402000029000000000302043300000017020000290000000004020433000000000234004b000010830000413d0000000602000029000000000202043300000016050000290000000005050433000000000625004b000010830000413d000000000334004900000000042500491eb11de50000040f0000000503000029000000000023043500000004020000290000000000120435000000010200008a000000000321013f00000014020000290000000002020433000000000332004b000010830000213d0000000003120019000000140100002900000000003104350000000d0100002900000000010104330000000e020000290000000002020433000007b402200197000000ff0410018f0000001b010000291eb11cc10000040f000000140100002900000000010104330000000302000029000000000012043500000022020000290000000603000029000000000023043500000017020000290000000002020433000000000312004b000010830000413d0000000001120049000000170200002900000000001204350000000c01000029000007b401100198001c00000001001d0000120b0000c13d00000016010000290000000002010433000000170100002900000000010104331eb11ca50000040f0000001801000029000000000110004c00000f630000613d00000016010000290000000002010433000000170100002900000000010104331eb11e450000040f0000001502000029000000000012041b000000400100043d001c00000001001d000007bb0110009c000008490000213d00000010010000290000000001010433000000030200002900000000020204330000001c040000290000004003400039000000400030043f00000020034000390000000000230435000007b40110019700000000001404350000000e010000290000000002010433000000140100002900000000010104330000000603000029000000000303043300000013040000290000000004040433000000400500043d00000040065000390000000000460435000000200450003900000000003404350000000000150435000007ae010000410000000003000414000007ae0430009c0000000003018019000007ae0450009c00000000010540190000004001100210000000c003300210000000000113019f000007f0011001c7000007b4062001970000800d020000390000000303000039000007f10400004100000000050004111eb11ea70000040f000000010120019000000a2f0000613d00000008010000390000000902000029000000000021041b000000400200043d001b00000002001d0000001c010000291eb119550000040f00000040020000390000001b0100002900000000030000191eb102430000040f000000060100002900000007020000291eb11e450000040f00000000020100190000000901000029000700000002001d000000000112004b000010640000a13d000000090100002900000007020000290000000001120049000100000001001d1eb11c460000040f000007e401100197000600000001001d0000000801000029000000000110004c00000fb50000613d000000010100008a000000080200002900000000212100d90000000102000029000000000121004b000010830000413d0000000801000029000000010200002900000000211200aa00000fbe0000613d000000010200008a00000000321200d90000000603000029000000000232004b000010830000413d0000000602000029000007e50220009c0000103f0000413d000007bf01000041000000030200002900000000001204350000001101000039000000040010043f000000220100002900000024020000391eb1024d0000040f0000000b01000039000300000001001d000000000101041a000800000001001d000000000110004c000014530000613d0000000901000029000000000110004c0000115d0000c13d0000001c010000290000000302000029000000000012041b000014530000013d000007ae010000410000001903000029000007ae0230009c000000000201001900000000020340190000004002200210000007ae0340009c000000000301001900000000030440190000006003300210000000000223019f0000001504000029000007ae0340009c0000000001044019000000c001100210000000000112019f000007c0011001c700008009020000390000001a03000029000000180400002900000000050000191eb11ea70000040f000000190900002900000000030100190000006003300270000007ae033001970000001a05000029000000000453004b00000000050340190000001f0450018f000000050550027200000fff0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000ff70000413d000000000640004c0000100f0000613d0000000505500210000000000651034f000000190700002900000000055700190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000000010220018f000100000003001f0003000000010355000000000120004c000010390000c13d00000001040000310000001a010000290000000001140019000000000141004b00000a2f0000213d000000400100043d0000001f0240018f0000001a0300002900000003033003670000000504400272000010280000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000010200000413d000000000520004c000010370000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f000000000024043500000001020000311eb1024d0000040f0000001901000029000007b30110009c000008490000213d0000001901000029000000400010043f00000d210000013d000007e6030000410000000602000029000007e60220009c0000000002000019000010500000613d00000006020000290000000002230049000000010300008a00000000432300d90000000704000029000000000343004b000010830000413d000000070300002900000000322300a90000000603000029000000000330004c000010560000613d000000010300008a000000060400002900000000434300d90000000904000029000000000343004b000010830000413d0000000603000029000000090400002900000000433400a9000000010400008a000900000004001d000000000443013f000000000442004b000010830000213d000000000223001a0000108e0000613d000000060300002900000000313100a9000000000312004b000013980000a13d0000000f01000029000000080200002900000000002104350000001901000029000000000101043300000012020000290000000002020433000000000320004c000010710000613d000000010300008a00000000432300d9000000000313004b000010830000413d0000000803000029000000000330004c0000108e0000613d00000000212100a9000000080200002900000000212100d90000000e0200002900000000001204350000001301000029000000000101043300000012020000290000000002020433000000000320004c0000108a0000613d000000010300008a00000000432300d9000000000313004b0000108a0000813d000007bf0100004100000000001004350000001101000039000000040010043f000000240200003900000000010000191eb1024d0000040f0000000f030000290000000003030433000000000430004c000010950000c13d000007bf0100004100000000001004350000001201000039000000040010043f000000240200003900000000010000191eb1024d0000040f00000000212100a900000000213100d90000000d020000290000000000120435000000120100002900000000020104330000001a010000291eb11b810000040f000007e202000041001a00000002001d0000000e010000290000000001010433000700000001001d00000011010000290000000001010433000600000001001d00000000002004390000001c0100002900000004001004430000000c0100002900000024001004430000800501000039000900000001001d0000004402000039000800000002001d1eb102310000040f000000100200002900000000030204330000000602000029000007b402200197000000ff0430018f00000007030000291eb11cc10000040f00000011010000290000000001010433000600000001001d0000000d010000290000000001010433000700000001001d0000001a0100002900000000001004390000001c0100002900000004001004430000001b010000290000002400100443000000090100002900000008020000291eb102310000040f000000100200002900000000030204330000000602000029000007b402200197000000ff0430018f00000007030000291eb11cc10000040f0000000e01000029000000000101043300000019030000290000000002030433000000000112004900000000001304350000000d01000029000000000101043300000013030000290000000002030433000000000212004900000000002304350000001701000029000007b401100198001a00000001001d000011000000c13d000000190100002900000000010104331eb11ca50000040f0000001801000029000000000110004c000010e90000613d00000013010000290000000002010433000000190100002900000000010104331eb11e450000040f0000000202000029000000000012041b000000400500043d000007ef0150009c000008490000213d0000006001500039000000400010043f0000000201000039000000000015043500000022010000290000000002010019000000400600043d0000003f0320008c00000040036000390000002007600039000011880000213d000007bb0460009c000008490000213d000000400030043f00000000001704350000000000160435000000200220003900000000035200190000000000630435000010f20000013d00000014010000291eb11b160000040f000007b4011001970000000b0200002900000000001204350000000003000031000000160100002900000015020000291eb1195d0000040f0000000a020000290000000000120435000007eb0100004100000000001004390000001a010000290000000400100443000080020100003900000024020000391eb102310000040f0000000a0a0000290000000b09000029000000000110004c000000120300002900000011040000290000000e050000290000000d0600002900000019070000290000001308000029000000100b0000290000000f0c000029000005000000613d000000400d00043d000007ee0100004100000000001d04350000000401d00039000000050200002900000000002104350000000001090433000007b4011001970000002402d0003900000000001204350000000001040433000007b4011001970000004402d00039000000000012043500000000010704330000006402d00039000000000012043500000000010804330000008402d0003900000000001204350000000001030433000000a402d00039000000000012043500000000010c0433000000c402d0003900000000001204350000000001050433000000e402d00039000000000012043500000000010604330000010402d00039000000000012043500000000010b0433000000ff0110018f0000012402d00039000000000012043500000000010a04330000014402d00039000001400300003900000000003204350000000002000414001500000002001d0000002202000029001600000002001d00170000000d001d0000016402d000391eb119400000040f0000001a02000029000000040220008c0000131b0000613d000000170200002900000000042100490000001601000029000000000110004c000012b80000c13d00000015010000290000001a020000290000001703000029000000000503001900000000060000191eb101ac0000040f0000000002010019000012f40000013d0000000502000029000000000120004c0000001c0100002900000000020160190000000801000029000500000002001d000000000112004b000014530000a13d000000080100002900000005020000290000000001120049000100000001001d1eb11c460000040f000007e401100197000200000001001d0000000701000029000000000110004c000011750000613d0000001b01000029000000070200002900000000212100d90000000102000029000000000121004b000010830000413d0000000701000029000000010200002900000000211200aa0000117e0000613d0000001b0200002900000000321200d90000000203000029000000000232004b000010830000413d0000000202000029000007e50220009c000013230000413d000007bf020000410000001c0100002900000000002104350000001102000039000000040020043f00000024020000391eb1024d0000040f000007bb0160009c000008490000213d0000000e010000290000000001010433001900000001001d000000400030043f000007e20100004100000000001004390000001c0100002900000004001004430000000c01000029000000240010044300008005010000390000004402000039001a00000005001d001800000006001d001700000007001d1eb102310000040f0000001b02000029000000190300002900000017040000290000000000340435000007b4011001970000001803000029000000000403001900000000001304350000001a010000290000000001010433000000000110004c0000069e0000613d0000001a03000029000000200130003900000000004104350000000001030433000000000110004c0000069e0000613d000000400100043d001900000001001d000007bb0110009c0000001a03000029000008490000213d0000000d010000290000000001010433001800000001001d00000019010000290000004001100039000000400010043f000007e20100004100000000001004390000001c0100002900000004001004430000002400200443000080050100003900000044020000391eb102310000040f0000001903000029000000200230003900000018040000290000000000420435000007b40110019700000000001304350000001a010000290000000001010433000000020110008c0000069e0000413d0000001a020000290000004001200039000000190300002900000000003104350000000001020433000000020110008c0000069e0000413d000000110100002900000000020104330000000e0100002900000000010104330000000d03000029000000000303043300000012040000290000000004040433000000400500043d00000040065000390000000000460435000000200450003900000000003404350000000000150435000007ae010000410000000003000414000007ae0430009c0000000003018019000007ae0450009c00000000010540190000004001100210000000c003300210000000000113019f000007f0011001c7000007b4062001970000800d020000390000000303000039000007f10400004100000000050004111eb11ea70000040f000000010120019000000a2f0000613d00000008010000390000000402000029000000000021041b000000400100043d000000050200002900000000002104350000001a08000029000000000208043300000020031000390000000000230435000000220300002900000000040100190000004005400039000000000623004b0000166e0000813d000000200880003900000000060804330000000007060433000007b4077001970000000000750435000000600440003900000020066000390000000006060433000000000064043500000001033000390000000004050019000011fc0000013d0000000701000029000007b4011001970000001902000029000000000012043500000000030000310000000b010000290000000a020000291eb1195d0000040f0000001902000029000001e002200039000f00000002001d0000000000120435000007eb0100004100000000001004390000001c010000290000000400100443000080020100003900000024020000391eb102310000040f000000000110004c000005000000613d000000400400043d0000080001000041000000000014043500000004014000390000000802000029000000000021043500000019010000290000000001010433000007b401100197000000240240003900000000001204350000000e010000290000000001010433000007b4011001970000004402400039000000000012043500000011010000290000000001010433000007b4011001970000006402400039000000000012043500000010010000290000000001010433000007b4011001970000008402400039000000000012043500000017010000290000000001010433000000a402400039000000000012043500000016010000290000000001010433000000c402400039000000000012043500000013010000290000000001010433000000e40240003900000000001204350000001201000029000000000101043300000104024000390000000000120435000000140100002900000000010104330000012402400039000000000012043500000006010000290000000001010433000001440240003900000000001204350000000301000029000000000101043300000164024000390000000000120435000000040100002900000000010104330000018402400039000000000012043500000005010000290000000001010433000001a40240003900000000001204350000001a010000290000000001010433000007e401100197000001c40240003900000000001204350000000d010000290000000001010433000000ff0110018f000001e40240003900000000001204350000000f0100002900000000010104330000020402400039000002000300003900000000003204350000000002000414001900000002001d0000002202000029001a00000002001d001b00000004001d00000224024000391eb119400000040f0000001c02000029000000040220008c000013920000613d0000001b0200002900000000042100490000001a01000029000000000110004c0000132f0000c13d00000019010000290000001c020000290000001b03000029000000000503001900000000060000191eb101ac0000040f00000000020100190000136b0000013d00000000122100d90000000001030019000600000002001d1eb11acc0000040f000007eb01000041000000000010043900000018010000290000000400100443000080020100003900000024020000391eb102310000040f00000011050000290000001803000029000000000110004c0000091e0000613d000000400400043d0000008401400039000000a002000039000000000021043500000064014000390000001202000029000000000021043500000044014000390000000602000029000000000021043500000024014000390000001a020000290000000000210435000007ec010000410000000000140435000000040140003900000009020000290000000000210435001100000004001d000000a4014000390000002202000029001200000002001d00000000002104350000000001000414000000040230008c000014290000613d0000001202000029000000000220004c000013cc0000c13d000000c40400003900000018020000290000001103000029000000000503001900000000060000191eb101ac0000040f0000000002010019000014020000013d000007ae010000410000001703000029000007ae0230009c000000000201001900000000020340190000004002200210000007ae0340009c000000000301001900000000030440190000006003300210000000000223019f0000001504000029000007ae0340009c0000000001044019000000c001100210000000000112019f000007c0011001c7000080090200003900000016030000290000001a0400002900000000050000191eb11ea70000040f000000170900002900000000030100190000006003300270000007ae033001970000001605000029000000000453004b00000000050340190000001f0450018f0000000505500272000012e10000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000012d90000413d000000000640004c000012f10000613d0000000505500210000000000651034f000000170700002900000000055700190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000000010220018f000100000003001f0003000000010355000000000120004c0000131b0000c13d000000010400003100000016010000290000000001140019000000000141004b00000a2f0000213d000000400100043d0000001f0240018f0000001603000029000000030330036700000005044002720000130a0000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000013020000413d000000000520004c000013190000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f000000000024043500000001020000311eb1024d0000040f0000001701000029000007b30110009c000008490000213d0000001701000029000000400010043f00000013010000290000000002010433000010dc0000013d000007e6030000410000000202000029000007e60220009c00000000020000190000143a0000c13d0000001b03000029000000020400002900000000434300d90000000804000029000000000343004b000010830000413d000014460000013d000007ae010000410000001b03000029000007ae0230009c000000000201001900000000020340190000004002200210000007ae0340009c000000000301001900000000030440190000006003300210000000000223019f0000001904000029000007ae0340009c0000000001044019000000c001100210000000000112019f000007c0011001c700008009020000390000001a030000290000001c0400002900000000050000191eb11ea70000040f0000001b0900002900000000030100190000006003300270000007ae033001970000001a05000029000000000453004b00000000050340190000001f0450018f0000000505500272000013580000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000013500000413d000000000640004c000013680000613d0000000505500210000000000651034f0000001b0700002900000000055700190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000000010220018f000100000003001f0003000000010355000000000120004c000013920000c13d00000001040000310000001a010000290000000001140019000000000141004b00000a2f0000213d000000400100043d0000001f0240018f0000001a0300002900000003033003670000000504400272000013810000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000013790000413d000000000520004c000013900000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f000000000024043500000001020000311eb1024d0000040f0000001b01000029000007b30110009c000008490000213d0000001b01000029000000400010043f00000f540000013d00000000122100d90000001801000029000700000002001d1eb11acc0000040f000007eb01000041000000000010043900000018010000290000000400100443000080020100003900000024020000391eb102310000040f000000000110004c000000030100002900000b7c0000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000602000029000000000021043500000044013000390000000702000029000000000021043500000024013000390000001a020000290000000000210435000007ec010000410000000000130435000000040130003900000004020000290000000000210435000300000003001d000000a4013000390000002202000029000600000002001d000000000021043500000000010004140000001802000029000000040220008c0000162b0000613d0000000602000029000000000220004c000015ce0000c13d000000c40400003900000018020000290000000303000029000000000503001900000000060000191eb101ac0000040f0000000002010019000016040000013d000007ae020000410000001104000029000007ae0340009c00000000030200190000000003044019000007ae0410009c0000000001028019000000c0011002100000004002300210000000000112019f000007ed011001c700008009020000390000001203000029000000180400002900000000050000191eb11ea70000040f000000110900002900000000030100190000006003300270000007ae033001970000001205000029000000000453004b00000000050340190000001f0450018f0000000505500272000013ef0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000013e70000413d000000000640004c000013ff0000613d0000000505500210000000000651034f000000110700002900000000055700190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000000010220018f000100000003001f0003000000010355000000000120004c000014290000c13d000000010400003100000012010000290000000001140019000000000141004b00000a2f0000213d000000400100043d0000001f0240018f000000120300002900000003033003670000000504400272000014180000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000014100000413d000000000520004c000014270000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f000000000024043500000001020000311eb1024d0000040f0000001101000029000007b30110009c000008490000213d0000001101000029000000400010043f00000007010000290000000602000029000000000112013f0000001402000029000000000112004b000010830000213d000000140100002900000006020000290000000001120019001400000001001d000000180300002900000e6a0000013d000000020200002900000000022300490000001b0300002900000000432300d90000000504000029000000000343004b000010830000413d000000050300002900000000323200a90000000203000029000000000330004c000013280000c13d0000000203000029000000080400002900000000434300a90000001b04000029000000000443013f000000000442004b000010830000213d000000000232001a0000108e0000613d000000020300002900000000311300a9000000000312004b0000163b0000a13d000000180100002900000180011000390000000703000029001a00000001001d000000000031043500000010010000290000000002010433000000000130004c0000146f0000c13d000003e70120008c000014680000a13d000003e80120008a0000001802000029000001a002200039001b00000002001d00000000001204350000001c01000029000000000101041a000003e90200008a000000000221004b000014850000a13d000007bf020000410000001c0100002900000000002104350000001102000039000000040020043f00000024020000391eb1024d0000040f00000006010000290000000001010433000000000312004b000010830000413d0000000003120049000000000212004b0000147b0000613d0000001b0200002900000000423200d90000000704000029000000000242004b000010830000413d000000000210004c0000108e0000613d0000001802000029000001a004200039000000070200002900000000322300a900000000121200d9001b00000004001d0000000000240435000014a80000013d000003e8021000390000001c01000029001c00000001001d000000000021041b00000000001104350000000102000039000000200020043f00000040020000391eb1021a0000040f000000000201041a000003e802200039000000000021041b000003e801000039000000400200043d0000000000120435000007ae010000410000000003000414000007ae0430009c0000000003018019000007ae0420009c00000000010240190000004001100210000000c002300210000000000112019f000007f3011001c70000800d020000390000000303000039000007f4040000410000001c0500002900000000060500191eb11ea70000040f000000010120019000000a2f0000613d0000001b010000290000000002010433000000000120004c000014af0000c13d000000400100043d0000080602000041000000000021043500000004020000391eb1024d0000040f0000000f010000290000000001010433000007b4011001971eb11acc0000040f0000001501000029000007b401100198001500000001001d000014ed0000c13d00000011010000290000000002010433000000170100002900000000010104331eb11ca50000040f0000000901000029000000000110004c000014c30000613d000000100100002900000000010104330000000302000029000000000012041b0000000f0100002900000000020104330000000e0100002900000000010104330000000d0300002900000000030304330000001b040000290000000004040433000000400500043d00000040065000390000000000460435000000200450003900000000003404350000000000150435000007ae010000410000000003000414000007ae0430009c0000000003018019000007ae0450009c00000000010540190000004001100210000000c003300210000000000113019f000007f0011001c7000007b4062001970000800d020000390000000303000039000008050400004100000000050004111eb11ea70000040f000000010120019000000a2f0000613d0000001b01000029000000000201043300000001010000390000000803000039000000000013041b000000400100043d0000000000210435000000200200003900000000030000191eb102430000040f0000001601000029000007b401100197000000180200002900000000001204350000000003000031000000140100002900000013020000291eb1195d0000040f0000001802000029000001e002200039001400000002001d0000000000120435000007eb01000041000000000010043900000015010000290000000400100443000080020100003900000024020000391eb102310000040f000000000110004c000015050000c13d0000001c0100002900000000020100191eb1024d0000040f000000400400043d0000080401000041000000000014043500000004014000390000000402000029000000000021043500000018010000290000000001010433000007b401100197000000240240003900000000001204350000000f010000290000000001010433000007b401100197000000440240003900000000001204350000001901000029000000000101043300000064024000390000000000120435000000120100002900000000010104330000008402400039000000000012043500000017010000290000000001010433000000a402400039000000000012043500000011010000290000000001010433000000c40240003900000000001204350000000e010000290000000001010433000000e40240003900000000001204350000000d010000290000000001010433000001040240003900000000001204350000000a010000290000000001010433000001240240003900000000001204350000000b01000029000000000101043300000144024000390000000000120435000000100100002900000000010104330000016402400039000000000012043500000006010000290000000001010433000001840240003900000000001204350000001a010000290000000001010433000001a40240003900000000001204350000001b010000290000000001010433000001c40240003900000000001204350000000c010000290000000001010433000007e401100197000001e4024000390000000000120435000000140100002900000000010104330000020402400039000002000300003900000000003204350000000002000414001a00000002001d001600000004001d00000224024000391eb119400000040f0000001502000029000000040220008c000015c80000613d000000160200002900000000042100490000001c01000029000000000110004c000015640000c13d0000001a0100002900000015020000290000001603000029000000000503001900000000060000191eb101ac0000040f0000000002010019000015a10000013d000007ae010000410000001603000029000007ae0230009c000000000201001900000000020340190000004002200210000007ae0340009c000000000301001900000000030440190000006003300210000000000223019f0000001a04000029000007ae0340009c0000000001044019000000c001100210000000000112019f000007c0011001c700008009020000390000001c03000029001c00000003001d000000150400002900000000050000191eb11ea70000040f000000160900002900000000030100190000006003300270000007ae033001970000001c05000029000000000453004b00000000050340190000001f0450018f00000005055002720000158e0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000015860000413d000000000640004c0000159e0000613d0000000505500210000000000651034f000000160700002900000000055700190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000000010220018f000100000003001f0003000000010355000000000120004c000015c80000c13d00000001040000310000001c010000290000000001140019000000000141004b00000a2f0000213d000000400100043d0000001f0240018f0000001c0300002900000003033003670000000504400272000015b70000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000015af0000413d000000000520004c000015c60000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f000000000024043500000001020000311eb1024d0000040f0000001601000029000007b30110009c000008490000213d0000001601000029000000400010043f000014b70000013d000007ae020000410000000304000029000007ae0340009c00000000030200190000000003044019000007ae0410009c0000000001028019000000c0011002100000004002300210000000000112019f000007ed011001c700008009020000390000000603000029000000180400002900000000050000191eb11ea70000040f000000030900002900000000030100190000006003300270000007ae033001970000000605000029000000000453004b00000000050340190000001f0450018f0000000505500272000015f10000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000015e90000413d000000000640004c000016010000613d0000000505500210000000000651034f000000030700002900000000055700190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000000010220018f000100000003001f0003000000010355000000000120004c0000162b0000c13d000000010400003100000006010000290000000001140019000000000141004b00000a2f0000213d000000400100043d0000001f0240018f0000000603000029000000030330036700000005044002720000161a0000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000016120000413d000000000520004c000016290000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f000000000024043500000001020000311eb1024d0000040f0000000301000029000007b30110009c000008490000213d0000000301000029000000400010043f00000009010000290000000702000029000000000112013f0000000802000029000000000112004b000010830000213d000000080100002900000007020000290000000001120019000800000001001d000010640000013d00000000122100d90000000901000029000800000002001d1eb11acc0000040f000007eb01000041000000000010043900000009010000290000000400100443000080020100003900000024020000391eb102310000040f000000000110004c00000da00000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000202000029000000000021043500000044013000390000000802000029000000000021043500000024013000390000001a020000290000000000210435000007ec010000410000000000130435000000040130003900000001020000390000000000210435000500000003001d000000a4013000390000002202000029001c00000002001d000000000021043500000000010004140000000902000029000000040220008c000016cd0000613d0000001c02000029000000000220004c000016710000c13d000000c40400003900000009020000290000000503000029000000000503001900000000060000191eb101ac0000040f0000000002010019000016a60000013d000000000215004900000000030000191eb102430000040f000007ae02000041000007ae0310009c00000000010280190000000504000029000007ae0340009c00000000020440190000004002200210000000c001100210000000000121019f000007ed011001c700008009020000390000001c03000029000000090400002900000000050000191eb11ea70000040f000000050900002900000000030100190000006003300270000007ae033001970000001c05000029000000000453004b00000000050340190000001f0450018f0000000505500272000016930000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000168b0000413d000000000640004c000016a30000613d0000000505500210000000000651034f000000050700002900000000055700190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000000010220018f000100000003001f0003000000010355000000000120004c000016cd0000c13d00000001040000310000001c010000290000000001140019000000000141004b00000a2f0000213d000000400100043d0000001f0240018f0000001c0300002900000003033003670000000504400272000016bc0000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000016b40000413d000000000520004c000016cb0000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f000000000024043500000001020000311eb1024d0000040f0000000501000029000007b30110009c000008490000213d0000000501000029000000400010043f0000001b010000290000000802000029000000000112013f0000000702000029000000000112004b000010830000213d000000070100002900000008020000290000000001120019000700000001001d000014530000013d00000000040100190000080b0120009c000017000000813d0000003f01200039000000200500008a000000000551016f000000400100043d0000000005510019000000000615004b00000000060000190000000106004039000007b30750009c000017000000213d0000000106600190000017000000c13d000000400050043f00000000002104350000000005420019000000000335004b000017070000213d00000020031000390000000005000019000000000625004b000016fb0000813d00000000063500190000000007450019000000000707043300000000007604350000002005500039000016f30000013d000000000425004b000016ff0000a13d00000000022300190000000000020435000000000001042d000007bf0100004100000000001004350000004101000039000000040010043f000000240200003900000000010000191eb1024d0000040f000000000100001900000000020000191eb1024d0000040f000000010210019000000001011002700000007f0310018f00000000010360190000001f0310008c00000000030000190000000103002039000000010330018f000000000232004b000017150000c13d000000000001042d000007bf0100004100000000001004350000002201000039000000040010043f000000240200003900000000010000191eb1024d0000040f0005000000000002000300000002001d000200000001001d0000000001010433000400000001001d0000080b0110009c0000182c0000813d0000000401000039000500000001001d000000000101041a1eb1170a0000040f0000000002010019000000200120008c0000000406000029000017410000413d00000005010000290000000000100435000100000002001d000000200200003900000000010000191eb1021a0000040f00000004060000290000001f026000390000000502200270000000200360008c0000000003020019000000000300401900000001020000290000001f02200039000000050220027000000000022100190000000001310019000000000321004b000017410000813d000000000001041b00000001011000390000173c0000013d0000001f0160008c000017590000a13d000000050100002900000000001004350000002002000039000100000002001d00000000010000191eb1021a0000040f00000001080000290000000406000029000000200200008a000000000226016f000000000300001900000003050000290000000207000029000000000423004b0000000004780019000017680000813d0000000004040433000000000041041b000000200330003900000020088000390000000101100039000017500000013d000000000160004c0000000001000019000000050400002900000003050000290000000202000029000017610000613d000000200120003900000000010104330000000302600210000000010300008a000000000223022f000000000232013f000000000221016f0000000101600210000017750000013d000000000262004b000017720000813d0000000302600210000000f80220018f000000010300008a000000000223022f000000000232013f0000000003040433000000000223016f000000000021041b000000010100003900000001026002100000000504000029000000000112019f000000000014041b0000000001050433000400000001001d000007b30110009c0000182c0000213d0000000501000039000200000001001d000000000101041a1eb1170a0000040f0000000002010019000000200120008c0000000405000029000017990000413d00000002010000290000000000100435000100000002001d000000200200003900000000010000191eb1021a0000040f00000004050000290000001f025000390000000502200270000000200350008c0000000003020019000000000300401900000001020000290000001f02200039000000050220027000000000022100190000000001310019000000000321004b000017990000813d000000000001041b0000000101100039000017940000013d0000001f0150008c000017b00000a13d000000020100002900000000001004350000002002000039000100000002001d00000000010000191eb1021a0000040f00000001070000290000000406000029000000200200008a000000000226016f00000000030000190000000305000029000000000423004b0000000004570019000017be0000813d0000000004040433000000000041041b000000200330003900000020077000390000000101100039000017a70000013d000000000150004c000000000100001900000005020000290000000303000029000017b70000613d000000200130003900000000010104330000000304500210000000010300008a000000000443022f000000000334013f000000000331016f0000000101500210000017cb0000013d000000000262004b000017c80000813d0000000302600210000000f80220018f000000010300008a000000000223022f000000000232013f0000000003040433000000000223016f000000000021041b000000010100003900000001036002100000000502000029000000000113019f0000000203000029000000000013041b0000080c0100004100000000001004390000800b010000391eb102310000040f0000000602000039000000000012041b0000000501000029000000000101041a000300000001001d000000400200043d000400000002001d1eb1170a0000040f000000030200002900000004050000290000000003010019000000000035043500000020065000390000000101200190000018190000c13d000001000100008a000000000112016f0000000000160435000000000130004c000000200200003900000000020060190000003f01200039000000200200008a000000000221016f0000000001520019000000000221004b00000000020000190000000102004039000007b30310009c0000182c0000213d00000001022001900000182c0000c13d000000400010043f000000000205043300000000010600191eb1021a0000040f000000400300043d000500000003001d0000004002300039000000000012043500000060013000390000080d02000041000000000021043500000020023000390000080e01000041000400000002001d00000000001204350000080c0100004100000000001004390000800b0100003900000004020000391eb102310000040f0000000504000029000000a00240003900000000030004100000000000320435000000800240003900000000001204350000000002040019000000a00100003900000000001204350000080f0120009c0000182c0000213d000000c001200039000000400010043f000000000202043300000004010000291eb1021a0000040f0000000702000039000000000012041b000000000001042d0000000501000029000000000010043500000020020000390000000001000019000500000006001d000300000003001d1eb1021a0000040f0000000307000029000000050600002900000004050000290000000002000019000000000372004b000017e70000813d0000000003260019000000000401041a000000000043043500000020022000390000000101100039000018240000013d000007bf0100004100000000001004350000004101000039000000040010043f000000240200003900000000010000191eb1024d0000040f0000000002010019000000400400043d00000004010000390000000000140435000000200340003900000810010000410000000000130435000007bb0140009c000018ab0000213d0000004001400039000000400010043f00000001010000390000000005000414000000040620008c000018470000613d00000000040404330000000001050019000000000500001900000000060000191eb101e30000040f00000060020000390000000103000032000018780000613d000007b30230009c000018ab0000213d0000003f02300039000000200400008a000000000442016f000000400200043d0000000004420019000000000524004b00000000050000190000000105004039000007b30640009c000018ab0000213d0000000105500190000018ab0000c13d000000400040043f00000000003204350000002003200039000000030400036700000001060000310000001f0560018f0000000506600272000018690000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000018610000413d000000000750004c000018780000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000000000110004c000018a20000613d0000000001020433000007b2030000410000001f0410008c00000000040000190000000004032019000007b205100197000000000650004c0000000003008019000007b20550009c000000000304c019000000000330004c000018b20000613d00000020032000390000000004030433000007b30540009c000018b20000213d000000000313001900000000012400190000003f02100039000007b204000041000000000532004b00000000050000190000000005048019000007b202200197000007b206300197000000000762004b0000000004008019000000000262013f000007b20220009c00000000020500190000000002046019000000000220004c000018b20000c13d0000002002100039000000000202043300000040011000391eb116dd0000040f00000001030000390000000002010019000018a90000013d000000400200043d000007e30120009c000018ab0000213d0000002001200039000000400010043f000000000002043500000000030000190000000001030019000000000001042d000007bf0100004100000000001004350000004101000039000000040010043f000000240200003900000000010000191eb1024d0000040f000000000100001900000000020000191eb1024d0000040f0000001f03100039000007b204000041000000000523004b00000000050000190000000005044019000007b206200197000007b203300197000000000763004b000000000400a019000000000363013f000007b20330009c00000000030500190000000003046019000000000330004c000018ce0000613d0000000203100367000000000303043b000007b30430009c000018ce0000213d00000020011000390000000004310019000000000224004b000018ce0000213d0000000002030019000000000001042d000000000100001900000000020000191eb1024d0000040f00000004010000390000000201100367000000000101043b000008110210009c000018d70000813d000000000001042d000000000100001900000000020000191eb1024d0000040f00000024010000390000000201100367000000000101043b000008110210009c000018e00000813d000000000001042d000000000100001900000000020000191eb1024d0000040f00050000000000020000000005010019000000040150008a000007b2020000410000007f0310008c00000000030000190000000003022019000007b201100197000000000410004c0000000002008019000007b20110009c00000000010300190000000001026019000000000110004c000019170000613d00000004010000390000000201100367000000000101043b000007b30210009c000019170000213d00000004011000390000000002050019000500000005001d1eb118b50000040f0000000503000029000400000001001d000300000002001d00000002010003670000002402100370000000000202043b000200000002001d000007b40220009c000019170000213d0000004402100370000000000202043b000100000002001d000007b40220009c000019170000213d0000006401100370000000000101043b000007b30210009c000019170000213d000000040110003900000000020300191eb118b50000040f000000000501001900000000060200190000000401000029000000030200002900000002030000290000000104000029000000000001042d000000000100001900000000020000191eb1024d0000040f000000010210019000000001011002700000007f0310018f00000000010360190000001f0310008c00000000030000190000000103002039000000010330018f000000000232004b000019250000c13d000000000001042d000007bf0100004100000000001004350000002201000039000000040010043f000000240200003900000000010000191eb1024d0000040f0000001f02200039000000200300008a000000000232016f0000000001120019000000000221004b00000000020000190000000102004039000007b30310009c000019390000213d0000000102200190000019390000c13d000000400010043f000000000001042d000007bf0100004100000000001004350000004101000039000000040010043f000000240200003900000000010000191eb1024d0000040f0000000003010433000000000032043500000020022000390000000004000019000000000534004b0000194c0000813d00000000054200190000002004400039000000000614001900000000060604330000000000650435000019440000013d000000000134004b000019500000a13d000000000132001900000000000104350000001f01300039000000200300008a000000000131016f0000000001120019000000000001042d0000000003010433000007b40330019700000000003204350000002002200039000000200110003900000000010104330000000000120435000000000001042d00000000040100190000080b0120009c000019910000813d0000003f01200039000000200500008a000000000551016f000000400100043d0000000005510019000000000615004b00000000060000190000000106004039000007b30750009c000019910000213d0000000106600190000019910000c13d000000400050043f00000000002104350000000005420019000000000335004b000019980000213d0000001f0520018f0000000204400367000000200310003900000005062002720000197f0000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000019770000413d000000000750004c0000198e0000613d0000000506600210000000000464034f00000000066300190000000305500210000000000706043300000000075701cf000000000757022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000474019f000000000046043500000000022300190000000000020435000000000001042d000007bf0100004100000000001004350000004101000039000000040010043f000000240200003900000000010000191eb1024d0000040f000000000100001900000000020000191eb1024d0000040f000000040110008a000007b2020000410000005f0310008c00000000030000190000000003022019000007b201100197000000000410004c0000000002008019000007b20110009c00000000010300190000000001026019000000000110004c000019b40000613d00000002020003670000000401200370000000000101043b000007b40310009c000019b40000213d0000004403200370000000000303043b000007b40430009c000019b40000213d0000002402200370000000000202043b000000000001042d000000000100001900000000020000191eb1024d0000040f00030000000000020000080c0100004100000000001004390000800b010000390000000402000039000300000002001d1eb102310000040f0000000602000039000000000202041a000000000121004b000019c50000c13d0000000701000039000000000101041a00001a060000013d0000000301000029000000000101041a000100000001001d000000400200043d000200000002001d1eb1191a0000040f00000001040000290000000207000029000000000201001900000000002704350000002001700039000000010340019000001a070000c13d000001000300008a000000000334016f0000000000310435000000000220004c000000200300003900000000030060190000003f02300039000000200300008a000000000332016f0000000002730019000000000332004b00000000030000190000000103004039000007b30420009c00001a130000213d000000010330019000001a130000c13d000000400020043f00000000020704331eb1021a0000040f000000400300043d000300000003001d0000004002300039000000000012043500000060013000390000080d02000041000000000021043500000020023000390000080e01000041000200000002001d00000000001204350000080c0100004100000000001004390000800b0100003900000004020000391eb102310000040f0000000304000029000000a00240003900000000030004100000000000320435000000800240003900000000001204350000000002040019000000a00100003900000000001204350000080f0120009c00001a130000213d000000c001200039000000400010043f000000000202043300000002010000291eb1021a0000040f000000000001042d0000000303000029000000000030043500000801040000410000000003000019000000000523004b000019d80000813d0000000005310019000000000604041a00000000006504350000002003300039000000010440003900001a0b0000013d000007bf0100004100000000001004350000004101000039000000040010043f000000240200003900000000010000191eb1024d0000040f0004000000000002000200000003001d000300000002001d000007b401100197000400000001001d00000000001004350000000201000039000000200010043f0000004002000039000100000002001d00000000010000191eb1021a0000040f0000000302000029000007b402200197000300000002001d0000000000200435000000200010043f000000000100001900000001020000291eb1021a0000040f0000000202000029000000000021041b000000400100043d0000000000210435000007ae020000410000000003000414000007ae0430009c0000000003028019000007ae0410009c00000000010280190000004001100210000000c002300210000000000112019f000007f3011001c70000800d0200003900000003030000390000081204000041000000040500002900000003060000291eb11ea70000040f000000010120019000001a450000613d000000000001042d000000000100001900000000020000191eb1024d0000040f0005000000000002000200000004001d000300000003001d000400000002001d000500000001001d1eb119b70000040f0000000502000029000007b402200197000500000002001d00000000002004350000000302000039000000200020043f000100000001001d000000400200003900000000010000191eb1021a0000040f000000000201041a000000010300008a000000000332004b00001a980000613d0000000103200039000000000031041b000000400300043d000000c00130003900000002040000290000000000410435000000a00130003900000000002104350000008001300039000000030200002900000000002104350000000401000029000007b40110019700000060023000390000000000120435000000400130003900000005020000290000000000210435000000c0010000390000000000130435000000200130003900000813020000410000000000210435000008140230009c00001a910000813d000000e002300039000400000002001d000000400020043f0000000002030433000500000003001d1eb1021a0000040f00000005020000290000010003200039000008150200004100000000002304350000000502000029000001020220003900000001040000290000000000420435000000050400002900000122024000390000000000120435000000040200002900000042010000390000000000120435000008160140009c00001a910000213d0000016001400039000000400010043f000000000202043300000000010300191eb1021a0000040f000000000001042d000007bf0100004100000000001004350000004101000039000000040010043f000000240200003900000000010000191eb1024d0000040f000007bf0100004100000000001004350000001101000039000000040010043f000000240200003900000000010000191eb1024d0000040f000000400100043d000008170210009c00001ac50000813d0000020002100039000000400020043f000001e00210003900000060030000390000000000320435000001c0021000390000000000020435000001a00210003900000000000204350000018002100039000000000002043500000160021000390000000000020435000001400210003900000000000204350000012002100039000000000002043500000100021000390000000000020435000000e0021000390000000000020435000000c0021000390000000000020435000000a0021000390000000000020435000000800210003900000000000204350000006002100039000000000002043500000040021000390000000000020435000000200210003900000000000204350000000000010435000000000001042d000007bf0100004100000000001004350000004101000039000000040010043f000000240200003900000000010000191eb1024d0000040f00020000000000020000000004020019000000010200008a000000000324013f000000000200041a000000000332004b00001af70000213d0000000002420019000000000020041b000007b401100197000200000001001d00000000001004350000000101000039000000200010043f00000040020000390000000001000019000100000004001d1eb1021a0000040f000000000201041a00000001030000290000000002320019000000000021041b000000400100043d0000000000310435000007ae020000410000000003000414000007ae0430009c0000000003028019000007ae0410009c00000000010280190000004001100210000000c002300210000000000112019f000007f3011001c70000800d020000390000000303000039000007f404000041000000000500001900000002060000291eb11ea70000040f000000010120019000001afe0000613d000000000001042d000007bf0100004100000000001004350000001101000039000000040010043f000000240200003900000000010000191eb1024d0000040f000000000100001900000000020000191eb1024d0000040f0000000801000039000000000201041a000000020220008c00001b080000613d0000000202000039000000000021041b000000000001042d000000400100043d00000044021000390000081803000041000000000032043500000024021000390000001f0300003900000000003204350000081902000041000000000021043500000004021000390000002003000039000000000032043500000064020000391eb1024d0000040f0003000000000002000007b40210019800001b560000613d0000000003000411000000000232004b00001b560000613d000200000001001d000000400100043d0000081a020000410000000000210435000300000001001d000000040210003900000000003204350000000001000414000100000001001d000007e20100004100000000001004390000000001000412000000040010044300000020010000390000002400100443000080050100003900000044020000391eb102310000040f000007b402100197000000040120008c00001b390000613d000000240400003900000020060000390000000101000029000000030300002900000000050300191eb101e30000040f000000000110004c00001b610000613d0000000101000031000000200210008c000000200200003900000000020140190000001f02200039000000600320018f00000003050000290000000002530019000000000332004b00000000030000190000000103004039000007b30420009c000000000405001900001b5a0000213d000000010330019000001b5a0000c13d000000400020043f000000200110008c00001b570000413d0000000001040433000000000210004c0000000002000019000000010200c039000000000221004b00001b570000c13d000000000110004c000000020100002900001b560000c13d0000000001000019000000000001042d000000000100001900000000020000191eb1024d0000040f000007bf0100004100000000001004350000004101000039000000040010043f000000240200003900000000010000191eb1024d0000040f0000000302000367000000400100043d00000001040000310000001f0340018f000000050440027200001b700000613d000000000500001900000005065002100000000007610019000000000662034f000000000606043b00000000006704350000000105500039000000000645004b00001b680000413d000000000530004c00001b7f0000613d0000000504400210000000000242034f00000000044100190000000303300210000000000504043300000000053501cf000000000535022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000252019f000000000024043500000001020000311eb1024d0000040f0002000000000002000200000002001d000007b401100197000100000001001d00000000001004350000000101000039000000200010043f000000400200003900000000010000191eb1021a0000040f0000000204000029000000000201041a000000000342004b00001ba90000413d0000000002420049000000000021041b000000000100041a0000000001410049000000000010041b000000400100043d0000000000410435000007ae020000410000000003000414000007ae0430009c0000000003028019000007ae0410009c00000000010280190000004001100210000000c002300210000000000112019f000007f3011001c70000800d020000390000000303000039000007f404000041000000010500002900000000060000191eb11ea70000040f000000010120019000001bb00000613d000000000001042d000007bf0100004100000000001004350000001101000039000000040010043f000000240200003900000000010000191eb1024d0000040f000000000100001900000000020000191eb1024d0000040f0000000002120049000007b2030000410000005f0420008c00000000040000190000000004032019000007b202200197000000000520004c0000000003008019000007b20220009c00000000020400190000000002036019000000000220004c00001bd10000613d0000000203000367000000000213034f000000000402043b000007b40240009c00001bd10000213d0000002002100039000000000223034f000000000202043b000007b40520009c00001bd10000213d0000004001100039000000000113034f000000000301043b000000ff0130008c00001bd10000213d0000000001040019000000000001042d000000000100001900000000020000191eb1024d0000040f0004000000000002000300000004001d000000400600043d000400000006001d0000008404600039000000a0050000390000000000540435000007b40330019700000064046000390000000000340435000007b40220019700000044036000390000000000230435000007b401100197000000240260003900000000001204350000081b0100004100000000001604350000000401600039000000000200041000000000002104350000000001000414000100000001001d000007e20100004100000000001004390000000001000412000000040010044300000020010000390000002400100443000080050100003900000044020000391eb102310000040f000200000001001d0000000401000029000000a40210003900000003010000291eb119400000040f0000000202000029000007b402200197000000040320008c00001c050000613d000000040300002900000000043100490000002006000039000000010100002900000000050300191eb101e30000040f000000000110004c00001c260000613d0000000101000031000000200210008c000000200200003900000000020140190000001f02200039000000600320018f00000004050000290000000002530019000000000332004b00000000030000190000000103004039000007b30420009c000000000405001900001c1f0000213d000000010330019000001c1f0000c13d000000400020043f0000001f0110008c00001c1c0000a13d0000000001040433000007e40210009c00001c1c0000213d000000000001042d000000000100001900000000020000191eb1024d0000040f000007bf0100004100000000001004350000004101000039000000040010043f000000240200003900000000010000191eb1024d0000040f0000000302000367000000400100043d00000001040000310000001f0340018f000000050440027200001c350000613d000000000500001900000005065002100000000007610019000000000662034f000000000606043b00000000006704350000000105500039000000000645004b00001c2d0000413d000000000530004c00001c440000613d0000000504400210000000000242034f00000000044100190000000303300210000000000504043300000000053501cf000000000535022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000252019f000000000024043500000001020000311eb1024d0000040f0002000000000002000000400200043d0000081c010000410000000000120435000200000002001d0000000401200039000000000200041000000000002104350000000001000414000100000001001d000007e20100004100000000001004390000000001000412000000040010044300000020010000390000002400100443000080050100003900000044020000391eb102310000040f000007b402100197000000040120008c00001c640000613d000000240400003900000020060000390000000101000029000000020300002900000000050300191eb101e30000040f000000000110004c00001c850000613d0000000101000031000000200210008c000000200200003900000000020140190000001f02200039000000600320018f00000002050000290000000002530019000000000332004b00000000030000190000000103004039000007b30420009c000000000405001900001c7e0000213d000000010330019000001c7e0000c13d000000400020043f0000001f0110008c00001c7b0000a13d0000000001040433000007e40210009c00001c7b0000213d000000000001042d000000000100001900000000020000191eb1024d0000040f000007bf0100004100000000001004350000004101000039000000040010043f000000240200003900000000010000191eb1024d0000040f0000000302000367000000400100043d00000001040000310000001f0340018f000000050440027200001c940000613d000000000500001900000005065002100000000007610019000000000662034f000000000606043b00000000006704350000000105500039000000000645004b00001c8c0000413d000000000530004c00001ca30000613d0000000504400210000000000242034f00000000044100190000000303300210000000000504043300000000053501cf000000000535022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000252019f000000000024043500000001020000311eb1024d0000040f0000000a03000039000000000023041b0000000903000039000000000013041b000000400300043d000000200430003900000000002404350000000000130435000007ae010000410000000002000414000007ae0420009c0000000002018019000007ae0430009c00000000010340190000004001100210000000c002200210000000000112019f0000081d011001c70000800d0200003900000001030000390000081e040000411eb11ea70000040f000000010120019000001cbe0000613d000000000001042d000000000100001900000000020000191eb1024d0000040f0005000000000002000500000004001d000100000003001d000200000002001d000300000001001d000007e20100004100000000001004390000000001000412000000040010044300000040010000390000002400100443000080050100003900000044020000391eb102310000040f000007eb020000410000000000200439000007b401100197000400000001001d0000000400100443000080020100003900000024020000391eb102310000040f0000000502000029000000ff0220019000001cfc0000613d000000000110004c00001d210000613d000000400300043d000000640130003900000000002104350000004401300039000000010200002900000000002104350000000201000029000007b401100197000000240230003900000000001204350000081f0100004100000000001304350000000301000029000007b4011001970000000402300039000000000012043500000000010004140000000402000029000000040420008c00001cf80000613d0000008404000039000500000003001d000000050500002900000000060000191eb101ac0000040f0000000503000029000000000110004c00001d240000613d0000080b0130009c00001d1a0000813d000000400030043f000000000001042d000000000110004c00001d210000613d000000400300043d0000004401300039000000010200002900000000002104350000000201000029000007b40110019700000024023000390000000000120435000008200100004100000000001304350000000301000029000007b4011001970000000402300039000000000012043500000000010004140000000402000029000000040420008c00001d180000613d0000006404000039000500000003001d000000050500002900000000060000191eb101ac0000040f0000000503000029000000000110004c00001d240000613d000007b30130009c00001cfa0000a13d000007bf0100004100000000001004350000004101000039000000040010043f000000240200003900000000010000191eb1024d0000040f000000000100001900000000020000191eb1024d0000040f0000000302000367000000400100043d00000001040000310000001f0340018f000000050440027200001d330000613d000000000500001900000005065002100000000007610019000000000662034f000000000606043b00000000006704350000000105500039000000000645004b00001d2b0000413d000000000530004c00001d420000613d0000000504400210000000000242034f00000000044100190000000303300210000000000504043300000000053501cf000000000535022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000252019f000000000024043500000001020000311eb1024d0000040f0007000000000002000007e201000041000400000001001d00000000001004390000000001000412000700000001001d0000000400100443000000400100003900000024001004430000800501000039000300000001001d0000004402000039000200000002001d1eb102310000040f0000082102000041000000400300043d000600000003001d0000000000230435000500000001001d0000000001000414000100000001001d000000040100002900000000001004390000000701000029000000040010044300000060010000390000002400100443000000030100002900000002020000291eb102310000040f0000000603000029000007b401100197000000040230003900000000001204350000000001000410000007b4021001970000002401300039000400000002001d00000000002104350000000501000029000007b402100197000000040120008c000500000002001d00001d790000613d00000044040000390000002006000039000000010100002900000000050300191eb101e30000040f00000006030000290000000502000029000000000110004c00001dc50000613d0000000101000031000000200410008c000000200400003900000000040140190000001f04400039000000600540018f0000000004350019000000000554004b00000000050000190000000105004039000007b30640009c00001dbb0000213d000000010550019000001dbb0000c13d000000400040043f0000001f0110008c00001dc20000a13d0000000001030433000600000001001d000008210100004100000000001404350000000001000414000300000001001d000007e2010000410000000000100439000000070100002900000004001004430000008001000039000000240010044300008005010000390000004402000039000700000004001d1eb102310000040f00000007030000290000002402300039000000040400002900000000004204350000000402300039000007b40110019700000000001204350000000502000029000000040120008c00001dac0000613d00000044040000390000002006000039000000030100002900000007050000291eb101e30000040f0000000703000029000000000110004c00001dc50000613d0000000101000031000000200210008c000000200200003900000000020140190000001f02200039000000600220018f0000000002320019000007b30420009c00001dbb0000213d000000400020043f000000200110008c00001dc20000413d00000000020304330000000601000029000000000001042d000007bf0100004100000000001004350000004101000039000000040010043f000000240200003900000000010000191eb1024d0000040f000000000100001900000000020000191eb1024d0000040f0000000302000367000000400100043d00000001040000310000001f0340018f000000050440027200001dd40000613d000000000500001900000005065002100000000007610019000000000662034f000000000606043b00000000006704350000000105500039000000000645004b00001dcc0000413d000000000530004c00001de30000613d0000000504400210000000000242034f00000000044100190000000303300210000000000504043300000000053501cf000000000535022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000252019f000000000024043500000001020000311eb1024d0000040f0000000005020019000000000250004c0000000006000019000000000200001900001e050000613d000007e50210009c00001e070000813d000000010600008a00000000275600d9000007e6020000410000000002120049000000000827004b00001e070000413d000000000717004b00001e070000413d00000000275200aa00000000211500a9000007e61210012a00001dfb0000613d00000000517600d9000000000131004b00001e070000413d000007e80140009c00001e070000213d000000000567013f000007e6414000d1000000000451004b00001e070000213d000000000171001a00001e0e0000613d00000000433700a900000000161300d90000000001060019000000000001042d000007bf0100004100000000001004350000001101000039000000040010043f000000240200003900000000010000191eb1024d0000040f000007bf0100004100000000001004350000001201000039000000040010043f000000240200003900000000010000191eb1024d0000040f0000000005020019000000000250004c0000000006000019000000000200001900001e350000613d000007e50210009c00001e370000813d000000010600008a00000000275600d9000007e6020000410000000002120049000000000827004b00001e370000413d000000000717004b00001e370000413d00000000275200aa00000000211500a9000007e61210012a00001e2b0000613d00000000517600d9000000000141004b00001e370000413d000007e80130009c00001e370000213d000000000567013f000007e6313000d1000000000351004b00001e370000213d000000000171001a00001e3e0000613d00000000434700a900000000161300d90000000001060019000000000001042d000007bf0100004100000000001004350000001101000039000000040010043f000000240200003900000000010000191eb1024d0000040f000007bf0100004100000000001004350000001201000039000000040010043f000000240200003900000000010000191eb1024d0000040f000007f90310009c00001e9b0000213d000008220320009c00001e9b0000813d000000000310004c00001e4f0000613d000000010300008a00000000431300d9000000000323004b00001ea00000413d00000000211200a9000008230210009c00000000020000190000008002002039000000000321022f000008240330009c00000000030000190000004003002039000000000223019f000000000321022f000008250330009c00000000030000190000002003002039000000000223019f000000000321022f000007e40330009c00000000030000190000001003002039000000000223019f000000000321022f00000826033000410000000102200270000000b50220020f00000000233200a90000001202300270000008270330009c000000000300001900001e6c0000413d00000000432100d900000000032300190000000102300270000000020330008c000000000300001900001e720000413d00000000432100d900000000032300190000000102300270000000020330008c000000000300001900001e780000413d00000000432100d900000000032300190000000102300270000000020330008c000000000300001900001e7e0000413d00000000432100d900000000032300190000000102300270000000020330008c000000000300001900001e840000413d00000000432100d900000000032300190000000102300270000000020330008c000000000300001900001e8a0000413d00000000432100d900000000032300190000000102300270000000020330008c000000000300001900001e900000413d00000000432100d900000000032300190000000102300270000000020330008c000000000300001900001e960000413d00000000132100d9000000010100008a000000000323004b00000000010080190000000001120019000000000001042d000000400100043d000007fb02000041000000000021043500000004020000391eb1024d0000040f000007bf0100004100000000001004350000001101000039000000040010043f000000240200003900000000010000191eb1024d0000040f00001eaa002104210000000102000039000000000001042d000000000200001900001ea90000013d00001eaf002104230000000102000039000000000001042d000000000200001900001eae0000013d00001eb10000043200001eb20001042e00001eb300010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffd039f62200000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000011f8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffffee97f7f300000000000000000000000000000000000000000000000000000000fbfa77cf0000000000000000000000000000000000000000000000000000000053796e63537761702000000000000000000000000000000000000000000000002f0000000000000000000000000000000000000000000000000000000000000020436c6173736963204c500000000000000000000000000000000000000000002063534c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf53796e635377617020436c6173736963204c500000000000000000000000000063534c500000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000004e487b7100000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffc9a70000000000000000000000000000000000000000000000000000000003e7286a0000000000000000000000000000000000000000000000000000000006fdde030000000000000000000000000000000000000000000000000000000007f293f7000000000000000000000000000000000000000000000000000000000902f1ac00000000000000000000000000000000000000000000000000000000095ea7b3000000000000000000000000000000000000000000000000000000000dfe16810000000000000000000000000000000000000000000000000000000018160ddd0000000000000000000000000000000000000000000000000000000023b872dd0000000000000000000000000000000000000000000000000000000027b0bcea000000000000000000000000000000000000000000000000000000002c0198cc00000000000000000000000000000000000000000000000000000000313ce567000000000000000000000000000000000000000000000000000000003644e51500000000000000000000000000000000000000000000000000000000443cb4bc000000000000000000000000000000000000000000000000000000005a76f25e0000000000000000000000000000000000000000000000000000000067e4ac2c0000000000000000000000000000000000000000000000000000000070a08231000000000000000000000000000000000000000000000000000000007132bb7f000000000000000000000000000000000000000000000000000000007ecebe00000000000000000000000000000000000000000000000000000000008b4c54700000000000000000000000000000000000000000000000000000000095d89b4100000000000000000000000000000000000000000000000000000000a287c79500000000000000000000000000000000000000000000000000000000a5a4103100000000000000000000000000000000000000000000000000000000a9059cbb00000000000000000000000000000000000000000000000000000000b1dd61b600000000000000000000000000000000000000000000000000000000d21220a700000000000000000000000000000000000000000000000000000000d505accf00000000000000000000000000000000000000000000000000000000dd62ed3e00000000000000000000000000000000000000000000000000000000ee97f7f300000000000000000000000000000000000000000000000000000000f66eab5b00000000000000000000000000000000000000000000000000000000fbfa77cf00000000000000000000000000000000000000000000000000000000ff9c8ac6310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e000000000000000000000000000000000000000000000000ffffffffffffffdf0000000000000000000000000000000000000000000000000000000000ffffff00000000000000000000000000000000000000000000000000000000000186a100000000000000000000000000000000000000000000000000000000000186a00000a7c5ac471b4784230fcf80dc33721d53cddd6e04c059210385c67dfe32a10000a7c5ac471b4784230fcf80dc33721d53cddd6e04c059210385c67dfe32a0000000000000000000000000000000000000000000000000fffffffffffffebf4ccb20c0000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83843e82180000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000c400000000000000000000000084f513e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff9f0200000000000000000000000000000000000060000000000000000000000000d175a80c109434bb89948928ab2475a6647c94244cb70002197896423c883363796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000000000000000000000000000000000020000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0000000000000000000000000000000000000000000000000fffffffffffffe400200000000000000000000000000000000000080000000000000000000000000d78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82200000000000000000000000000000000ffffffffffffffffffffffffffffffff608dbcbb0000000000000000000000000000000000000000000000000000000035278d12000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a01626ba7e000000000000000000000000000000000000000000000000000000008baa579f00000000000000000000000000000000000000000000000000000000203d82d8000000000000000000000000000000000000000000000000000000001d59ca82000000000000000000000000000000000000000000000000000000008a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b000000000000000000000000000000000000000000000000ffffffffffffffe00000000000000000000000000000000000000000000000000000000000030d402049973000000000000000000000000000000000000000000000000000000000a8137fff86647d8a402117b9c5dbda627f721d3773338fb9678c83e54ed39080d226f9d400000000000000000000000000000000000000000000000000000000ffffffff0000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000d505accf000000000000000000000000000000000000000000000000000000002c0198cc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670bc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc68b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f000000000000000000000000000000000000000000000000ffffffffffffff3f95d89b410000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000008c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9000000000000000000000000000000000000000000000000ffffffffffffff201901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffe9f000000000000000000000000000000000000000000000000fffffffffffffe005265656e7472616e637947756172643a207265656e7472616e742063616c6c0008c379a000000000000000000000000000000000000000000000000000000000abcef554000000000000000000000000000000000000000000000000000000004625a94d000000000000000000000000000000000000000000000000000000000a992e0c000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000040000000000000000000000000cf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a6cb568c100000000000000000000000000000000000000000000000000000000beabacc800000000000000000000000000000000000000000000000000000000f7888aec000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000ffffffffffffffffff000000000000000000000000000000000000000000000000000000ffffffffff000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000

[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.