#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wgnu-string-literal-operator-template" #include #include #if __cplusplus >= 202002L #define CONSTEVAL consteval #else #define CONSTEVAL constexpr #endif CONSTEVAL bool isPrime(std::size_t x) { if (x == 2 || x == 3) return true; if (x % 2 == 0 || x % 3 == 0) return false; std::size_t divisor = 6; while (divisor * divisor - 2 * divisor + 1 <= x) { if (x % (divisor - 1) == 0) return false; if (x % (divisor + 1) == 0) return false; divisor += 6; } return true; } CONSTEVAL std::size_t nextPrime(std::size_t x) { while (!isPrime(x)) ++x; return x; } template class InlineObfs { private: char inner[sizeof...(cs) + 1]; public: inline InlineObfs() : inner{cs..., '\0'} { for (std::size_t i = 0; i < sizeof...(cs); ++i) { inner[i] ^= (i + sizeof...(cs)) % nextPrime(sizeof...(cs)); } } constexpr const char *c_str() const { return inner; } constexpr std::size_t size() const { return sizeof...(cs); } operator std::string_view() const { return {inner}; } }; template constexpr inline auto MakeInlineObfs(std::index_sequence) { return InlineObfs<(is ^ ((I + sizeof...(is)) % nextPrime(sizeof...(is))))...>(); } template class StaticObfs { public: CONSTEVAL StaticObfs() = default; constexpr auto obtain() const { return MakeInlineObfs(std::make_index_sequence()); } }; template constexpr inline auto operator ""_iobfs() { return MakeInlineObfs(std::make_index_sequence()); } template CONSTEVAL inline auto operator ""_sobfs() { return StaticObfs{}; } template CONSTEVAL inline auto operator+(const StaticObfs &, const StaticObfs &) { return StaticObfs{}; } #pragma clang diagnostic pop