diff --git a/crates/csharp/src/AsyncSupport.cs b/crates/csharp/src/AsyncSupport.cs
new file mode 100644
index 000000000..a80ec6e4a
--- /dev/null
+++ b/crates/csharp/src/AsyncSupport.cs
@@ -0,0 +1,9 @@
+/**
+ * Helpers for the async support.
+ */
+
+ public enum CallbackCode
+{
+ Exit = 0,
+ Yield = 1,
+}
diff --git a/crates/csharp/src/FutureCommonSupport.cs b/crates/csharp/src/FutureCommonSupport.cs
new file mode 100644
index 000000000..275dc53ca
--- /dev/null
+++ b/crates/csharp/src/FutureCommonSupport.cs
@@ -0,0 +1,59 @@
+/**
+ * Helpers for future support.
+ */
+
+public readonly struct WaitableStatus (int status)
+{
+ public int State => status & 0xf;
+ public int Count => (int)(status >> 4);
+ public bool IsBlocked => status == -1;
+ public bool IsCompleted => State == 0;
+ public bool IsDropped => State == 1;
+}
+
+public enum EventCode
+{
+ None,
+ Subtask,
+ StreamRead,
+ StreamWrite,
+ FutureRead,
+ FutureWrite,
+ Cancel,
+}
+
+public readonly struct EventWaitable
+{
+ public EventWaitable(EventCode eventCode, int waitable, int code)
+ {
+ Event = eventCode;
+ Waitable = waitable;
+ Status = new WaitableStatus(code);
+ }
+ public readonly EventCode Event;
+ public readonly int Waitable;
+ public readonly int Code;
+
+ public readonly WaitableStatus Status;
+}
+
+public partial class WaitableSet(int handle) : IDisposable
+{
+ public int Handle { get; } = handle;
+
+ void Dispose(bool _disposing)
+ {
+ {{interop_name}}.WaitableSetDrop(Handle);
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ ~WaitableSet()
+ {
+ Dispose(false);
+ }
+}
\ No newline at end of file
diff --git a/crates/csharp/src/FutureReaderSupport.cs b/crates/csharp/src/FutureReaderSupport.cs
new file mode 100644
index 000000000..8def9ad1f
--- /dev/null
+++ b/crates/csharp/src/FutureReaderSupport.cs
@@ -0,0 +1,49 @@
+/**
+ * Helpers for future reader support.
+ */
+
+public abstract class FutureReader(int handle) : IDisposable // : TODO Waitable
+{
+ public int Handle { get; } = handle;
+
+ // TODO: Generate per type for this instrinsic.
+ public Task Read()
+ {
+ // TODO: Generate for the interop name and the namespace.
+
+ var status = new WaitableStatus(ReadInternal());
+ if (status.IsBlocked)
+ {
+ //TODO: store somewhere so we can complete it later.
+ var tcs = new TaskCompletionSource();
+
+ return tcs.Task;
+ }
+ if (status.IsCompleted)
+ {
+ return Task.CompletedTask;
+ }
+
+ throw new NotImplementedException();
+ }
+
+ void Dispose(bool _disposing)
+ {
+ // Free unmanaged resources if any.
+ Drop();
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ ~FutureReader()
+ {
+ Dispose(false);
+ }
+
+ protected abstract int ReadInternal();
+ protected abstract void Drop();
+}
\ No newline at end of file
diff --git a/crates/csharp/src/FutureWriterSupport.cs b/crates/csharp/src/FutureWriterSupport.cs
new file mode 100644
index 000000000..2e81fedcb
--- /dev/null
+++ b/crates/csharp/src/FutureWriterSupport.cs
@@ -0,0 +1,44 @@
+/**
+ * Helpers for future writer support.
+ */
+
+public abstract class FutureWriter(int handle) // : TODO Waitable
+{
+ public int Handle { get; } = handle;
+
+ // TODO: Generate per type for this instrinsic.
+ public Task Write()
+ {
+ // TODO: Generate for the interop name.
+ var status = new WaitableStatus(Write(Handle, IntPtr.Zero));
+ if (status.IsBlocked)
+ {
+ //TODO: store somewhere so we can complete it later.
+ var tcs = new TaskCompletionSource();
+ return tcs.Task;
+ }
+
+ throw new NotImplementedException();
+ }
+
+ protected abstract void Drop();
+
+ void Dispose(bool _disposing)
+ {
+ // Free unmanaged resources if any.
+ Drop();
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ ~FutureWriter()
+ {
+ Dispose(false);
+ }
+
+ protected abstract int Write(int handle, IntPtr buffer);
+}
diff --git a/crates/csharp/src/csproj.rs b/crates/csharp/src/csproj.rs
index ebd6c4276..52661d877 100644
--- a/crates/csharp/src/csproj.rs
+++ b/crates/csharp/src/csproj.rs
@@ -109,11 +109,10 @@ impl CSProjectLLVMBuilder {
csproj.push_str(
&format!(
r#"
-
-
-
-
- "#),
+
+
+
+ "#),
);
fs::write(
@@ -153,8 +152,9 @@ impl CSProjectLLVMBuilder {
}
csproj.push_str(
- r#"
- "#,
+ r#"
+
+"#,
);
fs::write(self.dir.join(format!("{camel}.csproj")), csproj)?;
diff --git a/crates/csharp/src/function.rs b/crates/csharp/src/function.rs
index 55c4fc8e3..dcb9025e0 100644
--- a/crates/csharp/src/function.rs
+++ b/crates/csharp/src/function.rs
@@ -5,7 +5,7 @@ use heck::ToUpperCamelCase;
use std::fmt::Write;
use std::mem;
use std::ops::Deref;
-use wit_bindgen_core::abi::{Bindgen, Bitcast, Instruction};
+use wit_bindgen_core::abi::{self, Bindgen, Bitcast, Instruction};
use wit_bindgen_core::{uwrite, uwriteln, Direction, Ns};
use wit_parser::abi::WasmType;
use wit_parser::{
@@ -32,6 +32,7 @@ pub(crate) struct FunctionBindgen<'a, 'b> {
is_block: bool,
fixed_statments: Vec,
parameter_type: ParameterType,
+ result_type: Option,
}
impl<'a, 'b> FunctionBindgen<'a, 'b> {
@@ -42,6 +43,7 @@ impl<'a, 'b> FunctionBindgen<'a, 'b> {
params: Box<[String]>,
results: Vec,
parameter_type: ParameterType,
+ result_type: Option,
) -> FunctionBindgen<'a, 'b> {
let mut locals = Ns::default();
// Ensure temporary variable names don't clash with parameter names:
@@ -67,6 +69,7 @@ impl<'a, 'b> FunctionBindgen<'a, 'b> {
is_block: false,
fixed_statments: Vec::new(),
parameter_type: parameter_type,
+ result_type: result_type,
}
}
@@ -304,7 +307,13 @@ impl<'a, 'b> FunctionBindgen<'a, 'b> {
let ty = self
.interface_gen
.type_name_with_qualifier(&func.result.unwrap(), true);
- uwriteln!(self.src, "{ty} {ret};");
+ let is_async = InterfaceGenerator::is_async(&func.kind);
+
+ if is_async {
+ uwriteln!(self.src, "Task<{ty}> {ret};");
+ } else {
+ uwriteln!(self.src, "{ty} {ret};");
+ }
let mut cases = Vec::with_capacity(self.results.len());
let mut oks = Vec::with_capacity(self.results.len());
let mut payload_is_void = false;
@@ -371,6 +380,44 @@ impl<'a, 'b> FunctionBindgen<'a, 'b> {
}
ret
}
+
+ fn emit_allocation_for_type(&mut self, results: &[WasmType]) -> String {
+ let address = self.locals.tmp("address");
+ let buffer_size = self.get_size_for_type(results);
+ let align = self.get_align_for_type(results);
+ uwriteln!(self.src, "void* {address} = global::System.Runtime.InteropServices.NativeMemory.AlignedAlloc({buffer_size}, {align});");
+
+ // TODO: Store the address somewhere so we can free it when the task completes.
+ address
+ }
+
+ fn get_size_for_type(&self, results: &[WasmType]) -> usize {
+ match results {
+ [WasmType::I32] => 4,
+ [WasmType::I64] => 8,
+ [WasmType::F32] => 4,
+ [WasmType::F64] => 8,
+ [WasmType::Pointer, WasmType::Length] => 4, // TODO: Wasm64
+ [WasmType::PointerOrI64, WasmType::Length] => 8,
+ _ => {
+ todo!("other types not yet supported");
+ }
+ }
+ }
+
+ fn get_align_for_type(&self, results: &[WasmType]) -> usize {
+ match results {
+ [WasmType::I32] => 4,
+ [WasmType::I64] => 8,
+ [WasmType::F32] => 4,
+ [WasmType::F64] => 8,
+ [WasmType::Pointer, WasmType::Length] => 4, // TODO: Wasm64
+ [WasmType::PointerOrI64, WasmType::Length] => 8,
+ _ => {
+ todo!("other types not yet supported");
+ }
+ }
+ }
}
impl Bindgen for FunctionBindgen<'_, '_> {
@@ -400,22 +447,22 @@ impl Bindgen for FunctionBindgen<'_, '_> {
})),
Instruction::I32Load { offset }
| Instruction::PointerLoad { offset }
- | Instruction::LengthLoad { offset } => results.push(format!("global::System.BitConverter.ToInt32(new global::System.Span((void*)({} + {offset}), 4))",operands[0],offset = offset.size_wasm32())),
- Instruction::I32Load8U { offset } => results.push(format!("new global::System.Span((void*)({} + {offset}), 1)[0]",operands[0],offset = offset.size_wasm32())),
- Instruction::I32Load8S { offset } => results.push(format!("(sbyte)new global::System.Span((void*)({} + {offset}), 1)[0]",operands[0],offset = offset.size_wasm32())),
- Instruction::I32Load16U { offset } => results.push(format!("global::System.BitConverter.ToUInt16(new global::System.Span((void*)({} + {offset}), 2))",operands[0],offset = offset.size_wasm32())),
- Instruction::I32Load16S { offset } => results.push(format!("global::System.BitConverter.ToInt16(new global::System.Span((void*)({} + {offset}), 2))",operands[0],offset = offset.size_wasm32())),
- Instruction::I64Load { offset } => results.push(format!("global::System.BitConverter.ToInt64(new global::System.Span((void*)({} + {offset}), 8))",operands[0],offset = offset.size_wasm32())),
- Instruction::F32Load { offset } => results.push(format!("global::System.BitConverter.ToSingle(new global::System.Span((void*)({} + {offset}), 4))",operands[0],offset = offset.size_wasm32())),
- Instruction::F64Load { offset } => results.push(format!("global::System.BitConverter.ToDouble(new global::System.Span((void*)({} + {offset}), 8))",operands[0],offset = offset.size_wasm32())),
+ | Instruction::LengthLoad { offset } => results.push(format!("global::System.BitConverter.ToInt32(new global::System.Span((byte*){} + {offset}, 4))",operands[0],offset = offset.size_wasm32())),
+ Instruction::I32Load8U { offset } => results.push(format!("new global::System.Span((byte*){} + {offset}, 1)[0]",operands[0],offset = offset.size_wasm32())),
+ Instruction::I32Load8S { offset } => results.push(format!("(sbyte)new global::System.Span((byte*){} + {offset}, 1)[0]",operands[0],offset = offset.size_wasm32())),
+ Instruction::I32Load16U { offset } => results.push(format!("global::System.BitConverter.ToUInt16(new global::System.Span((byte*){} + {offset}, 2))",operands[0],offset = offset.size_wasm32())),
+ Instruction::I32Load16S { offset } => results.push(format!("global::System.BitConverter.ToInt16(new global::System.Span((byte*){} + {offset}, 2))",operands[0],offset = offset.size_wasm32())),
+ Instruction::I64Load { offset } => results.push(format!("global::System.BitConverter.ToInt64(new global::System.Span((byte*){} + {offset}, 8))",operands[0],offset = offset.size_wasm32())),
+ Instruction::F32Load { offset } => results.push(format!("global::System.BitConverter.ToSingle(new global::System.Span((byte*){} + {offset}, 4))",operands[0],offset = offset.size_wasm32())),
+ Instruction::F64Load { offset } => results.push(format!("global::System.BitConverter.ToDouble(new global::System.Span((byte*){} + {offset}, 8))",operands[0],offset = offset.size_wasm32())),
Instruction::I32Store { offset }
| Instruction::PointerStore { offset }
- | Instruction::LengthStore { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((void*)({} + {offset}), 4), {});", operands[1], operands[0],offset = offset.size_wasm32()),
+ | Instruction::LengthStore { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((byte*){} + {offset}, 4), {});", operands[1], operands[0],offset = offset.size_wasm32()),
Instruction::I32Store8 { offset } => uwriteln!(self.src, "*(byte*)({} + {offset}) = (byte){};", operands[1], operands[0],offset = offset.size_wasm32()),
- Instruction::I32Store16 { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((void*)({} + {offset}), 2), (short){});", operands[1], operands[0],offset = offset.size_wasm32()),
- Instruction::I64Store { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((void*)({} + {offset}), 8), unchecked((long){}));", operands[1], operands[0],offset = offset.size_wasm32()),
- Instruction::F32Store { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((void*)({} + {offset}), 4), unchecked((float){}));", operands[1], operands[0],offset = offset.size_wasm32()),
- Instruction::F64Store { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((void*)({} + {offset}), 8), unchecked((double){}));", operands[1], operands[0],offset = offset.size_wasm32()),
+ Instruction::I32Store16 { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((byte*){} + {offset}, 2), (short){});", operands[1], operands[0],offset = offset.size_wasm32()),
+ Instruction::I64Store { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((byte*){} + {offset}, 8), unchecked((long){}));", operands[1], operands[0],offset = offset.size_wasm32()),
+ Instruction::F32Store { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((byte*){} + {offset}, 4), unchecked((float){}));", operands[1], operands[0],offset = offset.size_wasm32()),
+ Instruction::F64Store { offset } => uwriteln!(self.src, "global::System.BitConverter.TryWriteBytes(new global::System.Span((byte*){} + {offset}, 8), unchecked((double){}));", operands[1], operands[0],offset = offset.size_wasm32()),
Instruction::I64FromU64 => results.push(format!("unchecked((long)({}))", operands[0])),
Instruction::I32FromChar => results.push(format!("((int){})", operands[0])),
@@ -956,11 +1003,24 @@ impl Bindgen for FunctionBindgen<'_, '_> {
}
Instruction::CallWasm { sig, .. } => {
+ let is_async = InterfaceGenerator::is_async(self.kind);
+
+ let requires_async_return_buffer_param = is_async && sig.results.len() >= 1;
+ let async_return_buffer = if requires_async_return_buffer_param {
+ let buffer = self.emit_allocation_for_type(&sig.results);
+ uwriteln!(self.src, "//TODO: store somewhere with the TaskCompletionSource, possibly in the state, using Task.AsyncState to retrieve it later.");
+ Some(buffer)
+ } else {
+ None
+ };
+
let assignment = match &sig.results[..] {
[_] => {
let result = self.locals.tmp("result");
let assignment = format!("var {result} = ");
- results.push(result);
+ if !requires_async_return_buffer_param {
+ results.push(result);
+ }
assignment
}
@@ -971,12 +1031,36 @@ impl Bindgen for FunctionBindgen<'_, '_> {
let func_name = self.func_name.to_upper_camel_case();
- let operands = operands.join(", ");
+ // Async functions that return a result need to pass a buffer where the result will later be written.
+ let operands = match async_return_buffer {
+ Some(ref buffer) if operands.is_empty() => buffer.clone(),
+ Some(ref buffer) => format!("{}, {}", operands.join(", "), buffer),
+ None => operands.join(", "),
+ };
+
+ let (_namespace, interface_name) =
+ &CSharp::get_class_name_from_qualified_name(self.interface_gen.name);
+ let interop_name = format!("{}Interop", interface_name.strip_prefix("I").unwrap());
uwriteln!(
self.src,
- "{assignment} {func_name}WasmInterop.wasmImport{func_name}({operands});"
+ "{assignment} {interop_name}.{func_name}WasmInterop.wasmImport{func_name}({operands});"
);
+
+ if let Some(buffer) = async_return_buffer {
+ let result = abi::lift_from_memory(
+ self.interface_gen.resolve,
+ self,
+ buffer.clone(),
+ &self.result_type.unwrap(),
+ );
+ uwriteln!(
+ self.src,
+ "global::System.Runtime.InteropServices.NativeMemory.Free({});",
+ buffer
+ );
+ results.push(result);
+ }
}
Instruction::CallInterface { func, .. } => {
@@ -1003,6 +1087,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
}
}
+ let is_async = InterfaceGenerator::is_async(self.kind);
match self.kind {
FunctionKind::Constructor(id) => {
let target = self.interface_gen.csharp_gen.all_resources[id].export_impl_name();
@@ -1018,7 +1103,13 @@ impl Bindgen for FunctionBindgen<'_, '_> {
};
match func.result {
- None => uwriteln!(self.src, "{target}.{func_name}({oper});"),
+ None => {
+ if is_async{
+ uwriteln!(self.src, "var ret = {target}.{func_name}({oper});");
+ } else {
+ uwriteln!(self.src, "{target}.{func_name}({oper});");
+ }
+ }
Some(_ty) => {
let ret = self.handle_result_call(func, target, func_name, oper);
results.push(ret);
@@ -1027,6 +1118,25 @@ impl Bindgen for FunctionBindgen<'_, '_> {
}
}
+ if is_async {
+ self.interface_gen.csharp_gen.needs_async_support = true;
+ let name = self.func_name.to_upper_camel_case();
+ let ret_param = match func.result {
+ None => "",
+ Some(_ty) => "ret.Result"
+ };
+
+ uwriteln!(self.src, r#"if (ret.IsCompletedSuccessfully)
+ {{
+ {name}TaskReturn({ret_param});
+ return (uint)CallbackCode.Exit;
+ }}
+
+ // TODO: Defer dropping borrowed resources until a result is returned.
+ return (uint)CallbackCode.Yield;
+ "#);
+ }
+
for (_, drop) in &self.resource_drops {
uwriteln!(self.src, "{drop}?.Dispose();");
}
@@ -1243,15 +1353,37 @@ impl Bindgen for FunctionBindgen<'_, '_> {
results.extend(operands.iter().take(*amt).map(|v| v.clone()));
}
- Instruction::AsyncTaskReturn { .. }
- | Instruction::FutureLower { .. }
- | Instruction::FutureLift { .. }
- | Instruction::StreamLower { .. }
+ Instruction::FutureLower { .. } => {
+ let op = &operands[0];
+ self.interface_gen.add_future(self.func_name);
+
+ results.push(format!("{op}.Handle"));
+ }
+
+ Instruction::AsyncTaskReturn { name: _, params: _ } => {
+ uwriteln!(self.src, "// TODO_task_cancel.forget();");
+ }
+
+ Instruction::FutureLift { payload: _, ty: _ } => {
+ // TODO get the prefix for the type
+ let sig_type_name = "Void";
+ uwriteln!(self.src, "var reader = new {}.FutureReader{}({});", self.interface_gen.name, sig_type_name, operands[0]);
+ self.interface_gen.csharp_gen.needs_future_reader_support = true;
+ results.push("reader".to_string());
+
+ self.interface_gen.add_future(self.func_name);
+ self.interface_gen.csharp_gen.needs_future_reader_support = true;
+ }
+
+ Instruction::StreamLower { .. }
| Instruction::StreamLift { .. }
| Instruction::ErrorContextLower { .. }
| Instruction::ErrorContextLift { .. }
| Instruction::DropHandle { .. }
- => todo!(),
+ => {
+ dbg!(inst);
+ todo!()
+ }
}
}
diff --git a/crates/csharp/src/interface.rs b/crates/csharp/src/interface.rs
index fa4464134..9a8c88fe4 100644
--- a/crates/csharp/src/interface.rs
+++ b/crates/csharp/src/interface.rs
@@ -47,9 +47,19 @@ pub(crate) struct InterfaceGenerator<'a> {
pub(crate) resolve: &'a Resolve,
pub(crate) name: &'a str,
pub(crate) direction: Direction,
+ pub(crate) futures: Vec,
}
impl InterfaceGenerator<'_> {
+ pub fn is_async(kind: &FunctionKind) -> bool {
+ matches!(
+ kind,
+ FunctionKind::AsyncFreestanding
+ | FunctionKind::AsyncStatic(_)
+ | FunctionKind::AsyncMethod(_)
+ )
+ }
+
pub(crate) fn define_interface_types(&mut self, id: InterfaceId) {
let mut live = LiveTypes::default();
live.add_interface(self.resolve, id);
@@ -117,6 +127,7 @@ impl InterfaceGenerator<'_> {
// Handles don't require a separate definition beyond what we already define for the corresponding
// resource types.
}
+ TypeDefKind::Future(t) => self.type_future(type_id, typedef_name, t, &type_def.docs),
_ => unreachable!(),
}
}
@@ -161,6 +172,198 @@ impl InterfaceGenerator<'_> {
});
}
+ pub(crate) fn add_futures(&mut self, import_module_name: &str) {
+ if self.futures.is_empty() {
+ return;
+ }
+
+ let (_namespace, interface_name) = &CSharp::get_class_name_from_qualified_name(self.name);
+ let interop_name = format!("{}Interop", interface_name.strip_prefix("I").unwrap());
+
+ for future in &self.futures {
+ let camel_name = future.to_upper_camel_case();
+
+ //TODO: we need these per future type.
+ // Create a hash map..
+ uwrite!(
+ self.csharp_interop_src,
+ r#"
+ [global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "[future-new-0][async]{future}"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute]
+ internal static extern ulong {camel_name}VoidNew();
+ "#
+ );
+
+ // TODO: Move this and other type dependent functions out to another function.
+ uwrite!(
+ self.csharp_interop_src,
+ r#"
+ [global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "[future-cancel-read-0][async]{future}"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute]
+ internal static extern uint {camel_name}CancelRead(int readable);
+ "#
+ );
+
+ uwrite!(
+ self.csharp_interop_src,
+ r#"
+ [global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "[future-cancel-write-0][async]{future}"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute]
+ internal static extern uint {camel_name}CancelWrite(int writeable);
+ "#
+ );
+
+ uwrite!(
+ self.csharp_interop_src,
+ r#"
+ [global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "[future-drop-writeable-0][async]{future}"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute]
+ internal static extern void {camel_name}DropWriteable(int writeable);
+ "#
+ );
+
+ self.csharp_gen
+ .interface_fragments
+ .entry(self.name.to_string())
+ .or_insert_with(|| InterfaceTypeAndFragments::new(false))
+ .interface_fragments
+ .push(InterfaceFragment {
+ csharp_src: format!(r#"
+ public static (FutureReader, FutureWriter) {camel_name}VoidNew()
+ {{
+ var packed = {interop_name}.{camel_name}VoidNew();
+ var readerHandle = (int)(packed & 0xFFFFFFFF);
+ var writerHandle = (int)(packed >> 32);
+
+ return (new FutureReaderVoid(readerHandle), new FutureWriterVoid(writerHandle));
+ }}
+ "#).to_string(),
+ csharp_interop_src: "".to_string(),
+ stub: "".to_string(),
+ });
+
+ self.csharp_gen.needs_future_reader_support = true;
+ self.csharp_gen.needs_future_writer_support = true;
+ }
+
+ uwrite!(
+ self.csharp_interop_src,
+ r#"
+ [global::System.Runtime.InteropServices.DllImportAttribute("$root", EntryPoint = "[waitable-set-new]"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute]
+ internal static extern int WaitableSetNew();
+ "#
+ );
+
+ uwrite!(
+ self.csharp_interop_src,
+ r#"
+ [global::System.Runtime.InteropServices.DllImportAttribute("$root", EntryPoint = "[waitable-join]"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute]
+ internal static extern void WaitableJoin(int waitable, int set);
+ "#
+ );
+
+ uwrite!(
+ self.csharp_interop_src,
+ r#"
+ [global::System.Runtime.InteropServices.DllImportAttribute("$root", EntryPoint = "[waitable-set-wait]"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute]
+ internal static unsafe extern int WaitableSetWait(int waitable, int* waitableHandlePtr);
+ "#
+ );
+
+ uwrite!(
+ self.csharp_interop_src,
+ r#"
+ [global::System.Runtime.InteropServices.DllImportAttribute("$root", EntryPoint = "[waitable-set-drop]"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute]
+ internal static unsafe extern void WaitableSetDrop(int waitable);
+ "#
+ );
+
+ // TODO: for each type:
+ let future_type_name = "Void";
+
+ self.csharp_gen
+ .interface_fragments
+ .entry(self.name.to_string())
+ .or_insert_with(|| InterfaceTypeAndFragments::new(false))
+ .interface_fragments
+ .push(InterfaceFragment {
+ csharp_src: format!(r#"
+ public class FutureReader{future_type_name} : FutureReader
+ {{
+ public FutureReader{future_type_name}(int handle) : base(handle) {{ }}
+
+ protected override int ReadInternal()
+ {{
+ return {interop_name}.FutureRead{future_type_name}(Handle, IntPtr.Zero);
+ }}
+
+ protected override void Drop()
+ {{
+ {interop_name}.FutureDropReader{future_type_name}(Handle);
+ }}
+ }}
+
+ public class FutureWriter{future_type_name} : FutureWriter
+ {{
+ public FutureWriter{future_type_name}(int handle) : base(handle) {{ }}
+
+ protected override int Write(int handle, IntPtr buffer)
+ {{
+ return {interop_name}.FutureWrite{future_type_name}(handle, buffer);
+ }}
+
+ protected override void Drop()
+ {{
+ {interop_name}.FutureDropWriter{future_type_name}(Handle);
+ }}
+ }}
+ "#).to_string(),
+ csharp_interop_src: format!(r#"
+ [global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "[async-lower][future-read-0][async]read-future"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute]
+ internal static unsafe extern int FutureRead{future_type_name}(int readable, IntPtr ptr);
+
+ [global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "[async-lower][future-write-0][async]read-future"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute]
+ internal static unsafe extern int FutureWrite{future_type_name}(int writeable, IntPtr buffer);
+
+ [global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "[future-drop-readable-0][async]read-future"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute]
+ internal static extern void FutureDropReader{future_type_name}(int readable);
+
+ [global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "[future-drop-writable-0][async]read-future"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute]
+ internal static extern void FutureDropWriter{future_type_name}(int readable);
+ "#).to_string(),
+ stub: "".to_string(),
+ });
+
+ self.csharp_gen
+ .interface_fragments
+ .entry(self.name.to_string())
+ .or_insert_with(|| InterfaceTypeAndFragments::new(false))
+ .interface_fragments
+ .push(InterfaceFragment {
+ csharp_src: format!(
+ r#"
+ public static WaitableSet WaitableSetNew()
+ {{
+ var waitable = {interop_name}.WaitableSetNew();
+ return new WaitableSet(waitable);
+ }}
+
+ public static void Join(FutureWriter writer, WaitableSet set)
+ {{
+ {interop_name}.WaitableJoin(writer.Handle, set.Handle);
+ }}
+
+ public unsafe static EventWaitable WaitableSetWait(WaitableSet set)
+ {{
+ int* buffer = stackalloc int[2];
+ var eventCode = (EventCode){interop_name}.WaitableSetWait(set.Handle, buffer);
+ return new EventWaitable(eventCode, buffer[0], buffer[1]);
+ }}
+
+ "#
+ )
+ .to_string(),
+ csharp_interop_src: "".to_string(),
+ stub: "".to_string(),
+ });
+ }
+
pub(crate) fn add_world_fragment(self) {
self.csharp_gen.world_fragments.push(InterfaceFragment {
csharp_src: self.src,
@@ -170,69 +373,80 @@ impl InterfaceGenerator<'_> {
}
pub(crate) fn import(&mut self, import_module_name: &str, func: &Function) {
- let (camel_name, modifiers) = match &func.kind {
+ let camel_name = match &func.kind {
FunctionKind::Freestanding
| FunctionKind::Static(_)
| FunctionKind::AsyncFreestanding
- | FunctionKind::AsyncStatic(_) => (func.item_name().to_upper_camel_case(), "static"),
+ | FunctionKind::AsyncStatic(_) => func.item_name().to_upper_camel_case(),
FunctionKind::Method(_) | FunctionKind::AsyncMethod(_) => {
- (func.item_name().to_upper_camel_case(), "")
+ func.item_name().to_upper_camel_case()
+ }
+ FunctionKind::Constructor(id) => {
+ self.csharp_gen.all_resources[id].name.to_upper_camel_case()
}
- FunctionKind::Constructor(id) => (
- self.csharp_gen.all_resources[id].name.to_upper_camel_case(),
- "",
- ),
};
let access = self.csharp_gen.access_modifier();
- let extra_modifiers = extra_modifiers(func, &camel_name);
+ let modifiers = modifiers(func, &camel_name, Direction::Import);
let interop_camel_name = func.item_name().to_upper_camel_case();
let sig = self.resolve.wasm_signature(AbiVariant::GuestImport, func);
- let wasm_result_type = match &sig.results[..] {
- [] => "void",
+ let is_async = matches!(
+ func.kind,
+ FunctionKind::AsyncFreestanding
+ | FunctionKind::AsyncStatic(_)
+ | FunctionKind::AsyncMethod(_)
+ );
+
+ let mut wasm_result_type = match &sig.results[..] {
+ [] => {
+ if is_async {
+ "uint"
+ } else {
+ "void"
+ }
+ }
[result] => crate::world_generator::wasm_type(*result),
_ => unreachable!(),
};
- let (result_type, results) = if let FunctionKind::Constructor(_) = &func.kind {
- (String::new(), Vec::new())
+ let (result_type, results) = self.func_payload_and_return_type(func);
+
+ let is_async = InterfaceGenerator::is_async(&func.kind);
+
+ let requires_async_return_buffer_param = is_async && !sig.results.is_empty();
+ let sig_unsafe = if requires_async_return_buffer_param {
+ "unsafe "
} else {
- match func.result {
- None => ("void".to_string(), Vec::new()),
- Some(ty) => {
- let (payload, results) = payload_and_results(
- self.resolve,
- ty,
- self.csharp_gen.opts.with_wit_results,
- );
- (
- if let Some(ty) = payload {
- self.csharp_gen.needs_result = true;
- self.type_name_with_qualifier(&ty, true)
- } else {
- "void".to_string()
- },
- results,
- )
+ ""
+ };
+
+ let wasm_params: String = {
+ let param_list = sig
+ .params
+ .iter()
+ .enumerate()
+ .map(|(i, param)| {
+ let ty = crate::world_generator::wasm_type(*param);
+ format!("{ty} p{i}")
+ })
+ .collect::>()
+ .join(", ");
+
+ if requires_async_return_buffer_param {
+ if param_list.is_empty() {
+ "void *taskResultBuffer".to_string()
+ } else {
+ format!("{}, void *taskResultBuffer", param_list)
}
+ } else {
+ param_list
}
};
- let wasm_params = sig
- .params
- .iter()
- .enumerate()
- .map(|(i, param)| {
- let ty = crate::world_generator::wasm_type(*param);
- format!("{ty} p{i}")
- })
- .collect::>()
- .join(", ");
-
let mut funcs: Vec<(String, String)> = Vec::new();
funcs.push(self.gen_import_src(func, &results, ParameterType::ABI));
@@ -251,30 +465,29 @@ impl InterfaceGenerator<'_> {
funcs.push(self.gen_import_src(func, &results, ParameterType::Memory));
}
- let import_name = &func.name;
-
- let target = if let FunctionKind::Freestanding = &func.kind {
- &mut self.csharp_interop_src
+ let import_name = if is_async {
+ wasm_result_type = "uint";
+ format!("[async-lower]{}", func.name)
} else {
- &mut self.src
+ func.name.to_string()
};
uwrite!(
- target,
+ self.csharp_interop_src,
r#"
internal static class {interop_camel_name}WasmInterop
{{
[global::System.Runtime.InteropServices.DllImportAttribute("{import_module_name}", EntryPoint = "{import_name}"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute]
- internal static extern {wasm_result_type} wasmImport{interop_camel_name}({wasm_params});
+ internal static extern {sig_unsafe}{wasm_result_type} wasmImport{interop_camel_name}({wasm_params});
}}
"#
);
for (src, params) in funcs {
uwrite!(
- target,
+ self.src,
r#"
- {access} {extra_modifiers} {modifiers} unsafe {result_type} {camel_name}({params})
+ {access} {modifiers} unsafe {result_type} {camel_name}({params})
{{
{src}
}}
@@ -283,6 +496,73 @@ impl InterfaceGenerator<'_> {
}
}
+ fn func_payload_and_return_type(&mut self, func: &Function) -> (String, Vec) {
+ let return_type = self.func_return_type(func);
+ let results = if let FunctionKind::Constructor(_) = &func.kind {
+ Vec::new()
+ } else {
+ let payload = match func.result {
+ None => Vec::new(),
+ Some(ty) => {
+ let (_payload, results) = payload_and_results(
+ self.resolve,
+ ty,
+ self.csharp_gen.opts.with_wit_results,
+ );
+ results
+ }
+ };
+
+ payload
+ };
+
+ (return_type, results)
+ }
+
+ fn func_return_type(&mut self, func: &Function) -> String {
+ let result_type = if let FunctionKind::Constructor(_) = &func.kind {
+ String::new()
+ } else {
+ let base_type = match func.result {
+ None => "void".to_string(),
+ Some(_ty) => {
+ let result_type = match func.result {
+ None => "void".to_string(),
+ Some(ty) => {
+ let (payload, _results) = payload_and_results(
+ self.resolve,
+ ty,
+ self.csharp_gen.opts.with_wit_results,
+ );
+ if let Some(ty) = payload {
+ self.csharp_gen.needs_result = true;
+ self.type_name_with_qualifier(&ty, true)
+ } else {
+ "void".to_string()
+ }
+ }
+ };
+
+ result_type
+ }
+ };
+
+ let asyncified_type = match &func.kind {
+ FunctionKind::AsyncFreestanding
+ | FunctionKind::AsyncStatic(_)
+ | FunctionKind::AsyncMethod(_) => match func.result {
+ None => "Task".to_string(),
+ Some(_ty) => format!("Task<{}>", base_type),
+ },
+ _ => base_type,
+ };
+
+ asyncified_type
+ };
+
+ result_type
+ }
+
fn gen_import_src(
&mut self,
func: &Function,
@@ -306,6 +586,7 @@ impl InterfaceGenerator<'_> {
.collect(),
results.clone(),
parameter_type,
+ func.result,
);
abi::call(
@@ -340,49 +621,24 @@ impl InterfaceGenerator<'_> {
}
pub(crate) fn export(&mut self, func: &Function, interface_name: Option<&WorldKey>) {
- let (camel_name, modifiers) = match &func.kind {
+ let camel_name = match &func.kind {
FunctionKind::Freestanding
| FunctionKind::Static(_)
| FunctionKind::AsyncFreestanding
- | FunctionKind::AsyncStatic(_) => {
- (func.item_name().to_upper_camel_case(), "static abstract")
- }
+ | FunctionKind::AsyncStatic(_) => func.item_name().to_upper_camel_case(),
FunctionKind::Method(_) | FunctionKind::AsyncMethod(_) => {
- (func.item_name().to_upper_camel_case(), "")
+ func.item_name().to_upper_camel_case()
+ }
+ FunctionKind::Constructor(id) => {
+ self.csharp_gen.all_resources[id].name.to_upper_camel_case()
}
- FunctionKind::Constructor(id) => (
- self.csharp_gen.all_resources[id].name.to_upper_camel_case(),
- "",
- ),
};
- let extra_modifiers = extra_modifiers(func, &camel_name);
+ let modifiers = modifiers(func, &camel_name, Direction::Export);
let sig = self.resolve.wasm_signature(AbiVariant::GuestExport, func);
- let (result_type, results) = if let FunctionKind::Constructor(_) = &func.kind {
- (String::new(), Vec::new())
- } else {
- match func.result {
- None => ("void".to_owned(), Vec::new()),
- Some(ty) => {
- let (payload, results) = payload_and_results(
- self.resolve,
- ty,
- self.csharp_gen.opts.with_wit_results,
- );
- (
- if let Some(ty) = payload {
- self.csharp_gen.needs_result = true;
- self.type_name(&ty)
- } else {
- "void".to_string()
- },
- results,
- )
- }
- }
- };
+ let (result_type, results) = self.func_payload_and_return_type(func);
let mut bindgen = FunctionBindgen::new(
self,
@@ -391,6 +647,14 @@ impl InterfaceGenerator<'_> {
(0..sig.params.len()).map(|i| format!("p{i}")).collect(),
results,
ParameterType::ABI,
+ func.result,
+ );
+
+ let async_ = matches!(
+ func.kind,
+ FunctionKind::AsyncFreestanding
+ | FunctionKind::AsyncStatic(_)
+ | FunctionKind::AsyncMethod(_)
);
abi::call(
@@ -399,7 +663,7 @@ impl InterfaceGenerator<'_> {
LiftLower::LiftArgsLowerResults,
func,
&mut bindgen,
- false,
+ async_,
);
let src = bindgen.src;
@@ -411,10 +675,14 @@ impl InterfaceGenerator<'_> {
.collect::>()
.join(";\n");
- let wasm_result_type = match &sig.results[..] {
- [] => "void",
- [result] => crate::world_generator::wasm_type(*result),
- _ => unreachable!(),
+ let wasm_result_type = if async_ {
+ "uint"
+ } else {
+ match &sig.results[..] {
+ [] => "void",
+ [result] => crate::world_generator::wasm_type(*result),
+ _ => unreachable!(),
+ }
};
let wasm_params = sig
@@ -444,9 +712,17 @@ impl InterfaceGenerator<'_> {
.collect::>()
.join(", ");
- let interop_name = format!("wasmExport{}", func.name.to_upper_camel_case());
+ let wasm_func_name = func.name.clone();
+ let interop_name = format!("wasmExport{}", wasm_func_name.to_upper_camel_case());
let core_module_name = interface_name.map(|s| self.resolve.name_world_key(s));
let export_name = func.legacy_core_export_name(core_module_name.as_deref());
+
+ let export_name = if async_ {
+ format!("[async-lift]{export_name}")
+ } else {
+ export_name.to_string()
+ };
+
let access = self.csharp_gen.access_modifier();
uwrite!(
@@ -479,6 +755,7 @@ impl InterfaceGenerator<'_> {
(0..sig.results.len()).map(|i| format!("p{i}")).collect(),
Vec::new(),
ParameterType::ABI,
+ func.result,
);
abi::post_return(bindgen.interface_gen.resolve, func, &mut bindgen);
@@ -496,10 +773,52 @@ impl InterfaceGenerator<'_> {
);
}
+ if async_ {
+ let import_module_name = &self.resolve.name_world_key(interface_name.unwrap());
+ let (_namespace, interface_name) =
+ &CSharp::get_class_name_from_qualified_name(self.name);
+ let impl_name = format!("{}Impl", interface_name.strip_prefix("I").unwrap());
+
+ uwriteln!(
+ self.csharp_interop_src,
+ r#"
+ [global::System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute(EntryPoint = "[callback][async-lift]{import_module_name}#{wasm_func_name}")]
+ public static int {camel_name}Callback(uint eventRaw, uint waitable, uint code)
+ {{
+ // TODO: decode the parameters
+ return {impl_name}.{camel_name}Callback();
+ }}
+ "#
+ );
+
+ uwriteln!(
+ self.src,
+ r#"
+ public static abstract int {camel_name}Callback();
+ "#
+ );
+
+ // TODO: The task return function can take up to 16 core parameters.
+ let task_return_param = match &sig.results[..] {
+ [] => "",
+ [_result] => &format!("{} result", wasm_result_type),
+ _ => unreachable!(),
+ };
+
+ uwriteln!(
+ self.csharp_interop_src,
+ r#"
+ // TODO: The task return function can take up to 16 core parameters.
+ [global::System.Runtime.InteropServices.DllImportAttribute("[export]{import_module_name}", EntryPoint = "[task-return]{wasm_func_name}"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute]
+ internal static extern void {camel_name}TaskReturn({task_return_param});
+ "#
+ );
+ }
+
if !matches!(&func.kind, FunctionKind::Constructor(_)) {
uwrite!(
self.src,
- r#"{extra_modifiers} {modifiers} {result_type} {camel_name}({params});
+ r#"{modifiers} {result_type} {camel_name}({params});
"#
);
@@ -659,6 +978,17 @@ impl InterfaceGenerator<'_> {
let (Handle::Own(id) | Handle::Borrow(id)) = handle;
self.type_name_with_qualifier(&Type::Id(*id), qualifier)
}
+ TypeDefKind::Future(ty) => {
+ let name = ty
+ .as_ref()
+ .map(|ty| self.type_name_with_qualifier(ty, qualifier))
+ .unwrap_or_else(|| "".to_owned());
+ if name.is_empty() {
+ return "FutureReader".to_owned();
+ } else {
+ return format!("FutureReader<{name}>");
+ }
+ }
_ => {
if let Some(name) = &ty.name {
format!(
@@ -883,26 +1213,7 @@ impl InterfaceGenerator<'_> {
}
fn sig_string(&mut self, func: &Function, qualifier: bool) -> String {
- let result_type = if let FunctionKind::Constructor(_) = &func.kind {
- String::new()
- } else {
- match func.result {
- None => "void".into(),
- Some(ty) => {
- let (payload, _) = payload_and_results(
- self.resolve,
- ty,
- self.csharp_gen.opts.with_wit_results,
- );
- if let Some(ty) = payload {
- self.csharp_gen.needs_result = true;
- self.type_name_with_qualifier(&ty, qualifier)
- } else {
- "void".to_string()
- }
- }
- }
- };
+ let result_type = self.func_return_type(&func);
let params = func
.params
@@ -938,6 +1249,10 @@ impl InterfaceGenerator<'_> {
format!("{access} {modifiers} {result_type} {camel_name}({params})")
}
+
+ pub(crate) fn add_future(&mut self, func_name: &str) {
+ self.futures.push(func_name.to_string());
+ }
}
impl<'a> CoreInterfaceGenerator<'a> for InterfaceGenerator<'a> {
@@ -1202,14 +1517,12 @@ impl<'a> CoreInterfaceGenerator<'a> for InterfaceGenerator<'a> {
.direction = self.direction;
}
- fn type_future(&mut self, id: TypeId, name: &str, ty: &Option, docs: &Docs) {
- _ = (id, name, ty, docs);
- todo!()
+ fn type_future(&mut self, id: TypeId, _name: &str, _ty: &Option, _docs: &Docs) {
+ self.type_name(&Type::Id(id));
}
- fn type_stream(&mut self, id: TypeId, name: &str, ty: &Option, docs: &Docs) {
- _ = (id, name, ty, docs);
- todo!()
+ fn type_stream(&mut self, id: TypeId, _name: &str, _ty: &Option, _docs: &Docs) {
+ self.type_name(&Type::Id(id));
}
}
@@ -1251,17 +1564,41 @@ fn payload_and_results(
(payload, results)
}
-fn extra_modifiers(func: &Function, name: &str) -> &'static str {
- if let FunctionKind::Method(_) = &func.kind {
+fn modifiers(func: &Function, name: &str, direction: Direction) -> String {
+ let new_modifier = match &func.kind {
// Avoid warnings about name clashes.
//
// TODO: add other `object` method names here
- if name == "GetType" {
- return "new";
+ FunctionKind::Method(_) if name == "GetType" => " new",
+ _ => "",
+ };
+
+ let static_modifiers = match &func.kind {
+ FunctionKind::Freestanding
+ | FunctionKind::Static(_)
+ | FunctionKind::AsyncFreestanding
+ | FunctionKind::AsyncStatic(_) => "static",
+ _ => "",
+ };
+
+ let abstract_modifier = if direction == Direction::Export {
+ " abstract"
+ } else {
+ ""
+ };
+
+ let async_modifier = match &func.kind {
+ FunctionKind::AsyncMethod(_)
+ | FunctionKind::AsyncFreestanding
+ | FunctionKind::AsyncStatic(_)
+ if abstract_modifier == "" =>
+ {
+ " async"
}
- }
+ _ => "",
+ };
- ""
+ format!("{static_modifiers}{abstract_modifier}{async_modifier}{new_modifier}")
}
fn int_type(int: Int) -> &'static str {
diff --git a/crates/csharp/src/world_generator.rs b/crates/csharp/src/world_generator.rs
index e8a31fc98..be0c4bd4a 100644
--- a/crates/csharp/src/world_generator.rs
+++ b/crates/csharp/src/world_generator.rs
@@ -32,6 +32,9 @@ pub struct CSharp {
pub(crate) needs_export_return_area: bool,
pub(crate) needs_rep_table: bool,
pub(crate) needs_wit_exception: bool,
+ pub(crate) needs_async_support: bool,
+ pub(crate) needs_future_reader_support: bool,
+ pub(crate) needs_future_writer_support: bool,
pub(crate) interface_fragments: HashMap,
pub(crate) world_fragments: Vec,
pub(crate) sizes: SizeAlign,
@@ -70,6 +73,7 @@ impl CSharp {
resolve,
name,
direction,
+ futures: Vec::new(),
}
}
@@ -112,6 +116,7 @@ impl WorldGenerator for CSharp {
old_resources.extend(new_resources.clone());
gen.csharp_gen.all_resources = old_resources;
+ let import_module_name = &resolve.name_world_key(key);
for (resource, funcs) in by_resource(
resolve.interfaces[id]
.functions
@@ -123,7 +128,6 @@ impl WorldGenerator for CSharp {
gen.start_resource(resource, Some(key));
}
- let import_module_name = &resolve.name_world_key(key);
for func in funcs {
gen.import(import_module_name, func);
}
@@ -136,6 +140,8 @@ impl WorldGenerator for CSharp {
// for anonymous types
gen.define_interface_types(id);
+ gen.add_futures(import_module_name);
+
gen.add_interface_fragment(false);
Ok(())
@@ -214,6 +220,9 @@ impl WorldGenerator for CSharp {
// for anonymous types
gen.define_interface_types(id);
+ let import_module_name = &resolve.name_world_key(key);
+ gen.add_futures(&format!("[export]{import_module_name}"));
+
gen.add_interface_fragment(true);
Ok(())
}
@@ -507,6 +516,37 @@ impl WorldGenerator for CSharp {
src.push_str("}\n");
}
+ if self.needs_async_support {
+ src.push_str("\n");
+ src.push_str(include_str!("AsyncSupport.cs"));
+ }
+
+ if (self.needs_future_reader_support || self.needs_future_writer_support)
+ && self.interface_fragments.len() > 0
+ {
+ let full_name = self.interface_fragments.iter().next().unwrap().0;
+
+ let (namespace, interface_name) =
+ &CSharp::get_class_name_from_qualified_name(full_name);
+ let base_name = interface_name.strip_prefix("I").unwrap();
+ let full_name = format!("{namespace}.{base_name}Interop");
+ src.push_str("\n");
+ src.push_str(
+ &include_str!("FutureCommonSupport.cs")
+ .replace("{{interop_name}}", full_name.as_str()),
+ );
+ }
+
+ if self.needs_future_reader_support {
+ src.push_str("\n");
+ src.push_str(include_str!("FutureReaderSupport.cs"));
+ }
+
+ if self.needs_future_writer_support {
+ src.push_str("\n");
+ src.push_str(include_str!("FutureWriterSupport.cs"));
+ }
+
src.push_str("\n");
src.push_str("}\n");
diff --git a/crates/test/src/csharp.rs b/crates/test/src/csharp.rs
index 0bfeebbbc..d015c41a9 100644
--- a/crates/test/src/csharp.rs
+++ b/crates/test/src/csharp.rs
@@ -36,11 +36,19 @@ impl LanguageMethods for Csharp {
fn should_fail_verify(
&self,
- _name: &str,
- config: &crate::config::WitConfig,
+ name: &str,
+ _config: &crate::config::WitConfig,
_args: &[String],
) -> bool {
- config.async_
+ // TODO: remove this exclusions as support is created
+ matches!(
+ name,
+ "resources-with-streams.wit"
+ | "resources-with-futures.wit"
+ | "futures.wit"
+ | "streams.wit"
+ | "error-context.wit"
+ )
}
fn prepare(&self, runner: &mut Runner<'_>) -> Result<()> {
@@ -89,6 +97,18 @@ impl LanguageMethods for Csharp {
// .arg("/bl") // to diagnose dotnet build problems
.arg("-o")
.arg(&out_wasm);
+
+ let os = match std::env::consts::OS {
+ "windows" => "win",
+ "linux" => std::env::consts::OS,
+ other => todo!("OS {} not supported", other),
+ };
+
+ // TODO: Workaround for no aarch64(arm64 in dotnet parlance) packages on Windows
+ if os == "win" && std::env::consts::ARCH == "aarch64" {
+ cmd.arg("/p:_hostArchitecture=x64");
+ }
+
runner.run_command(&mut cmd)?;
fs::copy(&wasm_filename, &compile.output)?;
diff --git a/crates/test/src/lib.rs b/crates/test/src/lib.rs
index 468eaa309..448cc4263 100644
--- a/crates/test/src/lib.rs
+++ b/crates/test/src/lib.rs
@@ -811,7 +811,12 @@ impl Runner<'_> {
}
wasmparser::Validator::new_with_features(wasmparser::WasmFeatures::all())
.validate_all(&wasm)
- .with_context(|| format!("compiler produced invalid wasm file {output:?}"))?;
+ .with_context(|| {
+ format!(
+ "compiler produced invalid wasm file {output:?} for component {}",
+ component.name
+ )
+ })?;
Ok(output)
}
diff --git a/tests/codegen/futures.wit b/tests/codegen/futures.wit
index e312bc2e4..392727414 100644
--- a/tests/codegen/futures.wit
+++ b/tests/codegen/futures.wit
@@ -3,91 +3,9 @@
package foo:foo;
interface futures {
- future-param: func(x: future);
- future-u8-param: func(x: future);
- future-u16-param: func(x: future);
- future-u32-param: func(x: future);
- future-u64-param: func(x: future);
- future-s8-param: func(x: future);
- future-s16-param: func(x: future);
- future-s32-param: func(x: future);
- future-s64-param: func(x: future);
- future-f32-param: func(x: future);
- future-f64-param: func(x: future);
-
- future-ret: func() -> future;
- future-u8-ret: func() -> future;
- future-u16-ret: func() -> future;
- future-u32-ret: func() -> future;
- future-u64-ret: func() -> future;
- future-s8-ret: func() -> future;
- future-s16-ret: func() -> future;
- future-s32-ret: func() -> future;
- future-s64-ret: func() -> future;
- future-f32-ret: func() -> future;
- future-f64-ret: func() -> future;
-
- future-result-list-string-ret: func() -> future>>;
- future-result-list-list-u8-ret: func() -> future>>>;
- future-list-list-list-u8-ret: func() -> future>>>;
-
- tuple-future: func(x: future>) -> future>;
- string-future-arg: func(a: future);
- string-future-ret: func() -> future;
- tuple-string-future: func(x: future>) -> future>;
- string-future: func(x: future) -> future;
-
- record some-record {
- x: string,
- y: other-record,
- z: future,
- c1: u32,
- c2: u64,
- c3: s32,
- c4: s64,
- }
- record other-record {
- a1: u32,
- a2: u64,
- a3: s32,
- a4: s64,
- b: string,
- c: future,
- }
- record-future: func(x: future) -> future;
- record-future-reverse: func(x: future) -> future;
-
- variant some-variant {
- a(string),
- b,
- c(u32),
- d(future),
- }
- variant other-variant {
- a,
- b(u32),
- c(string),
- }
- variant-future: func(x: future) -> future;
-
- type load-store-all-sizes = future>;
- load-store-everything: func(a: load-store-all-sizes) -> load-store-all-sizes;
+ future-param: async func(x: future);
}
world the-futures {
import futures;
- export futures;
}
diff --git a/tests/runtime-async/async/simple-future/runner.cs b/tests/runtime-async/async/simple-future/runner.cs
new file mode 100644
index 000000000..76d0c9016
--- /dev/null
+++ b/tests/runtime-async/async/simple-future/runner.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Runtime.InteropServices;
+using System.Diagnostics;
+using RunnerWorld.wit.imports.my.test;
+using RunnerWorld;
+
+public class Program
+{
+ public static async Task Main(string[] args)
+ {
+ {
+ var (reader, writer) = II.ReadFutureVoidNew();
+
+ var writeTask = writer.Write();
+ Debug.Assert(!writeTask.IsCompleted);
+
+ var task = II.ReadFuture(reader);
+ Debug.Assert(task.IsCompleted);
+
+ var set = II.WaitableSetNew();
+ II.Join(writer, set);
+
+ var ev = new EventWaitable();
+ var status = II.WaitableSetWait(set);
+ Debug.Assert(status.Event == EventCode.FutureWrite);
+ Debug.Assert(status.Waitable == writer.Handle);
+ Debug.Assert(status.Status.IsCompleted);
+ Debug.Assert(status.Status.Count == 0);
+
+ writer.Dispose();
+ set.Dispose();
+ }
+
+ {
+ var (reader, writer) = II.DropFutureVoidNew();
+
+ var writeTask = writer.Write();
+ Debug.Assert(!writeTask.IsCompleted);
+
+ var task = II.DropFuture(reader);
+ Debug.Assert(task.IsCompleted);
+
+ var set = II.WaitableSetNew();
+ II.Join(writer, set);
+
+ var ev = new EventWaitable();
+ var status = II.WaitableSetWait(set);
+ Debug.Assert(status.Event == EventCode.FutureWrite);
+ Debug.Assert(status.Waitable == writer.Handle);
+ Debug.Assert(status.Status.IsDropped);
+ Debug.Assert(status.Status.Count == 0);
+
+ writer.Dispose();
+ set.Dispose();
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/runtime-async/async/simple-future/test.cs b/tests/runtime-async/async/simple-future/test.cs
new file mode 100644
index 000000000..c1d447bb2
--- /dev/null
+++ b/tests/runtime-async/async/simple-future/test.cs
@@ -0,0 +1,38 @@
+using System.Diagnostics;
+
+namespace TestWorld.wit.exports.my.test
+{
+ public class IImpl : II
+ {
+ public static Task ReadFuture(FutureReader reader)
+ {
+ var task = reader.Read();
+
+ Debug.Assert(task.IsCompleted);
+ // TODO: Should we check the Count?
+
+ reader.Dispose();
+
+ return Task.CompletedTask;
+ }
+
+ public static int ReadFutureCallback()
+ {
+ Debug.Assert(false);
+ return 0;
+ }
+
+ public static Task DropFuture(FutureReader reader)
+ {
+ reader.Dispose();
+ return Task.CompletedTask;
+ }
+
+ public static int DropFutureCallback()
+ {
+ Debug.Assert(false);
+ return 0;
+ }
+
+ }
+}
diff --git a/tests/runtime-async/async/simple-import-params-results/runner.cs b/tests/runtime-async/async/simple-import-params-results/runner.cs
new file mode 100644
index 000000000..1098b9209
--- /dev/null
+++ b/tests/runtime-async/async/simple-import-params-results/runner.cs
@@ -0,0 +1,29 @@
+using System;
+using System.Runtime.InteropServices;
+using System.Diagnostics;
+using RunnerWorld.wit.imports.a.b;
+using System.Text;
+
+public class Program
+{
+ public static async Task Main(string[] args)
+ {
+ var t = II.OneArgument(1);
+ Debug.Assert(t.IsCompletedSuccessfully);
+
+ var tOneResult = II.OneResult();
+ Debug.Assert(tOneResult.IsCompletedSuccessfully);
+ Debug.Assert(tOneResult.Result == 2);
+
+ var tOneArgumentAndResult = II.OneArgumentAndResult(3);
+ Debug.Assert(tOneArgumentAndResult.IsCompletedSuccessfully);
+ Debug.Assert(tOneArgumentAndResult.Result == 4);
+
+ var tTwoArguments = II.TwoArguments(5, 6);
+ Debug.Assert(tTwoArguments.IsCompletedSuccessfully);
+
+ var tTwoArgumentsAndResult = II.TwoArgumentsAndResult(7, 8);
+ Debug.Assert(tTwoArgumentsAndResult.IsCompletedSuccessfully);
+ Debug.Assert(tTwoArgumentsAndResult.Result == 9);
+ }
+}
diff --git a/tests/runtime-async/async/simple-import-params-results/test.cs b/tests/runtime-async/async/simple-import-params-results/test.cs
new file mode 100644
index 000000000..57c0ac905
--- /dev/null
+++ b/tests/runtime-async/async/simple-import-params-results/test.cs
@@ -0,0 +1,37 @@
+using System.Diagnostics;
+using TestWorld.wit.exports.a.b;
+
+namespace TestWorld.wit.exports.a.b
+{
+ public class IImpl : II
+ {
+ public static async Task OneArgument(uint x)
+ {
+ Debug.Assert(x == 1);
+ }
+
+ public static async Task OneResult()
+ {
+ return 2;
+ }
+
+ public static async Task OneArgumentAndResult(uint x)
+ {
+ Debug.Assert(x == 3);
+ return 4;
+ }
+
+ public static async Task TwoArguments(uint x, uint y)
+ {
+ Debug.Assert(x == 5);
+ Debug.Assert(y == 6);
+ }
+
+ public static async Task TwoArgumentsAndResult(uint x, uint y)
+ {
+ Debug.Assert(x == 7);
+ Debug.Assert(y == 8);
+ return 9;
+ }
+ }
+}
diff --git a/wit-bindgen.sln b/wit-bindgen.sln
new file mode 100644
index 000000000..b9c5c0b3f
--- /dev/null
+++ b/wit-bindgen.sln
@@ -0,0 +1,1268 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.5.2.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "target", "target", "{185866E3-F889-713C-3B9B-1F8348842EAC}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "artifacts", "artifacts", "{48E3226E-F0B1-589A-9D38-3EB18BF00425}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csharp", "target\artifacts\csharp\csharp.csproj", "{0AFAC59C-1CDA-6784-9728-6C81ADA2728B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "codegen", "codegen", "{F513CEA4-6298-3741-5E32-50FD198C283D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "csharp", "csharp", "{F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "async-simple-params-results", "target\artifacts\codegen\csharp\async-simple-params-results\async-simple-params-results.csproj", "{1452FCAC-8669-8D5D-BFF7-F7D06CAFFADA}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "demo", "demo", "{5DF826B6-5011-1BD6-D432-CFD73200E8EE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{4F91E8C6-5E05-70F1-0057-44E482DCFCD2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\demo\runner-csharp\bindings\RunnerWorld.csproj", "{B8CC26DE-F529-047A-1617-FDB210639EDB}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{0B10BE8E-4AAC-68DC-A33C-A33FD8B54CAB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\demo\test-csharp\bindings\TestWorld.csproj", "{20658278-75E7-34A5-EE1D-3B2D8F7E2C62}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lists", "lists", "{C5E5B846-FB7E-E480-1348-190C699523C6}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{37CD989D-268C-3366-6ED6-17FF36EA7A8E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\lists\runner-csharp\bindings\RunnerWorld.csproj", "{B5CEEC08-74F8-A211-86C4-18BA25330D88}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{E9949D46-C35B-4ADE-1623-5D672001E7B1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\lists\test-csharp\bindings\TestWorld.csproj", "{6557A001-801A-3707-5EEA-9B9CA66CD550}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "many-arguments", "many-arguments", "{C53FD2D0-6516-1028-F65A-CA6F7DB9FCDD}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{6832EE0C-7020-6BAF-48E1-825BE910CA7A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\many-arguments\runner-csharp\bindings\RunnerWorld.csproj", "{7C0777E0-DD44-E238-508D-20657804BFEA}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{3547B974-432E-E75A-CD0C-0F25EC531C5B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\many-arguments\test-csharp\bindings\TestWorld.csproj", "{4D2A2ECD-EA66-D0D5-30C9-80DD1B11579D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "numbers", "numbers", "{CF1B9BB0-FD82-C498-09E9-48F6BE33B0F0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{E3C0F9DE-BDB7-DEE9-2DC8-AFAAF3DDC53B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\numbers\runner-csharp\bindings\RunnerWorld.csproj", "{4D226192-FB4A-E1B1-8E54-5D957108A21B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{DFB245B2-A096-09F4-FEC3-076726C1964A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\numbers\test-csharp\bindings\TestWorld.csproj", "{39791CF6-BACF-1BB1-20C2-C8FE7859FB80}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "options", "options", "{CCFCD710-F1AE-2336-17C6-1885A4846A28}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{537B66FC-4C80-5B72-82D3-D0271B7681FB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\options\runner-csharp\bindings\RunnerWorld.csproj", "{B77DB325-270C-3E9B-B273-713F4B7ABA62}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{A72EDB07-5A13-6865-B098-B843D7129D2A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\options\test-csharp\bindings\TestWorld.csproj", "{C6C7D216-C08F-7601-346E-680AB6B88ED0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "records", "records", "{E3CC08B8-CB2A-0285-BA96-9A7F96427925}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{46689DAF-9F6D-F6AA-DF85-CF8AF9F5A032}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\records\runner-csharp\bindings\RunnerWorld.csproj", "{CC1ED9EE-8069-632A-1E90-D25EED4E9F73}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{B06C4E72-13A2-45C6-5DE2-59CF7BDF69BF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\records\test-csharp\bindings\TestWorld.csproj", "{2B4F3003-741B-EC4B-1343-FF5E6B53B5B6}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-borrow", "resource-borrow", "{FD18CEEC-B9E3-6ECD-AC0A-E560D9DA8C67}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{F7B21209-40BC-9C10-DF34-CE90400262FF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\resource-borrow\runner-csharp\bindings\RunnerWorld.csproj", "{ABCE67C3-6834-2F58-25AA-D28F5EC30D34}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{C6C7CEBE-D9F9-9D5B-FD65-D9CE988A15FA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\resource-borrow\test-csharp\bindings\TestWorld.csproj", "{E0B7A8F7-8780-380A-A67E-FD0590B53A33}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-import-and-export", "resource-import-and-export", "{4FB9782A-9AC3-4E0A-8EF6-4D703B3D9EBA}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "intermediate-csharp", "intermediate-csharp", "{516533B9-C537-EF0C-9C1A-008493BE1F59}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntermediateWorld", "target\artifacts\resource-import-and-export\intermediate-csharp\bindings\IntermediateWorld.csproj", "{6027281A-6F7D-98BC-FD73-B716DB28A058}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resources", "resources", "{B7BD3A75-28BA-9360-6445-996743F08807}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resources-csharp", "resources-csharp", "{7FD7BE47-F56A-6770-27CA-B2CEB3B6E9AD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourcesWorld", "target\artifacts\resources\resources-csharp\bindings\ResourcesWorld.csproj", "{88CF06A5-4755-4AAE-B804-F069EB2C207F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource_aggregates", "resource_aggregates", "{993A09A2-77BC-827E-B3A4-02A00D8EAFE8}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{CB5FDD3E-4033-7983-A457-C2347824D55E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\resource_aggregates\runner-csharp\bindings\RunnerWorld.csproj", "{8CAFFDB0-F5F6-A37E-37AD-7E285801744A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{03CA324C-43B6-DC1E-686F-FFEC749291D7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\resource_aggregates\test-csharp\bindings\TestWorld.csproj", "{87A1703D-4CAB-B1DC-0EFE-A8CD45C8E012}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource_alias", "resource_alias", "{A224B9CE-FBB5-72AC-7B97-498F1C879F7D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{EE2192B0-2FA8-3B48-C675-2E0F3992164B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\resource_alias\test-csharp\bindings\TestWorld.csproj", "{175EA3FB-9269-34B6-D98D-1D4671CA8983}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource_alias_redux", "resource_alias_redux", "{67EB6727-0FC6-4D29-F50A-8B696F24CC01}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{5B003213-30E3-B0C1-A122-9AEFDF29FD99}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\resource_alias_redux\runner-csharp\bindings\RunnerWorld.csproj", "{4077E3FE-5D0D-36BD-2596-03F99AB0741F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource_borrow_in_record", "resource_borrow_in_record", "{BA513238-0ECB-FFB2-0AB3-09EF6B7A6A82}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{88DB711A-C3DB-1D90-691B-88A3B7453750}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\resource_borrow_in_record\runner-csharp\bindings\RunnerWorld.csproj", "{B7E0F6A7-F75C-4F42-DA63-B3BED5B843B2}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{4D60FA3C-0E30-3002-DBD9-7EAB2837D08D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\resource_borrow_in_record\test-csharp\bindings\TestWorld.csproj", "{E6484D67-74DE-3A1C-937B-E3E6541AFFBB}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource_floats", "resource_floats", "{B8083C4E-1037-FEF2-EBEC-18F45F494CCE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "intermediate-csharp", "intermediate-csharp", "{E8A621F1-E833-6F77-3DFF-2E9C778B3FDC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntermediateWorld", "target\artifacts\resource_floats\intermediate-csharp\bindings\IntermediateWorld.csproj", "{54A653F2-4FDE-CB75-DDB2-0F24C180A199}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource_into_inner", "resource_into_inner", "{95937D52-A7DE-47D6-CA32-872410343D6C}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{1AFF4A1F-9AD8-37AC-C42A-C6C7D8289BED}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\resource_into_inner\test-csharp\bindings\TestWorld.csproj", "{B0B7E960-FFA4-BC99-7B5F-2C70FDB5C889}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource_with_lists", "resource_with_lists", "{8CD8027F-092E-CCC5-7A96-910E2081B858}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-with-lists-csharp", "resource-with-lists-csharp", "{413C0971-57F2-3652-7F76-AF206909A4B0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceWithListsWorld", "target\artifacts\resource_with_lists\resource-with-lists-csharp\bindings\ResourceWithListsWorld.csproj", "{FA8EB7A6-B199-4717-76F9-7833D7FA0587}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "results", "results", "{0E409FE4-D68C-89CD-A377-F6B94EE8A224}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "intermediate-csharp", "intermediate-csharp", "{B5B1741C-25B2-17D9-2A2F-3D87FE4C4333}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntermediateWorld", "target\artifacts\results\intermediate-csharp\bindings\IntermediateWorld.csproj", "{4474AF4E-A61D-0869-577A-F4FB37AA3F6F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "intermediate_with_wit_results-csharp", "intermediate_with_wit_results-csharp", "{2BE3D457-3B94-5769-2A2D-F6E04E44847C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntermediateWorld", "target\artifacts\results\intermediate_with_wit_results-csharp\bindings\IntermediateWorld.csproj", "{23296A66-B1B4-240B-5CA4-CBA1022A78C2}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "simple-import-params-results", "simple-import-params-results", "{4EA8E1B8-624E-1764-418C-7BC6C74E4F7A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{33AF56CE-BD50-C6C7-4FEB-4FB93B9744E7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\simple-import-params-results\runner-csharp\bindings\RunnerWorld.csproj", "{0550CBC4-2338-9FD5-D277-1E77E9357251}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{F0427A8E-7665-54FC-6491-A740768D695D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\simple-import-params-results\test-csharp\bindings\TestWorld.csproj", "{C0FDE9DF-887C-85CA-53FE-C6B2AF02F05D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "strings", "strings", "{56243652-4302-FCBD-28A7-EB0EFD23FD8A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{6EC8D689-219C-1997-FCC3-AFDF04D8A165}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\strings\runner-csharp\bindings\RunnerWorld.csproj", "{B1CFBBE2-8D18-84A4-4AA3-C29684E291A7}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{68F3CC92-4C24-6C95-3508-B0B71230E5A7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\strings\test-csharp\bindings\TestWorld.csproj", "{04BEB0D6-D615-F29C-C040-F99E15E3DA71}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "variants", "variants", "{26CFC9B7-E4C3-D90A-CEA1-FE4153B8FABB}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{52E46177-12EB-0D51-AE15-DC0CCD1AB66B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\variants\runner-csharp\bindings\RunnerWorld.csproj", "{79339DEB-B8F1-D636-7A82-1172C24F2D16}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{35EF0797-FBCE-1217-4DAE-5FDA19476735}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\variants\test-csharp\bindings\TestWorld.csproj", "{6B628034-BA3F-15F3-562F-6498272EFFDB}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "versions", "versions", "{03C30818-63C9-AAD2-E89F-152C41A3EA26}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runner-csharp", "runner-csharp", "{12724914-055D-ABA4-526C-5CF1388E474D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerWorld", "target\artifacts\versions\runner-csharp\bindings\RunnerWorld.csproj", "{429764B7-8A13-9F9C-8328-8CF141920861}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test-csharp", "test-csharp", "{B2E3AF3D-8C48-D851-0C7D-F14EFCF3E33E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWorld", "target\artifacts\versions\test-csharp\bindings\TestWorld.csproj", "{38ACA1FC-FDA0-DD71-ACA9-6A1AB2DE1B1F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "allow-unused.wit", "allow-unused.wit", "{9A761EFC-6B67-AB80-7D4B-BE1179CE2EB2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\allow-unused.wit\bindings\TheWorldWorld.csproj", "{E48C0AB8-7249-0EA9-E9E2-45108449EAF0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "async-simple-params-results.wit", "async-simple-params-results.wit", "{06C7E673-01D0-108D-2EEC-564E2CBDAB3A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\async-simple-params-results.wit\bindings\TheWorldWorld.csproj", "{68D0DEBB-6583-23EE-CB5D-569D2A52787E}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "async-trait-function.wit", "async-trait-function.wit", "{00B917E0-6395-CA44-54F8-79DABCF6858D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\async-trait-function.wit\bindings\TheWorldWorld.csproj", "{A2AD4594-34F6-1B52-706A-5BD54353761D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "char.wit", "char.wit", "{8BF3F716-A3C7-7C86-33A5-825C85289EA7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\char.wit\bindings\TheWorldWorld.csproj", "{BEF44FA5-535B-6433-BF71-B950C3A4D6D9}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "conventions.wit", "conventions.wit", "{FE8D9D35-674E-3595-A130-EF91CEA4BEEF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\conventions.wit\bindings\TheWorldWorld.csproj", "{0A2C92AB-B559-0957-00B3-2988D40A8F1F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "empty.wit", "empty.wit", "{50911366-A704-B102-02F5-AE4DABCF0B5E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\empty.wit\bindings\TheWorldWorld.csproj", "{A0967937-177F-8369-8507-419559771F9D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "enum-has-go-keyword.wit", "enum-has-go-keyword.wit", "{621944B1-86A4-1D8D-2D31-FCDC28FDC3F5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\enum-has-go-keyword.wit\bindings\TheWorldWorld.csproj", "{F943C0C7-44C3-5639-0D82-284C78A67051}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "flags.wit", "flags.wit", "{64D9FD21-4441-FE73-DD57-64F7E51876BC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\flags.wit\bindings\TheWorldWorld.csproj", "{7EB2B30F-63FD-B0CC-CAD5-A7AC290CDF1B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "floats.wit", "floats.wit", "{96E34AA0-FA06-6E51-F756-4A5212F2B651}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\floats.wit\bindings\TheWorldWorld.csproj", "{4C1BA462-5134-EBEF-8485-DE6AE23AD1CE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "fully-qualified-java-address.wit", "fully-qualified-java-address.wit", "{A8EDB1DC-4F11-B534-71AE-03A7AD3253FB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\fully-qualified-java-address.wit\bindings\TheWorldWorld.csproj", "{E4F92444-C647-963E-7CE5-B5E0732826B0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "go_params.wit", "go_params.wit", "{080D8A02-6B4E-63AE-7911-5A02303DE08E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\go_params.wit\bindings\TheWorldWorld.csproj", "{5D1950FC-C854-F35E-2B4B-C1F3F78C2978}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "guest-name.wit", "guest-name.wit", "{A24046F0-272D-7C79-38E0-E922F43C8952}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\guest-name.wit\bindings\TheWorldWorld.csproj", "{15BA5917-B8D4-3779-981C-7F859E9018C2}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "import-and-export-resource-alias.wit", "import-and-export-resource-alias.wit", "{384296FA-B8C9-0E1D-60F3-AD393F3EC7F4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\import-and-export-resource-alias.wit\bindings\TheWorldWorld.csproj", "{6232E88F-6CC8-67EF-3C09-D40A1B920A63}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "import-and-export-resource.wit", "import-and-export-resource.wit", "{A443DA34-2D19-185E-A91A-35651B36A5DC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\import-and-export-resource.wit\bindings\TheWorldWorld.csproj", "{0ADE2D25-CF4E-2661-13CE-9D269739D54A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "import-export-same-func.wit", "import-export-same-func.wit", "{66D3D456-3703-C8E5-976F-EC9ACFFD5BFC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\import-export-same-func.wit\bindings\TheWorldWorld.csproj", "{865AEFC5-D0F3-D914-EB46-C97AEB5ED73D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "import-func.wit", "import-func.wit", "{FDF99FE7-B988-D3A7-4E00-EE9B2148FD9E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\import-func.wit\bindings\TheWorldWorld.csproj", "{DE4121F9-166E-C4BF-591A-8A2D1D680274}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "import_export_func.wit", "import_export_func.wit", "{2F475A77-FAA4-8DD5-3E86-CC44D5C9657C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\import_export_func.wit\bindings\TheWorldWorld.csproj", "{F616F5D4-C8FC-FABB-9E71-D4D1C05F0518}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "integers.wit", "integers.wit", "{D9BE69F2-73D0-B6FD-1AB0-4269DBE378AC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\integers.wit\bindings\TheWorldWorld.csproj", "{B67BA4A2-DFA2-1E77-13A2-A88B5C99B6A7}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "interface-has-go-keyword.wit", "interface-has-go-keyword.wit", "{86E548F1-6325-3F66-13DB-758B2141038A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\interface-has-go-keyword.wit\bindings\TheWorldWorld.csproj", "{15B30AD5-7CC9-2721-F653-40C26D54B681}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue544.wit", "issue544.wit", "{068AC898-B9E8-E58E-8505-827029713779}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue544.wit\bindings\TheWorldWorld.csproj", "{1C219E9A-75EF-F4E1-29DA-576B33D426E8}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue551.wit", "issue551.wit", "{00802252-8C3A-B0C5-FA15-663CDC3FE749}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue551.wit\bindings\TheWorldWorld.csproj", "{6357E9FD-A15A-D94A-7239-F3EC69E0B345}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue569", "issue569", "{59BCC06C-0962-9AB9-E639-FC3326E980E3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue569\bindings\TheWorldWorld.csproj", "{520320B7-7D1B-2B3D-2131-6A4496B4B75F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue573.wit", "issue573.wit", "{3E8E8317-A1D0-BE58-A81A-53D5C2ED44E5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue573.wit\bindings\TheWorldWorld.csproj", "{550DA514-46E7-C696-5AC1-CA6F1C2A7837}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue607.wit", "issue607.wit", "{A179CAF4-C5CE-0A49-8168-3828244BF29C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue607.wit\bindings\TheWorldWorld.csproj", "{13DD3E53-6DB3-ED7A-C0E5-18FBD07D2FF1}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue668.wit", "issue668.wit", "{0CCD2D7C-72B5-B5A4-E94E-54D6D62242E0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue668.wit\bindings\TheWorldWorld.csproj", "{728C4883-0E02-70AB-FEAB-141DF74ECC5A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue929-no-export.wit", "issue929-no-export.wit", "{4C11CFFF-E4A4-FB98-6931-B42CD543742C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue929-no-export.wit\bindings\TheWorldWorld.csproj", "{37B7D531-5CE2-ED55-D09D-8893492A1A32}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue929-no-import.wit", "issue929-no-import.wit", "{9C947B34-E745-E3D9-4270-5E89E206158F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue929-no-import.wit\bindings\TheWorldWorld.csproj", "{BD234F55-5125-C6F6-B68D-365617B4719D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue929-only-methods.wit", "issue929-only-methods.wit", "{A3D9F4BF-2FE0-B008-A8D8-B0BF541C63FA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue929-only-methods.wit\bindings\TheWorldWorld.csproj", "{F0157B24-6924-D8D3-F3F0-BB967C4BFDE7}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issue929.wit", "issue929.wit", "{0331D922-92E3-741B-93C2-C77FFDF6B2A5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\issue929.wit\bindings\TheWorldWorld.csproj", "{DF1B1705-2020-B3F6-6C7C-F3E0DC192671}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "just-export.wit", "just-export.wit", "{06626A3C-8C52-0254-C370-29094150F5C0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\just-export.wit\bindings\TheWorldWorld.csproj", "{79E02FE6-A032-B479-1E24-936D377C44F5}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "keywords-in-interfaces-and-worlds.wit", "keywords-in-interfaces-and-worlds.wit", "{69F84C6F-4ABE-9F2F-4DDA-47EF2ECD4188}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\keywords-in-interfaces-and-worlds.wit\bindings\TheWorldWorld.csproj", "{F17E8DF9-DD14-5D80-1880-F5BEC286459B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "keywords.wit", "keywords.wit", "{85E435B1-910C-A276-6183-46CD7FA08F56}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\keywords.wit\bindings\TheWorldWorld.csproj", "{4974120F-05A5-8DA9-018A-F0A845AE686F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lift-lower-foreign.wit", "lift-lower-foreign.wit", "{E542F7ED-51D4-1836-7F83-14927C90CF0F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\lift-lower-foreign.wit\bindings\TheWorldWorld.csproj", "{ED97C352-F811-500A-18B3-AF55C5E7FB85}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lists.wit", "lists.wit", "{2367D30A-842E-3B41-F549-6D596DF6C5B3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\lists.wit\bindings\TheWorldWorld.csproj", "{216733FD-26CD-6BD8-AC2E-2E639766B8D2}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "many-arguments.wit", "many-arguments.wit", "{E01672ED-6A17-3E56-B917-E9CCC7CE1B5C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\many-arguments.wit\bindings\TheWorldWorld.csproj", "{DD9E2B9F-BF82-2FB6-D0E0-54E1FD8162EB}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "multi-return.wit", "multi-return.wit", "{43123BDD-F8FD-7B05-F1F0-474F6413FC10}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\multi-return.wit\bindings\TheWorldWorld.csproj", "{76409DD3-DAF5-F793-F902-C122D068EA55}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "multiversion", "multiversion", "{87073964-8AC0-1E63-99AD-E86264D0C3A8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\multiversion\bindings\TheWorldWorld.csproj", "{01BA1311-2AA0-FB0F-3B13-53A299A4BEB1}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "option-result.wit", "option-result.wit", "{79FB4107-A744-DE2F-4502-551FD56625B1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\option-result.wit\bindings\TheWorldWorld.csproj", "{3F42290A-0EC6-06CB-3D0D-B313227B89CF}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "record-has-go-keyword-and-used-in-fn.wit", "record-has-go-keyword-and-used-in-fn.wit", "{E8F121BD-EE0C-8C1E-4B9D-6876FDFCE8CB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\record-has-go-keyword-and-used-in-fn.wit\bindings\TheWorldWorld.csproj", "{3E115A52-44C5-D396-737C-6FC3C4403E42}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "records.wit", "records.wit", "{65C18BE2-3FA3-CB8B-D9FC-F6A368BDF925}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\records.wit\bindings\TheWorldWorld.csproj", "{02D562D0-785C-025A-4949-79F94E58E1F0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "rename-interface.wit", "rename-interface.wit", "{5D5A64EF-8F1D-4E55-296A-386F58E02FEB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\rename-interface.wit\bindings\TheWorldWorld.csproj", "{0E775E42-81FE-C541-8612-2542DFC10FFB}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-alias.wit", "resource-alias.wit", "{FDE3A015-C286-C1DA-FCFD-43394B62093D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resource-alias.wit\bindings\TheWorldWorld.csproj", "{CD5D106F-D570-E176-1CDC-7474CB43483C}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-borrow-in-record-export.wit", "resource-borrow-in-record-export.wit", "{1AE621B7-1C0A-568F-E94D-147092A6C16E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resource-borrow-in-record-export.wit\bindings\TheWorldWorld.csproj", "{D044D4D4-6272-7C57-A41F-CE477835050D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-borrow-in-record.wit", "resource-borrow-in-record.wit", "{C1390C80-CDB4-D92A-0755-FD048B00F77C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resource-borrow-in-record.wit\bindings\TheWorldWorld.csproj", "{030E37CE-073F-949A-F61D-881B4412980D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-local-alias-borrow-import.wit", "resource-local-alias-borrow-import.wit", "{D53B0F47-CB95-ED86-7400-3728129DC1A4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resource-local-alias-borrow-import.wit\bindings\TheWorldWorld.csproj", "{154BC784-BB54-6164-16CB-FD9A125C3038}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-local-alias-borrow.wit", "resource-local-alias-borrow.wit", "{88A4248A-7C05-5AFA-105E-12E5CF03EB92}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resource-local-alias-borrow.wit\bindings\TheWorldWorld.csproj", "{B06EA13A-9504-0F8B-F771-F71D86EE15BE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-local-alias.wit", "resource-local-alias.wit", "{89833225-F238-2124-534C-6E4100BFCE30}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resource-local-alias.wit\bindings\TheWorldWorld.csproj", "{566C5AC7-1AD0-6A46-BBB6-0FC28B15B034}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resource-own-in-other-interface.wit", "resource-own-in-other-interface.wit", "{7F8AA199-79F9-D499-BCE5-C8608D636F52}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resource-own-in-other-interface.wit\bindings\TheWorldWorld.csproj", "{2AE34DC1-5982-B6E5-1A66-8E773A07DFFC}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resources-in-aggregates.wit", "resources-in-aggregates.wit", "{357B9DF2-7E42-59C5-3241-D72D3F5B73CE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resources-in-aggregates.wit\bindings\TheWorldWorld.csproj", "{7829564F-3CB7-5E73-3905-2731D4029FF4}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resources-with-lists.wit", "resources-with-lists.wit", "{325E300C-E6A5-B30D-833E-3F5D39AC641D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resources-with-lists.wit\bindings\TheWorldWorld.csproj", "{315CAE46-11E0-9C15-A4A6-A7191B2F4BFC}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resources.wit", "resources.wit", "{B89378DC-63A1-3DFB-90D5-6D4BBCFE5380}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\resources.wit\bindings\TheWorldWorld.csproj", "{2C051497-E6A4-83A9-8D82-464D79589C75}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "result-empty.wit", "result-empty.wit", "{C2A48819-A0D2-828C-7EBF-6544538DDE42}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\result-empty.wit\bindings\TheWorldWorld.csproj", "{3D273C0B-60F4-D20E-30B0-61244D4C5784}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ret-areas.wit", "ret-areas.wit", "{2DCD25E1-20B4-BC1C-FB0A-B63E24DCA9F4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\ret-areas.wit\bindings\TheWorldWorld.csproj", "{CA32CAC9-3748-2B74-4063-EB8C6A3A63C0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "return-resource-from-export.wit", "return-resource-from-export.wit", "{7D7566EE-AC36-04CA-FA33-2A492DD426D5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\return-resource-from-export.wit\bindings\TheWorldWorld.csproj", "{DE8662EC-F0D3-5BB1-2233-BB12DFE355C0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "same-names1.wit", "same-names1.wit", "{6E80EACB-0A12-2F7D-8C65-502D4CA5866E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\same-names1.wit\bindings\TheWorldWorld.csproj", "{09C9074A-60CB-0308-AE90-BF6C83143F48}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "same-names2.wit", "same-names2.wit", "{65B9C57E-6F0B-FF8C-A952-C0E3CD257627}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\same-names2.wit\bindings\TheWorldWorld.csproj", "{319573C5-512C-6703-33C7-F9490BEDE16B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "same-names3.wit", "same-names3.wit", "{AB4FCC4B-7E03-DBBC-E8D0-356F4ED139AB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\same-names3.wit\bindings\TheWorldWorld.csproj", "{D3AECC39-FC5A-BD34-B2DF-769B801FAD60}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "same-names4.wit", "same-names4.wit", "{4319485C-F3D4-2DAA-4D37-9C17041107D7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\same-names4.wit\bindings\TheWorldWorld.csproj", "{84C8629A-B856-B8A8-093E-D1A4C81596D9}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "same-names5.wit", "same-names5.wit", "{3A34323D-BB25-1A14-EB08-19B663AAA9DF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\same-names5.wit\bindings\TheWorldWorld.csproj", "{0D1C9FAC-345A-8A5D-ED74-D50627E73BC3}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "simple-enum.wit", "simple-enum.wit", "{755FB38B-3FAF-A6FF-3771-48AD310AABE7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\simple-enum.wit\bindings\TheWorldWorld.csproj", "{09C1BD8A-3DDC-2DC7-5E79-529A4B861B33}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "simple-functions.wit", "simple-functions.wit", "{630CCDB5-DE32-79EF-13AD-984AAE3EECDE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\simple-functions.wit\bindings\TheWorldWorld.csproj", "{C4A89DA2-F3C6-DEF5-2BB6-1470F32F8AA9}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "simple-http.wit", "simple-http.wit", "{2D05C0FE-225A-4A7C-767A-F0D8165E2019}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\simple-http.wit\bindings\TheWorldWorld.csproj", "{4AD6BA21-3B28-5119-642E-5A4AB589B716}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "simple-lists.wit", "simple-lists.wit", "{03EACC3E-D50F-C3FA-C7F6-08C16405A00B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\simple-lists.wit\bindings\TheWorldWorld.csproj", "{374920CC-E7AA-5A9C-2460-EA88950A909B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "simple-option.wit", "simple-option.wit", "{AA75A989-888D-B14D-6300-9A7E02ED2EAB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\simple-option.wit\bindings\TheWorldWorld.csproj", "{7C82CBEE-C585-C659-CA98-9E423668227C}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "small-anonymous.wit", "small-anonymous.wit", "{C73472D1-CFD4-5C68-4B99-E5B4BB4630BB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\small-anonymous.wit\bindings\TheWorldWorld.csproj", "{5584D3E5-DA59-4CC3-09ED-EB30EEC88565}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "smoke-default.wit", "smoke-default.wit", "{BE9EC5B1-8A28-E14C-E4B4-F3E66C9E889A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\smoke-default.wit\bindings\TheWorldWorld.csproj", "{8F0AFB80-74D1-A528-F09C-A5C48A7DB0AE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "smoke-export.wit", "smoke-export.wit", "{E48BE97D-2C8B-124A-A3DD-DFFD0CCAE704}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\smoke-export.wit\bindings\TheWorldWorld.csproj", "{167F0375-502C-5EE3-461A-9DC8DFBD4B56}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "smoke.wit", "smoke.wit", "{0E7A03F2-6F7F-0E27-553F-0F980A101569}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\smoke.wit\bindings\TheWorldWorld.csproj", "{FCBAA3BA-7479-30B7-EAF4-BF10EF1FC8AA}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "strings.wit", "strings.wit", "{C2689E79-4290-C79C-8876-F7CBBD8A6CB3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\strings.wit\bindings\TheWorldWorld.csproj", "{E3EE641F-7487-58CD-3456-6BA821217EEB}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "unused-import.wit", "unused-import.wit", "{7E66735A-0536-68B4-7545-56E34E920C51}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\unused-import.wit\bindings\TheWorldWorld.csproj", "{F6B2A792-42B6-FBDF-AB06-179CD19093D1}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "use-across-interfaces.wit", "use-across-interfaces.wit", "{73EFD343-138B-48E0-73F1-C226E7EAF37B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\use-across-interfaces.wit\bindings\TheWorldWorld.csproj", "{1A3E63DB-75EA-6569-D917-89B4203A51D9}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "variants-unioning-types.wit", "variants-unioning-types.wit", "{0A0643BD-F61F-B8F2-C10A-D216600647FF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\variants-unioning-types.wit\bindings\TheWorldWorld.csproj", "{BEF506A7-18E9-06C3-8B60-E9C54AE3639D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "variants.wit", "variants.wit", "{8CC7DDDD-EA87-905C-099E-4353711AB883}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\variants.wit\bindings\TheWorldWorld.csproj", "{5D847496-840A-811E-C348-845823CC17FD}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wasi-cli", "wasi-cli", "{1253EC49-3F6F-DDCC-27E7-1D48F381E702}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\wasi-cli\bindings\TheWorldWorld.csproj", "{123D0FB0-42E9-4C6C-DA07-B7FC07684BD3}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wasi-clocks", "wasi-clocks", "{4E118AAF-1874-8714-F42A-8BEAECE0C276}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\wasi-clocks\bindings\TheWorldWorld.csproj", "{DFCDEB8E-730E-D946-9237-97D13C0683A5}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wasi-filesystem", "wasi-filesystem", "{572A021C-D31D-7566-E6D7-0BF983FC3FD8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\wasi-filesystem\bindings\TheWorldWorld.csproj", "{3462643B-8EAF-3B61-FB2B-440E5C8F88F6}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wasi-http", "wasi-http", "{2E144F98-BF78-A3E0-F494-477CF2DDA281}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\wasi-http\bindings\TheWorldWorld.csproj", "{5B918EEB-A1F6-D8E4-32BC-9B0DF8E0A246}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wasi-io", "wasi-io", "{1B31B1CC-7C5D-6F1E-77B6-7468BB812392}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\wasi-io\bindings\TheWorldWorld.csproj", "{4943B4F5-6E6D-4A47-5483-447A518FB124}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "world-has-go-keyword.wit", "world-has-go-keyword.wit", "{FB55E063-D07B-D551-7C94-FC764C5002B2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\world-has-go-keyword.wit\bindings\TheWorldWorld.csproj", "{832C0545-F430-FBF7-E587-664F9E0EF042}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "worlds-with-types.wit", "worlds-with-types.wit", "{C6B103E3-A11C-6605-E5EB-F8BF0D5708C0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\worlds-with-types.wit\bindings\TheWorldWorld.csproj", "{3877E86E-24D8-33A3-DA46-AD1E2496D733}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "zero-size-tuple.wit", "zero-size-tuple.wit", "{53B29166-F1EB-8111-56DE-3AF18E0074DE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheWorldWorld", "target\artifacts\codegen\csharp\zero-size-tuple.wit\bindings\TheWorldWorld.csproj", "{6C75FA73-DEAA-686F-BD75-84B5E87C6006}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {0AFAC59C-1CDA-6784-9728-6C81ADA2728B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0AFAC59C-1CDA-6784-9728-6C81ADA2728B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0AFAC59C-1CDA-6784-9728-6C81ADA2728B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0AFAC59C-1CDA-6784-9728-6C81ADA2728B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1452FCAC-8669-8D5D-BFF7-F7D06CAFFADA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1452FCAC-8669-8D5D-BFF7-F7D06CAFFADA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1452FCAC-8669-8D5D-BFF7-F7D06CAFFADA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1452FCAC-8669-8D5D-BFF7-F7D06CAFFADA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B8CC26DE-F529-047A-1617-FDB210639EDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B8CC26DE-F529-047A-1617-FDB210639EDB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B8CC26DE-F529-047A-1617-FDB210639EDB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B8CC26DE-F529-047A-1617-FDB210639EDB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {20658278-75E7-34A5-EE1D-3B2D8F7E2C62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {20658278-75E7-34A5-EE1D-3B2D8F7E2C62}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {20658278-75E7-34A5-EE1D-3B2D8F7E2C62}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {20658278-75E7-34A5-EE1D-3B2D8F7E2C62}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B5CEEC08-74F8-A211-86C4-18BA25330D88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B5CEEC08-74F8-A211-86C4-18BA25330D88}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B5CEEC08-74F8-A211-86C4-18BA25330D88}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B5CEEC08-74F8-A211-86C4-18BA25330D88}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6557A001-801A-3707-5EEA-9B9CA66CD550}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6557A001-801A-3707-5EEA-9B9CA66CD550}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6557A001-801A-3707-5EEA-9B9CA66CD550}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6557A001-801A-3707-5EEA-9B9CA66CD550}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7C0777E0-DD44-E238-508D-20657804BFEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7C0777E0-DD44-E238-508D-20657804BFEA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7C0777E0-DD44-E238-508D-20657804BFEA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7C0777E0-DD44-E238-508D-20657804BFEA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4D2A2ECD-EA66-D0D5-30C9-80DD1B11579D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4D2A2ECD-EA66-D0D5-30C9-80DD1B11579D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4D2A2ECD-EA66-D0D5-30C9-80DD1B11579D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4D2A2ECD-EA66-D0D5-30C9-80DD1B11579D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4D226192-FB4A-E1B1-8E54-5D957108A21B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4D226192-FB4A-E1B1-8E54-5D957108A21B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4D226192-FB4A-E1B1-8E54-5D957108A21B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4D226192-FB4A-E1B1-8E54-5D957108A21B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {39791CF6-BACF-1BB1-20C2-C8FE7859FB80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {39791CF6-BACF-1BB1-20C2-C8FE7859FB80}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {39791CF6-BACF-1BB1-20C2-C8FE7859FB80}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {39791CF6-BACF-1BB1-20C2-C8FE7859FB80}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B77DB325-270C-3E9B-B273-713F4B7ABA62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B77DB325-270C-3E9B-B273-713F4B7ABA62}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B77DB325-270C-3E9B-B273-713F4B7ABA62}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B77DB325-270C-3E9B-B273-713F4B7ABA62}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C6C7D216-C08F-7601-346E-680AB6B88ED0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C6C7D216-C08F-7601-346E-680AB6B88ED0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C6C7D216-C08F-7601-346E-680AB6B88ED0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C6C7D216-C08F-7601-346E-680AB6B88ED0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CC1ED9EE-8069-632A-1E90-D25EED4E9F73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CC1ED9EE-8069-632A-1E90-D25EED4E9F73}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CC1ED9EE-8069-632A-1E90-D25EED4E9F73}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CC1ED9EE-8069-632A-1E90-D25EED4E9F73}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2B4F3003-741B-EC4B-1343-FF5E6B53B5B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2B4F3003-741B-EC4B-1343-FF5E6B53B5B6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2B4F3003-741B-EC4B-1343-FF5E6B53B5B6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2B4F3003-741B-EC4B-1343-FF5E6B53B5B6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {ABCE67C3-6834-2F58-25AA-D28F5EC30D34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {ABCE67C3-6834-2F58-25AA-D28F5EC30D34}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {ABCE67C3-6834-2F58-25AA-D28F5EC30D34}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {ABCE67C3-6834-2F58-25AA-D28F5EC30D34}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E0B7A8F7-8780-380A-A67E-FD0590B53A33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E0B7A8F7-8780-380A-A67E-FD0590B53A33}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E0B7A8F7-8780-380A-A67E-FD0590B53A33}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E0B7A8F7-8780-380A-A67E-FD0590B53A33}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6027281A-6F7D-98BC-FD73-B716DB28A058}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6027281A-6F7D-98BC-FD73-B716DB28A058}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6027281A-6F7D-98BC-FD73-B716DB28A058}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6027281A-6F7D-98BC-FD73-B716DB28A058}.Release|Any CPU.Build.0 = Release|Any CPU
+ {88CF06A5-4755-4AAE-B804-F069EB2C207F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {88CF06A5-4755-4AAE-B804-F069EB2C207F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {88CF06A5-4755-4AAE-B804-F069EB2C207F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {88CF06A5-4755-4AAE-B804-F069EB2C207F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8CAFFDB0-F5F6-A37E-37AD-7E285801744A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8CAFFDB0-F5F6-A37E-37AD-7E285801744A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8CAFFDB0-F5F6-A37E-37AD-7E285801744A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8CAFFDB0-F5F6-A37E-37AD-7E285801744A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {87A1703D-4CAB-B1DC-0EFE-A8CD45C8E012}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {87A1703D-4CAB-B1DC-0EFE-A8CD45C8E012}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {87A1703D-4CAB-B1DC-0EFE-A8CD45C8E012}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {87A1703D-4CAB-B1DC-0EFE-A8CD45C8E012}.Release|Any CPU.Build.0 = Release|Any CPU
+ {175EA3FB-9269-34B6-D98D-1D4671CA8983}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {175EA3FB-9269-34B6-D98D-1D4671CA8983}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {175EA3FB-9269-34B6-D98D-1D4671CA8983}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {175EA3FB-9269-34B6-D98D-1D4671CA8983}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4077E3FE-5D0D-36BD-2596-03F99AB0741F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4077E3FE-5D0D-36BD-2596-03F99AB0741F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4077E3FE-5D0D-36BD-2596-03F99AB0741F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4077E3FE-5D0D-36BD-2596-03F99AB0741F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B7E0F6A7-F75C-4F42-DA63-B3BED5B843B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B7E0F6A7-F75C-4F42-DA63-B3BED5B843B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B7E0F6A7-F75C-4F42-DA63-B3BED5B843B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B7E0F6A7-F75C-4F42-DA63-B3BED5B843B2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E6484D67-74DE-3A1C-937B-E3E6541AFFBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E6484D67-74DE-3A1C-937B-E3E6541AFFBB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E6484D67-74DE-3A1C-937B-E3E6541AFFBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E6484D67-74DE-3A1C-937B-E3E6541AFFBB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {54A653F2-4FDE-CB75-DDB2-0F24C180A199}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {54A653F2-4FDE-CB75-DDB2-0F24C180A199}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {54A653F2-4FDE-CB75-DDB2-0F24C180A199}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {54A653F2-4FDE-CB75-DDB2-0F24C180A199}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B0B7E960-FFA4-BC99-7B5F-2C70FDB5C889}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B0B7E960-FFA4-BC99-7B5F-2C70FDB5C889}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B0B7E960-FFA4-BC99-7B5F-2C70FDB5C889}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B0B7E960-FFA4-BC99-7B5F-2C70FDB5C889}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FA8EB7A6-B199-4717-76F9-7833D7FA0587}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FA8EB7A6-B199-4717-76F9-7833D7FA0587}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FA8EB7A6-B199-4717-76F9-7833D7FA0587}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FA8EB7A6-B199-4717-76F9-7833D7FA0587}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4474AF4E-A61D-0869-577A-F4FB37AA3F6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4474AF4E-A61D-0869-577A-F4FB37AA3F6F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4474AF4E-A61D-0869-577A-F4FB37AA3F6F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4474AF4E-A61D-0869-577A-F4FB37AA3F6F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {23296A66-B1B4-240B-5CA4-CBA1022A78C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {23296A66-B1B4-240B-5CA4-CBA1022A78C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {23296A66-B1B4-240B-5CA4-CBA1022A78C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {23296A66-B1B4-240B-5CA4-CBA1022A78C2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0550CBC4-2338-9FD5-D277-1E77E9357251}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0550CBC4-2338-9FD5-D277-1E77E9357251}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0550CBC4-2338-9FD5-D277-1E77E9357251}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0550CBC4-2338-9FD5-D277-1E77E9357251}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C0FDE9DF-887C-85CA-53FE-C6B2AF02F05D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C0FDE9DF-887C-85CA-53FE-C6B2AF02F05D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C0FDE9DF-887C-85CA-53FE-C6B2AF02F05D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C0FDE9DF-887C-85CA-53FE-C6B2AF02F05D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B1CFBBE2-8D18-84A4-4AA3-C29684E291A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B1CFBBE2-8D18-84A4-4AA3-C29684E291A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B1CFBBE2-8D18-84A4-4AA3-C29684E291A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B1CFBBE2-8D18-84A4-4AA3-C29684E291A7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {04BEB0D6-D615-F29C-C040-F99E15E3DA71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {04BEB0D6-D615-F29C-C040-F99E15E3DA71}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {04BEB0D6-D615-F29C-C040-F99E15E3DA71}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {04BEB0D6-D615-F29C-C040-F99E15E3DA71}.Release|Any CPU.Build.0 = Release|Any CPU
+ {79339DEB-B8F1-D636-7A82-1172C24F2D16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {79339DEB-B8F1-D636-7A82-1172C24F2D16}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {79339DEB-B8F1-D636-7A82-1172C24F2D16}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {79339DEB-B8F1-D636-7A82-1172C24F2D16}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6B628034-BA3F-15F3-562F-6498272EFFDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6B628034-BA3F-15F3-562F-6498272EFFDB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6B628034-BA3F-15F3-562F-6498272EFFDB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6B628034-BA3F-15F3-562F-6498272EFFDB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {429764B7-8A13-9F9C-8328-8CF141920861}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {429764B7-8A13-9F9C-8328-8CF141920861}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {429764B7-8A13-9F9C-8328-8CF141920861}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {429764B7-8A13-9F9C-8328-8CF141920861}.Release|Any CPU.Build.0 = Release|Any CPU
+ {38ACA1FC-FDA0-DD71-ACA9-6A1AB2DE1B1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {38ACA1FC-FDA0-DD71-ACA9-6A1AB2DE1B1F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {38ACA1FC-FDA0-DD71-ACA9-6A1AB2DE1B1F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {38ACA1FC-FDA0-DD71-ACA9-6A1AB2DE1B1F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E48C0AB8-7249-0EA9-E9E2-45108449EAF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E48C0AB8-7249-0EA9-E9E2-45108449EAF0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E48C0AB8-7249-0EA9-E9E2-45108449EAF0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E48C0AB8-7249-0EA9-E9E2-45108449EAF0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {68D0DEBB-6583-23EE-CB5D-569D2A52787E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {68D0DEBB-6583-23EE-CB5D-569D2A52787E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {68D0DEBB-6583-23EE-CB5D-569D2A52787E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {68D0DEBB-6583-23EE-CB5D-569D2A52787E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A2AD4594-34F6-1B52-706A-5BD54353761D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A2AD4594-34F6-1B52-706A-5BD54353761D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A2AD4594-34F6-1B52-706A-5BD54353761D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A2AD4594-34F6-1B52-706A-5BD54353761D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BEF44FA5-535B-6433-BF71-B950C3A4D6D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BEF44FA5-535B-6433-BF71-B950C3A4D6D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BEF44FA5-535B-6433-BF71-B950C3A4D6D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BEF44FA5-535B-6433-BF71-B950C3A4D6D9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0A2C92AB-B559-0957-00B3-2988D40A8F1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0A2C92AB-B559-0957-00B3-2988D40A8F1F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0A2C92AB-B559-0957-00B3-2988D40A8F1F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0A2C92AB-B559-0957-00B3-2988D40A8F1F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A0967937-177F-8369-8507-419559771F9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A0967937-177F-8369-8507-419559771F9D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A0967937-177F-8369-8507-419559771F9D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A0967937-177F-8369-8507-419559771F9D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F943C0C7-44C3-5639-0D82-284C78A67051}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F943C0C7-44C3-5639-0D82-284C78A67051}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F943C0C7-44C3-5639-0D82-284C78A67051}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F943C0C7-44C3-5639-0D82-284C78A67051}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7EB2B30F-63FD-B0CC-CAD5-A7AC290CDF1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7EB2B30F-63FD-B0CC-CAD5-A7AC290CDF1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7EB2B30F-63FD-B0CC-CAD5-A7AC290CDF1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7EB2B30F-63FD-B0CC-CAD5-A7AC290CDF1B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4C1BA462-5134-EBEF-8485-DE6AE23AD1CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4C1BA462-5134-EBEF-8485-DE6AE23AD1CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4C1BA462-5134-EBEF-8485-DE6AE23AD1CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4C1BA462-5134-EBEF-8485-DE6AE23AD1CE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E4F92444-C647-963E-7CE5-B5E0732826B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E4F92444-C647-963E-7CE5-B5E0732826B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E4F92444-C647-963E-7CE5-B5E0732826B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E4F92444-C647-963E-7CE5-B5E0732826B0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5D1950FC-C854-F35E-2B4B-C1F3F78C2978}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5D1950FC-C854-F35E-2B4B-C1F3F78C2978}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5D1950FC-C854-F35E-2B4B-C1F3F78C2978}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5D1950FC-C854-F35E-2B4B-C1F3F78C2978}.Release|Any CPU.Build.0 = Release|Any CPU
+ {15BA5917-B8D4-3779-981C-7F859E9018C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {15BA5917-B8D4-3779-981C-7F859E9018C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {15BA5917-B8D4-3779-981C-7F859E9018C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {15BA5917-B8D4-3779-981C-7F859E9018C2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6232E88F-6CC8-67EF-3C09-D40A1B920A63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6232E88F-6CC8-67EF-3C09-D40A1B920A63}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6232E88F-6CC8-67EF-3C09-D40A1B920A63}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6232E88F-6CC8-67EF-3C09-D40A1B920A63}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0ADE2D25-CF4E-2661-13CE-9D269739D54A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0ADE2D25-CF4E-2661-13CE-9D269739D54A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0ADE2D25-CF4E-2661-13CE-9D269739D54A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0ADE2D25-CF4E-2661-13CE-9D269739D54A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {865AEFC5-D0F3-D914-EB46-C97AEB5ED73D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {865AEFC5-D0F3-D914-EB46-C97AEB5ED73D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {865AEFC5-D0F3-D914-EB46-C97AEB5ED73D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {865AEFC5-D0F3-D914-EB46-C97AEB5ED73D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DE4121F9-166E-C4BF-591A-8A2D1D680274}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DE4121F9-166E-C4BF-591A-8A2D1D680274}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DE4121F9-166E-C4BF-591A-8A2D1D680274}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DE4121F9-166E-C4BF-591A-8A2D1D680274}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F616F5D4-C8FC-FABB-9E71-D4D1C05F0518}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F616F5D4-C8FC-FABB-9E71-D4D1C05F0518}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F616F5D4-C8FC-FABB-9E71-D4D1C05F0518}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F616F5D4-C8FC-FABB-9E71-D4D1C05F0518}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B67BA4A2-DFA2-1E77-13A2-A88B5C99B6A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B67BA4A2-DFA2-1E77-13A2-A88B5C99B6A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B67BA4A2-DFA2-1E77-13A2-A88B5C99B6A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B67BA4A2-DFA2-1E77-13A2-A88B5C99B6A7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {15B30AD5-7CC9-2721-F653-40C26D54B681}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {15B30AD5-7CC9-2721-F653-40C26D54B681}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {15B30AD5-7CC9-2721-F653-40C26D54B681}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {15B30AD5-7CC9-2721-F653-40C26D54B681}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1C219E9A-75EF-F4E1-29DA-576B33D426E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1C219E9A-75EF-F4E1-29DA-576B33D426E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1C219E9A-75EF-F4E1-29DA-576B33D426E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1C219E9A-75EF-F4E1-29DA-576B33D426E8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6357E9FD-A15A-D94A-7239-F3EC69E0B345}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6357E9FD-A15A-D94A-7239-F3EC69E0B345}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6357E9FD-A15A-D94A-7239-F3EC69E0B345}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6357E9FD-A15A-D94A-7239-F3EC69E0B345}.Release|Any CPU.Build.0 = Release|Any CPU
+ {520320B7-7D1B-2B3D-2131-6A4496B4B75F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {520320B7-7D1B-2B3D-2131-6A4496B4B75F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {520320B7-7D1B-2B3D-2131-6A4496B4B75F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {520320B7-7D1B-2B3D-2131-6A4496B4B75F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {550DA514-46E7-C696-5AC1-CA6F1C2A7837}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {550DA514-46E7-C696-5AC1-CA6F1C2A7837}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {550DA514-46E7-C696-5AC1-CA6F1C2A7837}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {550DA514-46E7-C696-5AC1-CA6F1C2A7837}.Release|Any CPU.Build.0 = Release|Any CPU
+ {13DD3E53-6DB3-ED7A-C0E5-18FBD07D2FF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {13DD3E53-6DB3-ED7A-C0E5-18FBD07D2FF1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {13DD3E53-6DB3-ED7A-C0E5-18FBD07D2FF1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {13DD3E53-6DB3-ED7A-C0E5-18FBD07D2FF1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {728C4883-0E02-70AB-FEAB-141DF74ECC5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {728C4883-0E02-70AB-FEAB-141DF74ECC5A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {728C4883-0E02-70AB-FEAB-141DF74ECC5A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {728C4883-0E02-70AB-FEAB-141DF74ECC5A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {37B7D531-5CE2-ED55-D09D-8893492A1A32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {37B7D531-5CE2-ED55-D09D-8893492A1A32}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {37B7D531-5CE2-ED55-D09D-8893492A1A32}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {37B7D531-5CE2-ED55-D09D-8893492A1A32}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BD234F55-5125-C6F6-B68D-365617B4719D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BD234F55-5125-C6F6-B68D-365617B4719D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BD234F55-5125-C6F6-B68D-365617B4719D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BD234F55-5125-C6F6-B68D-365617B4719D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F0157B24-6924-D8D3-F3F0-BB967C4BFDE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F0157B24-6924-D8D3-F3F0-BB967C4BFDE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F0157B24-6924-D8D3-F3F0-BB967C4BFDE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F0157B24-6924-D8D3-F3F0-BB967C4BFDE7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DF1B1705-2020-B3F6-6C7C-F3E0DC192671}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DF1B1705-2020-B3F6-6C7C-F3E0DC192671}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DF1B1705-2020-B3F6-6C7C-F3E0DC192671}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DF1B1705-2020-B3F6-6C7C-F3E0DC192671}.Release|Any CPU.Build.0 = Release|Any CPU
+ {79E02FE6-A032-B479-1E24-936D377C44F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {79E02FE6-A032-B479-1E24-936D377C44F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {79E02FE6-A032-B479-1E24-936D377C44F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {79E02FE6-A032-B479-1E24-936D377C44F5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F17E8DF9-DD14-5D80-1880-F5BEC286459B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F17E8DF9-DD14-5D80-1880-F5BEC286459B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F17E8DF9-DD14-5D80-1880-F5BEC286459B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F17E8DF9-DD14-5D80-1880-F5BEC286459B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4974120F-05A5-8DA9-018A-F0A845AE686F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4974120F-05A5-8DA9-018A-F0A845AE686F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4974120F-05A5-8DA9-018A-F0A845AE686F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4974120F-05A5-8DA9-018A-F0A845AE686F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {ED97C352-F811-500A-18B3-AF55C5E7FB85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {ED97C352-F811-500A-18B3-AF55C5E7FB85}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {ED97C352-F811-500A-18B3-AF55C5E7FB85}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {ED97C352-F811-500A-18B3-AF55C5E7FB85}.Release|Any CPU.Build.0 = Release|Any CPU
+ {216733FD-26CD-6BD8-AC2E-2E639766B8D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {216733FD-26CD-6BD8-AC2E-2E639766B8D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {216733FD-26CD-6BD8-AC2E-2E639766B8D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {216733FD-26CD-6BD8-AC2E-2E639766B8D2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DD9E2B9F-BF82-2FB6-D0E0-54E1FD8162EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DD9E2B9F-BF82-2FB6-D0E0-54E1FD8162EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DD9E2B9F-BF82-2FB6-D0E0-54E1FD8162EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DD9E2B9F-BF82-2FB6-D0E0-54E1FD8162EB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {76409DD3-DAF5-F793-F902-C122D068EA55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {76409DD3-DAF5-F793-F902-C122D068EA55}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {76409DD3-DAF5-F793-F902-C122D068EA55}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {76409DD3-DAF5-F793-F902-C122D068EA55}.Release|Any CPU.Build.0 = Release|Any CPU
+ {01BA1311-2AA0-FB0F-3B13-53A299A4BEB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {01BA1311-2AA0-FB0F-3B13-53A299A4BEB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {01BA1311-2AA0-FB0F-3B13-53A299A4BEB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {01BA1311-2AA0-FB0F-3B13-53A299A4BEB1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3F42290A-0EC6-06CB-3D0D-B313227B89CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3F42290A-0EC6-06CB-3D0D-B313227B89CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3F42290A-0EC6-06CB-3D0D-B313227B89CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3F42290A-0EC6-06CB-3D0D-B313227B89CF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3E115A52-44C5-D396-737C-6FC3C4403E42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3E115A52-44C5-D396-737C-6FC3C4403E42}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3E115A52-44C5-D396-737C-6FC3C4403E42}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3E115A52-44C5-D396-737C-6FC3C4403E42}.Release|Any CPU.Build.0 = Release|Any CPU
+ {02D562D0-785C-025A-4949-79F94E58E1F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {02D562D0-785C-025A-4949-79F94E58E1F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {02D562D0-785C-025A-4949-79F94E58E1F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {02D562D0-785C-025A-4949-79F94E58E1F0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0E775E42-81FE-C541-8612-2542DFC10FFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0E775E42-81FE-C541-8612-2542DFC10FFB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0E775E42-81FE-C541-8612-2542DFC10FFB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0E775E42-81FE-C541-8612-2542DFC10FFB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CD5D106F-D570-E176-1CDC-7474CB43483C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CD5D106F-D570-E176-1CDC-7474CB43483C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CD5D106F-D570-E176-1CDC-7474CB43483C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CD5D106F-D570-E176-1CDC-7474CB43483C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D044D4D4-6272-7C57-A41F-CE477835050D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D044D4D4-6272-7C57-A41F-CE477835050D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D044D4D4-6272-7C57-A41F-CE477835050D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D044D4D4-6272-7C57-A41F-CE477835050D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {030E37CE-073F-949A-F61D-881B4412980D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {030E37CE-073F-949A-F61D-881B4412980D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {030E37CE-073F-949A-F61D-881B4412980D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {030E37CE-073F-949A-F61D-881B4412980D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {154BC784-BB54-6164-16CB-FD9A125C3038}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {154BC784-BB54-6164-16CB-FD9A125C3038}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {154BC784-BB54-6164-16CB-FD9A125C3038}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {154BC784-BB54-6164-16CB-FD9A125C3038}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B06EA13A-9504-0F8B-F771-F71D86EE15BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B06EA13A-9504-0F8B-F771-F71D86EE15BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B06EA13A-9504-0F8B-F771-F71D86EE15BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B06EA13A-9504-0F8B-F771-F71D86EE15BE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {566C5AC7-1AD0-6A46-BBB6-0FC28B15B034}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {566C5AC7-1AD0-6A46-BBB6-0FC28B15B034}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {566C5AC7-1AD0-6A46-BBB6-0FC28B15B034}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {566C5AC7-1AD0-6A46-BBB6-0FC28B15B034}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2AE34DC1-5982-B6E5-1A66-8E773A07DFFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2AE34DC1-5982-B6E5-1A66-8E773A07DFFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2AE34DC1-5982-B6E5-1A66-8E773A07DFFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2AE34DC1-5982-B6E5-1A66-8E773A07DFFC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7829564F-3CB7-5E73-3905-2731D4029FF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7829564F-3CB7-5E73-3905-2731D4029FF4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7829564F-3CB7-5E73-3905-2731D4029FF4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7829564F-3CB7-5E73-3905-2731D4029FF4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {315CAE46-11E0-9C15-A4A6-A7191B2F4BFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {315CAE46-11E0-9C15-A4A6-A7191B2F4BFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {315CAE46-11E0-9C15-A4A6-A7191B2F4BFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {315CAE46-11E0-9C15-A4A6-A7191B2F4BFC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2C051497-E6A4-83A9-8D82-464D79589C75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2C051497-E6A4-83A9-8D82-464D79589C75}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2C051497-E6A4-83A9-8D82-464D79589C75}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2C051497-E6A4-83A9-8D82-464D79589C75}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3D273C0B-60F4-D20E-30B0-61244D4C5784}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3D273C0B-60F4-D20E-30B0-61244D4C5784}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3D273C0B-60F4-D20E-30B0-61244D4C5784}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3D273C0B-60F4-D20E-30B0-61244D4C5784}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CA32CAC9-3748-2B74-4063-EB8C6A3A63C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CA32CAC9-3748-2B74-4063-EB8C6A3A63C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CA32CAC9-3748-2B74-4063-EB8C6A3A63C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CA32CAC9-3748-2B74-4063-EB8C6A3A63C0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DE8662EC-F0D3-5BB1-2233-BB12DFE355C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DE8662EC-F0D3-5BB1-2233-BB12DFE355C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DE8662EC-F0D3-5BB1-2233-BB12DFE355C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DE8662EC-F0D3-5BB1-2233-BB12DFE355C0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {09C9074A-60CB-0308-AE90-BF6C83143F48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {09C9074A-60CB-0308-AE90-BF6C83143F48}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {09C9074A-60CB-0308-AE90-BF6C83143F48}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {09C9074A-60CB-0308-AE90-BF6C83143F48}.Release|Any CPU.Build.0 = Release|Any CPU
+ {319573C5-512C-6703-33C7-F9490BEDE16B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {319573C5-512C-6703-33C7-F9490BEDE16B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {319573C5-512C-6703-33C7-F9490BEDE16B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {319573C5-512C-6703-33C7-F9490BEDE16B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D3AECC39-FC5A-BD34-B2DF-769B801FAD60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D3AECC39-FC5A-BD34-B2DF-769B801FAD60}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D3AECC39-FC5A-BD34-B2DF-769B801FAD60}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D3AECC39-FC5A-BD34-B2DF-769B801FAD60}.Release|Any CPU.Build.0 = Release|Any CPU
+ {84C8629A-B856-B8A8-093E-D1A4C81596D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {84C8629A-B856-B8A8-093E-D1A4C81596D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {84C8629A-B856-B8A8-093E-D1A4C81596D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {84C8629A-B856-B8A8-093E-D1A4C81596D9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0D1C9FAC-345A-8A5D-ED74-D50627E73BC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0D1C9FAC-345A-8A5D-ED74-D50627E73BC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0D1C9FAC-345A-8A5D-ED74-D50627E73BC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0D1C9FAC-345A-8A5D-ED74-D50627E73BC3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {09C1BD8A-3DDC-2DC7-5E79-529A4B861B33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {09C1BD8A-3DDC-2DC7-5E79-529A4B861B33}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {09C1BD8A-3DDC-2DC7-5E79-529A4B861B33}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {09C1BD8A-3DDC-2DC7-5E79-529A4B861B33}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C4A89DA2-F3C6-DEF5-2BB6-1470F32F8AA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C4A89DA2-F3C6-DEF5-2BB6-1470F32F8AA9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C4A89DA2-F3C6-DEF5-2BB6-1470F32F8AA9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C4A89DA2-F3C6-DEF5-2BB6-1470F32F8AA9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4AD6BA21-3B28-5119-642E-5A4AB589B716}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4AD6BA21-3B28-5119-642E-5A4AB589B716}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4AD6BA21-3B28-5119-642E-5A4AB589B716}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4AD6BA21-3B28-5119-642E-5A4AB589B716}.Release|Any CPU.Build.0 = Release|Any CPU
+ {374920CC-E7AA-5A9C-2460-EA88950A909B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {374920CC-E7AA-5A9C-2460-EA88950A909B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {374920CC-E7AA-5A9C-2460-EA88950A909B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {374920CC-E7AA-5A9C-2460-EA88950A909B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7C82CBEE-C585-C659-CA98-9E423668227C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7C82CBEE-C585-C659-CA98-9E423668227C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7C82CBEE-C585-C659-CA98-9E423668227C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7C82CBEE-C585-C659-CA98-9E423668227C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5584D3E5-DA59-4CC3-09ED-EB30EEC88565}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5584D3E5-DA59-4CC3-09ED-EB30EEC88565}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5584D3E5-DA59-4CC3-09ED-EB30EEC88565}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5584D3E5-DA59-4CC3-09ED-EB30EEC88565}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8F0AFB80-74D1-A528-F09C-A5C48A7DB0AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8F0AFB80-74D1-A528-F09C-A5C48A7DB0AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8F0AFB80-74D1-A528-F09C-A5C48A7DB0AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8F0AFB80-74D1-A528-F09C-A5C48A7DB0AE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {167F0375-502C-5EE3-461A-9DC8DFBD4B56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {167F0375-502C-5EE3-461A-9DC8DFBD4B56}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {167F0375-502C-5EE3-461A-9DC8DFBD4B56}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {167F0375-502C-5EE3-461A-9DC8DFBD4B56}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FCBAA3BA-7479-30B7-EAF4-BF10EF1FC8AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FCBAA3BA-7479-30B7-EAF4-BF10EF1FC8AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FCBAA3BA-7479-30B7-EAF4-BF10EF1FC8AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FCBAA3BA-7479-30B7-EAF4-BF10EF1FC8AA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E3EE641F-7487-58CD-3456-6BA821217EEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E3EE641F-7487-58CD-3456-6BA821217EEB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E3EE641F-7487-58CD-3456-6BA821217EEB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E3EE641F-7487-58CD-3456-6BA821217EEB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F6B2A792-42B6-FBDF-AB06-179CD19093D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F6B2A792-42B6-FBDF-AB06-179CD19093D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F6B2A792-42B6-FBDF-AB06-179CD19093D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F6B2A792-42B6-FBDF-AB06-179CD19093D1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1A3E63DB-75EA-6569-D917-89B4203A51D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1A3E63DB-75EA-6569-D917-89B4203A51D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1A3E63DB-75EA-6569-D917-89B4203A51D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1A3E63DB-75EA-6569-D917-89B4203A51D9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BEF506A7-18E9-06C3-8B60-E9C54AE3639D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BEF506A7-18E9-06C3-8B60-E9C54AE3639D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BEF506A7-18E9-06C3-8B60-E9C54AE3639D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BEF506A7-18E9-06C3-8B60-E9C54AE3639D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5D847496-840A-811E-C348-845823CC17FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5D847496-840A-811E-C348-845823CC17FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5D847496-840A-811E-C348-845823CC17FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5D847496-840A-811E-C348-845823CC17FD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {123D0FB0-42E9-4C6C-DA07-B7FC07684BD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {123D0FB0-42E9-4C6C-DA07-B7FC07684BD3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {123D0FB0-42E9-4C6C-DA07-B7FC07684BD3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {123D0FB0-42E9-4C6C-DA07-B7FC07684BD3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DFCDEB8E-730E-D946-9237-97D13C0683A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DFCDEB8E-730E-D946-9237-97D13C0683A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DFCDEB8E-730E-D946-9237-97D13C0683A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DFCDEB8E-730E-D946-9237-97D13C0683A5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3462643B-8EAF-3B61-FB2B-440E5C8F88F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3462643B-8EAF-3B61-FB2B-440E5C8F88F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3462643B-8EAF-3B61-FB2B-440E5C8F88F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3462643B-8EAF-3B61-FB2B-440E5C8F88F6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5B918EEB-A1F6-D8E4-32BC-9B0DF8E0A246}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5B918EEB-A1F6-D8E4-32BC-9B0DF8E0A246}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5B918EEB-A1F6-D8E4-32BC-9B0DF8E0A246}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5B918EEB-A1F6-D8E4-32BC-9B0DF8E0A246}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4943B4F5-6E6D-4A47-5483-447A518FB124}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4943B4F5-6E6D-4A47-5483-447A518FB124}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4943B4F5-6E6D-4A47-5483-447A518FB124}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4943B4F5-6E6D-4A47-5483-447A518FB124}.Release|Any CPU.Build.0 = Release|Any CPU
+ {832C0545-F430-FBF7-E587-664F9E0EF042}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {832C0545-F430-FBF7-E587-664F9E0EF042}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {832C0545-F430-FBF7-E587-664F9E0EF042}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {832C0545-F430-FBF7-E587-664F9E0EF042}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3877E86E-24D8-33A3-DA46-AD1E2496D733}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3877E86E-24D8-33A3-DA46-AD1E2496D733}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3877E86E-24D8-33A3-DA46-AD1E2496D733}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3877E86E-24D8-33A3-DA46-AD1E2496D733}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6C75FA73-DEAA-686F-BD75-84B5E87C6006}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6C75FA73-DEAA-686F-BD75-84B5E87C6006}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6C75FA73-DEAA-686F-BD75-84B5E87C6006}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6C75FA73-DEAA-686F-BD75-84B5E87C6006}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {48E3226E-F0B1-589A-9D38-3EB18BF00425} = {185866E3-F889-713C-3B9B-1F8348842EAC}
+ {0AFAC59C-1CDA-6784-9728-6C81ADA2728B} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {F513CEA4-6298-3741-5E32-50FD198C283D} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762} = {F513CEA4-6298-3741-5E32-50FD198C283D}
+ {1452FCAC-8669-8D5D-BFF7-F7D06CAFFADA} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {5DF826B6-5011-1BD6-D432-CFD73200E8EE} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {4F91E8C6-5E05-70F1-0057-44E482DCFCD2} = {5DF826B6-5011-1BD6-D432-CFD73200E8EE}
+ {B8CC26DE-F529-047A-1617-FDB210639EDB} = {4F91E8C6-5E05-70F1-0057-44E482DCFCD2}
+ {0B10BE8E-4AAC-68DC-A33C-A33FD8B54CAB} = {5DF826B6-5011-1BD6-D432-CFD73200E8EE}
+ {20658278-75E7-34A5-EE1D-3B2D8F7E2C62} = {0B10BE8E-4AAC-68DC-A33C-A33FD8B54CAB}
+ {C5E5B846-FB7E-E480-1348-190C699523C6} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {37CD989D-268C-3366-6ED6-17FF36EA7A8E} = {C5E5B846-FB7E-E480-1348-190C699523C6}
+ {B5CEEC08-74F8-A211-86C4-18BA25330D88} = {37CD989D-268C-3366-6ED6-17FF36EA7A8E}
+ {E9949D46-C35B-4ADE-1623-5D672001E7B1} = {C5E5B846-FB7E-E480-1348-190C699523C6}
+ {6557A001-801A-3707-5EEA-9B9CA66CD550} = {E9949D46-C35B-4ADE-1623-5D672001E7B1}
+ {C53FD2D0-6516-1028-F65A-CA6F7DB9FCDD} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {6832EE0C-7020-6BAF-48E1-825BE910CA7A} = {C53FD2D0-6516-1028-F65A-CA6F7DB9FCDD}
+ {7C0777E0-DD44-E238-508D-20657804BFEA} = {6832EE0C-7020-6BAF-48E1-825BE910CA7A}
+ {3547B974-432E-E75A-CD0C-0F25EC531C5B} = {C53FD2D0-6516-1028-F65A-CA6F7DB9FCDD}
+ {4D2A2ECD-EA66-D0D5-30C9-80DD1B11579D} = {3547B974-432E-E75A-CD0C-0F25EC531C5B}
+ {CF1B9BB0-FD82-C498-09E9-48F6BE33B0F0} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {E3C0F9DE-BDB7-DEE9-2DC8-AFAAF3DDC53B} = {CF1B9BB0-FD82-C498-09E9-48F6BE33B0F0}
+ {4D226192-FB4A-E1B1-8E54-5D957108A21B} = {E3C0F9DE-BDB7-DEE9-2DC8-AFAAF3DDC53B}
+ {DFB245B2-A096-09F4-FEC3-076726C1964A} = {CF1B9BB0-FD82-C498-09E9-48F6BE33B0F0}
+ {39791CF6-BACF-1BB1-20C2-C8FE7859FB80} = {DFB245B2-A096-09F4-FEC3-076726C1964A}
+ {CCFCD710-F1AE-2336-17C6-1885A4846A28} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {537B66FC-4C80-5B72-82D3-D0271B7681FB} = {CCFCD710-F1AE-2336-17C6-1885A4846A28}
+ {B77DB325-270C-3E9B-B273-713F4B7ABA62} = {537B66FC-4C80-5B72-82D3-D0271B7681FB}
+ {A72EDB07-5A13-6865-B098-B843D7129D2A} = {CCFCD710-F1AE-2336-17C6-1885A4846A28}
+ {C6C7D216-C08F-7601-346E-680AB6B88ED0} = {A72EDB07-5A13-6865-B098-B843D7129D2A}
+ {E3CC08B8-CB2A-0285-BA96-9A7F96427925} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {46689DAF-9F6D-F6AA-DF85-CF8AF9F5A032} = {E3CC08B8-CB2A-0285-BA96-9A7F96427925}
+ {CC1ED9EE-8069-632A-1E90-D25EED4E9F73} = {46689DAF-9F6D-F6AA-DF85-CF8AF9F5A032}
+ {B06C4E72-13A2-45C6-5DE2-59CF7BDF69BF} = {E3CC08B8-CB2A-0285-BA96-9A7F96427925}
+ {2B4F3003-741B-EC4B-1343-FF5E6B53B5B6} = {B06C4E72-13A2-45C6-5DE2-59CF7BDF69BF}
+ {FD18CEEC-B9E3-6ECD-AC0A-E560D9DA8C67} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {F7B21209-40BC-9C10-DF34-CE90400262FF} = {FD18CEEC-B9E3-6ECD-AC0A-E560D9DA8C67}
+ {ABCE67C3-6834-2F58-25AA-D28F5EC30D34} = {F7B21209-40BC-9C10-DF34-CE90400262FF}
+ {C6C7CEBE-D9F9-9D5B-FD65-D9CE988A15FA} = {FD18CEEC-B9E3-6ECD-AC0A-E560D9DA8C67}
+ {E0B7A8F7-8780-380A-A67E-FD0590B53A33} = {C6C7CEBE-D9F9-9D5B-FD65-D9CE988A15FA}
+ {4FB9782A-9AC3-4E0A-8EF6-4D703B3D9EBA} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {516533B9-C537-EF0C-9C1A-008493BE1F59} = {4FB9782A-9AC3-4E0A-8EF6-4D703B3D9EBA}
+ {6027281A-6F7D-98BC-FD73-B716DB28A058} = {516533B9-C537-EF0C-9C1A-008493BE1F59}
+ {B7BD3A75-28BA-9360-6445-996743F08807} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {7FD7BE47-F56A-6770-27CA-B2CEB3B6E9AD} = {B7BD3A75-28BA-9360-6445-996743F08807}
+ {88CF06A5-4755-4AAE-B804-F069EB2C207F} = {7FD7BE47-F56A-6770-27CA-B2CEB3B6E9AD}
+ {993A09A2-77BC-827E-B3A4-02A00D8EAFE8} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {CB5FDD3E-4033-7983-A457-C2347824D55E} = {993A09A2-77BC-827E-B3A4-02A00D8EAFE8}
+ {8CAFFDB0-F5F6-A37E-37AD-7E285801744A} = {CB5FDD3E-4033-7983-A457-C2347824D55E}
+ {03CA324C-43B6-DC1E-686F-FFEC749291D7} = {993A09A2-77BC-827E-B3A4-02A00D8EAFE8}
+ {87A1703D-4CAB-B1DC-0EFE-A8CD45C8E012} = {03CA324C-43B6-DC1E-686F-FFEC749291D7}
+ {A224B9CE-FBB5-72AC-7B97-498F1C879F7D} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {EE2192B0-2FA8-3B48-C675-2E0F3992164B} = {A224B9CE-FBB5-72AC-7B97-498F1C879F7D}
+ {175EA3FB-9269-34B6-D98D-1D4671CA8983} = {EE2192B0-2FA8-3B48-C675-2E0F3992164B}
+ {67EB6727-0FC6-4D29-F50A-8B696F24CC01} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {5B003213-30E3-B0C1-A122-9AEFDF29FD99} = {67EB6727-0FC6-4D29-F50A-8B696F24CC01}
+ {4077E3FE-5D0D-36BD-2596-03F99AB0741F} = {5B003213-30E3-B0C1-A122-9AEFDF29FD99}
+ {BA513238-0ECB-FFB2-0AB3-09EF6B7A6A82} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {88DB711A-C3DB-1D90-691B-88A3B7453750} = {BA513238-0ECB-FFB2-0AB3-09EF6B7A6A82}
+ {B7E0F6A7-F75C-4F42-DA63-B3BED5B843B2} = {88DB711A-C3DB-1D90-691B-88A3B7453750}
+ {4D60FA3C-0E30-3002-DBD9-7EAB2837D08D} = {BA513238-0ECB-FFB2-0AB3-09EF6B7A6A82}
+ {E6484D67-74DE-3A1C-937B-E3E6541AFFBB} = {4D60FA3C-0E30-3002-DBD9-7EAB2837D08D}
+ {B8083C4E-1037-FEF2-EBEC-18F45F494CCE} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {E8A621F1-E833-6F77-3DFF-2E9C778B3FDC} = {B8083C4E-1037-FEF2-EBEC-18F45F494CCE}
+ {54A653F2-4FDE-CB75-DDB2-0F24C180A199} = {E8A621F1-E833-6F77-3DFF-2E9C778B3FDC}
+ {95937D52-A7DE-47D6-CA32-872410343D6C} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {1AFF4A1F-9AD8-37AC-C42A-C6C7D8289BED} = {95937D52-A7DE-47D6-CA32-872410343D6C}
+ {B0B7E960-FFA4-BC99-7B5F-2C70FDB5C889} = {1AFF4A1F-9AD8-37AC-C42A-C6C7D8289BED}
+ {8CD8027F-092E-CCC5-7A96-910E2081B858} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {413C0971-57F2-3652-7F76-AF206909A4B0} = {8CD8027F-092E-CCC5-7A96-910E2081B858}
+ {FA8EB7A6-B199-4717-76F9-7833D7FA0587} = {413C0971-57F2-3652-7F76-AF206909A4B0}
+ {0E409FE4-D68C-89CD-A377-F6B94EE8A224} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {B5B1741C-25B2-17D9-2A2F-3D87FE4C4333} = {0E409FE4-D68C-89CD-A377-F6B94EE8A224}
+ {4474AF4E-A61D-0869-577A-F4FB37AA3F6F} = {B5B1741C-25B2-17D9-2A2F-3D87FE4C4333}
+ {2BE3D457-3B94-5769-2A2D-F6E04E44847C} = {0E409FE4-D68C-89CD-A377-F6B94EE8A224}
+ {23296A66-B1B4-240B-5CA4-CBA1022A78C2} = {2BE3D457-3B94-5769-2A2D-F6E04E44847C}
+ {4EA8E1B8-624E-1764-418C-7BC6C74E4F7A} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {33AF56CE-BD50-C6C7-4FEB-4FB93B9744E7} = {4EA8E1B8-624E-1764-418C-7BC6C74E4F7A}
+ {0550CBC4-2338-9FD5-D277-1E77E9357251} = {33AF56CE-BD50-C6C7-4FEB-4FB93B9744E7}
+ {F0427A8E-7665-54FC-6491-A740768D695D} = {4EA8E1B8-624E-1764-418C-7BC6C74E4F7A}
+ {C0FDE9DF-887C-85CA-53FE-C6B2AF02F05D} = {F0427A8E-7665-54FC-6491-A740768D695D}
+ {56243652-4302-FCBD-28A7-EB0EFD23FD8A} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {6EC8D689-219C-1997-FCC3-AFDF04D8A165} = {56243652-4302-FCBD-28A7-EB0EFD23FD8A}
+ {B1CFBBE2-8D18-84A4-4AA3-C29684E291A7} = {6EC8D689-219C-1997-FCC3-AFDF04D8A165}
+ {68F3CC92-4C24-6C95-3508-B0B71230E5A7} = {56243652-4302-FCBD-28A7-EB0EFD23FD8A}
+ {04BEB0D6-D615-F29C-C040-F99E15E3DA71} = {68F3CC92-4C24-6C95-3508-B0B71230E5A7}
+ {26CFC9B7-E4C3-D90A-CEA1-FE4153B8FABB} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {52E46177-12EB-0D51-AE15-DC0CCD1AB66B} = {26CFC9B7-E4C3-D90A-CEA1-FE4153B8FABB}
+ {79339DEB-B8F1-D636-7A82-1172C24F2D16} = {52E46177-12EB-0D51-AE15-DC0CCD1AB66B}
+ {35EF0797-FBCE-1217-4DAE-5FDA19476735} = {26CFC9B7-E4C3-D90A-CEA1-FE4153B8FABB}
+ {6B628034-BA3F-15F3-562F-6498272EFFDB} = {35EF0797-FBCE-1217-4DAE-5FDA19476735}
+ {03C30818-63C9-AAD2-E89F-152C41A3EA26} = {48E3226E-F0B1-589A-9D38-3EB18BF00425}
+ {12724914-055D-ABA4-526C-5CF1388E474D} = {03C30818-63C9-AAD2-E89F-152C41A3EA26}
+ {429764B7-8A13-9F9C-8328-8CF141920861} = {12724914-055D-ABA4-526C-5CF1388E474D}
+ {B2E3AF3D-8C48-D851-0C7D-F14EFCF3E33E} = {03C30818-63C9-AAD2-E89F-152C41A3EA26}
+ {38ACA1FC-FDA0-DD71-ACA9-6A1AB2DE1B1F} = {B2E3AF3D-8C48-D851-0C7D-F14EFCF3E33E}
+ {9A761EFC-6B67-AB80-7D4B-BE1179CE2EB2} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {E48C0AB8-7249-0EA9-E9E2-45108449EAF0} = {9A761EFC-6B67-AB80-7D4B-BE1179CE2EB2}
+ {06C7E673-01D0-108D-2EEC-564E2CBDAB3A} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {68D0DEBB-6583-23EE-CB5D-569D2A52787E} = {06C7E673-01D0-108D-2EEC-564E2CBDAB3A}
+ {00B917E0-6395-CA44-54F8-79DABCF6858D} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {A2AD4594-34F6-1B52-706A-5BD54353761D} = {00B917E0-6395-CA44-54F8-79DABCF6858D}
+ {8BF3F716-A3C7-7C86-33A5-825C85289EA7} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {BEF44FA5-535B-6433-BF71-B950C3A4D6D9} = {8BF3F716-A3C7-7C86-33A5-825C85289EA7}
+ {FE8D9D35-674E-3595-A130-EF91CEA4BEEF} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {0A2C92AB-B559-0957-00B3-2988D40A8F1F} = {FE8D9D35-674E-3595-A130-EF91CEA4BEEF}
+ {50911366-A704-B102-02F5-AE4DABCF0B5E} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {A0967937-177F-8369-8507-419559771F9D} = {50911366-A704-B102-02F5-AE4DABCF0B5E}
+ {621944B1-86A4-1D8D-2D31-FCDC28FDC3F5} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {F943C0C7-44C3-5639-0D82-284C78A67051} = {621944B1-86A4-1D8D-2D31-FCDC28FDC3F5}
+ {64D9FD21-4441-FE73-DD57-64F7E51876BC} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {7EB2B30F-63FD-B0CC-CAD5-A7AC290CDF1B} = {64D9FD21-4441-FE73-DD57-64F7E51876BC}
+ {96E34AA0-FA06-6E51-F756-4A5212F2B651} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {4C1BA462-5134-EBEF-8485-DE6AE23AD1CE} = {96E34AA0-FA06-6E51-F756-4A5212F2B651}
+ {A8EDB1DC-4F11-B534-71AE-03A7AD3253FB} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {E4F92444-C647-963E-7CE5-B5E0732826B0} = {A8EDB1DC-4F11-B534-71AE-03A7AD3253FB}
+ {080D8A02-6B4E-63AE-7911-5A02303DE08E} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {5D1950FC-C854-F35E-2B4B-C1F3F78C2978} = {080D8A02-6B4E-63AE-7911-5A02303DE08E}
+ {A24046F0-272D-7C79-38E0-E922F43C8952} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {15BA5917-B8D4-3779-981C-7F859E9018C2} = {A24046F0-272D-7C79-38E0-E922F43C8952}
+ {384296FA-B8C9-0E1D-60F3-AD393F3EC7F4} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {6232E88F-6CC8-67EF-3C09-D40A1B920A63} = {384296FA-B8C9-0E1D-60F3-AD393F3EC7F4}
+ {A443DA34-2D19-185E-A91A-35651B36A5DC} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {0ADE2D25-CF4E-2661-13CE-9D269739D54A} = {A443DA34-2D19-185E-A91A-35651B36A5DC}
+ {66D3D456-3703-C8E5-976F-EC9ACFFD5BFC} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {865AEFC5-D0F3-D914-EB46-C97AEB5ED73D} = {66D3D456-3703-C8E5-976F-EC9ACFFD5BFC}
+ {FDF99FE7-B988-D3A7-4E00-EE9B2148FD9E} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {DE4121F9-166E-C4BF-591A-8A2D1D680274} = {FDF99FE7-B988-D3A7-4E00-EE9B2148FD9E}
+ {2F475A77-FAA4-8DD5-3E86-CC44D5C9657C} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {F616F5D4-C8FC-FABB-9E71-D4D1C05F0518} = {2F475A77-FAA4-8DD5-3E86-CC44D5C9657C}
+ {D9BE69F2-73D0-B6FD-1AB0-4269DBE378AC} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {B67BA4A2-DFA2-1E77-13A2-A88B5C99B6A7} = {D9BE69F2-73D0-B6FD-1AB0-4269DBE378AC}
+ {86E548F1-6325-3F66-13DB-758B2141038A} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {15B30AD5-7CC9-2721-F653-40C26D54B681} = {86E548F1-6325-3F66-13DB-758B2141038A}
+ {068AC898-B9E8-E58E-8505-827029713779} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {1C219E9A-75EF-F4E1-29DA-576B33D426E8} = {068AC898-B9E8-E58E-8505-827029713779}
+ {00802252-8C3A-B0C5-FA15-663CDC3FE749} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {6357E9FD-A15A-D94A-7239-F3EC69E0B345} = {00802252-8C3A-B0C5-FA15-663CDC3FE749}
+ {59BCC06C-0962-9AB9-E639-FC3326E980E3} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {520320B7-7D1B-2B3D-2131-6A4496B4B75F} = {59BCC06C-0962-9AB9-E639-FC3326E980E3}
+ {3E8E8317-A1D0-BE58-A81A-53D5C2ED44E5} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {550DA514-46E7-C696-5AC1-CA6F1C2A7837} = {3E8E8317-A1D0-BE58-A81A-53D5C2ED44E5}
+ {A179CAF4-C5CE-0A49-8168-3828244BF29C} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {13DD3E53-6DB3-ED7A-C0E5-18FBD07D2FF1} = {A179CAF4-C5CE-0A49-8168-3828244BF29C}
+ {0CCD2D7C-72B5-B5A4-E94E-54D6D62242E0} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {728C4883-0E02-70AB-FEAB-141DF74ECC5A} = {0CCD2D7C-72B5-B5A4-E94E-54D6D62242E0}
+ {4C11CFFF-E4A4-FB98-6931-B42CD543742C} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {37B7D531-5CE2-ED55-D09D-8893492A1A32} = {4C11CFFF-E4A4-FB98-6931-B42CD543742C}
+ {9C947B34-E745-E3D9-4270-5E89E206158F} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {BD234F55-5125-C6F6-B68D-365617B4719D} = {9C947B34-E745-E3D9-4270-5E89E206158F}
+ {A3D9F4BF-2FE0-B008-A8D8-B0BF541C63FA} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {F0157B24-6924-D8D3-F3F0-BB967C4BFDE7} = {A3D9F4BF-2FE0-B008-A8D8-B0BF541C63FA}
+ {0331D922-92E3-741B-93C2-C77FFDF6B2A5} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {DF1B1705-2020-B3F6-6C7C-F3E0DC192671} = {0331D922-92E3-741B-93C2-C77FFDF6B2A5}
+ {06626A3C-8C52-0254-C370-29094150F5C0} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {79E02FE6-A032-B479-1E24-936D377C44F5} = {06626A3C-8C52-0254-C370-29094150F5C0}
+ {69F84C6F-4ABE-9F2F-4DDA-47EF2ECD4188} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {F17E8DF9-DD14-5D80-1880-F5BEC286459B} = {69F84C6F-4ABE-9F2F-4DDA-47EF2ECD4188}
+ {85E435B1-910C-A276-6183-46CD7FA08F56} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {4974120F-05A5-8DA9-018A-F0A845AE686F} = {85E435B1-910C-A276-6183-46CD7FA08F56}
+ {E542F7ED-51D4-1836-7F83-14927C90CF0F} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {ED97C352-F811-500A-18B3-AF55C5E7FB85} = {E542F7ED-51D4-1836-7F83-14927C90CF0F}
+ {2367D30A-842E-3B41-F549-6D596DF6C5B3} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {216733FD-26CD-6BD8-AC2E-2E639766B8D2} = {2367D30A-842E-3B41-F549-6D596DF6C5B3}
+ {E01672ED-6A17-3E56-B917-E9CCC7CE1B5C} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {DD9E2B9F-BF82-2FB6-D0E0-54E1FD8162EB} = {E01672ED-6A17-3E56-B917-E9CCC7CE1B5C}
+ {43123BDD-F8FD-7B05-F1F0-474F6413FC10} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {76409DD3-DAF5-F793-F902-C122D068EA55} = {43123BDD-F8FD-7B05-F1F0-474F6413FC10}
+ {87073964-8AC0-1E63-99AD-E86264D0C3A8} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {01BA1311-2AA0-FB0F-3B13-53A299A4BEB1} = {87073964-8AC0-1E63-99AD-E86264D0C3A8}
+ {79FB4107-A744-DE2F-4502-551FD56625B1} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {3F42290A-0EC6-06CB-3D0D-B313227B89CF} = {79FB4107-A744-DE2F-4502-551FD56625B1}
+ {E8F121BD-EE0C-8C1E-4B9D-6876FDFCE8CB} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {3E115A52-44C5-D396-737C-6FC3C4403E42} = {E8F121BD-EE0C-8C1E-4B9D-6876FDFCE8CB}
+ {65C18BE2-3FA3-CB8B-D9FC-F6A368BDF925} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {02D562D0-785C-025A-4949-79F94E58E1F0} = {65C18BE2-3FA3-CB8B-D9FC-F6A368BDF925}
+ {5D5A64EF-8F1D-4E55-296A-386F58E02FEB} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {0E775E42-81FE-C541-8612-2542DFC10FFB} = {5D5A64EF-8F1D-4E55-296A-386F58E02FEB}
+ {FDE3A015-C286-C1DA-FCFD-43394B62093D} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {CD5D106F-D570-E176-1CDC-7474CB43483C} = {FDE3A015-C286-C1DA-FCFD-43394B62093D}
+ {1AE621B7-1C0A-568F-E94D-147092A6C16E} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {D044D4D4-6272-7C57-A41F-CE477835050D} = {1AE621B7-1C0A-568F-E94D-147092A6C16E}
+ {C1390C80-CDB4-D92A-0755-FD048B00F77C} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {030E37CE-073F-949A-F61D-881B4412980D} = {C1390C80-CDB4-D92A-0755-FD048B00F77C}
+ {D53B0F47-CB95-ED86-7400-3728129DC1A4} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {154BC784-BB54-6164-16CB-FD9A125C3038} = {D53B0F47-CB95-ED86-7400-3728129DC1A4}
+ {88A4248A-7C05-5AFA-105E-12E5CF03EB92} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {B06EA13A-9504-0F8B-F771-F71D86EE15BE} = {88A4248A-7C05-5AFA-105E-12E5CF03EB92}
+ {89833225-F238-2124-534C-6E4100BFCE30} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {566C5AC7-1AD0-6A46-BBB6-0FC28B15B034} = {89833225-F238-2124-534C-6E4100BFCE30}
+ {7F8AA199-79F9-D499-BCE5-C8608D636F52} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {2AE34DC1-5982-B6E5-1A66-8E773A07DFFC} = {7F8AA199-79F9-D499-BCE5-C8608D636F52}
+ {357B9DF2-7E42-59C5-3241-D72D3F5B73CE} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {7829564F-3CB7-5E73-3905-2731D4029FF4} = {357B9DF2-7E42-59C5-3241-D72D3F5B73CE}
+ {325E300C-E6A5-B30D-833E-3F5D39AC641D} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {315CAE46-11E0-9C15-A4A6-A7191B2F4BFC} = {325E300C-E6A5-B30D-833E-3F5D39AC641D}
+ {B89378DC-63A1-3DFB-90D5-6D4BBCFE5380} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {2C051497-E6A4-83A9-8D82-464D79589C75} = {B89378DC-63A1-3DFB-90D5-6D4BBCFE5380}
+ {C2A48819-A0D2-828C-7EBF-6544538DDE42} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {3D273C0B-60F4-D20E-30B0-61244D4C5784} = {C2A48819-A0D2-828C-7EBF-6544538DDE42}
+ {2DCD25E1-20B4-BC1C-FB0A-B63E24DCA9F4} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {CA32CAC9-3748-2B74-4063-EB8C6A3A63C0} = {2DCD25E1-20B4-BC1C-FB0A-B63E24DCA9F4}
+ {7D7566EE-AC36-04CA-FA33-2A492DD426D5} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {DE8662EC-F0D3-5BB1-2233-BB12DFE355C0} = {7D7566EE-AC36-04CA-FA33-2A492DD426D5}
+ {6E80EACB-0A12-2F7D-8C65-502D4CA5866E} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {09C9074A-60CB-0308-AE90-BF6C83143F48} = {6E80EACB-0A12-2F7D-8C65-502D4CA5866E}
+ {65B9C57E-6F0B-FF8C-A952-C0E3CD257627} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {319573C5-512C-6703-33C7-F9490BEDE16B} = {65B9C57E-6F0B-FF8C-A952-C0E3CD257627}
+ {AB4FCC4B-7E03-DBBC-E8D0-356F4ED139AB} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {D3AECC39-FC5A-BD34-B2DF-769B801FAD60} = {AB4FCC4B-7E03-DBBC-E8D0-356F4ED139AB}
+ {4319485C-F3D4-2DAA-4D37-9C17041107D7} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {84C8629A-B856-B8A8-093E-D1A4C81596D9} = {4319485C-F3D4-2DAA-4D37-9C17041107D7}
+ {3A34323D-BB25-1A14-EB08-19B663AAA9DF} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {0D1C9FAC-345A-8A5D-ED74-D50627E73BC3} = {3A34323D-BB25-1A14-EB08-19B663AAA9DF}
+ {755FB38B-3FAF-A6FF-3771-48AD310AABE7} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {09C1BD8A-3DDC-2DC7-5E79-529A4B861B33} = {755FB38B-3FAF-A6FF-3771-48AD310AABE7}
+ {630CCDB5-DE32-79EF-13AD-984AAE3EECDE} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {C4A89DA2-F3C6-DEF5-2BB6-1470F32F8AA9} = {630CCDB5-DE32-79EF-13AD-984AAE3EECDE}
+ {2D05C0FE-225A-4A7C-767A-F0D8165E2019} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {4AD6BA21-3B28-5119-642E-5A4AB589B716} = {2D05C0FE-225A-4A7C-767A-F0D8165E2019}
+ {03EACC3E-D50F-C3FA-C7F6-08C16405A00B} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {374920CC-E7AA-5A9C-2460-EA88950A909B} = {03EACC3E-D50F-C3FA-C7F6-08C16405A00B}
+ {AA75A989-888D-B14D-6300-9A7E02ED2EAB} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {7C82CBEE-C585-C659-CA98-9E423668227C} = {AA75A989-888D-B14D-6300-9A7E02ED2EAB}
+ {C73472D1-CFD4-5C68-4B99-E5B4BB4630BB} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {5584D3E5-DA59-4CC3-09ED-EB30EEC88565} = {C73472D1-CFD4-5C68-4B99-E5B4BB4630BB}
+ {BE9EC5B1-8A28-E14C-E4B4-F3E66C9E889A} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {8F0AFB80-74D1-A528-F09C-A5C48A7DB0AE} = {BE9EC5B1-8A28-E14C-E4B4-F3E66C9E889A}
+ {E48BE97D-2C8B-124A-A3DD-DFFD0CCAE704} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {167F0375-502C-5EE3-461A-9DC8DFBD4B56} = {E48BE97D-2C8B-124A-A3DD-DFFD0CCAE704}
+ {0E7A03F2-6F7F-0E27-553F-0F980A101569} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {FCBAA3BA-7479-30B7-EAF4-BF10EF1FC8AA} = {0E7A03F2-6F7F-0E27-553F-0F980A101569}
+ {C2689E79-4290-C79C-8876-F7CBBD8A6CB3} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {E3EE641F-7487-58CD-3456-6BA821217EEB} = {C2689E79-4290-C79C-8876-F7CBBD8A6CB3}
+ {7E66735A-0536-68B4-7545-56E34E920C51} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {F6B2A792-42B6-FBDF-AB06-179CD19093D1} = {7E66735A-0536-68B4-7545-56E34E920C51}
+ {73EFD343-138B-48E0-73F1-C226E7EAF37B} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {1A3E63DB-75EA-6569-D917-89B4203A51D9} = {73EFD343-138B-48E0-73F1-C226E7EAF37B}
+ {0A0643BD-F61F-B8F2-C10A-D216600647FF} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {BEF506A7-18E9-06C3-8B60-E9C54AE3639D} = {0A0643BD-F61F-B8F2-C10A-D216600647FF}
+ {8CC7DDDD-EA87-905C-099E-4353711AB883} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {5D847496-840A-811E-C348-845823CC17FD} = {8CC7DDDD-EA87-905C-099E-4353711AB883}
+ {1253EC49-3F6F-DDCC-27E7-1D48F381E702} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {123D0FB0-42E9-4C6C-DA07-B7FC07684BD3} = {1253EC49-3F6F-DDCC-27E7-1D48F381E702}
+ {4E118AAF-1874-8714-F42A-8BEAECE0C276} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {DFCDEB8E-730E-D946-9237-97D13C0683A5} = {4E118AAF-1874-8714-F42A-8BEAECE0C276}
+ {572A021C-D31D-7566-E6D7-0BF983FC3FD8} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {3462643B-8EAF-3B61-FB2B-440E5C8F88F6} = {572A021C-D31D-7566-E6D7-0BF983FC3FD8}
+ {2E144F98-BF78-A3E0-F494-477CF2DDA281} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {5B918EEB-A1F6-D8E4-32BC-9B0DF8E0A246} = {2E144F98-BF78-A3E0-F494-477CF2DDA281}
+ {1B31B1CC-7C5D-6F1E-77B6-7468BB812392} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {4943B4F5-6E6D-4A47-5483-447A518FB124} = {1B31B1CC-7C5D-6F1E-77B6-7468BB812392}
+ {FB55E063-D07B-D551-7C94-FC764C5002B2} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {832C0545-F430-FBF7-E587-664F9E0EF042} = {FB55E063-D07B-D551-7C94-FC764C5002B2}
+ {C6B103E3-A11C-6605-E5EB-F8BF0D5708C0} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {3877E86E-24D8-33A3-DA46-AD1E2496D733} = {C6B103E3-A11C-6605-E5EB-F8BF0D5708C0}
+ {53B29166-F1EB-8111-56DE-3AF18E0074DE} = {F79F2605-FCA1-BFD4-EFEC-22D83B2CB762}
+ {6C75FA73-DEAA-686F-BD75-84B5E87C6006} = {53B29166-F1EB-8111-56DE-3AF18E0074DE}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {5A6F0801-E8E0-4C56-B741-425C2846CBF3}
+ EndGlobalSection
+EndGlobal