diff --git a/SabreTools.Models/ArchiveDotOrg/File.cs b/SabreTools.Models/ArchiveDotOrg/File.cs
new file mode 100644
index 00000000..b434561a
--- /dev/null
+++ b/SabreTools.Models/ArchiveDotOrg/File.cs
@@ -0,0 +1,94 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.ArchiveDotOrg
+{
+ [XmlRoot("file")]
+ public class File
+ {
+ [XmlAttribute("name")]
+ public string? Name { get; set; }
+
+ /// Is this a set of defined values?
+ [XmlAttribute("source")]
+ public string? Source { get; set; }
+
+ [XmlElement("btih")]
+ public string? BitTorrentMagnetHash { get; set; }
+
+ [XmlElement("mtime")]
+ public long? LastModifiedTime { get; set; }
+
+ [XmlElement("size")]
+ public long? Size { get; set; }
+
+ [XmlElement("md5")]
+ public string? MD5 { get; set; }
+
+ [XmlElement("crc32")]
+ public string? CRC32 { get; set; }
+
+ [XmlElement("sha1")]
+ public string? SHA1 { get; set; }
+
+ [XmlElement("filecount")]
+ public long? FileCount { get; set; }
+
+ /// Is this a set of defined values?
+ [XmlElement("format")]
+ public string? Format { get; set; }
+
+ [XmlElement("original")]
+ public string? Original { get; set; }
+
+ /// Is this a set of defined values?
+ [XmlElement("summation")]
+ public string? Summation { get; set; }
+
+ /// Is this a set of defined values?
+ [XmlElement("rotation")]
+ public long? Rotation { get; set; }
+
+ [XmlElement("hocr_char_to_word_module_version")]
+ public string? hOCRCharToWordModuleVersion { get; set; }
+
+ [XmlElement("hocr_char_to_word_hocr_version")]
+ public string? hOCRCharToWordhOCRVersion { get; set; }
+
+ [XmlElement("ocr_module_version")]
+ public string? TesseractOCRModuleVersion { get; set; }
+
+ [XmlElement("ocr_converted")]
+ public string? TesseractOCRConverted { get; set; }
+
+ [XmlElement("word_conf_0_10")]
+ public long? WordConfidenceInterval0To10 { get; set; }
+
+ [XmlElement("word_conf_11_20")]
+ public long? WordConfidenceInterval11To20 { get; set; }
+
+ [XmlElement("word_conf_21_30")]
+ public long? WordConfidenceInterval21To30 { get; set; }
+
+ [XmlElement("word_conf_31_40")]
+ public long? WordConfidenceInterval31To40 { get; set; }
+
+ [XmlElement("word_conf_41_50")]
+ public long? WordConfidenceInterval41To50 { get; set; }
+
+ [XmlElement("word_conf_51_60")]
+ public long? WordConfidenceInterval51To60 { get; set; }
+
+ [XmlElement("word_conf_61_70")]
+ public long? WordConfidenceInterval61To70 { get; set; }
+
+ [XmlElement("word_conf_71_80")]
+ public long? WordConfidenceInterval71To80 { get; set; }
+
+ [XmlElement("word_conf_81_90")]
+ public long? WordConfidenceInterval81To90 { get; set; }
+
+ [XmlElement("word_conf_91_100")]
+ public long? WordConfidenceInterval91To100 { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/ArchiveDotOrg/Files.cs b/SabreTools.Models/ArchiveDotOrg/Files.cs
new file mode 100644
index 00000000..e3dc7cd1
--- /dev/null
+++ b/SabreTools.Models/ArchiveDotOrg/Files.cs
@@ -0,0 +1,12 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.ArchiveDotOrg
+{
+ [XmlRoot("files")]
+ public class Files
+ {
+ [XmlElement]
+ public File[]? File { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/AttractMode/Row.cs b/SabreTools.Models/AttractMode/Row.cs
new file mode 100644
index 00000000..e8883fa3
--- /dev/null
+++ b/SabreTools.Models/AttractMode/Row.cs
@@ -0,0 +1,39 @@
+namespace SabreTools.Models.AttractMode
+{
+ public class Row
+ {
+ public string Name { get; set; }
+
+ public string Title { get; set; }
+
+ public string Emulator { get; set; }
+
+ public string CloneOf { get; set; }
+
+ public string Year { get; set; }
+
+ public string Manufacturer { get; set; }
+
+ public string Category { get; set; }
+
+ public string Players { get; set; }
+
+ public string Rotation { get; set; }
+
+ public string Control { get; set; }
+
+ public string Status { get; set; }
+
+ public string DisplayCount { get; set; }
+
+ public string DisplayType { get; set; }
+
+ public string AltRomname { get; set; }
+
+ public string AltTitle { get; set; }
+
+ public string Extra { get; set; }
+
+ public string Buttons { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/EverdriveSMDB/Row.cs b/SabreTools.Models/EverdriveSMDB/Row.cs
new file mode 100644
index 00000000..d789657d
--- /dev/null
+++ b/SabreTools.Models/EverdriveSMDB/Row.cs
@@ -0,0 +1,17 @@
+namespace SabreTools.Models.EverdriveSMDB
+{
+ public class Row
+ {
+ public string SHA256 { get; set; }
+
+ public string Name { get; set; }
+
+ public string SHA1 { get; set; }
+
+ public string MD5 { get; set; }
+
+ public string CRC32 { get; set; }
+
+ public long? Size { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Adjuster.cs b/SabreTools.Models/Listxml/Adjuster.cs
new file mode 100644
index 00000000..d0a3ebc7
--- /dev/null
+++ b/SabreTools.Models/Listxml/Adjuster.cs
@@ -0,0 +1,18 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("adjuster")]
+ public class Adjuster
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("default")]
+ public string Default { get; set; }
+
+ [XmlElement("condition")]
+ public Condition? Condition { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Analog.cs b/SabreTools.Models/Listxml/Analog.cs
new file mode 100644
index 00000000..660dd8c6
--- /dev/null
+++ b/SabreTools.Models/Listxml/Analog.cs
@@ -0,0 +1,12 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("analog")]
+ public class Analog
+ {
+ [XmlAttribute("mask")]
+ public string Mask { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/BiosSet.cs b/SabreTools.Models/Listxml/BiosSet.cs
new file mode 100644
index 00000000..0e461c2f
--- /dev/null
+++ b/SabreTools.Models/Listxml/BiosSet.cs
@@ -0,0 +1,19 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("biosset")]
+ public class BiosSet
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("description")]
+ public string Description { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("default")]
+ public string? Default { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Chip.cs b/SabreTools.Models/Listxml/Chip.cs
new file mode 100644
index 00000000..8ceb2626
--- /dev/null
+++ b/SabreTools.Models/Listxml/Chip.cs
@@ -0,0 +1,22 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("chip")]
+ public class Chip
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("tag")]
+ public string? Tag { get; set; }
+
+ /// (cpu|audio)
+ [XmlAttribute("type")]
+ public string Type { get; set; }
+
+ [XmlAttribute("clock")]
+ public string? Clock { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Condition.cs b/SabreTools.Models/Listxml/Condition.cs
new file mode 100644
index 00000000..bc0f64dc
--- /dev/null
+++ b/SabreTools.Models/Listxml/Condition.cs
@@ -0,0 +1,22 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("condition")]
+ public class Condition
+ {
+ [XmlAttribute("tag")]
+ public string Tag { get; set; }
+
+ [XmlAttribute("mask")]
+ public string Mask { get; set; }
+
+ /// (eq|ne|gt|le|lt|ge)
+ [XmlAttribute("relation")]
+ public string Relation { get; set; }
+
+ [XmlAttribute("value")]
+ public string Value { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/ConfLocation.cs b/SabreTools.Models/Listxml/ConfLocation.cs
new file mode 100644
index 00000000..f4c7a414
--- /dev/null
+++ b/SabreTools.Models/Listxml/ConfLocation.cs
@@ -0,0 +1,20 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("conflocation")]
+ public class ConfLocation
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("number")]
+ public string Number { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("inverted")]
+ public string? Inverted { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/ConfSetting.cs b/SabreTools.Models/Listxml/ConfSetting.cs
new file mode 100644
index 00000000..9796d543
--- /dev/null
+++ b/SabreTools.Models/Listxml/ConfSetting.cs
@@ -0,0 +1,22 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("confsetting")]
+ public class ConfSetting
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("value")]
+ public string Value { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("default")]
+ public string? Default { get; set; }
+
+ [XmlElement("condition")]
+ public Condition? Condition { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Configuration.cs b/SabreTools.Models/Listxml/Configuration.cs
new file mode 100644
index 00000000..f7c18616
--- /dev/null
+++ b/SabreTools.Models/Listxml/Configuration.cs
@@ -0,0 +1,27 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("configuration")]
+ public class Configuration
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("tag")]
+ public string Tag { get; set; }
+
+ [XmlAttribute("mask")]
+ public string? Mask { get; set; }
+
+ [XmlElement("condition")]
+ public Condition? Condition { get; set; }
+
+ [XmlElement("conflocation")]
+ public ConfLocation[]? ConfLocation { get; set; }
+
+ [XmlElement("confsetting")]
+ public ConfSetting[]? ConfSetting { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Control.cs b/SabreTools.Models/Listxml/Control.cs
new file mode 100644
index 00000000..c3b84b2d
--- /dev/null
+++ b/SabreTools.Models/Listxml/Control.cs
@@ -0,0 +1,56 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("control")]
+ public class Control
+ {
+ [XmlAttribute("type")]
+ public string Type { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("player")]
+ public string? Player { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("buttons")]
+ public string? Buttons { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("reqbuttons")]
+ public string? ReqButtons { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("minimum")]
+ public string? Minimum { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("maximum")]
+ public string? Maximum { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("sensitivity")]
+ public string? Sensitivity { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("keydelta")]
+ public string? KeyDelta { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("reverse")]
+ public string? Reverse { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("ways")]
+ public string? Ways { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("ways2")]
+ public string? Ways2 { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("ways3")]
+ public string? Ways3 { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Device.cs b/SabreTools.Models/Listxml/Device.cs
new file mode 100644
index 00000000..f2718c52
--- /dev/null
+++ b/SabreTools.Models/Listxml/Device.cs
@@ -0,0 +1,30 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("device")]
+ public class Device
+ {
+ [XmlAttribute("type")]
+ public string Type { get; set; }
+
+ [XmlAttribute("tag")]
+ public string? Tag { get; set; }
+
+ [XmlAttribute("fixed_image")]
+ public string? FixedImage { get; set; }
+
+ [XmlAttribute("mandatory")]
+ public string? Mandatory { get; set; }
+
+ [XmlAttribute("interface")]
+ public string? Interface { get; set; }
+
+ [XmlElement("instance")]
+ public Instance? Instance { get; set; }
+
+ [XmlElement("extension")]
+ public Extension[]? Extension { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/DeviceRef.cs b/SabreTools.Models/Listxml/DeviceRef.cs
new file mode 100644
index 00000000..4f904f3c
--- /dev/null
+++ b/SabreTools.Models/Listxml/DeviceRef.cs
@@ -0,0 +1,12 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("device_ref")]
+ public class DeviceRef
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/DipLocation.cs b/SabreTools.Models/Listxml/DipLocation.cs
new file mode 100644
index 00000000..4d709cac
--- /dev/null
+++ b/SabreTools.Models/Listxml/DipLocation.cs
@@ -0,0 +1,20 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("diplocation")]
+ public class DipLocation
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("number")]
+ public string Number { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("inverted")]
+ public string? Inverted { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/DipSwitch.cs b/SabreTools.Models/Listxml/DipSwitch.cs
new file mode 100644
index 00000000..d67ebc52
--- /dev/null
+++ b/SabreTools.Models/Listxml/DipSwitch.cs
@@ -0,0 +1,27 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("dipswitch")]
+ public class DipSwitch
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("tag")]
+ public string Tag { get; set; }
+
+ [XmlAttribute("mask")]
+ public string? Mask { get; set; }
+
+ [XmlElement("condition")]
+ public Condition? Condition { get; set; }
+
+ [XmlElement("diplocation")]
+ public DipLocation[]? DipLocation { get; set; }
+
+ [XmlElement("dipvalue")]
+ public DipValue[]? DipValue { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/DipValue.cs b/SabreTools.Models/Listxml/DipValue.cs
new file mode 100644
index 00000000..80975d36
--- /dev/null
+++ b/SabreTools.Models/Listxml/DipValue.cs
@@ -0,0 +1,22 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("dipvalue")]
+ public class DipValue
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("value")]
+ public string Value { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("default")]
+ public string? Default { get; set; }
+
+ [XmlElement("condition")]
+ public Condition? Condition { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Disk.cs b/SabreTools.Models/Listxml/Disk.cs
new file mode 100644
index 00000000..8d794a82
--- /dev/null
+++ b/SabreTools.Models/Listxml/Disk.cs
@@ -0,0 +1,37 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("disk")]
+ public class Disk
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("sha1")]
+ public string? SHA1 { get; set; }
+
+ [XmlAttribute("merge")]
+ public string? Merge { get; set; }
+
+ [XmlAttribute("region")]
+ public string? Region { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("index")]
+ public string? Index { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("writable")]
+ public string? Writable { get; set; }
+
+ /// (baddump|nodump|good) "good"
+ [XmlAttribute("status")]
+ public string? Status { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("optional")]
+ public string? Optional { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Display.cs b/SabreTools.Models/Listxml/Display.cs
new file mode 100644
index 00000000..94ce93b4
--- /dev/null
+++ b/SabreTools.Models/Listxml/Display.cs
@@ -0,0 +1,64 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("display")]
+ public class Display
+ {
+ [XmlAttribute("tag")]
+ public string? Tag { get; set; }
+
+ /// (raster|vector|lcd|svg|unknown)
+ [XmlAttribute("type")]
+ public string Type { get; set; }
+
+ /// (0|90|180|270)
+ [XmlAttribute("rotate")]
+ public long? Rotate { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("flipx")]
+ public string? FlipX { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("width")]
+ public string? Width { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("height")]
+ public string? Height { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("refresh")]
+ public string Refresh { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("pixclock")]
+ public string? PixClock { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("htotal")]
+ public string? HTotal { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("hbend")]
+ public string? HBEnd { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("hbstart")]
+ public string? HBStart { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("vtotal")]
+ public string? VTotal { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("vbend")]
+ public string? VBEnd { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("vbstart")]
+ public string? VBStart { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Driver.cs b/SabreTools.Models/Listxml/Driver.cs
new file mode 100644
index 00000000..a2b42be3
--- /dev/null
+++ b/SabreTools.Models/Listxml/Driver.cs
@@ -0,0 +1,41 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("driver")]
+ public class Driver
+ {
+ /// (good|imperfect|preliminary)
+ [XmlAttribute("status")]
+ public string Status { get; set; }
+
+ /// (good|imperfect|preliminary)
+ [XmlAttribute("emulation")]
+ public string Emulation { get; set; }
+
+ /// (good|imperfect|preliminary)
+ [XmlAttribute("cocktail")]
+ public string Cocktail { get; set; }
+
+ /// (supported|unsupported)
+ [XmlAttribute("savestate")]
+ public string SaveState { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("requiresartwork")]
+ public string? RequiresArtwork { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("unofficial")]
+ public string? Unofficial { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("nosoundhardware")]
+ public string? NoSoundHardware { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("incomplete")]
+ public string? Incomplete { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Extension.cs b/SabreTools.Models/Listxml/Extension.cs
new file mode 100644
index 00000000..ba51d9b8
--- /dev/null
+++ b/SabreTools.Models/Listxml/Extension.cs
@@ -0,0 +1,12 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("extension")]
+ public class Extension
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Feature.cs b/SabreTools.Models/Listxml/Feature.cs
new file mode 100644
index 00000000..10efce6b
--- /dev/null
+++ b/SabreTools.Models/Listxml/Feature.cs
@@ -0,0 +1,21 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("feature")]
+ public class Feature
+ {
+ /// (protection|timing|graphics|palette|sound|capture|camera|microphone|controls|keyboard|mouse|media|disk|printer|tape|punch|drum|rom|comms|lan|wan)
+ [XmlAttribute("type")]
+ public string Type { get; set; }
+
+ /// (unemulated|imperfect)
+ [XmlAttribute("status")]
+ public string? Status { get; set; }
+
+ /// (unemulated|imperfect)
+ [XmlAttribute("overall")]
+ public string? Overall { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Input.cs b/SabreTools.Models/Listxml/Input.cs
new file mode 100644
index 00000000..ee164e7a
--- /dev/null
+++ b/SabreTools.Models/Listxml/Input.cs
@@ -0,0 +1,29 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("input")]
+ public class Input
+ {
+ /// (yes|no) "no"
+ [XmlAttribute("service")]
+ public string? Service { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("tilt")]
+ public string? Tilt { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("players")]
+ public string Players { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("coins")]
+ public string? Coins { get; set; }
+
+ /// Numeric?
+ [XmlElement("control")]
+ public Control[]? Control { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Instance.cs b/SabreTools.Models/Listxml/Instance.cs
new file mode 100644
index 00000000..14ea7343
--- /dev/null
+++ b/SabreTools.Models/Listxml/Instance.cs
@@ -0,0 +1,15 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("instance")]
+ public class Instance
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("briefname")]
+ public string BriefName { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Machine.cs b/SabreTools.Models/Listxml/Machine.cs
new file mode 100644
index 00000000..f799b593
--- /dev/null
+++ b/SabreTools.Models/Listxml/Machine.cs
@@ -0,0 +1,106 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("machine")]
+ public class Machine
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("sourcefile")]
+ public string? SourceFile { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("isbios")]
+ public string? IsBios { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("isdevice")]
+ public string? IsDevice { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("ismechanical")]
+ public string? IsMechanical { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("runnable")]
+ public string? Runnable { get; set; }
+
+ [XmlAttribute("cloneof")]
+ public string? CloneOf { get; set; }
+
+ [XmlAttribute("romof")]
+ public string? RomOf { get; set; }
+
+ [XmlAttribute("sampleof")]
+ public string? SampleOf { get; set; }
+
+ [XmlElement("description")]
+ public string Description { get; set; }
+
+ [XmlElement("year")]
+ public string? Year { get; set; }
+
+ [XmlElement("manufacturer")]
+ public string? Manufacturer { get; set; }
+
+ [XmlElement("biosset")]
+ public BiosSet[]? BiosSet { get; set; }
+
+ [XmlElement("rom")]
+ public Rom[]? Rom { get; set; }
+
+ [XmlElement("disk")]
+ public Disk[]? Disk { get; set; }
+
+ [XmlElement("device_ref")]
+ public DeviceRef[]? DeviceRef { get; set; }
+
+ [XmlElement("sample")]
+ public Sample[]? Sample { get; set; }
+
+ [XmlElement("chip")]
+ public Chip[]? Chip { get; set; }
+
+ [XmlElement("display")]
+ public Display[]? Display { get; set; }
+
+ [XmlElement("sound")]
+ public Sound? Sound { get; set; }
+
+ [XmlElement("input")]
+ public Input? Input { get; set; }
+
+ [XmlElement("dipswitch")]
+ public DipSwitch[]? DipSwitch { get; set; }
+
+ [XmlElement("configuration")]
+ public Configuration[]? Configuration { get; set; }
+
+ [XmlElement("port")]
+ public Port[]? Port { get; set; }
+
+ [XmlElement("adjuster")]
+ public Adjuster[]? Adjuster { get; set; }
+
+ [XmlElement("driver")]
+ public Driver? Driver { get; set; }
+
+ [XmlElement("feature")]
+ public Feature[]? Feature { get; set; }
+
+ [XmlElement("device")]
+ public Device[]? Device { get; set; }
+
+ [XmlElement("slot")]
+ public Slot[]? Slot { get; set; }
+
+ [XmlElement("softwarelist")]
+ public SoftwareList[]? SoftwareList { get; set; }
+
+ [XmlElement("ramoption")]
+ public RamOption[]? RamOption { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Mame.cs b/SabreTools.Models/Listxml/Mame.cs
new file mode 100644
index 00000000..0d116846
--- /dev/null
+++ b/SabreTools.Models/Listxml/Mame.cs
@@ -0,0 +1,22 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("mame")]
+ public class Mame
+ {
+ [XmlAttribute("build")]
+ public string? Build { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("debug")]
+ public string? Debug { get; set; }
+
+ [XmlAttribute("mameconfig")]
+ public string MameConfig { get; set; }
+
+ [XmlElement("machine")]
+ public Machine[] Machine { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Port.cs b/SabreTools.Models/Listxml/Port.cs
new file mode 100644
index 00000000..7e608b91
--- /dev/null
+++ b/SabreTools.Models/Listxml/Port.cs
@@ -0,0 +1,15 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("port")]
+ public class Port
+ {
+ [XmlAttribute("tag")]
+ public string Tag { get; set; }
+
+ [XmlElement("analog")]
+ public Analog[]? Analog { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/RamOption.cs b/SabreTools.Models/Listxml/RamOption.cs
new file mode 100644
index 00000000..06311803
--- /dev/null
+++ b/SabreTools.Models/Listxml/RamOption.cs
@@ -0,0 +1,15 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("ramoption")]
+ public class RamOption
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("default")]
+ public string? Default { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Rom.cs b/SabreTools.Models/Listxml/Rom.cs
new file mode 100644
index 00000000..f74b2ac3
--- /dev/null
+++ b/SabreTools.Models/Listxml/Rom.cs
@@ -0,0 +1,42 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("rom")]
+ public class Rom
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("bios")]
+ public string? Bios { get; set; }
+
+ [XmlAttribute("size")]
+ public long Size { get; set; }
+
+ [XmlAttribute("crc")]
+ public string? CRC { get; set; }
+
+ [XmlAttribute("sha1")]
+ public string? SHA1 { get; set; }
+
+ [XmlAttribute("merge")]
+ public string? Merge { get; set; }
+
+ [XmlAttribute("region")]
+ public string? Region { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("offset")]
+ public string? Offset { get; set; }
+
+ /// (baddump|nodump|good) "good"
+ [XmlAttribute("status")]
+ public string? Status { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("optional")]
+ public string? Optional { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Sample.cs b/SabreTools.Models/Listxml/Sample.cs
new file mode 100644
index 00000000..8e00a82c
--- /dev/null
+++ b/SabreTools.Models/Listxml/Sample.cs
@@ -0,0 +1,12 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("sample")]
+ public class Sample
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Slot.cs b/SabreTools.Models/Listxml/Slot.cs
new file mode 100644
index 00000000..0f335a51
--- /dev/null
+++ b/SabreTools.Models/Listxml/Slot.cs
@@ -0,0 +1,15 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("slot")]
+ public class Slot
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlElement("slotoption")]
+ public SlotOption[]? SlotOption { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/SlotOption.cs b/SabreTools.Models/Listxml/SlotOption.cs
new file mode 100644
index 00000000..4aa34342
--- /dev/null
+++ b/SabreTools.Models/Listxml/SlotOption.cs
@@ -0,0 +1,19 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("slotoption")]
+ public class SlotOption
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("devname")]
+ public string DevName { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("default")]
+ public string? Default { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/SoftwareList.cs b/SabreTools.Models/Listxml/SoftwareList.cs
new file mode 100644
index 00000000..6b1d0038
--- /dev/null
+++ b/SabreTools.Models/Listxml/SoftwareList.cs
@@ -0,0 +1,22 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("softwarelist")]
+ public class SoftwareList
+ {
+ [XmlAttribute("tag")]
+ public string Tag { get; set; }
+
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ /// (original|compatible)
+ [XmlAttribute("status")]
+ public string Status { get; set; }
+
+ [XmlAttribute("filter")]
+ public string? Filter { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/Listxml/Sound.cs b/SabreTools.Models/Listxml/Sound.cs
new file mode 100644
index 00000000..b244f2d3
--- /dev/null
+++ b/SabreTools.Models/Listxml/Sound.cs
@@ -0,0 +1,13 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.Listxml
+{
+ [XmlRoot("sound")]
+ public class Sound
+ {
+ /// Numeric?
+ [XmlAttribute("channels")]
+ public string Channels { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/SabreTools.Models.csproj b/SabreTools.Models/SabreTools.Models.csproj
new file mode 100644
index 00000000..5d83bbdc
--- /dev/null
+++ b/SabreTools.Models/SabreTools.Models.csproj
@@ -0,0 +1,7 @@
+
+
+
+ net6.0;net7.0
+
+
+
diff --git a/SabreTools.Models/SoftwareList/DataArea.cs b/SabreTools.Models/SoftwareList/DataArea.cs
new file mode 100644
index 00000000..99db3312
--- /dev/null
+++ b/SabreTools.Models/SoftwareList/DataArea.cs
@@ -0,0 +1,26 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.SoftwareList
+{
+ [XmlRoot("dataarea")]
+ public class DataArea
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("size")]
+ public long Size { get; set; }
+
+ /// (8|16|32|64) "8"
+ [XmlAttribute("width")]
+ public long? Width { get; set; }
+
+ /// (big|little) "little"
+ [XmlAttribute("endianness")]
+ public string? Endianness { get; set; }
+
+ [XmlElement("rom")]
+ public Rom[]? Rom { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/SoftwareList/DipSwitch.cs b/SabreTools.Models/SoftwareList/DipSwitch.cs
new file mode 100644
index 00000000..ff4c5f5f
--- /dev/null
+++ b/SabreTools.Models/SoftwareList/DipSwitch.cs
@@ -0,0 +1,21 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.SoftwareList
+{
+ [XmlRoot("dipswitch")]
+ public class DipSwitch
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("tag")]
+ public string Tag { get; set; }
+
+ [XmlAttribute("mask")]
+ public string? Mask { get; set; }
+
+ [XmlElement("dipvalue")]
+ public DipValue[]? DipValue { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/SoftwareList/DipValue.cs b/SabreTools.Models/SoftwareList/DipValue.cs
new file mode 100644
index 00000000..5afb9d1d
--- /dev/null
+++ b/SabreTools.Models/SoftwareList/DipValue.cs
@@ -0,0 +1,19 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.SoftwareList
+{
+ [XmlRoot("dipvalue")]
+ public class DipValue
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("value")]
+ public string Value { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("default")]
+ public string? Default { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/SoftwareList/Disk.cs b/SabreTools.Models/SoftwareList/Disk.cs
new file mode 100644
index 00000000..b5966dd6
--- /dev/null
+++ b/SabreTools.Models/SoftwareList/Disk.cs
@@ -0,0 +1,23 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.SoftwareList
+{
+ [XmlRoot("disk")]
+ public class Disk
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("sha1")]
+ public string? SHA1 { get; set; }
+
+ /// (baddump|nodump|good) "good"
+ [XmlAttribute("status")]
+ public string? Status { get; set; }
+
+ /// (yes|no) "no"
+ [XmlAttribute("writeable")]
+ public string? Writeable { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/SoftwareList/DiskArea.cs b/SabreTools.Models/SoftwareList/DiskArea.cs
new file mode 100644
index 00000000..53a480ed
--- /dev/null
+++ b/SabreTools.Models/SoftwareList/DiskArea.cs
@@ -0,0 +1,15 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.SoftwareList
+{
+ [XmlRoot("diskarea")]
+ public class DiskArea
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlElement("disk")]
+ public Disk[]? Disk { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/SoftwareList/Feature.cs b/SabreTools.Models/SoftwareList/Feature.cs
new file mode 100644
index 00000000..a8fc8894
--- /dev/null
+++ b/SabreTools.Models/SoftwareList/Feature.cs
@@ -0,0 +1,15 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.SoftwareList
+{
+ [XmlRoot("feature")]
+ public class Feature
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("value")]
+ public string? Value { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/SoftwareList/Info.cs b/SabreTools.Models/SoftwareList/Info.cs
new file mode 100644
index 00000000..f843b890
--- /dev/null
+++ b/SabreTools.Models/SoftwareList/Info.cs
@@ -0,0 +1,15 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.SoftwareList
+{
+ [XmlRoot("info")]
+ public class Info
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("value")]
+ public string? Value { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/SoftwareList/Part.cs b/SabreTools.Models/SoftwareList/Part.cs
new file mode 100644
index 00000000..a52bb7f8
--- /dev/null
+++ b/SabreTools.Models/SoftwareList/Part.cs
@@ -0,0 +1,27 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.SoftwareList
+{
+ [XmlRoot("part")]
+ public class Part
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("interface")]
+ public string Interface { get; set; }
+
+ [XmlElement("feature")]
+ public Feature[]? Feature { get; set; }
+
+ [XmlElement("dataarea")]
+ public DataArea[]? DataArea { get; set; }
+
+ [XmlElement("diskarea")]
+ public DiskArea[]? DiskArea { get; set; }
+
+ [XmlElement("dipswitch")]
+ public DipSwitch[]? DipSwitch { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/SoftwareList/Rom.cs b/SabreTools.Models/SoftwareList/Rom.cs
new file mode 100644
index 00000000..5add8337
--- /dev/null
+++ b/SabreTools.Models/SoftwareList/Rom.cs
@@ -0,0 +1,36 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.SoftwareList
+{
+ [XmlRoot("rom")]
+ public class Rom
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("size")]
+ public long Size { get; set; }
+
+ [XmlAttribute("crc")]
+ public string? CRC { get; set; }
+
+ [XmlAttribute("sha1")]
+ public string? SHA1 { get; set; }
+
+ /// Numeric?
+ [XmlAttribute("offset")]
+ public string? Offset { get; set; }
+
+ [XmlAttribute("value")]
+ public string? Value { get; set; }
+
+ /// (baddump|nodump|good) "good"
+ [XmlAttribute("status")]
+ public string? Status { get; set; }
+
+ /// (load16_byte|load16_word|load16_word_swap|load32_byte|load32_word|load32_word_swap|load32_dword|load64_word|load64_word_swap|reload|fill|continue|reload_plain|ignore)
+ [XmlAttribute("loadflag")]
+ public string? LoadFlag { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/SoftwareList/SharedFeat.cs b/SabreTools.Models/SoftwareList/SharedFeat.cs
new file mode 100644
index 00000000..23dd00c1
--- /dev/null
+++ b/SabreTools.Models/SoftwareList/SharedFeat.cs
@@ -0,0 +1,15 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.SoftwareList
+{
+ [XmlRoot("sharedfeat")]
+ public class SharedFeat
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("value")]
+ public string? Value { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/SoftwareList/Software.cs b/SabreTools.Models/SoftwareList/Software.cs
new file mode 100644
index 00000000..ee0ff505
--- /dev/null
+++ b/SabreTools.Models/SoftwareList/Software.cs
@@ -0,0 +1,40 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.SoftwareList
+{
+ [XmlRoot("software")]
+ public class Software
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("cloneof")]
+ public string? CloneOf { get; set; }
+
+ /// (yes|partial|no) "yes"
+ [XmlAttribute("supported")]
+ public string? Supported { get; set; }
+
+ [XmlElement("description")]
+ public string Description { get; set; }
+
+ [XmlElement("year")]
+ public string Year { get; set; }
+
+ [XmlElement("publisher")]
+ public string Publisher { get; set; }
+
+ [XmlElement("notes")]
+ public string? Notes { get; set; }
+
+ [XmlElement("info")]
+ public Info[]? Info { get; set; }
+
+ [XmlElement("sharedfeat")]
+ public SharedFeat[]? SharedFeat { get; set; }
+
+ [XmlElement("part")]
+ public Part[]? Part { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/SoftwareList/SoftwareList.cs b/SabreTools.Models/SoftwareList/SoftwareList.cs
new file mode 100644
index 00000000..adbaf704
--- /dev/null
+++ b/SabreTools.Models/SoftwareList/SoftwareList.cs
@@ -0,0 +1,21 @@
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace SabreTools.Models.SoftwareList
+{
+ [XmlRoot("softwarelist")]
+ public class SoftwareList
+ {
+ [XmlAttribute("name")]
+ public string Name { get; set; }
+
+ [XmlAttribute("description")]
+ public string? Description { get; set; }
+
+ [XmlElement("notes")]
+ public string? Notes { get; set; }
+
+ [XmlElement("software")]
+ public Software[] Software { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.sln b/SabreTools.sln
index 0f3dc615..c058564c 100644
--- a/SabreTools.sln
+++ b/SabreTools.sln
@@ -38,6 +38,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Reports", "Sabre
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Test", "SabreTools.Test\SabreTools.Test.csproj", "{5B4E67D5-F4DA-4750-8FE2-04D08E343791}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Models", "SabreTools.Models\SabreTools.Models.csproj", "{EF2EFD36-B6C4-4555-8604-2DDCA3AD6518}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -158,6 +160,14 @@ Global
{5B4E67D5-F4DA-4750-8FE2-04D08E343791}.Release|Any CPU.Build.0 = Release|Any CPU
{5B4E67D5-F4DA-4750-8FE2-04D08E343791}.Release|x64.ActiveCfg = Release|Any CPU
{5B4E67D5-F4DA-4750-8FE2-04D08E343791}.Release|x64.Build.0 = Release|Any CPU
+ {EF2EFD36-B6C4-4555-8604-2DDCA3AD6518}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EF2EFD36-B6C4-4555-8604-2DDCA3AD6518}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EF2EFD36-B6C4-4555-8604-2DDCA3AD6518}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {EF2EFD36-B6C4-4555-8604-2DDCA3AD6518}.Debug|x64.Build.0 = Debug|Any CPU
+ {EF2EFD36-B6C4-4555-8604-2DDCA3AD6518}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EF2EFD36-B6C4-4555-8604-2DDCA3AD6518}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EF2EFD36-B6C4-4555-8604-2DDCA3AD6518}.Release|x64.ActiveCfg = Release|Any CPU
+ {EF2EFD36-B6C4-4555-8604-2DDCA3AD6518}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE