diff --git a/.gitignore b/.gitignore
index fb151df..d8b9535 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,5 @@
-.vs/
-
-bin/
+.vs/*
+.idea/*
*/x64
*/obj
@@ -9,15 +8,11 @@ bin/
*.lib
*.dll
*.pdb
+*.obj
-*/Debug
-*/Release
-
-*/*/obj/*
-
-tools/PacketGenerator/generated
+[Bb]inaries/*
+[Tt]ools/PacketGenerator/generated
*Server
*Client
-*.sln
-*.sln
+*.sln
\ No newline at end of file
diff --git a/.gitmodules b/.gitmodules
index 71e3017..1a47a01 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,6 +1,6 @@
-[submodule "lib/netcpp"]
- path = lib/netcpp
+[submodule "Libraries/netcpp"]
+ path = Libraries/netcpp
url = https://github.com/index1207/netcpp
-[submodule "lib/oneTBB"]
- path = lib/oneTBB
- url = https://github.com/oneapi-src/oneTBB
+[submodule "Libraries/oneTBB"]
+ path = Libraries/oneTBB
+ url = https://github.com/oneapi-src/oneTBB
\ No newline at end of file
diff --git a/Connector/ConnectorPlusPlus/ConnectorPlusPlus.vcxproj b/Connector/ConnectorPlusPlus/ConnectorPlusPlus.vcxproj
deleted file mode 100644
index 2987129..0000000
--- a/Connector/ConnectorPlusPlus/ConnectorPlusPlus.vcxproj
+++ /dev/null
@@ -1,176 +0,0 @@
-
-
-
-
- Debug
- Win32
-
-
- Release
- Win32
-
-
- Debug
- x64
-
-
- Release
- x64
-
-
-
-
-
-
-
-
-
-
-
- 17.0
- Win32Proj
- {D0BACE1E-22B6-4AF1-90BD-1982A4EB3209}
- ConnectorPlusPlus
- 10.0
-
-
-
- StaticLibrary
- true
- v143
- Unicode
-
-
- StaticLibrary
- false
- v143
- true
- Unicode
-
-
- StaticLibrary
- true
- v143
- Unicode
-
-
- StaticLibrary
- false
- v143
- true
- Unicode
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $(SolutionDir)bin\$(Configuration)\
- $(SolutionDir)bin\$(Configuration)\obj\$(ProjectName)\
- Connector++
-
-
- $(SolutionDir)bin\$(Configuration)\
- $(SolutionDir)bin\$(Configuration)\obj\$(ProjectName)\
- Connector++
-
-
- $(SolutionDir)bin\$(Configuration)\
- $(SolutionDir)bin\$(Configuration)\obj\$(ProjectName)\
- Connector++
-
-
- $(SolutionDir)bin\$(Configuration)\
- $(SolutionDir)bin\$(Configuration)\obj\$(ProjectName)\
- Connector++
-
-
-
- Level3
- true
- WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- $(SolutionDir)SvEngine\include;$(SolutionDir)lib\netcpp\include;$(ProjectDir)include;%(AdditionalIncludeDirectories)
- stdcpp20
-
-
- Console
- true
- $(SolutionDir)bin\$(Configuration);$(SolutionDir)lib\bin\$(Configuration);%(AdditionalLibraryDirectories)
- SvEngine.lib;netcpp.lib;ws2_32.lib;%(AdditionalDependencies)
-
-
-
-
- Level3
- true
- true
- true
- WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- $(SolutionDir)SvEngine\include;$(SolutionDir)lib\netcpp\include;$(ProjectDir)include;%(AdditionalIncludeDirectories)
- stdcpp20
-
-
- Console
- true
- true
- true
- $(SolutionDir)bin\$(Configuration);$(SolutionDir)lib\bin\$(Configuration);%(AdditionalLibraryDirectories)
- SvEngine.lib;netcpp.lib;ws2_32.lib;%(AdditionalDependencies)
-
-
-
-
- Level3
- true
- _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- $(SolutionDir)SvEngine\include;$(SolutionDir)lib\netcpp\include;$(ProjectDir)include;%(AdditionalIncludeDirectories)
- stdcpp20
-
-
- Console
- true
- $(SolutionDir)bin\$(Configuration);$(SolutionDir)lib\bin\$(Configuration);%(AdditionalLibraryDirectories)
- SvEngine.lib;netcpp.lib;ws2_32.lib;%(AdditionalDependencies)
-
-
-
-
- Level3
- true
- true
- true
- NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- $(SolutionDir)SvEngine\include;$(SolutionDir)lib\netcpp\include;$(ProjectDir)include;%(AdditionalIncludeDirectories)
- stdcpp20
-
-
- Console
- true
- true
- true
- $(SolutionDir)bin\$(Configuration);$(SolutionDir)lib\bin\$(Configuration);%(AdditionalLibraryDirectories)
- SvEngine.lib;netcpp.lib;ws2_32.lib;%(AdditionalDependencies)
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Connector/ConnectorPlusPlus/ConnectorPlusPlus.vcxproj.filters b/Connector/ConnectorPlusPlus/ConnectorPlusPlus.vcxproj.filters
deleted file mode 100644
index 84e9abf..0000000
--- a/Connector/ConnectorPlusPlus/ConnectorPlusPlus.vcxproj.filters
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
-
-
- {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
- rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
-
-
-
-
- 소스 파일
-
-
- 소스 파일
-
-
-
-
- 헤더 파일
-
-
- 헤더 파일
-
-
-
\ No newline at end of file
diff --git a/Connector/ConnectorPlusPlus/ConnectorPlusPlus.vcxproj.user b/Connector/ConnectorPlusPlus/ConnectorPlusPlus.vcxproj.user
deleted file mode 100644
index 966b4ff..0000000
--- a/Connector/ConnectorPlusPlus/ConnectorPlusPlus.vcxproj.user
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
- true
-
-
\ No newline at end of file
diff --git a/Connector/ConnectorPlusPlus/include/Client.hpp b/Connector/ConnectorPlusPlus/include/Client.hpp
deleted file mode 100644
index e69de29..0000000
diff --git a/Connector/ConnectorPlusPlus/include/Session.hpp b/Connector/ConnectorPlusPlus/include/Session.hpp
deleted file mode 100644
index 58aa5c0..0000000
--- a/Connector/ConnectorPlusPlus/include/Session.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-#pragma once
-
-#include
-#include
-
-#include "net/Context.hpp"
-
-using namespace net;
-
-namespace sv {
- class Packet;
-
- enum class Failure
- {
- None,
- Connect
- };
-
- class Session : public std::enable_shared_from_this
- {
- friend class Server;
- using ServerFactory = std::function()>;
- public:
- Session();
- virtual ~Session();
- public:
- void Run(std::unique_ptr sock);
- Socket GetSocket();
- public:
- void Disconnect();
- void Send(std::span buffer);
- public:
- virtual void OnConnected() {};
- virtual void OnDisconnected() {};
- virtual void OnReceive(std::span buffer, int length) {};
- virtual void OnFail(Failure cause) {};
- protected:
- std::unique_ptr m_sock;
- private:
- void OnRecvCompleted(Context *context, bool isSuccess);
- private:
- std::shared_ptr m_ref; // TEMP
- std::vector m_buffer;
- net::Context m_recvCtx;
- std::atomic m_isDisconnected;
- };
-}
\ No newline at end of file
diff --git a/Connector/ConnectorPlusPlus/src/Client.cpp b/Connector/ConnectorPlusPlus/src/Client.cpp
deleted file mode 100644
index e69de29..0000000
diff --git a/Connector/ConnectorPlusPlus/src/Session.cpp b/Connector/ConnectorPlusPlus/src/Session.cpp
deleted file mode 100644
index 1a9ee21..0000000
--- a/Connector/ConnectorPlusPlus/src/Session.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-#include "Session.hpp"
-
-#include "net/Context.hpp"
-#include "net/Exception.hpp"
-
-using namespace sv;
-
-Session::Session() : m_buffer(1024, '\0') {
-}
-
-void Session::Run(std::unique_ptr sock) {
- m_sock = std::move(sock);
-
- m_recvCtx.completed = bind(&Session::OnRecvCompleted, this, std::placeholders::_1, std::placeholders::_2);
- m_recvCtx.buffer = m_buffer;
-
- m_sock->receive(&m_recvCtx);
- m_ref = shared_from_this();
-}
-
-void Session::OnRecvCompleted(Context *context, bool isSuccess) {
- if(!isSuccess || context->length == 0) {
- Disconnect();
- return;
- }
- OnReceive(context->buffer.subspan(0, context->length), context->length);
- m_sock->receive(context);
-}
-
-Session::~Session() {
-}
-
-void Session::Disconnect() {
- if (!m_isDisconnected)
- {
- m_isDisconnected = true;
- OnDisconnected();
- m_ref = nullptr;
- }
-}
-
-void Session::Send(std::span buffer) {
- std::lock_guard lock(m_mtx);
- if (!m_sock->send(buffer)) {
- throw net::network_error("send()");
- }
-}
-
-Socket Session::GetSocket() {
- return *m_sock;
-}
\ No newline at end of file
diff --git a/Connector/ConnectorSharp/Connector.cs b/Connector/ConnectorSharp/Connector.cs
deleted file mode 100644
index 5a123d4..0000000
--- a/Connector/ConnectorSharp/Connector.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Net;
-using System.Net.Sockets;
-using System.Threading;
-
-namespace Sv
-{
- public enum FailCause
- {
- Connect
- }
- public class Connector
- {
- private Socket m_socket;
- public Action OnConnect { get; set; } = (_) => { };
- public Action OnDisconnect { get; set; } = () => { };
- public Action OnReceive { get; set; } = (_) => { };
- public Action OnFail { get; set; } = (_) => { };
-
- int _isDisconnected;
- private SocketAsyncEventArgs _recvEvent;
-
- object _lock = new object();
-
- public Connector()
- {
- m_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
-
- _recvEvent = new SocketAsyncEventArgs();
- _recvEvent.Completed += (object sender, SocketAsyncEventArgs args) =>
- {
- if(args.SocketError == SocketError.Success)
- {
- Message msg = new Message();
- msg.RawData = args.Buffer;
- msg.Length = args.BytesTransferred;
- OnReceive(msg);
-
- m_socket.ReceiveAsync(args);
- }
- else
- {
- OnDisconnect();
- }
- };
- _recvEvent.SetBuffer(new byte[1024], 0, 1024);
-
- OnConnect += (_) => m_socket.ReceiveAsync(_recvEvent);
-
- _isDisconnected = 0;
- }
-
- public void Connect(IPEndPoint endpoint)
- {
- SocketAsyncEventArgs args = new SocketAsyncEventArgs();
- args.RemoteEndPoint = endpoint;
- args.Completed += (object sender, SocketAsyncEventArgs connectArgs) =>
- {
- if(connectArgs.SocketError == SocketError.Success)
- {
- OnConnect(connectArgs.RemoteEndPoint);
- }
- else
- {
- OnFail(FailCause.Connect);
- }
- };
- m_socket.ConnectAsync(args);
- }
-
- public void Send(byte[] buffer)
- {
- lock (_lock)
- {
- m_socket.Send(buffer);
- }
- }
-
- public void Disconnect()
- {
- if (Interlocked.Exchange(ref _isDisconnected, 1) == 0)
- {
- m_socket.Disconnect(false);
- }
- }
- }
-}
diff --git a/Connector/ConnectorSharp/ConnectorSharp.csproj b/Connector/ConnectorSharp/ConnectorSharp.csproj
deleted file mode 100644
index ab5db8c..0000000
--- a/Connector/ConnectorSharp/ConnectorSharp.csproj
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
- Library
- netcoreapp3.0
- false
- $(SolutionDir)bin\
-
-
-
diff --git a/Connector/ConnectorSharp/Message.cs b/Connector/ConnectorSharp/Message.cs
deleted file mode 100644
index 55f8884..0000000
--- a/Connector/ConnectorSharp/Message.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Sv
-{
- public class Message
- {
- public byte[] RawData { get; set; }
- public int Length { get; set; }
- }
-}
diff --git a/Connector/ConnectorSharp/Packet.cs b/Connector/ConnectorSharp/Packet.cs
deleted file mode 100644
index 617c53f..0000000
--- a/Connector/ConnectorSharp/Packet.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
-using System.Text;
-
-namespace Sv
-{
- class Packet
- {
- private ushort m_id = 0;
- private ushort m_size = 0;
-
- protected ushort m_writeOffset = 0;
- protected ushort m_readOffset = 0;
- protected byte[] m_buffer;
-
- public ushort Id => m_id;
- public ushort Size => m_size;
-
- public Packet(ushort id)
- {
- m_buffer = new byte[1024];
-
- BitConverter.TryWriteBytes(new Span(m_buffer, 0, sizeof(ushort)), id);
- m_writeOffset += sizeof(ushort) + sizeof(ushort); // id + size
- }
-
- public void Finish()
- {
- BitConverter.TryWriteBytes(new Span(m_buffer, 2, sizeof(ushort)), m_writeOffset);
- }
-
- virtual protected void Write() { }
- virtual protected void Read()
- {
- m_id = BitConverter.ToUInt16(m_buffer, m_readOffset);
- m_readOffset += sizeof(ushort);
- m_size = BitConverter.ToUInt16(m_buffer, m_readOffset);
- m_readOffset += sizeof(ushort);
- }
- }
-}
diff --git a/Connector/ConnectorSharp/Test.gen.cs b/Connector/ConnectorSharp/Test.gen.cs
deleted file mode 100644
index e69de29..0000000
diff --git a/SvEngine/PCH/pch.cpp b/Core/PCH/pch.cpp
similarity index 100%
rename from SvEngine/PCH/pch.cpp
rename to Core/PCH/pch.cpp
diff --git a/SvEngine/PCH/pch.h b/Core/PCH/pch.h
similarity index 100%
rename from SvEngine/PCH/pch.h
rename to Core/PCH/pch.h
diff --git a/Core/SvEngine.vcxproj b/Core/SvEngine.vcxproj
new file mode 100644
index 0000000..8cb9b5f
--- /dev/null
+++ b/Core/SvEngine.vcxproj
@@ -0,0 +1,167 @@
+
+
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+
+ AnyCPU
+
+
+
+ 17.0
+ Win32Proj
+ {0e19d820-b6be-4d23-805b-aad9ef0eea69}
+ SvEngine
+ 10.0
+
+
+
+ DynamicLibrary
+ true
+ v143
+ Unicode
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ Unicode
+
+
+ v143
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)Binaries\$(Configuration)\
+ $(SolutionDir)Binaries\$(Configuration)\obj\$(ProjectName)\
+ svengine
+
+
+ $(SolutionDir)Binaries\$(Configuration)\
+ $(SolutionDir)Binaries\$(Configuration)\obj\$(ProjectName)\
+ svengine
+
+
+
+ Level4
+ true
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions);_HAS_STD_BYTE=0;EXPORT_DLL
+ true
+ stdcpp20
+ $(ProjectDir)include;$(ProjectDir)PCH;$(SolutionDir)Libraries\netcpp\include;$(SolutionDir)Libraries\oneTBB\include;$(SolutionDir)Libraries\mysql-connector\include\jdbc;%(AdditionalIncludeDirectories)
+ true
+ Use
+ pch.h
+ MultiThreadedDebugDLL
+ 4251
+
+
+ Console
+ true
+ $(SolutionDir)Binaries\$(Configuration)
+ ws2_32.lib;netcpp.lib;mysqlcppconn.lib;%(AdditionalDependencies)
+
+
+ $(SolutionDir)Binaries\$(Configuration)\;%(AdditionalLibraryDirectories)
+ netcpp.lib;tbb12_debug.lib;odbc32.lib;%(AdditionalDependencies)
+
+
+
+
+ Level4
+ true
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions);_HAS_STD_BYTE=0;EXPORT_DLL
+ true
+ stdcpp20
+ $(ProjectDir)include;$(ProjectDir)PCH;$(SolutionDir)Libraries\netcpp\include;$(SolutionDir)Libraries\oneTBB\include;$(SolutionDir)Libraries\mysql-connector\include\jdbc;%(AdditionalIncludeDirectories)
+ true
+ Use
+ pch.h
+ MultiThreadedDLL
+ None
+ 4251
+
+
+ Console
+ true
+ true
+ false
+ $(SolutionDir)Binaries\$(Configuration)
+ ws2_32.lib;netcpp.lib;mysqlcppconn.lib;%(AdditionalDependencies)
+
+
+ $(SolutionDir)Binaries\$(Configuration)\;%(AdditionalLibraryDirectories)
+ netcpp.lib;tbb12.lib;odbc32.lib;%(AdditionalDependencies)
+
+
+
+
+
+
+
+
+
+
+
+
+ Create
+ Create
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SvEngine/SvEngine.vcxproj.filters b/Core/SvEngine.vcxproj.filters
similarity index 80%
rename from SvEngine/SvEngine.vcxproj.filters
rename to Core/SvEngine.vcxproj.filters
index 1fb8fe7..6ef43f6 100644
--- a/SvEngine/SvEngine.vcxproj.filters
+++ b/Core/SvEngine.vcxproj.filters
@@ -17,13 +17,7 @@
src\util
-
-
-
-
-
-
@@ -31,6 +25,8 @@
+
+
@@ -68,18 +64,12 @@
include\core
-
+ include\util
-
-
-
-
-
-
@@ -89,5 +79,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/SvEngine/SvEngine.vcxproj.user b/Core/SvEngine.vcxproj.user
similarity index 70%
rename from SvEngine/SvEngine.vcxproj.user
rename to Core/SvEngine.vcxproj.user
index 76ff616..8d1b202 100644
--- a/SvEngine/SvEngine.vcxproj.user
+++ b/Core/SvEngine.vcxproj.user
@@ -7,16 +7,24 @@
$(SolutionDir)lib\bin\$(Configuration)WindowsLocalDebugger
+
+ $(SolutionDir)lib\bin\$(Configuration)
+ WindowsLocalDebugger
+ $(SolutionDir)lib\bin\$(Configuration)WindowsLocalDebugger
+ $(SolutionDir)Binaries\$(Configuration)
+ WindowsLocalDebugger
+
+ $(SolutionDir)lib\bin\$(Configuration)WindowsLocalDebugger
- $(SolutionDir)lib\bin\$(Configuration)
+ $(SolutionDir)Binaries\$(Configuration)WindowsLocalDebugger
\ No newline at end of file
diff --git a/SvEngine/include/CoreHeader.hpp b/Core/include/CoreHeader.hpp
similarity index 84%
rename from SvEngine/include/CoreHeader.hpp
rename to Core/include/CoreHeader.hpp
index 76ac8ee..a5df3e6 100644
--- a/SvEngine/include/CoreHeader.hpp
+++ b/Core/include/CoreHeader.hpp
@@ -1,10 +1,11 @@
#pragma once
+#include "Macro.hpp"
+#include "Types.hpp"
+
#include
#include
-#include "Util/Types.hpp"
-
#include
#include
@@ -17,11 +18,12 @@
#include "Util/String.hpp"
#include "Util/Random.hpp"
#include "util/Math.hpp"
-#include "Thread/TLSStorage.hpp"
#include "Network/Packet.hpp"
-#include "Subsystem/Engine.hpp"
#include "Memory/Arena.hpp"
#include "Memory/ObjectPool.hpp"
+#include "Subsystem/Engine.hpp"
+#include "Subsystem/Database.hpp"
+
using namespace net;
\ No newline at end of file
diff --git a/Core/include/Functor.hpp b/Core/include/Functor.hpp
new file mode 100644
index 0000000..87b089f
--- /dev/null
+++ b/Core/include/Functor.hpp
@@ -0,0 +1,53 @@
+#pragma once
+
+#include "Subsystem/Engine.hpp"
+
+using CallbackType = std::function;
+
+class SVENGINE_API Functor
+{
+ USE_POOL(Functor)
+public:
+ Functor() = default;
+ ~Functor() noexcept;
+
+ Functor(CallbackType functor);
+
+ template
+ Functor(void(T::*method)(Args...), T* ptr, Args... args)
+ {
+ functor = std::bind(method, ptr, args...);
+ }
+public:
+ inline void operator()() const { functor(); }
+private:
+ CallbackType functor;
+};
+
+class SVENGINE_API DelayedFunctor
+{
+public:
+ DelayedFunctor() = default;
+ DelayedFunctor(uint64 execTime, std::shared_ptr functor);
+public:
+ bool operator<(const DelayedFunctor& other) const;
+ bool operator>(const DelayedFunctor& other) const;
+public:
+ uint64 execTime;
+ std::shared_ptr functor;
+};
+
+class SVENGINE_API FunctorProcessor
+{
+public:
+ FunctorProcessor() = default;
+public:
+ void Push(std::shared_ptr functor);
+ void Push(uint64 delay, std::shared_ptr functor);
+public:
+ void Flush();
+ void Fetch();
+private:
+ ConcurrencyQueue> m_functorQue;
+ ConcurrencyPriorityQueue> m_delayedFuncQue;
+};
\ No newline at end of file
diff --git a/SvEngine/include/GameFramework/Vector.hpp b/Core/include/GameFramework/Vector.hpp
similarity index 97%
rename from SvEngine/include/GameFramework/Vector.hpp
rename to Core/include/GameFramework/Vector.hpp
index 533825c..9e3c809 100644
--- a/SvEngine/include/GameFramework/Vector.hpp
+++ b/Core/include/GameFramework/Vector.hpp
@@ -16,7 +16,7 @@ class Vector2D
Vector2D Normalize()
{
const auto len = Length();
- return Vector2D(x / len, y / len);
+ return Vector2D(static_cast(x / len), static_cast(y / len));
}
void operator+=(Vector2D&& v) noexcept
{
@@ -91,8 +91,8 @@ class Vector2D
static Vector2D Left() noexcept { return Vector2D(-1, 0); }
static Vector2D Right() noexcept { return Vector2D(1, 0); }
public:
- T x;
- T y;
+ mutable T x;
+ mutable T y;
};
template
diff --git a/Core/include/Macro.hpp b/Core/include/Macro.hpp
new file mode 100644
index 0000000..7a74abb
--- /dev/null
+++ b/Core/include/Macro.hpp
@@ -0,0 +1,23 @@
+#pragma once
+
+#ifdef EXPORT_DLL
+ #define SVENGINE_API __declspec(dllexport)
+#else
+ #define SVENGINE_API __declspec(dllimport)
+#endif
+
+#define CRASH() \
+{ \
+ int* crash = nullptr; \
+ __analysis_assume(crash != nullptr); \
+ *crash = 0xDEAD; \
+}
+#define ASSERT_CRASH(expr) \
+{ \
+ if(!(expr)) \
+ { \
+ CRASH(); \
+ __analysis_assume(expr); \
+ } \
+}
+#define MAKE_LOG_CATEGORY(name) namespace Category { static String name(L#name); }
\ No newline at end of file
diff --git a/SvEngine/include/Memory/Arena.hpp b/Core/include/Memory/Arena.hpp
similarity index 98%
rename from SvEngine/include/Memory/Arena.hpp
rename to Core/include/Memory/Arena.hpp
index 3d34cc5..2cbf2cb 100644
--- a/SvEngine/include/Memory/Arena.hpp
+++ b/Core/include/Memory/Arena.hpp
@@ -1,7 +1,7 @@
#pragma once
template
-class Arena
+class SVENGINE_API Arena
{
static constexpr size_t alignment = alignof(std::max_align_t);
public:
diff --git a/SvEngine/include/Memory/ObjectPool.hpp b/Core/include/Memory/ObjectPool.hpp
similarity index 100%
rename from SvEngine/include/Memory/ObjectPool.hpp
rename to Core/include/Memory/ObjectPool.hpp
diff --git a/SvEngine/include/Network/Client.hpp b/Core/include/Network/Client.hpp
similarity index 60%
rename from SvEngine/include/Network/Client.hpp
rename to Core/include/Network/Client.hpp
index 6855322..1add439 100644
--- a/SvEngine/include/Network/Client.hpp
+++ b/Core/include/Network/Client.hpp
@@ -4,8 +4,8 @@
#include "Session.hpp"
-class Client {
- using ServerFactory = std::function()>;
+class SVENGINE_API Client {
+ using ServerFactory = std::function;
Client();
public:
@@ -14,13 +14,13 @@ class Client {
void Run(net::Endpoint endpoint);
public:
template
- static inline std::shared_ptr Open()
+ static inline std::unique_ptr Open()
{
- auto client = std::shared_ptr(new Client);
+ auto client = std::unique_ptr(new Client);
client->m_serverFactory = [] {
- return MakeShared();
+ return new T();
};
- return client;
+ return std::move(client);
}
private:
void OnConnectCompleted(Context* context, bool isSuccess);
diff --git a/SvEngine/include/Network/Packet.hpp b/Core/include/Network/Packet.hpp
similarity index 92%
rename from SvEngine/include/Network/Packet.hpp
rename to Core/include/Network/Packet.hpp
index 31609b2..2222313 100644
--- a/SvEngine/include/Network/Packet.hpp
+++ b/Core/include/Network/Packet.hpp
@@ -14,7 +14,7 @@ enum PacketType : uint8
RPC
};
-class Packet {
+class SVENGINE_API Packet {
friend Session;
using HandlerFunc = std::function)>;
public:
@@ -80,12 +80,14 @@ class Packet {
public:
void Parse(std::span buffer);
+ static uint16 GetPacketId(std::span buffer);
+
template
- static std::shared_ptr ParseFrom(std::span buffer, uint16 id)
+ static std::shared_ptr ParseFrom(std::span buffer)
{
auto pk = MakeShared();
pk->Parse(buffer);
- pk->SetId(id);
+ pk->SetId(GetPacketId(buffer));
return pk;
}
Vector& Data();
diff --git a/SvEngine/include/Network/Server.hpp b/Core/include/Network/Server.hpp
similarity index 67%
rename from SvEngine/include/Network/Server.hpp
rename to Core/include/Network/Server.hpp
index 90383b1..2656fbf 100644
--- a/SvEngine/include/Network/Server.hpp
+++ b/Core/include/Network/Server.hpp
@@ -6,9 +6,9 @@
#include
-class Server {
+class SVENGINE_API Server {
friend class Session;
- using ClientFactory = std::function()>;
+ using ClientFactory = std::function;
Server();
public:
~Server();
@@ -17,13 +17,13 @@ class Server {
void Cancel();
public:
template
- static inline std::shared_ptr Open()
+ static inline std::unique_ptr Open()
{
- auto server = std::shared_ptr(new Server);
+ auto server = std::unique_ptr(new Server);
server->m_clientFactory = [] {
- return MakeShared();
+ return new T();
};
- return server;
+ return std::move(server);
}
private:
void OnAcceptCompleted(net::Context* acceptContext, bool isSuccess);
diff --git a/SvEngine/include/Network/Session.hpp b/Core/include/Network/Session.hpp
similarity index 77%
rename from SvEngine/include/Network/Session.hpp
rename to Core/include/Network/Session.hpp
index 9db0e25..8b9edd4 100644
--- a/SvEngine/include/Network/Session.hpp
+++ b/Core/include/Network/Session.hpp
@@ -16,11 +16,10 @@ enum class Failure
Connect
};
-class Session : public std::enable_shared_from_this
+class SVENGINE_API Session
{
friend class Server;
friend class Client;
- using ServerFactory = std::function()>;
USE_ARENA()
public:
@@ -28,10 +27,10 @@ class Session : public std::enable_shared_from_this
virtual ~Session();
public:
void Run(std::shared_ptr sock);
- Socket GetSocket();
+ std::shared_ptr GetSocket();
public:
void Disconnect();
- void SendUnsafe(std::span buffer);
+ void SendUnsafe(std::span buffer) const;
void SendAtomic(std::span buffer);
void Send(Packet* packet, bool unsafe = false);
public:
@@ -45,11 +44,8 @@ class Session : public std::enable_shared_from_this
void OnRecvCompleted(Context* context, bool isSuccess);
void OnSendCompleted(Context* context, bool isSuccess);
private:
- std::shared_ptr m_ref; // TEMP
-
std::vector m_buffer;
net::Context m_recvCtx;
net::Context m_sendCtx;
std::atomic m_isSending;
- std::atomic m_isDisconnected;
};
\ No newline at end of file
diff --git a/Core/include/Subsystem/Database.hpp b/Core/include/Subsystem/Database.hpp
new file mode 100644
index 0000000..4fc019f
--- /dev/null
+++ b/Core/include/Subsystem/Database.hpp
@@ -0,0 +1,159 @@
+#pragma once
+#include
+#include
+
+#include "cppconn/driver.h"
+#include "cppconn/prepared_statement.h"
+#include "cppconn/resultset.h"
+
+#include "Functor.hpp"
+
+class AsyncStatement;
+
+class SVENGINE_API Database
+{
+ friend AsyncStatement;
+public:
+ Database();
+ ~Database();
+public:
+ void Initialize();
+public:
+ void SetDatabaseProfile(StringView username, StringView password, StringView dbname);
+ void CreateConnection();
+
+ template
+ std::unique_ptr CreateStatement(const char* formattedSql, Args... args)
+ {
+ auto conn = PopConnection();
+
+ auto pstmt = std::shared_ptr(
+ static_cast(conn->prepareStatement(
+ std::format(formattedSql, args...)
+ ))
+ );
+ return pstmt;
+ }
+
+ template
+ std::unique_ptr CallProcedure(const char* procedure, Args... args)
+ {
+ auto conn = PopConnection();
+
+ try {
+ auto pstmt = std::unique_ptr(
+ static_cast(conn->prepareStatement(
+ std::format("CALL {}({})",
+ procedure, concatenate(args...)
+ )
+ ))
+ );
+ return pstmt;
+ }
+ catch (std::exception& e)
+ {
+ Console::Error(Category::Database, ToUnicodeString(e.what()));
+ return nullptr;
+ }
+ }
+private:
+ std::shared_ptr PopConnection();
+ void ReturnConnection(sql::Connection* conn);
+private:
+ template
+ struct is_string
+ : std::false_type
+ {};
+
+ template
+ struct is_string>
+ : std::true_type
+ {};
+
+ template
+ void concatArgs(std::stringstream& ss, T first, Args... args) {
+ if constexpr (is_string::value)
+ first = std::format("'{}'", first);
+ ss << first;
+ if constexpr (sizeof...(args) > 0) {
+ ss << ", ";
+ concatArgs(ss, args...);
+ }
+ }
+
+ template
+ std::string concatenate(Args... args) {
+ std::stringstream ss;
+ concatArgs(ss, args...);
+ return ss.str();
+ }
+private:
+ String m_dbUserName;
+ String m_dbPwd;
+ String m_dbName;
+ uint32 m_maxConnectionCount = 10;
+ sql::Driver* m_driver;
+ List> m_connections;
+ bool m_destroyed;
+};
+
+extern Database* GDatabase;
+
+class AsyncStatement : public sql::PreparedStatement
+{
+public:
+ std::future AsyncExecute(std::function callback = [](bool) {})
+ {
+ return std::async(std::launch::async, [this, callback] {
+ try
+ {
+ auto res = this->execute();
+ callback(res);
+ return res;
+ }
+ catch (std::exception& e)
+ {
+ Console::Error(Category::Database, ToUnicodeString(e.what()));
+ ASSERT_CRASH(false);
+ return false;
+ }
+ });
+ }
+
+ std::future AsyncUpdate(std::function callback = [](int) {})
+ {
+ return std::async(std::launch::async, [this, callback] {
+ try
+ {
+ auto res = this->executeUpdate();
+ callback(res);
+ return res;
+ }
+ catch (std::exception& e)
+ {
+ Console::Error(Category::Database, ToUnicodeString(e.what()));
+ ASSERT_CRASH(false);
+ return 0;
+ }
+ });
+ }
+
+ std::future> AsyncQuery(std::function)> callback =
+ [](std::shared_ptr) {})
+ {
+ return std::async(std::launch::async, [this, callback] {
+ try
+ {
+ auto res = std::shared_ptr(this->executeQuery());
+ callback(res);
+ return res;
+ }
+ catch (std::exception& e)
+ {
+ Console::Error(Category::Database, ToUnicodeString(e.what()));
+ ASSERT_CRASH(false);
+ return static_cast>(nullptr);
+ }
+ });
+ }
+};
\ No newline at end of file
diff --git a/Core/include/Subsystem/Engine.hpp b/Core/include/Subsystem/Engine.hpp
new file mode 100644
index 0000000..71bb5af
--- /dev/null
+++ b/Core/include/Subsystem/Engine.hpp
@@ -0,0 +1,55 @@
+#pragma once
+
+#include "Functor.hpp"
+
+class SVENGINE_API Engine {
+ enum EngineOption
+ {
+ WorkTick = 10,
+ };
+public:
+ Engine();
+ ~Engine();
+public:
+ void Initialize();
+
+ void Run(int32 io);
+
+
+ template
+ void Launch(void(T::* method)(Args...), T* ptr, Args... args)
+ {
+ auto functor = MakeShared(method, ptr, args...);
+ m_funcProc->Push(functor);
+ }
+
+ template
+ void Launch(uint64 delay, void(T::* method)(Args...), T* ptr, Args... args)
+ {
+ auto functor = MakeShared(method, ptr, args...);
+ m_funcProc->Push(delay, functor);
+ }
+private:
+ void ProcessIo(int32 count);
+ void ProcessLogic();
+private:
+ std::unique_ptr m_funcProc;
+};
+
+extern Engine* GEngine;
+
+template
+struct Runnable
+{
+ template
+ void Run(void(T::* method)(Args...), Args... args)
+ {
+ GEngine->Launch(method, static_cast(this), args...);
+ }
+
+ template
+ void Run(uint64 delay, void(T::* method)(Args...), Args... args)
+ {
+ GEngine->Launch(delay, method, static_cast(this), args...);
+ }
+};
\ No newline at end of file
diff --git a/Core/include/Subsystem/GameInstance.hpp b/Core/include/Subsystem/GameInstance.hpp
new file mode 100644
index 0000000..8ea7863
--- /dev/null
+++ b/Core/include/Subsystem/GameInstance.hpp
@@ -0,0 +1,7 @@
+#pragma once
+
+class GameInstance
+{
+public:
+ virtual void Run() = 0;
+};
\ No newline at end of file
diff --git a/SvEngine/include/util/Types.hpp b/Core/include/Types.hpp
similarity index 83%
rename from SvEngine/include/util/Types.hpp
rename to Core/include/Types.hpp
index 0a0adfb..bbae5cf 100644
--- a/SvEngine/include/util/Types.hpp
+++ b/Core/include/Types.hpp
@@ -73,20 +73,4 @@ template
using ConcurrencyHashSet = tbb::concurrent_unordered_set;
using String = std::wstring;
-using StringView = std::wstring_view;
-
-#define CRASH() \
-{ \
- int* crash = nullptr; \
- __analysis_assume(crash != nullptr); \
- *crash = 0xDEAD; \
-}
-#define ASSERT_CRASH(expr) \
-{ \
- if(!(expr)) \
- { \
- CRASH(); \
- __analysis_assume(expr); \
- } \
-}
-#define MAKE_LOG_CATEGORY(name) namespace Category { static String name(L#name); }
\ No newline at end of file
+using StringView = std::wstring_view;
\ No newline at end of file
diff --git a/SvEngine/include/util/Console.hpp b/Core/include/Util/Console.hpp
similarity index 97%
rename from SvEngine/include/util/Console.hpp
rename to Core/include/Util/Console.hpp
index 9012196..5492c0f 100644
--- a/SvEngine/include/util/Console.hpp
+++ b/Core/include/Util/Console.hpp
@@ -46,7 +46,7 @@ enum EncodingType {
UTF8,
};
-class Console {
+class SVENGINE_API Console {
friend class Engine;
static void Initialize();
diff --git a/SvEngine/include/util/File.hpp b/Core/include/Util/File.hpp
similarity index 89%
rename from SvEngine/include/util/File.hpp
rename to Core/include/Util/File.hpp
index 611ea5e..01fe5bc 100644
--- a/SvEngine/include/util/File.hpp
+++ b/Core/include/Util/File.hpp
@@ -4,7 +4,7 @@
namespace fs = std::filesystem;
-class File
+class SVENGINE_API File
{
public:
File(StringView path);
diff --git a/SvEngine/include/util/Math.hpp b/Core/include/Util/Math.hpp
similarity index 89%
rename from SvEngine/include/util/Math.hpp
rename to Core/include/Util/Math.hpp
index 23588aa..3f20f36 100644
--- a/SvEngine/include/util/Math.hpp
+++ b/Core/include/Util/Math.hpp
@@ -1,6 +1,6 @@
#pragma once
-class Math
+class SVENGINE_API Math
{
public:
static float Round(float x, int32 p = 0);
diff --git a/SvEngine/include/util/Parser/Ini.hpp b/Core/include/Util/Parser/Ini.hpp
similarity index 94%
rename from SvEngine/include/util/Parser/Ini.hpp
rename to Core/include/Util/Parser/Ini.hpp
index 2fc0a8b..a6a105f 100644
--- a/SvEngine/include/util/Parser/Ini.hpp
+++ b/Core/include/Util/Parser/Ini.hpp
@@ -2,9 +2,9 @@
#include "CoreHeader.hpp"
-class Ini
+class SVENGINE_API Ini
{
- class Section
+ class SVENGINE_API Section
{
public:
Section(StringView filename, StringView section);
diff --git a/SvEngine/include/util/Random.hpp b/Core/include/Util/Random.hpp
similarity index 93%
rename from SvEngine/include/util/Random.hpp
rename to Core/include/Util/Random.hpp
index 8565aa4..a672535 100644
--- a/SvEngine/include/util/Random.hpp
+++ b/Core/include/Util/Random.hpp
@@ -2,7 +2,7 @@
#include
-class Random
+class SVENGINE_API Random
{
public:
template
diff --git a/Core/include/Util/String.hpp b/Core/include/Util/String.hpp
new file mode 100644
index 0000000..898616f
--- /dev/null
+++ b/Core/include/Util/String.hpp
@@ -0,0 +1,14 @@
+#pragma once
+
+#include "Types.hpp"
+#include
+
+SVENGINE_API String ToUnicodeString(std::string_view str);
+
+SVENGINE_API std::string ToAnsiString(StringView str);
+
+SVENGINE_API String UUIDv4() noexcept;
+
+SVENGINE_API String Timestamp();
+
+SVENGINE_API Vector Split(StringView str, WCHAR del);
\ No newline at end of file
diff --git a/SvEngine/include/util/Template.hpp b/Core/include/Util/Template.hpp
similarity index 64%
rename from SvEngine/include/util/Template.hpp
rename to Core/include/Util/Template.hpp
index 1139145..d6f95a8 100644
--- a/SvEngine/include/util/Template.hpp
+++ b/Core/include/Util/Template.hpp
@@ -1,5 +1,4 @@
#pragma once
-
#include
#include
@@ -23,4 +22,16 @@ static inline std::shared_ptr MakeShared(const size_t size)
{
using Ty = PeelArrayType::type;
return std::shared_ptr(new Ty[size]);
+}
+
+template requires std::is_class_v
+static inline std::unique_ptr MakeUnique(Args&&... args)
+{
+ return std::unique_ptr(new T(std::forward(args)...));
+}
+template requires std::is_unbounded_array_v
+static inline std::unique_ptr MakeUnique(const size_t size)
+{
+ using Ty = PeelArrayType::type;
+ return std::unique_ptr(new Ty[size]);
}
\ No newline at end of file
diff --git a/Core/src/Functor.cpp b/Core/src/Functor.cpp
new file mode 100644
index 0000000..dcaf417
--- /dev/null
+++ b/Core/src/Functor.cpp
@@ -0,0 +1,66 @@
+#include "pch.h"
+#include "Functor.hpp"
+
+Functor::~Functor() noexcept
+{
+}
+
+Functor::Functor(CallbackType functor)
+{
+ functor = functor;
+}
+
+DelayedFunctor::DelayedFunctor(uint64 execTime, std::shared_ptr functor)
+ : execTime(execTime), functor(functor)
+{
+}
+
+bool DelayedFunctor::operator<(const DelayedFunctor& other) const
+{
+ return execTime < other.execTime;
+}
+
+bool DelayedFunctor::operator>(const DelayedFunctor& other) const
+{
+ return execTime > other.execTime;
+}
+
+void FunctorProcessor::Push(std::shared_ptr functor)
+{
+ m_functorQue.push(functor);
+}
+
+void FunctorProcessor::Push(uint64 delay, std::shared_ptr functor)
+{
+ m_delayedFuncQue.push(DelayedFunctor(GetTickCount64() + delay, functor));
+}
+
+void FunctorProcessor::Flush()
+{
+ while (!m_functorQue.empty())
+ {
+ std::shared_ptr functor;
+ if (m_functorQue.try_pop(functor))
+ (*functor)();
+ }
+}
+
+void FunctorProcessor::Fetch()
+{
+ while (!m_delayedFuncQue.empty())
+ {
+ DelayedFunctor delayedFunc;
+ if (m_delayedFuncQue.try_pop(delayedFunc))
+ {
+ if (GetTickCount64() < delayedFunc.execTime)
+ {
+ m_delayedFuncQue.push(delayedFunc);
+ break;
+ }
+ else
+ {
+ m_functorQue.push(delayedFunc.functor);
+ }
+ }
+ }
+}
diff --git a/SvEngine/src/GameFramework/Vector.cpp b/Core/src/GameFramework/Vector.cpp
similarity index 100%
rename from SvEngine/src/GameFramework/Vector.cpp
rename to Core/src/GameFramework/Vector.cpp
diff --git a/SvEngine/src/Memory/Arena.cpp b/Core/src/Memory/Arena.cpp
similarity index 100%
rename from SvEngine/src/Memory/Arena.cpp
rename to Core/src/Memory/Arena.cpp
diff --git a/SvEngine/src/Memory/ObjectPool.cpp b/Core/src/Memory/ObjectPool.cpp
similarity index 100%
rename from SvEngine/src/Memory/ObjectPool.cpp
rename to Core/src/Memory/ObjectPool.cpp
diff --git a/SvEngine/src/Network/Client.cpp b/Core/src/Network/Client.cpp
similarity index 73%
rename from SvEngine/src/Network/Client.cpp
rename to Core/src/Network/Client.cpp
index 0e7ac0a..cec72bb 100644
--- a/SvEngine/src/Network/Client.cpp
+++ b/Core/src/Network/Client.cpp
@@ -26,11 +26,11 @@ void Client::OnConnectCompleted(Context*, bool isSuccess) {
if (isSuccess) {
client->Run(std::make_unique(m_sock));
- // SOCKADDR_IN addr;
- // int len = sizeof(addr);
- // if (SOCKET_ERROR == getpeername(client->m_sosck->getHandle(), reinterpret_cast(&addr), &len))
- // throw net::network_error("getpeername()");
- client->OnConnected(Endpoint());
+ SOCKADDR_IN addr;
+ int len = sizeof(addr);
+ if (SOCKET_ERROR == getpeername(client->m_sock->getHandle(), reinterpret_cast(&addr), &len))
+ throw net::network_error("getpeername()");
+ client->OnConnected(Endpoint::parse(addr));
}
else
client->OnFail(Failure::Connect);
diff --git a/SvEngine/src/Network/Packet.cpp b/Core/src/Network/Packet.cpp
similarity index 98%
rename from SvEngine/src/Network/Packet.cpp
rename to Core/src/Network/Packet.cpp
index 3195473..255d0f8 100644
--- a/SvEngine/src/Network/Packet.cpp
+++ b/Core/src/Network/Packet.cpp
@@ -26,6 +26,11 @@ void Packet::Parse(std::span buffer) {
Read();
}
+uint16 Packet::GetPacketId(std::span buffer)
+{
+ return *reinterpret_cast(buffer.data());
+}
+
void Packet::Read() {
*this >> m_id;
}
diff --git a/SvEngine/src/Network/Server.cpp b/Core/src/Network/Server.cpp
similarity index 100%
rename from SvEngine/src/Network/Server.cpp
rename to Core/src/Network/Server.cpp
diff --git a/SvEngine/src/Network/Session.cpp b/Core/src/Network/Session.cpp
similarity index 76%
rename from SvEngine/src/Network/Session.cpp
rename to Core/src/Network/Session.cpp
index b5a62d7..ef776ee 100644
--- a/SvEngine/src/Network/Session.cpp
+++ b/Core/src/Network/Session.cpp
@@ -10,7 +10,8 @@
CREATE_ARENA(Session, 0x1000)
-Session::Session() : m_buffer(0x10000, '\0'), m_isDisconnected(false), m_isSending(false) {
+Session::Session() : m_buffer(0x10000, '\0'), m_isSending(false)
+{
}
void Session::Run(std::shared_ptr sock) {
@@ -21,10 +22,10 @@ void Session::Run(std::shared_ptr sock) {
m_sendCtx.completed = bind(&Session::OnSendCompleted, this, std::placeholders::_1, std::placeholders::_2);
m_sock->receive(&m_recvCtx);
- m_ref = shared_from_this();
}
-void Session::OnRecvCompleted(Context *context, bool isSuccess) {
+void Session::OnRecvCompleted(Context *context, bool isSuccess)
+{
if(!isSuccess || context->length == 0) {
Disconnect();
return;
@@ -40,25 +41,26 @@ void Session::OnSendCompleted(Context*, bool isSuccess)
auto endpoint = m_sock->getRemoteEndpoint();
if (endpoint.has_value())
OnDisconnected(endpoint.value());
+ delete this;
}
}
-Session::~Session() {
+Session::~Session()
+{
}
-void Session::Disconnect() {
- if (!m_isDisconnected.exchange(true))
- {
- OnDisconnected(m_sock->getRemoteEndpoint().value());
- m_ref = nullptr;
- }
+void Session::Disconnect()
+{
+ OnDisconnected(m_sock->getRemoteEndpoint().value());
+ delete this;
}
-Socket Session::GetSocket() {
- return *m_sock;
+std::shared_ptr Session::GetSocket()
+{
+ return m_sock;
}
-void Session::SendUnsafe(std::span buffer)
+void Session::SendUnsafe(std::span buffer) const
{
m_sock->send(buffer);
}
diff --git a/Core/src/Subsystem/Database.cpp b/Core/src/Subsystem/Database.cpp
new file mode 100644
index 0000000..0ff8060
--- /dev/null
+++ b/Core/src/Subsystem/Database.cpp
@@ -0,0 +1,74 @@
+#include "pch.h"
+#include "Subsystem/Database.hpp"
+
+void Database::CreateConnection()
+{
+ for (uint32 i = 0; i < m_maxConnectionCount; ++i)
+ {
+ try {
+ auto conn = std::shared_ptr(
+ m_driver->connect("tcp://localhost:3306",
+ ToAnsiString(m_dbUserName),
+ ToAnsiString(m_dbPwd)
+ ),
+ std::bind(&Database::ReturnConnection, this, std::placeholders::_1)
+ );
+ conn->setSchema(ToAnsiString(m_dbName));
+ m_connections.emplace_back(conn);
+ }
+ catch (std::exception&) {
+ Console::Error(Category::Database, TEXT("Could not connect to specified database profile."));
+ }
+ }
+}
+
+std::shared_ptr Database::PopConnection()
+{
+ if (m_connections.empty())
+ {
+ m_maxConnectionCount *= 2;
+ CreateConnection();
+ }
+
+ std::shared_ptr conn = m_connections.front();
+ m_connections.pop_front();
+
+ return conn;
+}
+
+void Database::ReturnConnection(sql::Connection* conn)
+{
+ if (m_destroyed)
+ delete conn;
+ else {
+ m_connections.emplace_back(conn, [this](sql::Connection* conn) {
+ ReturnConnection(conn);
+ });
+ }
+}
+
+Database::Database() : m_destroyed(false)
+{
+ m_driver = nullptr;
+ m_dbUserName = TEXT("");
+ m_dbPwd = TEXT("");
+ m_dbName = TEXT("");
+}
+
+Database::~Database()
+{
+ m_destroyed = true;
+ m_connections.clear();
+}
+
+void Database::Initialize()
+{
+ m_driver = get_driver_instance();
+}
+
+void Database::SetDatabaseProfile(StringView username, StringView password, StringView dbname)
+{
+ m_dbUserName = username;
+ m_dbPwd = password;
+ m_dbName = dbname;
+}
\ No newline at end of file
diff --git a/Core/src/Subsystem/Engine.cpp b/Core/src/Subsystem/Engine.cpp
new file mode 100644
index 0000000..312b210
--- /dev/null
+++ b/Core/src/Subsystem/Engine.cpp
@@ -0,0 +1,50 @@
+#include "pch.h"
+#include "Subsystem/Engine.hpp"
+
+Engine::Engine()
+ : m_funcProc(std::make_unique())
+{
+ Console::Initialize();
+
+ net::Option::Autorun = false;
+}
+
+Engine::~Engine()
+{
+}
+
+void Engine::Run(int32 io)
+{
+ ProcessIo(io);
+ auto logic = new std::thread(&Engine::ProcessLogic, this);
+ logic->join();
+}
+
+void Engine::Initialize()
+{
+}
+
+void Engine::ProcessIo(int32 count)
+{
+ for (int32 i = 0; i < count; ++i)
+ {
+ new std::thread([] {
+ {
+ while (true)
+ {
+ IoSystem::instance().worker(); // IOCP I/O Worker
+ }
+ }
+ });
+ }
+}
+
+void Engine::ProcessLogic()
+{
+ while (true)
+ {
+ m_funcProc->Fetch();
+ m_funcProc->Flush();
+ std::this_thread::sleep_for(std::chrono::milliseconds(WorkTick));
+ }
+}
diff --git a/SvEngine/src/util/Console.cpp b/Core/src/Util/Console.cpp
similarity index 100%
rename from SvEngine/src/util/Console.cpp
rename to Core/src/Util/Console.cpp
diff --git a/SvEngine/src/util/File.cpp b/Core/src/Util/File.cpp
similarity index 100%
rename from SvEngine/src/util/File.cpp
rename to Core/src/Util/File.cpp
diff --git a/SvEngine/src/util/Math.cpp b/Core/src/Util/Math.cpp
similarity index 100%
rename from SvEngine/src/util/Math.cpp
rename to Core/src/Util/Math.cpp
diff --git a/SvEngine/src/util/Parser/Ini.cpp b/Core/src/Util/Parser/Ini.cpp
similarity index 100%
rename from SvEngine/src/util/Parser/Ini.cpp
rename to Core/src/Util/Parser/Ini.cpp
diff --git a/SvEngine/src/util/String.cpp b/Core/src/Util/String.cpp
similarity index 100%
rename from SvEngine/src/util/String.cpp
rename to Core/src/Util/String.cpp
diff --git a/Engine.sln b/Engine.sln
index 1c26945..b9b2555 100644
--- a/Engine.sln
+++ b/Engine.sln
@@ -2,8 +2,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.8.34309.116
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SvEngine", "SvEngine\SvEngine.vcxproj", "{0E19D820-B6BE-4D23-805B-AAD9EF0EEA69}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{D38E0D41-FFF8-4938-AD80-3AB93233CB2B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Engine", "Engine", "{87A20E2A-BD72-441B-AE36-81CB51748EBB}"
@@ -13,12 +11,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
.gitignore = .gitignore
.gitmodules = .gitmodules
README.md = README.md
+ setup.bat = setup.bat
EndProjectSection
EndProject
Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "PacketGenerator", "tools\PacketGenerator\PacketGenerator.pyproj", "{1CBC2443-D0A8-4ED5-AC39-1782D2001B4E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Server", "Server", "{796B2721-0044-4FB0-9296-9D2ABA42E3F6}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SvEngine", "Core\SvEngine.vcxproj", "{0E19D820-B6BE-4D23-805B-AAD9EF0EEA69}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -29,6 +30,12 @@ Global
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1CBC2443-D0A8-4ED5-AC39-1782D2001B4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1CBC2443-D0A8-4ED5-AC39-1782D2001B4E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {1CBC2443-D0A8-4ED5-AC39-1782D2001B4E}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {1CBC2443-D0A8-4ED5-AC39-1782D2001B4E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1CBC2443-D0A8-4ED5-AC39-1782D2001B4E}.Release|x64.ActiveCfg = Release|Any CPU
+ {1CBC2443-D0A8-4ED5-AC39-1782D2001B4E}.Release|x86.ActiveCfg = Release|Any CPU
{0E19D820-B6BE-4D23-805B-AAD9EF0EEA69}.Debug|Any CPU.ActiveCfg = Debug|x64
{0E19D820-B6BE-4D23-805B-AAD9EF0EEA69}.Debug|Any CPU.Build.0 = Debug|x64
{0E19D820-B6BE-4D23-805B-AAD9EF0EEA69}.Debug|x64.ActiveCfg = Debug|x64
@@ -41,18 +48,12 @@ Global
{0E19D820-B6BE-4D23-805B-AAD9EF0EEA69}.Release|x64.Build.0 = Release|x64
{0E19D820-B6BE-4D23-805B-AAD9EF0EEA69}.Release|x86.ActiveCfg = Release|Win32
{0E19D820-B6BE-4D23-805B-AAD9EF0EEA69}.Release|x86.Build.0 = Release|Win32
- {1CBC2443-D0A8-4ED5-AC39-1782D2001B4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1CBC2443-D0A8-4ED5-AC39-1782D2001B4E}.Debug|x64.ActiveCfg = Debug|Any CPU
- {1CBC2443-D0A8-4ED5-AC39-1782D2001B4E}.Debug|x86.ActiveCfg = Debug|Any CPU
- {1CBC2443-D0A8-4ED5-AC39-1782D2001B4E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1CBC2443-D0A8-4ED5-AC39-1782D2001B4E}.Release|x64.ActiveCfg = Release|Any CPU
- {1CBC2443-D0A8-4ED5-AC39-1782D2001B4E}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
- {0E19D820-B6BE-4D23-805B-AAD9EF0EEA69} = {87A20E2A-BD72-441B-AE36-81CB51748EBB}
{1CBC2443-D0A8-4ED5-AC39-1782D2001B4E} = {D38E0D41-FFF8-4938-AD80-3AB93233CB2B}
+ {0E19D820-B6BE-4D23-805B-AAD9EF0EEA69} = {87A20E2A-BD72-441B-AE36-81CB51748EBB}
EndGlobalSection
EndGlobal
diff --git a/Libraries/mysql-connector/INFO_BIN b/Libraries/mysql-connector/INFO_BIN
new file mode 100644
index 0000000..874ef33
--- /dev/null
+++ b/Libraries/mysql-connector/INFO_BIN
@@ -0,0 +1,8 @@
+MySQL Connector/C++ Build Information
+
+build-date : 2024-06-16
+os-info : Windows-10.0.20348
+compiler : MSVC 19.16.27051.0
+protobuf-version : 3.6.1
+build-type : RelWithDebInfo
+
diff --git a/Libraries/mysql-connector/INFO_SRC b/Libraries/mysql-connector/INFO_SRC
new file mode 100644
index 0000000..c4764e7
--- /dev/null
+++ b/Libraries/mysql-connector/INFO_SRC
@@ -0,0 +1,7 @@
+MySQL Connector/C++ Sources Information
+
+version : 9.0.0
+branch : release/9.0.0
+commit : b01fa1ec05e0717a50d0950d21baa364481d5afb
+short : b01fa1ec
+
diff --git a/Libraries/mysql-connector/LICENSE.txt b/Libraries/mysql-connector/LICENSE.txt
new file mode 100644
index 0000000..a584cb4
--- /dev/null
+++ b/Libraries/mysql-connector/LICENSE.txt
@@ -0,0 +1,3085 @@
+Licensing Information User Manual
+
+MySQL Connector/C++ 9.0.0 Community
+ __________________________________________________________________
+
+Introduction
+
+ This License Information User Manual contains Oracle's product license
+ and other licensing information, including licensing information for
+ third-party software which may be included in this distribution of
+ MySQL Connector/C++ 9.0.0 Community.
+
+ Last updated: May 2024
+
+Licensing Information
+
+ This release of MySQL Connector/C++ 9.0.0 Community is brought to you
+ by the MySQL team at Oracle. This software is released under version 2
+ of the GNU General Public License (GPLv2), as set forth below, with the
+ following additional permissions:
+
+ This distribution of MySQL Connector/C++ 9.0.0 Community is designed to
+ work with certain software (including but not limited to OpenSSL) that
+ is licensed under separate terms, as designated in a particular file or
+ component or in the license documentation. Without limiting your rights
+ under the GPLv2, the authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have either included with the
+ program or referenced in the documentation.
+
+ Without limiting the foregoing grant of rights under the GPLv2 and
+ additional permission as to separately licensed software, this
+ Connector is also subject to the Universal FOSS Exception, version 1.0,
+ a copy of which is reproduced below and can also be found along with
+ its FAQ at http://oss.oracle.com/licenses/universal-foss-exception.
+
+ Copyright (c) 2008, 2024, Oracle and/or its affiliates.
+
+Election of GPLv2
+
+ For the avoidance of doubt, except that if any license choice other
+ than GPL or LGPL is available it will apply instead, Oracle elects to
+ use only the General Public License version 2 (GPLv2) at this time for
+ any software where a choice of GPL license versions is made available
+ with the language indicating that GPLv2 or any later version may be
+ used, or where a choice of which version of the GPL is applied is
+ otherwise unspecified.
+
+GNU General Public License Version 2.0, June 1991
+
+The following applies to all products licensed under the GNU General
+Public License, Version 2.0: You may not use the identified files
+except in compliance with the GNU General Public License, Version
+2.0 (the "License.") You may obtain a copy of the License at
+http://www.gnu.org/licenses/gpl-2.0.txt. A copy of the license is
+also reproduced below. Unless required by applicable law or agreed
+to in writing, software distributed under the License is distributed
+on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+either express or implied. See the License for the specific language
+governing permissions and limitations under the License.
+
+
+ ======================================================================
+ ======================================================================
+
+
+GNU GENERAL PUBLIC LICENSE
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+Everyone is permitted to copy and distribute verbatim
+copies of this license document, but changing it is not
+allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software,
+and (2) offer you this license which gives you legal permission to
+copy, distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on,
+we want its recipients to know that what they have is not the original,
+so that any problems introduced by others will not reflect on the
+original authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software
+ interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as
+a special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new
+versions of the General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Program does not specify a
+version number of this License, you may choose any version ever
+published by the Free Software Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the
+author to ask for permission. For software which is copyrighted by the
+Free Software Foundation, write to the Free Software Foundation; we
+sometimes make exceptions for this. Our decision will be guided by the
+two goals of preserving the free status of all derivatives of our free
+software and of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND,
+EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS
+WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+
+ the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+ type 'show w'. This is free software, and you are welcome
+ to redistribute it under certain conditions; type 'show c'
+ for details.
+
+The hypothetical commands 'show w' and 'show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than 'show w' and
+'show c'; they could even be mouse-clicks or menu items--whatever
+suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ program 'Gnomovision' (which makes passes at compilers) written
+ by James Hacker.
+
+ , 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library,
+you may consider it more useful to permit linking proprietary
+applications with the library. If this is what you want to do, use
+the GNU Lesser General Public License instead of this License.
+
+ ======================================================================
+ ======================================================================
+
+The Universal FOSS Exception, Version 1.0
+
+ In addition to the rights set forth in the other license(s) included in
+ the distribution for this software, data, and/or documentation
+ (collectively the "Software", and such licenses collectively with this
+ additional permission the "Software License"), the copyright holders
+ wish to facilitate interoperability with other software, data, and/or
+ documentation distributed with complete corresponding source under a
+ license that is OSI-approved and/or categorized by the FSF as free
+ (collectively "Other FOSS"). We therefore hereby grant the following
+ additional permission with respect to the use and distribution of the
+ Software with Other FOSS, and the constants, function signatures, data
+ structures and other invocation methods used to run or interact with
+ each of them (as to each, such software's "Interfaces"):
+
+ i. The Software's Interfaces may, to the extent permitted by the
+ license of the Other FOSS, be copied into, used and distributed in
+ the Other FOSS in order to enable interoperability, without
+ requiring a change to the license of the Other FOSS other than as
+ to any Interfaces of the Software embedded therein. The Software's
+ Interfaces remain at all times under the Software License,
+ including without limitation as used in the Other FOSS (which upon
+ any such use also then contains a portion of the Software under the
+ Software License).
+
+ ii. The Other FOSS's Interfaces may, to the extent permitted by the
+ license of the Other FOSS, be copied into, used and distributed in
+ the Software in order to enable interoperability, without requiring
+ that such Interfaces be licensed under the terms of the Software
+ License or otherwise altering their original terms, if this does
+ not require any portion of the Software other than such Interfaces
+ to be licensed under the terms other than the Software License.
+
+ iii. If only Interfaces and no other code is copied between the
+ Software and the Other FOSS in either direction, the use and/or
+ distribution of the Software with the Other FOSS shall not be
+ deemed to require that the Other FOSS be licensed under the license
+ of the Software, other than as to any Interfaces of the Software
+ copied into the Other FOSS. This includes, by way of example and
+ without limitation, statically or dynamically linking the Software
+ together with Other FOSS after enabling interoperability using the
+ Interfaces of one or both, and distributing the resulting
+ combination under different licenses for the respective portions
+ thereof.
+
+ For avoidance of doubt, a license which is OSI-approved or
+ categorized by the FSF as free, includes, for the purpose of this
+ permission, such licenses with additional permissions, and any
+ license that has previously been so approved or categorized as
+ free, even if now deprecated or otherwise no longer recognized as
+ approved or free. Nothing in this additional permission grants any
+ right to distribute any portion of the Software on terms other than
+ those of the Software License or grants any additional permission
+ of any kind for use or distribution of the Software in conjunction
+ with software other than Other FOSS.
+
+ ======================================================================
+ ======================================================================
+
+Licenses for Third-Party Components
+
+ The following sections contain licensing information for libraries that
+ may be included with this product. We are thankful to all individuals
+ that have created these. Standard licenses referenced herein are
+ detailed in the Standard Licenses section.
+
+Cyrus SASL
+
+ * Copyright (c) 1998-2003 Carnegie Mellon University. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The name "Carnegie Mellon University" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For permission or any other legal
+ * details, please contact
+ * Office of Technology Transfer
+ * Carnegie Mellon University
+ * 5000 Forbes Avenue
+ * Pittsburgh, PA 15213-3890
+ * (412) 268-4387, fax: (412) 268-7395
+* tech-transfer@andrew.cmu.edu
+ *
+ * 4. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by Computing Services
+ * at Carnegie Mellon University (http://www.cmu.edu/computing/)."
+ *
+ * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
+ * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
+ * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+The following files
+
+./lib
+ saslint.h auxprop.c canonusr.c checkpw.c client.c common.c config.c
+ external.c saslutil.c server.c seterror.c dlopen.c
+./plugins
+ scram.c gssapi.c
+./common
+ plugin_common.c
+
+have a license header similar to the above with the following copyright:
+/*
+ * Copyright (c) 1998-2016 Carnegie Mellon University. All rights reserved.
+ *
+
+./lib/md5.c includes the following license header:
+/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
+*/
+
+/* Function names changed to avoid namespace collisions: Rob Siemborski */
+
+/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+rights reserved.
+
+License to copy and use this software is granted provided that it
+is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+Algorithm" in all material mentioning or referencing this software
+or this function.
+
+License is also granted to make and use derivative works provided
+that such works are identified as "derived from the RSA Data
+Security, Inc. MD5 Message-Digest Algorithm" in all material
+mentioning or referencing the derived work.
+
+RSA Data Security, Inc. makes no representations concerning either
+the merchantability of this software or the suitability of this
+software for any particular purpose. It is provided "as is"
+without express or implied warranty of any kind.
+
+These notices must be retained in any copies of any part of this
+documentation and/or software.
+*/
+
+ ======================================================================
+ ======================================================================
+
+Google Protocol Buffers
+
+Copyright 2008 Google Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Code generated by the Protocol Buffer compiler is owned by the owner
+of the input file used when generating it. This code is not
+standalone and requires a support library to be linked with it. This
+support library is itself covered by the above license.
+
+4th party - abseil-cpp
+----------------------
+
+=== Header in source files:
+// Copyright 2017 The Abseil Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// This header file contains C++11 versions of standard header
+// abstractions available within C++14 and C++17, and are designed to be
+// drop-in replacement for code compliant with C++14 and C++17.
+
+ Apache License
+ Version 2.0, January 2004
+ https://www.apache.org/licenses/
+
+A copy of the Apache License v2.0, January 2004 license can be found
+in the 'Standard Licenses' section.
+
+ ======================================================================
+ ======================================================================
+
+Kerberos5
+
+Kerberos5
+
+Copyright (C) 1985-2019 by the Massachusetts Institute of Technology.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Downloading of this software may constitute an export of cryptographic
+software from the United States of America that is subject to the
+United States Export Administration Regulations (EAR), 15 CFR 730-774.
+Additional laws or regulations may apply. It is the responsibility of
+the person or entity contemplating export to comply with all
+applicable export laws and regulations, including obtaining any
+required license from the U.S. government.
+
+The U.S. government prohibits export of encryption source code to
+certain countries and individuals, including, but not limited to, the
+countries of Cuba, Iran, North Korea, Sudan, Syria, and residents and
+nationals of those countries.
+
+Documentation components of this software distribution are licensed
+under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
+(http://creativecommons.org/licenses/by-sa/3.0/)
+
+Individual source code files are copyright MIT, Cygnus Support,
+Novell, OpenVision Technologies, Oracle, Red Hat, Sun Microsystems,
+FundsXpress, and others.
+
+Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira,
+and Zephyr are trademarks of the Massachusetts Institute of Technology
+(MIT). No commercial use of these trademarks may be made without
+prior written permission of MIT.
+
+"Commercial use" means use of a name in a product or other for-profit
+manner. It does NOT prevent a commercial firm from referring to the
+MIT trademarks in order to convey information (although in doing so,
+recognition of their trademark status should be given).
+
+======================================================================
+
+The following copyright and permission notice applies to the
+OpenVision Kerberos Administration system located in "kadmin/create",
+"kadmin/dbutil", "kadmin/passwd", "kadmin/server", "lib/kadm5", and
+portions of "lib/rpc":
+
+ Copyright, OpenVision Technologies, Inc., 1993-1996, All Rights
+ Reserved
+
+ WARNING: Retrieving the OpenVision Kerberos Administration system
+ source code, as described below, indicates your acceptance of the
+ following terms. If you do not agree to the following terms, do
+ not retrieve the OpenVision Kerberos administration system.
+
+ You may freely use and distribute the Source Code and Object Code
+ compiled from it, with or without modification, but this Source
+ Code is provided to you "AS IS" EXCLUSIVE OF ANY WARRANTY,
+ INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY OR
+ FITNESS FOR A PARTICULAR PURPOSE, OR ANY OTHER WARRANTY, WHETHER
+ EXPRESS OR IMPLIED. IN NO EVENT WILL OPENVISION HAVE ANY LIABILITY
+ FOR ANY LOST PROFITS, LOSS OF DATA OR COSTS OF PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES, OR FOR ANY SPECIAL, INDIRECT, OR
+ CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, INCLUDING,
+ WITHOUT LIMITATION, THOSE RESULTING FROM THE USE OF THE SOURCE
+ CODE, OR THE FAILURE OF THE SOURCE CODE TO PERFORM, OR FOR ANY
+ OTHER REASON.
+
+ OpenVision retains all copyrights in the donated Source Code.
+ OpenVision also retains copyright to derivative works of the Source
+ Code, whether created by OpenVision or by a third party. The
+ OpenVision copyright notice must be preserved if derivative works
+ are made based on the donated Source Code.
+
+ OpenVision Technologies, Inc. has donated this Kerberos
+ Administration system to MIT for inclusion in the standard Kerberos
+ 5 distribution. This donation underscores our commitment to
+ continuing Kerberos technology development and our gratitude for
+ the valuable work which has been performed by MIT and the Kerberos
+ community.
+
+======================================================================
+
+ Portions contributed by Matt Crawford "crawdad@fnal.gov" were work
+performed at Fermi National Accelerator Laboratory, which is
+ operated by Universities Research Association, Inc., under contract
+ DE-AC02-76CHO3000 with the U.S. Department of Energy.
+
+======================================================================
+
+Portions of "src/lib/crypto" have the following copyright:
+
+ Copyright (C) 1998 by the FundsXpress, INC.
+
+ All rights reserved.
+
+ Export of this software from the United States of America may
+ require a specific license from the United States Government.
+ It is the responsibility of any person or organization
+ contemplating export to obtain such a license before exporting.
+
+ WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
+ distribute this software and its documentation for any purpose and
+ without fee is hereby granted, provided that the above copyright
+ notice appear in all copies and that both that copyright notice and
+ this permission notice appear in supporting documentation, and that
+ the name of FundsXpress. not be used in advertising or publicity
+ pertaining to distribution of the software without specific,
+ written prior permission. FundsXpress makes no representations
+ about the suitability of this software for any purpose. It is
+ provided "as is" without express or implied warranty.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+======================================================================
+
+The implementation of the AES encryption algorithm in
+"src/lib/crypto/builtin/aes" has the following copyright:
+
+ Copyright (C) 2001, Dr Brian Gladman "brg@gladman.uk.net", Worcester, UK.
+ All rights reserved.
+
+ LICENSE TERMS
+
+ The free distribution and use of this software in both source and
+ binary form is allowed (with or without changes) provided that:
+
+ 1. distributions of this source code include the above copyright
+ notice, this list of conditions and the following disclaimer;
+
+ 2. distributions in binary form include the above copyright notice,
+ this list of conditions and the following disclaimer in the
+ documentation and/or other associated materials;
+
+ 3. the copyright holder's name is not used to endorse products
+ built using this software without specific written permission.
+
+ DISCLAIMER
+
+ This software is provided 'as is' with no explcit or implied
+ warranties in respect of any properties, including, but not limited
+ to, correctness and fitness for purpose.
+
+======================================================================
+
+Portions contributed by Red Hat, including the pre-authentication
+plug-in framework and the NSS crypto implementation, contain the
+following copyright:
+
+ Copyright (C) 2006 Red Hat, Inc.
+ Portions copyright (C) 2006 Massachusetts Institute of Technology
+ All Rights Reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ * Neither the name of Red Hat, Inc., nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ OF THE POSSIBILITY OF SUCH DAMAGE.
+
+======================================================================
+
+The bundled verto source code is subject to the following license:
+
+ Copyright 2011 Red Hat, Inc.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+
+======================================================================
+
+The MS-KKDCP client implementation has the following copyright:
+
+ Copyright 2013,2014 Red Hat, Inc.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ OF THE POSSIBILITY OF SUCH DAMAGE.
+
+======================================================================
+
+The implementations of GSSAPI mechglue in GSSAPI-SPNEGO in
+"src/lib/gssapi", including the following files:
+
+ lib/gssapi/generic/gssapi_err_generic.et
+ lib/gssapi/mechglue/g_accept_sec_context.c
+ lib/gssapi/mechglue/g_acquire_cred.c
+ lib/gssapi/mechglue/g_canon_name.c
+ lib/gssapi/mechglue/g_compare_name.c
+ lib/gssapi/mechglue/g_context_time.c
+ lib/gssapi/mechglue/g_delete_sec_context.c
+ lib/gssapi/mechglue/g_dsp_name.c
+ lib/gssapi/mechglue/g_dsp_status.c
+ lib/gssapi/mechglue/g_dup_name.c
+ lib/gssapi/mechglue/g_exp_sec_context.c
+ lib/gssapi/mechglue/g_export_name.c
+ lib/gssapi/mechglue/g_glue.c
+ lib/gssapi/mechglue/g_imp_name.c
+ lib/gssapi/mechglue/g_imp_sec_context.c
+ lib/gssapi/mechglue/g_init_sec_context.c
+ lib/gssapi/mechglue/g_initialize.c
+ lib/gssapi/mechglue/g_inquire_context.c
+ lib/gssapi/mechglue/g_inquire_cred.c
+ lib/gssapi/mechglue/g_inquire_names.c
+ lib/gssapi/mechglue/g_process_context.c
+ lib/gssapi/mechglue/g_rel_buffer.c
+ lib/gssapi/mechglue/g_rel_cred.c
+ lib/gssapi/mechglue/g_rel_name.c
+ lib/gssapi/mechglue/g_rel_oid_set.c
+ lib/gssapi/mechglue/g_seal.c
+ lib/gssapi/mechglue/g_sign.c
+ lib/gssapi/mechglue/g_store_cred.c
+ lib/gssapi/mechglue/g_unseal.c
+ lib/gssapi/mechglue/g_userok.c
+ lib/gssapi/mechglue/g_utils.c
+ lib/gssapi/mechglue/g_verify.c
+ lib/gssapi/mechglue/gssd_pname_to_uid.c
+ lib/gssapi/mechglue/mglueP.h
+ lib/gssapi/mechglue/oid_ops.c
+ lib/gssapi/spnego/gssapiP_spnego.h
+ lib/gssapi/spnego/spnego_mech.c
+
+and the initial implementation of incremental propagation, including
+the following new or changed files:
+
+ include/iprop_hdr.h
+ kadmin/server/ipropd_svc.c
+ lib/kdb/iprop.x
+ lib/kdb/kdb_convert.c
+ lib/kdb/kdb_log.c
+ lib/kdb/kdb_log.h
+ lib/krb5/error_tables/kdb5_err.et
+ slave/kpropd_rpc.c
+ slave/kproplog.c
+
+are subject to the following license:
+
+ Copyright (C) 2004 Sun Microsystems, Inc.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+======================================================================
+
+Kerberos V5 includes documentation and software developed at the
+University of California at Berkeley, which includes this copyright
+notice:
+
+ Copyright (C) 1983 Regents of the University of California.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ 3. Neither the name of the University nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS
+ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+======================================================================
+
+Portions contributed by Novell, Inc., including the LDAP database
+backend, are subject to the following license:
+
+ Copyright (C) 2004-2005, Novell, Inc.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ * The copyright holder's name is not used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ OF THE POSSIBILITY OF SUCH DAMAGE.
+
+======================================================================
+
+Portions funded by Sandia National Laboratory and developed by the
+University of Michigan's Center for Information Technology
+Integration, including the PKINIT implementation, are subject to the
+following license:
+
+ COPYRIGHT (C) 2006-2007
+ THE REGENTS OF THE UNIVERSITY OF MICHIGAN
+ ALL RIGHTS RESERVED
+
+ Permission is granted to use, copy, create derivative works and
+ redistribute this software and such derivative works for any
+ purpose, so long as the name of The University of Michigan is not
+ used in any advertising or publicity pertaining to the use of
+ distribution of this software without specific, written prior
+ authorization. If the above copyright notice or any other
+ identification of the University of Michigan is included in any
+ copy of any portion of this software, then the disclaimer below
+ must also be included.
+
+ THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE
+ UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY PURPOSE, AND
+ WITHOUT WARRANTY BY THE UNIVERSITY OF MICHIGAN OF ANY KIND, EITHER
+ EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ THE REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE LIABLE FOR
+ ANY DAMAGES, INCLUDING SPECIAL, INDIRECT, INCIDENTAL, OR
+ CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM ARISING OUT OF OR
+ IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN IF IT HAS BEEN OR
+ IS HEREAFTER ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+======================================================================
+
+The pkcs11.h file included in the PKINIT code has the following
+license:
+
+ Copyright 2006 g10 Code GmbH
+ Copyright 2006 Andreas Jellinghaus
+
+ This file is free software; as a special exception the author gives
+ unlimited permission to copy and/or distribute it, with or without
+ modifications, as long as this notice is preserved.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY, to the extent permitted by law; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE.
+
+======================================================================
+
+Portions contributed by Apple Inc. are subject to the following
+license:
+
+ Copyright 2004-2008 Apple Inc. All Rights Reserved.
+
+ Export of this software from the United States of America may
+ require a specific license from the United States Government.
+ It is the responsibility of any person or organization
+ contemplating export to obtain such a license before exporting.
+
+ WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
+ distribute this software and its documentation for any purpose and
+ without fee is hereby granted, provided that the above copyright
+ notice appear in all copies and that both that copyright notice and
+ this permission notice appear in supporting documentation, and that
+ the name of Apple Inc. not be used in advertising or publicity
+ pertaining to distribution of the software without specific,
+ written prior permission. Apple Inc. makes no representations
+ about the suitability of this software for any purpose. It is
+ provided "as is" without express or implied warranty.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+======================================================================
+
+The implementations of UTF-8 string handling in src/util/support and
+src/lib/krb5/unicode are subject to the following copyright and
+permission notice:
+
+ The OpenLDAP Public License
+ Version 2.8, 17 August 2003
+
+ Redistribution and use of this software and associated
+ documentation ("Software"), with or without modification, are
+ permitted provided that the following conditions are met:
+
+ 1. Redistributions in source form must retain copyright statements
+ and notices,
+
+ 2. Redistributions in binary form must reproduce applicable
+ copyright statements and notices, this list of conditions, and
+ the following disclaimer in the documentation and/or other
+ materials provided with the distribution, and
+
+ 3. Redistributions must contain a verbatim copy of this document.
+
+ The OpenLDAP Foundation may revise this license from time to time.
+ Each revision is distinguished by a version number. You may use
+ this Software under terms of this license revision or under the
+ terms of any subsequent revision of the license.
+
+ THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND ITS
+ CONTRIBUTORS "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE OPENLDAP FOUNDATION, ITS
+ CONTRIBUTORS, OR THE AUTHOR(S) OR OWNER(S) OF THE SOFTWARE BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.
+
+ The names of the authors and copyright holders must not be used in
+ advertising or otherwise to promote the sale, use or other dealing
+ in this Software without specific, written prior permission. Title
+ to copyright in this Software shall at all times remain with
+ copyright holders.
+
+ OpenLDAP is a registered trademark of the OpenLDAP Foundation.
+
+ Copyright 1999-2003 The OpenLDAP Foundation, Redwood City,
+ California, USA. All Rights Reserved. Permission to copy and
+ distribute verbatim copies of this document is granted.
+
+Marked test programs in src/lib/krb5/krb have the following copyright:
+
+
+ Copyright (C) 2006 Kungliga Tekniska Högskolan
+ (Royal Institute of Technology, Stockholm, Sweden).
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ 3. Neither the name of KTH nor the names of its contributors may be
+ used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+======================================================================
+
+The KCM Mach RPC definition file used on macOS has the following
+copyright:
+
+ Copyright (C) 2009 Kungliga Tekniska Högskolan
+ (Royal Institute of Technology, Stockholm, Sweden).
+ All rights reserved.
+
+ Portions Copyright (C) 2009 Apple Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ 3. Neither the name of the Institute nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE
+ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+======================================================================
+
+Portions of the RPC implementation in src/lib/rpc and
+src/include/gssrpc have the following copyright and permission notice:
+
+ Copyright (C) 2010, Oracle America, Inc.
+
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ 3. Neither the name of the "Oracle America, Inc." nor the names of
+ its contributors may be used to endorse or promote products
+ derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ OF THE POSSIBILITY OF SUCH DAMAGE.
+
+======================================================================
+
+ Copyright (C) 2006,2007,2009 NTT (Nippon Telegraph and Telephone
+ Corporation). All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer as
+ the first lines of this file unmodified.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY NTT "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL NTT BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ OF THE POSSIBILITY OF SUCH DAMAGE.
+
+======================================================================
+
+ Copyright 2000 by Carnegie Mellon University
+
+ All Rights Reserved
+
+ Permission to use, copy, modify, and distribute this software and
+ its documentation for any purpose and without fee is hereby
+ granted, provided that the above copyright notice appear in all
+ copies and that both that copyright notice and this permission
+ notice appear in supporting documentation, and that the name of
+ Carnegie Mellon University not be used in advertising or publicity
+ pertaining to distribution of the software without specific,
+ written prior permission.
+
+ CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
+ THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
+ FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+ OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ SOFTWARE.
+
+======================================================================
+
+ Copyright (C) 2002 Naval Research Laboratory (NRL/CCS)
+
+ Permission to use, copy, modify and distribute this software and
+ its documentation is hereby granted, provided that both the
+ copyright notice and this permission notice appear in all copies of
+ the software, derivative works or modified versions, and any
+ portions thereof.
+
+ NRL ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION AND
+ DISCLAIMS ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER
+ RESULTING FROM THE USE OF THIS SOFTWARE.
+
+======================================================================
+
+Portions extracted from Internet RFCs have the following copyright
+notice:
+
+ Copyright (C) The Internet Society (2006).
+
+ This document is subject to the rights, licenses and restrictions
+ contained in BCP 78, and except as set forth therein, the authors
+ retain all their rights.
+
+ This document and the information contained herein are provided on
+ an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE
+ REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND
+ THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT
+ THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR
+ ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A
+ PARTICULAR PURPOSE.
+
+======================================================================
+
+ Copyright (C) 1991, 1992, 1994 by Cygnus Support.
+
+ Permission to use, copy, modify, and distribute this software and
+ its documentation for any purpose and without fee is hereby
+ granted, provided that the above copyright notice appear in all
+ copies and that both that copyright notice and this permission
+ notice appear in supporting documentation. Cygnus Support makes no
+ representations about the suitability of this software for any
+ purpose. It is provided "as is" without express or implied
+ warranty.
+
+======================================================================
+
+ Copyright (C) 2006 Secure Endpoints Inc.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+======================================================================
+
+Portions of the implementation of the Fortuna-like PRNG are subject to
+the following notice:
+
+
+ Copyright (C) 2005 Marko Kreen
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+ Copyright (C) 1994 by the University of Southern California
+
+ EXPORT OF THIS SOFTWARE from the United States of America may
+ require a specific license from the United States Government. It
+ is the responsibility of any person or organization
+ contemplating export to obtain such a license before exporting.
+
+ WITHIN THAT CONSTRAINT, permission to copy, modify, and distribute
+ this software and its documentation in source and binary forms is
+ hereby granted, provided that any documentation or other materials
+ related to such distribution or use acknowledge that the software
+ was developed by the University of Southern California.
+
+ DISCLAIMER OF WARRANTY. THIS SOFTWARE IS PROVIDED "AS IS". The
+ University of Southern California MAKES NO REPRESENTATIONS OR
+ WARRANTIES, EXPRESS OR IMPLIED. By way of example, but not
+ limitation, the University of Southern California MAKES NO
+ REPRESENTATIONS OR WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY
+ PARTICULAR PURPOSE. The University of Southern California shall not
+ be held liable for any liability nor for any direct, indirect, or
+ consequential damages with respect to any claim by the user or
+ distributor of the ksu software.
+
+======================================================================
+
+ Copyright (C) 1995
+ The President and Fellows of Harvard University
+
+ This code is derived from software contributed to Harvard by Jeremy
+ Rassen.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ 3. All advertising materials mentioning features or use of this
+ software must display the following acknowledgement:
+
+ This product includes software developed by the University of
+ California, Berkeley and its contributors.
+
+ 4. Neither the name of the University nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS
+ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+======================================================================
+
+ Copyright (C) 2008 by the Massachusetts Institute of Technology.
+ Copyright 1995 by Richard P. Basch. All Rights Reserved.
+ Copyright 1995 by Lehman Brothers, Inc. All Rights Reserved.
+
+ Export of this software from the United States of America may
+ require a specific license from the United States Government. It
+ is the responsibility of any person or organization
+ contemplating export to obtain such a license before exporting.
+
+ WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
+ distribute this software and its documentation for any purpose and
+ without fee is hereby granted, provided that the above copyright
+ notice appear in all copies and that both that copyright notice and
+ this permission notice appear in supporting documentation, and that
+ the name of Richard P. Basch, Lehman Brothers and M.I.T. not be
+ used in advertising or publicity pertaining to distribution of the
+ software without specific, written prior permission. Richard P.
+ Basch, Lehman Brothers and M.I.T. make no representations about the
+ suitability of this software for any purpose. It is provided "as
+ is" without express or implied warranty.
+
+======================================================================
+
+The following notice applies to "src/lib/krb5/krb/strptime.c" and
+"src/include/k5-queue.h".
+
+ Copyright (C) 1997, 1998 The NetBSD Foundation, Inc.
+ All rights reserved.
+
+ This code was contributed to The NetBSD Foundation by Klaus Klein.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ 3. All advertising materials mentioning features or use of this
+ software must display the following acknowledgement:
+
+ This product includes software developed by the NetBSD
+ Foundation, Inc. and its contributors.
+
+ 4. Neither the name of The NetBSD Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
+ CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.
+
+======================================================================
+
+The following notice applies to Unicode library files in
+"src/lib/krb5/unicode":
+
+ Copyright 1997, 1998, 1999 Computing Research Labs,
+ New Mexico State University
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE COMPUTING RESEARCH LAB OR
+ NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+======================================================================
+
+The following notice applies to "src/util/support/strlcpy.c":
+
+ Copyright (C) 1998 Todd C. Miller "Todd.Miller@courtesan.com"
+
+ Permission to use, copy, modify, and distribute this software for
+ any purpose with or without fee is hereby granted, provided that
+ the above copyright notice and this permission notice appear in all
+ copies.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
+ CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+ OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+ NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+======================================================================
+
+The following notice applies to "src/util/profile/argv_parse.c" and
+"src/util/profile/argv_parse.h":
+
+ Copyright 1999 by Theodore Ts'o.
+
+ Permission to use, copy, modify, and distribute this software for
+ any purpose with or without fee is hereby granted, provided that
+ the above copyright notice and this permission notice appear in all
+ copies. THE SOFTWARE IS PROVIDED "AS IS" AND THEODORE TS'O (THE
+ AUTHOR) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
+ NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
+ RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. (Isn't
+ it sick that the U.S. culture of lawsuit-happy lawyers requires
+ this kind of disclaimer?)
+
+======================================================================
+
+The following notice applies to SWIG-generated code in
+"src/util/profile/profile_tcl.c":
+
+ Copyright (C) 1999-2000, The University of Chicago
+
+ This file may be freely redistributed without license or fee
+ provided this copyright message remains intact.
+
+======================================================================
+
+The following notice applies to portiions of "src/lib/rpc" and
+"src/include/gssrpc":
+
+ Copyright (C) 2000 The Regents of the University of Michigan. All
+ rights reserved.
+
+ Copyright (C) 2000 Dug Song "dugsong@UMICH.EDU". All rights
+ reserved, all wrongs reversed.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ 3. Neither the name of the University nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.
+
+Implementations of the MD4 algorithm are subject to the following
+notice:
+
+ Copyright (C) 1990, RSA Data Security, Inc. All rights reserved.
+
+ License to copy and use this software is granted provided that it
+ is identified as the "RSA Data Security, Inc. MD4 Message Digest
+ Algorithm" in all material mentioning or referencing this software
+ or this function.
+
+ License is also granted to make and use derivative works provided
+ that such works are identified as "derived from the RSA Data
+ Security, Inc. MD4 Message Digest Algorithm" in all material
+ mentioning or referencing the derived work.
+
+ RSA Data Security, Inc. makes no representations concerning either
+ the merchantability of this software or the suitability of this
+ software for any particular purpose. It is provided "as is"
+ without express or implied warranty of any kind.
+
+ These notices must be retained in any copies of any part of this
+ documentation and/or software.
+
+======================================================================
+
+Implementations of the MD5 algorithm are subject to the following
+notice:
+
+ Copyright (C) 1990, RSA Data Security, Inc. All rights reserved.
+
+ License to copy and use this software is granted provided that it
+ is identified as the "RSA Data Security, Inc. MD5 Message- Digest
+ Algorithm" in all material mentioning or referencing this software
+ or this function.
+
+ License is also granted to make and use derivative works provided
+ that such works are identified as "derived from the RSA Data
+ Security, Inc. MD5 Message-Digest Algorithm" in all material
+ mentioning or referencing the derived work.
+
+ RSA Data Security, Inc. makes no representations concerning either
+ the merchantability of this software or the suitability of this
+ software for any particular purpose. It is provided "as is"
+ without express or implied warranty of any kind.
+
+ These notices must be retained in any copies of any part of this
+ documentation and/or software.
+
+======================================================================
+
+The following notice applies to
+"src/lib/crypto/crypto_tests/t_mddriver.c":
+
+ Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All
+ rights reserved.
+
+ RSA Data Security, Inc. makes no representations concerning either
+ the merchantability of this software or the suitability of this
+ software for any particular purpose. It is provided "as is" without
+ express or implied warranty of any kind.
+
+ These notices must be retained in any copies of any part of this
+ documentation and/or software.
+
+======================================================================
+
+Portions of "src/lib/krb5" are subject to the following notice:
+
+ Copyright (C) 1994 CyberSAFE Corporation.
+ Copyright 1990,1991,2007,2008 by the Massachusetts Institute of
+Technology.
+ All Rights Reserved.
+
+ Export of this software from the United States of America may
+ require a specific license from the United States Government. It
+ is the responsibility of any person or organization
+ contemplating export to obtain such a license before exporting.
+
+ WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
+ distribute this software and its documentation for any purpose and
+ without fee is hereby granted, provided that the above copyright
+ notice appear in all copies and that both that copyright notice and
+ this permission notice appear in supporting documentation, and that
+ the name of M.I.T. not be used in advertising or publicity
+ pertaining to distribution of the software without specific,
+ written prior permission. Furthermore if you modify this software
+ you must label your software as modified software and not
+ distribute it in such a fashion that it might be confused with the
+ original M.I.T. software. Neither M.I.T., the Open Computing
+ Security Group, nor CyberSAFE Corporation make any representations
+ about the suitability of this software for any purpose. It is
+ provided "as is" without express or implied warranty.
+
+======================================================================
+
+Portions contributed by PADL Software are subject to the following
+license:
+
+ Copyright (c) 2011, PADL Software Pty Ltd. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ 3. Neither the name of PADL Software nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY PADL SOFTWARE AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL PADL SOFTWARE
+ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+======================================================================
+
+The bundled libev source code is subject to the following license:
+
+ All files in libev are Copyright (C)2007,2008,2009 Marc Alexander
+ Lehmann.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ Alternatively, the contents of this package may be used under the
+ terms of the GNU General Public License ("GPL") version 2 or any
+ later version, in which case the provisions of the GPL are
+ applicable instead of the above. If you wish to allow the use of
+ your version of this package only under the terms of the GPL and
+ not to allow others to use your version of this file under the BSD
+ license, indicate your decision by deleting the provisions above
+ and replace them with the notice and other provisions required by
+ the GPL in this and the other files of this package. If you do not
+ delete the provisions above, a recipient may use your version of
+ this file under either the BSD or the GPL.
+
+======================================================================
+
+Files copied from the Intel AESNI Sample Library are subject to the
+following license:
+
+ Copyright (C) 2010, Intel Corporation
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ * Neither the name of Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ OF THE POSSIBILITY OF SUCH DAMAGE.
+
+======================================================================
+
+The following notice applies to
+"src/ccapi/common/win/OldCC/autolock.hxx":
+
+ Copyright (C) 1998 by Danilo Almeida. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ ======================================================================
+ ======================================================================
+
+LibFIDO
+
+Copyright (c) 2018-2021 Yubico AB. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+4th Party
+=========
+
+libcbor
+-------
+
+MIT License
+
+Copyright (c) 2014-2017 Pavel Kalvoda
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+------------------------------------------------------------------------------
+----
+zlib
+----
+
+Copyright notice:
+
+ (C) 1995-2017 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup@gzip.org madler@alumni.caltech.edu
+
+If you use the zlib library in a product, we would appreciate *not* receiving
+lengthy legal documents to sign. The sources are provided for free but
+without warranty of any kind. The library has been entirely written by
+Jean-loup Gailly and Mark Adler; it does not include third-party code.
+
+If you redistribute modified sources, we would appreciate that you include in
+the file ChangeLog history information documenting your changes. Please read
+the FAQ for more information on the distribution of modified source versions.
+
+------------------------------------------------------------------------------
+OpenSSL (See its own license section)
+------------------------------------------------------------------------------
+
+ ======================================================================
+ ======================================================================
+
+LZ4
+
+LZ4 Library
+Copyright (c) 2011-2016, Yann Collet
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ ======================================================================
+ ======================================================================
+
+OpenSSL 3.0
+
+You may be receiving a copy of OpenSSL 3.0 as part of this product in
+object code form.
+The terms of the Oracle license do NOT apply to OpenSSL 3.0.
+OpenSSL 3.0 is licensed under the Apache 2.0 license, separate from
+the Oracle product.
+If you do not wish to install this library, you may remove it, but
+the Oracle program might not operate properly or at all without it.
+
+/*
+ * Copyright 2003-2022 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+*/
+
+See Apache License v2.0, January 2004 in the
+'Standard Licenses' section.
+
+ ======================================================================
+ ======================================================================
+
+OpenTelemetry C++
+
+You may be receiving a copy of the opentelemetry-cpp library with
+this MySQL product. The terms of the Oracle license do NOT apply
+to the opentelemetry-cpp library; it is licensed under the following
+license, separately from the Oracle programs you receive.
+If you do not wish to install this program, you may delete its files
+but the Oracle program might not operate properly or at all without it.
+
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+LICENSE:
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+A copy of the Apache License v2.0, January 2004 license can be found
+in the 'Standard Licenses' section.
+
+
+4th party code included
+=======================
+exporters/etw
+-------------
+TraceLogging Dynamic for Windows
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+
+4th Party Libraries
+===================
+opentelemetry-proto
+-------------------
+// Copyright 2019, OpenTelemetry Authors
+// Copyright 2020, OpenTelemetry Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+Apache License Text as listed above
+
+------------------------------------------------------------------------------
+protobuf
+--------
+
+Copyright 2008 Google Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Code generated by the Protocol Buffer compiler is owned by the owner
+of the input file used when generating it. This code is not
+standalone and requires a support library to be linked with it. This
+support library is itself covered by the above license.
+
+------------------------------------------------------------------------------
+json (nlohmann)
+----
+MIT License
+
+Copyright (c) 2013-2022 Niels Lohmann
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+------------------------------------------------------------------------------
+
+
+curl
+----
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1996 - 2023, Daniel Stenberg, , and many
+contributors, see the THANKS file.
+
+All rights reserved.
+
+Permission to use, copy, modify, and distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright
+notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
+OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not
+be used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization of the copyright holder.
+
+ ======================================================================
+ ======================================================================
+
+RapidJSON v1.1.0
+
+Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All
+rights reserved.
+
+If you have downloaded a copy of the RapidJSON binary from Tencent, please
+note that the RapidJSON binary is licensed under the MIT License.
+If you have downloaded a copy of the RapidJSON source code from Tencent,
+please note that RapidJSON source code is licensed under the MIT License,
+except for the third-party components listed below which are subject to
+different license terms. Your integration of RapidJSON into your own
+projects may require compliance with the MIT License, as well as the other
+licenses applicable to the third-party components included within RapidJSON.
+To avoid the problematic JSON license in your own projects, it's sufficient
+to exclude the bin/jsonchecker/ directory, as it's the only code under the
+JSON license.
+A copy of the MIT License is included in this file.
+
+Other dependencies and licenses:
+
+Open Source Software Licensed Under the BSD License:
+--------------------------------------------------------------------
+
+The msinttypes r29
+Copyright (c) 2006-2013 Alexander Chemeris
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+* Neither the name of copyright holder nor the names of its contributors may
+be used to endorse or promote products derived from this software without
+specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Open Source Software Licensed Under the JSON License:
+--------------------------------------------------------------------
+
+json.org
+Copyright (c) 2002 JSON.org
+All Rights Reserved.
+
+JSON_checker
+Copyright (c) 2002 JSON.org
+All Rights Reserved.
+
+
+Terms of the JSON License:
+---------------------------------------------------
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+The Software shall be used for Good, not Evil.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+Terms of the MIT License:
+--------------------------------------------------------------------
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+ ======================================================================
+ ======================================================================
+
+zlib
+
+Oracle gratefully acknowledges the contributions of Jean-loup Gailly
+and Mark Adler in creating the zlib general purpose compression
+library which is used in this product.
+
+Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup@gzip.org madler@alumni.caltech.edu
+
+If you use the zlib library in a product, we would appreciate *not* receiving
+lengthy legal documents to sign. The sources are provided for free but without
+warranty of any kind. The library has been entirely written by Jean-loup
+Gailly and Mark Adler; it does not include third-party code.
+
+If you redistribute modified sources, we would appreciate that you include in
+the file ChangeLog history information documenting your changes. Please read
+the FAQ for more information on the distribution of modified source versions.
+
+ ======================================================================
+ ======================================================================
+
+ZSTD (Zstandard)
+
+Zstandard is dual-licensed under [BSD](LICENSE) and [GPLv2](COPYING).
+
+ /*
+ * This source code is licensed under both the BSD-style license (found in
+ * the LICENSE file in the root directory of this source tree) and the GPLv2
+ * (found in the COPYING file in the root directory of this source tree).
+ * You may select, at your option, one of the above-listed licenses.
+ */
+
+Oracle elects the BSD license
+
+LICENSE:
+Copyright (c) 2016-present, Facebook, Inc. All rights reserved.
+Copyright (C) 2012-2016, Yann Collet.
+Copyright (c) 2003-2008 Yuta Mori All Rights Reserved.
+Copyright (c) 2016 Tino Reichardt
+Copyright (c) 2016-present, Przemyslaw Skibinski, Yann Collet, Facebook, Inc.
+Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
+Copyright (c) 2018-present, Facebook, Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ * Neither the name Facebook nor the names of its contributors may be used to
+ endorse or promote products derived from this software without specific
+ prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+The following is from the COPYING file and is included for completeness:
+-------------------------------
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ , 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
+
+ ======================================================================
+ ======================================================================
+
+Standard Licenses
+
+Apache License v2.0, January 2004
+
+The following applies to all products licensed under the Apache 2.0
+License: You may not use the identified files except in compliance
+with the Apache License, Version 2.0 (the "License.") You may obtain a
+copy of the License at http://www.apache.org/licenses/LICENSE-2.0. A
+copy of the license is also reproduced below. Unless required by
+applicable law or agreed to in writing, software distributed under the
+License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, either express or implied. See the License for
+the specific language governing permissions and limitations under the
+License.
+
+Apache License Version 2.0, January 2004 http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction,
+and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the
+copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other
+entities that control, are controlled by, or are under common control
+with that entity. For the purposes of this definition, "control" means
+(i) the power, direct or indirect, to cause the direction or
+management of such entity, whether by contract or otherwise, or (ii)
+ownership of fifty percent (50%) or more of the outstanding shares, or
+(iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation
+source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical
+transformation or translation of a Source form, including but not
+limited to compiled object code, generated documentation, and
+conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object
+form, made available under the License, as indicated by a copyright
+notice that is included in or attached to the work (an example is
+provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object
+form, that is based on (or derived from) the Work and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship. For the
+purposes of this License, Derivative Works shall not include works
+that remain separable from, or merely link (or bind by name) to the
+interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the
+original version of the Work and any modifications or additions to
+that Work or Derivative Works thereof, that is intentionally submitted
+to Licensor for inclusion in the Work by the copyright owner or by an
+individual or Legal Entity authorized to submit on behalf of the
+copyright owner. For the purposes of this definition, "submitted"
+means any form of electronic, verbal, or written communication sent to
+the Licensor or its representatives, including but not limited to
+communication on electronic mailing lists, source code control
+systems, and issue tracking systems that are managed by, or on behalf
+of, the Licensor for the purpose of discussing and improving the Work,
+but excluding communication that is conspicuously marked or otherwise
+designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity
+on behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+copyright license to reproduce, prepare Derivative Works of, publicly
+display, publicly perform, sublicense, and distribute the Work and
+such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except
+as stated in this section) patent license to make, have made, use,
+offer to sell, sell, import, and otherwise transfer the Work, where
+such license applies only to those patent claims licensable by such
+Contributor that are necessarily infringed by their Contribution(s)
+alone or by combination of their Contribution(s) with the Work to
+which such Contribution(s) was submitted. If You institute patent
+litigation against any entity (including a cross-claim or counterclaim
+in a lawsuit) alleging that the Work or a Contribution incorporated
+within the Work constitutes direct or contributory patent
+infringement, then any patent licenses granted to You under this
+License for that Work shall terminate as of the date such litigation
+is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work
+or Derivative Works thereof in any medium, with or without
+modifications, and in Source or Object form, provided that You meet
+the following conditions:
+
+(a) You must give any other recipients of the Work or Derivative Works
+a copy of this License; and
+
+(b) You must cause any modified files to carry prominent notices
+stating that You changed the files; and
+
+(c) You must retain, in the Source form of any Derivative Works that
+You distribute, all copyright, patent, trademark, and attribution
+notices from the Source form of the Work, excluding those notices that
+do not pertain to any part of the Derivative Works; and
+
+(d) If the Work includes a "NOTICE" text file as part of its
+distribution, then any Derivative Works that You distribute must
+include a readable copy of the attribution notices contained
+
+within such NOTICE file, excluding those notices that do not pertain
+to any part of the Derivative Works, in at least one of the following
+places: within a NOTICE text file distributed as part of the
+Derivative Works; within the Source form or documentation, if provided
+along with the Derivative Works; or, within a display generated by the
+Derivative Works, if and wherever such third-party notices normally
+appear. The contents of the NOTICE file are for informational purposes
+only and do not modify the License. You may add Your own attribution
+notices within Derivative Works that You distribute, alongside or as
+an addendum to the NOTICE text from the Work, provided that such
+additional attribution notices cannot be construed as modifying the
+License.
+
+You may add Your own copyright statement to Your modifications and may
+provide additional or different license terms and conditions for use,
+reproduction, or distribution of Your modifications, or for any such
+Derivative Works as a whole, provided Your use, reproduction, and
+distribution of the Work otherwise complies with the conditions stated
+in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+any Contribution intentionally submitted for inclusion in the Work by
+You to the Licensor shall be under the terms and conditions of this
+License, without any additional terms or conditions. Notwithstanding
+the above, nothing herein shall supersede or modify the terms of any
+separate license agreement you may have executed with Licensor
+regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+names, trademarks, service marks, or product names of the Licensor,
+except as required for reasonable and customary use in describing the
+origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed
+to in writing, Licensor provides the Work (and each Contributor
+provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, either express or implied, including, without
+limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely
+responsible for determining the appropriateness of using or
+redistributing the Work and assume any risks associated with Your
+exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+whether in tort (including negligence), contract, or otherwise, unless
+required by applicable law (such as deliberate and grossly negligent
+acts) or agreed to in writing, shall any Contributor be liable to You
+for damages, including any direct, indirect, special, incidental, or
+consequential damages of any character arising as a result of this
+License or out of the use or inability to use the Work (including but
+not limited to damages for loss of goodwill, work stoppage, computer
+failure or malfunction, or any and all other commercial damages or
+losses), even if such Contributor has been advised of the possibility
+of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+the Work or Derivative Works thereof, You may choose to offer, and
+charge a fee for, acceptance of support, warranty, indemnity, or other
+liability obligations and/or rights consistent with this
+License. However, in accepting such obligations, You may act only on
+Your own behalf and on Your sole responsibility, not on behalf of any
+other Contributor, and only if You agree to indemnify, defend, and
+hold each Contributor harmless for any liability incurred by, or
+claims asserted against, such Contributor by reason of your accepting
+any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following boilerplate
+notice, with the fields enclosed by brackets "[]" replaced with your own
+identifying information. (Don't include the brackets!) The text should be
+enclosed in the appropriate comment syntax for the file format. We also
+recommend that a file or class name and description of purpose be included
+on the same "printed page" as the copyright notice for easier identification
+within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+implied. See the License for the specific language governing permissions
+and limitations under the License.
+
+ ======================================================================
+ ======================================================================
+
+Written Offer for Source Code
+
+ For any software that you receive from Oracle in binary form which is
+ licensed under an open source license that gives you the right to
+ receive the source code for that binary, you can obtain a copy of the
+ applicable source code by visiting
+ http://www.oracle.com/goto/opensourcecode. If the source code for the
+ binary was not provided to you with the binary, you can also receive a
+ copy of the source code on physical media by submitting a written
+ request to the address listed below or by sending an email to Oracle
+ using the following link:
+ http://www.oracle.com/goto/opensourcecode/request.
+
+ Oracle America, Inc.
+ Attn: Senior Vice President
+ Development and Engineering Legal
+ 500 Oracle Parkway, 10th Floor
+ Redwood Shores, CA 94065
+
+ Your request should include:
+
+ * The name of the binary for which you are requesting the source code
+
+ * The name and version number of the Oracle product containing the
+ binary
+
+ * The date you received the Oracle product
+
+ * Your name
+
+ * Your company name (if applicable)
+
+ * Your return mailing address and email, and
+
+ * A telephone number in the event we need to reach you.
+
+
+ We may charge you a fee to cover the cost of physical media and
+ processing.
+
+ Your request must be sent
+
+ a. within three (3) years of the date you received the Oracle product
+ that included the binary that is the subject of your request, or
+
+ b. in the case of code licensed under the GPL v3 for as long as Oracle
+ offers spare parts or customer support for that product model.
diff --git a/Libraries/mysql-connector/README.txt b/Libraries/mysql-connector/README.txt
new file mode 100644
index 0000000..ffdc35c
--- /dev/null
+++ b/Libraries/mysql-connector/README.txt
@@ -0,0 +1,39 @@
+Copyright (c) 2008, 2024, Oracle and/or its affiliates.
+
+This is a release of MySQL Connector/C++, the C++ interface for communicating
+with MySQL servers.
+
+License information can be found in the LICENSE.txt file.
+
+This distribution may include materials developed by third parties.
+For license and attribution notices for these materials, please refer to the LICENSE.txt file.
+
+For more information on MySQL Connector/C++, visit
+ https://dev.mysql.com/doc/connector-cpp/en/
+
+For additional downloads and the source of MySQL Connector/C++, visit
+ http://dev.mysql.com/downloads
+
+MySQL Connector/C++ is brought to you by the MySQL team at Oracle.
+
+
+DOCUMENTATION LOCATION
+======================
+
+You can find the documentation on the MySQL website at
+
+
+For the new features/bugfix history, see release notes at
+.
+Note that the initial releases used major version 2.0.
+
+CONTACT
+=======
+
+For general discussion of the MySQL Connector/C++ please use the C/C++
+community forum at or join
+the MySQL Connector/C++ mailing list at .
+
+Bugs can be reported at . Please
+use the "Connector / C++" or "Connector / C++ Documentation" bug
+category.
diff --git a/Libraries/mysql-connector/include/jdbc/cppconn/build_config.h b/Libraries/mysql-connector/include/jdbc/cppconn/build_config.h
new file mode 100644
index 0000000..449d38a
--- /dev/null
+++ b/Libraries/mysql-connector/include/jdbc/cppconn/build_config.h
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2008, 2024, Oracle and/or its affiliates.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2.0, as
+ * published by the Free Software Foundation.
+ *
+ * This program is designed to work with certain software (including
+ * but not limited to OpenSSL) that is licensed under separate terms, as
+ * designated in a particular file or component or in included license
+ * documentation. The authors of MySQL hereby grant you an additional
+ * permission to link the program and your derivative works with the
+ * separately licensed software that they have either included with
+ * the program or referenced in the documentation.
+ *
+ * Without limiting anything contained in the foregoing, this file,
+ * which is part of Connector/C++, is also subject to the
+ * Universal FOSS Exception, version 1.0, a copy of which can be found at
+ * https://oss.oracle.com/licenses/universal-foss-exception.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License, version 2.0, for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+
+
+#ifndef _SQL_BUILD_CONFIG_H_
+#define _SQL_BUILD_CONFIG_H_
+
+#ifdef STATIC_CONCPP
+ #define CPPCONN_PUBLIC_FUNC
+#endif
+
+
+#if defined _MSC_VER
+
+ #define DLL_EXPORT __declspec(dllexport)
+ #define DLL_IMPORT __declspec(dllimport)
+ #define DLL_LOCAL
+
+#elif __GNUC__ >= 4
+
+ #define DLL_EXPORT __attribute__ ((visibility ("default")))
+ #define DLL_IMPORT
+ #define DLL_LOCAL __attribute__ ((visibility ("hidden")))
+
+#elif defined __SUNPRO_CC || defined __SUNPRO_C
+
+ #define DLL_EXPORT __global
+ #define DLL_IMPORT __global
+ #define DLL_LOCAL __hidden
+
+#else
+
+ #define DLL_EXPORT
+ #define DLL_IMPORT
+ #define DLL_LOCAL
+
+#endif
+
+
+#ifndef CPPCONN_PUBLIC_FUNC
+
+ #ifdef connector_jdbc_EXPORTS
+ #define CPPCONN_PUBLIC_FUNC DLL_EXPORT
+ #else
+ // this is for static build
+ #ifdef CPPCONN_LIB_BUILD
+ #define CPPCONN_PUBLIC_FUNC
+ #else
+ // this is for clients using dynamic lib
+ #define CPPCONN_PUBLIC_FUNC DLL_IMPORT
+ #endif
+ #endif
+
+#endif
+
+
+#ifdef _MSC_VER
+
+ /*
+ Warning 4251 is about non dll-interface classes being used by ones exported
+ from our DLL (for example std lib classes or Boost ones). Following
+ the crowd, we ignore this issue for now.
+ */
+
+ __pragma(warning (disable:4251))
+
+#elif defined __SUNPRO_CC || defined __SUNPRO_C
+#else
+
+ /*
+ These are triggered by, e.g., std::auto_ptr<> which is used by Boost.
+ */
+
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+
+#endif
+
+#endif //#ifndef _SQL_BUILD_CONFIG_H_
diff --git a/Libraries/mysql-connector/include/jdbc/cppconn/callback.h b/Libraries/mysql-connector/include/jdbc/cppconn/callback.h
new file mode 100644
index 0000000..af55532
--- /dev/null
+++ b/Libraries/mysql-connector/include/jdbc/cppconn/callback.h
@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) 2021, 2024, Oracle and/or its affiliates.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2.0, as
+ * published by the Free Software Foundation.
+ *
+ * This program is designed to work with certain software (including
+ * but not limited to OpenSSL) that is licensed under separate terms, as
+ * designated in a particular file or component or in included license
+ * documentation. The authors of MySQL hereby grant you an additional
+ * permission to link the program and your derivative works with the
+ * separately licensed software that they have either included with
+ * the program or referenced in the documentation.
+ *
+ * Without limiting anything contained in the foregoing, this file,
+ * which is part of Connector/C++, is also subject to the
+ * Universal FOSS Exception, version 1.0, a copy of which can be found at
+ * https://oss.oracle.com/licenses/universal-foss-exception.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License, version 2.0, for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+
+
+#ifndef _SQL_CALLBACK_H_
+#define _SQL_CALLBACK_H_
+
+#include "sqlstring.h"
+#include
+
+namespace sql
+{
+
+namespace mysql
+{
+class MySQL_Connection;
+class MySQL_Driver;
+}
+
+
+/*
+ A callback to be used with `Driver::setCallback()` to define reaction
+ to the user action request during WebAuthn authentication handshake.
+
+ The client library defines default reaction which prints message on stderr.
+ This callback can be used to change it.
+
+ Example usage:
+
+ // Use lambda
+
+ driver->setCallback(WebAuthn_Callback{[](SQLString msg){
+ cerr << "User action request: " << msg << endl;
+ }});
+
+ // Disable default behavior (and do nothing upon action request)
+
+ driver->setCallback(WebAuthn_Callback{});
+
+ // Return to default behavior
+
+ driver->setCallbacak(WebAuthn_Callback{nullptr});
+
+ // User defined callback
+
+ struct My_Callback : WebAuthn_Callback
+ {
+ void ActionRequested(SQLString) override;
+ }
+ cb;
+
+ driver->setCallback(cb);
+*/
+
+class WebAuthn_Callback
+{
+ std::function callback_func;
+
+public:
+
+ /*
+ Create a callback that will call given lambda upon user action request.
+ */
+
+ WebAuthn_Callback(std::function&& cb)
+ : callback_func{std::move(cb)}
+ {}
+
+ /*
+ Create an empty callback that will do nothing upon user action request.
+ This disables the default callback defined by the client library.
+ */
+
+ WebAuthn_Callback()
+ : callback_func{[](SQLString){}}
+ {}
+
+ /*
+ Create a null callback. Setting such callback has the effect of using
+ the default callback defined by the client library.
+ */
+
+ WebAuthn_Callback(std::nullptr_t)
+ {}
+
+ /*
+ Derived class can override this method to react to user action request.
+ */
+
+ virtual void ActionRequested(sql::SQLString msg)
+ {
+ if (callback_func)
+ callback_func(msg);
+ }
+
+ // Returns true if this callback is not null.
+
+ operator bool() const
+ {
+ return (bool)callback_func;
+ }
+
+ void operator()(sql::SQLString msg)
+ {
+ ActionRequested(msg);
+ }
+
+};
+
+
+/*
+ * TODO: This class is not needed. Remove it when the decision to
+ * break ABI is made.
+ *
+ * Class that provides functionality allowing user code to set the
+ * callback functions through inheriting, passing the callback as
+ * constructor parameters or using lambdas.
+ */
+
+class Fido_Callback
+{
+ std::function callback_func = nullptr;
+ bool is_null = false;
+
+public:
+
+ /**
+ * Constructor to set the callback as function or as lambda
+ */
+ Fido_Callback(std::function cb) : callback_func(cb)
+ {}
+
+ Fido_Callback()
+ {}
+
+ /**
+ * Constructor to reset the callback to default
+ */
+ Fido_Callback(std::nullptr_t) : is_null(true)
+ {}
+
+ /**
+ * Override this message to receive Fido Action Requests
+ */
+ virtual void FidoActionRequested(sql::SQLString msg)
+ {
+ if (callback_func)
+ callback_func(msg);
+ }
+
+ operator bool() const
+ {
+ return !is_null;
+ }
+
+ void operator()(sql::SQLString msg)
+ {
+ if (is_null)
+ return;
+ FidoActionRequested(msg);
+ }
+
+ friend class mysql::MySQL_Connection;
+ friend class mysql::MySQL_Driver;
+};
+
+
+} /* namespace sql */
+
+#endif // _SQL_CONNECTION_H_
diff --git a/Libraries/mysql-connector/include/jdbc/cppconn/config.h b/Libraries/mysql-connector/include/jdbc/cppconn/config.h
new file mode 100644
index 0000000..a29a218
--- /dev/null
+++ b/Libraries/mysql-connector/include/jdbc/cppconn/config.h
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2009, 2024, Oracle and/or its affiliates.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2.0, as
+ * published by the Free Software Foundation.
+ *
+ * This program is designed to work with certain software (including
+ * but not limited to OpenSSL) that is licensed under separate terms, as
+ * designated in a particular file or component or in included license
+ * documentation. The authors of MySQL hereby grant you an additional
+ * permission to link the program and your derivative works with the
+ * separately licensed software that they have either included with
+ * the program or referenced in the documentation.
+ *
+ * Without limiting anything contained in the foregoing, this file,
+ * which is part of Connector/C++, is also subject to the
+ * Universal FOSS Exception, version 1.0, a copy of which can be found at
+ * https://oss.oracle.com/licenses/universal-foss-exception.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License, version 2.0, for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+// libmysql defines HAVE_STRTOUL (on win), so we have to follow different pattern in definitions names
+// to avoid annoying warnings.
+
+#define HAVE_FUNCTION_STRTOLD 1
+#define HAVE_FUNCTION_STRTOLL 1
+#define HAVE_FUNCTION_STRTOL 1
+#define HAVE_FUNCTION_STRTOULL 1
+
+#define HAVE_FUNCTION_STRTOUL 1
+
+#define HAVE_FUNCTION_STRTOIMAX 1
+#define HAVE_FUNCTION_STRTOUMAX 1
+
+#define HAVE_STDINT_H 1
+#define HAVE_INTTYPES_H 1
+
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_MS_INT8 1
+#define HAVE_MS_UINT8 1
+#define HAVE_MS_INT16 1
+#define HAVE_MS_UINT16 1
+#define HAVE_MS_INT32 1
+#define HAVE_MS_UINT32 1
+#define HAVE_MS_INT64 1
+#define HAVE_MS_UINT64 1
+
+
+#ifdef HAVE_STDINT_H
+#include
+#endif
+
+
+#if defined(HAVE_INTTYPES_H) && !defined(_WIN32)
+#include
+#endif
+
+#if defined(_WIN32)
+#ifndef CPPCONN_DONT_TYPEDEF_MS_TYPES_TO_C99_TYPES
+
+#if _MSC_VER >= 1600
+
+#include
+
+#else
+
+#if !defined(HAVE_INT8_T) && defined(HAVE_MS_INT8)
+typedef __int8 int8_t;
+#endif
+
+#ifdef HAVE_MS_UINT8
+typedef unsigned __int8 uint8_t;
+#endif
+#ifdef HAVE_MS_INT16
+typedef __int16 int16_t;
+#endif
+
+#ifdef HAVE_MS_UINT16
+typedef unsigned __int16 uint16_t;
+#endif
+
+#ifdef HAVE_MS_INT32
+typedef __int32 int32_t;
+#endif
+
+#ifdef HAVE_MS_UINT32
+typedef unsigned __int32 uint32_t;
+#endif
+
+#ifdef HAVE_MS_INT64
+typedef __int64 int64_t;
+#endif
+#ifdef HAVE_MS_UINT64
+typedef unsigned __int64 uint64_t;
+#endif
+
+#endif // _MSC_VER >= 1600
+#endif // CPPCONN_DONT_TYPEDEF_MS_TYPES_TO_C99_TYPES
+#endif // _WIN32
diff --git a/Libraries/mysql-connector/include/jdbc/cppconn/connection.h b/Libraries/mysql-connector/include/jdbc/cppconn/connection.h
new file mode 100644
index 0000000..b33f3ce
--- /dev/null
+++ b/Libraries/mysql-connector/include/jdbc/cppconn/connection.h
@@ -0,0 +1,285 @@
+/*
+ * Copyright (c) 2008, 2024, Oracle and/or its affiliates.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2.0, as
+ * published by the Free Software Foundation.
+ *
+ * This program is designed to work with certain software (including
+ * but not limited to OpenSSL) that is licensed under separate terms, as
+ * designated in a particular file or component or in included license
+ * documentation. The authors of MySQL hereby grant you an additional
+ * permission to link the program and your derivative works with the
+ * separately licensed software that they have either included with
+ * the program or referenced in the documentation.
+ *
+ * Without limiting anything contained in the foregoing, this file,
+ * which is part of Connector/C++, is also subject to the
+ * Universal FOSS Exception, version 1.0, a copy of which can be found at
+ * https://oss.oracle.com/licenses/universal-foss-exception.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License, version 2.0, for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+
+
+#ifndef _SQL_CONNECTION_H_
+#define _SQL_CONNECTION_H_
+
+#include