├── .gitattributes
├── .gitignore
├── YMapExporter.sln
└── YMapExporter
├── App.config
├── HashMap.cs
├── MapEditorMap.cs
├── Program.cs
├── Properties
├── AssemblyInfo.cs
├── Resources.Designer.cs
├── Resources.resx
├── Settings.Designer.cs
└── Settings.settings
├── QuaternionExtensions.cs
├── SpoonerPlacements.cs
├── YMap.cs
├── YMapExporter.Designer.cs
├── YMapExporter.cs
├── YMapExporter.csproj
├── YMapExporter.resx
├── icon.ico
└── packages.config
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 |
4 | # User-specific files
5 | *.suo
6 | *.user
7 | *.userosscache
8 | *.sln.docstates
9 |
10 | # User-specific files (MonoDevelop/Xamarin Studio)
11 | *.userprefs
12 |
13 | # Build results
14 | [Dd]ebug/
15 | [Dd]ebugPublic/
16 | [Rr]elease/
17 | [Rr]eleases/
18 | x64/
19 | x86/
20 | bld/
21 | [Bb]in/
22 | [Oo]bj/
23 | [Ll]og/
24 |
25 | # Visual Studio 2015 cache/options directory
26 | .vs/
27 | # Uncomment if you have tasks that create the project's static files in wwwroot
28 | #wwwroot/
29 |
30 | # MSTest test Results
31 | [Tt]est[Rr]esult*/
32 | [Bb]uild[Ll]og.*
33 |
34 | # NUNIT
35 | *.VisualState.xml
36 | TestResult.xml
37 |
38 | # Build Results of an ATL Project
39 | [Dd]ebugPS/
40 | [Rr]eleasePS/
41 | dlldata.c
42 |
43 | # DNX
44 | project.lock.json
45 | project.fragment.lock.json
46 | artifacts/
47 |
48 | *_i.c
49 | *_p.c
50 | *_i.h
51 | *.ilk
52 | *.meta
53 | *.obj
54 | *.pch
55 | *.pdb
56 | *.pgc
57 | *.pgd
58 | *.rsp
59 | *.sbr
60 | *.tlb
61 | *.tli
62 | *.tlh
63 | *.tmp
64 | *.tmp_proj
65 | *.log
66 | *.vspscc
67 | *.vssscc
68 | .builds
69 | *.pidb
70 | *.svclog
71 | *.scc
72 |
73 | # Chutzpah Test files
74 | _Chutzpah*
75 |
76 | # Visual C++ cache files
77 | ipch/
78 | *.aps
79 | *.ncb
80 | *.opendb
81 | *.opensdf
82 | *.sdf
83 | *.cachefile
84 | *.VC.db
85 | *.VC.VC.opendb
86 |
87 | # Visual Studio profiler
88 | *.psess
89 | *.vsp
90 | *.vspx
91 | *.sap
92 |
93 | # TFS 2012 Local Workspace
94 | $tf/
95 |
96 | # Guidance Automation Toolkit
97 | *.gpState
98 |
99 | # ReSharper is a .NET coding add-in
100 | _ReSharper*/
101 | *.[Rr]e[Ss]harper
102 | *.DotSettings.user
103 |
104 | # JustCode is a .NET coding add-in
105 | .JustCode
106 |
107 | # TeamCity is a build add-in
108 | _TeamCity*
109 |
110 | # DotCover is a Code Coverage Tool
111 | *.dotCover
112 |
113 | # NCrunch
114 | _NCrunch_*
115 | .*crunch*.local.xml
116 | nCrunchTemp_*
117 |
118 | # MightyMoose
119 | *.mm.*
120 | AutoTest.Net/
121 |
122 | # Web workbench (sass)
123 | .sass-cache/
124 |
125 | # Installshield output folder
126 | [Ee]xpress/
127 |
128 | # DocProject is a documentation generator add-in
129 | DocProject/buildhelp/
130 | DocProject/Help/*.HxT
131 | DocProject/Help/*.HxC
132 | DocProject/Help/*.hhc
133 | DocProject/Help/*.hhk
134 | DocProject/Help/*.hhp
135 | DocProject/Help/Html2
136 | DocProject/Help/html
137 |
138 | # Click-Once directory
139 | publish/
140 |
141 | # Publish Web Output
142 | *.[Pp]ublish.xml
143 | *.azurePubxml
144 | # TODO: Comment the next line if you want to checkin your web deploy settings
145 | # but database connection strings (with potential passwords) will be unencrypted
146 | #*.pubxml
147 | *.publishproj
148 |
149 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
150 | # checkin your Azure Web App publish settings, but sensitive information contained
151 | # in these scripts will be unencrypted
152 | PublishScripts/
153 |
154 | # NuGet Packages
155 | *.nupkg
156 | # The packages folder can be ignored because of Package Restore
157 | **/packages/*
158 | # except build/, which is used as an MSBuild target.
159 | !**/packages/build/
160 | # Uncomment if necessary however generally it will be regenerated when needed
161 | #!**/packages/repositories.config
162 | # NuGet v3's project.json files produces more ignoreable files
163 | *.nuget.props
164 | *.nuget.targets
165 |
166 | # Microsoft Azure Build Output
167 | csx/
168 | *.build.csdef
169 |
170 | # Microsoft Azure Emulator
171 | ecf/
172 | rcf/
173 |
174 | # Windows Store app package directories and files
175 | AppPackages/
176 | BundleArtifacts/
177 | Package.StoreAssociation.xml
178 | _pkginfo.txt
179 |
180 | # Visual Studio cache files
181 | # files ending in .cache can be ignored
182 | *.[Cc]ache
183 | # but keep track of directories ending in .cache
184 | !*.[Cc]ache/
185 |
186 | # Others
187 | ClientBin/
188 | ~$*
189 | *~
190 | *.dbmdl
191 | *.dbproj.schemaview
192 | *.jfm
193 | *.pfx
194 | *.publishsettings
195 | node_modules/
196 | orleans.codegen.cs
197 |
198 | # Since there are multiple workflows, uncomment next line to ignore bower_components
199 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
200 | #bower_components/
201 |
202 | # RIA/Silverlight projects
203 | Generated_Code/
204 |
205 | # Backup & report files from converting an old project file
206 | # to a newer Visual Studio version. Backup files are not needed,
207 | # because we have git ;-)
208 | _UpgradeReport_Files/
209 | Backup*/
210 | UpgradeLog*.XML
211 | UpgradeLog*.htm
212 |
213 | # SQL Server files
214 | *.mdf
215 | *.ldf
216 |
217 | # Business Intelligence projects
218 | *.rdl.data
219 | *.bim.layout
220 | *.bim_*.settings
221 |
222 | # Microsoft Fakes
223 | FakesAssemblies/
224 |
225 | # GhostDoc plugin setting file
226 | *.GhostDoc.xml
227 |
228 | # Node.js Tools for Visual Studio
229 | .ntvs_analysis.dat
230 |
231 | # Visual Studio 6 build log
232 | *.plg
233 |
234 | # Visual Studio 6 workspace options file
235 | *.opt
236 |
237 | # Visual Studio LightSwitch build output
238 | **/*.HTMLClient/GeneratedArtifacts
239 | **/*.DesktopClient/GeneratedArtifacts
240 | **/*.DesktopClient/ModelManifest.xml
241 | **/*.Server/GeneratedArtifacts
242 | **/*.Server/ModelManifest.xml
243 | _Pvt_Extensions
244 |
245 | # Paket dependency manager
246 | .paket/paket.exe
247 | paket-files/
248 |
249 | # FAKE - F# Make
250 | .fake/
251 |
252 | # JetBrains Rider
253 | .idea/
254 | *.sln.iml
255 |
256 | # CodeRush
257 | .cr/
258 |
259 | # Python Tools for Visual Studio (PTVS)
260 | __pycache__/
261 | *.pyc
--------------------------------------------------------------------------------
/YMapExporter.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | VisualStudioVersion = 15.0.26430.14
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YMapExporter", "YMapExporter\YMapExporter.csproj", "{FA3C3F9E-0A66-43C1-B87B-175F0DCEF128}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {FA3C3F9E-0A66-43C1-B87B-175F0DCEF128}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {FA3C3F9E-0A66-43C1-B87B-175F0DCEF128}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {FA3C3F9E-0A66-43C1-B87B-175F0DCEF128}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {FA3C3F9E-0A66-43C1-B87B-175F0DCEF128}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | EndGlobal
23 |
--------------------------------------------------------------------------------
/YMapExporter/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/YMapExporter/MapEditorMap.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Xml.Serialization;
3 | using SlimDX;
4 |
5 | namespace YMapExporter
6 | {
7 | public enum MapObjectTypes
8 | {
9 | Prop,
10 | Vehicle,
11 | Ped,
12 | Marker
13 | }
14 |
15 | [XmlRoot("Map")]
16 | public class MapEditorMap
17 | {
18 | public List Objects { get; set; }
19 |
20 | public MapMetaData MetaData { get; set; } = new MapMetaData();
21 | }
22 |
23 | public class MapObject
24 | {
25 | public string Id { get; set; }
26 |
27 | public MapObjectTypes Type { get; set; }
28 |
29 | public Vector3 Position { get; set; }
30 |
31 | public Vector3 Rotation { get; set; }
32 |
33 | public int Hash { get; set; }
34 |
35 | public bool Dynamic { get; set; }
36 |
37 | public Quaternion Quaternion { get; set; }
38 |
39 | public bool Door { get; set; }
40 | }
41 |
42 | public class MapMetaData
43 | {
44 | public string Creator { get; set; }
45 |
46 | public string Name { get; set; }
47 |
48 | public string Description { get; set; }
49 | }
50 | }
--------------------------------------------------------------------------------
/YMapExporter/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 |
4 | namespace YMapExporter
5 | {
6 | internal static class Program
7 | {
8 | ///
9 | /// The main entry point for the application.
10 | ///
11 | [STAThread]
12 | private static void Main(string[] args)
13 | {
14 | Application.EnableVisualStyles();
15 | Application.SetCompatibleTextRenderingDefault(false);
16 | if (args.Length == 1)
17 | {
18 | Application.Run(new YMapExporter(args[0]));
19 | }
20 | else
21 | {
22 | Application.Run(new YMapExporter(""));
23 | }
24 | }
25 | }
26 | }
--------------------------------------------------------------------------------
/YMapExporter/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Resources;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("Map Editor to YMap Converter")]
9 | [assembly: AssemblyDescription("Edit and export ymap files, and convert map editor files to ymap.")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Soloman Northrop Development")]
12 | [assembly: AssemblyProduct("YMapExporter")]
13 | [assembly: AssemblyCopyright("Soloman Northrop © 2017")]
14 | [assembly: AssemblyTrademark("N/A")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("fa3c3f9e-0a66-43c1-b87b-175f0dcef128")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.4.0")]
37 | [assembly: NeutralResourcesLanguage("en")]
--------------------------------------------------------------------------------
/YMapExporter/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace YMapExporter.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Returns the cached ResourceManager instance used by this class.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("YMapExporter.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Overrides the current thread's CurrentUICulture property for all
51 | /// resource lookups using this strongly typed resource class.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/YMapExporter/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/YMapExporter/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace YMapExporter.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.4.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/YMapExporter/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/YMapExporter/QuaternionExtensions.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using SlimDX;
3 |
4 | namespace YMapExporter
5 | {
6 | ///
7 | /// Source: Codewalker (c) 2017
8 | ///
9 | public static class QuaternionExtensions
10 | {
11 | public static Vector3 Multiply(this Quaternion a, Vector3 b)
12 | {
13 | var axx = a.X * 2.0f;
14 | var ayy = a.Y * 2.0f;
15 | var azz = a.Z * 2.0f;
16 | var awxx = a.W * axx;
17 | var awyy = a.W * ayy;
18 | var awzz = a.W * azz;
19 | var axxx = a.X * axx;
20 | var axyy = a.X * ayy;
21 | var axzz = a.X * azz;
22 | var ayyy = a.Y * ayy;
23 | var ayzz = a.Y * azz;
24 | var azzz = a.Z * azz;
25 | return new Vector3(b.X * (1.0f - ayyy - azzz) + b.Y * (axyy - awzz) + b.Z * (axzz + awyy),
26 | b.X * (axyy + awzz) + b.Y * (1.0f - axxx - azzz) + b.Z * (ayzz - awxx),
27 | b.X * (axzz - awyy) + b.Y * (ayzz + awxx) + b.Z * (1.0f - axxx - ayyy));
28 | }
29 |
30 | //public static Quaternion ToQuaternion(this Vector3 vect)
31 | //{
32 | // vect = new Vector3
33 | // {
34 | // X = vect.X.Denormalize() * -1f,
35 | // Y = vect.Y.Denormalize() - 180f,
36 | // Z = vect.Z.Denormalize() - 180f
37 | // };
38 |
39 | // vect = vect.TransformVector(ToRadians);
40 |
41 | // var rollOver2 = vect.Z * 0.5f;
42 | // var sinRollOver2 = (float) Math.Sin(rollOver2);
43 | // var cosRollOver2 = (float) Math.Cos(rollOver2);
44 | // var pitchOver2 = vect.Y * 0.5f;
45 | // var sinPitchOver2 = (float) Math.Sin(pitchOver2);
46 | // var cosPitchOver2 = (float) Math.Cos(pitchOver2);
47 | // var yawOver2 = vect.X * 0.5f; // pitch
48 | // var sinYawOver2 = (float) Math.Sin(yawOver2);
49 | // var cosYawOver2 = (float) Math.Cos(yawOver2);
50 | // var result = new Quaternion
51 | // {
52 | // X = cosYawOver2 * cosPitchOver2 * cosRollOver2 + sinYawOver2 * sinPitchOver2 * sinRollOver2,
53 | // Y = cosYawOver2 * cosPitchOver2 * sinRollOver2 - sinYawOver2 * sinPitchOver2 * cosRollOver2,
54 | // Z = cosYawOver2 * sinPitchOver2 * cosRollOver2 + sinYawOver2 * cosPitchOver2 * sinRollOver2,
55 | // W = sinYawOver2 * cosPitchOver2 * cosRollOver2 - cosYawOver2 * sinPitchOver2 * sinRollOver2
56 | // };
57 | // return result;
58 | //}
59 |
60 | //public static float Denormalize(this float h)
61 | //{
62 | // return h < 0f ? h + 360f : h;
63 | //}
64 |
65 | //public static Vector3 Denormalize(this Vector3 v)
66 | //{
67 | // return new Vector3(v.X.Denormalize(), v.Y.Denormalize(), v.Z.Denormalize());
68 | //}
69 |
70 | //public static Vector3 TransformVector(this Vector3 i, Func method)
71 | //{
72 | // return new Vector3
73 | // {
74 | // X = method(i.X),
75 | // Y = method(i.Y),
76 | // Z = method(i.Z)
77 | // };
78 | //}
79 |
80 | //public static float ToRadians(this float val)
81 | //{
82 | // return (float) (Math.PI / 180) * val;
83 | //}
84 |
85 | public static Quaternion Euler (this Vector3 euler)
86 | {
87 | var eulerRad = euler * (float)(Math.PI / 180.0);
88 | return RotationYawPitchRoll(eulerRad.X, eulerRad.Y, eulerRad.Z);
89 | }
90 |
91 | public static Quaternion RotationYawPitchRoll(float yaw, float pitch, float roll)
92 | {
93 | Quaternion result;
94 |
95 | var halfRoll = roll * 0.5f;
96 | var sinRoll = (float)(Math.Sin(halfRoll));
97 | var cosRoll = (float)(Math.Cos(halfRoll));
98 | var halfPitch = pitch * 0.5f;
99 | var sinPitch = (float)(Math.Sin(halfPitch));
100 | var cosPitch = (float)(Math.Cos(halfPitch));
101 | var halfYaw = yaw * 0.5f;
102 | var sinYaw = (float)(Math.Sin(halfYaw));
103 | var cosYaw = (float)(Math.Cos(halfYaw));
104 |
105 | result.X = (cosYaw* sinPitch * cosRoll) + (sinYaw* cosPitch * sinRoll);
106 | result.Y = (sinYaw* cosPitch * cosRoll) - (cosYaw* sinPitch * sinRoll);
107 | result.Z = (cosYaw* cosPitch * sinRoll) - (sinYaw* sinPitch * cosRoll);
108 | result.W = (cosYaw* cosPitch * cosRoll) + (sinYaw* sinPitch * sinRoll);
109 |
110 | return result;
111 | }
112 | }
113 | }
--------------------------------------------------------------------------------
/YMapExporter/SpoonerPlacements.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Xml.Serialization;
3 | using SlimDX;
4 |
5 | namespace YMapExporter
6 | {
7 | public class SpoonerPlacements
8 | {
9 | public object Note { get; set; }
10 |
11 | public object AudioFile { get; set; }
12 |
13 | public object ClearDatabase { get; set; }
14 |
15 | public object ClearMarkers { get; set; }
16 |
17 | [XmlElement("IPLsToLoad")]
18 | public object IpLsToLoad { get; set; }
19 |
20 | [XmlElement("IPLsToRemove")]
21 | public object IpLsToRemove { get; set; }
22 |
23 | public object InteriorsToEnable { get; set; }
24 |
25 | public object InteriorsToCap { get; set; }
26 |
27 | public object WeatherToSet { get; set; }
28 |
29 | public object StartTaskSequencesOnLoad { get; set; }
30 |
31 | public object ImgLoadingCoords { get; set; }
32 |
33 | public object ReferenceCoords { get; set; }
34 |
35 | [XmlElement("Placement")]
36 | public List Placements { get; set; }
37 | }
38 |
39 | public class Placement
40 | {
41 | public string ModelHash { get; set; }
42 |
43 | public int Type { get; set; }
44 |
45 | public bool Dynamic { get; set; }
46 |
47 | public bool FrozenPos { get; set; }
48 |
49 | public string HashName { get; set; }
50 |
51 | public int InitialHandle { get; set; }
52 |
53 | public object ObjectProperties { get; set; }
54 |
55 | public int OpacityLevel { get; set; }
56 |
57 | public int LodDistance { get; set; }
58 |
59 | public bool IsVisible { get; set; }
60 |
61 | public int MaxHealth { get; set; }
62 |
63 | public int Health { get; set; }
64 |
65 | public bool HasGravity { get; set; }
66 |
67 | public bool IsOnFire { get; set; }
68 |
69 | public bool IsInvincible { get; set; }
70 |
71 | public bool IsBulletProof { get; set; }
72 |
73 | public bool IsCollisionProof { get; set; }
74 |
75 | public bool IsExplosionProof { get; set; }
76 |
77 | public bool IsFireProof { get; set; }
78 |
79 | public bool IsMeleeProof { get; set; }
80 |
81 | public bool IsOnlyDamagedByPlayer { get; set; }
82 |
83 | public PositionRotation PositionRotation { get; set; }
84 |
85 | public object Attachment { get; set; }
86 |
87 | public object PedProperties { get; set; }
88 |
89 | public object VehicleProperties { get; set; }
90 | }
91 |
92 | public class PositionRotation
93 | {
94 | public float X { get; set; }
95 |
96 | public float Y { get; set; }
97 |
98 | public float Z { get; set; }
99 |
100 | public float Pitch { get; set; }
101 |
102 | public float Roll { get; set; }
103 |
104 | public float Yaw { get; set; }
105 |
106 | public Vector3 GetPosition()
107 | {
108 | return new Vector3(X, Y, Z);
109 | }
110 |
111 | public Quaternion GetQuaternion()
112 | {
113 | var v = new Vector3(Roll, Pitch, Yaw);
114 | v = Vector3.Negate(v);
115 | var eul = v.Euler();
116 |
117 | return eul;
118 | }
119 | }
120 | }
--------------------------------------------------------------------------------
/YMapExporter/YMap.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Globalization;
5 | using System.Xml;
6 | using System.Xml.Serialization;
7 |
8 | namespace YMapExporter
9 | {
10 | public enum EntityTypes
11 | {
12 | CEntityDef,
13 | CMloInstanceDef
14 | }
15 |
16 | public enum LodLevels
17 | {
18 | LODTYPES_DEPTH_LOD,
19 | LODTYPES_DEPTH_SLOD1,
20 | LODTYPES_DEPTH_ORPHANHD,
21 | LODTYPES_DEPTH_HD
22 | }
23 |
24 | public enum PriorityLevels
25 | {
26 | PRI_REQUIRED
27 | }
28 |
29 | [XmlRoot("CMapData")]
30 | public class YMap
31 | {
32 | [XmlElement("name", IsNullable = true, Namespace = "")]
33 | [Category("Info")]
34 | public string Name { get; set; }
35 |
36 | [XmlElement("parent", IsNullable = true, Namespace = "")]
37 | [Category("Info")]
38 | [DisplayName("Parent YMap")]
39 | public string Parent { get; set; }
40 |
41 | [XmlElement("flags")]
42 | [Category("Info")]
43 | public XmlValue Flags { get; set; }
44 |
45 | [XmlElement("contentFlags")]
46 | [Category("Info")]
47 | [DisplayName("Content Flags")]
48 | public XmlValue ContentFlags { get; set; } = new XmlValue(65);
49 |
50 | [XmlElement("streamingExtentsMin")]
51 | public XmlVector3 StreamingExtenstsMin { get; set; } = new XmlVector3();
52 |
53 | [XmlElement("streamingExtentsMax")]
54 | public XmlVector3 StreamingExtenstsMax { get; set; } = new XmlVector3();
55 |
56 | [XmlElement("entitiesExtentsMin")]
57 | public XmlVector3 EntitiesExtenstsMin { get; set; } = new XmlVector3();
58 |
59 | [XmlElement("entitiesExtentsMax")]
60 | public XmlVector3 EntitiesExtenstsMax { get; set; } = new XmlVector3();
61 |
62 | [XmlArrayItem(ElementName = "Item", Type = typeof(Entity))]
63 | [XmlArray("entities")]
64 | [Category("Collections")]
65 | public List Entities { get; set; } = new List();
66 |
67 | [XmlElement("containerLods")]
68 | [Browsable(false)]
69 | public object ContainerLods { get; set; } = new object();
70 |
71 | [XmlElement("boxOccluders")]
72 | [Browsable(false)]
73 | public object BoxOccluders { get; set; } = new object();
74 |
75 | [XmlElement("occludeModels")]
76 | [Browsable(false)]
77 | public object OccludeModels { get; set; } = new object();
78 |
79 | [XmlElement("physicsDictionaries")]
80 | [Browsable(false)]
81 | public object PhysicsDictionaries { get; set; } = new object();
82 |
83 | [XmlElement("instancedData")]
84 | [Browsable(false)]
85 | public object InstancedData { get; set; } = new object();
86 |
87 | [XmlArrayItem(ElementName = "Item", Type = typeof(TimeCycleModifier))]
88 | [XmlArray("timeCycleModifiers")]
89 | [Category("Collections")]
90 | [DisplayName("TimeCycle Modifiers")]
91 | public List TimeCycleModifiers { get; set; } = new List();
92 |
93 | [XmlArrayItem(ElementName = "Item", Type = typeof(CarGenerator))]
94 | [XmlArray("carGenerators")]
95 | [Category("Collections")]
96 | [DisplayName("Vehicle Generators")]
97 | public List CarGenerators { get; set; } = new List();
98 |
99 | [Browsable(false)]
100 | public object LodLightsSoa { get; set; } = new object();
101 |
102 | [Browsable(false)]
103 | public object DistantLodLightsSoa { get; set; } = new object();
104 |
105 | [XmlElement("block")]
106 | [Category("MetaData")]
107 | [DisplayName("Meta Data")]
108 | public MetaDataBlock MetaDataBlock { get; set; } = new MetaDataBlock();
109 | //public XVector CustomOrigin { get; set; } = new XVector();
110 | //[Category("Ytyp Support")]
111 |
112 | //[XmlIgnore]
113 | }
114 |
115 | [TypeConverter(typeof(XValueConverter))]
116 | public struct XmlValue where T : struct
117 | {
118 | public XmlValue(T value)
119 | {
120 | Value = value;
121 | }
122 |
123 | [XmlAttribute("value")]
124 | public T Value { get; set; }
125 |
126 | public override string ToString()
127 | {
128 | return Value.ToString();
129 | }
130 | }
131 |
132 | public class XValueConverter : TypeConverter
133 | {
134 | public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
135 | {
136 | if (sourceType == typeof(string))
137 | return true;
138 |
139 | return base.CanConvertFrom(context, sourceType);
140 | }
141 |
142 | public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
143 | {
144 | if (!(value is string)) return base.ConvertFrom(context, culture, value);
145 | if (context.PropertyDescriptor == null) return base.ConvertFrom(context, culture, value);
146 | var t = context.PropertyDescriptor.PropertyType;
147 | if (t == typeof(XmlValue) && int.TryParse((string) value, out int intValue))
148 | return new XmlValue(intValue);
149 | if (t == typeof(XmlValue) && float.TryParse((string) value, out float floatValue))
150 | return new XmlValue(floatValue);
151 | if (t == typeof(XmlValue) && long.TryParse((string) value, out long int64Value))
152 | return new XmlValue(int64Value);
153 |
154 | return base.ConvertFrom(context, culture, value);
155 | }
156 |
157 | public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value,
158 | Type destinationType)
159 | {
160 | if (destinationType == typeof(string))
161 | return value.ToString();
162 |
163 | return base.ConvertTo(context, culture, value, destinationType);
164 | }
165 | }
166 |
167 | [TypeConverter(typeof(ExpandableObjectConverter))]
168 | [Category("Render")]
169 | public class XmlVector3
170 | {
171 | public XmlVector3()
172 | {
173 | }
174 |
175 | public XmlVector3(float x, float y, float z)
176 | {
177 | X = x;
178 | Y = y;
179 | Z = z;
180 | }
181 |
182 | [Browsable(false)]
183 | public bool IsEmpty => X == 0 && Y == 0 && Z == 0;
184 |
185 | [XmlAttribute("x")]
186 | [RefreshProperties(RefreshProperties.All)]
187 | public float X { get; set; }
188 |
189 | [XmlAttribute("y")]
190 | [RefreshProperties(RefreshProperties.All)]
191 | public float Y { get; set; }
192 |
193 | [XmlAttribute("z")]
194 | [RefreshProperties(RefreshProperties.All)]
195 | public float Z { get; set; }
196 |
197 | public override string ToString()
198 | {
199 | return $"X:{X} Y:{Y} Z:{Z}";
200 | }
201 | }
202 |
203 | [TypeConverter(typeof(ExpandableObjectConverter))]
204 | [Category("Render")]
205 | public class XmlQuaternion
206 | {
207 | public XmlQuaternion()
208 | {
209 | }
210 |
211 | public XmlQuaternion(float x, float y, float z, float w)
212 | {
213 | X = x;
214 | Y = y;
215 | Z = z;
216 | W = w;
217 | }
218 |
219 | [XmlAttribute("x")]
220 | [RefreshProperties(RefreshProperties.All)]
221 | public float X { get; set; }
222 |
223 | [XmlAttribute("y")]
224 | [RefreshProperties(RefreshProperties.All)]
225 | public float Y { get; set; }
226 |
227 | [XmlAttribute("z")]
228 | [RefreshProperties(RefreshProperties.All)]
229 | public float Z { get; set; }
230 |
231 | [XmlAttribute("w")]
232 | [RefreshProperties(RefreshProperties.All)]
233 | public float W { get; set; }
234 |
235 | public override string ToString()
236 | {
237 | return $"X:{X} Y:{Y} Z:{Z} W:{W}";
238 | }
239 | }
240 |
241 | [Category("Collections")]
242 | [XmlType(TypeName = "Item")]
243 | public class Entity
244 | {
245 | [XmlElement("archetypeName")]
246 | [Category("Info")]
247 | public string ArchetypeName { get; set; }
248 |
249 | [XmlAttribute("type")]
250 | [Category("Info")]
251 | public EntityTypes Type { get; set; }
252 |
253 | [XmlElement("flags")]
254 | [Category("Info")]
255 | public XmlValue Flags { get; set; } = new XmlValue(1572865);
256 |
257 | [XmlElement("guid")]
258 | [Category("Info")]
259 | public XmlValue Guid { get; set; }
260 |
261 | [XmlElement("position")]
262 | [Category("Info")]
263 | public XmlVector3 Position { get; set; } = new XmlVector3();
264 |
265 | [XmlElement("rotation")]
266 | [Category("Info")]
267 | public XmlQuaternion Rotation { get; set; } = new XmlQuaternion();
268 |
269 | [XmlElement("scaleXY")]
270 | [Category("Render")]
271 | public XmlValue ScaleXy { get; set; } = new XmlValue(1);
272 |
273 | [XmlElement("scaleZ")]
274 | [Category("Render")]
275 | public XmlValue ScaleZ { get; set; } = new XmlValue(1);
276 |
277 | [XmlElement("parentIndex")]
278 | public XmlValue ParentIndex { get; set; } = new XmlValue(-1);
279 |
280 | [XmlElement("lodDist")]
281 | [Category("Render")]
282 | public XmlValue LodDistance { get; set; } = new XmlValue(500);
283 |
284 | [XmlElement("childLodDist")]
285 | [Category("Render")]
286 | public XmlValue ChildLodDistance { get; set; } = new XmlValue(500);
287 |
288 | [XmlElement("lodLevel")]
289 | [Category("Render")]
290 | public LodLevels LodLevel { get; set; } = LodLevels.LODTYPES_DEPTH_HD;
291 |
292 | [XmlElement("numChildren")]
293 | public XmlValue NumChildren { get; set; }
294 |
295 | [XmlElement("priorityLevel")]
296 | public PriorityLevels PriorityLevel { get; set; }
297 |
298 | [XmlElement("extensions")]
299 | [Browsable(false)]
300 | public object Extensions { get; set; }
301 |
302 | [XmlElement("ambientOcclusionMultiplier")]
303 | [Category("Render")]
304 | public XmlValue AmbientOcclusionMultiplier { get; set; } = new XmlValue(255);
305 |
306 | [XmlElement("artificialAmbientOcclusion")]
307 | [Category("Render")]
308 | public XmlValue ArtificialAmbientOcclusion { get; set; } = new XmlValue(255);
309 |
310 | [XmlElement("tintValue")]
311 | [Category("Render")]
312 | public XmlValue TintValue { get; set; }
313 |
314 | public override string ToString()
315 | {
316 | return ArchetypeName ?? base.ToString();
317 | }
318 | }
319 |
320 | [Category("Collections")]
321 | public class TimeCycleModifier
322 | {
323 | [XmlElement("name")]
324 | public string Name { get; set; }
325 |
326 | [XmlElement("minExtents")]
327 | public XmlVector3 MinExtents { get; set; } = new XmlVector3();
328 |
329 | [XmlElement("maxExtents")]
330 | public XmlVector3 MaxExtents { get; set; } = new XmlVector3();
331 |
332 | [XmlElement("percentage")]
333 | public XmlValue Percentage { get; set; }
334 |
335 | [XmlElement("range")]
336 | public XmlValue Range { get; set; }
337 |
338 | [XmlElement("startHour")]
339 | public XmlValue StartHour { get; set; } = new XmlValue(0);
340 |
341 | [XmlElement("endHour")]
342 | public XmlValue EndHour { get; set; } = new XmlValue(23);
343 | }
344 |
345 | [Category("Collections")]
346 | public class CarGenerator
347 | {
348 | [XmlElement("popGroup")] public object PopGroup = new object();
349 |
350 | [XmlElement("position")]
351 | public XmlVector3 Position { get; set; } = new XmlVector3();
352 |
353 | [XmlElement("orientX")]
354 | public XmlValue OrientationX { get; set; }
355 |
356 | [XmlElement("orientY")]
357 | public XmlValue OrientationY { get; set; }
358 |
359 | [XmlElement("perpendicularLength")]
360 | public XmlValue PerpendicularLength { get; set; } = new XmlValue(1.5f);
361 |
362 | [XmlElement("carModel")]
363 | public string CarModel { get; set; }
364 |
365 | [XmlElement("flags")]
366 | public XmlValue Flags { get; set; } = new XmlValue(3680);
367 |
368 | [XmlElement("bodyColorRemap1")]
369 | public XmlValue BodyColorRemap1 { get; set; } = new XmlValue(-1);
370 |
371 | [XmlElement("bodyColorRemap2")]
372 | public XmlValue BodyColorRemap2 { get; set; } = new XmlValue(-1);
373 |
374 | [XmlElement("bodyColorRemap3")]
375 | public XmlValue BodyColorRemap3 { get; set; } = new XmlValue(-1);
376 |
377 | [XmlElement("bodyColorRemap4")]
378 | public XmlValue BodyColorRemap4 { get; set; } = new XmlValue(-1);
379 |
380 | [XmlElement("livery")]
381 | public XmlValue Livery { get; set; } = new XmlValue(-1);
382 |
383 | public override string ToString()
384 | {
385 | return CarModel ?? base.ToString();
386 | }
387 | }
388 |
389 | [TypeConverter(typeof(ExpandableObjectConverter))]
390 | public class MetaDataBlock
391 | {
392 | private const string DateTimeFormat = "dd MMMM yyyy H:mm";
393 |
394 | [XmlElement("version")]
395 | public XmlValue Version { get; set; }
396 |
397 | [XmlElement("flags")]
398 | public XmlValue Flags { get; set; }
399 |
400 | [XmlElement("name")]
401 | public string Name { get; set; }
402 |
403 | [XmlElement("exportedBy")]
404 | public string Author { get; set; }
405 |
406 | [XmlElement("owner")]
407 | public string Owner { get; set; }
408 |
409 | [XmlIgnore]
410 | public DateTime Time { get; set; } = DateTime.Now;
411 |
412 | [XmlElement("time")]
413 | [Browsable(false)]
414 | public string TimeString
415 | {
416 | get => Time.ToString(DateTimeFormat);
417 | set => Time = XmlConvert.ToDateTime(value, DateTimeFormat);
418 | }
419 |
420 | public override string ToString()
421 | {
422 | return Author ?? "No author specified...";
423 | }
424 | }
425 | }
--------------------------------------------------------------------------------
/YMapExporter/YMapExporter.Designer.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel;
2 | using System.Windows.Forms;
3 |
4 | namespace YMapExporter
5 | {
6 | partial class YMapExporter
7 | {
8 | ///
9 | /// Required designer variable.
10 | ///
11 | private IContainer components = null;
12 |
13 | ///
14 | /// Clean up any resources being used.
15 | ///
16 | /// true if managed resources should be disposed; otherwise, false.
17 | protected override void Dispose(bool disposing)
18 | {
19 | if (disposing && (components != null))
20 | {
21 | components.Dispose();
22 | }
23 | base.Dispose(disposing);
24 | }
25 |
26 | #region Windows Form Designer generated code
27 |
28 | ///
29 | /// Required method for Designer support - do not modify
30 | /// the contents of this method with the code editor.
31 | ///
32 | private void InitializeComponent()
33 | {
34 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(YMapExporter));
35 | this.menuStrip1 = new System.Windows.Forms.MenuStrip();
36 | this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
37 | this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
38 | this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
39 | this.exportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
40 | this.quitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
41 | this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
42 | this.calculateExtentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
43 | this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
44 | this.propertyGrid1 = new System.Windows.Forms.PropertyGrid();
45 | this.label1 = new System.Windows.Forms.Label();
46 | this.menuStrip1.SuspendLayout();
47 | this.tableLayoutPanel1.SuspendLayout();
48 | this.SuspendLayout();
49 | //
50 | // menuStrip1
51 | //
52 | this.menuStrip1.BackColor = System.Drawing.SystemColors.WindowFrame;
53 | this.menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);
54 | this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
55 | this.fileToolStripMenuItem,
56 | this.editToolStripMenuItem});
57 | this.menuStrip1.Location = new System.Drawing.Point(0, 0);
58 | this.menuStrip1.Name = "menuStrip1";
59 | this.menuStrip1.Padding = new System.Windows.Forms.Padding(4, 2, 0, 2);
60 | this.menuStrip1.Size = new System.Drawing.Size(666, 24);
61 | this.menuStrip1.TabIndex = 1;
62 | this.menuStrip1.Text = "menuStrip1";
63 | //
64 | // fileToolStripMenuItem
65 | //
66 | this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
67 | this.newToolStripMenuItem,
68 | this.openToolStripMenuItem,
69 | this.exportToolStripMenuItem,
70 | this.quitToolStripMenuItem});
71 | this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
72 | this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
73 | this.fileToolStripMenuItem.Text = "File";
74 | //
75 | // newToolStripMenuItem
76 | //
77 | this.newToolStripMenuItem.Name = "newToolStripMenuItem";
78 | this.newToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N)));
79 | this.newToolStripMenuItem.Size = new System.Drawing.Size(148, 22);
80 | this.newToolStripMenuItem.Text = "New";
81 | this.newToolStripMenuItem.Click += new System.EventHandler(this.NewToolStripMenuItem_Click);
82 | //
83 | // openToolStripMenuItem
84 | //
85 | this.openToolStripMenuItem.Name = "openToolStripMenuItem";
86 | this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
87 | this.openToolStripMenuItem.Size = new System.Drawing.Size(148, 22);
88 | this.openToolStripMenuItem.Text = "Open";
89 | this.openToolStripMenuItem.Click += new System.EventHandler(this.OpenToolStripMenuItem_Click);
90 | //
91 | // exportToolStripMenuItem
92 | //
93 | this.exportToolStripMenuItem.Name = "exportToolStripMenuItem";
94 | this.exportToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.E)));
95 | this.exportToolStripMenuItem.Size = new System.Drawing.Size(148, 22);
96 | this.exportToolStripMenuItem.Text = "Export";
97 | this.exportToolStripMenuItem.ToolTipText = "Export this ymap to openFormats.";
98 | this.exportToolStripMenuItem.Click += new System.EventHandler(this.ExportToolStripMenuItem_Click);
99 | //
100 | // quitToolStripMenuItem
101 | //
102 | this.quitToolStripMenuItem.Name = "quitToolStripMenuItem";
103 | this.quitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4)));
104 | this.quitToolStripMenuItem.Size = new System.Drawing.Size(148, 22);
105 | this.quitToolStripMenuItem.Text = "Quit";
106 | this.quitToolStripMenuItem.Click += new System.EventHandler(this.QuitToolStripMenuItem_Click);
107 | //
108 | // editToolStripMenuItem
109 | //
110 | this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
111 | this.calculateExtentsToolStripMenuItem});
112 | this.editToolStripMenuItem.Name = "editToolStripMenuItem";
113 | this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20);
114 | this.editToolStripMenuItem.Text = "Edit";
115 | //
116 | // calculateExtentsToolStripMenuItem
117 | //
118 | this.calculateExtentsToolStripMenuItem.Name = "calculateExtentsToolStripMenuItem";
119 | this.calculateExtentsToolStripMenuItem.Size = new System.Drawing.Size(141, 22);
120 | this.calculateExtentsToolStripMenuItem.Text = "Calc. Extents";
121 | this.calculateExtentsToolStripMenuItem.Click += new System.EventHandler(this.CalculateExtentsToolStripMenuItem_Click);
122 | //
123 | // tableLayoutPanel1
124 | //
125 | this.tableLayoutPanel1.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
126 | this.tableLayoutPanel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
127 | this.tableLayoutPanel1.CausesValidation = false;
128 | this.tableLayoutPanel1.ColumnCount = 1;
129 | this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
130 | this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
131 | this.tableLayoutPanel1.Controls.Add(this.propertyGrid1, 0, 0);
132 | this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
133 | this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 24);
134 | this.tableLayoutPanel1.Name = "tableLayoutPanel1";
135 | this.tableLayoutPanel1.RowCount = 1;
136 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
137 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 353F));
138 | this.tableLayoutPanel1.Size = new System.Drawing.Size(666, 353);
139 | this.tableLayoutPanel1.TabIndex = 2;
140 | //
141 | // propertyGrid1
142 | //
143 | this.propertyGrid1.BackColor = System.Drawing.SystemColors.WindowFrame;
144 | this.propertyGrid1.Dock = System.Windows.Forms.DockStyle.Fill;
145 | this.propertyGrid1.LineColor = System.Drawing.SystemColors.ControlDark;
146 | this.propertyGrid1.Location = new System.Drawing.Point(0, 0);
147 | this.propertyGrid1.Margin = new System.Windows.Forms.Padding(0);
148 | this.propertyGrid1.Name = "propertyGrid1";
149 | this.propertyGrid1.Size = new System.Drawing.Size(666, 353);
150 | this.propertyGrid1.TabIndex = 0;
151 | //
152 | // label1
153 | //
154 | this.label1.AutoSize = true;
155 | this.label1.Dock = System.Windows.Forms.DockStyle.Right;
156 | this.label1.Location = new System.Drawing.Point(626, 24);
157 | this.label1.Name = "label1";
158 | this.label1.Size = new System.Drawing.Size(40, 13);
159 | this.label1.TabIndex = 3;
160 | this.label1.Text = "v 1.0.4";
161 | //
162 | // YMapExporter
163 | //
164 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
165 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
166 | this.ClientSize = new System.Drawing.Size(666, 377);
167 | this.Controls.Add(this.label1);
168 | this.Controls.Add(this.tableLayoutPanel1);
169 | this.Controls.Add(this.menuStrip1);
170 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
171 | this.MainMenuStrip = this.menuStrip1;
172 | this.Margin = new System.Windows.Forms.Padding(2);
173 | this.Name = "YMapExporter";
174 | this.Text = "ME2YM";
175 | this.Load += new System.EventHandler(this.YMapExporter_Load);
176 | this.menuStrip1.ResumeLayout(false);
177 | this.menuStrip1.PerformLayout();
178 | this.tableLayoutPanel1.ResumeLayout(false);
179 | this.ResumeLayout(false);
180 | this.PerformLayout();
181 |
182 | }
183 |
184 | #endregion
185 |
186 | private PropertyGrid propertyGrid1;
187 | private MenuStrip menuStrip1;
188 | private ToolStripMenuItem fileToolStripMenuItem;
189 | private ToolStripMenuItem newToolStripMenuItem;
190 | private ToolStripMenuItem openToolStripMenuItem;
191 | private ToolStripMenuItem quitToolStripMenuItem;
192 | private TableLayoutPanel tableLayoutPanel1;
193 | private Label label1;
194 | private ToolStripMenuItem exportToolStripMenuItem;
195 | private ToolStripMenuItem editToolStripMenuItem;
196 | private ToolStripMenuItem calculateExtentsToolStripMenuItem;
197 | }
198 | }
199 |
200 |
--------------------------------------------------------------------------------
/YMapExporter/YMapExporter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Windows.Forms;
6 | using System.Xml;
7 | using System.Xml.Serialization;
8 | using SlimDX;
9 |
10 | namespace YMapExporter
11 | {
12 | public partial class YMapExporter : Form
13 | {
14 | private const float CarGenScale = 1.5f;
15 | private YMap _currentYMap = new YMap();
16 |
17 | public YMapExporter(string _cmdArg)
18 | {
19 | InitializeComponent();
20 | if (_cmdArg != "")
21 | {
22 | OpenFile(_cmdArg);
23 | }
24 | }
25 |
26 | private void YMapExporter_Load(object sender, EventArgs e)
27 | {
28 | RefreshView();
29 | }
30 |
31 | private void OpenToolStripMenuItem_Click(object sender, EventArgs e)
32 | {
33 | var o = new OpenFileDialog
34 | {
35 | Filter =
36 | @"Map Editor files (*.xml)|*.xml|Menyoo Spooner files (*.xml)|*.xml|YMap files (*.ymap.xml)|*.ymap.xml"
37 | };
38 |
39 | if (o.ShowDialog() != DialogResult.OK)
40 | return;
41 |
42 | OpenFile(o.FileName);
43 | }
44 |
45 |
46 | private void OpenFile(string _filePath)
47 | {
48 | if (_filePath.EndsWith(".ymap.xml"))
49 | {
50 | using (var reader = XmlReader.Create(_filePath))
51 | {
52 | var s = new XmlSerializer(typeof(YMap));
53 | _currentYMap = (YMap)s.Deserialize(reader);
54 | reader.Close();
55 | RefreshView();
56 | Text = @"ME2YM - " + Path.GetFileName(_filePath);
57 | }
58 | }
59 | else if (_filePath.EndsWith(".xml"))
60 | {
61 | MapEditorMap map = null;
62 | SpoonerPlacements spoonerMap = null;
63 |
64 | var reader = XmlReader.Create(_filePath);
65 | try
66 | {
67 | var s = new XmlSerializer(typeof(MapEditorMap));
68 | map = (MapEditorMap)s.Deserialize(reader);
69 | }
70 | catch
71 | {
72 | try
73 | {
74 | var s = new XmlSerializer(typeof(SpoonerPlacements));
75 | spoonerMap = (SpoonerPlacements)s.Deserialize(reader);
76 | Text = @"ME2YM - " + Path.GetFileName(_filePath);
77 | }
78 | catch { /* ignored */ }
79 | }
80 | reader.Close();
81 |
82 | if (map == null && spoonerMap == null)
83 | {
84 | MessageBox.Show(@"Failed to read file.");
85 | return;
86 | }
87 |
88 | if (map != null) ConvertToYMap(map);
89 | else ConvertToYMap(spoonerMap);
90 | }
91 | else
92 | {
93 | MessageBox.Show(@"This is not a valid type!");
94 | }
95 | }
96 |
97 |
98 | private void ConvertToYMap(MapEditorMap map)
99 | {
100 | _currentYMap = new YMap();
101 |
102 | foreach (var mapObject in map.Objects)
103 | {
104 | var model = HashMap.GetModelName(mapObject.Hash);
105 | if (string.IsNullOrEmpty(model)) model = "0x" + mapObject.Hash.ToString("x");
106 |
107 | var position = mapObject.Position;
108 | switch (mapObject.Type)
109 | {
110 | case MapObjectTypes.Vehicle:
111 | CreateCarGenerator(model, position, mapObject.Quaternion, CarGenScale);
112 | break;
113 | case MapObjectTypes.Prop:
114 | CreateEntity(model, position, mapObject.Quaternion, mapObject.Dynamic || mapObject.Door);
115 | break;
116 | }
117 | }
118 |
119 | CalcExtents();
120 | RefreshView();
121 | }
122 |
123 | private void ConvertToYMap(SpoonerPlacements spoonerPlacements)
124 | {
125 | _currentYMap = new YMap();
126 |
127 | foreach (var placement in spoonerPlacements.Placements)
128 | {
129 | var model = placement.HashName;
130 | if (string.IsNullOrEmpty(model)) model = placement.ModelHash;
131 |
132 | var position = placement.PositionRotation.GetPosition();
133 | var rotation = placement.PositionRotation.GetQuaternion();
134 | switch (placement.Type)
135 | {
136 | case 2:
137 | CreateCarGenerator(model, position, rotation, CarGenScale);
138 | break;
139 | case 3:
140 | CreateEntity(model, position, rotation, placement.Dynamic, false);
141 | break;
142 | }
143 | }
144 |
145 | CalcExtents();
146 | RefreshView();
147 | }
148 |
149 | private void CreateEntity(string model, Vector3 position,
150 | Quaternion rotation, bool dynamic, bool conjugateRotation = true)
151 | {
152 | if (conjugateRotation)
153 | {
154 | if (rotation.W < 0) rotation.W = -rotation.W;
155 | else rotation.Conjugate();
156 | }
157 |
158 | var ent = new Entity
159 | {
160 | Position = new XmlVector3(position.X, position.Y, position.Z),
161 | Rotation = new XmlQuaternion(rotation.X, rotation.Y, rotation.Z, rotation.W),
162 | ArchetypeName = model
163 | };
164 |
165 | if (!dynamic)
166 | ent.Flags = new XmlValue(32);
167 |
168 | _currentYMap.Entities.Add(ent);
169 | }
170 |
171 | private void CreateCarGenerator(string model, Vector3 position,
172 | Quaternion rotation, float scale)
173 | {
174 | var v = new Vector3(0, scale, 0);
175 | var direction = rotation.Multiply(v);
176 | var orientX = direction.X;
177 | var orientY = direction.Y;
178 |
179 | var car = new CarGenerator
180 | {
181 | Position = new XmlVector3(position.X, position.Y, position.Z),
182 | OrientationX = new XmlValue(orientX),
183 | OrientationY = new XmlValue(orientY),
184 | PerpendicularLength = new XmlValue(scale),
185 | CarModel = model
186 | };
187 |
188 | _currentYMap.CarGenerators.Add(car);
189 | }
190 |
191 | private void ExportToolStripMenuItem_Click(object sender, EventArgs e)
192 | {
193 | var s = new SaveFileDialog
194 | {
195 | Filter = @"YMap files (*.ymap.xml)|*.ymap.xml"
196 | };
197 |
198 | if (s.ShowDialog() != DialogResult.OK)
199 | return;
200 |
201 | using (var w = XmlWriter.Create(s.FileName,
202 | new XmlWriterSettings
203 | {
204 | Encoding = new UTF8Encoding(),
205 | Indent = true
206 | }))
207 | {
208 | var ns = new XmlSerializerNamespaces();
209 | ns.Add("", "");
210 | var ser = new XmlSerializer(typeof(YMap));
211 | w.WriteStartDocument(false);
212 | ser.Serialize(w, _currentYMap, ns);
213 | }
214 | }
215 |
216 | private void QuitToolStripMenuItem_Click(object sender, EventArgs e)
217 | {
218 | Close();
219 | }
220 |
221 | private void NewToolStripMenuItem_Click(object sender, EventArgs e)
222 | {
223 | _currentYMap = new YMap();
224 | Text = @"ME2YM";
225 | RefreshView();
226 | }
227 |
228 | private void CalculateExtentsToolStripMenuItem_Click(object sender, EventArgs e)
229 | {
230 | CalcExtents();
231 | }
232 |
233 | private void CalcExtents()
234 | {
235 | if (!_currentYMap.Entities.Any() && !_currentYMap.CarGenerators.Any())
236 | return;
237 |
238 | var centre = new Vector3();
239 |
240 | centre = _currentYMap.Entities.Aggregate(centre,
241 | (current, entity) => current + new Vector3(entity.Position.X, entity.Position.Y, entity.Position.Z));
242 | centre = _currentYMap.CarGenerators.Aggregate(centre,
243 | (current, carGenerator) => current + new Vector3(carGenerator.Position.X, carGenerator.Position.Y,
244 | carGenerator.Position.Z));
245 |
246 | centre /= _currentYMap.Entities.Count + _currentYMap.CarGenerators.Count;
247 |
248 | _currentYMap.StreamingExtenstsMin = new XmlVector3(centre.X - 10000,
249 | centre.Y - 10000, centre.Z - 1000);
250 | _currentYMap.StreamingExtenstsMax = new XmlVector3(centre.X + 10000,
251 | centre.Y + 10000, centre.Z + 5000);
252 | _currentYMap.EntitiesExtenstsMin = new XmlVector3(centre.X - 10000,
253 | centre.Y - 10000, centre.Z - 1000);
254 | _currentYMap.EntitiesExtenstsMax = new XmlVector3(centre.X + 10000,
255 | centre.Y + 10000, centre.Z + 5000);
256 |
257 | RefreshView();
258 | }
259 |
260 | private void RefreshView()
261 | {
262 | propertyGrid1.SelectedObject = _currentYMap;
263 | }
264 | }
265 | }
--------------------------------------------------------------------------------
/YMapExporter/YMapExporter.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {FA3C3F9E-0A66-43C1-B87B-175F0DCEF128}
8 | WinExe
9 | YMapExporter
10 | ME2YM
11 | v4.5.2
12 | 512
13 | true
14 | false
15 | C:\Users\SolomanN\Documents\YMapConverter\
16 | true
17 | Disk
18 | false
19 | Foreground
20 | 7
21 | Days
22 | false
23 | false
24 | true
25 | mailto: sxnorthrop15%40gmail.com
26 | en
27 | YMapExporter
28 | Soloman Northrop
29 | Soloman Northrop
30 | false
31 | 3
32 | 1.0.0.%2a
33 | false
34 | true
35 | true
36 | true
37 |
38 |
39 |
40 | x86
41 | true
42 | full
43 | true
44 | bin\Debug\
45 | DEBUG;TRACE
46 | prompt
47 | 4
48 |
49 |
50 | AnyCPU
51 | pdbonly
52 | true
53 | bin\Release\
54 | TRACE
55 | prompt
56 | 4
57 |
58 |
59 | 11CC93F4CB41E86A8E9DE687B900320AE3B245A7
60 |
61 |
62 |
63 |
64 |
65 |
66 | true
67 |
68 |
69 | true
70 |
71 |
72 | icon.ico
73 |
74 |
75 | false
76 |
77 |
78 |
79 | ..\packages\SlimDX.4.0.13.44\lib\NET40\SlimDX.dll
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 | True
98 | True
99 | Resources.resx
100 |
101 |
102 |
103 |
104 |
105 | Form
106 |
107 |
108 | YMapExporter.cs
109 |
110 |
111 |
112 |
113 | YMapExporter.cs
114 |
115 |
116 | ResXFileCodeGenerator
117 | Designer
118 | Resources.Designer.cs
119 |
120 |
121 |
122 | SettingsSingleFileGenerator
123 | Settings.Designer.cs
124 |
125 |
126 | True
127 | Settings.settings
128 | True
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 | False
137 | Microsoft .NET Framework 4.5.2 %28x86 and x64%29
138 | true
139 |
140 |
141 | False
142 | .NET Framework 3.5 SP1
143 | false
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
--------------------------------------------------------------------------------
/YMapExporter/YMapExporter.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 17, 17
122 |
123 |
124 |
125 |
126 | AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
127 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
128 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
129 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
130 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
131 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
132 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
133 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
134 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
135 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
136 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
137 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
138 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
139 | AAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
140 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
141 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
142 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
143 | AAAAAAAAAAAAAEdHRzItLSpmMS4uaDMvL0Y/Pz8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
144 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
145 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
146 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
147 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlaWhEsLCyhYWFh9m5wbvdCQUHGR0FBJwAAAAAAAAAAAAAAAAAA
148 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
149 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
150 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
151 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/PDxUVVVV6VdiXP9RcF//YWRi+DQy
152 | MnD///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
153 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
154 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
155 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAAAAAAAAAAAABycnIUPz09qlZX
156 | V/4fRDH/HmVA/2V6b/5BPz/AWlJSIgAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAA
157 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
158 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
159 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVVVVBj4+PkpFQkJYNDQ0IgAA
160 | AAB/f38CPz8/YVdXV/BIVE3/EFAv/xRlOv9Ne2P+Wl1c8y8vLWZ/f38CAAAAAA4ODhI5OTlLQT4+TjMz
161 | MwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
162 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
163 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFVV
164 | VTNzc3PUgYGA8VZUVKlEREQlPTo6Rjo4OMFWV1f+HUQv/xNhOP8TYjj/I2VB/2p5cf45ODi+MDAwSRcX
165 | FxZISEaFeXh45YB/f9hIREQ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
166 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
167 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
168 | AAAAAAAAAAAAAAAAAABGRkY6Y2Ji5oSEhP9oaGjwX19fqD09O9FUVFT9RVNL/w9QLf8RYDb/EV40/xBa
169 | Mv9SdGH/UVJS/S8vL9dhYWGgYWFh44CAgP91dXXtQT4+SgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
170 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
171 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
172 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODg4Mjo6OuFzc3P/hYWF/p6envpVVVX+UlNS/xY9
173 | KP8RXTT/EFwy/w9aMf8eUTT/Iz8w/2BrZf86Ojr+lpWV+YeHh/51dXX/SklJ6iwoKEUAAAAAAAAAAAAA
174 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
175 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
176 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkpKU9HR0fswsLC/7S0
177 | tP+BgYH/Pj4+/zA9Nv8PSCn/D1Qu/w5TLP8TUi7/Ynls/z1JQv9OX1X/Pj8+/3V1df+urq7/ycnJ/15d
178 | XfEiHx9gAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
179 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
180 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMz
181 | MwUxMTGAXV1d++jo6P/w8PD/paWm/35+f/9pcGz/WnBk/01nWf9GYVH/TmRX/32Af/9vcHD/a3Fu/3t8
182 | fP+Kiov/4ODh//Ly8v90dHT9Li4ukGZmZgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
183 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
184 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
185 | AAAAAAAAAAAAAAAAAABVVVUDSUdHaIKBgfD09PT/8fHx/2JiYv85OTr/q6us/7q6u/94eHn/rq+v/6yt
186 | rv+QkJL/zc3O/39/gP9FRUf/X19h/7q6u//39/f/mpqa80JCQmt/f38CAAAAAAAAAAAAAAAAAAAAAAAA
187 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
188 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
189 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFxcRKIhoaFxsbG7Lm5uv4zMzP/Hx8f/46O
190 | j/+fn5//ISEh/6Cgof9qamr/RERF/7Cwsf+Hh4f/FhYW/01NT/+FhYb+xMPE85iWlpVbW1sZAAAAAAAA
191 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
192 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
193 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3D2Ff
194 | X519fX35XmBf/2hpaf9paWr/YGBh/yEhIv94eHn/OTk6/3p6ev+NjY7/fX19/1xcXP94enn/bm1t9Hp4
195 | eIlzaGgWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
196 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
197 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
198 | AAAAAAAAAAAAAGxkZCFdXFy5U1ZU/jtURf9de2r/aX9y/3KCef97gH3/f39//2hoaP97e3z/b29w/29v
199 | b/94e3n/RlhN/19jYfk3NTWKi3NzCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
200 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
201 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
202 | AAAAAAAAAAAAAAAAAABVVVUDUVFRGWRkXzhIRkaYX19f+EJSSf9GcVf/O29Q/ytiQv8jWTn/ZHhs/zU1
203 | Nf8RERH/Dg4O/wkJCf8TExP/Z2lo/xU8Jf9VbV//V1dX6EZERHNgYGAdYWFhFQAAAAEAAAAAAAAAAAAA
204 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
205 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
206 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASEhINS0rK7tOTU3gWFhY/GVvaf9PbFr/U31k/0V0
207 | WP80aUn/JFw6/2B7a/9RUlH/HBwc/wAAAP8hISH/SEhI/2JwaP8ORSb/JVo8/1prYv5cWlrxS0pKyzY0
208 | M59nZ2cbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
209 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
210 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE9PUJEQ0PqgYKB/1Zb
211 | WP9KW1D/WXBi/1RtXv9LZlb/QmFO/zhaRf88V0f/aXBs/2hoaP8eHh7/eXl5/19mYv8zTj7/IlE2/yNU
212 | Of85XUn/X2pk/35/f/46OjnRZ19fIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
213 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
214 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
215 | AABBPT1CMjIx6GBgYPxaWlr8XFxc/FtcXPxcXFz8W1xc/FpcW/xaXFv8Wlxb/FpbW/xPT0/8FBQU/Fpa
216 | WvxVVlX8VVhW/FZYV/xVWFb8VlhX/FVXVvxeXV38MTAwz2dfXyCAgIAkgICACAAAAAAAAAAAAAAAAAAA
217 | AAAAAAAAAAAAAAAAAACAgIAMgICADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
218 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
219 | AAAAAAAAAAAAAAAAAAAAAAAAcnJyJkhGRoNOTEyPTkxMj05MTI9OTEyPTkxMj05MTI9OTEyPTkxMj05M
220 | TI9OTEyPSklJj0NBQY9MSkqPTkxMj05MTI9OTEyPTkxMj05MTI9OTEyPTkxMj1FPTHSGhoYTgICAHICA
221 | gKSAgIC8gICAdoCAgCgAAAAAAAAAAAAAAAAAAAAAgICACICAgJiAgIDagICA0oCAgLqAgICigICAiICA
222 | gGyAgIBOgICAKoCAgAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
223 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/f38Ef39/BH9/fwR/f38Ef39/BH9/
224 | fwR/f38Ef39/BH9/fwR/f38Ef39/BH9/fwR/f38Ef39/BH9/fwR/f38Ef39/BH9/fwR/f38Ef39/BH9/
225 | fwR/f38EAAAAAAAAAAAAAAAAgICAPoCAgNaAgID/gICAvICAgCYAAAAAAAAAAAAAAAAAAAAAgICAAoCA
226 | gCaAgIBcgICAjoCAgLyAgIDqgICA/4CAgP+AgID2gICAwoCAgHiAgIAeAAAAAAAAAAAAAAAAAAAAAAAA
227 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
228 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
229 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIAIgICAjoCAgP+AgID0gICAagAA
230 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgB6AgIBUgICAkICAgNaAgID/gICA+oCA
231 | gKqAgIAuAAAAAAAAAAAAAAAAAAAAAICAgASAgIAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
232 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
233 | AAAAAAAAAAAAAAAAAAAAAAAAgICABICAgFCAgIB4gICAooCAgMaAgICgAAAAAAAAAAAAAAAAAAAAAAAA
234 | AACAgIBQgICA7oCAgP+AgICugICAEICAgHSAgIC8gICAfoCAgBoAAAAAgICAWICAgAQAAAAAAAAAAAAA
235 | AAAAAAAAgICALICAgJiAgID8gICA/ICAgJyAgIAWAAAAAAAAAACAgIACgICAqoCAgAIAAAAAAAAAAAAA
236 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
237 | AAAAAAAAAAAAAICAgAKAgIAQgICAIICAgDyAgIBcgICAdICAgMyAgID/gICA/4CAgP+AgIDIgICAFgAA
238 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgCiAgIDWgICA/4CAgNyAgIA0gICAXoCAgPCAgID2gICAnICA
239 | gNCAgIC2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAOoCAgN6AgID/gICA6oCAgFYAAAAAAAAAAICA
240 | gKCAgIB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
241 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIAogICA0oCAgP+AgID/gICA/4CAgP+AgID/gICA/4CA
242 | gP+AgICmgICACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAEICAgLiAgID/gICA9oCA
243 | gGSAgIAkgICA0ICAgP+AgID/gICA/4CAgE4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIAQgICAsoCA
244 | gP+AgID/gICAmICAgAaAgIAsgICA8oCAgCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
245 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAKAgIA+gICAkICA
246 | gMqAgID0gICA/4CAgP+AgICOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
247 | AACAgIAEgICAmICAgP+AgID/gICAnICAgBSAgICogICA/4CAgP+AgIDwgICAIgAAAAAAAAAAAAAAAAAA
248 | AAAAAAAAAAAAAICAgAKAgICGgICA/4CAgP+AgIDCgICAEoCAgKKAgIDigICAPAAAAAAAAAAAAAAAAAAA
249 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
250 | AAAAAAAAAAAAAAAAAAAAAAAAgICABICAgLiAgIDGgICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
251 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIB2gICA/ICAgP+AgIDOgICAKICAgIqAgID/gICA/4CA
252 | gLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgGiAgID8gICA/4CAgNCAgIAqgICA2oCA
253 | gPyAgICagICAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
254 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgD6AgID6gICANgAAAAAAAAAAAAAAAAAA
255 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgFiAgID4gICA/4CA
256 | gPSAgIBwgICA2oCAgP+AgID/gICAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIAegICA4oCA
257 | gP+AgID/gICAyoCAgCKAgICwgICA/4CAgPKAgIB8gICACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
258 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAaAgIAcgICABgAAAAAAAAAAgICAGoCAgIKAgID0gICAnAAA
259 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
260 | AAAAAAAAgICAQoCAgO6AgID/gICA/4CAgP+AgID/gICA/4CAgPCAgIA6AAAAAAAAAAAAAAAAAAAAAAAA
261 | AACAgIBSgICA7ICAgP+AgID/gICA/4CAgP+AgICugICAAoCAgFKAgIDigICA/4CAgNiAgIAsAAAAAAAA
262 | AAAAAAAAAAAAAAAAAACAgIAOgICAYICAgJaAgIC2gICA0oCAgOyAgID2gICAgoCAgASAgIAagICAloCA
263 | gPiAgID/gICAmICAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
264 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIAugICA4oCAgP+AgID/gICA/4CAgP+AgID/gICA+ICA
265 | gJaAgIBKgICAJoCAgEaAgICygICA/4CAgP+AgID/gICA9ICAgK6AgID/gICA/4CAgIYAAAAAgICAEICA
266 | gMaAgID/gICA6oCAgCQAAAAAAAAAAAAAAAAAAAAAgICAKoCAgOqAgID/gICA/4CAgP+AgIDAgICAIICA
267 | gAaAgIB4gICA8oCAgP+AgIDugICAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
268 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgBqAgIDIgICA/4CA
269 | gP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA3oCAgDAAAAAAgICAoICA
270 | gP+AgID/gICAZAAAAACAgIA+gICA/4CAgP+AgIDOgICACAAAAAAAAAAAgICAIICAgIaAgIDugICA/4CA
271 | gPiAgICMgICAFoCAgFqAgIDWgICA/4CAgP+AgIDEgICAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
272 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
273 | AAAAAAAAgICACICAgH6AgIDCgICAuoCAgOyAgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA0ICA
274 | gBgAAAAAAAAAAICAgAqAgIDQgICA/4CAgPyAgICAgICAIICAgOSAgID/gICA/4CAgIwAAAAAgICADICA
275 | gOiAgID/gICA+ICAgIyAgIAugICAwICAgPyAgID/gICA/4CAgP+AgICmgICABgAAAAAAAAAAAAAAAAAA
276 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
277 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIAWgICAsICAgP+AgID/gICA/4CA
278 | gP+AgID4gICAloCAgBAAAAAAAAAAAAAAAAAAAAAAgICAEoCAgJ6AgID8gICA/4CAgP+AgID/gICA/4CA
279 | gP+AgID8gICASICAgHaAgID/gICA/4CAgLKAgIAOgICAxICAgP+AgID/gICA/4CAgP+AgICYgICAAgAA
280 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
281 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
282 | AACAgIBYgICA4ICAgOyAgIBygICAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICALICA
283 | gICAgIDGgICA+oCAgP+AgID/gICA/4CAgPSAgID2gICA/4CAgP+AgIDQgICA0ICAgP+AgID/gICA/4CA
284 | gP+AgICKgICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
285 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
286 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAaAgIAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
287 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgBSAgIBsgICA6ICAgP+AgID/gICA/4CAgP+AgID/gICA/4CA
288 | gP+AgID/gICA/4CAgPSAgIBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
289 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
290 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
291 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgCKAgIDWgICA/4CA
292 | gP+AgID/gICA/4CAgP+AgID/gICA/4CAgOCAgIAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
293 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
294 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
295 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
296 | AAAAAAAAgICACICAgGiAgIDQgICA/4CAgP+AgID/gICA/4CAgPyAgIBCAAAAAAAAAAAAAAAAAAAAAAAA
297 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
298 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
299 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
300 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgESAgID8gICA/4CAgP+AgICMAAAAAAAA
301 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
302 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
303 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
304 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAYICA
305 | gOSAgICsgICABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
306 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
307 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
308 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
309 | AAAAAAAAAAAAAAAAAACAgIAGgICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
310 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
311 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
312 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
313 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
314 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
315 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
316 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
317 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
318 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
319 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
320 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
321 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
322 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
323 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
324 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
325 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
326 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
327 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
328 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
329 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
330 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
331 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
332 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
333 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
334 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
335 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
336 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
337 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
338 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
339 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
340 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
341 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
342 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
343 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
344 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
345 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
346 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
347 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
348 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
349 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
350 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
351 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
352 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
353 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
354 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
355 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
356 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
357 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
358 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
359 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
360 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
361 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
362 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
363 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
364 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
365 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
366 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
367 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
368 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
369 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
370 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
371 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
372 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
373 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
374 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
375 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
376 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
377 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
378 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
379 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
380 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
381 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
382 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
383 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
384 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
385 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
386 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
387 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
388 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
389 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
390 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
391 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
392 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
393 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
394 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
395 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
396 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
397 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
398 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
399 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
400 | AAAAAAAA/////////////////////////////+f/////////wf////////+B/////////4D////////n
401 | AOf//////8IAQ///////wAAD///////AAAP//////8AAA///////wAAB//////+AAAH//////4AAAf//
402 | ////wAAD///////gAAf//////+AAB///////AAAA//////8AAAD//////wAAAP//////AAAAP5////8A
403 | AAAHgA///4AAAcHgAf//////4P+Aef///8D4AngY///wAPwAfgz///AB/gA/AH//+Af/AB+AP///h//A
404 | H+AP//+P/+AP4AP/xh//8AfAAfAAH//4AAAg8AB///wAAhBgAP///gAGAEAB////4A8AAAP////4P8AA
405 | B/////z/+AAf///////+AD////////8Af////////+D/////////8P/////////5////////////////
406 | ////////////////////////////////////////////////////////////////////////////////
407 | ////////////////////////////////////////////////////////////////////////////////
408 | //////////////////////////////////////////////////8=
409 |
410 |
411 |
--------------------------------------------------------------------------------
/YMapExporter/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sollaholla/me2ymap/a16b8f7d09ea9a0e6757013cd838405e4b4288d1/YMapExporter/icon.ico
--------------------------------------------------------------------------------
/YMapExporter/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------