// SPDX-License-Identifier: UNLICENSED pragma solidity =0.8.18; library Percent { uint256 internal constant BASE_PERCENT = type(uint16).max; function isValidPercent(uint256 nb) internal pure returns (bool) { return nb <= BASE_PERCENT; } function validatePercent(uint256 nb) internal pure { require(isValidPercent(nb), "Percent: INVALID_NUMBER"); } function applyPercent(uint256 nb, uint256 _percent) internal pure returns (uint256) { return (nb * _percent) / BASE_PERCENT; } function inverseApplyPercent(uint256 nb, uint256 _percent) internal pure returns (uint256) { return asPercent(nb) / (_percent); } function percentValueOf(uint256 value, uint256 total) internal pure returns (uint256) { return asPercent(value) / total; } function asPercent(uint256 value) internal pure returns (uint256) { return value * BASE_PERCENT; } }