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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 + /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 +