MINIFICPP-1065 - Fix UUID generation uniqueness and thread safety

 - Changed UUID implementation to native functions on Windows and OSSP uuid on other platforms
 - Added UUID tests, including multi-threaded collision resistance

Signed-off-by: Arpad Boda <aboda@apache.org>

This closes #677
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4d26dd0..9a04e55 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -37,7 +37,6 @@
 option(LIBC_STATIC "Instructs the build system to statically link libstdc++ and glibc into minifiexe. Experiemental" OFF)
 option(OPENSSL_OFF "Disables OpenSSL" OFF)
 option(ENABLE_OPS "Enable Operations/zlib Tools" ON)
-option(USE_SYSTEM_UUID "Instructs the build system to search for and use a UUID library available in the host system" OFF)
 option(ENABLE_JNI "Instructs the build system to enable the JNI extension" OFF)
 option(ENABLE_OPENCV "Instructs the build system to enable the OpenCV extension" OFF)
 option(ENABLE_OPC "Instructs the build system to enable the OPC extension" OFF)
@@ -253,17 +252,12 @@
 
 include(Extensions)
 
-list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/uuid/dummy")
-if (WIN32)
-	include_directories("thirdparty/uuid/include/win32/")
-else()
-	include_directories("thirdparty/uuid/include/posix")
+if(NOT WIN32)
+	include(BundledOSSPUUID)
+	use_bundled_osspuuid(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
 endif()
-add_subdirectory("thirdparty/uuid")
-include_directories(thirdparty/ut)
-set(UUID_FOUND "YES" CACHE STRING "" FORCE)
-set(UUID_LIBRARIES "uuid" CACHE STRING "" FORCE)
 
+include_directories(thirdparty/ut)
 
 if (DISABLE_CURL)
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDISABLE_CURL")
diff --git a/LICENSE b/LICENSE
index 370b7e5..813c4d0 100644
--- a/LICENSE
+++ b/LICENSE
@@ -238,36 +238,6 @@
 	 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 	 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-This product bundles 'libuuid' which is available under a "3-clause BSD" license.
-
-	Copyright (C) 1996, 1997 Theodore Ts'o.
-
-	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, and the entire permission notice in its entirety,
-	   including the disclaimer of warranties.
-	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 of the author may not 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, ALL OF
-	WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
-	DAMAGE.
-
 This product bundles 'spdlog' which is available under an MIT license.
 
 	Copyright (c) 2016 Alexander Dalshov.
@@ -1797,3 +1767,29 @@
 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.
+
+This product bundles 'OSSP uuid' which is available under an MIT license
+
+Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
+Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
+
+This file is part of OSSP uuid, a library for the generation
+of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
+
+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.
+
+THIS SOFTWARE IS PROVIDED ``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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+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.
diff --git a/cmake/BundledOSSPUUID.cmake b/cmake/BundledOSSPUUID.cmake
new file mode 100644
index 0000000..723633d
--- /dev/null
+++ b/cmake/BundledOSSPUUID.cmake
@@ -0,0 +1,79 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+#
+
+function(use_bundled_osspuuid SOURCE_DIR BINARY_DIR)
+    message("Using bundled ossp-uuid")
+
+    # Define patch step
+    find_package(Patch REQUIRED)
+    set(PC "${Patch_EXECUTABLE}" -p1 -i "${SOURCE_DIR}/thirdparty/ossp-uuid/ossp-uuid-mac-fix.patch")
+
+    # Define byproducts
+    set(BYPRODUCTS "lib/libuuid.a"
+                   "lib/libuuid++.a")
+
+    set(OSSPUUID_BIN_DIR "${BINARY_DIR}/thirdparty/ossp-uuid-install" CACHE STRING "" FORCE)
+
+    FOREACH(BYPRODUCT ${BYPRODUCTS})
+        LIST(APPEND OSSPUUID_LIBRARIES_LIST "${OSSPUUID_BIN_DIR}/${BYPRODUCT}")
+    ENDFOREACH(BYPRODUCT)
+
+    # Build project
+    set(CONFIGURE_COMMAND ./configure "CFLAGS=-fPIC" "CXXFLAGS=-fPIC" --with-cxx --without-perl --without-php --without-pgsql "--prefix=${BINARY_DIR}/thirdparty/ossp-uuid-install")
+    string(TOLOWER "${CMAKE_BUILD_TYPE}" build_type)
+    if(NOT build_type MATCHES debug)
+        list(APPEND CONFIGURE_COMMAND --enable-debug=yes)
+    endif()
+
+    ExternalProject_Add(
+            ossp-uuid-external
+            URL "https://deb.debian.org/debian/pool/main/o/ossp-uuid/ossp-uuid_1.6.2.orig.tar.gz"
+            URL_HASH "SHA256=11a615225baa5f8bb686824423f50e4427acd3f70d394765bdff32801f0fd5b0"
+            BUILD_IN_SOURCE true
+            SOURCE_DIR "${BINARY_DIR}/thirdparty/ossp-uuid-src"
+            BUILD_COMMAND make
+            CMAKE_COMMAND ""
+            UPDATE_COMMAND ""
+            INSTALL_COMMAND make install
+            BUILD_BYPRODUCTS ${OSSPUUID_LIBRARIES_LIST}
+            CONFIGURE_COMMAND ""
+            PATCH_COMMAND ${PC} && ${CONFIGURE_COMMAND}
+            STEP_TARGETS build
+            EXCLUDE_FROM_ALL TRUE
+    )
+
+    # Set variables
+    set(UUID_FOUND "YES" CACHE STRING "" FORCE)
+    set(UUID_INCLUDE_DIRS "${OSSPUUID_BIN_DIR}/include" CACHE STRING "" FORCE)
+    set(UUID_LIBRARY "${OSSPUUID_BIN_DIR}/lib/libuuid.a" CACHE STRING "" FORCE)
+    set(UUID_CPP_LIBRARY "${OSSPUUID_BIN_DIR}/lib/libuuid++.a" CACHE STRING "" FORCE)
+
+    # Create imported targets
+    file(MAKE_DIRECTORY ${UUID_INCLUDE_DIRS})
+
+    add_library(OSSP::libuuid STATIC IMPORTED)
+    set_target_properties(OSSP::libuuid PROPERTIES IMPORTED_LOCATION "${UUID_LIBRARY}")
+    add_dependencies(OSSP::libuuid ossp-uuid-external)
+    set_property(TARGET OSSP::libuuid APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${UUID_INCLUDE_DIRS}")
+
+    add_library(OSSP::libuuid++ STATIC IMPORTED)
+    set_target_properties(OSSP::libuuid++ PROPERTIES IMPORTED_LOCATION "${UUID_CPP_LIBRARY}")
+    add_dependencies(OSSP::libuuid++ ossp-uuid-external)
+    set_property(TARGET OSSP::libuuid++ APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${UUID_INCLUDE_DIRS}")
+endfunction(use_bundled_osspuuid)
diff --git a/cmake/uuid/dummy/FindUUID.cmake b/cmake/uuid/dummy/FindUUID.cmake
deleted file mode 100644
index 81ea510..0000000
--- a/cmake/uuid/dummy/FindUUID.cmake
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-# Dummy UUID find for when we use bundled version
diff --git a/cmake/uuid/sys/FindUUID.cmake b/cmake/uuid/sys/FindUUID.cmake
deleted file mode 100644
index 2402d08..0000000
--- a/cmake/uuid/sys/FindUUID.cmake
+++ /dev/null
@@ -1,37 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-
-find_path(UUID_INCLUDE_DIR
-	NAMES uuid/uuid.h
-	HINTS ${UUID_DIR}/include
-			$ENV{UUID_DIR}/include
-	PATHS /usr/include
-          /usr/local/include )
-
-find_library(UUID_LIBRARY NAMES uuid
-             PATHS /usr/lib /usr/local/lib /usr/local/lib64 /lib/i386-linux-gnu /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu)
-
-set(UUID_INCLUDE_DIRS ${UUID_INCLUDE_DIR})
-set(UUID_LIBRARIES ${UUID_LIBRARY})
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(UUID  DEFAULT_MSG
-                                  UUID_LIBRARY UUID_INCLUDE_DIR)
-
-
-mark_as_advanced(UUID_INCLUDE_DIRS UUID_LIBRARIES)
diff --git a/controller/CMakeLists.txt b/controller/CMakeLists.txt
index 370197a..9ab9cfb 100644
--- a/controller/CMakeLists.txt
+++ b/controller/CMakeLists.txt
@@ -54,11 +54,8 @@
   target_link_libraries(minificontroller "${CMAKE_THREAD_LIBS_INIT}")
 endif()
 
-# Include UUID
-find_package(UUID REQUIRED)
-
 # Include OpenSSL
-find_package(OpenSSL )
+find_package(OpenSSL)
 if (OPENSSL_FOUND)
 include_directories(${OPENSSL_INCLUDE_DIR})
 endif(OPENSSL_FOUND)
@@ -80,7 +77,7 @@
   	target_link_libraries(minificontroller semaphore)
 endif()
 
-target_link_libraries(minificontroller yaml-cpp c-library civetweb-cpp ${JSON_CPP_LIB} ${UUID_LIBRARIES} cxxopts)
+target_link_libraries(minificontroller yaml-cpp c-library civetweb-cpp ${JSON_CPP_LIB} cxxopts)
 
 
 if (APPLE)
diff --git a/extensions/civetweb/tests/ListenHTTPTests.cpp b/extensions/civetweb/tests/ListenHTTPTests.cpp
index 76e9342..b628139 100644
--- a/extensions/civetweb/tests/ListenHTTPTests.cpp
+++ b/extensions/civetweb/tests/ListenHTTPTests.cpp
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-#include <uuid/uuid.h>
 #include <fstream>
 #include <map>
 #include <memory>
diff --git a/extensions/http-curl/client/HTTPClient.h b/extensions/http-curl/client/HTTPClient.h
index b876bac..d00a7e9 100644
--- a/extensions/http-curl/client/HTTPClient.h
+++ b/extensions/http-curl/client/HTTPClient.h
@@ -33,7 +33,6 @@
 #include <iostream>
 #include <string>
 #include <curl/easy.h>
-#include <uuid/uuid.h>
 #ifdef WIN32
 #include <regex>
 #else
diff --git a/extensions/http-curl/processors/InvokeHTTP.cpp b/extensions/http-curl/processors/InvokeHTTP.cpp
index 483cfa3..dbb28ad 100644
--- a/extensions/http-curl/processors/InvokeHTTP.cpp
+++ b/extensions/http-curl/processors/InvokeHTTP.cpp
@@ -23,7 +23,6 @@
 #include <regex.h>
 #endif
 #include <curl/easy.h>
-#include <uuid/uuid.h>
 #include <memory>
 #include <algorithm>
 #include <cctype>
diff --git a/extensions/http-curl/sitetosite/HTTPProtocol.h b/extensions/http-curl/sitetosite/HTTPProtocol.h
index f31db8f..25dc180 100644
--- a/extensions/http-curl/sitetosite/HTTPProtocol.h
+++ b/extensions/http-curl/sitetosite/HTTPProtocol.h
@@ -26,7 +26,6 @@
 #include <set>
 #include <thread>
 #include <algorithm>
-#include <uuid/uuid.h>
 #include "HTTPTransaction.h"
 #include "sitetosite/SiteToSite.h"
 #include "sitetosite/SiteToSiteClient.h"
diff --git a/extensions/http-curl/tests/unit/HTTPClientTests.cpp b/extensions/http-curl/tests/unit/HTTPClientTests.cpp
index 82919b0..c256c69 100644
--- a/extensions/http-curl/tests/unit/HTTPClientTests.cpp
+++ b/extensions/http-curl/tests/unit/HTTPClientTests.cpp
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-#include <uuid/uuid.h>
 #include <fstream>
 #include <map>
 #include <memory>
@@ -93,4 +92,4 @@
   REQUIRE("foobar\r\nbuzz" == std::string(response.begin(), response.end()));
 
   LogTestController::getInstance().reset();
-}
\ No newline at end of file
+}
diff --git a/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp b/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp
index 9a5822a..48e6710 100644
--- a/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp
+++ b/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-#include <uuid/uuid.h>
 #include <fstream>
 #include <map>
 #include <memory>
diff --git a/extensions/jni/ExecuteJavaControllerService.cpp b/extensions/jni/ExecuteJavaControllerService.cpp
index 7ea1585..66f7bfe 100644
--- a/extensions/jni/ExecuteJavaControllerService.cpp
+++ b/extensions/jni/ExecuteJavaControllerService.cpp
@@ -19,7 +19,6 @@
 #include "ExecuteJavaControllerService.h"
 
 #include <regex>
-#include <uuid/uuid.h>
 #include <memory>
 #include <algorithm>
 #include <cctype>
diff --git a/extensions/jni/ExecuteJavaProcessor.cpp b/extensions/jni/ExecuteJavaProcessor.cpp
index 3a7d154..aadfae2 100644
--- a/extensions/jni/ExecuteJavaProcessor.cpp
+++ b/extensions/jni/ExecuteJavaProcessor.cpp
@@ -19,7 +19,6 @@
 #include "ExecuteJavaProcessor.h"
 
 #include <regex>
-#include <uuid/uuid.h>
 #include <memory>
 #include <algorithm>
 #include <cctype>
diff --git a/extensions/opencv/tests/CaptureRTSPFrameTest.cpp b/extensions/opencv/tests/CaptureRTSPFrameTest.cpp
index 9993da3..0c02c2f 100644
--- a/extensions/opencv/tests/CaptureRTSPFrameTest.cpp
+++ b/extensions/opencv/tests/CaptureRTSPFrameTest.cpp
@@ -18,7 +18,6 @@
 
 #include "CaptureRTSPFrame.h"
 
-#include <uuid/uuid.h>
 #include <map>
 #include <memory>
 #include <fstream>
diff --git a/extensions/pcap/CapturePacket.cpp b/extensions/pcap/CapturePacket.cpp
index 1b5d2e7..f232d9e 100644
--- a/extensions/pcap/CapturePacket.cpp
+++ b/extensions/pcap/CapturePacket.cpp
@@ -17,7 +17,6 @@
  */
 
 #include <regex>
-#include <uuid/uuid.h>
 #include <memory>
 #include <algorithm>
 #include <cctype>
diff --git a/extensions/rocksdb-repos/CMakeLists.txt b/extensions/rocksdb-repos/CMakeLists.txt
index 34faace..56ec15e 100644
--- a/extensions/rocksdb-repos/CMakeLists.txt
+++ b/extensions/rocksdb-repos/CMakeLists.txt
@@ -40,9 +40,7 @@
 endif()
 
 
-# Include UUID
-find_package(UUID REQUIRED)
-target_link_libraries(minifi-rocksdb-repos ${LIBMINIFI} ${UUID_LIBRARIES})
+target_link_libraries(minifi-rocksdb-repos ${LIBMINIFI})
 target_link_libraries(minifi-rocksdb-repos ${CMAKE_DL_LIBS} )
 if (ROCKSDB_FOUND AND NOT BUILD_ROCKSDB)
 	target_link_libraries(minifi-rocksdb-repos ${ROCKSDB_LIBRARIES} )
diff --git a/extensions/script/CMakeLists.txt b/extensions/script/CMakeLists.txt
index bbb53f6..a82b2aa 100644
--- a/extensions/script/CMakeLists.txt
+++ b/extensions/script/CMakeLists.txt
@@ -52,8 +52,7 @@
   target_link_libraries(minifi-script-extensions "${CMAKE_THREAD_LIBS_INIT}")
 endif()
 
-find_package(UUID REQUIRED)
-target_link_libraries(minifi-script-extensions ${LIBMINIFI} ${UUID_LIBRARIES})
+target_link_libraries(minifi-script-extensions ${LIBMINIFI})
 find_package(OpenSSL REQUIRED)
 include_directories(${OPENSSL_INCLUDE_DIR})
 target_link_libraries(minifi-script-extensions ${CMAKE_DL_LIBS})
@@ -73,7 +72,7 @@
     file(GLOB PY_SOURCES  "python/*.cpp")
     add_library(minifi-python-extensions STATIC ${PY_SOURCES})
 
-    target_link_libraries(minifi-python-extensions ${PYTHON_LIBRARIES})
+    target_link_libraries(minifi-python-extensions ${LIBMINIFI} ${PYTHON_LIBRARIES})
     target_link_libraries(minifi-script-extensions minifi-python-extensions)
 endif()
 
diff --git a/extensions/sftp/CMakeLists.txt b/extensions/sftp/CMakeLists.txt
index 073acb8..47ea7bc 100644
--- a/extensions/sftp/CMakeLists.txt
+++ b/extensions/sftp/CMakeLists.txt
@@ -44,9 +44,7 @@
 	endif()
 endif ()
 
-# Include UUID
-find_package(UUID REQUIRED)
-target_link_libraries(minifi-sftp ${LIBMINIFI} ${UUID_LIBRARIES})
+target_link_libraries(minifi-sftp ${LIBMINIFI})
 
 # Include OpenSSL
 set(OPENSSL_USE_STATIC_LIBS TRUE)
diff --git a/extensions/sftp/client/SFTPClient.h b/extensions/sftp/client/SFTPClient.h
index 8e6c234..6bf2af8 100644
--- a/extensions/sftp/client/SFTPClient.h
+++ b/extensions/sftp/client/SFTPClient.h
@@ -24,7 +24,6 @@
 #include <vector>
 #include <iostream>
 #include <string>
-#include <uuid/uuid.h>
 #include <vector>
 
 #include "utils/HTTPClient.h"
diff --git a/extensions/standard-processors/processors/PutFile.cpp b/extensions/standard-processors/processors/PutFile.cpp
index 54b5b04..1496feb 100644
--- a/extensions/standard-processors/processors/PutFile.cpp
+++ b/extensions/standard-processors/processors/PutFile.cpp
@@ -20,7 +20,6 @@
 
 #include "PutFile.h"
 #include <sys/stat.h>
-#include <uuid/uuid.h>
 #include <cstdint>
 #include <cstdio>
 #include <iostream>
diff --git a/extensions/standard-processors/tests/integration/TestExecuteProcess.cpp b/extensions/standard-processors/tests/integration/TestExecuteProcess.cpp
index 0f01433..138e610 100644
--- a/extensions/standard-processors/tests/integration/TestExecuteProcess.cpp
+++ b/extensions/standard-processors/tests/integration/TestExecuteProcess.cpp
@@ -19,7 +19,6 @@
 
 #include <type_traits> //NOLINT
 #include <sys/stat.h> //NOLINT
-#include <uuid/uuid.h> //NOLINT
 #include <chrono> //NOLINT
 #include <thread> //NOLINT
 #undef NDEBUG
diff --git a/extensions/standard-processors/tests/unit/ClassLoaderTests.cpp b/extensions/standard-processors/tests/unit/ClassLoaderTests.cpp
index fdc0b26..37f1145 100644
--- a/extensions/standard-processors/tests/unit/ClassLoaderTests.cpp
+++ b/extensions/standard-processors/tests/unit/ClassLoaderTests.cpp
@@ -15,7 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <uuid/uuid.h>
 #include "TestBase.h"
 #include "io/ClientSocket.h"
 #include "core/Processor.h"
diff --git a/extensions/standard-processors/tests/unit/ControllerServiceTests.cpp b/extensions/standard-processors/tests/unit/ControllerServiceTests.cpp
index fc53aa3..2b468cb 100644
--- a/extensions/standard-processors/tests/unit/ControllerServiceTests.cpp
+++ b/extensions/standard-processors/tests/unit/ControllerServiceTests.cpp
@@ -15,7 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <uuid/uuid.h>
 #include <memory>
 #include <string>
 #include <fstream>
diff --git a/extensions/standard-processors/tests/unit/ExtractTextTests.cpp b/extensions/standard-processors/tests/unit/ExtractTextTests.cpp
index a67c853..95f912a 100644
--- a/extensions/standard-processors/tests/unit/ExtractTextTests.cpp
+++ b/extensions/standard-processors/tests/unit/ExtractTextTests.cpp
@@ -15,7 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <uuid/uuid.h>
 #include <list>
 #include <fstream>
 #include <map>
diff --git a/extensions/standard-processors/tests/unit/GetTCPTests.cpp b/extensions/standard-processors/tests/unit/GetTCPTests.cpp
index f8ae3ea..86a8221 100644
--- a/extensions/standard-processors/tests/unit/GetTCPTests.cpp
+++ b/extensions/standard-processors/tests/unit/GetTCPTests.cpp
@@ -15,7 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <uuid/uuid.h>
 #include <utility>
 #include <memory>
 #include <string>
diff --git a/extensions/standard-processors/tests/unit/HashContentTest.cpp b/extensions/standard-processors/tests/unit/HashContentTest.cpp
index 55b964a..fe4e775 100644
--- a/extensions/standard-processors/tests/unit/HashContentTest.cpp
+++ b/extensions/standard-processors/tests/unit/HashContentTest.cpp
@@ -18,7 +18,6 @@
 
 #ifdef OPENSSL_SUPPORT
 
-#include <uuid/uuid.h>
 #include <fstream>
 #include <map>
 #include <memory>
diff --git a/extensions/standard-processors/tests/unit/ProcessorTests.cpp b/extensions/standard-processors/tests/unit/ProcessorTests.cpp
index 5c382f1..4024e67 100644
--- a/extensions/standard-processors/tests/unit/ProcessorTests.cpp
+++ b/extensions/standard-processors/tests/unit/ProcessorTests.cpp
@@ -15,7 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <uuid/uuid.h>
 #include <utility>
 #include <memory>
 #include <string>
diff --git a/extensions/standard-processors/tests/unit/PutFileTests.cpp b/extensions/standard-processors/tests/unit/PutFileTests.cpp
index b5b43f0..680a494 100644
--- a/extensions/standard-processors/tests/unit/PutFileTests.cpp
+++ b/extensions/standard-processors/tests/unit/PutFileTests.cpp
@@ -15,7 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <uuid/uuid.h>
 #include <sys/stat.h>
 #include <utility>
 #include <memory>
diff --git a/extensions/standard-processors/tests/unit/TailFileTests.cpp b/extensions/standard-processors/tests/unit/TailFileTests.cpp
index e0d2991..fda9df2 100644
--- a/extensions/standard-processors/tests/unit/TailFileTests.cpp
+++ b/extensions/standard-processors/tests/unit/TailFileTests.cpp
@@ -17,7 +17,6 @@
  */
 
 #include <stdio.h>
-#include <uuid/uuid.h>
 #include <fstream>
 #include <map>
 #include <memory>
diff --git a/extensions/usb-camera/CMakeLists.txt b/extensions/usb-camera/CMakeLists.txt
index 7c1acd1..cfe1258 100644
--- a/extensions/usb-camera/CMakeLists.txt
+++ b/extensions/usb-camera/CMakeLists.txt
@@ -57,8 +57,7 @@
   target_link_libraries(minifi-usb-camera-extensions "${CMAKE_THREAD_LIBS_INIT}")
 endif()
 
-find_package(UUID REQUIRED)
-target_link_libraries(minifi-usb-camera-extensions ${LIBMINIFI} ${UUID_LIBRARIES})
+target_link_libraries(minifi-usb-camera-extensions ${LIBMINIFI})
 find_package(OpenSSL REQUIRED)
 include_directories(${OPENSSL_INCLUDE_DIR})
 target_link_libraries(minifi-usb-camera-extensions ${CMAKE_DL_LIBS} )
diff --git a/extensions/windows-event-log/CMakeLists.txt b/extensions/windows-event-log/CMakeLists.txt
index 18a9ecf..584820f 100644
--- a/extensions/windows-event-log/CMakeLists.txt
+++ b/extensions/windows-event-log/CMakeLists.txt
@@ -47,9 +47,7 @@
 
 include_directories("${PUGI_BYPRODUCT_DIR}/include")
 add_dependencies(minifi-wel pugixml-external)
-# Include UUID
-find_package(UUID REQUIRED)
-target_link_libraries(minifi-wel ${LIBMINIFI} ${BYPRODUCT} ${UUID_LIBRARIES})
+target_link_libraries(minifi-wel ${LIBMINIFI} ${BYPRODUCT})
 
 target_link_libraries(minifi-wel ${CMAKE_DL_LIBS} )
 find_package(ZLIB REQUIRED)
diff --git a/extensions/windows-event-log/tests/MetadataWalkerTests.cpp b/extensions/windows-event-log/tests/MetadataWalkerTests.cpp
index b9531b0..a517c9f 100644
--- a/extensions/windows-event-log/tests/MetadataWalkerTests.cpp
+++ b/extensions/windows-event-log/tests/MetadataWalkerTests.cpp
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-#include <uuid/uuid.h>
 #include <fstream>
 #include <map>
 #include <memory>
@@ -123,4 +122,4 @@
 	REQUIRE(expected == programmaticallyResolved);
 
 
-}
\ No newline at end of file
+}
diff --git a/libminifi/CMakeLists.txt b/libminifi/CMakeLists.txt
index 80a7119..34f72dd 100644
--- a/libminifi/CMakeLists.txt
+++ b/libminifi/CMakeLists.txt
@@ -33,10 +33,8 @@
 
 if (WIN32)
 	add_definitions(-DWIN32_LEAN_AND_MEAN)
