library SafeMath {

    /**
    * @dev 两个数字乘法，抛出溢出。
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
    }

    /**
    * @dev 两个数字的整数除法。
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // 值为0时自动抛出
        uint256 c = a / b;
        // assert(a == b * c + a % b); // 否则不成立
        return c;
    }

    /**
    * @dev 两个数字的减法，如果减数大于被减数，则溢出抛出。
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

    /**
    * @dev 两个数字的加法，向上溢出抛出
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
}
/**
 * @title SafeMath函数
 * @dev 安全的数学运算
 */
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
        return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
}

/**
 * @dev 两个数字乘法，抛出溢出。
 */