+#include "provider.h"
+#endif // DISPATCH_USE_DTRACE || DISPATCH_USE_DTRACE_INTROSPECTION
+
+#if __has_include(<sys/kdebug.h>)
+#include <sys/kdebug.h>
+#ifndef DBG_DISPATCH
+#define DBG_DISPATCH 46
+#endif
+#ifndef KDBG_CODE
+#define KDBG_CODE(...) 0
+#define DBG_FUNC_START 0
+#define DBG_FUNC_END 0
+#endif
+#define DISPATCH_CODE(subclass, code) \
+ KDBG_CODE(DBG_DISPATCH, DISPATCH_TRACE_SUBCLASS_##subclass, code)
+#define DISPATCH_CODE_START(subclass, code) \
+ (DISPATCH_CODE(subclass, code) | DBG_FUNC_START)
+#define DISPATCH_CODE_END(subclass, code) \
+ (DISPATCH_CODE(subclass, code) | DBG_FUNC_END)
+#ifdef ARIADNEDBG_CODE
+#define ARIADNE_ENTER_DISPATCH_MAIN_CODE ARIADNEDBG_CODE(220, 2)
+#else
+#define ARIADNE_ENTER_DISPATCH_MAIN_CODE 0
+#endif
+#if !defined(DISPATCH_USE_VOUCHER_KDEBUG_TRACE) && \
+ (DISPATCH_INTROSPECTION || DISPATCH_PROFILE || DISPATCH_DEBUG)
+#define DISPATCH_USE_VOUCHER_KDEBUG_TRACE 1
+#endif
+
+#define DISPATCH_TRACE_SUBCLASS_DEFAULT 0
+#define DISPATCH_TRACE_SUBCLASS_VOUCHER 1
+#define DISPATCH_TRACE_SUBCLASS_PERF 2
+#define DISPATCH_TRACE_SUBCLASS_MACH_MSG 3
+#define DISPATCH_TRACE_SUBCLASS_PERF_MON 4
+
+#define DISPATCH_PERF_non_leaf_retarget DISPATCH_CODE(PERF, 1)
+#define DISPATCH_PERF_post_activate_retarget DISPATCH_CODE(PERF, 2)
+#define DISPATCH_PERF_post_activate_mutation DISPATCH_CODE(PERF, 3)
+#define DISPATCH_PERF_delayed_registration DISPATCH_CODE(PERF, 4)
+#define DISPATCH_PERF_mutable_target DISPATCH_CODE(PERF, 5)
+#define DISPATCH_PERF_strict_bg_timer DISPATCH_CODE(PERF, 6)
+
+#define DISPATCH_MACH_MSG_hdr_move DISPATCH_CODE(MACH_MSG, 1)
+
+#define DISPATCH_PERF_MON_worker_thread_start DISPATCH_CODE_START(PERF_MON, 1)
+#define DISPATCH_PERF_MON_worker_thread_end DISPATCH_CODE_END(PERF_MON, 1)
+#define DISPATCH_PERF_MON_worker_useless DISPATCH_CODE(PERF_MON, 2)
+
+DISPATCH_ALWAYS_INLINE
+static inline void
+_dispatch_ktrace_impl(uint32_t code, uint64_t a, uint64_t b,
+ uint64_t c, uint64_t d)
+{
+ if (!code) return;
+#ifdef _COMM_PAGE_KDEBUG_ENABLE
+ if (likely(*(volatile uint32_t *)_COMM_PAGE_KDEBUG_ENABLE == 0)) return;
+#endif
+ kdebug_trace(code, a, b, c, d);
+}
+#define _dispatch_cast_to_uint64(e) \
+ __builtin_choose_expr(sizeof(e) > 4, \
+ ((uint64_t)(e)), ((uint64_t)(uintptr_t)(e)))
+#define _dispatch_ktrace(code, a, b, c, d) _dispatch_ktrace_impl(code, \
+ _dispatch_cast_to_uint64(a), _dispatch_cast_to_uint64(b), \
+ _dispatch_cast_to_uint64(c), _dispatch_cast_to_uint64(d))
+
+#else // __has_include(<sys/kdebug.h>)
+#define DISPATCH_CODE(subclass, code) 0
+#define ARIADNE_ENTER_DISPATCH_MAIN_CODE 0
+#define DISPATCH_USE_VOUCHER_KDEBUG_TRACE 0
+#define _dispatch_ktrace(code, a, b, c, d)
+#endif // !__has_include(<sys/kdebug.h>)
+#define _dispatch_ktrace4(code, a, b, c, d) _dispatch_ktrace(code, a, b, c, d)
+#define _dispatch_ktrace3(code, a, b, c) _dispatch_ktrace(code, a, b, c, 0)
+#define _dispatch_ktrace2(code, a, b) _dispatch_ktrace(code, a, b, 0, 0)
+#define _dispatch_ktrace1(code, a) _dispatch_ktrace(code, a, 0, 0, 0)
+#define _dispatch_ktrace0(code) _dispatch_ktrace(code, 0, 0, 0, 0)
+
+#ifndef MACH_MSGH_BITS_VOUCHER_MASK
+#define MACH_MSGH_BITS_VOUCHER_MASK 0x001f0000
+#define MACH_MSGH_BITS_SET_PORTS(remote, local, voucher) \
+ (((remote) & MACH_MSGH_BITS_REMOTE_MASK) | \
+ (((local) << 8) & MACH_MSGH_BITS_LOCAL_MASK) | \
+ (((voucher) << 16) & MACH_MSGH_BITS_VOUCHER_MASK))
+#define MACH_MSGH_BITS_VOUCHER(bits) \
+ (((bits) & MACH_MSGH_BITS_VOUCHER_MASK) >> 16)
+#define MACH_MSGH_BITS_HAS_VOUCHER(bits) \
+ (MACH_MSGH_BITS_VOUCHER(bits) != MACH_MSGH_BITS_ZERO)
+#define msgh_voucher_port msgh_reserved
+#define mach_voucher_t mach_port_t
+#define MACH_VOUCHER_NULL MACH_PORT_NULL
+#define MACH_SEND_INVALID_VOUCHER 0x10000005
+#endif
+
+#ifndef VOUCHER_USE_MACH_VOUCHER
+#if __has_include(<mach/mach_voucher.h>)
+#define VOUCHER_USE_MACH_VOUCHER 1
+#endif
+#endif // VOUCHER_USE_MACH_VOUCHER
+
+#ifndef VOUCHER_USE_EMPTY_MACH_BASE_VOUCHER
+#if RDAR_24272659 // FIXME: <rdar://problem/24272659>
+#define VOUCHER_USE_EMPTY_MACH_BASE_VOUCHER 1
+#else // RDAR_24272659
+#define VOUCHER_USE_EMPTY_MACH_BASE_VOUCHER 0
+#endif // RDAR_24272659
+#endif
+
+#ifndef VOUCHER_USE_PERSONA
+#if VOUCHER_USE_MACH_VOUCHER && defined(BANK_PERSONA_TOKEN) && \
+ TARGET_OS_IOS && !TARGET_OS_SIMULATOR
+#define VOUCHER_USE_PERSONA 1
+#else
+#define VOUCHER_USE_PERSONA 0
+#endif
+#endif // VOUCHER_USE_PERSONA
+
+#if VOUCHER_USE_MACH_VOUCHER
+#undef DISPATCH_USE_IMPORTANCE_ASSERTION
+#define DISPATCH_USE_IMPORTANCE_ASSERTION 0
+#else
+#undef MACH_RCV_VOUCHER
+#define MACH_RCV_VOUCHER 0
+#define VOUCHER_USE_PERSONA 0
+#endif // VOUCHER_USE_MACH_VOUCHER
+
+#define _dispatch_hardware_crash() \
+ __asm__(""); __builtin_trap() // <rdar://problem/17464981>
+
+#define _dispatch_set_crash_log_cause_and_message(ac, msg) ((void)(ac))
+#define _dispatch_set_crash_log_message(msg)
+#define _dispatch_set_crash_log_message_dynamic(msg)
+
+#if HAVE_MACH