diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f1e3d20
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,252 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+
+# Visual Studio 2015 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUNIT
+*.VisualState.xml
+TestResult.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# DNX
+project.lock.json
+artifacts/
+
+*_i.c
+*_p.c
+*_i.h
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding add-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# TODO: Comment the next line if you want to checkin your web deploy settings
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# The packages folder can be ignored because of Package Restore
+**/packages/*
+# except build/, which is used as an MSBuild target.
+!**/packages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/packages/repositories.config
+# NuGet v3's project.json files produces more ignoreable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.pfx
+*.publishsettings
+node_modules/
+orleans.codegen.cs
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+*.mdf
+*.ldf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# JetBrains Rider
+.idea/
+*.sln.iml
diff --git a/BuildProcessTemplates/DefaultTemplate.11.1.xaml b/BuildProcessTemplates/DefaultTemplate.11.1.xaml
new file mode 100644
index 0000000..bf54edf
--- /dev/null
+++ b/BuildProcessTemplates/DefaultTemplate.11.1.xaml
@@ -0,0 +1,543 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [New Microsoft.TeamFoundation.Build.Workflow.Activities.BuildSettings()]
+ [False]
+ [New Microsoft.TeamFoundation.Build.Workflow.Activities.TestSpecList(New Microsoft.TeamFoundation.Build.Workflow.Activities.AgileTestPlatformSpec("**\*test*.dll"))]
+ ["$(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.r)"]
+ [False]
+ [True]
+ [True]
+ [Microsoft.TeamFoundation.Build.Workflow.Activities.CleanWorkspaceOption.All]
+
+
+
+ [Microsoft.TeamFoundation.Build.Workflow.Activities.CodeAnalysisOption.AsConfigured]
+ [True]
+ [Microsoft.TeamFoundation.Build.Workflow.Activities.ToolPlatform.Auto]
+ [True]
+ [New Microsoft.TeamFoundation.Build.Workflow.Activities.SourceAndSymbolServerSettings(True, Nothing)]
+ [True]
+
+
+
+ [New Microsoft.TeamFoundation.Build.Workflow.Activities.AgentSettings() With {.MaxWaitTime = New System.TimeSpan(4, 0, 0), .MaxExecutionTime = New System.TimeSpan(0, 0, 0), .TagComparison = Microsoft.TeamFoundation.Build.Workflow.Activities.TagComparison.MatchExactly }]
+ [Microsoft.TeamFoundation.Build.Workflow.BuildVerbosity.Normal]
+
+
+
+
+
+
+ All
+ 11.0
+ Assembly references and imported namespaces serialized as XML namespaces
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/BuildProcessTemplates/DefaultTemplate.xaml b/BuildProcessTemplates/DefaultTemplate.xaml
index eae035b..12cc624 100644
--- a/BuildProcessTemplates/DefaultTemplate.xaml
+++ b/BuildProcessTemplates/DefaultTemplate.xaml
@@ -1,602 +1,602 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Assembly references and imported namespaces serialized as XML namespaces
-
-
- True
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- False
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- False
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- False
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- False
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- False
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Assembly references and imported namespaces serialized as XML namespaces
+
+
+ True
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/BuildProcessTemplates/LabDefaultTemplate.11.xaml b/BuildProcessTemplates/LabDefaultTemplate.11.xaml
new file mode 100644
index 0000000..9e1fb0b
--- /dev/null
+++ b/BuildProcessTemplates/LabDefaultTemplate.11.xaml
@@ -0,0 +1,208 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 11.0
+
+
+
+
+
+ 920,3702
+ Assembly references and imported namespaces serialized as XML namespaces
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+ [LabWorkflowParameters.BuildDetails.BuildUri]
+
+
+ [ChildBuildDetail.Uri]
+
+
+
+
+
+
+
+
+
+
+
+ [BuildLocation]
+
+
+ [If(LabWorkflowParameters.BuildDetails.Configuration Is Nothing, BuildLocation, If(LabWorkflowParameters.BuildDetails.Configuration.IsEmpty Or (SelectedBuildDetail.Information.GetNodesByType(Microsoft.TeamFoundation.Build.Common.InformationTypes.ConfigurationSummary, True)).Count = 1, BuildLocation, If(LabWorkflowParameters.BuildDetails.Configuration.IsPlatformEmptyOrAnyCpu, BuildLocation + "\" + LabWorkflowParameters.BuildDetails.Configuration.Configuration, BuildLocation + "\" + LabWorkflowParameters.BuildDetails.Configuration.Platform + "\" + LabWorkflowParameters.BuildDetails.Configuration.Configuration)))]
+
+
+
+
+
+
+
+
+
+
+
+ [LabEnvironmentUri]
+
+
+ [LabWorkflowParameters.EnvironmentDetails.LabEnvironmentUri.ToString()]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [PostDeploymentSnapshotName]
+
+
+ [If(LabWorkflowParameters.BuildDetails.IsTeamSystemBuild = True,String.Format("{0}_{1}_{2}", LabWorkflowParameters.DeploymentDetails.PostDeploymentSnapshotName, BuildNumber,BuildDetail.BuildNumber),String.Format("{0}_{1}", LabWorkflowParameters.DeploymentDetails.PostDeploymentSnapshotName, BuildDetail.BuildNumber))]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [BuildStatus]
+
+
+ [Microsoft.TeamFoundation.Build.Client.BuildStatus.PartiallySucceeded]
+
+
+
+
+
+
+ [BuildStatus]
+
+
+ [Microsoft.TeamFoundation.Build.Client.BuildStatus.Failed]
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/BuildProcessTemplates/UpgradeTemplate.xaml b/BuildProcessTemplates/UpgradeTemplate.xaml
index 4877aa3..166acb2 100644
--- a/BuildProcessTemplates/UpgradeTemplate.xaml
+++ b/BuildProcessTemplates/UpgradeTemplate.xaml
@@ -1,76 +1,76 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [New Microsoft.TeamFoundation.Build.Workflow.Activities.AgentSettings() With {.MaxWaitTime = New System.TimeSpan(4, 0, 0), .MaxExecutionTime = New System.TimeSpan(0, 0, 0), .TagComparison = Microsoft.TeamFoundation.Build.Workflow.Activities.TagComparison.MatchExactly }]
-
-
-
- [Microsoft.TeamFoundation.Build.Workflow.Activities.ToolPlatform.Auto]
- [False]
- [False]
-
-
-
-
-
-
-
-
-
- [Microsoft.TeamFoundation.VersionControl.Client.RecursionType.OneLevel]
- [Microsoft.TeamFoundation.Build.Workflow.BuildVerbosity.Normal]
-
-
-
- All
- Assembly references and imported namespaces serialized as XML namespaces
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [New Microsoft.TeamFoundation.Build.Workflow.Activities.AgentSettings() With {.MaxWaitTime = New System.TimeSpan(4, 0, 0), .MaxExecutionTime = New System.TimeSpan(0, 0, 0), .TagComparison = Microsoft.TeamFoundation.Build.Workflow.Activities.TagComparison.MatchExactly }]
+
+
+
+ [Microsoft.TeamFoundation.Build.Workflow.Activities.ToolPlatform.Auto]
+ [False]
+ [False]
+
+
+
+
+
+
+
+
+
+ [Microsoft.TeamFoundation.VersionControl.Client.RecursionType.OneLevel]
+ [Microsoft.TeamFoundation.Build.Workflow.BuildVerbosity.Normal]
+
+
+
+ All
+ Assembly references and imported namespaces serialized as XML namespaces
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Fiddler/FiddlerJsonViewer.csproj b/Fiddler/FiddlerJsonViewer.csproj
index 1c160b5..21352d6 100644
--- a/Fiddler/FiddlerJsonViewer.csproj
+++ b/Fiddler/FiddlerJsonViewer.csproj
@@ -1,5 +1,5 @@
-
+
Debug
AnyCPU
@@ -14,21 +14,38 @@
SAK
SAK
SAK
- C:\Users\zippy\AppData\Roaming\ICSharpCode/SharpDevelop3.0\Settings.SourceAnalysis
+ v4.6.1
+
+
+ 4.0
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
- v2.0
- False
- False
- false
true
- Full
+ full
false
- bin\debug\
+ bin\Debug\
DEBUG;TRACE
prompt
4
+ AllRules.ruleset
+ false
pdbonly
@@ -37,21 +54,12 @@
TRACE
prompt
4
-
-
- False
-
-
- False
- Auto
- 4194304
- AnyCPU
- 4096
+ AllRules.ruleset
+ false
-
- False
- $(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fiddler2@InstallPath)\Fiddler.exe
+
+ C:\Program Files\Fiddler\Fiddler.exe
False
@@ -61,9 +69,7 @@
-
-
-
+
@@ -72,7 +78,27 @@
JsonViewer
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ true
+
+
+ False
+ Windows Installer 3.1
+ true
+
+
+
+ xcopy /Y/C $(TargetDir)*.* "%25ProgramFiles(x86)%25\Fiddler2\Inspectors"
+
- private void expandAllToolStripMenuItem_Click(object sender, EventArgs e)
- {
- Control c;
- c = this.JsonViewer.Controls.Find("tvJson", true)[0];
- ((TreeView)c).BeginUpdate();
- try
- {
- if (((TreeView)c).SelectedNode != null)
- {
- TreeNode topNode = ((TreeView)c).TopNode;
- ((TreeView)c).SelectedNode.ExpandAll();
- ((TreeView)c).TopNode = topNode;
- }
- }
- finally
- {
- ((TreeView)c).EndUpdate();
- }
- }
-
- ///
- /// Copies a node
- ///
- ///
- ///
- /// Menu item Viewer > Copy
- private void copyToolStripMenuItem1_Click(object sender, EventArgs e)
- {
- Control c;
- c = this.JsonViewer.Controls.Find("tvJson", true)[0];
- TreeNode node = ((TreeView)c).SelectedNode;
- if (node != null)
- {
- Clipboard.SetText(node.Text);
- }
- }
-
- ///
- /// Copies just the node's value
- ///
- ///
- ///
- /// Menu item Viewer > Copy Value
- ///
- private void copyValueToolStripMenuItem_Click(object sender, EventArgs e)
- {
- Control c;
- c = this.JsonViewer.Controls.Find("tvJson", true)[0];
- JsonViewerTreeNode node = (JsonViewerTreeNode)((TreeView)c).SelectedNode;
- if (node != null && node.JsonObject.Value != null)
- {
- Clipboard.SetText(node.JsonObject.Value.ToString());
- }
- }
- }
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using EPocalipse.Json.Viewer;
+using System.IO;
+
+namespace EPocalipse.Json.JsonView
+{
+ public partial class MainForm : Form
+ {
+ public MainForm()
+ {
+ InitializeComponent();
+ }
+
+ private void MainForm_Shown(object sender, EventArgs e)
+ {
+ string[] args = Environment.GetCommandLineArgs();
+ for (int i = 1; i < args.Length; i++)
+ {
+ string arg = args[i];
+ if (arg.Equals("/c", StringComparison.OrdinalIgnoreCase))
+ {
+ LoadFromClipboard();
+ }
+ else if (File.Exists(arg))
+ {
+ LoadFromFile(arg);
+ }
+ }
+ }
+
+ private void LoadFromFile(string fileName)
+ {
+ string json = File.ReadAllText(fileName);
+ JsonViewer.ShowTab(Tabs.Viewer);
+ JsonViewer.Json = json;
+ }
+
+ private void LoadFromClipboard()
+ {
+ string json = Clipboard.GetText();
+ if (!String.IsNullOrEmpty(json))
+ {
+ JsonViewer.ShowTab(Tabs.Viewer);
+ JsonViewer.Json = json;
+ }
+ }
+
+ private void MainForm_Load(object sender, EventArgs e)
+ {
+ JsonViewer.ShowTab(Tabs.Text);
+ }
+
+ ///
+ /// Closes the program
+ ///
+ ///
+ ///
+ /// Menu item File > Exit
+ private void exitToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ Application.Exit();
+ }
+
+ ///
+ /// Open File Dialog for Yahoo! Pipe files or JSON files
+ ///
+ ///
+ ///
+ /// Menu item File > Open
+ private void openToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ OpenFileDialog dialog = new OpenFileDialog();
+ dialog.Filter =
+ "Yahoo! Pipe files (*.run)|*.run|json files (*.json)|*.json|All files (*.*)|*.*";
+ dialog.InitialDirectory = Application.StartupPath;
+ dialog.Title = "Select a JSON file";
+ if (dialog.ShowDialog() == DialogResult.OK)
+ {
+ this.LoadFromFile(dialog.FileName);
+ }
+ }
+
+ ///
+ /// Launches About JSONViewer dialog box
+ ///
+ ///
+ ///
+ /// Menu item Help > About JSON Viewer
+ private void aboutJSONViewerToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ new AboutJsonViewer().ShowDialog();
+ }
+
+ ///
+ /// Selects all text in the textbox
+ ///
+ ///
+ ///
+ /// Menu item Edit > Select All
+ private void selectAllToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ Control c;
+ c = this.JsonViewer.Controls.Find("txtJson", true)[0];
+ ((RichTextBox)c).SelectAll();
+ }
+
+ ///
+ /// Deletes selected text in the textbox
+ ///
+ ///
+ ///
+ /// Menu item Edit > Delete
+ private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ Control c;
+ c = this.JsonViewer.Controls.Find("txtJson", true)[0];
+ string text;
+ if (((RichTextBox)c).SelectionLength > 0)
+ text = ((RichTextBox)c).SelectedText;
+ else
+ text = ((RichTextBox)c).Text;
+ ((RichTextBox)c).SelectedText = "";
+ }
+
+ ///
+ /// Pastes text in the clipboard into the textbox
+ ///
+ ///
+ ///
+ /// Menu item Edit > Paste
+ private void pasteToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ Control c;
+ c = this.JsonViewer.Controls.Find("txtJson", true)[0];
+ ((RichTextBox)c).Paste();
+ }
+
+ ///
+ /// Copies text in the textbox into the clipboard
+ ///
+ ///
+ ///
+ /// Menu item Edit > Copy
+ private void copyToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ Control c;
+ c = this.JsonViewer.Controls.Find("txtJson", true)[0];
+ ((RichTextBox)c).Copy();
+ }
+
+ ///
+ /// Cuts selected text from the textbox
+ ///
+ ///
+ ///
+ /// Menu item Edit > Cut
+ private void cutToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ Control c;
+ c = this.JsonViewer.Controls.Find("txtJson", true)[0];
+ ((RichTextBox)c).Cut();
+ }
+
+ ///
+ /// Undo the last action
+ ///
+ ///
+ ///
+ /// Menu item Edit > Undo
+ private void undoToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ Control c;
+ c = this.JsonViewer.Controls.Find("txtJson", true)[0];
+ ((RichTextBox)c).Undo();
+ }
+
+ ///
+ /// Displays the find prompt
+ ///
+ ///
+ ///
+ /// Menu item Viewer > Find
+ private void findToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ Control c;
+ c = this.JsonViewer.Controls.Find("pnlFind", true)[0];
+ ((Panel)c).Visible = true;
+ Control t;
+ t = this.JsonViewer.Controls.Find("txtFind", true)[0];
+ ((TextBox)t).Focus();
+ }
+
+ ///
+ /// Expands all the nodes
+ ///
+ ///
+ ///
+ /// Menu item Viewer > Expand All
+ ///
+ private void expandAllToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ Control c;
+ c = this.JsonViewer.Controls.Find("tvJson", true)[0];
+ ((TreeView)c).BeginUpdate();
+ try
+ {
+ if (((TreeView)c).SelectedNode != null)
+ {
+ TreeNode topNode = ((TreeView)c).TopNode;
+ ((TreeView)c).SelectedNode.ExpandAll();
+ ((TreeView)c).TopNode = topNode;
+ }
+ }
+ finally
+ {
+ ((TreeView)c).EndUpdate();
+ }
+ }
+
+ ///
+ /// Copies a node
+ ///
+ ///
+ ///
+ /// Menu item Viewer > Copy
+ private void copyToolStripMenuItem1_Click(object sender, EventArgs e)
+ {
+ Control c;
+ c = this.JsonViewer.Controls.Find("tvJson", true)[0];
+ TreeNode node = ((TreeView)c).SelectedNode;
+ if (node != null)
+ {
+ Clipboard.SetText(node.Text);
+ }
+ }
+
+ ///
+ /// Copies just the node's value
+ ///
+ ///
+ ///
+ /// Menu item Viewer > Copy Value
+ ///
+ private void copyValueToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ Control c;
+ c = this.JsonViewer.Controls.Find("tvJson", true)[0];
+ JsonViewerTreeNode node = (JsonViewerTreeNode)((TreeView)c).SelectedNode;
+ if (node != null && node.JsonObject.Value != null)
+ {
+ Clipboard.SetText(node.JsonObject.Value.ToString());
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/JsonView/MainForm.resx b/JsonView/MainForm.resx
index 3cc661d..8a1ad0c 100644
--- a/JsonView/MainForm.resx
+++ b/JsonView/MainForm.resx
@@ -121,130 +121,572 @@
17, 17
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAflJREFUOE/Nk99L
- k2EUx/0jAr3owkAsL4SEIpZGBWG6yCGrVnYxaGCEuxiCG7Q1g01fNn/Ua1qgaeaaGa1ci35s6d6Fo6IY
- yCCoi7KsTCpqUllq69O7d4WOGXThRefmwPec53PO8+V5cnJWMk56IljarlNh6GQp98zF5fWs2bXW88x8
- mSN/+zHCYUmBpPJS/a8Lp6YcFW+hqetlvaaFjVq3AhC90WX1LFDj6RDf5xa4NvacBnGMNTuakCSJP3og
- OoEwME5BeXPG9RRQaERu7ApisPuorO2hWNNKaU0n6sNnMViHMLkC6Oo9rFMLMthJ8E54ERKWItg6grxL
- fCMxmyT6OIG+8QaFFQIbql2Y2wKk4vPsAnfjH9lnvkLBTmER4PVHqHf5lab78be0DDxit3GQ3DI7vUNB
- BRB/OkXsyQdc/Q/Za/aRV2qjezCUhrT3j2Js8lNVd44SrUhRpUBhuZNclU3ODkzC1XRtj1zb5Wb1Fhur
- NlnYfEBMA5q7R0kmf/Jy+iu3H7zG2Rcjf5s9w6hD9su8mZ5hYvI9w9IzjK4RitS/zbSKN5mf/yEffkWr
- J4b+ePA/BUxOfSJ07wWnLo2jbRhmreyV4oHJ6aXGcoGt+i5U+0+g0rVTrHZkeHDE4UNn6qHK2EfZwQ5K
- qt3kqczZD2olP+Y/s34BZc6e0M3ZCWAAAAAASUVORK5CYII=
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAX1JREFUOE9jYMAB
- 7j79+r9l2av/l+99/o9LDU5xmOZlh3//T+66RpohyJonbHz/P33Ki//hTbf/33/+nTiXgJxtEL7yv3XS
- pv8Ny97/dy0+918zaPl/efeZxBkA85dTydX/qb13/kvbtZOmEWaAXtql/0ruk/9LWTfiNyCrsPJ/Rn7l
- //S8iv8pOWX/k7JL/ydmlPyPSy/6H5NS+D8yKf9/eELe/5C4nP9BMdn/A6Iy//tGZPz3CU//7xmaSp7r
- SI5WvBoyCiDOT80t/58Mcn5myf/4jKL/salF/6OSC/6HJRb9D43P+x8cC3J+1n+/SIjzvULT/nsGp+D2
- QuXsB/8jqg7/9y/aTZ4/Qelh4b7v/x1T15NmgEPSqv+Z3RfB+WDm9i//fQt3/DePXfFf1WMCcQZdu/vm
- v6b/nP/NC+/+b1z66n9E043/RqHz/5+79pQ4A0AhfuP+2/9mUYv+exYd/q/tN+P//pN3idcMi7Ib99/8
- l3Ps+j9/3Rm8mgHEl+L83t38XwAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHxJREFUOE+tklsK
- QCEIRFt6O+9WJvkY048bCCFxmtFp7YczJgNVGT3sEcASBAJW84BSyAbwr/feZw+V5zkFBOlAGQM1RCm4
- /jGA4RLxVKCtWUuEKSuQP9F8BMCvkiygjFgbQZD8DCIFwZ7rCp4AOOGz5iRhUZBkPw1p/uADm8hjvQ6k
- WT0AAAAASUVORK5CYII=
-
-
iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHNJREFUOE+9UgEK
- wCAI9On93HJNUUucBRMkKu+8EwF+Chx9OMstCaiD7/69RLyoqUhcahERRlKIT12UkguYSXbnO8StT6Mg
- IkkIpvyPNrw9Alpwa4BZakWmcwakf29Hpn8Cpqk+jKdgIVC7Hu3A1eqGe94BW1fvNYR1t1EAAAAASUVO
- RK5CYII=
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABcSURBVDhPvY4BCsAgDMR8uj/vCHJlruLUjgWOol6K5S/s
+ lm2eks5Hy0T4jS5WtoaumRHoHkcZ4vJs0mv1iJdmk16rR7ykyd1GEHu51vdIhpQMKRlSMuhhJV9TygVb
+ V+81pzOLAgAAAABJRU5ErkJggg==
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAF5JREFUOE/NkkEK
- ACAIBPv/pyuDAkHXiS4FXUK2cbS1X06fIN0OAApr1+O+Ikh+VIVgyoiEtncMOJoLP04hcZI6fyIIHdA2
- FHY5BdKznAYJMGk6BK4z2Hhdcr1YadwAMzKIeOBQHJIAAAAASUVORK5CYII=
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABXSURBVDhPzY1RCsAgDEN7/0tPshERzWKFfvggoI19xjU8
+ CPiuFvn2HTJzOWD7LkDEo7/5gpKM5xRdwpwKQM0ycyJRS2mJWiZbiVsmrksJgO1tWUnVRxENMzKIeApf
+ i5oAAAAASUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAEdJREFUOE9jYBgF
- RIRAw38GBmTMAORjBSBFyACmCV0xWB02Q5A1oBuG1RBsgrhsJdkAil2AzyU4w4CICAEHHiHXEWXOsFIE
- ABUaLeGhx61OAAAAAElFTkSuQmCC
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABDSURBVDhPYxgFxICG/6iYAYSxAbAkEoBrQAM4DUHWgE0j
+ MsAqDzOAkGYQIGgAIUOIMgCrIiAAi+OQIwzwGDxSAQMDABUaLeFkMMc6AAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAFJJREFUOE9jYKAR
- +I9mLjqfoLWDwwCYK0A0yV4A+RHZAIJ+xqYAZjNZtsMMpERzA9QFYJocANMIomGYKHPQNSC7gKBrsCke
- eANA/iYrDIgKMAYAN0A2V0yn5GkAAAAASUVORK5CYII=
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABLSURBVDhPzY0BCgAgCAN9ej8vFg5EAtOIOogZeFNu0TWJ
+ /4f8UUDJzilsQQleLheAE7np9ZkVKCL5tvCCFcOS1fL7AoA5lElmWWQAN0A2V/LDDiUAAAAASUVORK5C
+ YII=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHxJREFUOE+tklsK
- QCEIRFt6O+9WJvkY048bCCFxmtFp7YczJgNVGT3sEcASBAJW84BSyAbwr/feZw+V5zkFBOlAGQM1RCm4
- /jGA4RLxVKCtWUuEKSuQP9F8BMCvkiygjFgbQZD8DCIFwZ7rCp4AOOGz5iRhUZBkPw1p/uADm8hjvQ6k
- WT0AAAAASUVORK5CYII=
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABqSURBVDhPrY8LCsAgDEM9+m6u60+7aGlhPghKG0NsN+iB
+ ynSEZqoS+mxhMzrZkeDN7v4E2uFHCJmRKESX89+qc4Cdr2fCQ2SZJVDu1uDbRJd5A88WgFgA7VEydwFn
+ 1RsE1BsEXGiQ6zetDZvIY72fGzRlAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAl5JREFUOE+1k19I
- k1EYxj/owm6K/lBXXRVEN1FEUF1kFLbCZotFYkarRcxJySbL2kZqzRy6dHNp2hbNbaipsxKljWJDaDjK
- zFmb0R+JnJFrWfs2N+eyePq+E8tG/y6iFx7em/P8nve8nENR/6PcvWq4bqjQ3ayAb8iJP2Z4BxzoatF9
- V3PtIYSDrYgFryIwUoPTIg50lTJc1iihryxhgK50IGtO0DYkI51IhNtgbZIhPmmBplSEp/1ynD3JhVy4
- EUH3EUzaV0Ii2PszgDUnI+1oVB+G11MD+k09JkaUeOU5hh4jDwX5mWgtXYFHOgqFB/ekAzottSQ9SV9n
- UgUol+VBWZSLM4V8yEQ8SIVciPOzUCdZRQB52ZnpgDaTBjN0B2ZCBsTHqxB6XAS/ZSmRz7wE3qYFGNBn
- EDOrrC3r0wFWgxrToWZMj1Ug/uwEYkP7QfcuhNZsR5WhG+cudUCusUKqMqJAoYeguDodYGpQYSqgR2xE
- hKmHXETvbcC7W8uIOVXJ2c8IRxIYmwgjV3weOUeVcxCjtgz08wpEH3AQ7VuLiGM5AmaKJLNluukmMrS7
- 4BsNEvPdfj928YXfIA3VCnwYPoWIaw3o24sRsmVg9BpFxv40+wUfo0zy2zB8L4PwDL9Gdr4UHMa8Y/c+
- ZG7dBqruQglC98WMeRHed83HeMs8+BspSJg7s2OnJrjCTFBvdaCnz086q83rVoO6WF5MHkhqy6kuYhb2
- Y7LT84KYbXe8aLcPzgGeDDqhLTvOvDAehPydyNm+iZDZbbN3TqX9qpMJflcHmG2zB/6mf/7MXwEEtPyA
- vhdrJwAAAABJRU5ErkJggg==
+ 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
- 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
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHLSURBVDhPxZJbaxNRFIXzGxTUJ7FgvSDVRmumuTTJxNji
+ JRIQI2lBxNZEEduZkLyrD7USapLXtLENjNQkMDLm0jT3f/Y5Z4xISJD45ILDgdl7r7VmnW0bDAaUSiXi
+ r19xWCzS7/ex/Qt6vR67u5+R5SDLKyvk83nEt2F5BN1uF8MwSKfTf+qiOZPJsr4eQ3Iu4Zfvsr39cYyk
+ 3W5T+HLAo1AIVU2MClSrVTRNY+NlHJfHh9fnR1U2abdbVqMYVlQVn3yHZDJF8+RkokPL4s7OJ+RAEK83
+ QDKV4ujoG4lEiiWPhzdvt2gcH08e/g0RYqVSIfI0ikNym8eF0+0iEl2j1frlaCrs7e1jvynhdIlcgtRq
+ 9emHdV03f2OZuet2bswvsHB7EZ8/MB2Brn+3wrp8ZY7o6hr7hQIPQ2Hm7bd49/7D30kM4wdec/j8zCzh
+ 8GPTdo1ms2md5y82cDicCIFh+yjEU0VXnzFz8Spuj99Kf1iyifDq9Qb3HoQsoomLlslmOXPuArOXrrG5
+ pViqw5IFMVQql5GkRcrmPUIi1GOxOKdOn+W+qaJpXyeqiD1RlMTkdT84LPIkEiGXy9FoNMYtDtHpdMbc
+ /U/YbD8BQXIn5mQFJ5UAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHuSURBVDhPzZDfS1NxGIf3RwR60YWBWF4ICUUsjQrCdJFD
+ Vq3sYtDACHcxBDdoawabHjZ/1DEt0DRzzYxWrkU/tnRn4agoBjII6qIsK5OKmlSW2no6OzNMtsugnpsX
+ Pu/n+3zhVf1VTnqjWNuvU2nsYilSOHMxd55Fne08s1/mKdh+jEhEUsrp+WeuFHOR/uWoeAttfR/rta1s
+ 1HmUsuiL5cyzaDod5vv8ItfGn9MojrNmRzOSJPE7D8YmEQYnKKxoyRaER+Vidwijw09VXS8l2jbKarvQ
+ HD6L0TaM2R1E3+BlnUaQxS5CdyLLkogUxd4Z4l3yG8m5FLHHSQxNNyiqFNhQ48bSHiTN57lF7iY+ss9y
+ hcKdwrLAF4jS4A4opfuJt7QOPmK3aYi8cgd9wyFFkHg6TfzJB9wDD9lr8ZNfZqdnKJyRdAyMYWoOUF1/
+ jlKdSHGVQFGFizy1XZ5OzMLVzG6PvNvlYfUWO6s2Wdl8QMwIWnrGSKV+8nLmK7cfvMbVH6dgm2PFoQ45
+ LvNmZpbJqfeMSM8wuUcp1iwd0ybeZGHhh/z4FW3eOIbjof9UMDX9ifC9F5y6NIGucYS18q2Updnlo9Z6
+ ga2GbtT7T6DWd1Cica4QHHH60Zt7qTb1U36wk9IaD/lqy4rOv0Kl+gVlzp7QrvoYEQAAAABJRU5ErkJg
+ gg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFySURBVDhPrZK7S0IBGMX9OwoKggYJIhpqECKDMCM1tJsP
+ fOTj6jXNx80eNqUFgREINSQFYpA9hqKWgqAGpyCEikSomy1SiOFQ4dBw4mZBi3KvdMYPzuF3Po6gmpj8
+ BxaTBdw+vuHnxF2/5mTqE9ZIhl/IX3P0qATH2gvU4XvknsvcQlhzh3oPIssx5pMl9E+mIVTuoFkS41el
+ L3AHcuUBjT1L/H/Aqt1+gxbJKhpEodoB4/4gKG8QDs8sbO5pWFxTMFMBGB009DY/tBYv1GMejBjdUOpd
+ GNY5IdNQGFI7ICXI+uj+V5Svgk9OzMDK4jsDMFE0DCQNndWHUTMNwuSBysDij0OureAPEnZIVbbqFYIb
+ T9DMpaCgz+rrye4hcV6GmDzkF9Br2Ydz+fp7jbGTd8j8p+g27KJ1IMotKMMUIVRsYiHBILRdgCacRScR
+ RzqT506Szb2iS7cFKZ1Cm3wdF5cM/z9kc0U0iSOIH1zVMAsEX8SX4vz9SXFXAAAAAElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABqSURBVDhPrY8LCsAgDEM9+m6u60+7aGlhPghKG0NsN+iB
+ ynSEZqoS+mxhMzrZkeDN7v4E2uFHCJmRKESX89+qc4Cdr2fCQ2SZJVDu1uDbRJd5A88WgFgA7VEydwFn
+ 1RsE1BsEXGiQ6zetDZvIY72fGzRlAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAhhJREFUOE+1U09r
- E0EU70fIR9iPUBQ8eMrR46IN5JhCDz2oBA8SBHEpCMFgG5GiwdJdq2Ijqe6ldo3Wrmhri0gXazW2YbMt
- UdNmm45ulf7R/HwzU1hLIzn54LFvhvn9eW9nOjr+R0wvBLhTXEf6bgV9w0sYLJQx/uoz2mq9c7eRn2pA
- L67Bq+/i29YeWLBL9Q6u5ktI6w6Kr1dbE3HwA3sT/o8mbAfQRgE1LZPXtsPgbjZxaXAG4y/Kh0m48sbP
- JgwbiKYAwwLYNkR4DEje5HsMFSI5l3l2kGD6/RYezzeEMgfzwzzMWSCRlV9OFk0xqhl06wNy+Tchyb2n
- dXxhv4TVaFLazppAJ9VKL0MySxYoVI0hkXaw5AbovjAWEmTur4qBqZoEdfbKVCgTBObqdolBUW0ocRs1
- P8Cx2PWQ4PJtl6a9J+xLIB1OMHIilU2b1gSMqCZ9TdTq33FEHQgJcg8rWPF3qHcJVOKeyOyoJIioDqUk
- UFM2SuUqus4YIcHEzFdYji8GxIGROAc41JJHc6E1B58wRRqWhzFrEVduTR78E5mRBSz7v0l1H0AgXgsH
- +2DNcPBp3cep0/rhezA5V0Vfbg5ug+4CqaiaI/rmyWu+t1zdQIysDxdmW9/GiZcVnO+fgvHkI+YXV7BG
- 067VA9Ezt91Fyvq/wH8/lKHCW/RcfITj8Rs4evIaYmdHkBl63v4xtX1tLQ78AZ3a8qxOv4hDAAAAAElF
- TkSuQmCC
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIVSURBVDhPtVJNaxNRFM1PyE+Yn1AUXLjK0uWgDWQZwUUX
+ KsGFBEEcCkIwqBEpGiydsSo2kupsasdo7Yi2toh0sFZjG5JpiZo20/TpVOmH5njvm8BYahEXHji8+968
+ c+55l4n8F0zM+rhVWkHmdg29A/PoK1Yw8uIjOp/3xpvqBgrjLeilZbjNLXxZ34bwt6jexMVCGRndQenl
+ 0p+NWHzPXoP3rQ3bAbQhQM0E5Np2BKprbZzrm8TIs8puE+68+r0NwwZiacCwALEBCVcAqet8JlAjk1PZ
+ JzsNJt6u4+FMS3ZmMV9mmFNAMhesbBZLC6oFdOsd8oVXocmdx018Ej9k1FgqiJ0zgS6qlR6BVI4iEFRN
+ IJlxMF/1cfTMcGiQvbskB6ZqgairJ6BCTJKYu9tlAUW1oSRsNDwfB+JXQ4PzN6s07W0ZPxDS5aSgJEFn
+ 06Y9CaOqSauJRvMr9qmXQ4P8/RoWvU16eyBUEq5kbigwiKoOMTBQ0zbKlTq6TxihwejkZ1iOJwfEwmiC
+ BQ49yaW50J7Fh0xJw3IxbM3hwo2x0ICRHZzFgveTunYERK5lgo5YMxx8WPFw5Li+U8wYm66jNz+Naov+
+ Beqiao58N5NrPluoryJO0QeKU7sNGKPPazh9aRzGo/eYmVvEMk270fTlmzl2N3XW9xL/jv7iaxw7+wAH
+ E9ew//AVxE8OItv/9O/Cf0ck8gud2vKswuxNZgAAAABJRU5ErkJggg==
+
+
+
+
+ AAABAAgAMDAAAAEACACoDgAAhgAAACAgAAABAAgAqAgAAC4PAAAYGAAAAQAIAMgGAADWFwAAEBAAAAEA
+ CABoBQAAnh4AADAwAAABACAAqCUAAAYkAAAgIAAAAQAgAKgQAACuSQAAGBgAAAEAIACICQAAVloAABAQ
+ AAABACAAaAQAAN5jAAAoAAAAMAAAAGAAAAABAAgAAAAAAAAJAAAAAAAAAAAAAAABAAAAAQAAAAAAAGBg
+ YABpaWkAvYAYANyLAADekhAA4JMNAOWaGwDGiSEA2p41AOKgMADlpjEA7qk1AO6rOADkqEAA7q9BAO60
+ SQDut1AA7rtXAO6+XADrvXAA7sBhAP/HagD/y3EAAACNABgYggAGD5oACRabABAQlAAhIYsABQ+kAAYR
+ pAAIFaUACRmlAAscpgAMH6cACh26AA8mqAAMIbsADSW8AA8pvAAQK70AES29ABIxvgAUM78AFDa/ADAw
+ ogA1NaAAGFywAEBAqQBwcL8AFjjAABc8wAAYPcEAEzjnABQ55wAVPOcAFT3oABlBwQAbRcIAHEbCAB1K
+ wwAfTsQAAFvKACBRxQAeftcALHDDABdA6AAYQukAGUXpABpJ6gAcS+sAHE7rAB5R7AAfVOwAIFXsACFY
+ 7QAjXe4AJF7vACRh7wAmZfAAKGfwAChp8QAqbfEALHLyAC118wAud/QALnj0ADB79AAwfPUAGYrlADKB
+ 9QA0hvYANYn3ADiO+AA5kfkAO5b6AD2a+gAyuP8AN7z/AECE1wB/rOQAPsD/AETF/wBLyf8AUc3/AFjS
+ /wBe1v8AZdv/AGvf/wBy4/8Ah4eHAK+vrwD/1IIA/9ySAP/koQD/660A//C4AP/0wAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAUEBAQEBAQEBAQEBAQEBAQECgAAAAAAAAAuGBgYGBgYGBgYGBgYGBgYGBwAAAAA
+ AAQKFRUVFRUVFRUVFRUVFRUKBAAAAAAAAAAYIjQ6Oj09QEA9PTo6OjMsIhgAAAAAAAQVdnZ2dnZ2dnZ2
+ dnZ2dnYVBAAAAAAAAAAYLFZbXV9gYGBgX15dVlNQKhgAAAAAAAQTdXV1dXV1dXV1dXV1dXUTBAAAAAAA
+ AAAYLFZWXV1eX2BfXl1WVlFPKhgAAAAAAAQSdHR0dHR0dHR0dHR0dHQSBAAAAAAAAAAYLFNTVltdXV1d
+ W1tTU1BNKhgAAAAAAAQRc3Nzc3Nzc3Nzc3Nzc3MSBAAAAAAAAAAYKlBTVlZWW1tWVlNTU01NJxgAAAAA
+ AAQQcnJycnJycnJycnJycnIQBAAAAAAAAAAYKk1QUFNWU1ZTU1NRTk1IJxgAAAAAAAQPcXFxcXFxcXFx
+ cXFxcXEPBAAAAAAAAAAYKEtNT1BRUVFTUVBNS0hIJxgAAAAAAAQNFxcXFxcXFxcXFxcXFxcNBAAAAAAA
+ AAAYJ0hJTU1NTU1NTUtLSEhDJBgAAAAAAAQMFhYWFhYWFhYWFhYWFhYMBAAAAAAAAAAYJ0RISEhJS0tJ
+ SUhIREQ4JBgAAAAAAAQMFhYWFhYWFhYWFhYWFhYMBAAAAAAAAAAYJDg4REhISEhIREREQzg2JxgAAAAA
+ AAQMFhYWFhYWFhYWFhYWFhYMBAAAAAAAAAAYJDg2ODg4QzhDQzg4NjhIKhgAAAAAAAQMFhYWFhYWFhYW
+ FhYWFhYMBAAAAAAAAAAYKkhEODg2NjY4Njg4SE1WOhgAAAAAAAQGBwcHBwcHBwcHBwcHBwcGBAAAAAAA
+ AAAYGiIgHx8eHh4eHh8gIiIlGxgAAAAAABQODg4ODg4JAwgODg4ODg4OAAAAAAAAAAAAMTExMTExMR0Z
+ LjExMTExMTIAAAAAAAAAAAAAAAAAAW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG8BAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW8A
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAG8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEB
+ AQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEC
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAcAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAcAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAFw
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAFwAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRkZGRkZGRkQjBCZGRkZGRkZGQAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAZT9BQUFBQUFBQUFBQUFBQUFBQT9lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ ZT9ubm5ubm5ubm5ubm5ubm5ubj9lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZT9tbW1tbW1tbW1t
+ bW1tbW1tbT9lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZT9sbGxsbGxsbGxsbGxsbGxsbD9lAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZT9ra2tra2tra2tra2tra2traz9lAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAZT9rampramprampramprampraj9lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ ZT9paWlpaWlpaWlpaWlpaWlpaT9lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZT9pZ2lnaWdpZ2ln
+ aWdpZ2lnaT9lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZT9nZ2dnZ2dnZ2dnZ2dnZ2dnZz9lAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZT9mZmZmZmZmZmZmZmZmZmZmZj9lAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAZT9jY2NjY2NjY2NjY2NjY2NjYz9lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ ZT9jYmJjYmJjYmJjYmJjYmJjYj9lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZT9aWlpaWlpaWlpa
+ WlpaWlpaWj9lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8AAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD///////8AAP///////wAA4AAH8AAD
+ AADgAAfwAAMAAOAAB/AAAwAA4AAH8AADAADgAAfwAAMAAOAAB/AAAwAA4AAH8AADAADgAAfwAAMAAOAA
+ B/AAAwAA4AAH8AADAADgAAfwAAMAAOAAB/AAAwAA4AAH8AADAADgAAfwAAMAAOAAD/gAAwAA/+f///P/
+ AAD/5///8/8AAP/n///z/wAA/+AAAAP/AAD/4AAAA/8AAP///j///wAA///+P///AAD///4///8AAP//
+ /j///wAA///+P///AAD//gAAP/8AAP/8AAAf/wAA//wAAB//AAD//AAAH/8AAP/8AAAf/wAA//wAAB//
+ AAD//AAAH/8AAP/8AAAf/wAA//wAAB//AAD//AAAH/8AAP/8AAAf/wAA//wAAB//AAD//AAAH/8AAP/8
+ AAAf/wAA//4AAD//AAD///////8AAP///////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEA
+ CAAAAAAAAAQAAAAAAAAAAAAAAAEAAAABAAAAAAAAYGBgAN6QCADqpCwA7ak1APm9WAD5v1wA/8dqAP/J
+ bgD5ynAABhGdAAkcugALILoADCG6AA8nvAAPKbwAEi6wABU4vwAOJ8kADinJABExywAUN8wAFjzNABQ7
+ 5wAVPOcAFT3oABhBzgAFZdAAF0HoABhC6QAZRekAG0vqABtM6gAcTeoAHlHrAB9T7AAfVOwAIVntACJc
+ 7gAlYu8AJmTvACdm8AAoafAAKW3xACxy8gAtdfMALnn0ADB79AA6n+QAMoL2ADOE9gA0hfYANon3ADiO
+ +AA4kPgAO5b6ADyW+gAzuf8AO77/AEbG/wBPy/8AWtP/AGLZ/wBt4P8A+dKBAP/WhwD53JMA+eGdAP/h
+ nAD/7LAA//K9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAAAAAAAKCgoK
+ CgoKCgoKCgoAAAACQ0ZGRkZGRkZGQwIAAAAAAAotMTU3NzcxLioaCgAAAAJCRUVFRUVFRUVCAgAAAAAA
+ CiovMTQ0MS8tJxYKAAAAAkBDQ0NDQ0NDQ0ACAAAAAAAKKSouLi4tKiklFQoAAAACCUBBQUBBQUBBCQIA
+ AAAAAAolJyoqKiopJSIVCgAAAAIGCQgICQgICQgGAgAAAAAACiEiJSUlJSIiHRIKAAAAAgYHBwcHBwcH
+ BwYCAAAAAAAKHR4hIiIhIR0XEgoAAAACBQcHBwcHBwcHBQIAAAAAAAoZFxcZGRcXGSEaCgAAAAIDBAQE
+ BAQEBAQDAgAAAAAACg8NCwsLCw0NERAKAAAAAgICAgICAgICAgICAAAAAAAKCgoKCgoKCgoKCgoAAAAA
+ AAAAAAEBAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAABAQAAAAAA
+ AAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAABsbGxsbGxsbGxsbGxsAAAAAAAAAAAAAAAAAAAAAAAAAGzAwMDAwMDAw
+ MDAwGwAAAAAAAAAAAAAAAAAAAAAAAAAbPz8/Pz8/Pz8/Pz8bAAAAAAAAAAAAAAAAAAAAAAAAABs+Pj4+
+ Pj4+Pj4+PhsAAAAAAAAAAAAAAAAAAAAAAAAAGz09PT09PT09PT09GwAAAAAAAAAAAAAAAAAAAAAAAAAb
+ PDw8PDw8PDw8PDwbAAAAAAAAAAAAAAAAAAAAAAAAABs7Ozs7Ozs7Ozs7OxsAAAAAAAAAAAAAAAAAAAAA
+ AAAAGzo6Ojo6Ojo6Ojo6GwAAAAAAAAAAAAAAAAAAAAAAAAAbOTk5OTk5OTk5OTkbAAAAAAAAAAAAAAAA
+ AAAAAAAAABsbGxsbGxsbGxsbGxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////+AB8ADgAfAA4AH
+ wAOAB8ADgAfAA4AHwAOAB8ADgAfAA4AHwAOAB8AD/P/+f/z//n/8AAB///7////+/////v///4AD//+A
+ A///gAP//4AD//+AA///gAP//4AD//+AA///gAP//4AD////////////KAAAABgAAAAwAAAAAQAIAAAA
+ AABAAgAAAAAAAAAAAAAAAQAAAAEAAAAAAABJSXwAYGBgAOKfJACsk2YA9rhPAPa5UgD2xGcA/8dqAP/J
+ bQD20H0ABQmUAA0SmAAJF50ABQ6jAAYRpAAHFKQACBakAAkZpQAMH6YADiOnAA4lqAAPKKgAWHecABQ7
+ 5wAVPOcAFj/oAAZm0AAXQegAGUXpABxM6gAeUesAH1TsACFZ7QAjXe4AJ2fwAChp8AAqbfEALnfzAC55
+ 9AAygPUANYf3ADaJ9wA6lPkANLr/AEHC/wBOy/8AW9T/AGjd/wCHh4cAm5ubAIacuACjo6MA9tiNAP/Y
+ igD/56cA//K8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAMDAwMDAwMDAwAAAAwTFBYWFhMTCwAAAAM4ODg4ODg1AwAAABMmKSsrKiYj
+ EQAAAAM3Nzc3NzcKAwAAABEkJykoJyQiEQAAAAM2NjY2NjYHAwAAABEiIyQkJCIgEQAAAAMJCQkJCQkG
+ AwAAABEeICIiIB4cDgAAAAMICAgICAgFAwAAAA4YHB0dHBgcEQAAAAMDAwMDAwMDAwAAAAwNDA0MDQ0N
+ DAAAAAAAAAQCAAAAAAAAAAAAAAABAAAAAAAAAAAAADICAAAAAAAAAAAAAAACAAAAAAAAAAAAADQCAgIC
+ AgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAADMXAAAAAAAAAAAAAAAAAAAAAAAAGxsbGxsbGxsbGwAAAAAAAAAAAAAAAAAAGzAw
+ MDAwMDAwGwAAAAAAAAAAAAAAAAAAGy8vLy8vLy8vGwAAAAAAAAAAAAAAAAAAGy4uLi4uLi4uGwAAAAAA
+ AAAAAAAAAAAAGy0tLS0tLS0tGwAAAAAAAAAAAAAAAAAAGywsLCwsLCwsGwAAAAAAAAAAAAAAAAAAGxsb
+ GxsbGxsbGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAD///8A////AMAcAQDAHAEAwBwBAMAcAQDAHAEAwBwBAMAcAQD5/98A+f/fAPgAHwD/9/8A//f/AP/n
+ /wD+AH8A/gB/AP4AfwD+AH8A/gB/AP4AfwD+AH8A////AP///wAoAAAAEAAAACAAAAABAAgAAAAAAAAB
+ AAAAAAAAAAAAAAABAAAAAQAAAAAAAGBgYADciwAA/8hsAAAAjQAAW8oAG0rqAB9T7AAlY+8AJmXvACtw
+ 8gAuePMAL3r0ADeM9wA3jfgAN7z/AErJ/wBe1v8A/9yRAP/vtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgICAgICAAAEBAQEBAQEAhMTExMT
+ AgAABAsNDgsLBAISEhISEgIAAAQICgoICQQCAwMDAwMCAAAEBgcHBgYEAgICAgICAgAABAQEBAQEBAAA
+ AAEAAAAAAAAAAAEAAAAAAAABAQEBAQEBAQEBAAAAAAAAAAAAAAEBAAAAAAAAAAAAAAAAAAABAQAAAAAA
+ AAAAAAAABQUFBQUFBQUAAAAAAAAAAAUREREREREFAAAAAAAAAAAFEBAQEBAQBQAAAAAAAAAABQ8PDw8P
+ DwUAAAAAAAAAAAUFBQUFBQUFAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAAAYAAAAGAAAABgAAAAYAAAAGA
+ AADv9wAA4AcAAP5/AAD+fwAA8A8AAPAPAADwDwAA8A8AAPAPAAD//wAAKAAAADAAAABgAAAAAQAgAAAA
+ AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAANyLAO/ciwD/3IsA/9yLAP/ciwD/3IsA/9yLAP/ciwD/3IsA/9yL
+ AP/ciwD/3IsA/9yLAP/ciwD/3IsA/9yLAP/ciwD/3IsAzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAI3PAACN/wAAjf8AAI3/AACN/wAAjf8AAI3/AACN/wAAjf8AAI3/AACN/wAAjf8AAI3/AACN/wAA
+ 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
+ av//x2r//8dq///Hav//x2r//8dq///Hav/uqTX/3IsA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAI3/Chy6/xU96P8XQej/GUXp/xpI6v8bSur/HEvr/xxL6/8bSur/Gkjq/xlG6f8YQun/Fj7o/xQ5
+ 5/8TOef/DCC7/wAAjf8AAAAAAAAAAAAAAAAAAAAAAAAAANyLAP/uqTX//8dq///Hav//x2r//8dq///H
+ av//x2r//8dq///Hav//x2r//8dq///Hav//x2r//8dq///Hav/uqTX/3IsA/wAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAI3/Cx+6/xQ45/8TOOf/FTvn/xY+6P8XQOj/F0Hp/xdB6f8XQOj/Fj7o/xU8
+ 5/8UOef/Ezjn/xY+6P8dTuv/EjC+/wAAjf8AAAAAAAAAAAAAAAAAAAAAAAAAANyLAP/uqTX//8dq///H
+ av//x2r//8dq///Hav//x2r//8dq///Hav//x2r//8dq///Hav//x2r//8dq///Hav/uqTX/3IsA/wAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI3/Ei++/x1Q7P8YQ+n/FTvn/xM45/8TOOf/Ezjn/xM4
+ 5/8TOOf/Ezjn/xQ65/8XQOj/HEzr/yNd7/8udvP/HEbC/wAAjf8AAAAAAAAAAAAAAAAAAAAAAAAAANyL
+ AP/gkw3/5Zob/+WaG//lmhv/5Zob/+WaG//lmhv/5Zob/+WaG//lmhv/5Zob/+WaG//lmhv/5Zob/+Wa
+ G//gkw3/3IsA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI3/Bg+a/woapv8IFqX/BxOk/wYR
+ pP8GEKT/BQ+k/wUPpP8FD6T/BhCk/wcSpP8IFaX/Chmm/wwfp/8PJqj/CRab/wAAjf8AAAAAAAAAAAAA
+ AAAAAAAAAAAAANyLAI/ciwC/3IsAv9yLAL/ciwC/3IsAv9yLAL/SiAfPvYAY/8OCE+/ciwC/3IsAv9yL
+ AL/ciwC/3IsAv9yLAL/ciwC/3IsAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI1wAACNvwAA
+ jb8AAI2/AACNvwAAjb8AAI2/AACNvxMThO8YGIL/BweKzwAAjb8AAI2/AACNvwAAjb8AAI2/AACNvwAA
+ jY8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgYGBAYGBg/2Bg
+ YL8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBgYL9gYGD/YGBgQAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABgYGBAYGBg/2BgYL8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBgYL9gYGD/YGBgQAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABgYGBAYGBg/2BgYL8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBg
+ YL9gYGD/YGBgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgYGBAYGBg/2BgYP9gYGD/YGBg/2BgYP9gYGD/YGBg/2Bg
+ YP9gYGD/YGBg/2BgYP9gYGD/YGBg/2BgYP9gYGD/YGBg/2BgYP9gYGD/YGBg/2BgYP9gYGD/YGBg/2Bg
+ YP9gYGD/YGBg/2BgYP9gYGD/YGBgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgYGAgYGBg72BgYP9gYGD/YGBg/2Bg
+ YP9gYGD/YGBg/2BgYP9gYGD/YGBg/2BgYP9gYGD/YGBg/2BgYP9gYGD/YGBg/2BgYP9gYGD/YGBg/2Bg
+ YP9gYGD/YGBg/2BgYP9gYGD/YGBg/2BgYP9gYGDvYGBgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYGBggGBgYP9gYGCAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYGBggGBg
+ YP9gYGCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAYGBggGBgYP9gYGCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAYGBggGBgYP9gYGCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYGBggGBgYP9gYGCAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAFvKQABbyvAAW8r/AFvK/wBbyv8AW8r/AFvK/wBbyv8AW8r/AFvK/wBbyv8AW8r/AFvK/wBb
+ yv8AW8r/AFvK/wBbyv8AW8r/AFvK/wBbyvAAW8pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAFvKgABbyv8eftf/Hn7X/x5+1/8eftf/Hn7X/x5+1/8eftf/Hn7X/x5+
+ 1/8eftf/Hn7X/x5+1/8eftf/Hn7X/x5+1/8eftf/Hn7X/wBbyv8AW8qAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFvKgABbyv9y4///cuP//3Lj//9y4///cuP//3Lj
+ //9y4///cuP//3Lj//9y4///cuP//3Lj//9y4///cuP//3Lj//9y4///cuP//wBbyv8AW8qAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFvKgABbyv9r3///a9///2vf
+ //9r3///a9///2vf//9r3///a9///2vf//9r3///a9///2vf//9r3///a9///2vf//9r3///a9///wBb
+ yv8AW8qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFvKgABb
+ yv9l2///Zdv//2Xb//9l2///Zdv//2Xb//9l2///Zdv//2Xb//9l2///Zdv//2Xb//9l2///Zdv//2Xb
+ //9l2///Zdv//wBbyv8AW8qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAFvKgABbyv9e1v//Xtb//17W//9e1v//Xtb//17W//9e1v//Xtb//17W//9e1v//Xtb//17W
+ //9e1v//Xtb//17W//9e1v//Xtb//wBbyv8AW8qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAFvKgABbyv9Y0v//WNL//1jS//9Y0v//WNL//1jS//9Y0v//WNL//1jS
+ //9Y0v//WNL//1jS//9Y0v//WNL//1jS//9Y0v//WNL//wBbyv8AW8qAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFvKgABbyv9Rzf//Uc3//1HN//9Rzf//Uc3//1HN
+ //9Rzf//Uc3//1HN//9Rzf//Uc3//1HN//9Rzf//Uc3//1HN//9Rzf//Uc3//wBbyv8AW8qAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFvKgABbyv9Lyf//S8n//0vJ
+ //9Lyf//S8n//0vJ//9Lyf//S8n//0vJ//9Lyf//S8n//0vJ//9Lyf//S8n//0vJ//9Lyf//S8n//wBb
+ yv8AW8qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFvKgABb
+ yv9Exf//RMX//0TF//9Exf//RMX//0TF//9Exf//RMX//0TF//9Exf//RMX//0TF//9Exf//RMX//0TF
+ //9Exf//RMX//wBbyv8AW8qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAFvKgABbyv8+wP//PsD//z7A//8+wP//PsD//z7A//8+wP//PsD//z7A//8+wP//PsD//z7A
+ //8+wP//PsD//z7A//8+wP//PsD//wBbyv8AW8qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAFvKgABbyv83vP//N7z//ze8//83vP//N7z//ze8//83vP//N7z//ze8
+ //83vP//N7z//ze8//83vP//N7z//ze8//83vP//N7z//wBbyv8AW8qAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFvKgABbyv8yuP//Mrj//zK4//8yuP//Mrj//zK4
+ //8yuP//Mrj//zK4//8yuP//Mrj//zK4//8yuP//Mrj//zK4//8yuP//Mrj//wBbyv8AW8qAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFvKgABbyv8ZiuX/GYrl/xmK
+ 5f8ZiuX/GYrl/xmK5f8ZiuX/GYrl/xmK5f8ZiuX/GYrl/xmK5f8ZiuX/GYrl/xmK5f8ZiuX/GYrl/wBb
+ yv8AW8qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFvKcABb
+ yv8AW8r/AFvK/wBbyv8AW8r/AFvK/wBbyv8AW8r/AFvK/wBbyv8AW8r/AFvK/wBbyv8AW8r/AFvK/wBb
+ yv8AW8r/AFvK/wBbyv8AW8pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+ /////wAA////////AAD///////8AAP///////wAA4AAH8AADAADgAAfwAAMAAOAAB/AAAwAA4AAH8AAD
+ AADgAAfwAAMAAOAAB/AAAwAA4AAH8AADAADgAAfwAAMAAOAAB/AAAwAA4AAH8AADAADgAAfwAAMAAOAA
+ B/AAAwAA4AAH8AADAADgAAfwAAMAAOAAB/AAAwAA/8f///H/AAD/x///8f8AAP/H///x/wAA/8AAAAH/
+ AAD/wAAAAf8AAP///j///wAA///+P///AAD///4///8AAP///j///wAA///+P///AAD//AAAH/8AAP/8
+ AAAf/wAA//wAAB//AAD//AAAH/8AAP/8AAAf/wAA//wAAB//AAD//AAAH/8AAP/8AAAf/wAA//wAAB//
+ AAD//AAAH/8AAP/8AAAf/wAA//wAAB//AAD//AAAH/8AAP/8AAAf/wAA//wAAB//AAD///////8AAP//
+ /////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADz2KpR89iqVfPYqlXz2KpV89iqVfPYqlXz2KpV89iqVfPY
+ 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
\ No newline at end of file
diff --git a/JsonView/Program.cs b/JsonView/Program.cs
index 0b40008..a879092 100644
--- a/JsonView/Program.cs
+++ b/JsonView/Program.cs
@@ -1,20 +1,20 @@
-using System;
-using System.Collections.Generic;
-using System.Windows.Forms;
-
-namespace EPocalipse.Json.JsonView
-{
- static class Program
- {
- ///
- /// The main entry point for the application.
- ///
- [STAThread]
- static void Main()
- {
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new MainForm());
- }
- }
+using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+
+namespace EPocalipse.Json.JsonView
+{
+ static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new MainForm());
+ }
+ }
}
\ No newline at end of file
diff --git a/JsonView/Properties/AssemblyInfo.cs b/JsonView/Properties/AssemblyInfo.cs
index c78c555..c8ff0a5 100644
--- a/JsonView/Properties/AssemblyInfo.cs
+++ b/JsonView/Properties/AssemblyInfo.cs
@@ -1,33 +1,33 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("JsonViewer")]
-[assembly: AssemblyDescription("A standalone viewer for JSON objects.")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("EPocalipse Software")]
-[assembly: AssemblyProduct("JsonViewer")]
-[assembly: AssemblyCopyright("Copyright © 2008")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("bf508807-3b54-45e3-b282-096cc2a0cb45")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-[assembly: AssemblyVersion("1.1.0.0")]
-[assembly: AssemblyFileVersion("1.1.0.0")]
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("JsonViewer")]
+[assembly: AssemblyDescription("A standalone viewer for JSON objects.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("EPocalipse Software")]
+[assembly: AssemblyProduct("JsonViewer")]
+[assembly: AssemblyCopyright("Copyright © 2008")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("bf508807-3b54-45e3-b282-096cc2a0cb45")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+[assembly: AssemblyVersion("1.1.0.0")]
+[assembly: AssemblyFileVersion("1.1.0.0")]
diff --git a/JsonView/Properties/Resources.Designer.cs b/JsonView/Properties/Resources.Designer.cs
index bd94114..1711ea5 100644
--- a/JsonView/Properties/Resources.Designer.cs
+++ b/JsonView/Properties/Resources.Designer.cs
@@ -1,63 +1,63 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:2.0.50727.3053
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace EPocalipse.Json.JsonView.Properties {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EPocalipse.Json.JsonView.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
- }
-}
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace EPocalipse.Json.JsonView.Properties {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EPocalipse.Json.JsonView.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/JsonView/Properties/Resources.resx b/JsonView/Properties/Resources.resx
index ffecec8..af7dbeb 100644
--- a/JsonView/Properties/Resources.resx
+++ b/JsonView/Properties/Resources.resx
@@ -1,117 +1,117 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
\ No newline at end of file
diff --git a/JsonView/Properties/Settings.Designer.cs b/JsonView/Properties/Settings.Designer.cs
index 7c14be3..537018d 100644
--- a/JsonView/Properties/Settings.Designer.cs
+++ b/JsonView/Properties/Settings.Designer.cs
@@ -1,26 +1,26 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:2.0.50727.3053
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace EPocalipse.Json.JsonView.Properties {
-
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
-
- private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default {
- get {
- return defaultInstance;
- }
- }
- }
-}
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace EPocalipse.Json.JsonView.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/JsonView/Properties/Settings.settings b/JsonView/Properties/Settings.settings
index abf36c5..3964565 100644
--- a/JsonView/Properties/Settings.settings
+++ b/JsonView/Properties/Settings.settings
@@ -1,7 +1,7 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/JsonView/app.config b/JsonView/app.config
new file mode 100644
index 0000000..3dbff35
--- /dev/null
+++ b/JsonView/app.config
@@ -0,0 +1,3 @@
+
+
+
diff --git a/JsonView/app.ico b/JsonView/app.ico
new file mode 100644
index 0000000..5b523df
Binary files /dev/null and b/JsonView/app.ico differ
diff --git a/JsonViewer.sln b/JsonViewer.sln
index 783e3b6..6bd8c99 100644
--- a/JsonViewer.sln
+++ b/JsonViewer.sln
@@ -1,17 +1,6 @@
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual Studio 2008
-# SharpDevelop 4.0.0.7008
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{E9E44130-70CC-442C-A77C-A1112310354A}"
- ProjectSection(SolutionItems) = preProject
- Samples\GridSample.txt = Samples\GridSample.txt
- Samples\Sample2.txt = Samples\Sample2.txt
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{0508F31B-5B21-4096-A3B7-280815BBECAE}"
- ProjectSection(SolutionItems) = preProject
- EndProjectSection
-EndProject
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FiddlerJsonViewer", "Fiddler\FiddlerJsonViewer.csproj", "{4B6A26FA-0D44-4354-92E7-54FC5A75469B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JsonVisualizer", "Visualizer\JsonVisualizer.csproj", "{32BEAE8D-282C-4414-9B7F-2F0E9450369A}"
@@ -22,22 +11,29 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JsonViewer", "JsonViewer\Js
EndProject
Global
GlobalSection(TeamFoundationVersionControl) = preSolution
- SccNumberOfProjects = 5
+ SccNumberOfProjects = 4
SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
- SccTeamFoundationServer = https://tfs03.codeplex.com/
- SccLocalPath0 = .
- SccProjectUniqueName1 = Fiddler\\FiddlerJsonViewer.csproj
- SccProjectName1 = Fiddler
- SccLocalPath1 = Fiddler
+ SccTeamFoundationServer = https://tfs.codeplex.com/tfs/tfs03
+ SccProjectUniqueName0 = Fiddler\\FiddlerJsonViewer.csproj
+ SccProjectName0 = Fiddler
+ SccAuxPath0 = https://tfs.codeplex.com/tfs/tfs03
+ SccLocalPath0 = Fiddler
+ SccProvider0 = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
+ SccProjectUniqueName1 = Visualizer\\JsonVisualizer.csproj
+ SccProjectName1 = Visualizer
+ SccAuxPath1 = https://tfs.codeplex.com/tfs/tfs03
+ SccLocalPath1 = Visualizer
+ SccProvider1 = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
SccProjectUniqueName2 = JsonView\\JsonView.csproj
SccProjectName2 = JsonView
+ SccAuxPath2 = https://tfs.codeplex.com/tfs/tfs03
SccLocalPath2 = JsonView
+ SccProvider2 = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
SccProjectUniqueName3 = JsonViewer\\JsonViewer.csproj
SccProjectName3 = JsonViewer
+ SccAuxPath3 = https://tfs.codeplex.com/tfs/tfs03
SccLocalPath3 = JsonViewer
- SccProjectUniqueName4 = Visualizer\\JsonVisualizer.csproj
- SccProjectName4 = Visualizer
- SccLocalPath4 = Visualizer
+ SccProvider3 = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
diff --git a/JsonViewer/JsonObject.cs b/JsonViewer/JsonObject.cs
index 5b9e7e3..072bb96 100644
--- a/JsonViewer/JsonObject.cs
+++ b/JsonViewer/JsonObject.cs
@@ -3,12 +3,19 @@
using System.Text;
using System.Collections.ObjectModel;
using System.Diagnostics;
+using System.ComponentModel;
namespace EPocalipse.Json.Viewer
{
- [DebuggerDisplay("Text = {Text}")]
+ [DebuggerDisplay("Type={GetType().Name} Text = {Text}")]
+ [TypeConverter(typeof(ExpandableObjectConverter))]
public class JsonObject
{
+ static JsonObject()
+ {
+ TypeDescriptor.AddProvider(new JsonObjectTypeDescriptionProvider(), typeof(JsonObject));
+ }
+
private string _id;
private object _value;
private JsonType _jsonType;
diff --git a/JsonViewer/JsonObjectTree.cs b/JsonViewer/JsonObjectTree.cs
index 2d82a0e..299b1f9 100644
--- a/JsonViewer/JsonObjectTree.cs
+++ b/JsonViewer/JsonObjectTree.cs
@@ -1,15 +1,16 @@
using System;
using System.Collections.Generic;
-using System.Runtime.Serialization;
-using System.Text.RegularExpressions;
-
+using System.Text;
using Newtonsoft.Json;
+using System.Collections.ObjectModel;
+using System.Runtime.Serialization;
+using System.Collections;
namespace EPocalipse.Json.Viewer
{
public enum JsonType { Object, Array, Value };
- internal class JsonParseError : ApplicationException
+ class JsonParseError : ApplicationException
{
public JsonParseError() : base() { }
public JsonParseError(string message) : base(message) { }
@@ -21,7 +22,6 @@ public JsonParseError(string message, Exception innerException) : base(message,
public class JsonObjectTree
{
private JsonObject _root;
- private static Regex dateRegex = new Regex("^/Date\\(([0-9]*)([+-][0-9]{4}){0,1}\\)/$");
public static JsonObjectTree Parse(string json)
{
@@ -44,7 +44,7 @@ public JsonObjectTree(object rootObject)
_root = ConvertToObject("JSON", rootObject);
}
- private static JsonObject ConvertToObject(string id, object jsonObject)
+ private JsonObject ConvertToObject(string id, object jsonObject)
{
JsonObject obj = CreateJsonObject(jsonObject);
obj.Id = id;
@@ -52,7 +52,7 @@ private static JsonObject ConvertToObject(string id, object jsonObject)
return obj;
}
- private static void AddChildren(object jsonObject, JsonObject obj)
+ private void AddChildren(object jsonObject, JsonObject obj)
{
JavaScriptObject javaScriptObject = jsonObject as JavaScriptObject;
if (javaScriptObject != null)
@@ -75,7 +75,7 @@ private static void AddChildren(object jsonObject, JsonObject obj)
}
}
- private static JsonObject CreateJsonObject(object jsonObject)
+ private JsonObject CreateJsonObject(object jsonObject)
{
JsonObject obj = new JsonObject();
if (jsonObject is JavaScriptArray)
@@ -84,22 +84,6 @@ private static JsonObject CreateJsonObject(object jsonObject)
obj.JsonType = JsonType.Object;
else
{
- if (typeof(string) == jsonObject.GetType()) {
- Match match = dateRegex.Match(jsonObject as string);
- if (match.Success) {
- // I'm not sure why this is match.Groups[1] and not match.Groups[0]
- // we need to convert milliseconds to windows ticks (one tick is one hundred nanoseconds (e-9))
- Int64 ticksSinceEpoch = Int64.Parse(match.Groups[1].Value) * (Int64)10e3;
- jsonObject = DateTime.SpecifyKind(new DateTime(1970, 1, 1).Add(new TimeSpan(ticksSinceEpoch)), DateTimeKind.Utc);
- // Take care of the timezone offset
- if (!string.IsNullOrEmpty(match.Groups[2].Value)) {
- Int64 timeZoneOffset = Int64.Parse(match.Groups[2].Value);
- jsonObject = ((DateTime)jsonObject).AddHours(timeZoneOffset/100);
- // Some timezones like India Tehran and Nepal have fractional offsets from GMT
- jsonObject = ((DateTime)jsonObject).AddMinutes(timeZoneOffset%100);
- }
- }
- }
obj.JsonType = JsonType.Value;
obj.Value = jsonObject;
}
diff --git a/JsonViewer/JsonObjectTypeConverter.cs b/JsonViewer/JsonObjectTypeConverter.cs
new file mode 100644
index 0000000..9aba16c
--- /dev/null
+++ b/JsonViewer/JsonObjectTypeConverter.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.ComponentModel;
+
+namespace EPocalipse.Json.Viewer
+{
+ public class JsonObjectTypeConverter: ExpandableObjectConverter
+ {
+ public JsonObjectTypeConverter()
+ {
+
+ }
+
+ public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
+ {
+ return base.CanConvertTo(context, destinationType);
+ }
+
+ public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
+ {
+ return base.ConvertTo(context, culture, value, destinationType);
+ }
+ }
+}
diff --git a/JsonViewer/JsonObjectVisualizer.cs b/JsonViewer/JsonObjectVisualizer.cs
index 9dd07b3..b3f6007 100644
--- a/JsonViewer/JsonObjectVisualizer.cs
+++ b/JsonViewer/JsonObjectVisualizer.cs
@@ -27,7 +27,7 @@ Control IJsonVisualizer.GetControl(JsonObject jsonObject)
void IJsonVisualizer.Visualize(JsonObject jsonObject)
{
- this.pgJsonObject.SelectedObject = new JsonTreeObjectTypeDescriptor(jsonObject);
+ this.pgJsonObject.SelectedObject = jsonObject;
}
diff --git a/JsonViewer/JsonTreeObjectTypeDescriptor.cs b/JsonViewer/JsonTreeObjectTypeDescriptor.cs
index 6ace502..52092f1 100644
--- a/JsonViewer/JsonTreeObjectTypeDescriptor.cs
+++ b/JsonViewer/JsonTreeObjectTypeDescriptor.cs
@@ -5,7 +5,15 @@
namespace EPocalipse.Json.Viewer
{
- class JsonTreeObjectTypeDescriptor : ICustomTypeDescriptor
+ class JsonObjectTypeDescriptionProvider : TypeDescriptionProvider
+ {
+ public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance)
+ {
+ return new JsonTreeObjectTypeDescriptor((JsonObject)instance);
+ }
+ }
+
+ class JsonTreeObjectTypeDescriptor : CustomTypeDescriptor, ICustomTypeDescriptor
{
JsonObject _jsonObject;
PropertyDescriptorCollection _propertyCollection;
@@ -20,59 +28,17 @@ private void InitPropertyCollection()
{
List propertyDescriptors = new List();
- foreach (JsonObject field in _jsonObject.Fields)
+ if (_jsonObject != null)
{
- PropertyDescriptor pd = new JsonTreeObjectPropertyDescriptor(field);
- propertyDescriptors.Add(pd);
+ foreach (JsonObject field in _jsonObject.Fields)
+ {
+ PropertyDescriptor pd = new JsonTreeObjectPropertyDescriptor(field);
+ propertyDescriptors.Add(pd);
+ }
}
_propertyCollection = new PropertyDescriptorCollection(propertyDescriptors.ToArray());
}
- AttributeCollection ICustomTypeDescriptor.GetAttributes()
- {
- return TypeDescriptor.GetAttributes(_jsonObject, true);
- }
-
- string ICustomTypeDescriptor.GetClassName()
- {
- return TypeDescriptor.GetClassName(_jsonObject, true);
- }
-
- string ICustomTypeDescriptor.GetComponentName()
- {
- return TypeDescriptor.GetComponentName(_jsonObject, true);
- }
-
- TypeConverter ICustomTypeDescriptor.GetConverter()
- {
- return TypeDescriptor.GetConverter(_jsonObject, true);
- }
-
- EventDescriptor ICustomTypeDescriptor.GetDefaultEvent()
- {
- return TypeDescriptor.GetDefaultEvent(_jsonObject, true);
- }
-
- PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty()
- {
- return null;
- }
-
- object ICustomTypeDescriptor.GetEditor(Type editorBaseType)
- {
- return TypeDescriptor.GetEditor(_jsonObject, editorBaseType, true);
- }
-
- EventDescriptorCollection ICustomTypeDescriptor.GetEvents(Attribute[] attributes)
- {
- return TypeDescriptor.GetEvents(this, attributes, true);
- }
-
- EventDescriptorCollection ICustomTypeDescriptor.GetEvents()
- {
- return TypeDescriptor.GetEvents(_jsonObject, true);
- }
-
PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties(Attribute[] attributes)
{
return _propertyCollection;
@@ -92,7 +58,7 @@ object ICustomTypeDescriptor.GetPropertyOwner(PropertyDescriptor pd)
class JsonTreeObjectPropertyDescriptor : PropertyDescriptor
{
JsonObject _jsonObject;
- JsonTreeObjectTypeDescriptor[] _jsonObjects;
+ JsonObject[] _jsonObjects;
public JsonTreeObjectPropertyDescriptor(JsonObject jsonObject)
: base(jsonObject.Id, null)
@@ -104,10 +70,10 @@ public JsonTreeObjectPropertyDescriptor(JsonObject jsonObject)
private void InitJsonObject()
{
- List jsonObjectList = new List();
+ List jsonObjectList = new List();
foreach (JsonObject field in _jsonObject.Fields)
{
- jsonObjectList.Add(new JsonTreeObjectTypeDescriptor(field));
+ jsonObjectList.Add(field);
}
_jsonObjects = jsonObjectList.ToArray();
}
@@ -130,9 +96,9 @@ public override object GetValue(object component)
switch (_jsonObject.JsonType)
{
case JsonType.Array:
- return _jsonObjects;
+ return "JsonArray";
case JsonType.Object:
- return _jsonObject;
+ return "JsonObject";
default:
return _jsonObject.Value;
}
@@ -142,7 +108,9 @@ public override bool IsReadOnly
{
get
{
- return false;
+ if (_jsonObject.JsonType == JsonType.Value)
+ return false;
+ return true;
}
}
@@ -153,9 +121,9 @@ public override Type PropertyType
switch (_jsonObject.JsonType)
{
case JsonType.Array:
- return typeof(object[]);
+ return typeof(string);
case JsonType.Object:
- return typeof(JsonObject);
+ return typeof(string);
default:
return _jsonObject.Value == null ? typeof(string) : _jsonObject.Value.GetType();
}
diff --git a/JsonViewer/JsonViewer.Designer.cs b/JsonViewer/JsonViewer.Designer.cs
index 2109e01..43c32cf 100644
--- a/JsonViewer/JsonViewer.Designer.cs
+++ b/JsonViewer/JsonViewer.Designer.cs
@@ -37,6 +37,7 @@ private void InitializeComponent()
this.mnuExpandAll = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
this.mnuCopy = new System.Windows.Forms.ToolStripMenuItem();
+ this.mnuCopyName = new System.Windows.Forms.ToolStripMenuItem();
this.mnuCopyValue = new System.Windows.Forms.ToolStripMenuItem();
this.imgList = new System.Windows.Forms.ImageList(this.components);
this.pnlFind = new System.Windows.Forms.Panel();
@@ -51,7 +52,7 @@ private void InitializeComponent()
this.tabControl = new System.Windows.Forms.TabControl();
this.pageTreeView = new System.Windows.Forms.TabPage();
this.pageTextView = new System.Windows.Forms.TabPage();
- this.txtJson = new System.Windows.Forms.TextBox();
+ this.txtJson = new System.Windows.Forms.RichTextBox();
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.btnPaste = new System.Windows.Forms.ToolStripButton();
this.btnCopy = new System.Windows.Forms.ToolStripButton();
@@ -60,10 +61,14 @@ private void InitializeComponent()
this.btnStrip = new System.Windows.Forms.ToolStripSplitButton();
this.btnStripToCurly = new System.Windows.Forms.ToolStripMenuItem();
this.btnStripToSqr = new System.Windows.Forms.ToolStripMenuItem();
- this.lblError = new System.Windows.Forms.LinkLabel();
this.toolStripSplitButton1 = new System.Windows.Forms.ToolStripSplitButton();
this.removenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.removeSpecialCharsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.btnViewSelected = new System.Windows.Forms.ToolStripButton();
+ this.lblError = new System.Windows.Forms.LinkLabel();
+ this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
+ this.backgroundWorker2 = new System.ComponentModel.BackgroundWorker();
+ this.btnPhpJsonDecode = new System.Windows.Forms.ToolStripButton();
this.spcViewer.Panel1.SuspendLayout();
this.spcViewer.Panel2.SuspendLayout();
this.spcViewer.SuspendLayout();
@@ -91,7 +96,7 @@ private void InitializeComponent()
//
this.spcViewer.Panel2.Controls.Add(this.pnlVisualizer);
this.spcViewer.Panel2.Controls.Add(this.cbVisualizers);
- this.spcViewer.Size = new System.Drawing.Size(778, 572);
+ this.spcViewer.Size = new System.Drawing.Size(778, 526);
this.spcViewer.SplitterDistance = 552;
this.spcViewer.TabIndex = 5;
//
@@ -100,13 +105,14 @@ private void InitializeComponent()
this.tvJson.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tvJson.ContextMenuStrip = this.mnuTree;
this.tvJson.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tvJson.FullRowSelect = true;
this.tvJson.HideSelection = false;
this.tvJson.ImageIndex = 0;
this.tvJson.ImageList = this.imgList;
this.tvJson.Location = new System.Drawing.Point(0, 0);
this.tvJson.Name = "tvJson";
this.tvJson.SelectedImageIndex = 0;
- this.tvJson.Size = new System.Drawing.Size(552, 540);
+ this.tvJson.Size = new System.Drawing.Size(552, 496);
this.tvJson.TabIndex = 3;
this.tvJson.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.tvJson_BeforeExpand);
this.tvJson.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tvJson_AfterSelect);
@@ -120,41 +126,49 @@ private void InitializeComponent()
this.mnuExpandAll,
this.toolStripMenuItem1,
this.mnuCopy,
+ this.mnuCopyName,
this.mnuCopyValue});
this.mnuTree.Name = "mnuTree";
- this.mnuTree.Size = new System.Drawing.Size(129, 98);
+ this.mnuTree.Size = new System.Drawing.Size(146, 120);
this.mnuTree.Opening += new System.ComponentModel.CancelEventHandler(this.mnuTree_Opening);
//
// mnuFind
//
this.mnuFind.Name = "mnuFind";
- this.mnuFind.Size = new System.Drawing.Size(128, 22);
+ this.mnuFind.Size = new System.Drawing.Size(145, 22);
this.mnuFind.Text = "&Find";
this.mnuFind.Click += new System.EventHandler(this.findToolStripMenuItem_Click);
//
// mnuExpandAll
//
this.mnuExpandAll.Name = "mnuExpandAll";
- this.mnuExpandAll.Size = new System.Drawing.Size(128, 22);
+ this.mnuExpandAll.Size = new System.Drawing.Size(145, 22);
this.mnuExpandAll.Text = "Expand &All";
this.mnuExpandAll.Click += new System.EventHandler(this.expandallToolStripMenuItem_Click);
//
// toolStripMenuItem1
//
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
- this.toolStripMenuItem1.Size = new System.Drawing.Size(125, 6);
+ this.toolStripMenuItem1.Size = new System.Drawing.Size(142, 6);
//
// mnuCopy
//
this.mnuCopy.Name = "mnuCopy";
- this.mnuCopy.Size = new System.Drawing.Size(128, 22);
+ this.mnuCopy.Size = new System.Drawing.Size(145, 22);
this.mnuCopy.Text = "&Copy";
this.mnuCopy.Click += new System.EventHandler(this.mnuCopy_Click);
//
+ // mnuCopyName
+ //
+ this.mnuCopyName.Name = "mnuCopyName";
+ this.mnuCopyName.Size = new System.Drawing.Size(145, 22);
+ this.mnuCopyName.Text = "Copy Name";
+ this.mnuCopyName.Click += new System.EventHandler(this.mnuCopyName_Click);
+ //
// mnuCopyValue
//
this.mnuCopyValue.Name = "mnuCopyValue";
- this.mnuCopyValue.Size = new System.Drawing.Size(128, 22);
+ this.mnuCopyValue.Size = new System.Drawing.Size(145, 22);
this.mnuCopyValue.Text = "Copy &Value";
this.mnuCopyValue.Click += new System.EventHandler(this.mnuCopyValue_Click);
//
@@ -172,11 +186,10 @@ private void InitializeComponent()
this.pnlFind.Controls.Add(this.txtFind);
this.pnlFind.Controls.Add(this.lblFind);
this.pnlFind.Dock = System.Windows.Forms.DockStyle.Bottom;
- this.pnlFind.Location = new System.Drawing.Point(0, 540);
+ this.pnlFind.Location = new System.Drawing.Point(0, 496);
this.pnlFind.Name = "pnlFind";
- this.pnlFind.Size = new System.Drawing.Size(552, 32);
+ this.pnlFind.Size = new System.Drawing.Size(552, 30);
this.pnlFind.TabIndex = 6;
- this.pnlFind.Visible = false;
//
// btnCloseFind
//
@@ -186,21 +199,21 @@ private void InitializeComponent()
this.btnCloseFind.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
this.btnCloseFind.FlatAppearance.BorderSize = 0;
this.btnCloseFind.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.btnCloseFind.Location = new System.Drawing.Point(525, 7);
+ this.btnCloseFind.Location = new System.Drawing.Point(525, 6);
this.btnCloseFind.Name = "btnCloseFind";
- this.btnCloseFind.Size = new System.Drawing.Size(16, 16);
+ this.btnCloseFind.Size = new System.Drawing.Size(16, 15);
this.btnCloseFind.TabIndex = 2;
this.btnCloseFind.UseVisualStyleBackColor = false;
this.btnCloseFind.Click += new System.EventHandler(this.btnCloseFind_Click);
//
// txtFind
//
- this.txtFind.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtFind.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
this.txtFind.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.txtFind.Location = new System.Drawing.Point(32, 6);
this.txtFind.Name = "txtFind";
- this.txtFind.Size = new System.Drawing.Size(479, 20);
+ this.txtFind.Size = new System.Drawing.Size(479, 21);
this.txtFind.TabIndex = 1;
this.txtFind.TextChanged += new System.EventHandler(this.txtFind_TextChanged);
this.txtFind.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtFind_KeyDown);
@@ -208,9 +221,9 @@ private void InitializeComponent()
// lblFind
//
this.lblFind.AutoSize = true;
- this.lblFind.Location = new System.Drawing.Point(3, 9);
+ this.lblFind.Location = new System.Drawing.Point(3, 8);
this.lblFind.Name = "lblFind";
- this.lblFind.Size = new System.Drawing.Size(27, 13);
+ this.lblFind.Size = new System.Drawing.Size(29, 12);
this.lblFind.TabIndex = 0;
this.lblFind.Text = "&Find";
//
@@ -218,9 +231,9 @@ private void InitializeComponent()
//
this.pnlVisualizer.ContextMenuStrip = this.mnuVisualizerPnl;
this.pnlVisualizer.Dock = System.Windows.Forms.DockStyle.Fill;
- this.pnlVisualizer.Location = new System.Drawing.Point(0, 21);
+ this.pnlVisualizer.Location = new System.Drawing.Point(0, 20);
this.pnlVisualizer.Name = "pnlVisualizer";
- this.pnlVisualizer.Size = new System.Drawing.Size(222, 551);
+ this.pnlVisualizer.Size = new System.Drawing.Size(222, 506);
this.pnlVisualizer.TabIndex = 6;
//
// mnuVisualizerPnl
@@ -229,7 +242,7 @@ private void InitializeComponent()
this.mnuShowOnRight,
this.mnuShowOnBottom});
this.mnuVisualizerPnl.Name = "mnuVisualizerPnl";
- this.mnuVisualizerPnl.Size = new System.Drawing.Size(109, 48);
+ this.mnuVisualizerPnl.Size = new System.Drawing.Size(120, 48);
//
// mnuShowOnRight
//
@@ -237,7 +250,7 @@ private void InitializeComponent()
this.mnuShowOnRight.CheckOnClick = true;
this.mnuShowOnRight.CheckState = System.Windows.Forms.CheckState.Checked;
this.mnuShowOnRight.Name = "mnuShowOnRight";
- this.mnuShowOnRight.Size = new System.Drawing.Size(108, 22);
+ this.mnuShowOnRight.Size = new System.Drawing.Size(119, 22);
this.mnuShowOnRight.Text = "&Right";
this.mnuShowOnRight.Click += new System.EventHandler(this.rightToolStripMenuItem_Click);
//
@@ -245,7 +258,7 @@ private void InitializeComponent()
//
this.mnuShowOnBottom.CheckOnClick = true;
this.mnuShowOnBottom.Name = "mnuShowOnBottom";
- this.mnuShowOnBottom.Size = new System.Drawing.Size(108, 22);
+ this.mnuShowOnBottom.Size = new System.Drawing.Size(119, 22);
this.mnuShowOnBottom.Text = "&Bottom";
this.mnuShowOnBottom.Click += new System.EventHandler(this.rightToolStripMenuItem_Click);
//
@@ -257,7 +270,7 @@ private void InitializeComponent()
this.cbVisualizers.FormattingEnabled = true;
this.cbVisualizers.Location = new System.Drawing.Point(0, 0);
this.cbVisualizers.Name = "cbVisualizers";
- this.cbVisualizers.Size = new System.Drawing.Size(222, 21);
+ this.cbVisualizers.Size = new System.Drawing.Size(222, 20);
this.cbVisualizers.Sorted = true;
this.cbVisualizers.TabIndex = 7;
this.cbVisualizers.SelectedIndexChanged += new System.EventHandler(this.cbVisualizers_SelectedIndexChanged);
@@ -271,7 +284,7 @@ private void InitializeComponent()
this.tabControl.Location = new System.Drawing.Point(0, 0);
this.tabControl.Name = "tabControl";
this.tabControl.SelectedIndex = 0;
- this.tabControl.Size = new System.Drawing.Size(792, 604);
+ this.tabControl.Size = new System.Drawing.Size(792, 558);
this.tabControl.TabIndex = 6;
//
// pageTreeView
@@ -280,7 +293,7 @@ private void InitializeComponent()
this.pageTreeView.Location = new System.Drawing.Point(4, 22);
this.pageTreeView.Name = "pageTreeView";
this.pageTreeView.Padding = new System.Windows.Forms.Padding(3);
- this.pageTreeView.Size = new System.Drawing.Size(784, 578);
+ this.pageTreeView.Size = new System.Drawing.Size(784, 532);
this.pageTreeView.TabIndex = 0;
this.pageTreeView.Text = "Viewer";
this.pageTreeView.UseVisualStyleBackColor = true;
@@ -293,26 +306,21 @@ private void InitializeComponent()
this.pageTextView.Location = new System.Drawing.Point(4, 22);
this.pageTextView.Name = "pageTextView";
this.pageTextView.Padding = new System.Windows.Forms.Padding(3);
- this.pageTextView.Size = new System.Drawing.Size(784, 578);
+ this.pageTextView.Size = new System.Drawing.Size(784, 532);
this.pageTextView.TabIndex = 1;
this.pageTextView.Text = "Text";
this.pageTextView.UseVisualStyleBackColor = true;
//
// txtJson
//
- this.txtJson.AcceptsReturn = true;
- this.txtJson.AcceptsTab = true;
- this.txtJson.BackColor = System.Drawing.SystemColors.Info;
- this.txtJson.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.txtJson.Dock = System.Windows.Forms.DockStyle.Fill;
this.txtJson.HideSelection = false;
this.txtJson.Location = new System.Drawing.Point(3, 28);
- this.txtJson.MaxLength = 0;
- this.txtJson.Multiline = true;
this.txtJson.Name = "txtJson";
- this.txtJson.ScrollBars = System.Windows.Forms.ScrollBars.Both;
- this.txtJson.Size = new System.Drawing.Size(778, 523);
- this.txtJson.TabIndex = 4;
+ this.txtJson.Size = new System.Drawing.Size(778, 479);
+ this.txtJson.TabIndex = 7;
+ this.txtJson.Text = "";
+ this.txtJson.SelectionChanged += new System.EventHandler(this.txtJson_SelectionChanged);
this.txtJson.TextChanged += new System.EventHandler(this.txtJson_TextChanged);
//
// toolStrip1
@@ -323,7 +331,9 @@ private void InitializeComponent()
this.toolStripSeparator1,
this.btnFormat,
this.btnStrip,
- this.toolStripSplitButton1});
+ this.toolStripSplitButton1,
+ this.btnViewSelected,
+ this.btnPhpJsonDecode});
this.toolStrip1.Location = new System.Drawing.Point(3, 3);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(778, 25);
@@ -336,7 +346,7 @@ private void InitializeComponent()
this.btnPaste.Image = ((System.Drawing.Image)(resources.GetObject("btnPaste.Image")));
this.btnPaste.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btnPaste.Name = "btnPaste";
- this.btnPaste.Size = new System.Drawing.Size(38, 22);
+ this.btnPaste.Size = new System.Drawing.Size(43, 22);
this.btnPaste.Text = "&Paste";
this.btnPaste.Click += new System.EventHandler(this.btnPaste_Click);
//
@@ -346,7 +356,7 @@ private void InitializeComponent()
this.btnCopy.Image = ((System.Drawing.Image)(resources.GetObject("btnCopy.Image")));
this.btnCopy.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btnCopy.Name = "btnCopy";
- this.btnCopy.Size = new System.Drawing.Size(36, 22);
+ this.btnCopy.Size = new System.Drawing.Size(42, 22);
this.btnCopy.Text = "&Copy";
this.btnCopy.Click += new System.EventHandler(this.btnCopy_Click);
//
@@ -361,7 +371,7 @@ private void InitializeComponent()
this.btnFormat.Image = ((System.Drawing.Image)(resources.GetObject("btnFormat.Image")));
this.btnFormat.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btnFormat.Name = "btnFormat";
- this.btnFormat.Size = new System.Drawing.Size(45, 22);
+ this.btnFormat.Size = new System.Drawing.Size(53, 22);
this.btnFormat.Text = "&Format";
this.btnFormat.Click += new System.EventHandler(this.btnFormat_Click);
//
@@ -374,39 +384,24 @@ private void InitializeComponent()
this.btnStrip.Image = ((System.Drawing.Image)(resources.GetObject("btnStrip.Image")));
this.btnStrip.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btnStrip.Name = "btnStrip";
- this.btnStrip.Size = new System.Drawing.Size(71, 22);
+ this.btnStrip.Size = new System.Drawing.Size(79, 22);
this.btnStrip.Text = "Strip to {}";
this.btnStrip.ButtonClick += new System.EventHandler(this.btnStripToCurly_Click);
//
// btnStripToCurly
//
this.btnStripToCurly.Name = "btnStripToCurly";
- this.btnStripToCurly.Size = new System.Drawing.Size(152, 22);
+ this.btnStripToCurly.Size = new System.Drawing.Size(131, 22);
this.btnStripToCurly.Text = "Strip to {}";
this.btnStripToCurly.Click += new System.EventHandler(this.btnStripToCurly_Click);
//
// btnStripToSqr
//
this.btnStripToSqr.Name = "btnStripToSqr";
- this.btnStripToSqr.Size = new System.Drawing.Size(152, 22);
+ this.btnStripToSqr.Size = new System.Drawing.Size(131, 22);
this.btnStripToSqr.Text = "Strip to []";
this.btnStripToSqr.Click += new System.EventHandler(this.btnStripToSqr_Click);
//
- // lblError
- //
- this.lblError.Dock = System.Windows.Forms.DockStyle.Bottom;
- this.lblError.ForeColor = System.Drawing.Color.Red;
- this.lblError.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline;
- this.lblError.LinkColor = System.Drawing.Color.Red;
- this.lblError.Location = new System.Drawing.Point(3, 551);
- this.lblError.Name = "lblError";
- this.lblError.Size = new System.Drawing.Size(778, 24);
- this.lblError.TabIndex = 5;
- this.lblError.TabStop = true;
- this.lblError.Text = "aa";
- this.lblError.VisitedLinkColor = System.Drawing.Color.Red;
- this.lblError.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lblError_LinkClicked);
- //
// toolStripSplitButton1
//
this.toolStripSplitButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
@@ -416,31 +411,67 @@ private void InitializeComponent()
this.toolStripSplitButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripSplitButton1.Image")));
this.toolStripSplitButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripSplitButton1.Name = "toolStripSplitButton1";
- this.toolStripSplitButton1.Size = new System.Drawing.Size(130, 22);
+ this.toolStripSplitButton1.Size = new System.Drawing.Size(152, 22);
this.toolStripSplitButton1.Text = "Remove new lines (\\n)";
this.toolStripSplitButton1.ButtonClick += new System.EventHandler(this.removeNewLineMenuItem_Click);
//
// removenToolStripMenuItem
//
this.removenToolStripMenuItem.Name = "removenToolStripMenuItem";
- this.removenToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
+ this.removenToolStripMenuItem.Size = new System.Drawing.Size(219, 22);
this.removenToolStripMenuItem.Text = "Remove new lines (\\n)";
this.removenToolStripMenuItem.Click += new System.EventHandler(this.removeNewLineMenuItem_Click);
//
// removeSpecialCharsToolStripMenuItem
//
this.removeSpecialCharsToolStripMenuItem.Name = "removeSpecialCharsToolStripMenuItem";
- this.removeSpecialCharsToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
+ this.removeSpecialCharsToolStripMenuItem.Size = new System.Drawing.Size(219, 22);
this.removeSpecialCharsToolStripMenuItem.Text = "Remove special chars (\\)";
this.removeSpecialCharsToolStripMenuItem.Click += new System.EventHandler(this.removeSpecialCharsToolStripMenuItem_Click);
//
+ // btnViewSelected
+ //
+ this.btnViewSelected.CheckOnClick = true;
+ this.btnViewSelected.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+ this.btnViewSelected.Image = ((System.Drawing.Image)(resources.GetObject("btnViewSelected.Image")));
+ this.btnViewSelected.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.btnViewSelected.Name = "btnViewSelected";
+ this.btnViewSelected.Size = new System.Drawing.Size(92, 22);
+ this.btnViewSelected.Text = "View Selected";
+ this.btnViewSelected.Click += new System.EventHandler(this.btnViewSelected_Click);
+ //
+ // lblError
+ //
+ this.lblError.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.lblError.ForeColor = System.Drawing.Color.Red;
+ this.lblError.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline;
+ this.lblError.LinkColor = System.Drawing.Color.Red;
+ this.lblError.Location = new System.Drawing.Point(3, 507);
+ this.lblError.Name = "lblError";
+ this.lblError.Size = new System.Drawing.Size(778, 22);
+ this.lblError.TabIndex = 5;
+ this.lblError.TabStop = true;
+ this.lblError.Text = "aa";
+ this.lblError.VisitedLinkColor = System.Drawing.Color.Red;
+ this.lblError.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lblError_LinkClicked);
+ //
+ // btnPhpJsonDecode
+ //
+ this.btnPhpJsonDecode.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+ this.btnPhpJsonDecode.Image = ((System.Drawing.Image)(resources.GetObject("btnPhpJsonDecode.Image")));
+ this.btnPhpJsonDecode.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.btnPhpJsonDecode.Name = "btnPhpJsonDecode";
+ this.btnPhpJsonDecode.Size = new System.Drawing.Size(105, 22);
+ this.btnPhpJsonDecode.Text = "PhpJsonDecode";
+ this.btnPhpJsonDecode.Click += new System.EventHandler(this.btnPhpJsonDecode_Click);
+ //
// JsonViewer
//
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.tabControl);
this.Name = "JsonViewer";
- this.Size = new System.Drawing.Size(792, 604);
+ this.Size = new System.Drawing.Size(792, 558);
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.JsonViewer_KeyDown);
this.spcViewer.Panel1.ResumeLayout(false);
this.spcViewer.Panel2.ResumeLayout(false);
@@ -467,7 +498,6 @@ private void InitializeComponent()
private System.Windows.Forms.TabControl tabControl;
private System.Windows.Forms.TabPage pageTreeView;
private System.Windows.Forms.TabPage pageTextView;
- private System.Windows.Forms.TextBox txtJson;
private System.Windows.Forms.LinkLabel lblError;
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton btnFormat;
@@ -495,6 +525,11 @@ private void InitializeComponent()
private System.Windows.Forms.ToolStripSplitButton toolStripSplitButton1;
private System.Windows.Forms.ToolStripMenuItem removenToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem removeSpecialCharsToolStripMenuItem;
-
+ private System.Windows.Forms.ToolStripButton btnViewSelected;
+ private System.Windows.Forms.RichTextBox txtJson;
+ private System.ComponentModel.BackgroundWorker backgroundWorker1;
+ private System.ComponentModel.BackgroundWorker backgroundWorker2;
+ private System.Windows.Forms.ToolStripMenuItem mnuCopyName;
+ private System.Windows.Forms.ToolStripButton btnPhpJsonDecode;
}
}
diff --git a/JsonViewer/JsonViewer.cs b/JsonViewer/JsonViewer.cs
index 654eb85..8b8a7ec 100644
--- a/JsonViewer/JsonViewer.cs
+++ b/JsonViewer/JsonViewer.cs
@@ -21,6 +21,7 @@ public partial class JsonViewer : UserControl
private PluginsManager _pluginsManager = new PluginsManager();
bool _updating;
Control _lastVisualizerControl;
+ private bool ignoreSelChange;
public JsonViewer()
{
@@ -130,8 +131,16 @@ private void GetParseErrorDetails(Exception parserError)
private void MarkError(ErrorDetails _errorDetails)
{
- txtJson.Select(Math.Max(0, _errorDetails.Position - 1), 10);
- txtJson.ScrollToCaret();
+ ignoreSelChange = true;
+ try
+ {
+ txtJson.Select(Math.Max(0, _errorDetails.Position - 1), 10);
+ txtJson.ScrollToCaret();
+ }
+ finally
+ {
+ ignoreSelChange = false;
+ }
}
private void VisualizeJsonTree(JsonObjectTree tree)
@@ -158,6 +167,7 @@ private void AddNode(TreeNodeCollection nodes, JsonObject jsonObject)
}
}
+ [Browsable(false)]
public ErrorDetails ErrorDetails
{
get
@@ -193,6 +203,7 @@ public void ClearInfo()
lblError.Text = String.Empty;
}
+ [Browsable(false)]
public bool HasErrors
{
get
@@ -204,6 +215,7 @@ public bool HasErrors
private void txtJson_TextChanged(object sender, EventArgs e)
{
Json = txtJson.Text;
+ btnViewSelected.Checked = false;
}
private void txtFind_TextChanged(object sender, EventArgs e)
@@ -594,12 +606,33 @@ private void mnuCopy_Click(object sender, EventArgs e)
}
}
+ private void mnuCopyName_Click(object sender, EventArgs e)
+ {
+ JsonViewerTreeNode node = GetSelectedTreeNode();
+
+ if (node != null && node.JsonObject.Id != null)
+ {
+ JsonObject obj = node.Tag as JsonObject;
+ Clipboard.SetText(obj.Id);
+ }
+ else
+ {
+ Clipboard.SetText("");
+ }
+
+ }
+
private void mnuCopyValue_Click(object sender, EventArgs e)
{
JsonViewerTreeNode node = GetSelectedTreeNode();
- if (node != null && node.JsonObject.Value != null)
+ if (node != null && node.Tag != null)
{
- Clipboard.SetText(node.JsonObject.Value.ToString());
+ JsonObject obj = node.Tag as JsonObject;
+ Clipboard.SetText(obj.Value.ToString());
+ }
+ else
+ {
+ Clipboard.SetText("null");
}
}
@@ -633,6 +666,34 @@ private void StripFromText(params char[] chars)
}
txtJson.Text = text;
}
+
+ private void btnViewSelected_Click(object sender, EventArgs e)
+ {
+ if (btnViewSelected.Checked)
+ _json = txtJson.SelectedText.Trim();
+ else
+ _json = txtJson.Text.Trim();
+ Redraw();
+ }
+
+ private void txtJson_SelectionChanged(object sender, EventArgs e)
+ {
+ if (btnViewSelected.Checked && !ignoreSelChange)
+ {
+ _json = txtJson.SelectedText.Trim();
+ Redraw();
+ }
+ }
+
+ private void btnPhpJsonDecode_Click(object sender, EventArgs e)
+ {
+ string text = txtJson.Text;
+ if (!string.IsNullOrEmpty(text))
+ {
+ string str2 = JavaScriptConvert.SerializeObject(PhpSerializer.UnSerialize(Encoding.Default.GetBytes(text), Encoding.Default));
+ this.txtJson.Text = str2;
+ }
+ }
}
public struct ErrorDetails
diff --git a/JsonViewer/JsonViewer.csproj b/JsonViewer/JsonViewer.csproj
index b0522b7..3546895 100644
--- a/JsonViewer/JsonViewer.csproj
+++ b/JsonViewer/JsonViewer.csproj
@@ -1,5 +1,5 @@
-
+
Debug
AnyCPU
@@ -16,24 +16,37 @@
SAK
- 2.0
+ 4.0
- C:\Users\zippy\AppData\Roaming\ICSharpCode/SharpDevelop3.0\Settings.SourceAnalysis
- v2.0
- False
- False
- false
+ v4.6.1
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
true
- Full
+ full
false
bin\Debug\
DEBUG;TRACE
prompt
4
+ AllRules.ruleset
+ false
pdbonly
@@ -42,16 +55,8 @@
TRACE
prompt
4
-
-
- False
-
-
- False
- Auto
- 4194304
- AnyCPU
- 4096
+ AllRules.ruleset
+ false
@@ -73,6 +78,8 @@
GridVisualizer.cs
+
+
True
True
@@ -123,9 +130,21 @@
-
- PreserveNewest
-
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ true
+
+
+ False
+ Windows Installer 3.1
+ true
+