-	include_directories("thirdparty/uuid/include/win32/")
-else()
-	include_directories("thirdparty/uuid/include/posix")
 endif()
+
 IF (IOS)
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fobjc-abi-version=2 -fobjc-arc -std=gnu++11 -stdlib=libc++ -isysroot ${CMAKE_OSX_SYSROOT} -DIOS")
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fobjc-abi-version=2 -fobjc-arc -isysroot ${CMAKE_OSX_SYSROOT} -DIOS")
@@ -109,7 +107,7 @@
 # header only library
 add_library(spdlog STATIC ${SPD_SOURCES})
 add_library(core-minifi STATIC ${SOURCES})
-target_link_libraries(core-minifi ${CMAKE_DL_LIBS} ${UUID_LIBRARIES} yaml-cpp)
+target_link_libraries(core-minifi ${CMAKE_DL_LIBS} yaml-cpp)
 
 #target_link_libraries(core-minifi  PRIVATE bsdiff )
 
@@ -118,6 +116,10 @@
 
 target_link_libraries (core-minifi ${ZLIB_LIBRARIES})
 
+if(NOT WIN32)
+	target_link_libraries (core-minifi OSSP::libuuid++)
+endif()
+
 
 # Include OpenSSL
 if (OPENSSL_FOUND)
@@ -155,13 +157,17 @@
 if (APPLE)
 	target_link_libraries(core-minifi-shared ${CMAKE_DL_LIBS} yaml-cpp)
 else()
-	target_link_libraries(core-minifi-shared ${CMAKE_DL_LIBS} uuid-shared yaml-cpp)
+	target_link_libraries(core-minifi-shared ${CMAKE_DL_LIBS} yaml-cpp)
 endif()
 
 include_directories(${ZLIB_INCLUDE_DIRS})
 
 target_link_libraries (core-minifi-shared ${ZLIB_LIBRARIES})
 
+if(NOT WIN32)
+	target_link_libraries (core-minifi-shared OSSP::libuuid++)
+endif()
+
 # Include OpenSSL
 
 if (OPENSSL_FOUND)
diff --git a/libminifi/cmake/FindUUID.cmake b/libminifi/cmake/FindUUID.cmake
deleted file mode 100644
index 2402d08..0000000
--- a/libminifi/cmake/FindUUID.cmake
+++ /dev/null
@@ -1,37 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-
-find_path(UUID_INCLUDE_DIR
-	NAMES uuid/uuid.h
-	HINTS ${UUID_DIR}/include
-			$ENV{UUID_DIR}/include
-	PATHS /usr/include
-          /usr/local/include )
-
-find_library(UUID_LIBRARY NAMES uuid
-             PATHS /usr/lib /usr/local/lib /usr/local/lib64 /lib/i386-linux-gnu /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu)
-
-set(UUID_INCLUDE_DIRS ${UUID_INCLUDE_DIR})
-set(UUID_LIBRARIES ${UUID_LIBRARY})
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(UUID  DEFAULT_MSG
-                                  UUID_LIBRARY UUID_INCLUDE_DIR)
-
-
-mark_as_advanced(UUID_INCLUDE_DIRS UUID_LIBRARIES)
diff --git a/libminifi/include/Connection.h b/libminifi/include/Connection.h
index 1f81fec..c2d30df 100644
--- a/libminifi/include/Connection.h
+++ b/libminifi/include/Connection.h
@@ -20,7 +20,6 @@
 #ifndef __CONNECTION_H__
 #define __CONNECTION_H__
 
-#include <uuid/uuid.h>
 #include <vector>
 #include <queue>
 #include <map>
diff --git a/libminifi/include/FlowController.h b/libminifi/include/FlowController.h
index aa3da22..2e40bb9 100644
--- a/libminifi/include/FlowController.h
+++ b/libminifi/include/FlowController.h
@@ -20,7 +20,6 @@
 #ifndef __FLOW_CONTROLLER_H__
 #define __FLOW_CONTROLLER_H__
 
-#include <uuid/uuid.h>
 #include <stdio.h>
 #include <vector>
 #include <queue>
diff --git a/libminifi/include/FlowFileRecord.h b/libminifi/include/FlowFileRecord.h
index 795003f..f233627 100644
--- a/libminifi/include/FlowFileRecord.h
+++ b/libminifi/include/FlowFileRecord.h
@@ -20,7 +20,6 @@
 #ifndef __FLOW_FILE_RECORD_H__
 #define __FLOW_FILE_RECORD_H__
 
-#include <uuid/uuid.h>
 #include <vector>
 #include <queue>
 #include <map>
diff --git a/libminifi/include/ResourceClaim.h b/libminifi/include/ResourceClaim.h
index e4523e4..bd0b6b8 100644
--- a/libminifi/include/ResourceClaim.h
+++ b/libminifi/include/ResourceClaim.h
@@ -21,7 +21,6 @@
 #define __RESOURCE_CLAIM_H__
 
 #include <string>
-#include <uuid/uuid.h>
 #include <vector>
 #include <queue>
 #include <map>
diff --git a/libminifi/include/SchedulingAgent.h b/libminifi/include/SchedulingAgent.h
index 3b94d0e..07126ab 100644
--- a/libminifi/include/SchedulingAgent.h
+++ b/libminifi/include/SchedulingAgent.h
@@ -20,7 +20,6 @@
 #ifndef __SCHEDULING_AGENT_H__
 #define __SCHEDULING_AGENT_H__
 
-#include <uuid/uuid.h>
 #include <vector>
 #include <map>
 #include <mutex>
diff --git a/libminifi/include/core/Core.h b/libminifi/include/core/Core.h
index e18999c..51712e3 100644
--- a/libminifi/include/core/Core.h
+++ b/libminifi/include/core/Core.h
@@ -24,7 +24,6 @@
 #include <iostream>
 #include <memory>
 #include <string>
-#include <uuid/uuid.h>
 #include <properties/Configure.h>
 
 #ifdef WIN32
diff --git a/libminifi/include/core/ProcessContext.h b/libminifi/include/core/ProcessContext.h
index be8ed91..db44db9 100644
--- a/libminifi/include/core/ProcessContext.h
+++ b/libminifi/include/core/ProcessContext.h
@@ -18,7 +18,6 @@
 #ifndef __PROCESS_CONTEXT_H__
 #define __PROCESS_CONTEXT_H__
 
-#include <uuid/uuid.h>
 #include <vector>
 #include <queue>
 #include <map>
diff --git a/libminifi/include/core/ProcessContextBuilder.h b/libminifi/include/core/ProcessContextBuilder.h
index 7975024..fad89af 100644
--- a/libminifi/include/core/ProcessContextBuilder.h
+++ b/libminifi/include/core/ProcessContextBuilder.h
@@ -18,7 +18,6 @@
 #ifndef __PROCESS_CONTEXT_BUILDER_H__
 #define __PROCESS_CONTEXT_BUILDER_H__
 
-#include <uuid/uuid.h>
 #include <vector>
 #include <queue>
 #include <map>
diff --git a/libminifi/include/core/ProcessGroup.h b/libminifi/include/core/ProcessGroup.h
index 6341523..ca65bee 100644
--- a/libminifi/include/core/ProcessGroup.h
+++ b/libminifi/include/core/ProcessGroup.h
@@ -18,7 +18,6 @@
 #ifndef __PROCESS_GROUP_H__
 #define __PROCESS_GROUP_H__
 
-#include <uuid/uuid.h>
 #include <vector>
 #include <queue>
 #include <map>
diff --git a/libminifi/include/core/ProcessSession.h b/libminifi/include/core/ProcessSession.h
index 26b8184..ddb6189 100644
--- a/libminifi/include/core/ProcessSession.h
+++ b/libminifi/include/core/ProcessSession.h
@@ -18,7 +18,6 @@
 #ifndef __PROCESS_SESSION_H__
 #define __PROCESS_SESSION_H__
 
-#include <uuid/uuid.h>
 #include <vector>
 #include <queue>
 #include <map>
diff --git a/libminifi/include/core/Processor.h b/libminifi/include/core/Processor.h
index ee16b62..56e4c76 100644
--- a/libminifi/include/core/Processor.h
+++ b/libminifi/include/core/Processor.h
@@ -18,7 +18,6 @@
 #ifndef __PROCESSOR_H__
 #define __PROCESSOR_H__
 
-#include <uuid/uuid.h>
 #include <vector>
 #include <queue>
 #include <map>
diff --git a/libminifi/include/core/Relationship.h b/libminifi/include/core/Relationship.h
index f2c442a..d48a6b7 100644
--- a/libminifi/include/core/Relationship.h
+++ b/libminifi/include/core/Relationship.h
@@ -21,7 +21,6 @@
 #define __RELATIONSHIP_H__
 
 #include <string>
-#include <uuid/uuid.h>
 #include <vector>
 #include <queue>
 #include <map>
diff --git a/libminifi/include/core/Repository.h b/libminifi/include/core/Repository.h
index 099eeca..ca40ef5 100644
--- a/libminifi/include/core/Repository.h
+++ b/libminifi/include/core/Repository.h
@@ -20,7 +20,6 @@
 #ifndef __REPOSITORY_H__
 #define __REPOSITORY_H__
 
-#include <uuid/uuid.h>
 #include <atomic>
 #include <cstdint>
 #include <cstring>
diff --git a/libminifi/include/provenance/Provenance.h b/libminifi/include/provenance/Provenance.h
index 8e0ee64..2804009 100644
--- a/libminifi/include/provenance/Provenance.h
+++ b/libminifi/include/provenance/Provenance.h
@@ -18,7 +18,6 @@
 #ifndef __PROVENANCE_H__
 #define __PROVENANCE_H__
 
-#include <uuid/uuid.h>
 #include <atomic>
 #include <cstdint>
 #include <cstring>
diff --git a/libminifi/include/sitetosite/Peer.h b/libminifi/include/sitetosite/Peer.h
index 2c9e2a0..05bb4aa 100644
--- a/libminifi/include/sitetosite/Peer.h
+++ b/libminifi/include/sitetosite/Peer.h
@@ -21,7 +21,6 @@
 #include <stdio.h>
 #include <string>
 #include <errno.h>
-#include <uuid/uuid.h>
 #include <string>
 #include <mutex>
 #include <atomic>
diff --git a/libminifi/include/sitetosite/RawSocketProtocol.h b/libminifi/include/sitetosite/RawSocketProtocol.h
index 1624ed6..bd9d211 100644
--- a/libminifi/include/sitetosite/RawSocketProtocol.h
+++ b/libminifi/include/sitetosite/RawSocketProtocol.h
@@ -27,7 +27,6 @@
 #include <chrono>
 #include <thread>
 #include <algorithm>
-#include <uuid/uuid.h>
 
 #include "SiteToSite.h"
 #include "SiteToSiteClient.h"
diff --git a/libminifi/include/utils/Id.h b/libminifi/include/utils/Id.h
index 81a3a62..175cb5e 100644
--- a/libminifi/include/utils/Id.h
+++ b/libminifi/include/utils/Id.h
@@ -21,17 +21,28 @@
 #include <atomic>
 #include <memory>
 #include <string>
-#include "uuid/uuid.h"
+#include <thread>
+
+#ifndef WIN32
+class uuid;
+#endif
 
 #include "core/logging/Logger.h"
 #include "properties/Properties.h"
 
-#define UNSIGNED_CHAR_MAX 255
 #define UUID_TIME_IMPL 0
 #define UUID_RANDOM_IMPL 1
 #define UUID_DEFAULT_IMPL 2
 #define MINIFI_UID_IMPL 3
 
+#define UUID_RANDOM_STR "random"
+#define UUID_WINDOWS_RANDOM_STR "windows_random"
+#define UUID_DEFAULT_STR "uuid_default"
+#define MINIFI_UID_STR "minifi_uid"
+#define UUID_TIME_STR "time"
+#define UUID_WINDOWS_STR "windows"
+
+
 namespace org {
 namespace apache {
 namespace nifi {
@@ -95,6 +106,8 @@
   T id_;
 };
 
+typedef uint8_t UUID_FIELD[16];
+
 class Identifier : public IdentifierBase<UUID_FIELD, std::string> {
  public:
   Identifier(UUID_FIELD u);
@@ -136,6 +149,8 @@
   Identifier generate();
   void initialize(const std::shared_ptr<Properties> & properties);
 
+  ~IdGenerator();
+
   static std::shared_ptr<IdGenerator> getIdGenerator() {
     static std::shared_ptr<IdGenerator> generator = std::shared_ptr<IdGenerator>(new IdGenerator());
     return generator;
@@ -147,8 +162,15 @@
   IdGenerator();
   int implementation_;
   std::shared_ptr<minifi::core::logging::Logger> logger_;
+
   unsigned char deterministic_prefix_[8];
   std::atomic<uint64_t> incrementor_;
+
+#ifndef WIN32
+  std::mutex uuid_mutex_;
+  std::unique_ptr<uuid> uuid_impl_;
+  bool generateWithUuidImpl(unsigned int mode, UUID_FIELD output);
+#endif
 };
 
 class NonRepeatingStringGenerator {
diff --git a/libminifi/src/RemoteProcessorGroupPort.cpp b/libminifi/src/RemoteProcessorGroupPort.cpp
index 1dc9201..534f6ef 100644
--- a/libminifi/src/RemoteProcessorGroupPort.cpp
+++ b/libminifi/src/RemoteProcessorGroupPort.cpp
@@ -20,7 +20,6 @@
 
 #include "RemoteProcessorGroupPort.h"
 
-#include <uuid/uuid.h>
 #include <algorithm>
 #include <cstdint>
 #include <memory>
diff --git a/libminifi/src/ResourceClaim.cpp b/libminifi/src/ResourceClaim.cpp
index 609ca20..1e08e20 100644
--- a/libminifi/src/ResourceClaim.cpp
+++ b/libminifi/src/ResourceClaim.cpp
@@ -18,7 +18,6 @@
  * limitations under the License.
  */
 #include "ResourceClaim.h"
-#include <uuid/uuid.h>
 #include <map>
 #include <queue>
 #include <string>
diff --git a/libminifi/src/core/Connectable.cpp b/libminifi/src/core/Connectable.cpp
index bd5cae1..c4715d6 100644
--- a/libminifi/src/core/Connectable.cpp
+++ b/libminifi/src/core/Connectable.cpp
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 #include "core/Connectable.h"
-#include <uuid/uuid.h>
 #include <utility>
 #include <memory>
 #include <string>
diff --git a/libminifi/src/core/ProcessSession.cpp b/libminifi/src/core/ProcessSession.cpp
index fb1f17d..5ecfcd0 100644
--- a/libminifi/src/core/ProcessSession.cpp
+++ b/libminifi/src/core/ProcessSession.cpp
@@ -29,7 +29,6 @@
 #include <chrono>
 #include <thread>
 #include <iostream>
-#include <uuid/uuid.h>
 /* This implementation is only for native Windows systems.  */
 #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
 #define _WINSOCKAPI_
diff --git a/libminifi/src/utils/Id.cpp b/libminifi/src/utils/Id.cpp
index 5abe714..e88b710 100644
--- a/libminifi/src/utils/Id.cpp
+++ b/libminifi/src/utils/Id.cpp
@@ -16,25 +16,64 @@
  * limitations under the License.
  */
 
+// This needs to be included first to let uuid.h sort out the system header collisions
+#ifndef WIN32
+#include "uuid++.hh"
+#endif
+
 #include "utils/Id.h"
+
 #define __STDC_FORMAT_MACROS 1
 #include <inttypes.h>
-#include <uuid/uuid.h>
-
 #include <algorithm>
 #include <chrono>
 #include <cmath>
+#include <cstdio>
 #include <memory>
 #include <string>
+#include <limits>
 #include "core/logging/LoggerConfiguration.h"
 #include "utils/StringUtils.h"
 
+#ifdef WIN32
+#include "Rpc.h"
+#include "Winsock2.h"
+#pragma comment(lib, "Rpcrt4.lib")
+#pragma comment(lib, "Ws2_32.lib")
+#endif
+
 namespace org {
 namespace apache {
 namespace nifi {
 namespace minifi {
 namespace utils {
 
+#ifdef WIN32
+namespace {
+  void windowsUuidToUuidField(UUID* uuid, UUID_FIELD out) {
+    uint32_t Data1BE = htonl(uuid->Data1);
+    memcpy(out, &Data1BE, 4);
+    uint16_t Data2BE = htons(uuid->Data2);
+    memcpy(out + 4, &Data2BE, 2);
+    uint16_t Data3BE = htons(uuid->Data3);
+    memcpy(out + 6, &Data3BE, 2);
+    memcpy(out + 8, uuid->Data4, 8);
+  }
+
+  void windowsUuidGenerateTime(UUID_FIELD out) {
+    UUID uuid;
+    UuidCreateSequential(&uuid);
+    windowsUuidToUuidField(&uuid, out);
+  }
+
+  void windowsUuidGenerateRandom(UUID_FIELD out) {
+    UUID uuid;
+    UuidCreate(&uuid);
+    windowsUuidToUuidField(&uuid, out);
+  }
+}
+#endif
+
 Identifier::Identifier(UUID_FIELD u)
     : IdentifierBase(u) {
   build_string();
@@ -85,8 +124,13 @@
 }
 
 Identifier &Identifier::operator=(std::string id) {
-  uuid_parse(id.c_str(), id_);
-  converted_ = id;
+  sscanf(id.c_str(), "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx",
+         &id_[0], &id_[1], &id_[2], &id_[3],
+         &id_[4], &id_[5],
+         &id_[6], &id_[7],
+         &id_[8], &id_[9],
+         &id_[10], &id_[11], &id_[12], &id_[13], &id_[14], &id_[15]);
+  build_string();
   return *this;
 }
 
@@ -115,8 +159,13 @@
 }
 
 void Identifier::build_string() {
-  char uuidStr[37] = { 0 };
-  uuid_unparse_lower(id_, uuidStr);
+  char uuidStr[37];
+  snprintf(uuidStr, sizeof(uuidStr), "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx",
+      id_[0], id_[1], id_[2], id_[3],
+      id_[4], id_[5],
+      id_[6], id_[7],
+      id_[8], id_[9],
+      id_[10], id_[11], id_[12], id_[13], id_[14], id_[15]);
   converted_ = uuidStr;
 }
 
@@ -131,6 +180,12 @@
     : implementation_(UUID_TIME_IMPL),
       logger_(logging::LoggerFactory<IdGenerator>::getLogger()),
       incrementor_(0) {
+#ifndef WIN32
+  uuid_impl_ = std::unique_ptr<uuid>(new uuid());
+#endif
+}
+
+IdGenerator::~IdGenerator() {
 }
 
 uint64_t IdGenerator::getDeviceSegmentFromString(const std::string& str, int numBits) const {
@@ -157,7 +212,15 @@
   uint64_t deviceSegment = 0;
   UUID_FIELD random_uuid;
   for (int word = 0; word < 2; word++) {
-    uuid_generate_random(random_uuid);
+#ifdef WIN32
+    windowsUuidGenerateRandom(random_uuid);
+#else
+    uuid temp_uuid;
+    temp_uuid.make(UUID_MAKE_V4);
+    void* uuid_bin = temp_uuid.binary();
+    memcpy(random_uuid, uuid_bin, 16);
+    free(uuid_bin);
+#endif
     for (int i = 0; i < 4; i++) {
       deviceSegment += random_uuid[i];
       deviceSegment <<= 8;
@@ -174,13 +237,13 @@
   implementation_ = UUID_TIME_IMPL;
   if (properties->get("uid.implementation", implementation_str)) {
     std::transform(implementation_str.begin(), implementation_str.end(), implementation_str.begin(), ::tolower);
-    if ("random" == implementation_str) {
+    if (UUID_RANDOM_STR == implementation_str || UUID_WINDOWS_RANDOM_STR == implementation_str) {
       logging::LOG_DEBUG(logger_) << "Using uuid_generate_random for uids.";
       implementation_ = UUID_RANDOM_IMPL;
-    } else if ("uuid_default" == implementation_str) {
+    } else if (UUID_DEFAULT_STR == implementation_str) {
       logging::LOG_DEBUG(logger_) << "Using uuid_generate for uids.";
       implementation_ = UUID_DEFAULT_IMPL;
-    } else if ("minifi_uid" == implementation_str) {
+    } else if (MINIFI_UID_STR == implementation_str) {
       logging::LOG_DEBUG(logger_) << "Using minifi uid implementation for uids";
       implementation_ = MINIFI_UID_IMPL;
 
@@ -201,11 +264,11 @@
         logging::LOG_DEBUG(logger_) << "Using minifi uid prefix: " << std::hex << prefix;
       }
       for (int i = 0; i < 8; i++) {
-        unsigned char prefix_element = (prefix >> ((7 - i) * 8)) & UNSIGNED_CHAR_MAX;
+        unsigned char prefix_element = (prefix >> ((7 - i) * 8)) & std::numeric_limits<unsigned char>::max();
         deterministic_prefix_[i] = prefix_element;
       }
       incrementor_ = 0;
-    } else if ("time" == implementation_str) {
+    } else if (UUID_TIME_STR == implementation_str || UUID_WINDOWS_STR == implementation_str) {
       logging::LOG_DEBUG(logger_) << "Using uuid_generate_time implementation for uids.";
     } else {
       logging::LOG_DEBUG(logger_) << "Invalid value for uid.implementation (" << implementation_str << "). Using uuid_generate_time implementation for uids.";
@@ -215,6 +278,24 @@
   }
 }
 
+#ifndef WIN32
+bool IdGenerator::generateWithUuidImpl(unsigned int mode, UUID_FIELD output) {
+  void* uuid = nullptr;
+  try {
+    std::lock_guard<std::mutex> lock(uuid_mutex_);
+    uuid_impl_->make(mode);
+    uuid = uuid_impl_->binary();
+  } catch (uuid_error_t& uuid_error){
+    logger_->log_error("Failed to generate UUID, error: %s", uuid_error.string());
+    return false;
+  }
+
+  memcpy(output, uuid, 16);
+  free(uuid);
+  return true;
+}
+#endif
+
 Identifier IdGenerator::generate() {
   Identifier ident;
   generate(ident);
@@ -225,21 +306,28 @@
   UUID_FIELD output;
   switch (implementation_) {
     case UUID_RANDOM_IMPL:
-      uuid_generate_random(output);
-      break;
     case UUID_DEFAULT_IMPL:
-      uuid_generate(output);
+#ifdef WIN32
+      windowsUuidGenerateRandom(output);
+#else
+      generateWithUuidImpl(UUID_MAKE_V4, output);
+#endif
       break;
     case MINIFI_UID_IMPL: {
       std::memcpy(output, deterministic_prefix_, sizeof(deterministic_prefix_));
       uint64_t incrementor_value = incrementor_++;
       for (int i = 8; i < 16; i++) {
-        output[i] = (incrementor_value >> ((15 - i) * 8)) & UNSIGNED_CHAR_MAX;
+        output[i] = (incrementor_value >> ((15 - i) * 8)) & std::numeric_limits<unsigned char>::max();
       }
     }
-      break;
+    break;
+    case UUID_TIME_IMPL:
     default:
-      uuid_generate_time(output);
+#ifdef WIN32
+      windowsUuidGenerateTime(output);
+#else
+      generateWithUuidImpl(UUID_MAKE_V1, output);
+#endif
       break;
   }
   ident = output;
diff --git a/libminifi/test/archive-tests/CompressContentTests.cpp b/libminifi/test/archive-tests/CompressContentTests.cpp
index db82607..3ac080c 100644
--- a/libminifi/test/archive-tests/CompressContentTests.cpp
+++ b/libminifi/test/archive-tests/CompressContentTests.cpp
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-#include <uuid/uuid.h>
 #include <fstream>
 #include <map>
 #include <memory>
diff --git a/libminifi/test/archive-tests/FocusArchiveTests.cpp b/libminifi/test/archive-tests/FocusArchiveTests.cpp
index 721e974..4e4e045 100644
--- a/libminifi/test/archive-tests/FocusArchiveTests.cpp
+++ b/libminifi/test/archive-tests/FocusArchiveTests.cpp
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-#include <uuid/uuid.h>
 #include <iostream>
 #include <map>
 #include <set>
diff --git a/libminifi/test/archive-tests/ManipulateArchiveTests.cpp b/libminifi/test/archive-tests/ManipulateArchiveTests.cpp
index ee85d15..cbb4449 100644
--- a/libminifi/test/archive-tests/ManipulateArchiveTests.cpp
+++ b/libminifi/test/archive-tests/ManipulateArchiveTests.cpp
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-#include <uuid/uuid.h>
 #include <iostream>
 #include <map>
 #include <set>
diff --git a/libminifi/test/archive-tests/MergeFileTests.cpp b/libminifi/test/archive-tests/MergeFileTests.cpp
index 7076ed2..b3f672a 100644
--- a/libminifi/test/archive-tests/MergeFileTests.cpp
+++ b/libminifi/test/archive-tests/MergeFileTests.cpp
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-#include <uuid/uuid.h>
 #include <fstream>
 #include <map>
 #include <memory>
diff --git a/libminifi/test/bustache-tests/ApplyTemplateTests.cpp b/libminifi/test/bustache-tests/ApplyTemplateTests.cpp
index e986b5a..9899d13 100644
--- a/libminifi/test/bustache-tests/ApplyTemplateTests.cpp
+++ b/libminifi/test/bustache-tests/ApplyTemplateTests.cpp
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-#include <uuid/uuid.h>
 #include <fstream>
 #include <map>
 #include <memory>
diff --git a/libminifi/test/gps-tests/GPSTests.cpp b/libminifi/test/gps-tests/GPSTests.cpp
index 4446bca..e308f83 100644
--- a/libminifi/test/gps-tests/GPSTests.cpp
+++ b/libminifi/test/gps-tests/GPSTests.cpp
@@ -17,7 +17,6 @@
  */
 
 #define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
-#include <uuid/uuid.h>
 #include <fstream>
 #include <map>
 #include <memory>
diff --git a/libminifi/test/sqlite-tests/SQLiteTests.cpp b/libminifi/test/sqlite-tests/SQLiteTests.cpp
index 87b3070..6ba6eee 100644
--- a/libminifi/test/sqlite-tests/SQLiteTests.cpp
+++ b/libminifi/test/sqlite-tests/SQLiteTests.cpp
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-#include <uuid/uuid.h>
 #include <fstream>
 #include <map>
 #include <memory>
diff --git a/libminifi/test/unit/C2MetricsTests.cpp b/libminifi/test/unit/C2MetricsTests.cpp
index 526812e..96aa551 100644
--- a/libminifi/test/unit/C2MetricsTests.cpp
+++ b/libminifi/test/unit/C2MetricsTests.cpp
@@ -15,7 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <uuid/uuid.h>
 #include <memory>
 
 #include "../../include/core/state/nodes/ProcessMetrics.h"
diff --git a/libminifi/test/unit/ControllerTests.cpp b/libminifi/test/unit/ControllerTests.cpp
index 843e301..297a948 100644
--- a/libminifi/test/unit/ControllerTests.cpp
+++ b/libminifi/test/unit/ControllerTests.cpp
@@ -15,7 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <uuid/uuid.h>
 #include <vector>
 #include <memory>
 #include <utility>
diff --git a/libminifi/test/unit/FileStreamTests.cpp b/libminifi/test/unit/FileStreamTests.cpp
index be1b2b8..86be792 100644
--- a/libminifi/test/unit/FileStreamTests.cpp
+++ b/libminifi/test/unit/FileStreamTests.cpp
@@ -19,7 +19,6 @@
 #include <string>
 #include <vector>
 #include <iostream>
-#include <uuid/uuid.h>
 #include "../TestBase.h"
 
 TEST_CASE("TestFileOverWrite", "[TestFiles]") {
diff --git a/libminifi/test/unit/FileTriggerTests.cpp b/libminifi/test/unit/FileTriggerTests.cpp
index b4168d3..21a3285 100644
--- a/libminifi/test/unit/FileTriggerTests.cpp
+++ b/libminifi/test/unit/FileTriggerTests.cpp
@@ -17,7 +17,6 @@
  */
 #include <chrono>
 #include <thread>
-#include <uuid/uuid.h>
 #include <memory>
 
 #include "c2/triggers/FileUpdateTrigger.h"
diff --git a/libminifi/test/unit/IdTests.cpp b/libminifi/test/unit/IdTests.cpp
index a70bc59..2492349 100644
--- a/libminifi/test/unit/IdTests.cpp
+++ b/libminifi/test/unit/IdTests.cpp
@@ -19,6 +19,8 @@
 #include <string>
 #include <memory>
 #include <ctime>
+#include <algorithm>
+#include <cctype>
 #include "../TestBase.h"
 #include "utils/Id.h"
 
@@ -44,6 +46,14 @@
   generator->initialize(id_props);
 
   REQUIRE(true == LogTestController::getInstance().contains("Using uuid_generate_time implementation for uids."));
+
+  utils::Identifier id;
+  generator->generate(id);
+
+  const uint8_t* bytes = id.toArray();
+  uint8_t version = bytes[6] >> 4;
+  REQUIRE(0x01 == version);
+
   LogTestController::getInstance().reset();
 }
 
@@ -75,6 +85,14 @@
   generator->initialize(id_props);
 
   REQUIRE(true == LogTestController::getInstance().contains("Using uuid_generate_random for uids."));
+
+  utils::Identifier id;
+  generator->generate(id);
+
+  const uint8_t* bytes = id.toArray();
+  uint8_t version = bytes[6] >> 4;
+  REQUIRE(0x04 == version);
+
   LogTestController::getInstance().reset();
 }
 
@@ -106,6 +124,77 @@
   LogTestController::getInstance().reset();
 }
 
+TEST_CASE("Test parse", "[id]") {
+  TestController test_controller;
+
+  LogTestController::getInstance().setDebug<utils::IdGenerator>();
+  std::shared_ptr<minifi::Properties> id_props = std::make_shared<minifi::Properties>();
+  id_props->set("uid.implementation", "time");
+
+  std::shared_ptr<utils::IdGenerator> generator = utils::IdGenerator::getIdGenerator();
+  generator->initialize(id_props);
+
+  utils::Identifier id;
+
+  const std::map<std::string, std::array<uint8_t, 16U>> test_cases = {
+      {"00000000-0000-0000-0000-000000000000", {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
+      {"1d412e16-0148-11ea-880b-9bf2c1d8f5be", {0x1D, 0x41, 0x2E, 0x16, 0x01, 0x48, 0x11, 0xEA, 0x88, 0x0B, 0x9B, 0xF2, 0xC1, 0xD8, 0xF5, 0xBE}},
+      {"d85b49a4-32dc-42de-a26a-c2eb6222118c", {0xD8, 0x5B, 0x49, 0xA4, 0x32, 0xDC, 0x42, 0xDE, 0xA2, 0x6A, 0xC2, 0xEB, 0x62, 0x22, 0x11, 0x8C}},
+      {"CEF85A08-0148-11EA-97D5-93123D0B5F8A", {0xCE, 0xF8, 0x5A, 0x08, 0x01, 0x48, 0x11, 0xEA, 0x97, 0xD5, 0x93, 0x12, 0x3D, 0x0B, 0x5F, 0x8A}},
+  };
+
+  for (const auto& test_case : test_cases) {
+    id = test_case.first;
+    REQUIRE(memcmp(id.toArray(), test_case.second.data(), 16U) == 0);
+    REQUIRE(utils::StringUtils::equalsIgnoreCase(test_case.first, id.to_string()));
+  }
+
+  LogTestController::getInstance().reset();
+}
+
+TEST_CASE("Test to_string", "[id]") {
+  TestController test_controller;
+
+  LogTestController::getInstance().setDebug<utils::IdGenerator>();
+  std::shared_ptr<minifi::Properties> id_props = std::make_shared<minifi::Properties>();
+  id_props->set("uid.implementation", "time");
+
+  std::shared_ptr<utils::IdGenerator> generator = utils::IdGenerator::getIdGenerator();
+  generator->initialize(id_props);
+
+  utils::Identifier id;
+  generator->generate(id);
+
+  std::string id_str = id.to_string();
+  std::cerr << "Generated UUID " << id_str << std::endl;
+
+  REQUIRE(36 == id_str.length());
+  REQUIRE('-' == id_str[8]);
+  REQUIRE('-' == id_str[13]);
+  REQUIRE('-' == id_str[18]);
+  REQUIRE('-' == id_str[23]);
+  for (size_t i : {0, 1, 2, 3, 4, 5, 6, 7}) {
+    REQUIRE(isxdigit(id_str[i]));
+  }
+  for (size_t i : {9, 10, 11, 12}) {
+    REQUIRE(isxdigit(id_str[i]));
+  }
+  for (size_t i : {14, 15, 16, 17}) {
+    REQUIRE(isxdigit(id_str[i]));
+  }
+  for (size_t i : {14, 15, 16, 17}) {
+    REQUIRE(isxdigit(id_str[i]));
+  }
+  for (size_t i : {19, 20, 21, 22}) {
+    REQUIRE(isxdigit(id_str[i]));
+  }
+  for (size_t i : {24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35}) {
+    REQUIRE(isxdigit(id_str[i]));
+  }
+
+  LogTestController::getInstance().reset();
+}
+
 TEST_CASE("Test Hex Device Segment 16 bits correct digits", "[id]") {
   TestController test_controller;
 
@@ -199,3 +288,77 @@
   REQUIRE(true == LogTestController::getInstance().contains("Using minifi uid prefix: 9af8"));
   LogTestController::getInstance().reset();
 }
+
+
+TEST_CASE("Collision", "[collision]") {
+  TestController test_controller;
+
+  LogTestController::getInstance().setDebug<utils::IdGenerator>();
+  std::shared_ptr<minifi::Properties> id_props = std::make_shared<minifi::Properties>();
+  SECTION("random") {
+    id_props->set("uid.implementation", "random");
+  }
+  SECTION("time") {
+    id_props->set("uid.implementation", "time");
+  }
+  SECTION("uuid_default") {
+    id_props->set("uid.implementation", "uuid_default");
+  }
+
+  std::shared_ptr<utils::IdGenerator> generator = utils::IdGenerator::getIdGenerator();
+  generator->initialize(id_props);
+
+  std::vector<utils::Identifier> uuids(16 * 1024U);
+  std::vector<std::thread> threads;
+  for (size_t i = 0U; i < 16U; i++) {
+    threads.emplace_back([&generator, &uuids, i](){
+      for (size_t j = 0U; j < 1024U; j++) {
+        generator->generate(uuids[i * 1024U + j]);
+      }
+    });
+  }
+  for (auto& thread : threads) {
+    thread.join();
+  }
+
+  std::sort(uuids.begin(), uuids.end(), [](const utils::Identifier& a, const utils::Identifier& b) {
+    return memcmp(a.toArray(), b.toArray(), 16U) < 0;
+  });
+  REQUIRE(uuids.end() == std::adjacent_find(uuids.begin(), uuids.end()));
+
+  LogTestController::getInstance().reset();
+}
+
+TEST_CASE("Speed", "[speed]") {
+  TestController test_controller;
+
+  LogTestController::getInstance().setDebug<utils::IdGenerator>();
+  std::shared_ptr<minifi::Properties> id_props = std::make_shared<minifi::Properties>();
+  std::string implementation;
+  SECTION("random") {
+    implementation = "random";
+  }
+  SECTION("time") {
+    implementation = "time";
+  }
+  SECTION("uuid_default") {
+    implementation = "uuid_default";
+  }
+  id_props->set("uid.implementation", implementation);
+
+  std::shared_ptr<utils::IdGenerator> generator = utils::IdGenerator::getIdGenerator();
+  generator->initialize(id_props);
+
+  std::vector<utils::Identifier> uuids(128U * 1024U);
+  // Prime the generator
+  generator->generate(uuids[0]);
+
+  auto before = std::chrono::high_resolution_clock::now();
+  for (size_t i = 0U; i < uuids.size(); i++) {
+    generator->generate(uuids[i]);
+  }
+  auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() - before).count();
+  std::cerr << "Generating one " << implementation << " UUID took " << (duration / uuids.size()) << "ns" << std::endl;
+
+  LogTestController::getInstance().reset();
+}
diff --git a/libminifi/test/unit/NetworkPrioritizerServiceTests.cpp b/libminifi/test/unit/NetworkPrioritizerServiceTests.cpp
index 54babe7..e0c3547 100644
--- a/libminifi/test/unit/NetworkPrioritizerServiceTests.cpp
+++ b/libminifi/test/unit/NetworkPrioritizerServiceTests.cpp
@@ -15,7 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <uuid/uuid.h>
 #include <vector>
 #include <memory>
 #include <utility>
diff --git a/libminifi/test/unit/SerializationTests.cpp b/libminifi/test/unit/SerializationTests.cpp
index fe703f2..50831ae 100644
--- a/libminifi/test/unit/SerializationTests.cpp
+++ b/libminifi/test/unit/SerializationTests.cpp
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 #include "io/BaseStream.h"
-#include <uuid/uuid.h>
 #include "SiteToSiteHelper.h"
 #include <algorithm>
 #include <string>
diff --git a/libminifi/test/unit/Site2SiteTests.cpp b/libminifi/test/unit/Site2SiteTests.cpp
index 732df70..6e8d6ae 100644
--- a/libminifi/test/unit/Site2SiteTests.cpp
+++ b/libminifi/test/unit/Site2SiteTests.cpp
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-#include <uuid/uuid.h>
 #include <string>
 #include <memory>
 #include <utility>
diff --git a/libminifi/test/unit/UpdatePolicyTests.cpp b/libminifi/test/unit/UpdatePolicyTests.cpp
index 851e3db..d0f73c9 100644
--- a/libminifi/test/unit/UpdatePolicyTests.cpp
+++ b/libminifi/test/unit/UpdatePolicyTests.cpp
@@ -15,7 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <uuid/uuid.h>
 #include <vector>
 #include <memory>
 #include <utility>
diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt
index c0cf8c2..e94d35c 100644
--- a/main/CMakeLists.txt
+++ b/main/CMakeLists.txt
@@ -69,12 +69,8 @@
   target_link_libraries(minifiexe "${CMAKE_THREAD_LIBS_INIT}")
 endif()
 
-# Include UUID
-
 set (WIN32_ARCHIVES "")
 
-
-
 # Link against minifi, yaml-cpp, civetweb-cpp, uuid, openssl, and rocksdb
 #target_link_libraries(minifiexe core-minifi)
 
@@ -113,7 +109,7 @@
 	#set_target_properties(minifiexe PROPERTIES LINK_FLAGS "${LINK_FLAGS} /WHOLEARCHIVE:minifi")
 endif ()
 
-target_link_libraries(minifiexe yaml-cpp ${UUID_LIBRARIES} ${JEMALLOC_LIBRARIES}) #
+target_link_libraries(minifiexe yaml-cpp ${JEMALLOC_LIBRARIES}) #
 
 if (WIN32)
 	include_directories("../thirdparty/Simple-Windows-Posix-Semaphore")
diff --git a/nanofi/include/core/cuuid.h b/nanofi/include/core/cuuid.h
index ea26810..dd90b0d 100644
--- a/nanofi/include/core/cuuid.h
+++ b/nanofi/include/core/cuuid.h
@@ -19,7 +19,6 @@
 #ifndef NIFI_MINIFI_CPP_CUUID_H
 #define NIFI_MINIFI_CPP_CUUID_H
 
-#include "uuid/uuid.h"
 
 #ifdef __cplusplus
 extern "C" {
diff --git a/nanofi/include/cxx/ReflexiveSession.h b/nanofi/include/cxx/ReflexiveSession.h
index ebf6cbe..3f08548 100644
--- a/nanofi/include/cxx/ReflexiveSession.h
+++ b/nanofi/include/cxx/ReflexiveSession.h
@@ -18,7 +18,6 @@
 #ifndef __REFLEXIVE_SESSION_H__
 #define __REFLEXIVE_SESSION_H__
 
-#include <uuid/uuid.h>
 #include <vector>
 #include <queue>
 #include <map>
diff --git a/nanofi/include/sitetosite/CPeer.h b/nanofi/include/sitetosite/CPeer.h
index 11e4ece..d23cab3 100644
--- a/nanofi/include/sitetosite/CPeer.h
+++ b/nanofi/include/sitetosite/CPeer.h
@@ -22,7 +22,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
-#include <uuid/uuid.h>
 #include "core/cstream.h"
 
 #ifdef __cplusplus
diff --git a/nanofi/include/sitetosite/CRawSocketProtocol.h b/nanofi/include/sitetosite/CRawSocketProtocol.h
index 977b482..c01996e 100644
--- a/nanofi/include/sitetosite/CRawSocketProtocol.h
+++ b/nanofi/include/sitetosite/CRawSocketProtocol.h
@@ -21,7 +21,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
-#include <uuid/uuid.h>
 
 #include "api/nanofi.h"
 #include "CSiteToSite.h"
diff --git a/nanofi/src/core/cuuid.c b/nanofi/src/core/cuuid.c
index 7f3f372..fa38966 100644
--- a/nanofi/src/core/cuuid.c
+++ b/nanofi/src/core/cuuid.c
@@ -16,20 +16,80 @@
  * limitations under the License.
  */
 
+// This needs to be included first to let uuid.h sort out the system header collisions
+#ifndef WIN32
+#include "uuid.h"
+#endif
+
 #include "core/cuuid.h"
 
+#ifdef WIN32
+#include "Rpc.h"
+#include "Winsock2.h"
+#pragma comment(lib, "Rpcrt4.lib")
+#pragma comment(lib, "Ws2_32.lib")
+#else
+#include <pthread.h>
+#endif
+
+#ifdef WIN32
+  void windows_uuid_to_str(const UUID* uuid, char* out) {
+    RPC_CSTR str = NULL;
+    UuidToStringA(uuid, &str);
+    snprintf(out, 37, "%.36s", (char*)str);
+    RpcStringFreeA(&str);
+  }
+
+  void windows_uuid_generate_time(char* out) {
+    UUID uuid;
+    UuidCreateSequential(&uuid);
+    windows_uuid_to_str(&uuid, out);
+  }
+
+  void windows_uuid_generate_random(char* out) {
+    UUID uuid;
+    UuidCreate(&uuid);
+    windows_uuid_to_str(&uuid, out);
+  }
+#else
+  int generate_uuid_with_uuid_impl(unsigned int mode, char* out) {
+    static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+    static uuid_t* uuid_impl = NULL;
+    pthread_mutex_lock(&mutex);
+    if (uuid_impl == NULL) {
+      if (uuid_create(&uuid_impl) != UUID_RC_OK) {
+        pthread_mutex_unlock(&mutex);
+        return -1;
+      }
+    }
+    uuid_make(uuid_impl, mode);
+    size_t len = UUID_LEN_STR+1;
+    if (uuid_export(uuid_impl, UUID_FMT_STR, &out, &len) != UUID_RC_OK) {
+      pthread_mutex_unlock(&mutex);
+      return -1;
+    }
+    pthread_mutex_unlock(&mutex);
+    return 0;
+  }
+#endif
+
 void generate_uuid(const CIDGenerator * generator, char * out) {
-  UUID_FIELD output;
   switch (generator->implementation_) {
     case CUUID_RANDOM_IMPL:
-      uuid_generate_random(output);
-      break;
     case CUUID_DEFAULT_IMPL:
-      uuid_generate(output);
+#ifdef WIN32
+      windows_uuid_generate_random(out);
+#else
+      generate_uuid_with_uuid_impl(UUID_MAKE_V4, out);
+#endif
       break;
+    case CUUID_TIME_IMPL:
     default:
-      uuid_generate_time(output);
+#ifdef WIN32
+      windows_uuid_generate_time(out);
+#else
+      generate_uuid_with_uuid_impl(UUID_MAKE_V1, out);
+#endif
       break;
   }
-  uuid_unparse_lower(output, out);
 }
diff --git a/nanofi/tests/CAPITests.cpp b/nanofi/tests/CAPITests.cpp
index 769b1dc..4112155 100644
--- a/nanofi/tests/CAPITests.cpp
+++ b/nanofi/tests/CAPITests.cpp
@@ -15,7 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <uuid/uuid.h>
 #include <sys/stat.h>
 #include <utility>
 #include <memory>
diff --git a/nanofi/tests/CSite2SiteTests.cpp b/nanofi/tests/CSite2SiteTests.cpp
index cc2902f..0ecb4a7 100644
--- a/nanofi/tests/CSite2SiteTests.cpp
+++ b/nanofi/tests/CSite2SiteTests.cpp
@@ -33,7 +33,6 @@
 #include "sitetosite/CRawSocketProtocol.h"
 #include "sitetosite/CSiteToSite.h"
 #include "sitetosite/RawSocketProtocol.h"
-#include "uuid/uuid.h"
 #include "core/cstructs.h"
 #include "RandomServerSocket.h"
 #include "core/log.h"
@@ -229,4 +228,4 @@
     REQUIRE(received_data.attributes[ATTR_NAME] == ATTR_VALUE);
     REQUIRE(std::string(reinterpret_cast<const char*>(received_data.payload.data()), received_data.payload.size()) == PAYLOAD);
   }
-}
\ No newline at end of file
+}
diff --git a/nanofi/tests/CUUIDTests.cpp b/nanofi/tests/CUUIDTests.cpp
index 3a3ed4b..0802e31 100644
--- a/nanofi/tests/CUUIDTests.cpp
+++ b/nanofi/tests/CUUIDTests.cpp
@@ -17,12 +17,15 @@
  */
 
 #include <string>
+#include <cstring>
+#include <thread>
 #include "TestBase.h"
 #include "core/cuuid.h"
 
 bool verify_uuid(const char * uuid) {
   std::string uuid_str(uuid, 36);
-  if(uuid_str.length() != 36) {
+  fprintf(stderr, "Verifying UUID %s\n", uuid_str.c_str());
+  if(strlen(uuid_str.c_str()) != 36) {
     return false;
   }
   for(int i = 0; i < uuid_str.length(); ++i) {
@@ -40,11 +43,66 @@
 }
 
 TEST_CASE("Test C UUID generation", "[testCUUID]") {
-  char uuid[36];
+  char uuid[37];
   CIDGenerator gen;
-  for(int i = 0; i < 4; ++i) {
+  for(int i = 0; i < 3; ++i) {
+    gen.implementation_ = i;
     generate_uuid(&gen, uuid);
     REQUIRE(verify_uuid(uuid));
-    gen.implementation_ = i;
   }
 }
+
+TEST_CASE("Speed test", "[testCUUID]") {
+  CIDGenerator gen;
+  SECTION("CUUID_TIME_IMPL") {
+    gen.implementation_ = CUUID_TIME_IMPL;
+  }
+  SECTION("CUUID_RANDOM_IMPL") {
+    gen.implementation_ = CUUID_RANDOM_IMPL;
+  }
+  SECTION("CUUID_DEFAULT_IMPL") {
+    gen.implementation_ = CUUID_DEFAULT_IMPL;
+  }
+
+  std::vector<std::array<char, 37U>> uuids(128U * 1024U);
+  // Prime the generator
+  generate_uuid(&gen, uuids[0].data());
+
+  auto before = std::chrono::high_resolution_clock::now();
+  for (size_t i = 0U; i < uuids.size(); i++) {
+    generate_uuid(&gen, uuids[i].data());
+  }
+  auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() - before).count();
+  std::cerr << "Generating one " << gen.implementation_  << " UUID took " << (duration / uuids.size()) << "ns" << std::endl;
+}
+
+TEST_CASE("Collision test", "[testCUUID]") {
+  CIDGenerator gen;
+  SECTION("CUUID_TIME_IMPL") {
+    gen.implementation_ = CUUID_TIME_IMPL;
+  }
+  SECTION("CUUID_RANDOM_IMPL") {
+    gen.implementation_ = CUUID_RANDOM_IMPL;
+  }
+  SECTION("CUUID_DEFAULT_IMPL") {
+    gen.implementation_ = CUUID_DEFAULT_IMPL;
+  }
+
+  std::vector<std::string> uuids(16 * 1024U);
+  std::vector<std::thread> threads;
+  for (size_t i = 0U; i < 16U; i++) {
+    threads.emplace_back([&gen, &uuids, i](){
+      char buffer[37];
+      for (size_t j = 0U; j < 1024U; j++) {
+        generate_uuid(&gen, buffer);
+        uuids[i * 1024U + j] = buffer;
+      }
+    });
+  }
+  for (auto& thread : threads) {
+    thread.join();
+  }
+
+  std::sort(uuids.begin(), uuids.end());
+  REQUIRE(uuids.end() == std::adjacent_find(uuids.begin(), uuids.end()));
+}
diff --git a/thirdparty/ossp-uuid/ossp-uuid-mac-fix.patch b/thirdparty/ossp-uuid/ossp-uuid-mac-fix.patch
new file mode 100644
index 0000000..d3f5e50
--- /dev/null
+++ b/thirdparty/ossp-uuid/ossp-uuid-mac-fix.patch
@@ -0,0 +1,84 @@
+diff -rupN orig/uuid.c patched/uuid.c
+--- orig/uuid.c	2008-03-07 11:49:59.000000000 +0100
++++ patched/uuid.c	2019-11-05 17:51:43.000000000 +0100
+@@ -135,7 +135,7 @@ uuid_rc_t uuid_create(uuid_t **uuid)
+     /* resolve MAC address for insertion into node field of UUIDs */
+     if (!mac_address((unsigned char *)(obj->mac), sizeof(obj->mac))) {
+         memset(obj->mac, 0, sizeof(obj->mac));
+-        obj->mac[0] = BM_OCTET(1,0,0,0,0,0,0,0);
++        obj->mac[0] = IEEE_MAC_MCBIT;
+     }
+ 
+     /* initialize time attributes */
+@@ -967,7 +967,7 @@ static uuid_rc_t uuid_make_v1(uuid_t *uu
+      *  GENERATE NODE
+      */
+ 
+-    if ((mode & UUID_MAKE_MC) || (uuid->mac[0] & BM_OCTET(1,0,0,0,0,0,0,0))) {
++    if ((mode & UUID_MAKE_MC) || (uuid->mac[0] & IEEE_MAC_MCBIT)) {
+         /* generate random IEEE 802 local multicast MAC address */
+         if (prng_data(uuid->prng, (void *)&(uuid->obj.node), sizeof(uuid->obj.node)) != PRNG_RC_OK)
+             return UUID_RC_INT;
+@@ -1214,4 +1214,3 @@ unsigned long uuid_version(void)
+ {
+     return (unsigned long)(_UUID_VERSION);
+ }
+-
+diff -rupN orig/uuid_mac.c patched/uuid_mac.c
+--- orig/uuid_mac.c	2008-03-07 11:49:59.000000000 +0100
++++ patched/uuid_mac.c	2019-11-07 14:09:09.000000000 +0100
+@@ -122,26 +122,40 @@ int mac_address(unsigned char *data_ptr,
+     }
+ #endif
+ 
+-#if defined(HAVE_NET_IF_H) && defined(SIOCGIFHWADDR)
++#if defined(HAVE_NET_IF_H) && defined(SIOCGIFCONF) && defined(SIOCGIFHWADDR)
+     /* use SIOCGIFHWADDR ioctl(2) on Linux class platforms */
+     {
+-        struct ifreq ifr;
++        struct ifreq ifrs[16];
++        struct ifconf ifc;
+         struct sockaddr *sa;
+         int s;
+-        int i;
++        int i, j;
++        int empty;
+ 
+         if ((s = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
+             return FALSE;
+-        sprintf(ifr.ifr_name, "eth0");
+-        if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0) {
++        ifc.ifc_len = sizeof(ifrs);
++        ifc.ifc_req = ifrs;
++        if (ioctl(s, SIOCGIFCONF, &ifc) < 0) {
+             close(s);
+             return FALSE;
+         }
+-        sa = (struct sockaddr *)&ifr.ifr_addr;
+-        for (i = 0; i < MAC_LEN; i++)
+-            data_ptr[i] = (unsigned char)(sa->sa_data[i] & 0xff);
++        for (i = 0; i < ifc.ifc_len / sizeof(ifrs[0]); i++) {
++            if (ioctl(s, SIOCGIFHWADDR, &ifrs[i]) < 0)
++                continue;
++            sa = (struct sockaddr *)&(ifrs[i].ifr_hwaddr);
++            empty = TRUE;
++            for (j = 0; j < MAC_LEN; j++) {
++                empty &= (sa->sa_data[j] & 0xff) == 0x00;
++                data_ptr[j] = (unsigned char)(sa->sa_data[j] & 0xff);
++            }
++            if (empty)
++                continue;
++            close(s);
++            return TRUE;
++        }
+         close(s);
+-        return TRUE;
++        return FALSE;
+     }
+ #endif
+ 
+@@ -180,4 +194,3 @@ int mac_address(unsigned char *data_ptr,
+ 
+     return FALSE;
+ }
+-
diff --git a/thirdparty/uuid/CMakeLists.txt b/thirdparty/uuid/CMakeLists.txt
deleted file mode 100644
index 2efaf42..0000000
--- a/thirdparty/uuid/CMakeLists.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-#
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-#
-
-if (WIN32)
-	include_directories("include/win32/uuid")
-else()
-	include_directories("include/posix/uuid")
-endif()
-
-add_library(
-    uuid
-    clear.c
-    compare.c
-    copy.c
-    gen_uuid.c
-    isnull.c
-    pack.c
-    parse.c
-    unpack.c
-    unparse.c
-    uuid_time.c
-)
-
-
-add_library(
-    uuid-shared
-    clear.c
-    compare.c
-    copy.c
-    gen_uuid.c
-    isnull.c
-    pack.c
-    parse.c
-    unpack.c
-    unparse.c
-    uuid_time.c
-)
-
-set_property(TARGET uuid-shared PROPERTY POSITION_INDEPENDENT_CODE ON)
\ No newline at end of file
diff --git a/thirdparty/uuid/COPYING b/thirdparty/uuid/COPYING
deleted file mode 100644
index 2f17068..0000000
--- a/thirdparty/uuid/COPYING
+++ /dev/null
@@ -1,25 +0,0 @@
-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, and the entire permission notice in its entirety,
-   including the disclaimer of warranties.
-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 of the author may not 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, ALL OF
-WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
diff --git a/thirdparty/uuid/clear.c b/thirdparty/uuid/clear.c
deleted file mode 100644
index d963b5a..0000000
--- a/thirdparty/uuid/clear.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * clear.c -- Clear a UUID
- *
- * Copyright (C) 1996, 1997 Theodore Ts'o.
- *
- * %Begin-Header%
- * 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, and the entire permission notice in its entirety,
- *    including the disclaimer of warranties.
- * 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 of the author may not 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, ALL OF
- * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- * %End-Header%
- */
-
-#include "config.h"
-#include "string.h"
-
-#include "uuidP.h"
-
-void uuid_clear(UUID_FIELD uu)
-{
-	memset(uu, 0, 16);
-}
-
diff --git a/thirdparty/uuid/compare.c b/thirdparty/uuid/compare.c
deleted file mode 100644
index 0e1d95a..0000000
--- a/thirdparty/uuid/compare.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * compare.c --- compare whether or not two UUID's are the same
- *
- * Returns 0 if the two UUID's are different, and 1 if they are the same.
- *
- * Copyright (C) 1996, 1997 Theodore Ts'o.
- *
- * %Begin-Header%
- * 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, and the entire permission notice in its entirety,
- *    including the disclaimer of warranties.
- * 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 of the author may not 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, ALL OF
- * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- * %End-Header%
- */
-
-#include "config.h"
-#include "uuidP.h"
-#include <string.h>
-
-#define UUCMP(u1,u2) if (u1 != u2) return((u1 < u2) ? -1 : 1);
-
-int uuid_compare(const UUID_FIELD uu1, const UUID_FIELD uu2)
-{
-	struct uuid	uuid1, uuid2;
-
-	uuid_unpack(uu1, &uuid1);
-	uuid_unpack(uu2, &uuid2);
-
-	UUCMP(uuid1.time_low, uuid2.time_low);
-	UUCMP(uuid1.time_mid, uuid2.time_mid);
-	UUCMP(uuid1.time_hi_and_version, uuid2.time_hi_and_version);
-	UUCMP(uuid1.clock_seq, uuid2.clock_seq);
-	return memcmp(uuid1.node, uuid2.node, 6);
-}
-
diff --git a/thirdparty/uuid/copy.c b/thirdparty/uuid/copy.c
deleted file mode 100644
index efc250e..0000000
--- a/thirdparty/uuid/copy.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * copy.c --- copy UUIDs
- *
- * Copyright (C) 1996, 1997 Theodore Ts'o.
- *
- * %Begin-Header%
- * 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, and the entire permission notice in its entirety,
- *    including the disclaimer of warranties.
- * 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 of the author may not 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, ALL OF
- * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- * %End-Header%
- */
-
-#include "config.h"
-#include "uuidP.h"
-
-void uuid_copy(UUID_FIELD dst, const UUID_FIELD src)
-{
-	unsigned char		*cp1;
-	const unsigned char	*cp2;
-	int			i;
-
-	for (i=0, cp1 = dst, cp2 = src; i < 16; i++)
-		*cp1++ = *cp2++;
-}
diff --git a/thirdparty/uuid/gen_uuid.c b/thirdparty/uuid/gen_uuid.c
deleted file mode 100644
index b3e5b81..0000000
--- a/thirdparty/uuid/gen_uuid.c
+++ /dev/null
@@ -1,664 +0,0 @@
-/*
- * gen_uuid.c --- generate a DCE-compatible uuid
- *
- * Copyright (C) 1996, 1997, 1998, 1999 Theodore Ts'o.
- *
- * %Begin-Header%
- * 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, and the entire permission notice in its entirety,
- *    including the disclaimer of warranties.
- * 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 of the author may not 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, ALL OF
- * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- * %End-Header%
- */
-
- /*
-  * Force inclusion of SVID stuff since we need it if we're compiling in
-  * gcc-wall wall mode
-  * But not deprecated in glibc >= 20, and not needed nowadays.
-  */
-  /* #define _SVID_SOURCE */
-
-#include "config.h"
-#if defined(_MSC_VER)
-#include <BaseTsd.h>
-typedef SSIZE_T ssize_t;
-#endif
-#ifdef WIN32
-#define WIN32_WINNT 0x0500
-#include <io.h>
-typedef int mode_t;
-#include <windows.h>
-#define UUID MYUUID
-#endif
-#include <stdio.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <string.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <limits.h>
-#include <sys/types.h>
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#include <sys/stat.h>
-#ifdef HAVE_SYS_FILE_H
-#include <sys/file.h>
-#endif
-#ifdef HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_SYS_UN_H
-#include <sys/un.h>
-#endif
-#ifdef HAVE_SYS_SOCKIO_H
-#include <sys/sockio.h>
-#endif
-#ifdef HAVE_NET_IF_H
-#include <net/if.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NET_IF_DL_H
-#include <net/if_dl.h>
-#endif
-#if defined(__linux__) && defined(HAVE_SYS_SYSCALL_H)
-#include <sys/syscall.h>
-#endif
-
-#include "uuidP.h"
-#include "uuidd.h"
-
-#ifdef HAVE_TLS
-#define THREAD_LOCAL static __thread
-#else
-#define THREAD_LOCAL static
-#endif
-
-#ifdef WIN32
-static void gettimeofday(struct st_tm_val *tv, void *dummy)
-{
-	FILETIME	ftime;
-	uint64_t	n;
-
-	GetSystemTimeAsFileTime(&ftime);
-	n = (((uint64_t)ftime.dwHighDateTime << 32)
-		+ (uint64_t)ftime.dwLowDateTime);
-	if (n) {
-		n /= 10;
-		n -= ((369 * 365 + 89) * (uint64_t)86400) * 1000000;
-	}
-
-	tv->tv_sec = n / 1000000;
-	tv->tv_usec = n % 1000000;
-}
-
-static int getuid(void)
-{
-	return 1;
-}
-#endif
-
-/*
- * Get the ethernet hardware address, if we can find it...
- *
- * XXX for a windows version, probably should use GetAdaptersInfo:
- * http://www.codeguru.com/cpp/i-n/network/networkinformation/article.php/c5451
- * commenting out get_node_id just to get gen_uuid to compile under windows
- * is not the right way to go!
- */
-static int get_node_id(unsigned char *node_id)
-{
-#ifdef HAVE_NET_IF_H
-	int		sd;
-	struct ifreq	ifr, *ifrp;
-	struct ifconf	ifc;
-	char buf[1024];
-	int		n, i;
-	unsigned char	*a;
-#ifdef HAVE_NET_IF_DL_H
-	struct sockaddr_dl *sdlp;
-#endif
-
-	/*
-	 * BSD 4.4 defines the size of an ifreq to be
-	 * max(sizeof(ifreq), sizeof(ifreq.ifr_name)+ifreq.ifr_addr.sa_len
-	 * However, under earlier systems, sa_len isn't present, so the size is
-	 * just sizeof(struct ifreq)
-	 */
-#ifdef HAVE_SA_LEN
-#define max(x, y) (((x) > (y)) ? (x) : (y))
-#define ifreq_size(i) max(sizeof(struct ifreq),\
-     sizeof((i).ifr_name)+(i).ifr_addr.sa_len)
-#else
-#define ifreq_size(i) sizeof(struct ifreq)
-#endif /* HAVE_SA_LEN */
-
-	sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
-	if (sd < 0) {
-		return -1;
-	}
-	memset(buf, 0, sizeof(buf));
-	ifc.ifc_len = sizeof(buf);
-	ifc.ifc_buf = buf;
-	if (ioctl(sd, SIOCGIFCONF, (char *)&ifc) < 0) {
-		close(sd);
-		return -1;
-	}
-	n = ifc.ifc_len;
-	for (i = 0; i < n; i += ifreq_size(*ifrp)) {
-		ifrp = (struct ifreq *)((char *)ifc.ifc_buf + i);
-		strncpy(ifr.ifr_name, ifrp->ifr_name, IFNAMSIZ);
-#ifdef SIOCGIFHWADDR
-		if (ioctl(sd, SIOCGIFHWADDR, &ifr) < 0)
-			continue;
-		a = (unsigned char *)&ifr.ifr_hwaddr.sa_data;
-#else
-#ifdef SIOCGENADDR
-		if (ioctl(sd, SIOCGENADDR, &ifr) < 0)
-			continue;
-		a = (unsigned char *)ifr.ifr_enaddr;
-#else
-#ifdef HAVE_NET_IF_DL_H
-		sdlp = (struct sockaddr_dl *) &ifrp->ifr_addr;
-		if ((sdlp->sdl_family != AF_LINK) || (sdlp->sdl_alen != 6))
-			continue;
-		a = (unsigned char *)&sdlp->sdl_data[sdlp->sdl_nlen];
-#else
-		/*
-		 * XXX we don't have a way of getting the hardware
-		 * address
-		 */
-		close(sd);
-		return 0;
-#endif /* HAVE_NET_IF_DL_H */
-#endif /* SIOCGENADDR */
-#endif /* SIOCGIFHWADDR */
-		if (!a[0] && !a[1] && !a[2] && !a[3] && !a[4] && !a[5])
-			continue;
-		if (node_id) {
-			memcpy(node_id, a, 6);
-			close(sd);
-			return 1;
-		}
-	}
-	close(sd);
-#endif
-	return 0;
-}
-
-#if defined(__linux__) && defined(__NR_gettid) && defined(HAVE_JRAND48)
-#define DO_JRAND_MIX
-static unsigned short ul_jrand_seed[3];
-#endif
-
-static int random_get_fd(void)
-{
-	int i, fd = -1;
-	struct st_tm_val  tv;
-
-	gettimeofday(&tv, 0);
-#ifndef WIN32
-	fd = open("/dev/urandom", O_RDONLY);
-	if (fd == -1)
-		fd = open("/dev/random", O_RDONLY | O_NONBLOCK);
-	if (fd >= 0) {
-		i = fcntl(fd, F_GETFD);
-		if (i >= 0)
-			fcntl(fd, F_SETFD, i | FD_CLOEXEC);
-	}
-#endif
-	srand((getpid() << 16) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec);
-
-#ifdef DO_JRAND_MIX
-	ul_jrand_seed[0] = getpid() ^ (tv.tv_sec & 0xFFFF);
-	ul_jrand_seed[1] = getppid() ^ (tv.tv_usec & 0xFFFF);
-	ul_jrand_seed[2] = (tv.tv_sec ^ tv.tv_usec) >> 16;
-#endif
-	/* Crank the random number generator a few times */
-	gettimeofday(&tv, 0);
-	for (i = (tv.tv_sec ^ tv.tv_usec) & 0x1F; i > 0; i--)
-		rand();
-	return fd;
-}
-
-/*
- * Generate a stream of random nbytes into buf.
- * Use /dev/urandom if possible, and if not,
- * use glibc pseudo-random functions.
- */
-static void random_get_bytes(void *buf, size_t nbytes)
-{
-	size_t i, n = nbytes;
-	int fd = random_get_fd();
-	int lose_counter = 0;
-	unsigned char *cp = (unsigned char *)buf;
-
-	if (fd >= 0) {
-		while (n > 0) {
-			ssize_t x = read(fd, cp, n);
-			if (x <= 0) {
-				if (lose_counter++ > 16)
-					break;
-				continue;
-			}
-			n -= x;
-			cp += x;
-			lose_counter = 0;
-		}
-
-		close(fd);
-	}
-
-	/*
-	 * We do this all the time, but this is the only source of
-	 * randomness if /dev/random/urandom is out to lunch.
-	 */
-	for (cp = buf, i = 0; i < nbytes; i++)
-		*cp++ ^= (rand() >> 7) & 0xFF;
-
-#ifdef DO_JRAND_MIX
-	{
-		unsigned short tmp_seed[3];
-
-		memcpy(tmp_seed, ul_jrand_seed, sizeof(tmp_seed));
-		ul_jrand_seed[2] = ul_jrand_seed[2] ^ syscall(__NR_gettid);
-		for (cp = buf, i = 0; i < nbytes; i++)
-			*cp++ ^= (jrand48(tmp_seed) >> 7) & 0xFF;
-		memcpy(ul_jrand_seed, tmp_seed,
-			sizeof(ul_jrand_seed) - sizeof(unsigned short));
-	}
-#endif
-
-	return;
-}
-
-#ifdef WIN32 /* compatibility layer */
-#define LOCK_EX 1
-#define LOCK_UN 2
-static int flock(int fd, int op)
-{
-	HANDLE h = (HANDLE)_get_osfhandle(fd);
-	OVERLAPPED offset;
-	if (h < 0)
-		return -1;
-	memset(&offset, 0, sizeof(offset));
-	switch (op) {
-	case LOCK_EX:
-		return (LockFileEx(h, LOCKFILE_EXCLUSIVE_LOCK, 0, 1, 0, &offset)) ? 0 : -1;
-	case LOCK_UN:
-		UnlockFileEx(h, 0, 1, 0, &offset);
-		return 0;
-	}
-	return -1;
-}
-#endif
-
-/* Assume that the gettimeofday() has microsecond granularity */
-#define MAX_ADJUSTMENT 10
-
-static int get_random_fd(void)
-{
-	struct st_tm_val  tv;
-	static int  fd = -2;
-	int    i;
-#ifndef WIN32
-	if (fd == -2) {
-		gettimeofday(&tv, 0);
-		fd = open("/dev/urandom", O_RDONLY);
-		if (fd == -1)
-			fd = open("/dev/random", O_RDONLY | O_NONBLOCK);
-		srand((getpid() << 16) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec);
-	}
-	/* Crank the random number generator a few times */
-	gettimeofday(&tv, 0);
-	for (i = (tv.tv_sec ^ tv.tv_usec) & 0x1F; i > 0; i--)
-		rand();
-#endif
-	return fd;
-}
-
-/*
- * Generate a series of random bytes.  Use /dev/urandom if possible,
- * and if not, use srandom/random.
- */
-static void get_random_bytes(void *buf, int nbytes)
-{
-	int i, n = nbytes, fd = get_random_fd();
-	int lose_counter = 0;
-	unsigned char *cp = (unsigned char *)buf;
-
-	if (fd >= 0) {
-		while (n > 0) {
-			i = read(fd, cp, n);
-			if (i <= 0) {
-				if (lose_counter++ > 16)
-					break;
-				continue;
-			}
-			n -= i;
-			cp += i;
-			lose_counter = 0;
-		}
-	}
-
-	/*
-	 * We do this all the time, but this is the only source of
-	 * randomness if /dev/random/urandom is out to lunch.
-	 */
-	for (cp = buf, i = 0; i < nbytes; i++)
-		*cp++ ^= (rand() >> 7) & 0xFF;
-}
-
-
-/*
- * Get clock from global sequence clock counter.
- *
- * Return -1 if the clock counter could not be opened/locked (in this case
- * pseudorandom value is returned in @ret_clock_seq), otherwise return 0.
- */
- /**/
-static int get_clock(uint32_t *clock_high, uint32_t *clock_low,
-  uint16_t *ret_clock_seq, int *num)
-#ifdef WIN32
-{
-	static int      adjustment = 0;
-	static struct st_tm_val    last = { 0, 0 };
-	static uint16_t      clock_seq;
-	struct st_tm_val      tv;
-	uint64_t    clock_reg;
-
-try_again:
-	gettimeofday(&tv, 0);
-	if ((last.tv_sec == 0) && (last.tv_usec == 0)) {
-		get_random_bytes(&clock_seq, sizeof(clock_seq));
-		clock_seq &= 0x3FFF;
-		last = tv;
-		last.tv_sec--;
-	}
-	if ((tv.tv_sec < last.tv_sec) ||
-		((tv.tv_sec == last.tv_sec) &&
-		(tv.tv_usec < last.tv_usec))) {
-		clock_seq = (clock_seq + 1) & 0x3FFF;
-		adjustment = 0;
-		last = tv;
-	}
-	else if ((tv.tv_sec == last.tv_sec) &&
-		(tv.tv_usec == last.tv_usec)) {
-		if (adjustment >= MAX_ADJUSTMENT)
-			goto try_again;
-		adjustment++;
-	}
-	else {
-		adjustment = 0;
-		last = tv;
-	}
-
-	clock_reg = tv.tv_usec * 10 + adjustment;
-	clock_reg += ((uint64_t)tv.tv_sec) * 10000000;
-	clock_reg += (((uint64_t)0x01B21DD2) << 32) + 0x13814000;
-
-	*clock_high = clock_reg >> 32;
-	*clock_low = clock_reg;
-	*ret_clock_seq = clock_seq;
-	return 0;
-}
-#else
-{
-	THREAD_LOCAL int		adjustment = 0;
-	THREAD_LOCAL struct st_tm_val	last = { 0, 0 };
-	THREAD_LOCAL int		state_fd = -2;
-	THREAD_LOCAL FILE		*state_f;
-	THREAD_LOCAL uint16_t		clock_seq;
-	struct st_tm_val			tv;
-	uint64_t			clock_reg;
-	mode_t				save_umask;
-	int				len;
-	int				ret = 0;
-
-	if (state_fd == -2) {
-		save_umask = umask(0);
-		state_fd = open(LIBUUID_CLOCK_FILE, O_RDWR | O_CREAT, 0660);
-		(void)umask(save_umask);
-		if (state_fd != -1) {
-			state_f = fdopen(state_fd, "r+");
-			if (!state_f) {
-				close(state_fd);
-				state_fd = -1;
-				ret = -1;
-			}
-		}
-		else
-			ret = -1;
-	}
-	if (state_fd >= 0) {
-		rewind(state_f);
-#ifdef HAVE_FLOCK
-		while (flock(state_fd, LOCK_EX) < 0) {
-			if ((errno == EAGAIN) || (errno == EINTR))
-				continue;
-			fclose(state_f);
-			close(state_fd);
-			state_fd = -1;
-			ret = -1;
-			break;
-		}
-#endif
-	}
-	if (state_fd >= 0) {
-		unsigned int cl;
-		unsigned long tv1, tv2;
-		int a;
-
-		if (fscanf(state_f, "clock: %04x tv: %lu %lu adj: %d\n",
-			&cl, &tv1, &tv2, &a) == 4) {
-			clock_seq = cl & 0x3FFF;
-			last.tv_sec = tv1;
-			last.tv_usec = tv2;
-			adjustment = a;
-		}
-	}
-
-	if ((last.tv_sec == 0) && (last.tv_usec == 0)) {
-		random_get_bytes(&clock_seq, sizeof(clock_seq));
-		clock_seq &= 0x3FFF;
-		gettimeofday(&last, 0);
-		last.tv_sec--;
-	}
-
-try_again:
-	gettimeofday(&tv, 0);
-	if ((tv.tv_sec < last.tv_sec) ||
-		((tv.tv_sec == last.tv_sec) &&
-		(tv.tv_usec < last.tv_usec))) {
-		clock_seq = (clock_seq + 1) & 0x3FFF;
-		adjustment = 0;
-		last = tv;
-	}
-	else if ((tv.tv_sec == last.tv_sec) &&
-		(tv.tv_usec == last.tv_usec)) {
-		if (adjustment >= MAX_ADJUSTMENT)
-			goto try_again;
-		adjustment++;
-	}
-	else {
-		adjustment = 0;
-		last = tv;
-	}
-
-	clock_reg = tv.tv_usec * 10 + adjustment;
-	clock_reg += ((uint64_t)tv.tv_sec) * 10000000;
-	clock_reg += (((uint64_t)0x01B21DD2) << 32) + 0x13814000;
-
-	if (num && (*num > 1)) {
-		adjustment += *num - 1;
-		last.tv_usec += adjustment / 10;
-		adjustment = adjustment % 10;
-		last.tv_sec += last.tv_usec / 1000000;
-		last.tv_usec = last.tv_usec % 1000000;
-	}
-
-	if (state_fd >= 0) {
-		rewind(state_f);
-		len = fprintf(state_f,
-			"clock: %04x tv: %016lu %08lu adj: %08d\n",
-			clock_seq, (unsigned long)last.tv_sec, (unsigned long)last.tv_usec, adjustment);
-		fflush(state_f);
-		if (ftruncate(state_fd, len) < 0) {
-			fprintf(state_f, "                   \n");
-			fflush(state_f);
-		}
-		rewind(state_f);
-#ifdef HAVE_FLOCK
-		flock(state_fd, LOCK_UN);
-#endif
-	}
-
-	*clock_high = clock_reg >> 32;
-	*clock_low = clock_reg;
-	*ret_clock_seq = clock_seq;
-	return ret;
-}
-#endif
-
-
-int __uuid_generate_time(UUID_FIELD out, int *num)
-{
-	static unsigned char node_id[6];
-	static int has_init = 0;
-	struct uuid uu;
-	uint32_t	clock_mid;
-	int ret;
-
-	if (!has_init) {
-		if (get_node_id(node_id) <= 0) {
-			random_get_bytes(node_id, 6);
-			/*
-			 * Set multicast bit, to prevent conflicts
-			 * with IEEE 802 addresses obtained from
-			 * network cards
-			 */
-			node_id[0] |= 0x01;
-		}
-		has_init = 1;
-	}
-	ret = get_clock(&clock_mid, &uu.time_low, &uu.clock_seq, num);
-	uu.clock_seq |= 0x8000;
-	uu.time_mid = (uint16_t)clock_mid;
-	uu.time_hi_and_version = ((clock_mid >> 16) & 0x0FFF) | 0x1000;
-	memcpy(uu.node, node_id, 6);
-	uuid_pack(&uu, out);
-	return ret;
-}
-
-/*
- * Generate time-based UUID and store it to @out
- *
- * Since there is no daemon here, use fall-back right away
- */
-static int uuid_generate_time_generic(UUID_FIELD out) {
-	return __uuid_generate_time(out, 0);
-}
-
-/*
- * Generate time-based UUID and store it to @out.
- *
- * Discards return value from uuid_generate_time_generic()
- */
-void uuid_generate_time(UUID_FIELD out)
-{
-	(void)uuid_generate_time_generic(out);
-}
-
-
-int uuid_generate_time_safe(UUID_FIELD out)
-{
-	return uuid_generate_time_generic(out);
-}
-
-
-void __uuid_generate_random(UUID_FIELD out, int *num)
-{
-	UUID_FIELD	buf;
-	struct uuid uu;
-	int i, n;
-
-	if (!num || !*num)
-		n = 1;
-	else
-		n = *num;
-
-	for (i = 0; i < n; i++) {
-		random_get_bytes(buf, sizeof(buf));
-		uuid_unpack(buf, &uu);
-
-		uu.clock_seq = (uu.clock_seq & 0x3FFF) | 0x8000;
-		uu.time_hi_and_version = (uu.time_hi_and_version & 0x0FFF)
-			| 0x4000;
-		uuid_pack(&uu, out);
-		out += sizeof(UUID_FIELD);
-	}
-}
-
-void uuid_generate_random(UUID_FIELD out)
-{
-	int	num = 1;
-	/* No real reason to use the daemon for random uuid's -- yet */
-
-	__uuid_generate_random(out, &num);
-}
-
-/*
- * Check whether good random source (/dev/random or /dev/urandom)
- * is available.
- */
-static int have_random_source(void)
-{
-	struct stat s;
-
-	return (!stat("/dev/random", &s) || !stat("/dev/urandom", &s));
-}
-
-
-/*
- * This is the generic front-end to uuid_generate_random and
- * uuid_generate_time.  It uses uuid_generate_random only if
- * /dev/urandom is available, since otherwise we won't have
- * high-quality randomness.
- */
-void uuid_generate(UUID_FIELD out)
-{
-	if (have_random_source())
-		uuid_generate_random(out);
-	else
-		uuid_generate_time(out);
-}
diff --git a/thirdparty/uuid/include/posix/uuid/config.h b/thirdparty/uuid/include/posix/uuid/config.h
deleted file mode 100644
index 333ee12..0000000
--- a/thirdparty/uuid/include/posix/uuid/config.h
+++ /dev/null
@@ -1,847 +0,0 @@
-/* lib/config.h.  Generated from config.h.in by configure.  */
-/* lib/config.h.in.  Generated from configure.in by autoheader.  */
-
-/* Define if building universal (internal helper macro) */
-/* #undef AC_APPLE_UNIVERSAL_BUILD */
-
-/* Define to 1 if debugging the blkid library */
-/* #undef CONFIG_BLKID_DEBUG */
-
-/* Define to 1 to compile findfs */
-#define CONFIG_BUILD_FINDFS 1
-
-/* Define to 1 if debugging ext3/4 journal code */
-/* #undef CONFIG_JBD_DEBUG */
-
-/* Define to 1 to enable quota support */
-/* #undef CONFIG_QUOTA */
-
-/* Define to 1 if the testio I/O manager should be enabled */
-#define CONFIG_TESTIO_DEBUG 1
-
-/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
-   systems. This function is required for `alloca.c' support on those systems.
-   */
-/* #undef CRAY_STACKSEG_END */
-
-/* Define to 1 if using `alloca.c'. */
-/* #undef C_ALLOCA */
-
-/* Define to 1 to disable use of backtrace */
-/* #undef DISABLE_BACKTRACE */
-
-/* Define to 1 if ext2 compression enabled */
-/* #undef ENABLE_COMPRESSION */
-
-/* Define to 1 if ext3/4 htree support enabled */
-#define ENABLE_HTREE 1
-
-/* Define to 1 if translation of program messages to the user's native
-   language is requested. */
-#define ENABLE_NLS 1
-
-/* Define to 1 if you have `alloca', as a function or macro. */
-#define HAVE_ALLOCA 1
-
-/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
-   */
-#define HAVE_ALLOCA_H 1
-
-/* Define to 1 if you have the `argz_count' function. */
-#define HAVE_ARGZ_COUNT 1
-
-/* Define to 1 if you have the <argz.h> header file. */
-#define HAVE_ARGZ_H 1
-
-/* Define to 1 if you have the `argz_next' function. */
-#define HAVE_ARGZ_NEXT 1
-
-/* Define to 1 if you have the `argz_stringify' function. */
-#define HAVE_ARGZ_STRINGIFY 1
-
-/* Define to 1 if you have the `asprintf' function. */
-#define HAVE_ASPRINTF 1
-
-/* Define to 1 if you have the `backtrace' function. */
-#define HAVE_BACKTRACE 1
-
-/* Define to 1 if you have the `blkid_probe_enable_partitions' function. */
-/* #undef HAVE_BLKID_PROBE_ENABLE_PARTITIONS */
-
-/* Define to 1 if you have the `blkid_probe_get_topology' function. */
-/* #undef HAVE_BLKID_PROBE_GET_TOPOLOGY */
-
-/* Define to 1 if the compiler understands __builtin_expect. */
-#define HAVE_BUILTIN_EXPECT 1
-
-/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the
-   CoreFoundation framework. */
-/* #undef HAVE_CFLOCALECOPYCURRENT */
-
-/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
-   the CoreFoundation framework. */
-/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */
-
-/* Define to 1 if you have the `chflags' function. */
-/* #undef HAVE_CHFLAGS */
-
-/* Define if the GNU dcgettext() function is already present or preinstalled.
-   */
-#define HAVE_DCGETTEXT 1
-
-/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you
-   don't. */
-#define HAVE_DECL_FEOF_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if
-   you don't. */
-#define HAVE_DECL_FGETS_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
-   don't. */
-#define HAVE_DECL_GETC_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you
-   don't. */
-#define HAVE_DECL__SNPRINTF 0
-
-/* Define to 1 if you have the declaration of `_snwprintf', and to 0 if you
-   don't. */
-#define HAVE_DECL__SNWPRINTF 0
-
-/* Define to 1 if you have the <dirent.h> header file. */
-#define HAVE_DIRENT_H 1
-
-/* Define to 1 if dlopen/libdl exists */
-#define HAVE_DLOPEN 1
-
-/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
-/* #undef HAVE_DOPRNT */
-
-/* Define to 1 if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H 1
-
-/* Define to 1 if you have the <execinfo.h> header file. */
-#define HAVE_EXECINFO_H 1
-
-/* Define to 1 if Ext2 ioctls present */
-#define HAVE_EXT2_IOCTLS 1
-
-/* Define to 1 if you have the `fadvise64' function. */
-/* #undef HAVE_FADVISE64 */
-
-/* Define to 1 if you have the `fallocate' function. */
-#define HAVE_FALLOCATE 1
-
-/* Define to 1 if you have the `fallocate64' function. */
-#define HAVE_FALLOCATE64 1
-
-/* Define to 1 if you have the `fchown' function. */
-#define HAVE_FCHOWN 1
-
-/* Define to 1 if you have the `fdatasync' function. */
-#define HAVE_FDATASYNC 1
-
-/* Define to 1 if you have the <features.h> header file. */
-#define HAVE_FEATURES_H 1
-
-/* Define to 1 if you have the `fstat64' function. */
-#define HAVE_FSTAT64 1
-
-/* Define to 1 if you have the `ftruncate64' function. */
-#define HAVE_FTRUNCATE64 1
-
-/* Define to 1 if you have the `futimes' function. */
-#define HAVE_FUTIMES 1
-
-/* Define to 1 if you have the `fwprintf' function. */
-#define HAVE_FWPRINTF 1
-
-/* Define to 1 if you have the `getcwd' function. */
-#define HAVE_GETCWD 1
-
-/* Define to 1 if you have the `getdtablesize' function. */
-#define HAVE_GETDTABLESIZE 1
-
-/* Define to 1 if you have the `getegid' function. */
-#define HAVE_GETEGID 1
-
-/* Define to 1 if you have the `geteuid' function. */
-#define HAVE_GETEUID 1
-
-/* Define to 1 if you have the `getgid' function. */
-#define HAVE_GETGID 1
-
-/* Define to 1 if you have the `getmntinfo' function. */
-/* #undef HAVE_GETMNTINFO */
-
-/* Define to 1 if you have the <getopt.h> header file. */
-#define HAVE_GETOPT_H 1
-
-/* Define to 1 if you have the `getpagesize' function. */
-#define HAVE_GETPAGESIZE 1
-
-/* Define to 1 if you have the `getpwuid_r' function. */
-#define HAVE_GETPWUID_R 1
-
-/* Define to 1 if you have the `getrlimit' function. */
-#define HAVE_GETRLIMIT 1
-
-/* Define to 1 if you have the `getrusage' function. */
-#define HAVE_GETRUSAGE 1
-
-/* Define if the GNU gettext() function is already present or preinstalled. */
-#define HAVE_GETTEXT 1
-
-/* Define to 1 if you have the `getuid' function. */
-#define HAVE_GETUID 1
-
-/* Define if you have the iconv() function and it works. */
-#define HAVE_ICONV 1
-
-/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */
-#define HAVE_INTMAX_T 1
-
-/* Define to 1 if the system has the type `intptr_t'. */
-#define HAVE_INTPTR_T 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
-   declares uintmax_t. */
-#define HAVE_INTTYPES_H_WITH_UINTMAX 1
-
-/* Define to 1 if you have the `jrand48' function. */
-#define HAVE_JRAND48 1
-
-/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
-#define HAVE_LANGINFO_CODESET 1
-
-/* Define if your <locale.h> file defines LC_MESSAGES. */
-#define HAVE_LC_MESSAGES 1
-
-/* Define to 1 if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* Define to 1 if you have the <linux/falloc.h> header file. */
-#define HAVE_LINUX_FALLOC_H 1
-
-/* Define to 1 if you have the <linux/fd.h> header file. */
-#define HAVE_LINUX_FD_H 1
-
-/* Define to 1 if you have the <linux/loop.h> header file. */
-#define HAVE_LINUX_LOOP_H 1
-
-/* Define to 1 if you have the <linux/major.h> header file. */
-#define HAVE_LINUX_MAJOR_H 1
-
-/* Define to 1 if you have the `llseek' function. */
-#define HAVE_LLSEEK 1
-
-/* Define to 1 if llseek declared in unistd.h */
-/* #undef HAVE_LLSEEK_PROTOTYPE */
-
-/* Define to 1 if the system has the type 'long long int'. */
-#define HAVE_LONG_LONG_INT 1
-
-/* Define to 1 if you have the `lseek64' function. */
-#define HAVE_LSEEK64 1
-
-/* Define to 1 if lseek64 declared in unistd.h */
-#define HAVE_LSEEK64_PROTOTYPE 1
-
-/* Define to 1 if you have the `mallinfo' function. */
-#define HAVE_MALLINFO 1
-
-/* Define to 1 if you have the <malloc.h> header file. */
-#define HAVE_MALLOC_H 1
-
-/* Define to 1 if you have the `mbrtowc' function. */
-#define HAVE_MBRTOWC 1
-
-/* Define to 1 if you have the `mbstowcs' function. */
-#define HAVE_MBSTOWCS 1
-
-/* Define to 1 if you have the `memalign' function. */
-#define HAVE_MEMALIGN 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `mempcpy' function. */
-#define HAVE_MEMPCPY 1
-
-/* Define to 1 if you have the `mmap' function. */
-#define HAVE_MMAP 1
-
-/* Define to 1 if you have the <mntent.h> header file. */
-#define HAVE_MNTENT_H 1
-
-/* Define to 1 if you have the `msync' function. */
-#define HAVE_MSYNC 1
-
-/* Define to 1 if you have the `munmap' function. */
-#define HAVE_MUNMAP 1
-
-/* Define to 1 if you have the `nanosleep' function. */
-#define HAVE_NANOSLEEP 1
-
-/* Define to 1 if you have the <netinet/in.h> header file. */
-#define HAVE_NETINET_IN_H 1
-
-/* Define to 1 if you have the <net/if_dl.h> header file. */
-/* #undef HAVE_NET_IF_DL_H */
-
-/* Define to 1 if you have the <net/if.h> header file. */
-#define HAVE_NET_IF_H 1
-
-/* Define to 1 if you have the `newlocale' function. */
-#define HAVE_NEWLOCALE 1
-
-/* Define to 1 if you have the `open64' function. */
-#define HAVE_OPEN64 1
-
-/* Define to 1 if optreset for getopt is present */
-/* #undef HAVE_OPTRESET */
-
-/* Define to 1 if you have the `pathconf' function. */
-#define HAVE_PATHCONF 1
-
-/* Define to 1 if you have the <paths.h> header file. */
-#define HAVE_PATHS_H 1
-
-/* Define to 1 if you have the `posix_fadvise' function. */
-#define HAVE_POSIX_FADVISE 1
-
-/* Define to 1 if you have the `posix_fadvise64' function. */
-#define HAVE_POSIX_FADVISE64 1
-
-/* Define to 1 if you have the `posix_memalign' function. */
-#define HAVE_POSIX_MEMALIGN 1
-
-/* Define if your printf() function supports format strings with positions. */
-#define HAVE_POSIX_PRINTF 1
-
-/* Define to 1 if you have the `prctl' function. */
-#define HAVE_PRCTL 1
-
-/* Define to 1 if you have the `pread' function. */
-#define HAVE_PREAD 1
-
-/* Define to 1 if you have the `pread64' function. */
-#define HAVE_PREAD64 1
-
-/* Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE. */
-#define HAVE_PTHREAD_MUTEX_RECURSIVE 1
-
-/* Define if the POSIX multithreading library has read/write locks. */
-#define HAVE_PTHREAD_RWLOCK 1
-
-/* Define to 1 if you have the `putenv' function. */
-#define HAVE_PUTENV 1
-
-/* Define to 1 if you have the `pwrite' function. */
-#define HAVE_PWRITE 1
-
-/* Define to 1 if you have the `pwrite64' function. */
-#define HAVE_PWRITE64 1
-
-/* Define to 1 if dirent has d_reclen */
-#define HAVE_RECLEN_DIRENT 1
-
-/* Define to 1 if if struct sockaddr contains sa_len */
-/* #undef HAVE_SA_LEN */
-
-/* Define to 1 if you have the `secure_getenv' function. */
-#define HAVE_SECURE_GETENV 1
-
-/* Define to 1 if you have the <semaphore.h> header file. */
-#define HAVE_SEMAPHORE_H 1
-
-/* Define to 1 if sem_init() exists */
-#define HAVE_SEM_INIT 1
-
-/* Define to 1 if you have the `setenv' function. */
-#define HAVE_SETENV 1
-
-/* Define to 1 if you have the <setjmp.h> header file. */
-#define HAVE_SETJMP_H 1
-
-/* Define to 1 if you have the `setlocale' function. */
-#define HAVE_SETLOCALE 1
-
-/* Define to 1 if you have the `setmntent' function. */
-#define HAVE_SETMNTENT 1
-
-/* Define to 1 if you have the `setresgid' function. */
-#define HAVE_SETRESGID 1
-
-/* Define to 1 if you have the `setresuid' function. */
-#define HAVE_SETRESUID 1
-
-/* Define to 1 if you have the <signal.h> header file. */
-#define HAVE_SIGNAL_H 1
-
-/* Define to 1 if you have the `snprintf' function. */
-#define HAVE_SNPRINTF 1
-
-/* Define to 1 if you have the `srandom' function. */
-#define HAVE_SRANDOM 1
-
-/* Define to 1 if struct stat has st_flags */
-/* #undef HAVE_STAT_FLAGS */
-
-/* Define to 1 if you have the <stdarg.h> header file. */
-#define HAVE_STDARG_H 1
-
-/* Define to 1 if you have the <stddef.h> header file. */
-#define HAVE_STDDEF_H 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
-   uintmax_t. */
-#define HAVE_STDINT_H_WITH_UINTMAX 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the `stpcpy' function. */
-#define HAVE_STPCPY 1
-
-/* Define to 1 if you have the `strcasecmp' function. */
-#define HAVE_STRCASECMP 1
-
-/* Define to 1 if you have the `strdup' function. */
-#define HAVE_STRDUP 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the `strnlen' function. */
-#define HAVE_STRNLEN 1
-
-/* Define to 1 if you have the `strptime' function. */
-#define HAVE_STRPTIME 1
-
-/* Define to 1 if you have the `strtoul' function. */
-#define HAVE_STRTOUL 1
-
-/* Define to 1 if you have the `strtoull' function. */
-#define HAVE_STRTOULL 1
-
-/* Define to 1 if `st_atim' is a member of `struct stat'. */
-#define HAVE_STRUCT_STAT_ST_ATIM 1
-
-/* Define to 1 if you have the `symlink' function. */
-#define HAVE_SYMLINK 1
-
-/* Define to 1 if you have the `sync_file_range' function. */
-#define HAVE_SYNC_FILE_RANGE 1
-
-/* Define to 1 if you have the `sysconf' function. */
-#define HAVE_SYSCONF 1
-
-/* Define to 1 if you have the <sys/disklabel.h> header file. */
-/* #undef HAVE_SYS_DISKLABEL_H */
-
-/* Define to 1 if you have the <sys/disk.h> header file. */
-/* #undef HAVE_SYS_DISK_H */
-
-/* Define to 1 if you have the <sys/file.h> header file. */
-#define HAVE_SYS_FILE_H 1
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#define HAVE_SYS_IOCTL_H 1
-
-/* Define to 1 if you have the <sys/mkdev.h> header file. */
-/* #undef HAVE_SYS_MKDEV_H */
-
-/* Define to 1 if you have the <sys/mman.h> header file. */
-#define HAVE_SYS_MMAN_H 1
-
-/* Define to 1 if you have the <sys/mount.h> header file. */
-#define HAVE_SYS_MOUNT_H 1
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#define HAVE_SYS_PARAM_H 1
-
-/* Define to 1 if you have the <sys/prctl.h> header file. */
-#define HAVE_SYS_PRCTL_H 1
-
-/* Define to 1 if you have the <sys/resource.h> header file. */
-#define HAVE_SYS_RESOURCE_H 1
-
-/* Define to 1 if you have the <sys/select.h> header file. */
-#define HAVE_SYS_SELECT_H 1
-
-/* Define to 1 if you have the <sys/socket.h> header file. */
-#define HAVE_SYS_SOCKET_H 1
-
-/* Define to 1 if you have the <sys/sockio.h> header file. */
-/* #undef HAVE_SYS_SOCKIO_H */
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/syscall.h> header file. */
-#define HAVE_SYS_SYSCALL_H 1
-
-/* Define to 1 if you have the <sys/sysmacros.h> header file. */
-#define HAVE_SYS_SYSMACROS_H 1
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#define HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <sys/un.h> header file. */
-#define HAVE_SYS_UN_H 1
-
-/* Define to 1 if you have the <sys/wait.h> header file. */
-#define HAVE_SYS_WAIT_H 1
-
-/* Define to 1 if you have the <termios.h> header file. */
-#define HAVE_TERMIOS_H 1
-
-/* Define to 1 if you have the <termio.h> header file. */
-#define HAVE_TERMIO_H 1
-
-/* Define to 1 if you have the `tsearch' function. */
-#define HAVE_TSEARCH 1
-
-/* Define to 1 if ssize_t declared */
-#define HAVE_TYPE_SSIZE_T 1
-
-/* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */
-#define HAVE_UINTMAX_T 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define to 1 if the system has the type 'unsigned long long int'. */
-#define HAVE_UNSIGNED_LONG_LONG_INT 1
-
-/* Define to 1 if you have the `uselocale' function. */
-#define HAVE_USELOCALE 1
-
-/* Define to 1 if you have the `usleep' function. */
-#define HAVE_USLEEP 1
-
-/* Define to 1 if you have the `utime' function. */
-#define HAVE_UTIME 1
-
-/* Define to 1 if you have the `utimes' function. */
-#define HAVE_UTIMES 1
-
-/* Define to 1 if you have the <utime.h> header file. */
-#define HAVE_UTIME_H 1
-
-/* Define to 1 if you have the `valloc' function. */
-#define HAVE_VALLOC 1
-
-/* Define to 1 or 0, depending whether the compiler supports simple visibility
-   declarations. */
-#define HAVE_VISIBILITY 1
-
-/* Define to 1 if you have the `vprintf' function. */
-#define HAVE_VPRINTF 1
-
-/* Define if you have the 'wchar_t' type. */
-#define HAVE_WCHAR_T 1
-
-/* Define to 1 if you have the `wcrtomb' function. */
-#define HAVE_WCRTOMB 1
-
-/* Define to 1 if you have the `wcslen' function. */
-#define HAVE_WCSLEN 1
-
-/* Define to 1 if you have the `wcsnlen' function. */
-#define HAVE_WCSNLEN 1
-
-/* Define if you have the 'wint_t' type. */
-#define HAVE_WINT_T 1
-
-/* Define to 1 if O_NOATIME works. */
-#define HAVE_WORKING_O_NOATIME 1
-
-/* Define to 1 if O_NOFOLLOW works. */
-#define HAVE_WORKING_O_NOFOLLOW 1
-
-/* Define to 1 if you have the `__fsetlocking' function. */
-#define HAVE___FSETLOCKING 1
-
-/* Define to 1 if you have the `__secure_getenv' function. */
-/* #undef HAVE___SECURE_GETENV */
-
-/* Define as const if the declaration of iconv() needs const. */
-#define ICONV_CONST 
-
-/* Define if integer division by zero raises signal SIGFPE. */
-#define INTDIV0_RAISES_SIGFPE 1
-
-/* package name for gettext */
-#define PACKAGE "e2fsprogs"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT ""
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME ""
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING ""
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME ""
-
-/* Define to the home page for this package. */
-#define PACKAGE_URL ""
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION ""
-
-/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
-/* #undef PRI_MACROS_BROKEN */
-
-/* Define if the pthread_in_use() detection is hard. */
-/* #undef PTHREAD_IN_USE_DETECTION_HARD */
-
-/* The size of `int', as computed by sizeof. */
-#define SIZEOF_INT 4
-
-/* The size of `long', as computed by sizeof. */
-#define SIZEOF_LONG 8
-
-/* The size of `long long', as computed by sizeof. */
-#define SIZEOF_LONG_LONG 8
-
-/* The size of `off_t', as computed by sizeof. */
-#define SIZEOF_OFF_T 8
-
-/* The size of `short', as computed by sizeof. */
-#define SIZEOF_SHORT 2
-
-/* Define as the maximum value of type 'size_t', if the system doesn't define
-   it. */
-#ifndef SIZE_MAX
-/* # undef SIZE_MAX */
-#endif
-
-/* If using the C implementation of alloca, define if you know the
-   direction of stack growth for your system; otherwise it will be
-   automatically deduced at runtime.
-	STACK_DIRECTION > 0 => grows toward higher addresses
-	STACK_DIRECTION < 0 => grows toward lower addresses
-	STACK_DIRECTION = 0 => direction of growth unknown */
-/* #undef STACK_DIRECTION */
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* If the compiler supports a TLS storage class define it to that here */
-#define TLS __thread
-
-/* Define if the POSIX multithreading library can be used. */
-#define USE_POSIX_THREADS 1
-
-/* Define if references to the POSIX multithreading library should be made
-   weak. */
-#define USE_POSIX_THREADS_WEAK 1
-
-/* Define if the GNU Pth multithreading library can be used. */
-/* #undef USE_PTH_THREADS */
-
-/* Define if references to the GNU Pth multithreading library should be made
-   weak. */
-/* #undef USE_PTH_THREADS_WEAK */
-
-/* Define if the old Solaris multithreading library can be used. */
-/* #undef USE_SOLARIS_THREADS */
-
-/* Define if references to the old Solaris multithreading library should be
-   made weak. */
-/* #undef USE_SOLARIS_THREADS_WEAK */
-
-/* Enable extensions on AIX 3, Interix.  */
-#ifndef _ALL_SOURCE
-# define _ALL_SOURCE 1
-#endif
-/* Enable GNU extensions on systems that have them.  */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE 1
-#endif
-/* Enable threading extensions on Solaris.  */
-#ifndef _POSIX_PTHREAD_SEMANTICS
-# define _POSIX_PTHREAD_SEMANTICS 1
-#endif
-/* Enable extensions on HP NonStop.  */
-#ifndef _TANDEM_SOURCE
-# define _TANDEM_SOURCE 1
-#endif
-/* Enable general extensions on Solaris.  */
-#ifndef __EXTENSIONS__
-# define __EXTENSIONS__ 1
-#endif
-
-
-/* Define to 1 to build uuidd */
-#define USE_UUIDD 1
-
-/* Define if the native Windows multithreading API can be used. */
-/* #undef USE_WINDOWS_THREADS */
-
-/* version for gettext */
-#define VERSION "0.14.1"
-
-/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
-   significant byte first (like Motorola and SPARC, unlike Intel). */
-#if defined AC_APPLE_UNIVERSAL_BUILD
-# if defined __BIG_ENDIAN__
-#  define WORDS_BIGENDIAN 1
-# endif
-#else
-# ifndef WORDS_BIGENDIAN
-/* #  undef WORDS_BIGENDIAN */
-# endif
-#endif
-
-/* Define to 1 if Apple Darwin libintl workaround is needed */
-/* #undef _INTL_REDIRECT_MACROS */
-
-/* Define to 1 if on MINIX. */
-/* #undef _MINIX */
-
-/* Define to 2 if the system does not provide POSIX.1 features except with
-   this defined. */
-/* #undef _POSIX_1_SOURCE */
-
-/* Define to 1 if you need to in order for `stat' and other things to work. */
-/* #undef _POSIX_SOURCE */
-
-/* Please see the Gnulib manual for how to use these macros.
-
-   Suppress extern inline with HP-UX cc, as it appears to be broken; see
-   <http://lists.gnu.org/archive/html/bug-texinfo/2013-02/msg00030.html>.
-
-   Suppress extern inline with Sun C in standards-conformance mode, as it
-   mishandles inline functions that call each other.  E.g., for 'inline void f
-   (void) { } inline void g (void) { f (); }', c99 incorrectly complains
-   'reference to static identifier "f" in extern inline function'.
-   This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16.
-
-   Suppress the use of extern inline on Apple's platforms, as Libc at least
-   through Libc-825.26 (2013-04-09) is incompatible with it; see, e.g.,
-   <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>.
-   Perhaps Apple will fix this some day.  */
-#if ((__GNUC__ \
-      ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
-      : (199901L <= __STDC_VERSION__ \
-         && !defined __HP_cc \
-         && !(defined __SUNPRO_C && __STDC__))) \
-     && !defined __APPLE__)
-# define _GL_INLINE inline
-# define _GL_EXTERN_INLINE extern inline
-#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \
-       && !defined __APPLE__)
-# if __GNUC_GNU_INLINE__
-   /* __gnu_inline__ suppresses a GCC 4.2 diagnostic.  */
-#  define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
-# else
-#  define _GL_INLINE extern inline
-# endif
-# define _GL_EXTERN_INLINE extern
-#else
-# define _GL_INLINE static _GL_UNUSED
-# define _GL_EXTERN_INLINE static _GL_UNUSED
-#endif
-
-#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
-# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
-#  define _GL_INLINE_HEADER_CONST_PRAGMA
-# else
-#  define _GL_INLINE_HEADER_CONST_PRAGMA \
-     _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
-# endif
-  /* Suppress GCC's bogus "no previous prototype for 'FOO'"
-     and "no previous declaration for 'FOO'"  diagnostics,
-     when FOO is an inline function in the header; see
-     <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>.  */
-# define _GL_INLINE_HEADER_BEGIN \
-    _Pragma ("GCC diagnostic push") \
-    _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
-    _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
-    _GL_INLINE_HEADER_CONST_PRAGMA
-# define _GL_INLINE_HEADER_END \
-    _Pragma ("GCC diagnostic pop")
-#else
-# define _GL_INLINE_HEADER_BEGIN
-# define _GL_INLINE_HEADER_END
-#endif
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
-   calls it, or to nothing if 'inline' is not supported under any name.  */
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-/* Define as the type of the result of subtracting two pointers, if the system
-   doesn't define it. */
-/* #undef ptrdiff_t */
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-/* #undef size_t */
-
-/* Define to unsigned long or unsigned long long if <stdint.h> and
-   <inttypes.h> don't define. */
-/* #undef uintmax_t */
-
-
-
-#define __libc_lock_t                   gl_lock_t
-#define __libc_lock_define              gl_lock_define
-#define __libc_lock_define_initialized  gl_lock_define_initialized
-#define __libc_lock_init                gl_lock_init
-#define __libc_lock_lock                gl_lock_lock
-#define __libc_lock_unlock              gl_lock_unlock
-#define __libc_lock_recursive_t                   gl_recursive_lock_t
-#define __libc_lock_define_recursive              gl_recursive_lock_define
-#define __libc_lock_define_initialized_recursive  gl_recursive_lock_define_initialized
-#define __libc_lock_init_recursive                gl_recursive_lock_init
-#define __libc_lock_lock_recursive                gl_recursive_lock_lock
-#define __libc_lock_unlock_recursive              gl_recursive_lock_unlock
-#define glthread_in_use  libintl_thread_in_use
-#define glthread_lock_init_func     libintl_lock_init_func
-#define glthread_lock_lock_func     libintl_lock_lock_func
-#define glthread_lock_unlock_func   libintl_lock_unlock_func
-#define glthread_lock_destroy_func  libintl_lock_destroy_func
-#define glthread_rwlock_init_multithreaded     libintl_rwlock_init_multithreaded
-#define glthread_rwlock_init_func              libintl_rwlock_init_func
-#define glthread_rwlock_rdlock_multithreaded   libintl_rwlock_rdlock_multithreaded
-#define glthread_rwlock_rdlock_func            libintl_rwlock_rdlock_func
-#define glthread_rwlock_wrlock_multithreaded   libintl_rwlock_wrlock_multithreaded
-#define glthread_rwlock_wrlock_func            libintl_rwlock_wrlock_func
-#define glthread_rwlock_unlock_multithreaded   libintl_rwlock_unlock_multithreaded
-#define glthread_rwlock_unlock_func            libintl_rwlock_unlock_func
-#define glthread_rwlock_destroy_multithreaded  libintl_rwlock_destroy_multithreaded
-#define glthread_rwlock_destroy_func           libintl_rwlock_destroy_func
-#define glthread_recursive_lock_init_multithreaded     libintl_recursive_lock_init_multithreaded
-#define glthread_recursive_lock_init_func              libintl_recursive_lock_init_func
-#define glthread_recursive_lock_lock_multithreaded     libintl_recursive_lock_lock_multithreaded
-#define glthread_recursive_lock_lock_func              libintl_recursive_lock_lock_func
-#define glthread_recursive_lock_unlock_multithreaded   libintl_recursive_lock_unlock_multithreaded
-#define glthread_recursive_lock_unlock_func            libintl_recursive_lock_unlock_func
-#define glthread_recursive_lock_destroy_multithreaded  libintl_recursive_lock_destroy_multithreaded
-#define glthread_recursive_lock_destroy_func           libintl_recursive_lock_destroy_func
-#define glthread_once_func            libintl_once_func
-#define glthread_once_singlethreaded  libintl_once_singlethreaded
-#define glthread_once_multithreaded   libintl_once_multithreaded
-
-
-#define LIBUUID_CLOCK_FILE "/var/lib/libuuid/clock.txt"
\ No newline at end of file
diff --git a/thirdparty/uuid/include/posix/uuid/uuid.h b/thirdparty/uuid/include/posix/uuid/uuid.h
deleted file mode 100644
index 7966427..0000000
--- a/thirdparty/uuid/include/posix/uuid/uuid.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Public include file for the UUID library
- *
- * Copyright (C) 1996, 1997, 1998 Theodore Ts'o.
- *
- * %Begin-Header%
- * 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, and the entire permission notice in its entirety,
- *    including the disclaimer of warranties.
- * 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 of the author may not 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, ALL OF
- * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- * %End-Header%
- */
-
-#ifndef _UUID_UUID_H
-#define _UUID_UUID_H
-
-#include <sys/types.h>
-#ifndef _WIN32
-#include <sys/time.h>
-#endif
-#include <time.h>
-
-typedef unsigned char uuid_t[16];
-
-/* UUID Variant definitions */
-#define UUID_VARIANT_NCS 	0
-#define UUID_VARIANT_DCE 	1
-#define UUID_VARIANT_MICROSOFT	2
-#define UUID_VARIANT_OTHER	3
-
-/* UUID Type definitions */
-#define UUID_TYPE_DCE_TIME   1
-#define UUID_TYPE_DCE_RANDOM 4
-
-/* Allow UUID constants to be defined */
-#ifdef __GNUC__
-#define UUID_DEFINE(name,u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15) \
-	static const uuid_t name __attribute__ ((unused)) = {u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15}
-#else
-#define UUID_DEFINE(name,u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15) \
-	static const uuid_t name = {u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15}
-#endif
-
-#define UUID_FIELD uuid_t
-
-struct st_tm_val {
-  long    tv_sec;         /* seconds */
-  long    tv_usec;        /* and microseconds */
-};
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* clear.c */
-void uuid_clear(UUID_FIELD uu);
-
-/* compare.c */
-int uuid_compare(const UUID_FIELD uu1, const UUID_FIELD uu2);
-
-/* copy.c */
-void uuid_copy(UUID_FIELD dst, const UUID_FIELD src);
-
-/* gen_uuid.c */
-void uuid_generate(UUID_FIELD out);
-void uuid_generate_random(UUID_FIELD out);
-void uuid_generate_time(UUID_FIELD out);
-
-/* isnull.c */
-int uuid_is_null(const UUID_FIELD uu);
-
-/* parse.c */
-int uuid_parse(const char *in, UUID_FIELD uu);
-
-/* unparse.c */
-void uuid_unparse(const UUID_FIELD uu, char *out);
-void uuid_unparse_lower(const UUID_FIELD uu, char *out);
-void uuid_unparse_upper(const UUID_FIELD uu, char *out);
-
-/* m_uuidime.c */
-time_t m_uuidime(const UUID_FIELD uu, struct st_tm_val *ret_tv);
-int m_uuidype(const UUID_FIELD uu);
-int uuid_variant(const UUID_FIELD uu);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _UUID_UUID_H */
diff --git a/thirdparty/uuid/include/posix/uuid/uuidP.h b/thirdparty/uuid/include/posix/uuid/uuidP.h
deleted file mode 100644
index 5f0d24c..0000000
--- a/thirdparty/uuid/include/posix/uuid/uuidP.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * uuid.h -- private header file for uuids
- *
- * Copyright (C) 1996, 1997 Theodore Ts'o.
- *
- * %Begin-Header%
- * 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, and the entire permission notice in its entirety,
- *    including the disclaimer of warranties.
- * 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 of the author may not 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, ALL OF
- * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- * %End-Header%
- */
-
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#else
-#include <uuid/m_uuidypes.h>
-#endif
-#include <sys/types.h>
-
-#include "uuid.h"
-
-/*
- * Offset between 15-Oct-1582 and 1-Jan-70
- */
-#define TIME_OFFSET_HIGH 0x01B21DD2
-#define TIME_OFFSET_LOW  0x13814000
-
-struct uuid {
-	uint32_t	time_low;
-	uint16_t	time_mid;
-	uint16_t	time_hi_and_version;
-	uint16_t	clock_seq;
-	uint8_t	node[6];
-};
-
-
-/*
- * prototypes
- */
-void uuid_pack(const struct uuid *uu, UUID_FIELD ptr);
-void uuid_unpack(const UUID_FIELD in, struct uuid *uu);
diff --git a/thirdparty/uuid/include/posix/uuid/uuidd.h b/thirdparty/uuid/include/posix/uuid/uuidd.h
deleted file mode 100644
index c71f4b7..0000000
--- a/thirdparty/uuid/include/posix/uuid/uuidd.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Definitions used by the uuidd daemon
- *
- * Copyright (C) 2007 Theodore Ts'o.
- *
- * %Begin-Header%
- * 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, and the entire permission notice in its entirety,
- *    including the disclaimer of warranties.
- * 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 of the author may not 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, ALL OF
- * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- * %End-Header%
- */
-
-#ifndef _UUID_UUIDD_H
-#define _UUID_UUIDD_H
-
-#define UUIDD_DIR		"/var/lib/libuuid"
-#define UUIDD_SOCKET_PATH	UUIDD_DIR "/request"
-#define UUIDD_PIDFILE_PATH	UUIDD_DIR "/uuidd.pid"
-#define UUIDD_PATH		"/usr/sbin/uuidd"
-
-#define UUIDD_OP_GETPID			0
-#define UUIDD_OP_GET_MAXOP		1
-#define UUIDD_OP_TIME_UUID		2
-#define UUIDD_OP_RANDOM_UUID		3
-#define UUIDD_OP_BULK_TIME_UUID		4
-#define UUIDD_OP_BULK_RANDOM_UUID	5
-#define UUIDD_MAX_OP			UUIDD_OP_BULK_RANDOM_UUID
-
-extern void uuid__generate_time(uuid_t out, int *num);
-extern void uuid__generate_random(uuid_t out, int *num);
-
-#endif /* _UUID_UUID_H */
diff --git a/thirdparty/uuid/include/win32/uuid/config.h b/thirdparty/uuid/include/win32/uuid/config.h
deleted file mode 100644
index b8cf1b4..0000000
--- a/thirdparty/uuid/include/win32/uuid/config.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* src/config.h.  Generated from config.h.in by configure.  */
-/* src/config.h.in.  Generated from configure.ac by autoheader.  */
-/* -- reflects MinGW + Win32 -- */
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the `flock' function. */
-#define HAVE_FLOCK 1
-
-/* Define to 1 if you have the `jrand48' function. */
-/* #undef HAVE_JRAND48 */
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the <netinet/in.h> header file. */
-/* #undef HAVE_NETINET_IN_H */
-
-/* Define to 1 if you have the <net/if_dl.h> header file. */
-/* #undef HAVE_NET_IF_DL_H */
-
-/* Define to 1 if you have the <net/if.h> header file. */
-/* #undef HAVE_NET_IF_H */
-
-/* Define if struct sockaddr contains sa_len */
-/* #undef HAVE_SA_LEN */
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the <sys/file.h> header file. */
-//#define HAVE_SYS_FILE_H 1
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-/* #undef HAVE_SYS_IOCTL_H */
-
-/* Define to 1 if you have the <sys/socket.h> header file. */
-/* #undef HAVE_SYS_SOCKET_H */
-
-/* Define to 1 if you have the <sys/sockio.h> header file. */
-/* #undef HAVE_SYS_SOCKIO_H */
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/syscall.h> header file. */
-/* #undef HAVE_SYS_SYSCALL_H */
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-//#define HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <sys/un.h> header file. */
-/* #undef HAVE_SYS_UN_H */
-
-/* Define to 1 if you have the <unistd.h> header file. */
-//#define HAVE_UNISTD_H 0
-
-
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "uuid"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "uuid 0.1"
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "uuid"
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "0.1"
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-#define LIBUUID_CLOCK_FILE "c:/windows/system32/clock.txt"
\ No newline at end of file
diff --git a/thirdparty/uuid/include/win32/uuid/uuid.h b/thirdparty/uuid/include/win32/uuid/uuid.h
deleted file mode 100644
index 5177fdc..0000000
--- a/thirdparty/uuid/include/win32/uuid/uuid.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Public include file for the UUID library
- *
- * Copyright (C) 1996, 1997, 1998 Theodore Ts'o.
- *
- * %Begin-Header%
- * 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, and the entire permission notice in its entirety,
- *    including the disclaimer of warranties.
- * 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 of the author may not 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, ALL OF
- * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- * %End-Header%
- */
-
-#ifndef _UUID_UUID_H
-#define _UUID_UUID_H
-
-#include <sys/types.h>
-#ifndef _WIN32
-#include <sys/time.h>
-#endif
-#include <time.h>
-
-typedef unsigned char m_uuid[16];
-
-/* UUID Variant definitions */
-#define UUID_VARIANT_NCS 	0
-#define UUID_VARIANT_DCE 	1
-#define UUID_VARIANT_MICROSOFT	2
-#define UUID_VARIANT_OTHER	3
-
-/* UUID Type definitions */
-#define UUID_TYPE_DCE_TIME   1
-#define UUID_TYPE_DCE_RANDOM 4
-
-/* Allow UUID constants to be defined */
-#ifdef __GNUC__
-#define UUID_DEFINE(name,u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15) \
-	static const m_uuid name __attribute__ ((unused)) = {u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15}
-#else
-#define UUID_DEFINE(name,u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15) \
-	static const m_uuid name = {u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15}
-#endif
-
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define UUID_FIELD m_uuid
-
-struct st_tm_val {
-  long    tv_sec;         /* seconds */
-  long    tv_usec;        /* and microseconds */
-};
-
-
-
-/* clear.c */
-void uuid_clear(m_uuid uu);
-
-/* compare.c */
-int uuid_compare(const m_uuid uu1, const m_uuid uu2);
-
-/* copy.c */
-void uuid_copy(m_uuid dst, const m_uuid src);
-
-/* gen_uuid.c */
-void uuid_generate(m_uuid out);
-void uuid_generate_random(m_uuid out);
-void uuid_generate_time(m_uuid out);
-
-/* isnull.c */
-int uuid_is_null(const m_uuid uu);
-
-/* parse.c */
-int uuid_parse(const char *in, m_uuid uu);
-
-/* unparse.c */
-void uuid_unparse(const m_uuid uu, char *out);
-void uuid_unparse_lower(const m_uuid uu, char *out);
-void uuid_unparse_upper(const m_uuid uu, char *out);
-
-/* m_uuidime.c */
-time_t m_uuidime(const m_uuid uu, struct st_tm_val *ret_tv);
-int m_uuidype(const m_uuid uu);
-int uuid_variant(const m_uuid uu);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _UUID_UUID_H */
diff --git a/thirdparty/uuid/include/win32/uuid/uuidP.h b/thirdparty/uuid/include/win32/uuid/uuidP.h
deleted file mode 100644
index 6ae188a..0000000
--- a/thirdparty/uuid/include/win32/uuid/uuidP.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * uuid.h -- private header file for uuids
- *
- * Copyright (C) 1996, 1997 Theodore Ts'o.
- *
- * %Begin-Header%
- * 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, and the entire permission notice in its entirety,
- *    including the disclaimer of warranties.
- * 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 of the author may not 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, ALL OF
- * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- * %End-Header%
- */
-
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#else
-#include <uuid/m_uuidypes.h>
-#endif
-#include <sys/types.h>
-
-#include <uuid/uuid.h>
-
-/*
- * Offset between 15-Oct-1582 and 1-Jan-70
- */
-#define TIME_OFFSET_HIGH 0x01B21DD2
-#define TIME_OFFSET_LOW  0x13814000
-
-struct uuid {
-	uint32_t	time_low;
-	uint16_t	time_mid;
-	uint16_t	time_hi_and_version;
-	uint16_t	clock_seq;
-	uint8_t	node[6];
-};
-
-
-/*
- * prototypes
- */
-void uuid_pack(const struct uuid *uu, UUID_FIELD ptr);
-void uuid_unpack(const UUID_FIELD in, struct uuid *uu);
diff --git a/thirdparty/uuid/include/win32/uuid/uuidd.h b/thirdparty/uuid/include/win32/uuid/uuidd.h
deleted file mode 100644
index f704a1e..0000000
--- a/thirdparty/uuid/include/win32/uuid/uuidd.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Definitions used by the uuidd daemon
- *
- * Copyright (C) 2007 Theodore Ts'o.
- *
- * %Begin-Header%
- * 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, and the entire permission notice in its entirety,
- *    including the disclaimer of warranties.
- * 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 of the author may not 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, ALL OF
- * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- * %End-Header%
- */
-
-#ifndef _UUID_UUIDD_H
-#define _UUID_UUIDD_H
-
-#define UUIDD_DIR		"/var/lib/libuuid"
-#define UUIDD_SOCKET_PATH	UUIDD_DIR "/request"
-#define UUIDD_PIDFILE_PATH	UUIDD_DIR "/uuidd.pid"
-#define UUIDD_PATH		"/usr/sbin/uuidd"
-
-#define UUIDD_OP_GETPID			0
-#define UUIDD_OP_GET_MAXOP		1
-#define UUIDD_OP_TIME_UUID		2
-#define UUIDD_OP_RANDOM_UUID		3
-#define UUIDD_OP_BULK_TIME_UUID		4
-#define UUIDD_OP_BULK_RANDOM_UUID	5
-#define UUIDD_MAX_OP			UUIDD_OP_BULK_RANDOM_UUID
-
-extern void uuid__generate_time(UUID_FIELD out, int *num);
-extern void uuid__generate_random(UUID_FIELD out, int *num);
-
-#endif /* _UUID_UUID_H */
diff --git a/thirdparty/uuid/isnull.c b/thirdparty/uuid/isnull.c
deleted file mode 100644
index 8a48e2a..0000000
--- a/thirdparty/uuid/isnull.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * isnull.c --- Check whether or not the UUID is null
- *
- * Copyright (C) 1996, 1997 Theodore Ts'o.
- *
- * %Begin-Header%
- * 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, and the entire permission notice in its entirety,
- *    including the disclaimer of warranties.
- * 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 of the author may not 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, ALL OF
- * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- * %End-Header%
- */
-
-#include "config.h"
-#include "uuidP.h"
-
-/* Returns 1 if the uuid is the NULL uuid */
-int uuid_is_null(const UUID_FIELD uu)
-{
-	const unsigned char 	*cp = uu;
-	int			i;
-
-	if (cp == 0x00)
-		return 1;
-	for (i=0, cp = uu; i < 16; i++)
-		if (*cp++)
-			return 0;
-	return 1;
-}
-
diff --git a/thirdparty/uuid/makefile b/thirdparty/uuid/makefile
deleted file mode 100644
index d0adfcf..0000000
--- a/thirdparty/uuid/makefile
+++ /dev/null
@@ -1,72 +0,0 @@
-#Define bridge streaming lib
-LIB=libuuid.a
-
-# define the C++ compiler to use
-CC=$(CROSS_COMPILE)-gcc
-
-COMPILERFLAGS = -O0 -ggdb -g3 -fexceptions -Wno-write-strings -fvisibility=hidden -fPIC
-
-# define any compile-time flags
-CFLAGS= -g -Wall -rdynamic  $(COMPILERFLAGS)
-
-# define any directories containing header files other than /usr/include
-#
-INCLUDES=-I..
-
-# define library paths in addition to /usr/lib
-#   if I wanted to include libraries not in /usr/lib I'd specify
-#   their path using -Lpath, something like:
-LFLAGS=
-
-# define any libraries to link into executable:
-#   if I want to link in libraries (libx.so or libx.a) I use the -llibname 
-#   option, something like (this will link in libmylib.so and libm.so:
-LIBS=-lpthread
-
-# define the CPP source files
-SRCS=clear.c  compare.c  copy.c  gen_uuid.c  isnull.c  pack.c  parse.c  unpack.c  unparse.c  m_uuidime.c
-
-# define the C object files 
-#
-# This uses Suffix Replacement within a macro:
-#   $(name:string1=string2)
-#         For each word in 'name' replace 'string1' with 'string2'
-# Below we are replacing the suffix .c of all words in the macro SRCS
-# with the .o suffix
-#
-OBJS=$(SRCS:.c=.o)
-
-#
-# The following part of the makefile is generic; it can be used to 
-# build any executable just by changing the definitions above and by
-# deleting dependencies appended to the file from 'make depend'
-#
-
-.PHONY: depend clean
-
-all:    $(LIB) tests
-
-#create static library
-$(LIB): $(OBJS) 
-		rm -f  $(LIB)
-		$(CROSS_COMPILE)-ar -cvq $(LIB) $(OBJS) 	
-
-# this is a suffix replacement rule for building .o's from .cpp's
-# it uses automatic variables $<: the name of the prerequisite of
-# the rule(a .cpp file) and $@: the name of the target of the rule (a .o file) 
-# (see the gnu make manual section about automatic variables)
-.c.o:
-		$(CC) $(CFLAGS) $(INCLUDES) -c $<  -o $@
-
-clean:
-		$(RM) *.o $(LIB)
-		find ./ -iname "*.o" -exec $(RM) {} \;
-
-tests: $(LIB) ./tst_uuid.c
-	$(CC) $(CFLAGS) $(INCLUDES) ./tst_uuid.c  $(LIB) -o ./tst_uuid
-
-depend: $(SRCS)
-		makedepend $(INCLUDES) $^
-
-# DO NOT DELETE THIS LINE -- make depend needs it
-
diff --git a/thirdparty/uuid/pack.c b/thirdparty/uuid/pack.c
deleted file mode 100644
index 1693f05..0000000
--- a/thirdparty/uuid/pack.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Internal routine for packing UUID's
- *
- * Copyright (C) 1996, 1997 Theodore Ts'o.
- *
- * %Begin-Header%
- * 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, and the entire permission notice in its entirety,
- *    including the disclaimer of warranties.
- * 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 of the author may not 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, ALL OF
- * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- * %End-Header%
- */
-
-#include "config.h"
-#include <string.h>
-#include "uuidP.h"
-
-void uuid_pack(const struct uuid *uu, UUID_FIELD ptr)
-{
-	uint32_t	tmp;
-	unsigned char	*out = ptr;
-
-	tmp = uu->time_low;
-	out[3] = (unsigned char) tmp;
-	tmp >>= 8;
-	out[2] = (unsigned char) tmp;
-	tmp >>= 8;
-	out[1] = (unsigned char) tmp;
-	tmp >>= 8;
-	out[0] = (unsigned char) tmp;
-
-	tmp = uu->time_mid;
-	out[5] = (unsigned char) tmp;
-	tmp >>= 8;
-	out[4] = (unsigned char) tmp;
-
-	tmp = uu->time_hi_and_version;
-	out[7] = (unsigned char) tmp;
-	tmp >>= 8;
-	out[6] = (unsigned char) tmp;
-
-	tmp = uu->clock_seq;
-	out[9] = (unsigned char) tmp;
-	tmp >>= 8;
-	out[8] = (unsigned char) tmp;
-
-	memcpy(out+10, uu->node, 6);
-}
-
diff --git a/thirdparty/uuid/parse.c b/thirdparty/uuid/parse.c
deleted file mode 100644
index fdf76e0..0000000
--- a/thirdparty/uuid/parse.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * parse.c --- UUID parsing
- *
- * Copyright (C) 1996, 1997 Theodore Ts'o.
- *
- * %Begin-Header%
- * 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, and the entire permission notice in its entirety,
- *    including the disclaimer of warranties.
- * 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 of the author may not 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, ALL OF
- * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- * %End-Header%
- */
-
-#include "config.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-
-#include "uuidP.h"
-
-int uuid_parse(const char *in, UUID_FIELD uu)
-{
-	struct uuid	uuid;
-	int 		i;
-	const char	*cp;
-	char		buf[3];
-
-	if (strlen(in) != 36)
-		return -1;
-	for (i=0, cp = in; i <= 36; i++,cp++) {
-		if ((i == 8) || (i == 13) || (i == 18) ||
-		    (i == 23)) {
-			if (*cp == '-')
-				continue;
-			else
-				return -1;
-		}
-		if (i== 36)
-			if (*cp == 0)
-				continue;
-		if (!isxdigit(*cp))
-			return -1;
-	}
-	uuid.time_low = strtoul(in, NULL, 16);
-	uuid.time_mid = strtoul(in+9, NULL, 16);
-	uuid.time_hi_and_version = strtoul(in+14, NULL, 16);
-	uuid.clock_seq = strtoul(in+19, NULL, 16);
-	cp = in+24;
-	buf[2] = 0;
-	for (i=0; i < 6; i++) {
-		buf[0] = *cp++;
-		buf[1] = *cp++;
-		uuid.node[i] = strtoul(buf, NULL, 16);
-	}
-
-	uuid_pack(&uuid, uu);
-	return 0;
-}
diff --git a/thirdparty/uuid/unpack.c b/thirdparty/uuid/unpack.c
deleted file mode 100644
index bea3808..0000000
--- a/thirdparty/uuid/unpack.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Internal routine for unpacking UUID
- *
- * Copyright (C) 1996, 1997 Theodore Ts'o.
- *
- * %Begin-Header%
- * 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, and the entire permission notice in its entirety,
- *    including the disclaimer of warranties.
- * 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 of the author may not 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, ALL OF
- * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- * %End-Header%
- */
-
-#include "config.h"
-#include <string.h>
-#include "uuidP.h"
-
-void uuid_unpack(const UUID_FIELD in, struct uuid *uu)
-{
-	const uint8_t	*ptr = in;
-	uint32_t		tmp;
-
-	tmp = *ptr++;
-	tmp = (tmp << 8) | *ptr++;
-	tmp = (tmp << 8) | *ptr++;
-	tmp = (tmp << 8) | *ptr++;
-	uu->time_low = tmp;
-
-	tmp = *ptr++;
-	tmp = (tmp << 8) | *ptr++;
-	uu->time_mid = tmp;
-
-	tmp = *ptr++;
-	tmp = (tmp << 8) | *ptr++;
-	uu->time_hi_and_version = tmp;
-
-	tmp = *ptr++;
-	tmp = (tmp << 8) | *ptr++;
-	uu->clock_seq = tmp;
-
-	memcpy(uu->node, ptr, 6);
-}
-
diff --git a/thirdparty/uuid/unparse.c b/thirdparty/uuid/unparse.c
deleted file mode 100644
index f695232..0000000
--- a/thirdparty/uuid/unparse.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * unparse.c -- convert a UUID to string
- *
- * Copyright (C) 1996, 1997 Theodore Ts'o.
- *
- * %Begin-Header%
- * 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, and the entire permission notice in its entirety,
- *    including the disclaimer of warranties.
- * 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 of the author may not 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, ALL OF
- * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- * %End-Header%
- */
-
-#include "config.h"
-#include <stdio.h>
-
-#include "uuidP.h"
-
-static const char *fmt_lower =
-	"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x";
-
-static const char *fmt_upper =
-	"%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X";
-
-#ifdef UUID_UNPARSE_DEFAULT_UPPER
-#define FMT_DEFAULT fmt_upper
-#else
-#define FMT_DEFAULT fmt_lower
-#endif
-
-static void uuid_unparse_x(const UUID_FIELD uu, char *out, const char *fmt)
-{
-	struct uuid uuid;
-
-	uuid_unpack(uu, &uuid);
-	sprintf(out, fmt,
-		uuid.time_low, uuid.time_mid, uuid.time_hi_and_version,
-		uuid.clock_seq >> 8, uuid.clock_seq & 0xFF,
-		uuid.node[0], uuid.node[1], uuid.node[2],
-		uuid.node[3], uuid.node[4], uuid.node[5]);
-}
-
-void uuid_unparse_lower(const UUID_FIELD uu, char *out)
-{
-	uuid_unparse_x(uu, out,	fmt_lower);
-}
-
-void uuid_unparse_upper(const UUID_FIELD uu, char *out)
-{
-	uuid_unparse_x(uu, out,	fmt_upper);
-}
-
-void uuid_unparse(const UUID_FIELD uu, char *out)
-{
-	uuid_unparse_x(uu, out, FMT_DEFAULT);
-}
diff --git a/thirdparty/uuid/uuid_time.c b/thirdparty/uuid/uuid_time.c
deleted file mode 100644
index 8061143..0000000
--- a/thirdparty/uuid/uuid_time.c
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * m_uuidime.c --- Interpret the time field from a uuid.  This program
- * 	violates the UUID abstraction barrier by reaching into the guts
- *	of a UUID and interpreting it.
- *
- * Copyright (C) 1998, 1999 Theodore Ts'o.
- *
- * %Begin-Header%
- * 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, and the entire permission notice in its entirety,
- *    including the disclaimer of warranties.
- * 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 of the author may not 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, ALL OF
- * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- * %End-Header%
- */
-
-#include "config.h"
-
-#ifdef _WIN32
-#define _WIN32_WINNT 0x0500
-#include <windows.h>
-#define UUID MYUUID
-#endif
-
-#include <stdio.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <stdlib.h>
-#include <sys/types.h>
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#include <time.h>
-
-#include "uuidP.h"
-
-time_t m_uuidime(const UUID_FIELD uu, struct st_tm_val *ret_tv)
-{
-	struct st_tm_val		tv;
-	struct uuid		uuid;
-	uint32_t		high;
-	uint64_t		clock_reg;
-
-	uuid_unpack(uu, &uuid);
-
-	high = uuid.time_mid | ((uuid.time_hi_and_version & 0xFFF) << 16);
-	clock_reg = uuid.time_low | ((uint64_t) high << 32);
-
-	clock_reg -= (((uint64_t) 0x01B21DD2) << 32) + 0x13814000;
-	tv.tv_sec = clock_reg / 10000000;
-	tv.tv_usec = (clock_reg % 10000000) / 10;
-
-	if (ret_tv)
-		*ret_tv = tv;
-
-	return tv.tv_sec;
-}
-
-int m_uuidype(const UUID_FIELD uu)
-{
-	struct uuid		uuid;
-
-	uuid_unpack(uu, &uuid);
-	return ((uuid.time_hi_and_version >> 12) & 0xF);
-}
-
-int uuid_variant(const UUID_FIELD uu)
-{
-	struct uuid		uuid;
-	int			var;
-
-	uuid_unpack(uu, &uuid);
-	var = uuid.clock_seq;
-
-	if ((var & 0x8000) == 0)
-		return UUID_VARIANT_NCS;
-	if ((var & 0x4000) == 0)
-		return UUID_VARIANT_DCE;
-	if ((var & 0x2000) == 0)
-		return UUID_VARIANT_MICROSOFT;
-	return UUID_VARIANT_OTHER;
-}
-
-#ifdef DEBUG
-static const char *variant_string(int variant)
-{
-	switch (variant) {
-	case UUID_VARIANT_NCS:
-		return "NCS";
-	case UUID_VARIANT_DCE:
-		return "DCE";
-	case UUID_VARIANT_MICROSOFT:
-		return "Microsoft";
-	default:
-		return "Other";
-	}
-}
-
-
-int
-main(int argc, char **argv)
-{
-	UUID_FIELD		buf;
-	time_t		time_reg;
-	struct st_tm_val	tv;
-	int		type, variant;
-
-	if (argc != 2) {
-		fprintf(stderr, "Usage: %s uuid\n", argv[0]);
-		exit(1);
-	}
-	if (uuid_parse(argv[1], buf)) {
-		fprintf(stderr, "Invalid UUID: %s\n", argv[1]);
-		exit(1);
-	}
-	variant = uuid_variant(buf);
-	type = m_uuidype(buf);
-	time_reg = m_uuidime(buf, &tv);
-
-	printf("UUID variant is %d (%s)\n", variant, variant_string(variant));
-	if (variant != UUID_VARIANT_DCE) {
-		printf("Warning: This program only knows how to interpret "
-		       "DCE UUIDs.\n\tThe rest of the output is likely "
-		       "to be incorrect!!\n");
-	}
-	printf("UUID type is %d", type);
-	switch (type) {
-	case 1:
-		printf(" (time based)\n");
-		break;
-	case 2:
-		printf(" (DCE)\n");
-		break;
-	case 3:
-		printf(" (name-based)\n");
-		break;
-	case 4:
-		printf(" (random)\n");
-		break;
-	default:
-		printf("\n");
-	}
-	if (type != 1) {
-		printf("Warning: not a time-based UUID, so UUID time "
-		       "decoding will likely not work!\n");
-	}
-	printf("UUID time is: (%ld, %ld): %s\n", tv.tv_sec, (long)tv.tv_usec,
-	       ctime(&time_reg));
-
-	return 0;
-}
-#endif